UNPKG

burdy

Version:

Open Source Headless Platform

138 lines (137 loc) 6.02 kB
"use strict"; 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;