@strapi/admin 5.42.1 → 5.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/admin/admin/src/components/Form.js +11 -10
  2. package/dist/admin/admin/src/components/Form.js.map +1 -1
  3. package/dist/admin/admin/src/components/Form.mjs +11 -10
  4. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Date.js +2 -2
  6. package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Date.mjs +2 -2
  8. package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
  10. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  11. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +3 -2
  12. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/PageHelpers.js +1 -1
  14. package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
  15. package/dist/admin/admin/src/components/PageHelpers.mjs +1 -1
  16. package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/Table.js +28 -15
  18. package/dist/admin/admin/src/components/Table.js.map +1 -1
  19. package/dist/admin/admin/src/components/Table.mjs +29 -16
  20. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  21. package/dist/admin/admin/src/core/store/configure.js +3 -1
  22. package/dist/admin/admin/src/core/store/configure.js.map +1 -1
  23. package/dist/admin/admin/src/core/store/configure.mjs +3 -1
  24. package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
  25. package/dist/admin/admin/src/hooks/usePersistentState.js +9 -4
  26. package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
  27. package/dist/admin/admin/src/hooks/usePersistentState.mjs +10 -6
  28. package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +4 -1
  30. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs +4 -1
  32. package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
  33. package/dist/admin/admin/src/render.js +2 -0
  34. package/dist/admin/admin/src/render.js.map +1 -1
  35. package/dist/admin/admin/src/render.mjs +2 -0
  36. package/dist/admin/admin/src/render.mjs.map +1 -1
  37. package/dist/admin/admin/src/services/api.js +2 -2
  38. package/dist/admin/admin/src/services/api.js.map +1 -1
  39. package/dist/admin/admin/src/services/api.mjs +2 -2
  40. package/dist/admin/admin/src/services/api.mjs.map +1 -1
  41. package/dist/admin/admin/src/translations/nl.json.js +394 -89
  42. package/dist/admin/admin/src/translations/nl.json.js.map +1 -1
  43. package/dist/admin/admin/src/translations/nl.json.mjs +393 -90
  44. package/dist/admin/admin/src/translations/nl.json.mjs.map +1 -1
  45. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js +1 -1
  46. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -1
  47. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs +2 -2
  48. package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -1
  49. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +1 -1
  50. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  51. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +2 -2
  52. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  53. package/dist/admin/ee/admin/src/services/ai.js +7 -7
  54. package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
  55. package/dist/admin/ee/admin/src/services/ai.mjs +6 -6
  56. package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
  57. package/dist/admin/ee.js +2 -2
  58. package/dist/admin/ee.mjs +1 -1
  59. package/dist/admin/index.js +1 -0
  60. package/dist/admin/index.js.map +1 -1
  61. package/dist/admin/index.mjs +1 -1
  62. package/dist/admin/src/core/store/configure.d.ts +2 -2
  63. package/dist/admin/src/core/store/hooks.d.ts +2 -2
  64. package/dist/admin/src/ee.d.ts +1 -1
  65. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  66. package/dist/admin/src/hooks/usePersistentState.d.ts +2 -1
  67. package/dist/admin/src/index.d.ts +1 -1
  68. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  69. package/dist/admin/src/selectors.d.ts +2 -2
  70. package/dist/admin/src/services/admin.d.ts +6 -6
  71. package/dist/admin/src/services/api.d.ts +1 -1
  72. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  73. package/dist/admin/src/services/auth.d.ts +11 -11
  74. package/dist/admin/src/services/contentApi.d.ts +1 -1
  75. package/dist/admin/src/services/contentManager.d.ts +1 -1
  76. package/dist/admin/src/services/homepage.d.ts +3 -3
  77. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  78. package/dist/admin/src/services/users.d.ts +8 -8
  79. package/dist/admin/src/services/webhooks.d.ts +2 -2
  80. package/dist/admin/tests/utils.d.ts +1 -1
  81. package/dist/ee/admin/src/services/ai.d.ts +6 -6
  82. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  83. package/dist/ee/server/src/index.d.ts +0 -16
  84. package/dist/ee/server/src/index.d.ts.map +1 -1
  85. package/dist/server/ee/server/src/index.js +0 -16
  86. package/dist/server/ee/server/src/index.js.map +1 -1
  87. package/dist/server/ee/server/src/index.mjs +0 -16
  88. package/dist/server/ee/server/src/index.mjs.map +1 -1
  89. package/dist/server/server/src/ai/controllers/ai.js +52 -0
  90. package/dist/server/server/src/ai/controllers/ai.js.map +1 -0
  91. package/dist/server/server/src/ai/controllers/ai.mjs +50 -0
  92. package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -0
  93. package/dist/server/{ee/server → server}/src/ai/routes/ai.js +1 -2
  94. package/dist/server/server/src/ai/routes/ai.js.map +1 -0
  95. package/dist/server/{ee/server → server}/src/ai/routes/ai.mjs +1 -2
  96. package/dist/server/server/src/ai/routes/ai.mjs.map +1 -0
  97. package/dist/server/{ee/server/src/ai/containers → server/src/ai/services}/ai.js +107 -32
  98. package/dist/server/server/src/ai/services/ai.js.map +1 -0
  99. package/dist/server/{ee/server/src/ai/containers → server/src/ai/services}/ai.mjs +107 -32
  100. package/dist/server/server/src/ai/services/ai.mjs.map +1 -0
  101. package/dist/server/server/src/controllers/index.js +3 -1
  102. package/dist/server/server/src/controllers/index.js.map +1 -1
  103. package/dist/server/server/src/controllers/index.mjs +3 -1
  104. package/dist/server/server/src/controllers/index.mjs.map +1 -1
  105. package/dist/server/server/src/register.js +4 -0
  106. package/dist/server/server/src/register.js.map +1 -1
  107. package/dist/server/server/src/register.mjs +4 -0
  108. package/dist/server/server/src/register.mjs.map +1 -1
  109. package/dist/server/server/src/routes/index.js +3 -1
  110. package/dist/server/server/src/routes/index.js.map +1 -1
  111. package/dist/server/server/src/routes/index.mjs +3 -1
  112. package/dist/server/server/src/routes/index.mjs.map +1 -1
  113. package/dist/{ee/server → server}/src/ai/controllers/ai.d.ts +1 -1
  114. package/dist/server/src/ai/controllers/ai.d.ts.map +1 -0
  115. package/dist/server/src/ai/routes/ai.d.ts.map +1 -0
  116. package/dist/server/src/ai/services/ai.d.ts +30 -0
  117. package/dist/server/src/ai/services/ai.d.ts.map +1 -0
  118. package/dist/server/src/controllers/index.d.ts +5 -0
  119. package/dist/server/src/controllers/index.d.ts.map +1 -1
  120. package/dist/server/src/index.d.ts +5 -0
  121. package/dist/server/src/index.d.ts.map +1 -1
  122. package/dist/server/src/register.d.ts.map +1 -1
  123. package/dist/server/src/routes/index.d.ts.map +1 -1
  124. package/dist/shared/contracts/ai.d.ts +3 -3
  125. package/package.json +8 -8
  126. package/dist/ee/server/src/ai/containers/ai.d.ts +0 -15
  127. package/dist/ee/server/src/ai/containers/ai.d.ts.map +0 -1
  128. package/dist/ee/server/src/ai/controllers/ai.d.ts.map +0 -1
  129. package/dist/ee/server/src/ai/routes/ai.d.ts.map +0 -1
  130. package/dist/server/ee/server/src/ai/containers/ai.js.map +0 -1
  131. package/dist/server/ee/server/src/ai/containers/ai.mjs.map +0 -1
  132. package/dist/server/ee/server/src/ai/controllers/ai.js +0 -121
  133. package/dist/server/ee/server/src/ai/controllers/ai.js.map +0 -1
  134. package/dist/server/ee/server/src/ai/controllers/ai.mjs +0 -119
  135. package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +0 -1
  136. package/dist/server/ee/server/src/ai/routes/ai.js.map +0 -1
  137. package/dist/server/ee/server/src/ai/routes/ai.mjs.map +0 -1
  138. /package/dist/{ee/server → server}/src/ai/routes/ai.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n {\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n },\n 'push',\n true\n );\n }\n };\n\n return (\n <Th\n action={\n isSorted &&\n sortable && (\n <IconButton label={sortLabel} onClick={handleClickSort} variant=\"ghost\">\n <SortIcon $isUp={sortOrder === 'ASC'} />\n </IconButton>\n )\n }\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Typography\n textColor=\"neutral600\"\n tag={!isSorted && sortable ? 'button' : 'span'}\n onClick={handleClickSort}\n variant=\"sigma\"\n >\n {label}\n </Typography>\n </Tooltip>\n </Th>\n );\n};\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","Th","action","IconButton","onClick","variant","SortIcon","$isUp","Tooltip","Typography","textColor","tag","styled","CaretDown","ActionBar","_jsxs","Flex","gap","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","e","stopPropagation","target","Table"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n {\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n },\n 'push',\n true\n );\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (sortable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n handleClickSort();\n }\n };\n\n return (\n <SortableTh\n onClick={sortable ? handleClickSort : undefined}\n onKeyDown={sortable ? handleKeyDown : undefined}\n tabIndex={sortable ? 0 : undefined}\n aria-sort={isSorted ? (sortOrder === 'ASC' ? 'ascending' : 'descending') : undefined}\n $sortable={!!sortable}\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Flex gap={1}>\n <Typography textColor=\"neutral600\" tag=\"span\" variant=\"sigma\">\n {label}\n </Typography>\n {isSorted && sortable && <SortIcon $isUp={sortOrder === 'ASC'} />}\n </Flex>\n </Tooltip>\n </SortableTh>\n );\n};\n\nconst SortableTh = styled(Th)<{ $sortable: boolean }>`\n cursor: ${({ $sortable }) => ($sortable ? 'pointer' : 'default')};\n`;\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","handleKeyDown","e","key","preventDefault","SortableTh","onClick","undefined","onKeyDown","tabIndex","aria-sort","$sortable","Tooltip","_jsxs","Flex","gap","Typography","textColor","tag","variant","SortIcon","$isUp","styled","Th","CaretDown","ActionBar","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","stopPropagation","target","Table"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { Tbody, Tr, Td, EmptyStateLayout, Flex, Loader, Checkbox, Th, Tooltip, Typography, IconButton, Thead, Table as Table$1 } from '@strapi/design-system';
3
+ import { Th, Tbody, Tr, Td, EmptyStateLayout, Flex, Loader, Checkbox, Tooltip, Typography, Thead, Table as Table$1 } from '@strapi/design-system';
4
4
  import { CaretDown } from '@strapi/icons';
5
5
  import { EmptyDocuments } from '@strapi/icons/symbols';
6
6
  import { useIntl } from 'react-intl';
@@ -95,27 +95,40 @@ const Root = ({ children, defaultSelectedRows, footer, headers = [], isLoading =
95
95
  }, 'push', true);
96
96
  }
97
97
  };
