@coveord/plasma-mantine
Version:
A Plasma flavoured Mantine theme
336 lines (335 loc) • 13.8 kB
JavaScript
;
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