UNPKG

@vlsergey/react-bootstrap-pagetable

Version:

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

83 lines (82 loc) 3.42 kB
import { __read } from "tslib"; import { useCallback, useMemo, useState } from 'react'; import calcFieldsOrderWithNewOnes from './calcFieldsOrderWithNewOnes'; function useLocalStorage(idPrefix, key, defaultValues) { var _a = __read(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 = 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]; } export default function useStateOfVisibleFields(disableVisibleFieldsChange, idPrefix, itemModel) { var allAllowedKeys = useMemo(function () { return itemModel.fields.map(function (_a) { var key = _a.key; return key; }); }, [itemModel.fields]); var defaultKeysOrder = 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 = __read(useLocalStorage(idPrefix, 'hidden', defaultHidden), 2), hidden = _a[0], setHidden = _a[1]; var _b = __read(useLocalStorage(idPrefix, 'order', defaultKeysOrder), 2), order = _b[0], setOrder = _b[1]; var visibleFields = useMemo(function () { return calcFieldsOrderWithNewOnes(allAllowedKeys, defaultKeysOrder, order, hidden); }, [allAllowedKeys, defaultKeysOrder, order, hidden]); var setVisibleFields = useCallback(function (newVisibleFields) { var newHiddenFields = defaultKeysOrder.filter(function (key) { return !newVisibleFields.includes(key); }); setHidden(newHiddenFields); setOrder(newVisibleFields); }, [defaultKeysOrder, setHidden, setOrder]); var mockVisibleFields = 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 = useCallback(function () { throw new Error('Visible fields changing feature is disabled'); }, []); if (disableVisibleFieldsChange) { return [mockVisibleFields, setMockVisibleFields]; } return [visibleFields, setVisibleFields]; }