sp-app-react
Version:
React based Controls and Utilities for building applications in SharePoint
105 lines (104 loc) • 4.22 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SPPicker = void 0;
var formik_1 = require("formik");
var react_1 = __importDefault(require("react"));
var Pickers_1 = require("@fluentui/react/lib/Pickers");
var react_2 = require("@fluentui/react");
// const testTags: ITag[] = [
// 'black',
// 'blue',
// 'brown',
// 'cyan',
// 'green',
// 'magenta',
// 'mauve',
// 'orange',
// 'pink',
// 'purple',
// 'red',
// 'rose',
// 'violet',
// 'white',
// 'yellow',
// ].map(item => ({ key: item, name: item }));
//filter: string, selectedItems?: ITag[] | undefined
var listContainsTagList = function (tag, tagList) {
if (!tagList || !tagList.length || tagList.length === 0) {
return false;
}
return tagList.some(function (compareTag) { return compareTag.key === tag.key; });
};
var getTextFromItem = function (item) { return item.name; };
var pickerSuggestionsProps = {
suggestionsHeaderText: 'Suggested tags',
noResultsFoundText: 'No keywords found. Press enter to add new keyword.',
};
var createGenericItem = function (input, validationState) {
var itag = { key: input, name: input };
return itag;
};
var handleValidateInput = function (input) {
return Pickers_1.ValidationState.valid;
};
function SPPicker(props) {
var _a = __read(formik_1.useField(props.name), 3), field = _a[0], meta = _a[1], helpers = _a[2];
var onItemSelected = function (selectedItem) {
return selectedItem;
};
var selectedItems = field.value ? field.value.split(',').map(function (i) { return ({ key: i, name: i }); }) : [];
var handleChange = function (items) {
// const newValue = {
// __metadata: {
// type: "Collection(Edm.String)"
// },
// results: items ? items.map(i => i.name) : []
// }
var newValue = items ? items.map(function (i) { return i.name; }).join(',') : "";
helpers.setValue(newValue);
if (props.onChange)
props.onChange(newValue);
};
var filterSuggestedTags = function (filter, selectedItems) {
var tagList = props.options.map(function (i) { return ({ key: i, name: i }); });
return filter
? tagList.filter(function (tag) { return tag.name.toLowerCase().indexOf(filter.toLowerCase()) === 0 && !listContainsTagList(tag, selectedItems); })
: [];
};
return (react_1.default.createElement("div", null,
react_1.default.createElement(react_2.Label, __assign({}, props), props.label),
props.readOnly
? react_1.default.createElement(react_2.Text, null, field.value)
: react_1.default.createElement(Pickers_1.TagPicker, __assign({}, props, { removeButtonAriaLabel: "Remove", onResolveSuggestions: filterSuggestedTags, getTextFromItem: getTextFromItem, pickerSuggestionsProps: pickerSuggestionsProps, onItemSelected: onItemSelected, createGenericItem: createGenericItem, onValidateInput: handleValidateInput, onChange: handleChange, selectedItems: selectedItems }))));
}
exports.SPPicker = SPPicker;
;