UNPKG

@hitachivantara/uikit-react-core

Version:
60 lines (59 loc) 3.01 kB
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 };