UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

95 lines (94 loc) 3.31 kB
import { useCallback } from "react"; import { ensurePluginOrder, useGetLatest, makePropGetter } from "react-table"; const 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 { aditivePageBulkSelection: 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, aditivePageBulkSelection: !!instance.aditivePageBulkSelection, subtractivePageBulkDeselection: !!instance.subtractivePageBulkDeselection }); }; const defaultGetHvBulkActionsProps = (props, { instance }) => { const { rows, initialRows, selectedFlatRows, state: { selectedRowIds = {} } = {}, page, toggleAllRowsSelected, invertedToggleAllRowsSelected, showSelectAllPages = true, applyToggleAllRowsSelectedToPrefilteredRows } = instance; const isPaginated = !!page; const nextProps = { numTotal: applyToggleAllRowsSelectedToPrefilteredRows ? initialRows.length : rows.length, numSelected: applyToggleAllRowsSelectedToPrefilteredRows ? Object.keys(selectedRowIds).length : selectedFlatRows.length, showSelectAllPages: showSelectAllPages && isPaginated, onSelectAll: invertedToggleAllRowsSelected, onSelectAllPages: toggleAllRowsSelected }; return [props, nextProps]; }; const useHvBulkActions = (hooks) => { hooks.getHvBulkActionsProps = [defaultGetHvBulkActionsProps]; hooks.useInstance.push(useInstanceHook); }; useHvBulkActions.pluginName = "useHvBulkActions"; export { useHvBulkActions };