@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
JavaScript
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];
}