{"version":3,"file":"BulkActionsMenu.cjs","names":["_styled","_interopRequireDefault","require","_react","_Box","_Button","_MenuButton","_i18n","_index","_OdysseyDesignTokensContext","_jsxRuntime","e","__esModule","default","BulkActionsContainer","styled","shouldForwardProp","prop","odysseyDesignTokens","display","gap","Spacing2","BulkActionsMenu","data","getRowId","isRowSelectionDisabled","menuItems","rowSelection","setRowSelection","useOdysseyDesignTokens","t","useTranslation","selectedRowCount","Object","values","filter","Boolean","length","selectableRowCount","useMemo","row","handleSelectAll","useCallback","rows","fromEntries","map","index","rowId","handleSelectNone","jsxs","children","jsx","MenuButton","ariaLabel","buttonLabel","buttonVariant","endIcon","ChevronDownIcon","Box","Button","isDisabled","label","onClick","variant","MemoizedBulkActionsMenu","exports","memo","displayName"],"sources":["../../../../src/labs/DataView/BulkActionsMenu.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled from \"@emotion/styled\";\nimport { MRT_RowData, MRT_RowSelectionState } from \"material-react-table\";\nimport { Dispatch, memo, SetStateAction, useCallback, useMemo } from \"react\";\n\nimport { Box } from \"../../Box.js\";\nimport { Button } from \"../../Buttons/Button.js\";\nimport { MenuButton } from \"../../Buttons/MenuButton.js\";\nimport { useTranslation } from \"../../i18n.generated/i18n.js\";\nimport { ChevronDownIcon } from \"../../icons.generated/index.js\";\nimport {\n  DesignTokens,\n  useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { UniversalProps } from \"./componentTypes.js\";\nimport { GetRowId } from \"./dataTypes.js\";\n\nexport type BulkActionsMenuProps<TData extends MRT_RowData> = {\n  data: TData[];\n  getRowId: GetRowId<TData>;\n  isRowSelectionDisabled?: UniversalProps<TData>[\"isRowSelectionDisabled\"];\n  menuItems: UniversalProps<TData>[\"bulkActionMenuItems\"];\n  rowSelection: MRT_RowSelectionState;\n  setRowSelection: Dispatch<SetStateAction<MRT_RowSelectionState>>;\n};\n\ntype BulkActionsMenuComponent = (<TData extends MRT_RowData>(\n  props: BulkActionsMenuProps<TData>,\n) => React.ReactNode) & { displayName?: string };\n\nconst BulkActionsContainer = styled(\"div\", {\n  shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n  odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n  display: \"flex\",\n  gap: odysseyDesignTokens.Spacing2,\n}));\n\nconst BulkActionsMenu = <TData extends MRT_RowData>({\n  data,\n  getRowId,\n  isRowSelectionDisabled,\n  menuItems,\n  rowSelection,\n  setRowSelection,\n}: BulkActionsMenuProps<TData>) => {\n  const odysseyDesignTokens = useOdysseyDesignTokens();\n  const { t } = useTranslation();\n\n  const selectedRowCount = Object.values(rowSelection).filter(Boolean).length;\n\n  const selectableRowCount = useMemo(\n    () =>\n      isRowSelectionDisabled\n        ? data.filter((row) => !isRowSelectionDisabled(row)).length\n        : data.length,\n    [data, isRowSelectionDisabled],\n  );\n\n  const handleSelectAll = useCallback(() => {\n    const rows = Object.fromEntries(\n      data\n        .map((row, index) => [getRowId(row, index), row] as const)\n        .filter(([, row]) => !isRowSelectionDisabled?.(row))\n        .map(([rowId]) => [rowId, true]),\n    );\n    setRowSelection(rows);\n  }, [data, getRowId, isRowSelectionDisabled, setRowSelection]);\n\n  const handleSelectNone = useCallback(() => {\n    setRowSelection({});\n  }, [setRowSelection]);\n\n  return (\n    <BulkActionsContainer odysseyDesignTokens={odysseyDesignTokens}>\n      {selectedRowCount > 0 && (\n        <MenuButton\n          ariaLabel={t(\"table.actions.arialabel\")}\n          buttonLabel={t(\"table.actions.selectsome\", { selectedRowCount })}\n          buttonVariant=\"primary\"\n          endIcon={<ChevronDownIcon />}\n        >\n          {menuItems?.(rowSelection)}\n        </MenuButton>\n      )}\n      <Box>\n        <Button\n          // >= rather than ===: a controlled rowSelection can carry disabled or off-page rows, so selectedRowCount may exceed the selectable count.\n          isDisabled={selectedRowCount >= selectableRowCount}\n          label={t(\"table.actions.selectall\")}\n          onClick={handleSelectAll}\n          variant=\"secondary\"\n        />\n        <Button\n          isDisabled={selectedRowCount === 0} // Disabled if none are selected\n          label={t(\"table.actions.selectnone\")}\n          onClick={handleSelectNone}\n          variant=\"secondary\"\n        />\n      </Box>\n    </BulkActionsContainer>\n  );\n};\n\nconst MemoizedBulkActionsMenu = memo(\n  BulkActionsMenu,\n) as BulkActionsMenuComponent;\nMemoizedBulkActionsMenu.displayName = \"BulkActionsMenu\";\n\nexport { MemoizedBulkActionsMenu as BulkActionsMenu };\n"],"mappings":"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","ignoreList":[]}