UNPKG

@coveord/plasma-mantine

Version:

A Plasma flavoured Mantine theme

336 lines (335 loc) 13.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "useTable", { enumerable: true, get: function() { return useTable; } }); var _instanceof = require("@swc/helpers/_/_instanceof"); var _interop_require_default = require("@swc/helpers/_/_interop_require_default"); var _object_spread = require("@swc/helpers/_/_object_spread"); var _object_spread_props = require("@swc/helpers/_/_object_spread_props"); var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array"); var _hooks = require("@mantine/hooks"); var _lodashdefaultsdeep = /*#__PURE__*/ _interop_require_default._(require("lodash.defaultsdeep")); var _react = require("react"); var _useurlsyncedstate = require("./use-url-synced-state"); var defaultOptions = { enableRowSelection: true, enableMultiRowSelection: false, forceSelection: false, syncWithUrl: false }; var defaultState = { pagination: { pageIndex: 0, pageSize: 50 }, totalEntries: null, sorting: [], globalFilter: '', predicates: {}, layout: null, dateRange: [ null, null ], rowSelection: {}, columnVisibility: {} }; var serialization = function(input) { return Object.freeze(input); }; var PAGINATION_SERIALIZATION = serialization({ serializer: function(param) { var pageIndex = param.pageIndex, pageSize = param.pageSize; return [ [ 'page', (pageIndex + 1).toString() ], [ 'pageSize', pageSize.toString() ] ]; }, deserializer: function(params, initialState) { return (0, _lodashdefaultsdeep.default)({ pageIndex: params.get('page') ? Math.max(1, parseInt(params.get('page'), 10)) - 1 : undefined, pageSize: params.get('pageSize') ? parseInt(params.get('pageSize'), 10) : undefined }, initialState); } }); var SORTING_SERIALIZATION = serialization({ serializer: function(sorting) { return [ [ 'sortBy', sorting.map(function(param) { var id = param.id, desc = param.desc; return "".concat(id, ".").concat(desc ? 'desc' : 'asc'); }).join(',') ] ]; }, deserializer: function(params, initialState) { var _params_get; if (!params.has('sortBy')) { return initialState; } var _params_get_split; var sorts = (_params_get_split = (_params_get = params.get('sortBy')) === null || _params_get === void 0 ? void 0 : _params_get.split(',')) !== null && _params_get_split !== void 0 ? _params_get_split : []; return sorts.map(function(sort) { var _sort_split = _sliced_to_array._(sort.split('.'), 2), id = _sort_split[0], order = _sort_split[1]; return { id: id, desc: order === 'desc' }; }); } }); var GLOBAL_FILTER_SERIALIZATION = serialization({ serializer: function(filter) { return [ [ 'filter', filter ] ]; }, deserializer: function(params, initialState) { var _params_get; return (_params_get = params.get('filter')) !== null && _params_get !== void 0 ? _params_get : initialState; } }); var PREDICATES_SERIALIZATION = serialization({ serializer: function(predicates) { return Object.entries(predicates); }, deserializer: function(params, initialState) { return Object.keys(initialState).reduce(function(acc, predicateKey) { var _params_get; acc[predicateKey] = (_params_get = params.get(predicateKey)) !== null && _params_get !== void 0 ? _params_get : initialState[predicateKey]; return acc; }, {}); } }); var LAYOUT_SERIALIZATION = serialization({ serializer: function(_layout) { return [ [ 'layout', _layout ] ]; }, deserializer: function(params, initialState) { var _params_get; return (_params_get = params.get('layout')) !== null && _params_get !== void 0 ? _params_get : initialState; } }); var DATE_RANGE_SERIALIZATION = serialization({ serializer: function(param) { var _param = _sliced_to_array._(param, 2), from = _param[0], to = _param[1]; var _from_toISOString, _to_toISOString; return [ [ 'from', (_from_toISOString = from === null || from === void 0 ? void 0 : from.toISOString()) !== null && _from_toISOString !== void 0 ? _from_toISOString : '', true ], [ 'to', (_to_toISOString = to === null || to === void 0 ? void 0 : to.toISOString()) !== null && _to_toISOString !== void 0 ? _to_toISOString : '', true ] ]; }, deserializer: function(params, initial) { return [ params.get('from') ? new Date(params.get('from')) : initial[0], params.get('to') ? new Date(params.get('to')) : initial[1] ]; } }); var COLUMN_VISIBILITY_SERIALIZATION = serialization({ serializer: function(columns) { return [ [ 'show', Object.entries(columns).filter(function(param) { var _param = _sliced_to_array._(param, 2), visible = _param[1]; return visible === true; }).map(function(param) { var _param = _sliced_to_array._(param, 1), columnName = _param[0]; return columnName; }).join(',') ], [ 'hide', Object.entries(columns).filter(function(param) { var _param = _sliced_to_array._(param, 2), visible = _param[1]; return visible === false; }).map(function(param) { var _param = _sliced_to_array._(param, 1), columnName = _param[0]; return columnName; }).join(',') ] ]; }, deserializer: function(params, initial) { var _params_get, _params_get1; if (!params.has('show') && !params.has('hide')) { return initial; } var _params_get_split; var visible = (_params_get_split = (_params_get = params.get('show')) === null || _params_get === void 0 ? void 0 : _params_get.split(',')) !== null && _params_get_split !== void 0 ? _params_get_split : []; var _params_get_split1; var invisible = (_params_get_split1 = (_params_get1 = params.get('hide')) === null || _params_get1 === void 0 ? void 0 : _params_get1.split(',')) !== null && _params_get_split1 !== void 0 ? _params_get_split1 : []; var columns = {}; visible.forEach(function(column) { columns[column] = true; }); invisible.forEach(function(column) { columns[column] = false; }); return columns; } }); var useTable = function() { var userOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var options = (0, _lodashdefaultsdeep.default)({}, userOptions, defaultOptions); var initialState = (0, _lodashdefaultsdeep.default)({}, options.initialState, defaultState); /** * The `useUrlSyncedState` hook defaults to synchronize, but the table wants to default to not synchronize, * so always pass the sync option as a resolved boolean value. */ var sync = !!options.syncWithUrl; // (Optionally) synced with url var _useUrlSyncedState = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, PAGINATION_SERIALIZATION), { initialState: initialState.pagination, sync: sync })), 2), pagination = _useUrlSyncedState[0], setPagination = _useUrlSyncedState[1]; var _useUrlSyncedState1 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, SORTING_SERIALIZATION), { initialState: initialState.sorting, sync: sync })), 2), sorting = _useUrlSyncedState1[0], setSorting = _useUrlSyncedState1[1]; var _useUrlSyncedState2 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, GLOBAL_FILTER_SERIALIZATION), { initialState: initialState.globalFilter, sync: sync })), 2), globalFilter = _useUrlSyncedState2[0], setGlobalFilter = _useUrlSyncedState2[1]; var _useUrlSyncedState3 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, PREDICATES_SERIALIZATION), { initialState: initialState.predicates, sync: sync })), 2), predicates = _useUrlSyncedState3[0], setPredicates = _useUrlSyncedState3[1]; var _useUrlSyncedState4 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, LAYOUT_SERIALIZATION), { initialState: initialState.layout, sync: sync })), 2), layout = _useUrlSyncedState4[0], setLayout = _useUrlSyncedState4[1]; var _useUrlSyncedState5 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, DATE_RANGE_SERIALIZATION), { initialState: initialState.dateRange, sync: sync })), 2), dateRange = _useUrlSyncedState5[0], setDateRange = _useUrlSyncedState5[1]; var _useUrlSyncedState6 = _sliced_to_array._((0, _useurlsyncedstate.useUrlSyncedState)(_object_spread_props._(_object_spread._({}, COLUMN_VISIBILITY_SERIALIZATION), { initialState: initialState.columnVisibility, sync: sync })), 2), columnVisibility = _useUrlSyncedState6[0], setColumnVisibility = _useUrlSyncedState6[1]; // unsynced var _useState = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), totalEntries = _useState[0], _setTotalEntries = _useState[1]; var _useState1 = _sliced_to_array._((0, _react.useState)(initialState.totalEntries), 2), unfilteredTotalEntries = _useState1[0], setUnfilteredTotalEntries = _useState1[1]; var _useState2 = _sliced_to_array._((0, _react.useState)(initialState.expanded), 2), expanded = _useState2[0], setExpanded = _useState2[1]; var _useState3 = _sliced_to_array._((0, _react.useState)(initialState.rowSelection), 2), rowSelection = _useState3[0], setRowSelection = _useState3[1]; var isFiltered = !!globalFilter || Object.keys(predicates).some(function(predicate) { return !!predicates[predicate]; }) || !!(dateRange === null || dateRange === void 0 ? void 0 : dateRange[0]) || !!(dateRange === null || dateRange === void 0 ? void 0 : dateRange[1]); var isVacant = unfilteredTotalEntries === 0; var setTotalEntries = (0, _react.useCallback)(function(updater) { _setTotalEntries(function(old) { var newTotalEntries = _instanceof._(updater, Function) ? updater(old) : updater; if (!isFiltered) { setUnfilteredTotalEntries(newTotalEntries); } return newTotalEntries; }); }, [ isFiltered ]); var clearFilters = (0, _react.useCallback)(function() { setPredicates(initialState.predicates); setGlobalFilter(''); }, []); var clearRowSelection = (0, _react.useCallback)(function() { setRowSelection({}); }, []); var getSelectedRows = (0, _react.useCallback)(function() { return Object.values(rowSelection); }, [ rowSelection ]); var getSelectedRow = function() { var _getSelectedRows_; return (_getSelectedRows_ = getSelectedRows()[0]) !== null && _getSelectedRows_ !== void 0 ? _getSelectedRows_ : null; }; (0, _hooks.useDidUpdate)(function() { if (!options.enableMultiRowSelection) { clearRowSelection(); } }, [ globalFilter, pagination, sorting, dateRange, predicates ]); var state = (0, _react.useMemo)(function() { return { pagination: pagination, totalEntries: totalEntries, sorting: sorting, globalFilter: globalFilter, expanded: expanded, predicates: predicates, layout: layout, dateRange: dateRange, rowSelection: rowSelection, columnVisibility: columnVisibility }; }, [ pagination, totalEntries, sorting, globalFilter, expanded, predicates, layout, dateRange, rowSelection, columnVisibility ]); return { state: state, setPagination: setPagination, setTotalEntries: setTotalEntries, setSorting: setSorting, setGlobalFilter: setGlobalFilter, setExpanded: setExpanded, setPredicates: setPredicates, setLayout: setLayout, setDateRange: setDateRange, setRowSelection: setRowSelection, setColumnVisibility: setColumnVisibility, isFiltered: isFiltered, isVacant: isVacant, clearFilters: clearFilters, clearRowSelection: clearRowSelection, getSelectedRows: getSelectedRows, getSelectedRow: getSelectedRow, rowSelectionEnabled: options.enableRowSelection, rowSelectionForced: options.forceSelection, multiRowSelectionEnabled: options.enableMultiRowSelection }; }; //# sourceMappingURL=use-table.js.map