burdy
Version:
Open Source Headless Platform
138 lines (137 loc) • 6.02 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ColumnsViewContextProvider = exports.withColumns = exports.useColumns = void 0;
const react_1 = __importStar(require("react"));
const hoc_1 = require("../helpers/hoc");
const lodash_1 = __importDefault(require("lodash"));
const ColumnsViewContext = (0, react_1.createContext)({});
const flatToObj = (flat = []) => {
const all = {};
[...flat]
.filter((item) => !!item)
.forEach((item) => {
all[item.id] = Object.assign({}, item);
});
return all;
};
const flatToHierarchy = (flat, sort) => {
const roots = []; // items without parent
const all = flatToObj(flat);
Object.keys(all).forEach((id) => {
const item = all[id];
if (item.parentId === null || item.parentId === undefined) {
roots.push(item);
if (sort) {
roots.sort(sort);
}
}
else if (all[item.parentId]) {
const p = all[item.parentId];
if (!(p === null || p === void 0 ? void 0 : p.children)) {
p.children = [];
}
p.children.push(item);
if (sort) {
p.children.sort(sort);
}
}
});
return roots;
};
const ColumnsViewContextProvider = ({ children, items, selection, loading, defaultSelected, sort, }) => {
const [selectedItems, setSelectedItems] = (0, react_1.useState)([]);
const [hierarchical, setHierarchical] = (0, react_1.useState)([]);
const [itemsObj, setItemsObj] = (0, react_1.useState)({});
const [ancestorsObj, setAncestorsObj] = (0, react_1.useState)({});
const [loaded, setLoaded] = (0, react_1.useState)(false);
const [finished, setFinished] = (0, react_1.useState)(false);
(0, react_1.useEffect)(() => {
if (!lodash_1.default.isEqual(items, selection.getItems()) && !loading) {
setHierarchical(flatToHierarchy(items, sort));
setItemsObj(flatToObj(items));
selection.setItems(items, true);
if (!loaded) {
(defaultSelected || []).forEach((key) => {
selection.setKeySelected(key, true, false);
});
setLoaded(true);
}
else {
selectedItems.forEach((item) => {
selection.setKeySelected(item === null || item === void 0 ? void 0 : item.key, true, false);
});
}
}
setFinished(true);
}, [items, loading]);
(0, react_1.useEffect)(() => {
if (!lodash_1.default.isEqual(selection.getSelection(), selectedItems)) {
setSelectedItems(selection.getSelection());
}
}, [selection.getSelection()]);
const ancestors = (0, react_1.useMemo)(() => {
var _a, _b, _c;
const list = [];
if ((selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) === 1) {
let item = selectedItems[0];
list.push(item);
while (item === null || item === void 0 ? void 0 : item.parentId) {
list.push(itemsObj[item === null || item === void 0 ? void 0 : item.parentId]);
item = itemsObj[item === null || item === void 0 ? void 0 : item.parentId];
}
setAncestorsObj(flatToObj(list));
return list;
}
if ((selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 1) {
if (((_a = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems[0]) === null || _a === void 0 ? void 0 : _a.parentId) &&
itemsObj[(_b = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems[0]) === null || _b === void 0 ? void 0 : _b.parentId]) {
let item = itemsObj[(_c = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems[0]) === null || _c === void 0 ? void 0 : _c.parentId];
list.push(item);
while (item === null || item === void 0 ? void 0 : item.parentId) {
item = itemsObj[item === null || item === void 0 ? void 0 : item.parentId];
list.push(item);
}
setAncestorsObj(flatToObj(list));
return list;
}
}
setAncestorsObj({});
return null;
}, [selectedItems]);
return (react_1.default.createElement(ColumnsViewContext.Provider, { value: {
selection,
selectedItems,
hierarchical,
itemsObj,
ancestors,
ancestorsObj,
finished,
} }, children));
};
exports.ColumnsViewContextProvider = ColumnsViewContextProvider;
const useColumns = () => (0, react_1.useContext)(ColumnsViewContext);
exports.useColumns = useColumns;
const withColumns = (0, hoc_1.withWrapper)(ColumnsViewContextProvider);
exports.withColumns = withColumns;