@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
60 lines (59 loc) • 3.01 kB
JavaScript
import { useCallback } from "react";
import { ensurePluginOrder, makePropGetter, useGetLatest } from "react-table";
//#region src/Table/hooks/useHvBulkActions.ts
var useInstanceHook = (instance) => {
const { plugins, page, toggleAllPageRowsSelected, toggleAllRowsSelected } = instance;
ensurePluginOrder(plugins, ["useHvRowSelection"], "useHvBulkActions");
const getInstance = useGetLatest(instance);
const getHvBulkActionsProps = makePropGetter(instance.getHooks().getHvBulkActionsProps, { instance: getInstance() });
const isPaginated = !!page;
const invertedToggleAllRowsSelected = useCallback(() => {
if (!isPaginated) return toggleAllRowsSelected();
const { additivePageBulkSelection, subtractivePageBulkDeselection, isNoRowsSelected, isNoPageRowsSelected, isAllSelectablePageRowsSelected, isAllSelectablePageRowsUnselected } = getInstance();
if (additivePageBulkSelection && subtractivePageBulkDeselection) return toggleAllPageRowsSelected(!isAllSelectablePageRowsSelected);
if (additivePageBulkSelection && !subtractivePageBulkDeselection) {
if (!isAllSelectablePageRowsSelected) return toggleAllPageRowsSelected(true);
return toggleAllRowsSelected(false);
}
if (!additivePageBulkSelection && !subtractivePageBulkDeselection) {
if (isNoRowsSelected) return toggleAllPageRowsSelected(true);
return toggleAllRowsSelected(false);
}
if (!additivePageBulkSelection && subtractivePageBulkDeselection) {
if (isNoRowsSelected) return toggleAllPageRowsSelected(true);
if (!isAllSelectablePageRowsUnselected) return toggleAllPageRowsSelected(false);
if (!isNoPageRowsSelected) return toggleAllPageRowsSelected(false);
return toggleAllRowsSelected(false);
}
return toggleAllPageRowsSelected();
}, [
getInstance,
isPaginated,
toggleAllPageRowsSelected,
toggleAllRowsSelected
]);
Object.assign(instance, {
getHvBulkActionsProps,
invertedToggleAllRowsSelected,
additivePageBulkSelection: !!instance.additivePageBulkSelection,
subtractivePageBulkDeselection: !!instance.subtractivePageBulkDeselection
});
};
var defaultGetHvBulkActionsProps = (props, { instance }) => {
const { rows, initialRows, selectedFlatRows, state: { selectedRowIds = {} } = {}, page, toggleAllRowsSelected, invertedToggleAllRowsSelected, showSelectAllPages = true, applyToggleAllRowsSelectedToPrefilteredRows } = instance;
const isPaginated = !!page;
return [props, {
numTotal: applyToggleAllRowsSelectedToPrefilteredRows ? initialRows.length : rows.length,
numSelected: applyToggleAllRowsSelectedToPrefilteredRows ? Object.keys(selectedRowIds).length : selectedFlatRows.length,
showSelectAllPages: showSelectAllPages && isPaginated,
onSelectAll: invertedToggleAllRowsSelected,
onSelectAllPages: toggleAllRowsSelected
}];
};
var useHvBulkActions = (hooks) => {
hooks.getHvBulkActionsProps = [defaultGetHvBulkActionsProps];
hooks.useInstance.push(useInstanceHook);
};
useHvBulkActions.pluginName = "useHvBulkActions";
//#endregion
export { useHvBulkActions };