@talend/react-components
Version:
Set of react components.
55 lines (54 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useColumnsVisibility = useColumnsVisibility;
var _react = require("react");
const isVisible = (dataKey, columnsVisibility, initialVisibleColumns) => {
if (columnsVisibility) {
const column = columnsVisibility.find(col => col.dataKey === dataKey);
return column ? column.visible : true;
} else if (initialVisibleColumns.length) return initialVisibleColumns.includes(dataKey);
return true;
};
function useColumnsVisibility(columns = [], initialVisibleColumns = [], storageKey) {
const [columnsVisibility, setColumnsVisibility] = (0, _react.useState)(() => {
let visibleColumns;
if (storageKey) {
const nextColumnsVisibility = localStorage.getItem(storageKey);
try {
visibleColumns = nextColumnsVisibility && JSON.parse(nextColumnsVisibility);
} catch (e) {}
}
return visibleColumns;
});
const visibleColumns = (0, _react.useMemo)(() => columnsVisibility === null || columnsVisibility === void 0 ? void 0 : columnsVisibility.filter(({
visible
}) => !!visible).map(({
dataKey
}) => dataKey), [columnsVisibility]);
const setVisibleColumns = (columns, nextVisibleColumns) => {
if (columns.length) {
const nextColumnsVisibility = columns.map(({
dataKey
}) => ({
dataKey,
visible: nextVisibleColumns.includes(dataKey)
}));
if (storageKey) localStorage.setItem(storageKey, JSON.stringify(nextColumnsVisibility));
setColumnsVisibility(nextColumnsVisibility);
}
};
(0, _react.useEffect)(() => {
setVisibleColumns(columns, columns.filter(({
dataKey
}) => isVisible(dataKey, columnsVisibility, initialVisibleColumns)).map(({
dataKey
}) => dataKey));
}, [columns]);
return {
visibleColumns,
setVisibleColumns: nextVisibleColumns => setVisibleColumns(columns, nextVisibleColumns)
};
}
//# sourceMappingURL=useColumnsVisibility.hook.js.map