UNPKG

@vlsergey/react-bootstrap-pagetable

Version:

Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.

86 lines (85 loc) 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); var calcFieldsOrderWithNewOnes_1 = tslib_1.__importDefault(require("./calcFieldsOrderWithNewOnes")); function useLocalStorage(idPrefix, key, defaultValues) { var _a = tslib_1.__read(react_1.useState(function () { if (!!idPrefix && !!localStorage) { try { var json = localStorage.getItem(idPrefix + '_useVisibleFieldsState_' + key); if (json) { var result = JSON.parse(json); if (result.length > 0) { return result; } } } catch (error) { console.warn('Unable to load ' + key + ' from localStorage'); console.warn(error); } } return defaultValues; }), 2), valuesReact = _a[0], setValuesReact = _a[1]; var setValues = react_1.useCallback(function (newValues) { setValuesReact(newValues); try { if (!!idPrefix && !!localStorage) { localStorage.setItem(idPrefix + '_useVisibleFieldsState_' + key, JSON.stringify(newValues)); } } catch (error) { console.warn('Unable to save ' + key + ' to localStorage'); console.warn(error); } }, [idPrefix, key, setValuesReact]); return [valuesReact, setValues]; } function useStateOfVisibleFields(disableVisibleFieldsChange, idPrefix, itemModel) { var allAllowedKeys = react_1.useMemo(function () { return itemModel.fields.map(function (_a) { var key = _a.key; return key; }); }, [itemModel.fields]); var defaultKeysOrder = react_1.useMemo(function () { return itemModel .fields .filter(function (_a) { var hiddenByDefault = _a.hiddenByDefault; return !hiddenByDefault; }) .map(function (_a) { var key = _a.key; return key; }); }, [itemModel.fields]); var defaultHidden = []; var _a = tslib_1.__read(useLocalStorage(idPrefix, 'hidden', defaultHidden), 2), hidden = _a[0], setHidden = _a[1]; var _b = tslib_1.__read(useLocalStorage(idPrefix, 'order', defaultKeysOrder), 2), order = _b[0], setOrder = _b[1]; var visibleFields = react_1.useMemo(function () { return calcFieldsOrderWithNewOnes_1.default(allAllowedKeys, defaultKeysOrder, order, hidden); }, [allAllowedKeys, defaultKeysOrder, order, hidden]); var setVisibleFields = react_1.useCallback(function (newVisibleFields) { var newHiddenFields = defaultKeysOrder.filter(function (key) { return !newVisibleFields.includes(key); }); setHidden(newHiddenFields); setOrder(newVisibleFields); }, [defaultKeysOrder, setHidden, setOrder]); var mockVisibleFields = react_1.useMemo(function () { return itemModel .fields .filter(function (_a) { var hiddenByDefault = _a.hiddenByDefault; return !hiddenByDefault; }) .map(function (_a) { var key = _a.key; return key; }); }, [itemModel]); var setMockVisibleFields = react_1.useCallback(function () { throw new Error('Visible fields changing feature is disabled'); }, []); if (disableVisibleFieldsChange) { return [mockVisibleFields, setMockVisibleFields]; } return [visibleFields, setVisibleFields]; } exports.default = useStateOfVisibleFields;