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