98
- return /*#__PURE__*/ jsx(Th, {
99
- action: isSorted && sortable && /*#__PURE__*/ jsx(IconButton, {
100
- label: sortLabel,
101
- onClick: handleClickSort,
102
- variant: "ghost",
103
- children: /*#__PURE__*/ jsx(SortIcon, {
104
- $isUp: sortOrder === 'ASC'
105
- })
106
- }),
98
+ const handleKeyDown = (e)=>{
99
+ if (sortable && (e.key === 'Enter' || e.key === ' ')) {
100
+ e.preventDefault();
101
+ handleClickSort();
102
+ }
103
+ };
104
+ return /*#__PURE__*/ jsx(SortableTh, {
105
+ onClick: sortable ? handleClickSort : undefined,
106
+ onKeyDown: sortable ? handleKeyDown : undefined,
107
+ tabIndex: sortable ? 0 : undefined,
108
+ "aria-sort": isSorted ? sortOrder === 'ASC' ? 'ascending' : 'descending' : undefined,
109
+ $sortable: !!sortable,
107
110
  children: /*#__PURE__*/ jsx(Tooltip, {
108
111
  label: sortable ? sortLabel : label,
109
- children: /*#__PURE__*/ jsx(Typography, {
110
- textColor: "neutral600",
111
- tag: !isSorted && sortable ? 'button' : 'span',
112
- onClick: handleClickSort,
113
- variant: "sigma",
114
- children: label
112
+ children: /*#__PURE__*/ jsxs(Flex, {
113
+ gap: 1,
114
+ children: [
115
+ /*#__PURE__*/ jsx(Typography, {
116
+ textColor: "neutral600",
117
+ tag: "span",
118
+ variant: "sigma",
119
+ children: label
120
+ }),
121
+ isSorted && sortable && /*#__PURE__*/ jsx(SortIcon, {
122
+ $isUp: sortOrder === 'ASC'
123
+ })
124
+ ]
115
125
  })
116
126
  })
117
127
  });
118
128
  };
129
+ const SortableTh = styled(Th)`
130
+ cursor: ${({ $sortable })=>$sortable ? 'pointer' : 'default'};
131
+ `;
119
132
  const SortIcon = styled(CaretDown)`
120
133
  transform: ${({ $isUp })=>`rotate(${$isUp ? '180' : '0'}deg)`};
121
134
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n {\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n },\n 'push',\n true\n );\n }\n };\n\n return (\n <Th\n action={\n isSorted &&\n sortable && (\n <IconButton label={sortLabel} onClick={handleClickSort} variant=\"ghost\">\n <SortIcon $isUp={sortOrder === 'ASC'} />\n </IconButton>\n )\n }\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Typography\n textColor=\"neutral600\"\n tag={!isSorted && sortable ? 'button' : 'span'}\n onClick={handleClickSort}\n variant=\"sigma\"\n >\n {label}\n </Typography>\n </Tooltip>\n </Th>\n );\n};\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","Th","action","IconButton","onClick","variant","SortIcon","$isUp","Tooltip","Typography","textColor","tag","styled","CaretDown","ActionBar","_jsxs","Flex","gap","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","e","stopPropagation","target","Table"],"mappings":"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"}
1
+ {"version":3,"file":"Table.mjs","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n {\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n },\n 'push',\n true\n );\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (sortable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n handleClickSort();\n }\n };\n\n return (\n <SortableTh\n onClick={sortable ? handleClickSort : undefined}\n onKeyDown={sortable ? handleKeyDown : undefined}\n tabIndex={sortable ? 0 : undefined}\n aria-sort={isSorted ? (sortOrder === 'ASC' ? 'ascending' : 'descending') : undefined}\n $sortable={!!sortable}\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Flex gap={1}>\n <Typography textColor=\"neutral600\" tag=\"span\" variant=\"sigma\">\n {label}\n </Typography>\n {isSorted && sortable && <SortIcon $isUp={sortOrder === 'ASC'} />}\n </Flex>\n </Tooltip>\n </SortableTh>\n );\n};\n\nconst SortableTh = styled(Th)<{ $sortable: boolean }>`\n cursor: ${({ $sortable }) => ($sortable ? 'pointer' : 'default')};\n`;\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","handleKeyDown","e","key","preventDefault","SortableTh","onClick","undefined","onKeyDown","tabIndex","aria-sort","$sortable","Tooltip","_jsxs","Flex","gap","Typography","textColor","tag","variant","SortIcon","$isUp","styled","Th","CaretDown","ActionBar","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","stopPropagation","target","Table"],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  var toolkit = require('@reduxjs/toolkit');
4
4
  var reducer = require('../../reducer.js');
5
5
  var api = require('../../services/api.js');
6
+ var basename = require('../utils/basename.js');
6
7
 
7
8
  /**
8
9
  * @description Static reducers are ones we know, they live in the admin package.
@@ -63,7 +64,8 @@ const rtkQueryUnauthorizedMiddleware = ({ dispatch })=>(next)=>(action)=>{
63
64
  // isRejectedWithValue Or isRejected
64
65
  if (toolkit.isRejected(action) && action.payload?.status === 401) {
65
66
  dispatch(reducer.logout());
66
- window.location.href = '/admin/auth/login';
67
+ const basename$1 = basename.getBasename();
68
+ window.location.href = `${basename$1}/auth/login`;
67
69
  return;
68
70
  }
69
71
  return next(action);
@@ -1 +1 @@
1
- {"version":3,"file":"configure.js","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n window.location.href = '/admin/auth/login';\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","window","location","href"],"mappings":";;;;;;AAaA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,YAAAA,CAASC,WAAW,GAAGD,aAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,uBAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAMF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAA2B,EAAC;;;AAIlC,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,sBAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,YAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,mBAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,cAAAA,EAAAA,CAAAA;gBACTC,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,mBAAA;AACvB,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOpC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
1
+ {"version":3,"file":"configure.js","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\nimport { getBasename } from '../utils/basename';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n const basename = getBasename();\n window.location.href = `${basename}/auth/login`;\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","basename","getBasename","window","location","href"],"mappings":";;;;;;;AAcA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,YAAAA,CAASC,WAAW,GAAGD,aAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,uBAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAMF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAA2B,EAAC;;;AAIlC,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,sBAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,YAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,mBAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,cAAAA,EAAAA,CAAAA;AACT,gBAAA,MAAMC,UAAAA,GAAWC,oBAAAA,EAAAA;AACjBC,gBAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAA,EAAGJ,UAAAA,CAAS,WAAW,CAAC;AAC/C,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOlC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { configureStore, isRejected, combineReducers } from '@reduxjs/toolkit';
2
2
  import { reducer, logout } from '../../reducer.mjs';
3
3
  import { adminApi } from '../../services/api.mjs';
4
+ import { getBasename } from '../utils/basename.mjs';
4
5
 
5
6
  /**
6
7
  * @description Static reducers are ones we know, they live in the admin package.
@@ -61,7 +62,8 @@ const rtkQueryUnauthorizedMiddleware = ({ dispatch })=>(next)=>(action)=>{
61
62
  // isRejectedWithValue Or isRejected
62
63
  if (isRejected(action) && action.payload?.status === 401) {
63
64
  dispatch(logout());
64
- window.location.href = '/admin/auth/login';
65
+ const basename = getBasename();
66
+ window.location.href = `${basename}/auth/login`;
65
67
  return;
66
68
  }
67
69
  return next(action);
@@ -1 +1 @@
1
- {"version":3,"file":"configure.mjs","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n window.location.href = '/admin/auth/login';\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","window","location","href"],"mappings":";;;;AAaA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,QAAAA,CAASC,WAAW,GAAGD,SAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,eAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAMF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAA2B,EAAC;;;AAIlC,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,cAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,QAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,WAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,MAAAA,EAAAA,CAAAA;gBACTC,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,mBAAA;AACvB,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOpC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
1
+ {"version":3,"file":"configure.mjs","sources":["../../../../../../admin/src/core/store/configure.ts"],"sourcesContent":["import {\n configureStore,\n StoreEnhancer,\n Middleware,\n Reducer,\n combineReducers,\n MiddlewareAPI,\n isRejected,\n} from '@reduxjs/toolkit';\n\nimport { reducer as appReducer, AppState, logout } from '../../reducer';\nimport { adminApi } from '../../services/api';\nimport { getBasename } from '../utils/basename';\n\n/**\n * @description Static reducers are ones we know, they live in the admin package.\n */\nconst staticReducers = {\n [adminApi.reducerPath]: adminApi.reducer,\n admin_app: appReducer,\n} as const;\n\nconst injectReducerStoreEnhancer: (appReducers: Record<string, Reducer>) => StoreEnhancer =\n (appReducers) =>\n (next) =>\n (...args) => {\n const store = next(...args);\n\n const asyncReducers: Record<string, Reducer> = {};\n\n return {\n ...store,\n asyncReducers,\n injectReducer: (key: string, asyncReducer: Reducer) => {\n asyncReducers[key] = asyncReducer;\n store.replaceReducer(\n // @ts-expect-error we dynamically add reducers which makes the types uncomfortable.\n combineReducers({\n ...appReducers,\n ...asyncReducers,\n })\n );\n },\n };\n };\n\ntype PreloadState = Partial<{\n admin_app: AppState;\n}>;\n\n/**\n * @description This is the main store configuration function, injected Reducers use our legacy app.addReducer API,\n * which we're trying to phase out. App Middlewares could potentially be improved...?\n */\nconst configureStoreImpl = (\n preloadedState: PreloadState = {},\n appMiddlewares: Array<() => Middleware> = [],\n injectedReducers: Record<string, Reducer> = {}\n) => {\n const coreReducers = { ...staticReducers, ...injectedReducers } as const;\n\n const defaultMiddlewareOptions = {} as any;\n\n // These are already disabled in 'production' env but we also need to disable it in test environments\n // However, we want to leave them on for development so any issues can still be caught\n if (process.env.NODE_ENV === 'test') {\n defaultMiddlewareOptions.serializableCheck = false;\n defaultMiddlewareOptions.immutableCheck = false;\n }\n\n const store = configureStore({\n preloadedState: {\n admin_app: preloadedState.admin_app,\n },\n reducer: coreReducers,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: (getDefaultMiddleware) => [\n ...getDefaultMiddleware(defaultMiddlewareOptions),\n rtkQueryUnauthorizedMiddleware,\n adminApi.middleware,\n ...appMiddlewares.map((m) => m()),\n ],\n enhancers: [injectReducerStoreEnhancer(coreReducers)],\n });\n\n return store;\n};\n\nconst rtkQueryUnauthorizedMiddleware: Middleware =\n ({ dispatch }: MiddlewareAPI) =>\n (next) =>\n (action) => {\n // isRejectedWithValue Or isRejected\n if (isRejected(action) && action.payload?.status === 401) {\n dispatch(logout());\n const basename = getBasename();\n window.location.href = `${basename}/auth/login`;\n return;\n }\n\n return next(action);\n };\n\ntype Store = ReturnType<typeof configureStoreImpl> & {\n asyncReducers: Record<string, Reducer>;\n injectReducer: (key: string, asyncReducer: Reducer) => void;\n};\n\ntype RootState = ReturnType<Store['getState']>;\n\ntype Dispatch = Store['dispatch'];\n\nexport { configureStoreImpl as configureStore };\nexport type { RootState, Dispatch, AppState, Store, PreloadState };\n"],"names":["staticReducers","adminApi","reducerPath","reducer","admin_app","appReducer","injectReducerStoreEnhancer","appReducers","next","args","store","asyncReducers","injectReducer","key","asyncReducer","replaceReducer","combineReducers","configureStoreImpl","preloadedState","appMiddlewares","injectedReducers","coreReducers","defaultMiddlewareOptions","process","env","NODE_ENV","serializableCheck","immutableCheck","configureStore","devTools","middleware","getDefaultMiddleware","rtkQueryUnauthorizedMiddleware","map","m","enhancers","dispatch","action","isRejected","payload","status","logout","basename","getBasename","window","location","href"],"mappings":";;;;;AAcA;;AAEC,IACD,MAAMA,cAAAA,GAAiB;AACrB,IAAA,CAACC,QAAAA,CAASC,WAAW,GAAGD,SAASE,OAAO;IACxCC,SAAAA,EAAWC;AACb,CAAA;AAEA,MAAMC,6BACJ,CAACC,WAAAA,GACD,CAACC,IAAAA,GACD,CAAC,GAAGC,IAAAA,GAAAA;AACF,YAAA,MAAMC,QAAQF,IAAAA,CAAAA,GAAQC,IAAAA,CAAAA;AAEtB,YAAA,MAAME,gBAAyC,EAAC;YAEhD,OAAO;AACL,gBAAA,GAAGD,KAAK;AACRC,gBAAAA,aAAAA;AACAC,gBAAAA,aAAAA,EAAe,CAACC,GAAAA,EAAaC,YAAAA,GAAAA;oBAC3BH,aAAa,CAACE,IAAI,GAAGC,YAAAA;oBACrBJ,KAAAA,CAAMK,cAAc;oBAElBC,eAAAA,CAAgB;AACd,wBAAA,GAAGT,WAAW;AACd,wBAAA,GAAGI;AACL,qBAAA,CAAA,CAAA;AAEJ,gBAAA;AACF,aAAA;AACF,QAAA,CAAA;AAMF;;;AAGC,IACD,MAAMM,kBAAAA,GAAqB,CACzBC,cAAAA,GAA+B,EAAE,EACjCC,cAAAA,GAA0C,EAAE,EAC5CC,gBAAAA,GAA4C,EAAE,GAAA;AAE9C,IAAA,MAAMC,YAAAA,GAAe;AAAE,QAAA,GAAGrB,cAAc;AAAE,QAAA,GAAGoB;AAAiB,KAAA;AAE9D,IAAA,MAAME,2BAA2B,EAAC;;;AAIlC,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,MAAA,EAAQ;AACnCH,QAAAA,wBAAAA,CAAyBI,iBAAiB,GAAG,KAAA;AAC7CJ,QAAAA,wBAAAA,CAAyBK,cAAc,GAAG,KAAA;AAC5C,IAAA;AAEA,IAAA,MAAMjB,QAAQkB,cAAAA,CAAe;QAC3BV,cAAAA,EAAgB;AACdd,YAAAA,SAAAA,EAAWc,eAAed;AAC5B,SAAA;QACAD,OAAAA,EAASkB,YAAAA;AACTQ,QAAAA,QAAAA,EAAUN,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;AACnCK,QAAAA,UAAAA,EAAY,CAACC,oBAAAA,GAAyB;mBACjCA,oBAAAA,CAAqBT,wBAAAA,CAAAA;AACxBU,gBAAAA,8BAAAA;AACA/B,gBAAAA,QAAAA,CAAS6B,UAAU;mBAChBX,cAAAA,CAAec,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,EAAAA;AAC9B,aAAA;QACDC,SAAAA,EAAW;YAAC7B,0BAAAA,CAA2Be,YAAAA;AAAc;AACvD,KAAA,CAAA;IAEA,OAAOX,KAAAA;AACT;AAEA,MAAMsB,8BAAAA,GACJ,CAAC,EAAEI,QAAQ,EAAiB,GAC5B,CAAC5B,OACD,CAAC6B,MAAAA,GAAAA;;AAEC,YAAA,IAAIC,WAAWD,MAAAA,CAAAA,IAAWA,MAAAA,CAAOE,OAAO,EAAEC,WAAW,GAAA,EAAK;gBACxDJ,QAAAA,CAASK,MAAAA,EAAAA,CAAAA;AACT,gBAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AACjBC,gBAAAA,MAAAA,CAAOC,QAAQ,CAACC,IAAI,GAAG,CAAA,EAAGJ,QAAAA,CAAS,WAAW,CAAC;AAC/C,gBAAA;AACF,YAAA;AAEA,YAAA,OAAOlC,IAAAA,CAAK6B,MAAAA,CAAAA;AACd,QAAA,CAAA;;;;"}
@@ -27,8 +27,9 @@ const usePersistentState = (key, defaultValue)=>{
27
27
  key,
28
28
  defaultValue
29
29
  ]);
30
- // persist whenever (key, value) change but only for the active key
31
- React.useEffect(()=>{
30
+ // Persist synchronously after commit so values survive same-tab navigation (e.g. external
31
+ // links) before the next paint — useEffect can run after unload and skip writing.
32
+ React.useLayoutEffect(()=>{
32
33
  if (currentKeyRef.current !== key) return; // safety guard
33
34
  window.localStorage.setItem(key, JSON.stringify(value));
34
35
  }, [
@@ -40,15 +41,19 @@ const usePersistentState = (key, defaultValue)=>{
40
41
  setValue
41
42
  ];
42
43
  };
44
+ const usePersistentStateScope = ()=>{
45
+ const { data: initData } = admin.useInitQuery();
46
+ return initData?.uuid;
47
+ };
43
48
  // Same as usePersistentState, but scoped to the current instance of Strapi
44
49
  // useful for storing state that should not be shared across different instances of Strapi running on localhost
45
50
  const useScopedPersistentState = (key, defaultValue)=>{
46
- const { data: initData } = admin.useInitQuery();
47
- const { uuid } = initData ?? {};
51
+ const uuid = usePersistentStateScope();
48
52
  const namespacedKey = `${key}:${uuid}`;
49
53
  return usePersistentState(namespacedKey, defaultValue);
50
54
  };
51
55
 
52
56
  exports.usePersistentState = usePersistentState;
57
+ exports.usePersistentStateScope = usePersistentStateScope;
53
58
  exports.useScopedPersistentState = useScopedPersistentState;
54
59
  //# sourceMappingURL=usePersistentState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePersistentState.js","sources":["../../../../../admin/src/hooks/usePersistentState.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useInitQuery } from '../services/admin';\n\nfunction readFromStorage<T>(key: string, fallback: T): T {\n const raw = window.localStorage.getItem(key);\n if (raw === null) return fallback;\n try {\n return JSON.parse(raw);\n } catch {\n // if primitive was stored\n return raw as unknown as T;\n }\n}\n\nconst usePersistentState = <T>(key: string, defaultValue: T) => {\n const [value, setValue] = useState<T>(() => readFromStorage(key, defaultValue));\n\n const currentKeyRef = useRef(key);\n\n // when the key changes, re-hydrate from the new key\n useEffect(() => {\n if (currentKeyRef.current !== key) {\n currentKeyRef.current = key;\n setValue(readFromStorage(key, defaultValue));\n }\n // include defaultValue in case it changes across models\n }, [key, defaultValue]);\n\n // persist whenever (key, value) changebut only for the active key\n useEffect(() => {\n if (currentKeyRef.current !== key) return; // safety guard\n\n window.localStorage.setItem(key, JSON.stringify(value));\n }, [key, value]);\n\n return [value, setValue] as const;\n};\n\n// Same as usePersistentState, but scoped to the current instance of Strapi\n// useful for storing state that should not be shared across different instances of Strapi running on localhost\nconst useScopedPersistentState = <T>(key: string, defaultValue: T) => {\n const { data: initData } = useInitQuery();\n const { uuid } = initData ?? {};\n\n const namespacedKey = `${key}:${uuid}`;\n return usePersistentState<T>(namespacedKey, defaultValue);\n};\n\nexport { usePersistentState, useScopedPersistentState };\n"],"names":["readFromStorage","key","fallback","raw","window","localStorage","getItem","JSON","parse","usePersistentState","defaultValue","value","setValue","useState","currentKeyRef","useRef","useEffect","current","setItem","stringify","useScopedPersistentState","data","initData","useInitQuery","uuid","namespacedKey"],"mappings":";;;;;AAIA,SAASA,eAAAA,CAAmBC,GAAW,EAAEC,QAAW,EAAA;AAClD,IAAA,MAAMC,GAAAA,GAAMC,MAAAA,CAAOC,YAAY,CAACC,OAAO,CAACL,GAAAA,CAAAA;IACxC,IAAIE,GAAAA,KAAQ,MAAM,OAAOD,QAAAA;IACzB,IAAI;QACF,OAAOK,IAAAA,CAAKC,KAAK,CAACL,GAAAA,CAAAA;AACpB,IAAA,CAAA,CAAE,OAAM;;QAEN,OAAOA,GAAAA;AACT,IAAA;AACF;AAEA,MAAMM,kBAAAA,GAAqB,CAAIR,GAAAA,EAAaS,YAAAA,GAAAA;AAC1C,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,cAAAA,CAAY,IAAMb,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAEjE,IAAA,MAAMI,gBAAgBC,YAAAA,CAAOd,GAAAA,CAAAA;;IAG7Be,eAAAA,CAAU,IAAA;QACR,IAAIF,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AACjCa,YAAAA,aAAAA,CAAcG,OAAO,GAAGhB,GAAAA;AACxBW,YAAAA,QAAAA,CAASZ,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAChC,QAAA;;IAEF,CAAA,EAAG;AAACT,QAAAA,GAAAA;AAAKS,QAAAA;AAAa,KAAA,CAAA;;IAGtBM,eAAAA,CAAU,IAAA;AACR,QAAA,IAAIF,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AAEnCG,QAAAA,MAAAA,CAAOC,YAAY,CAACa,OAAO,CAACjB,GAAAA,EAAKM,IAAAA,CAAKY,SAAS,CAACR,KAAAA,CAAAA,CAAAA;IAClD,CAAA,EAAG;AAACV,QAAAA,GAAAA;AAAKU,QAAAA;AAAM,KAAA,CAAA;IAEf,OAAO;AAACA,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA;AAC1B;AAEA;AACA;AACA,MAAMQ,wBAAAA,GAA2B,CAAInB,GAAAA,EAAaS,YAAAA,GAAAA;AAChD,IAAA,MAAM,EAAEW,IAAAA,EAAMC,QAAQ,EAAE,GAAGC,kBAAAA,EAAAA;AAC3B,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGF,YAAY,EAAC;AAE9B,IAAA,MAAMG,aAAAA,GAAgB,CAAA,EAAGxB,GAAAA,CAAI,CAAC,EAAEuB,IAAAA,CAAAA,CAAM;AACtC,IAAA,OAAOf,mBAAsBgB,aAAAA,EAAef,YAAAA,CAAAA;AAC9C;;;;;"}
1
+ {"version":3,"file":"usePersistentState.js","sources":["../../../../../admin/src/hooks/usePersistentState.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { useInitQuery } from '../services/admin';\n\nfunction readFromStorage<T>(key: string, fallback: T): T {\n const raw = window.localStorage.getItem(key);\n if (raw === null) return fallback;\n try {\n return JSON.parse(raw);\n } catch {\n // if primitive was stored\n return raw as unknown as T;\n }\n}\n\nconst usePersistentState = <T>(key: string, defaultValue: T) => {\n const [value, setValue] = useState<T>(() => readFromStorage(key, defaultValue));\n\n const currentKeyRef = useRef(key);\n\n // when the key changes, re-hydrate from the new key\n useEffect(() => {\n if (currentKeyRef.current !== key) {\n currentKeyRef.current = key;\n setValue(readFromStorage(key, defaultValue));\n }\n // include defaultValue in case it changes across models\n }, [key, defaultValue]);\n\n // Persist synchronously after commit so values survive same-tab navigation (e.g. external\n // links) before the next paint useEffect can run after unload and skip writing.\n useLayoutEffect(() => {\n if (currentKeyRef.current !== key) return; // safety guard\n\n window.localStorage.setItem(key, JSON.stringify(value));\n }, [key, value]);\n\n return [value, setValue] as const;\n};\n\nconst usePersistentStateScope = () => {\n const { data: initData } = useInitQuery();\n\n return initData?.uuid;\n};\n\n// Same as usePersistentState, but scoped to the current instance of Strapi\n// useful for storing state that should not be shared across different instances of Strapi running on localhost\nconst useScopedPersistentState = <T>(key: string, defaultValue: T) => {\n const uuid = usePersistentStateScope();\n\n const namespacedKey = `${key}:${uuid}`;\n return usePersistentState<T>(namespacedKey, defaultValue);\n};\n\nexport { usePersistentState, useScopedPersistentState, usePersistentStateScope };\n"],"names":["readFromStorage","key","fallback","raw","window","localStorage","getItem","JSON","parse","usePersistentState","defaultValue","value","setValue","useState","currentKeyRef","useRef","useEffect","current","useLayoutEffect","setItem","stringify","usePersistentStateScope","data","initData","useInitQuery","uuid","useScopedPersistentState","namespacedKey"],"mappings":";;;;;AAIA,SAASA,eAAAA,CAAmBC,GAAW,EAAEC,QAAW,EAAA;AAClD,IAAA,MAAMC,GAAAA,GAAMC,MAAAA,CAAOC,YAAY,CAACC,OAAO,CAACL,GAAAA,CAAAA;IACxC,IAAIE,GAAAA,KAAQ,MAAM,OAAOD,QAAAA;IACzB,IAAI;QACF,OAAOK,IAAAA,CAAKC,KAAK,CAACL,GAAAA,CAAAA;AACpB,IAAA,CAAA,CAAE,OAAM;;QAEN,OAAOA,GAAAA;AACT,IAAA;AACF;AAEA,MAAMM,kBAAAA,GAAqB,CAAIR,GAAAA,EAAaS,YAAAA,GAAAA;AAC1C,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,cAAAA,CAAY,IAAMb,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAEjE,IAAA,MAAMI,gBAAgBC,YAAAA,CAAOd,GAAAA,CAAAA;;IAG7Be,eAAAA,CAAU,IAAA;QACR,IAAIF,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AACjCa,YAAAA,aAAAA,CAAcG,OAAO,GAAGhB,GAAAA;AACxBW,YAAAA,QAAAA,CAASZ,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAChC,QAAA;;IAEF,CAAA,EAAG;AAACT,QAAAA,GAAAA;AAAKS,QAAAA;AAAa,KAAA,CAAA;;;IAItBQ,qBAAAA,CAAgB,IAAA;AACd,QAAA,IAAIJ,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AAEnCG,QAAAA,MAAAA,CAAOC,YAAY,CAACc,OAAO,CAAClB,GAAAA,EAAKM,IAAAA,CAAKa,SAAS,CAACT,KAAAA,CAAAA,CAAAA;IAClD,CAAA,EAAG;AAACV,QAAAA,GAAAA;AAAKU,QAAAA;AAAM,KAAA,CAAA;IAEf,OAAO;AAACA,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA;AAC1B;AAEA,MAAMS,uBAAAA,GAA0B,IAAA;AAC9B,IAAA,MAAM,EAAEC,IAAAA,EAAMC,QAAQ,EAAE,GAAGC,kBAAAA,EAAAA;AAE3B,IAAA,OAAOD,QAAAA,EAAUE,IAAAA;AACnB;AAEA;AACA;AACA,MAAMC,wBAAAA,GAA2B,CAAIzB,GAAAA,EAAaS,YAAAA,GAAAA;AAChD,IAAA,MAAMe,IAAAA,GAAOJ,uBAAAA,EAAAA;AAEb,IAAA,MAAMM,aAAAA,GAAgB,CAAA,EAAG1B,GAAAA,CAAI,CAAC,EAAEwB,IAAAA,CAAAA,CAAM;AACtC,IAAA,OAAOhB,mBAAsBkB,aAAAA,EAAejB,YAAAA,CAAAA;AAC9C;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { useState, useRef, useEffect } from 'react';
1
+ import { useState, useRef, useEffect, useLayoutEffect } from 'react';
2
2
  import { useInitQuery } from '../services/admin.mjs';
3
3
 
4
4
  function readFromStorage(key, fallback) {
@@ -25,8 +25,9 @@ const usePersistentState = (key, defaultValue)=>{
25
25
  key,
26
26
  defaultValue
27
27
  ]);
28
- // persist whenever (key, value) change but only for the active key
29
- useEffect(()=>{
28
+ // Persist synchronously after commit so values survive same-tab navigation (e.g. external
29
+ // links) before the next paint — useEffect can run after unload and skip writing.
30
+ useLayoutEffect(()=>{
30
31
  if (currentKeyRef.current !== key) return; // safety guard
31
32
  window.localStorage.setItem(key, JSON.stringify(value));
32
33
  }, [
@@ -38,14 +39,17 @@ const usePersistentState = (key, defaultValue)=>{
38
39
  setValue
39
40
  ];
40
41
  };
42
+ const usePersistentStateScope = ()=>{
43
+ const { data: initData } = useInitQuery();
44
+ return initData?.uuid;
45
+ };
41
46
  // Same as usePersistentState, but scoped to the current instance of Strapi
42
47
  // useful for storing state that should not be shared across different instances of Strapi running on localhost
43
48
  const useScopedPersistentState = (key, defaultValue)=>{
44
- const { data: initData } = useInitQuery();
45
- const { uuid } = initData ?? {};
49
+ const uuid = usePersistentStateScope();
46
50
  const namespacedKey = `${key}:${uuid}`;
47
51
  return usePersistentState(namespacedKey, defaultValue);
48
52
  };
49
53
 
50
- export { usePersistentState, useScopedPersistentState };
54
+ export { usePersistentState, usePersistentStateScope, useScopedPersistentState };
51
55
  //# sourceMappingURL=usePersistentState.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePersistentState.mjs","sources":["../../../../../admin/src/hooks/usePersistentState.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useInitQuery } from '../services/admin';\n\nfunction readFromStorage<T>(key: string, fallback: T): T {\n const raw = window.localStorage.getItem(key);\n if (raw === null) return fallback;\n try {\n return JSON.parse(raw);\n } catch {\n // if primitive was stored\n return raw as unknown as T;\n }\n}\n\nconst usePersistentState = <T>(key: string, defaultValue: T) => {\n const [value, setValue] = useState<T>(() => readFromStorage(key, defaultValue));\n\n const currentKeyRef = useRef(key);\n\n // when the key changes, re-hydrate from the new key\n useEffect(() => {\n if (currentKeyRef.current !== key) {\n currentKeyRef.current = key;\n setValue(readFromStorage(key, defaultValue));\n }\n // include defaultValue in case it changes across models\n }, [key, defaultValue]);\n\n // persist whenever (key, value) changebut only for the active key\n useEffect(() => {\n if (currentKeyRef.current !== key) return; // safety guard\n\n window.localStorage.setItem(key, JSON.stringify(value));\n }, [key, value]);\n\n return [value, setValue] as const;\n};\n\n// Same as usePersistentState, but scoped to the current instance of Strapi\n// useful for storing state that should not be shared across different instances of Strapi running on localhost\nconst useScopedPersistentState = <T>(key: string, defaultValue: T) => {\n const { data: initData } = useInitQuery();\n const { uuid } = initData ?? {};\n\n const namespacedKey = `${key}:${uuid}`;\n return usePersistentState<T>(namespacedKey, defaultValue);\n};\n\nexport { usePersistentState, useScopedPersistentState };\n"],"names":["readFromStorage","key","fallback","raw","window","localStorage","getItem","JSON","parse","usePersistentState","defaultValue","value","setValue","useState","currentKeyRef","useRef","useEffect","current","setItem","stringify","useScopedPersistentState","data","initData","useInitQuery","uuid","namespacedKey"],"mappings":";;;AAIA,SAASA,eAAAA,CAAmBC,GAAW,EAAEC,QAAW,EAAA;AAClD,IAAA,MAAMC,GAAAA,GAAMC,MAAAA,CAAOC,YAAY,CAACC,OAAO,CAACL,GAAAA,CAAAA;IACxC,IAAIE,GAAAA,KAAQ,MAAM,OAAOD,QAAAA;IACzB,IAAI;QACF,OAAOK,IAAAA,CAAKC,KAAK,CAACL,GAAAA,CAAAA;AACpB,IAAA,CAAA,CAAE,OAAM;;QAEN,OAAOA,GAAAA;AACT,IAAA;AACF;AAEA,MAAMM,kBAAAA,GAAqB,CAAIR,GAAAA,EAAaS,YAAAA,GAAAA;AAC1C,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,QAAAA,CAAY,IAAMb,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAEjE,IAAA,MAAMI,gBAAgBC,MAAAA,CAAOd,GAAAA,CAAAA;;IAG7Be,SAAAA,CAAU,IAAA;QACR,IAAIF,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AACjCa,YAAAA,aAAAA,CAAcG,OAAO,GAAGhB,GAAAA;AACxBW,YAAAA,QAAAA,CAASZ,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAChC,QAAA;;IAEF,CAAA,EAAG;AAACT,QAAAA,GAAAA;AAAKS,QAAAA;AAAa,KAAA,CAAA;;IAGtBM,SAAAA,CAAU,IAAA;AACR,QAAA,IAAIF,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AAEnCG,QAAAA,MAAAA,CAAOC,YAAY,CAACa,OAAO,CAACjB,GAAAA,EAAKM,IAAAA,CAAKY,SAAS,CAACR,KAAAA,CAAAA,CAAAA;IAClD,CAAA,EAAG;AAACV,QAAAA,GAAAA;AAAKU,QAAAA;AAAM,KAAA,CAAA;IAEf,OAAO;AAACA,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA;AAC1B;AAEA;AACA;AACA,MAAMQ,wBAAAA,GAA2B,CAAInB,GAAAA,EAAaS,YAAAA,GAAAA;AAChD,IAAA,MAAM,EAAEW,IAAAA,EAAMC,QAAQ,EAAE,GAAGC,YAAAA,EAAAA;AAC3B,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGF,YAAY,EAAC;AAE9B,IAAA,MAAMG,aAAAA,GAAgB,CAAA,EAAGxB,GAAAA,CAAI,CAAC,EAAEuB,IAAAA,CAAAA,CAAM;AACtC,IAAA,OAAOf,mBAAsBgB,aAAAA,EAAef,YAAAA,CAAAA;AAC9C;;;;"}
1
+ {"version":3,"file":"usePersistentState.mjs","sources":["../../../../../admin/src/hooks/usePersistentState.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { useInitQuery } from '../services/admin';\n\nfunction readFromStorage<T>(key: string, fallback: T): T {\n const raw = window.localStorage.getItem(key);\n if (raw === null) return fallback;\n try {\n return JSON.parse(raw);\n } catch {\n // if primitive was stored\n return raw as unknown as T;\n }\n}\n\nconst usePersistentState = <T>(key: string, defaultValue: T) => {\n const [value, setValue] = useState<T>(() => readFromStorage(key, defaultValue));\n\n const currentKeyRef = useRef(key);\n\n // when the key changes, re-hydrate from the new key\n useEffect(() => {\n if (currentKeyRef.current !== key) {\n currentKeyRef.current = key;\n setValue(readFromStorage(key, defaultValue));\n }\n // include defaultValue in case it changes across models\n }, [key, defaultValue]);\n\n // Persist synchronously after commit so values survive same-tab navigation (e.g. external\n // links) before the next paint useEffect can run after unload and skip writing.\n useLayoutEffect(() => {\n if (currentKeyRef.current !== key) return; // safety guard\n\n window.localStorage.setItem(key, JSON.stringify(value));\n }, [key, value]);\n\n return [value, setValue] as const;\n};\n\nconst usePersistentStateScope = () => {\n const { data: initData } = useInitQuery();\n\n return initData?.uuid;\n};\n\n// Same as usePersistentState, but scoped to the current instance of Strapi\n// useful for storing state that should not be shared across different instances of Strapi running on localhost\nconst useScopedPersistentState = <T>(key: string, defaultValue: T) => {\n const uuid = usePersistentStateScope();\n\n const namespacedKey = `${key}:${uuid}`;\n return usePersistentState<T>(namespacedKey, defaultValue);\n};\n\nexport { usePersistentState, useScopedPersistentState, usePersistentStateScope };\n"],"names":["readFromStorage","key","fallback","raw","window","localStorage","getItem","JSON","parse","usePersistentState","defaultValue","value","setValue","useState","currentKeyRef","useRef","useEffect","current","useLayoutEffect","setItem","stringify","usePersistentStateScope","data","initData","useInitQuery","uuid","useScopedPersistentState","namespacedKey"],"mappings":";;;AAIA,SAASA,eAAAA,CAAmBC,GAAW,EAAEC,QAAW,EAAA;AAClD,IAAA,MAAMC,GAAAA,GAAMC,MAAAA,CAAOC,YAAY,CAACC,OAAO,CAACL,GAAAA,CAAAA;IACxC,IAAIE,GAAAA,KAAQ,MAAM,OAAOD,QAAAA;IACzB,IAAI;QACF,OAAOK,IAAAA,CAAKC,KAAK,CAACL,GAAAA,CAAAA;AACpB,IAAA,CAAA,CAAE,OAAM;;QAEN,OAAOA,GAAAA;AACT,IAAA;AACF;AAEA,MAAMM,kBAAAA,GAAqB,CAAIR,GAAAA,EAAaS,YAAAA,GAAAA;AAC1C,IAAA,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,QAAAA,CAAY,IAAMb,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAEjE,IAAA,MAAMI,gBAAgBC,MAAAA,CAAOd,GAAAA,CAAAA;;IAG7Be,SAAAA,CAAU,IAAA;QACR,IAAIF,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AACjCa,YAAAA,aAAAA,CAAcG,OAAO,GAAGhB,GAAAA;AACxBW,YAAAA,QAAAA,CAASZ,gBAAgBC,GAAAA,EAAKS,YAAAA,CAAAA,CAAAA;AAChC,QAAA;;IAEF,CAAA,EAAG;AAACT,QAAAA,GAAAA;AAAKS,QAAAA;AAAa,KAAA,CAAA;;;IAItBQ,eAAAA,CAAgB,IAAA;AACd,QAAA,IAAIJ,aAAAA,CAAcG,OAAO,KAAKhB,GAAAA,EAAK;AAEnCG,QAAAA,MAAAA,CAAOC,YAAY,CAACc,OAAO,CAAClB,GAAAA,EAAKM,IAAAA,CAAKa,SAAS,CAACT,KAAAA,CAAAA,CAAAA;IAClD,CAAA,EAAG;AAACV,QAAAA,GAAAA;AAAKU,QAAAA;AAAM,KAAA,CAAA;IAEf,OAAO;AAACA,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA;AAC1B;AAEA,MAAMS,uBAAAA,GAA0B,IAAA;AAC9B,IAAA,MAAM,EAAEC,IAAAA,EAAMC,QAAQ,EAAE,GAAGC,YAAAA,EAAAA;AAE3B,IAAA,OAAOD,QAAAA,EAAUE,IAAAA;AACnB;AAEA;AACA;AACA,MAAMC,wBAAAA,GAA2B,CAAIzB,GAAAA,EAAaS,YAAAA,GAAAA;AAChD,IAAA,MAAMe,IAAAA,GAAOJ,uBAAAA,EAAAA;AAEb,IAAA,MAAMM,aAAAA,GAAgB,CAAA,EAAG1B,GAAAA,CAAI,CAAC,EAAEwB,IAAAA,CAAAA,CAAM;AACtC,IAAA,OAAOhB,mBAAsBkB,aAAAA,EAAejB,YAAAA,CAAAA;AAC9C;;;;"}
@@ -193,10 +193,13 @@ const LogoInput = ({ canUpdate, customLogo, defaultLogo, hint, label, onChangeLo
193
193
  responseType: 'blob',
194
194
  timeout: 8000
195
195
  });
196
+ // Axios types Content-Type as AxiosHeaderValue (string | array | null | …); File#type only accepts string | undefined.
197
+ const contentType = res.headers['content-type'];
198
+ const mimeType = typeof contentType === 'string' ? contentType : Array.isArray(contentType) ? contentType[0] : contentType != null && typeof contentType !== 'object' ? String(contentType) : undefined;
196
199
  const file = new File([
197
200
  res.data
198
201
  ], res.config.url ?? '', {
199
- type: res.headers['content-type']
202
+ type: mimeType
200
203
  });
201
204
  const asset = await files.parseFileMetadatas(file);
202
205
  setLocalImage(asset);