burdy
Version:
Open Source Headless Platform
79 lines (78 loc) • 2.84 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useSelection = void 0;
const react_1 = require("@fluentui/react");
const react_2 = require("react");
class ExtendedSelection extends react_1.Selection {
constructor() {
super(...arguments);
this.defaultSelectedItems = null;
}
select(itemsOrKeys, clearRest = false) {
if (clearRest)
this.deselectAll();
itemsOrKeys.forEach((item) => {
const key = this.convertToKey(item);
this.setKeySelected(key, true, false);
});
}
deselect(itemsOrKeys) {
itemsOrKeys.forEach((item) => {
const key = this.convertToKey(item);
this.setKeySelected(key, false, false);
});
}
deselectAll() {
this.deselect(this.getSelection());
}
selectAll() {
this.select(this.getItems());
}
setDefaultSelectedItems(itemsOrKeys) {
this.defaultSelectedItems = itemsOrKeys;
}
clearDefaultSelectedItems() {
this.defaultSelectedItems = null;
}
setItems(items, shouldClear) {
var _a;
super.setItems(items, shouldClear);
// For some reason method gets called with null items sometimes
const notEmpty = (_a = items.some) === null || _a === void 0 ? void 0 : _a.call(items, (item) => item !== undefined);
if (this.defaultSelectedItems && (items === null || items === void 0 ? void 0 : items.length) > 0 && notEmpty) {
this.select(this.defaultSelectedItems);
this.defaultSelectedItems = null;
}
}
convertToKey(itemOrKey) {
if (typeof itemOrKey === 'string') {
return itemOrKey;
}
if (typeof itemOrKey === 'number') {
return itemOrKey.toString();
}
return this.getKey(itemOrKey);
}
}
const useSelection = (constructor, deps = []) => (0, react_2.useMemo)(() => {
const { defaultSelectedItems } = constructor, original = __rest(constructor, ["defaultSelectedItems"]);
// @ts-ignore
const selection = new ExtendedSelection(original);
if (defaultSelectedItems) {
selection.setDefaultSelectedItems(defaultSelectedItems);
}
return selection;
}, deps);
exports.useSelection = useSelection;
exports.default = ExtendedSelection;