{"version":3,"file":"PaginatedTable.cjs","names":["_materialReactTable","require","_react","_i18n","_Typography","_jsxRuntime","PaginatedTable","columns","data","fetchMoreData","getRowId","hasError","hasRowSelection","initialState","isFetching","onGlobalFilterChange","onPaginationChange","onRowSelectionChange","onRowSelectionChangeProp","rowsPerPage","state","ToolbarButtons","t","useTranslation","rowVirtualizerInstanceRef","useRef","columnFilters","setColumnFilters","useState","globalFilter","setGlobalFilter","useEffect","undefined","current","scrollToIndex","error","console","totalFetchedRows","length","renderBottomToolbarCustomActions","useCallback","jsx","Typography","children","Trans","count","i18nKey","values","totalRows","renderTopToolbarCustomActions","table","Fragment","rowSelection","setRowSelection","pagination","setPagination","pageIndex","pageSize","dataLengthRef","updatePagination","paginationFunction","previousPagination","nextPagination","numberOfPages","Math","floor","modifiedInitialState","useMemo","modifiedState","muiToolbarAlertBannerProps","severity","muiTablePaginationProps","rowsPerPageOptions","showFirstButton","showLastButton","muiCheckboxStyles","theme","components","MuiCheckbox","styleOverrides","root","ownerState","useMaterialReactTable","enableMultiRowSelection","enablePagination","enableRowSelection","enableSorting","muiSelectAllCheckboxProps","sx","muiSelectCheckboxProps","muiPaginationProps","onColumnFiltersChange","rowVirtualizerOptions","overscan","MaterialReactTable","MemoizedPaginatedTable","exports","memo","displayName"],"sources":["../../../src/labs/PaginatedTable.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-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 { AlertProps, CheckboxProps } from \"@mui/material\";\nimport {\n  MaterialReactTable,\n  type MRT_ColumnFiltersState,\n  MRT_PaginationState,\n  type MRT_RowSelectionState,\n  type MRT_TableInstance,\n  type MRT_Virtualizer,\n  useMaterialReactTable,\n} from \"material-react-table\";\nimport {\n  FunctionComponent,\n  memo,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\n\nimport type {\n  DefaultMaterialReactTableData,\n  MaterialReactTableProps,\n} from \"./materialReactTableTypes.js\";\n\nimport { Trans, useTranslation } from \"../i18n.generated/i18n.js\";\nimport { Typography } from \"../Typography.js\";\n\nexport type PaginatedTableProps<TData extends DefaultMaterialReactTableData> = {\n  columns: MaterialReactTableProps<TData>[\"columns\"];\n  data: MaterialReactTableProps<TData>[\"data\"];\n  fetchMoreData?: () => void;\n  getRowId?: MaterialReactTableProps<TData>[\"getRowId\"];\n  hasError?: boolean;\n  hasRowSelection?: boolean;\n  initialState?: MaterialReactTableProps<TData>[\"initialState\"];\n  isFetching?: boolean;\n  onGlobalFilterChange?: MaterialReactTableProps<TData>[\"onGlobalFilterChange\"];\n  onPaginationChange?: MaterialReactTableProps<TData>[\"onPaginationChange\"];\n  onRowSelectionChange?: MaterialReactTableProps<TData>[\"onRowSelectionChange\"];\n  rowsPerPage?: number;\n  state?: MaterialReactTableProps<TData>[\"state\"];\n  ToolbarButtons?: FunctionComponent<{ table: MRT_TableInstance<TData> }>;\n};\n\nconst PaginatedTable = <TData extends DefaultMaterialReactTableData>({\n  columns = [],\n  data = [],\n  fetchMoreData,\n  getRowId,\n  hasError,\n  hasRowSelection,\n  initialState,\n  isFetching,\n  onGlobalFilterChange,\n  onPaginationChange,\n  onRowSelectionChange: onRowSelectionChangeProp,\n  rowsPerPage = 10,\n  state,\n  ToolbarButtons,\n}: PaginatedTableProps<TData>) => {\n  const { t } = useTranslation();\n\n  const rowVirtualizerInstanceRef =\n    useRef<MRT_Virtualizer<HTMLDivElement, HTMLTableRowElement>>(null);\n\n  const [columnFilters, setColumnFilters] = useState<MRT_ColumnFiltersState>(\n    [],\n  );\n\n  const [globalFilter, setGlobalFilter] = useState<string>();\n\n  useEffect(() => {\n    if (globalFilter !== undefined) {\n      onGlobalFilterChange?.(globalFilter);\n    }\n  }, [globalFilter, onGlobalFilterChange]);\n\n  useEffect(() => {\n    try {\n      // Scroll to top of table when sorting or filters change.\n      rowVirtualizerInstanceRef.current?.scrollToIndex?.(0);\n    } catch (error) {\n      console.error(error);\n    }\n  }, [columnFilters, globalFilter]);\n\n  const totalFetchedRows = data.length ?? 0;\n\n  const renderBottomToolbarCustomActions = useCallback(\n    () =>\n      fetchMoreData ? (\n        <Typography>\n          <Trans\n            count={totalFetchedRows}\n            i18nKey=\"table.fetchedrows.text\"\n            values={{\n              totalRows: totalFetchedRows,\n            }}\n          />\n        </Typography>\n      ) : (\n        <Typography>\n          <Trans\n            count={totalFetchedRows}\n            i18nKey=\"table.rows.text\"\n            values={{\n              totalRows: totalFetchedRows,\n            }}\n          />\n        </Typography>\n      ),\n    [fetchMoreData, totalFetchedRows],\n  );\n\n  const renderTopToolbarCustomActions = useCallback<\n    Exclude<\n      MaterialReactTableProps<TData>[\"renderTopToolbarCustomActions\"],\n      undefined\n    >\n  >(\n    ({ table }: { table: MRT_TableInstance<TData> }) => (\n      <>{ToolbarButtons && <ToolbarButtons table={table} />}</>\n    ),\n    [ToolbarButtons],\n  );\n\n  const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\n\n  useEffect(() => {\n    onRowSelectionChangeProp?.(rowSelection);\n  }, [onRowSelectionChangeProp, rowSelection]);\n\n  const [pagination, setPagination] = useState<MRT_PaginationState>(\n    initialState?.pagination || {\n      pageIndex: 0,\n      pageSize: rowsPerPage,\n    },\n  );\n\n  const dataLengthRef = useRef(data.length);\n\n  const updatePagination = useCallback<\n    Required<MaterialReactTableProps<TData>>[\"onPaginationChange\"]\n  >(\n    (paginationFunction) => {\n      if (data.length === dataLengthRef.current) {\n        setPagination((previousPagination) => {\n          // @ts-expect-error This broke in the upgrade, but this component is legacy and replaced by `DataView`.\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n          const nextPagination = paginationFunction(previousPagination);\n\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n          return nextPagination;\n        });\n      } else {\n        dataLengthRef.current = data.length;\n      }\n    },\n    [data.length],\n  );\n\n  useEffect(() => {\n    const numberOfPages = Math.floor(data.length / pagination.pageSize);\n\n    if (!isFetching && pagination.pageIndex > numberOfPages - 1) {\n      fetchMoreData?.();\n    }\n  }, [\n    data.length,\n    fetchMoreData,\n    isFetching,\n    pagination.pageIndex,\n    pagination.pageSize,\n  ]);\n\n  useEffect(() => {\n    onPaginationChange?.({\n      pageIndex: pagination.pageIndex,\n      pageSize: pagination.pageSize,\n    });\n  }, [onPaginationChange, pagination.pageIndex, pagination.pageSize]);\n\n  const modifiedInitialState = useMemo(\n    () => ({\n      pagination,\n      ...initialState,\n    }),\n    [initialState, pagination],\n  );\n\n  const modifiedState = useMemo(\n    () => ({\n      pagination: {\n        pageIndex: pagination.pageIndex,\n        pageSize: pagination.pageSize,\n      },\n      rowSelection,\n      globalFilter,\n      columnFilters,\n      ...state,\n    }),\n    [\n      pagination.pageIndex,\n      pagination.pageSize,\n      rowSelection,\n      globalFilter,\n      columnFilters,\n      state,\n    ],\n  );\n\n  const muiToolbarAlertBannerProps: AlertProps = useMemo(\n    () =>\n      hasError\n        ? {\n            children: t(\"table.error\"),\n            severity: \"error\",\n          }\n        : {},\n    [hasError, t],\n  );\n\n  const muiTablePaginationProps = useMemo(\n    () => ({\n      rowsPerPageOptions: [],\n      showFirstButton: false,\n      showLastButton: false,\n    }),\n    [],\n  );\n\n  const muiCheckboxStyles = useCallback<\n    // @ts-expect-error This breaks after the upgrade, but it doesn't matter as this is a legacy function and internal type.\n    NonNullable<Required<CheckboxProps>[\"sx\"]>\n  >(\n    (theme) =>\n      typeof theme.components?.MuiCheckbox?.styleOverrides?.root === \"function\"\n        ? theme.components?.MuiCheckbox?.styleOverrides?.root?.({\n            ownerState: {},\n            theme,\n          })\n        : \"\",\n    [],\n  );\n\n  const table = useMaterialReactTable({\n    columns: columns,\n    data: data,\n    enableMultiRowSelection: hasRowSelection,\n    enablePagination: true,\n    enableRowSelection: hasRowSelection,\n    enableSorting: false,\n    getRowId: getRowId,\n    initialState: modifiedInitialState,\n    muiSelectAllCheckboxProps: { sx: muiCheckboxStyles },\n    muiSelectCheckboxProps: { sx: muiCheckboxStyles },\n    muiPaginationProps: muiTablePaginationProps,\n    muiToolbarAlertBannerProps: muiToolbarAlertBannerProps,\n    onColumnFiltersChange: setColumnFilters,\n    onGlobalFilterChange: setGlobalFilter,\n    onPaginationChange: updatePagination,\n    onRowSelectionChange: setRowSelection,\n    renderBottomToolbarCustomActions: renderBottomToolbarCustomActions,\n    renderTopToolbarCustomActions: renderTopToolbarCustomActions,\n    rowVirtualizerInstanceRef: rowVirtualizerInstanceRef,\n    rowVirtualizerOptions: { overscan: 4 },\n    state: modifiedState,\n  });\n\n  return <MaterialReactTable table={table} />;\n};\n\nconst MemoizedPaginatedTable = memo(PaginatedTable) as typeof PaginatedTable;\n\n// @ts-expect-error | This is going to error because the component isn't and can't be defined as a `FunctionComponent`, and therefore, doesn't have a `displayName` prop.\nMemoizedPaginatedTable.displayName = \"PaginatedTable\";\n\nexport { MemoizedPaginatedTable as PaginatedTable };\n"],"mappings":"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","ignoreList":[]}