UNPKG

polaris-glints

Version:

Glints forked polaris react

129 lines (109 loc) 4.15 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var types = require('./types.js'); var context = require('./context.js'); function useIndexSelectionChange() { const onSelectionChange = React.useContext(context.IndexSelectionChangeContext); if (!onSelectionChange) { throw new Error(`Missing IndexProvider context`); } return onSelectionChange; } function useIndexRow() { const indexRow = React.useContext(context.IndexRowContext); if (!indexRow) { throw new Error(`Missing IndexProvider context`); } return indexRow; } function useIndexValue() { const index = React.useContext(context.IndexContext); if (!index) { throw new Error(`Missing IndexProvider context`); } return index; } function useBulkSelectionData({ selectedItemsCount, itemCount, hasMoreItems, resourceName: passedResourceName }) { const selectable = Boolean(selectedItemsCount); const selectMode = selectedItemsCount === 'All' || selectedItemsCount > 0; const defaultResourceName = { singular: 'Item', plural: 'Items' }; const resourceName = passedResourceName ? passedResourceName : defaultResourceName; const paginatedSelectAllText = getPaginatedSelectAllText(); const bulkActionsLabel = getBulkActionsLabel(); const bulkActionsAccessibilityLabel = getBulkActionsAccessibilityLabel(); let bulkSelectState = 'indeterminate'; if (!selectedItemsCount || selectedItemsCount === 0) { bulkSelectState = undefined; } else if (selectedItemsCount === types.SELECT_ALL_ITEMS || selectedItemsCount === itemCount) { bulkSelectState = true; } return { paginatedSelectAllText, bulkActionsLabel, bulkActionsAccessibilityLabel, resourceName, selectMode, bulkSelectState, selectable }; function getPaginatedSelectAllText() { if (!selectable || !hasMoreItems) { return; } if (selectedItemsCount === types.SELECT_ALL_ITEMS) { return `All ${itemCount}+ ${resourceName.plural.toLocaleLowerCase()} are selected.`; } } function getBulkActionsLabel() { const selectedItemsCountLabel = selectedItemsCount === types.SELECT_ALL_ITEMS ? `${itemCount}+` : selectedItemsCount; return `${selectedItemsCountLabel} selected.`; } function getBulkActionsAccessibilityLabel() { const totalItemsCount = itemCount; const allSelected = selectedItemsCount === totalItemsCount; if (totalItemsCount === 1 && allSelected) { return `Deselect ${resourceName.singular}`; } else if (totalItemsCount === 1) { return `Select ${resourceName.singular}`; } else if (allSelected) { return `Deselect all ${itemCount} ${resourceName.plural}`; } else { return `Select all ${itemCount} ${resourceName.plural}`; } } } function useHandleBulkSelection({ onSelectionChange = () => {} }) { const lastSelected = React.useRef(null); const handleSelectionChange = React.useCallback((selectionType, toggleType, selection, sortOrder) => { const prevSelected = lastSelected.current; if (types.SelectionType.Multi && typeof sortOrder === 'number') { lastSelected.current = sortOrder; } if (selectionType === types.SelectionType.Single || selectionType === types.SelectionType.Multi && (typeof prevSelected !== 'number' || typeof sortOrder !== 'number')) { onSelectionChange(types.SelectionType.Single, toggleType, selection); } else if (selectionType === types.SelectionType.Multi) { const min = Math.min(prevSelected, sortOrder); const max = Math.max(prevSelected, sortOrder); onSelectionChange(selectionType, toggleType, [min, max]); } else if (selectionType === types.SelectionType.Page || selectionType === types.SelectionType.All) { onSelectionChange(selectionType, toggleType); } }, [onSelectionChange]); return handleSelectionChange; } exports.useBulkSelectionData = useBulkSelectionData; exports.useHandleBulkSelection = useHandleBulkSelection; exports.useIndexRow = useIndexRow; exports.useIndexSelectionChange = useIndexSelectionChange; exports.useIndexValue = useIndexValue;