@strapi/admin 5.52.1 → 5.52.3

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 (85) hide show
  1. package/dist/admin/admin/src/components/Filters.js +9 -9
  2. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  3. package/dist/admin/admin/src/components/Filters.mjs +10 -10
  4. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/Pagination.js +2 -2
  6. package/dist/admin/admin/src/components/Pagination.js.map +1 -1
  7. package/dist/admin/admin/src/components/Pagination.mjs +3 -3
  8. package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/SearchInput.js +7 -8
  10. package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
  11. package/dist/admin/admin/src/components/SearchInput.mjs +8 -9
  12. package/dist/admin/admin/src/components/SearchInput.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/Table.js +2 -2
  14. package/dist/admin/admin/src/components/Table.js.map +1 -1
  15. package/dist/admin/admin/src/components/Table.mjs +3 -3
  16. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  17. package/dist/admin/admin/src/hooks/useQueryParams.js +35 -1
  18. package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
  19. package/dist/admin/admin/src/hooks/useQueryParams.mjs +34 -2
  20. package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
  21. package/dist/admin/admin/src/pages/Auth/AuthPage.js +14 -9
  22. package/dist/admin/admin/src/pages/Auth/AuthPage.js.map +1 -1
  23. package/dist/admin/admin/src/pages/Auth/AuthPage.mjs +15 -10
  24. package/dist/admin/admin/src/pages/Auth/AuthPage.mjs.map +1 -1
  25. package/dist/admin/admin/src/pages/Auth/components/Login.js +2 -6
  26. package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
  27. package/dist/admin/admin/src/pages/Auth/components/Login.mjs +2 -6
  28. package/dist/admin/admin/src/pages/Auth/components/Login.mjs.map +1 -1
  29. package/dist/admin/admin/src/pages/Auth/constants.js +24 -8
  30. package/dist/admin/admin/src/pages/Auth/constants.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Auth/constants.mjs +23 -9
  32. package/dist/admin/admin/src/pages/Auth/constants.mjs.map +1 -1
  33. package/dist/admin/admin/src/pages/Auth/utils.js +34 -0
  34. package/dist/admin/admin/src/pages/Auth/utils.js.map +1 -0
  35. package/dist/admin/admin/src/pages/Auth/utils.mjs +32 -0
  36. package/dist/admin/admin/src/pages/Auth/utils.mjs.map +1 -0
  37. package/dist/admin/admin/src/translations/pt-BR.json.js +1 -1
  38. package/dist/admin/admin/src/translations/pt-BR.json.mjs +1 -1
  39. package/dist/admin/admin/src/utils/getFetchClient.js +4 -0
  40. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  41. package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -0
  42. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  43. package/dist/admin/admin/src/utils/rulesEngine.js +27 -9
  44. package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
  45. package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -2
  46. package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
  47. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +9 -9
  48. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
  49. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +10 -10
  50. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
  51. package/dist/admin/index.js +2 -1
  52. package/dist/admin/index.js.map +1 -1
  53. package/dist/admin/index.mjs +2 -2
  54. package/dist/admin/src/components/Filters.d.ts +1 -0
  55. package/dist/admin/src/hooks/useQueryParams.d.ts +13 -1
  56. package/dist/admin/src/index.d.ts +1 -1
  57. package/dist/admin/src/pages/Auth/constants.d.ts +19 -5
  58. package/dist/admin/src/pages/Auth/utils.d.ts +7 -0
  59. package/dist/admin/src/utils/rulesEngine.d.ts +9 -13
  60. package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
  61. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +22 -4
  62. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  63. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +22 -4
  64. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  65. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
  66. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  67. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
  68. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  69. package/dist/server/server/src/controllers/validation/schema.js +36 -16
  70. package/dist/server/server/src/controllers/validation/schema.js.map +1 -1
  71. package/dist/server/server/src/controllers/validation/schema.mjs +1 -1
  72. package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -1
  73. package/dist/server/server/src/services/content-type.js +8 -3
  74. package/dist/server/server/src/services/content-type.js.map +1 -1
  75. package/dist/server/server/src/services/content-type.mjs +8 -3
  76. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  77. package/dist/server/server/src/services/permission/queries.js +3 -1
  78. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  79. package/dist/server/server/src/services/permission/queries.mjs +3 -1
  80. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  81. package/dist/server/src/controllers/validation/schema.d.ts +8 -48
  82. package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
  83. package/dist/server/src/services/content-type.d.ts.map +1 -1
  84. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  85. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.mjs","sources":["../../../../../admin/src/components/Pagination.tsx"],"sourcesContent":["/* eslint-disable import/export */\nimport * as React from 'react';\n\nimport {\n Flex,\n SingleSelectOption,\n SingleSelect,\n Typography,\n Dots,\n NextLink,\n PageLink,\n Pagination as PaginationImpl,\n PreviousLink,\n} from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\nimport type { Pagination as PaginationApi } from '../../../shared/contracts/shared';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\ninterface PaginationContextValue {\n /**\n * @description the complete query object, this could include query params\n * injected by other plugins, if you're navigating to a different page you\n * should ensure these are still passed.\n */\n currentQuery?: object;\n pageCount: string;\n pageSize: string;\n page: string;\n setPageSize: (pageSize: string) => void;\n total: NonNullable<RootProps['total']>;\n}\n\nconst [PaginationProvider, usePagination] = createContext<PaginationContextValue>('Pagination');\n\ninterface RootProps {\n children: React.ReactNode;\n /**\n * @default 0\n * @description the total number of pages\n * that exist in the dataset.\n */\n pageCount?: PaginationApi['pageCount'];\n /**\n * @default 1\n * @description the initial page number.\n */\n defaultPage?: PaginationApi['page'];\n /**\n * @default 10\n * @description the initial number of items to display\n */\n defaultPageSize?: PaginationApi['pageSize'];\n /**\n * @description a callback that is called when the page size changes.\n */\n onPageSizeChange?: (pageSize: string) => void;\n /**\n * @default 0\n * @description the total number of items in the dataset.\n */\n total?: PaginationApi['total'];\n}\n\n/**\n * @description The root component for the composable pagination component.\n * It's advised to spread the entire pagination option object into this component.\n *\n * @example\n * ```tsx\n * const MyComponent = () => {\n * return (\n * <Pagination.Root {...response.pagination}>\n * <Pagination.PageSize />\n * <Pagination.Links />\n * </Pagination.Root>\n * );\n * };\n * ```\n */\nconst Root = React.forwardRef<HTMLDivElement, RootProps>(\n (\n { children, defaultPageSize = 10, pageCount = 0, defaultPage = 1, onPageSizeChange, total = 0 },\n forwardedRef\n ) => {\n const [{ query }, setQuery] = useQueryParams<Pick<PaginationContextValue, 'page' | 'pageSize'>>(\n {\n pageSize: defaultPageSize.toString(),\n page: defaultPage.toString(),\n }\n );\n\n const setPageSize = (pageSize: string) => {\n setQuery({ pageSize, page: '1' });\n\n if (onPageSizeChange) {\n onPageSizeChange(pageSize);\n }\n };\n\n return (\n <Flex\n ref={forwardedRef}\n paddingTop={4}\n paddingBottom={4}\n alignItems=\"flex-end\"\n justifyContent=\"space-between\"\n >\n <PaginationProvider\n currentQuery={query}\n page={query.page}\n pageSize={query.pageSize}\n pageCount={pageCount.toString()}\n setPageSize={setPageSize}\n total={total}\n >\n {children}\n </PaginationProvider>\n </Flex>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * PageSize\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description The page size component is responsible for rendering the select input that allows\n * the user to change the number of items displayed per page.\n * If the total number of items is less than the minimum option, this component will not render.\n */\nconst PageSize = ({ options = ['10', '20', '50', '100'] }: Pagination.PageSizeProps) => {\n const { formatMessage } = useIntl();\n\n const pageSize = usePagination('PageSize', (state) => state.pageSize);\n const totalCount = usePagination('PageSize', (state) => state.total);\n const setPageSize = usePagination('PageSize', (state) => state.setPageSize);\n\n const handleChange = (value: string) => {\n setPageSize(value);\n };\n\n const minimumOption = parseInt(options[0], 10);\n\n if (minimumOption >= totalCount) {\n return null;\n }\n\n return (\n <Flex gap={2}>\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: 'components.PageFooter.select',\n defaultMessage: 'Entries per page',\n })}\n // @ts-expect-error from the DS V2 this won't be needed because we're only returning strings.\n onChange={handleChange}\n value={pageSize}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {option}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Typography textColor=\"neutral600\" tag=\"span\">\n {formatMessage({\n id: 'components.PageFooter.select',\n defaultMessage: 'Entries per page',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Links\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * The component works as follows\n * `1` , 2, 3, ... 10\n * 1, `2`, 3, ... 10\n * 1, 2, `3`, 4, ... 10\n * 1, 2, 3, `4`, 5, ... 10\n * 1, ..,4, `5`, 6, ... 10\n *\n * 1, ...., 8, 9, `10`\n * 1, ...., 8, `9`, 10\n * 1, ...., 7, `8`, 9, 10\n * 1, ... 6, `7`, 8, 9, 10\n */\n\n/**\n * @description The links component is responsible for rendering the pagination links.\n * If the total number of pages is less than or equal to 1, this component will not render.\n */\nconst Links = ({ boundaryCount = 1, siblingCount = 1 }: Pagination.LinksProps) => {\n const { formatMessage } = useIntl();\n\n const query = usePagination('Links', (state) => state.currentQuery);\n const currentPage = usePagination('Links', (state) => state.page);\n const totalPages = usePagination('Links', (state) => state.pageCount);\n\n const pageCount = parseInt(totalPages, 10);\n const activePage = parseInt(currentPage, 10);\n\n const range = (start: number, end: number) => {\n const length = end - start + 1;\n\n return Array.from({ length }, (_, i) => start + i);\n };\n\n const startPages = range(1, Math.min(boundaryCount, pageCount));\n const endPages = range(Math.max(pageCount - boundaryCount + 1, boundaryCount + 1), pageCount);\n\n const siblingsStart = Math.max(\n Math.min(\n // Natural start\n activePage - siblingCount,\n // Lower boundary when page is high\n pageCount - boundaryCount - siblingCount * 2 - 1\n ),\n // Greater than startPages\n boundaryCount + 2\n );\n\n const siblingsEnd = Math.min(\n Math.max(\n // Natural end\n activePage + siblingCount,\n // Upper boundary when page is low\n boundaryCount + siblingCount * 2 + 2\n ),\n // Less than endPages\n endPages.length > 0 ? endPages[0] - 2 : pageCount - 1\n );\n\n const items = [\n ...startPages,\n\n // Start ellipsis\n // eslint-disable-next-line no-nested-ternary\n ...(siblingsStart > boundaryCount + 2\n ? ['start-ellipsis']\n : boundaryCount + 1 < pageCount - boundaryCount\n ? [boundaryCount + 1]\n : []),\n\n // Sibling pages\n ...range(siblingsStart, siblingsEnd),\n\n // End ellipsis\n // eslint-disable-next-line no-nested-ternary\n ...(siblingsEnd < pageCount - boundaryCount - 1\n ? ['end-ellipsis']\n : pageCount - boundaryCount > boundaryCount\n ? [pageCount - boundaryCount]\n : []),\n\n ...endPages,\n ];\n\n if (pageCount <= 1) {\n return null;\n }\n\n return (\n <PaginationImpl activePage={activePage} pageCount={pageCount}>\n <PreviousLink tag={Link} to={{ search: stringify({ ...query, page: activePage - 1 }) }}>\n {formatMessage({\n id: 'components.pagination.go-to-previous',\n defaultMessage: 'Go to previous page',\n })}\n </PreviousLink>\n {items.map((item) => {\n if (typeof item === 'number') {\n return (\n <PageLink\n tag={Link}\n key={item}\n number={item}\n to={{ search: stringify({ ...query, page: item }) }}\n >\n {formatMessage(\n { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n { page: item }\n )}\n </PageLink>\n );\n }\n\n return <Dots key={item} />;\n })}\n\n <NextLink tag={Link} to={{ search: stringify({ ...query, page: activePage + 1 }) }}>\n {formatMessage({\n id: 'components.pagination.go-to-next',\n defaultMessage: 'Go to next page',\n })}\n </NextLink>\n </PaginationImpl>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Pagination = {\n Root,\n Links,\n PageSize,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Pagination {\n export interface Props extends RootProps {}\n\n export interface PageSizeProps {\n options?: string[];\n }\n\n export interface LinksProps {\n /**\n * @default 1\n * @description Number of always visible pages at the beginning and end.\n */\n boundaryCount?: number;\n /**\n * @default 1\n * @description Number of always visible pages before and after the current page.\n */\n siblingCount?: number;\n }\n}\n\nexport { Pagination };\n"],"names":["PaginationProvider","usePagination","createContext","Root","React","forwardRef","children","defaultPageSize","pageCount","defaultPage","onPageSizeChange","total","forwardedRef","query","setQuery","useQueryParams","pageSize","toString","page","setPageSize","_jsx","Flex","ref","paddingTop","paddingBottom","alignItems","justifyContent","currentQuery","PageSize","options","formatMessage","useIntl","state","totalCount","handleChange","value","minimumOption","parseInt","_jsxs","gap","SingleSelect","size","aria-label","id","defaultMessage","onChange","map","option","SingleSelectOption","Typography","textColor","tag","Links","boundaryCount","siblingCount","currentPage","totalPages","activePage","range","start","end","length","Array","from","_","i","startPages","Math","min","endPages","max","siblingsStart","siblingsEnd","items","PaginationImpl","PreviousLink","Link","to","search","stringify","item","PageLink","number","Dots","NextLink","Pagination"],"mappings":"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"}
1
+ {"version":3,"file":"Pagination.mjs","sources":["../../../../../admin/src/components/Pagination.tsx"],"sourcesContent":["/* eslint-disable import/export */\nimport * as React from 'react';\n\nimport {\n Flex,\n SingleSelectOption,\n SingleSelect,\n Typography,\n Dots,\n NextLink,\n PageLink,\n Pagination as PaginationImpl,\n PreviousLink,\n} from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { useQueryParams, withEncodedUserParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\nimport type { Pagination as PaginationApi } from '../../../shared/contracts/shared';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\ninterface PaginationContextValue {\n /**\n * @description the complete query object, this could include query params\n * injected by other plugins, if you're navigating to a different page you\n * should ensure these are still passed.\n */\n currentQuery?: object;\n pageCount: string;\n pageSize: string;\n page: string;\n setPageSize: (pageSize: string) => void;\n total: NonNullable<RootProps['total']>;\n}\n\nconst [PaginationProvider, usePagination] = createContext<PaginationContextValue>('Pagination');\n\ninterface RootProps {\n children: React.ReactNode;\n /**\n * @default 0\n * @description the total number of pages\n * that exist in the dataset.\n */\n pageCount?: PaginationApi['pageCount'];\n /**\n * @default 1\n * @description the initial page number.\n */\n defaultPage?: PaginationApi['page'];\n /**\n * @default 10\n * @description the initial number of items to display\n */\n defaultPageSize?: PaginationApi['pageSize'];\n /**\n * @description a callback that is called when the page size changes.\n */\n onPageSizeChange?: (pageSize: string) => void;\n /**\n * @default 0\n * @description the total number of items in the dataset.\n */\n total?: PaginationApi['total'];\n}\n\n/**\n * @description The root component for the composable pagination component.\n * It's advised to spread the entire pagination option object into this component.\n *\n * @example\n * ```tsx\n * const MyComponent = () => {\n * return (\n * <Pagination.Root {...response.pagination}>\n * <Pagination.PageSize />\n * <Pagination.Links />\n * </Pagination.Root>\n * );\n * };\n * ```\n */\nconst Root = React.forwardRef<HTMLDivElement, RootProps>(\n (\n { children, defaultPageSize = 10, pageCount = 0, defaultPage = 1, onPageSizeChange, total = 0 },\n forwardedRef\n ) => {\n const [{ query }, setQuery] = useQueryParams<\n Pick<PaginationContextValue, 'page' | 'pageSize'> & { filters?: unknown; _q?: unknown }\n >({\n pageSize: defaultPageSize.toString(),\n page: defaultPage.toString(),\n });\n\n const setPageSize = (pageSize: string) => {\n setQuery(withEncodedUserParams(query, { pageSize, page: '1' }));\n\n if (onPageSizeChange) {\n onPageSizeChange(pageSize);\n }\n };\n\n return (\n <Flex\n ref={forwardedRef}\n paddingTop={4}\n paddingBottom={4}\n alignItems=\"flex-end\"\n justifyContent=\"space-between\"\n >\n <PaginationProvider\n currentQuery={query}\n page={query.page}\n pageSize={query.pageSize}\n pageCount={pageCount.toString()}\n setPageSize={setPageSize}\n total={total}\n >\n {children}\n </PaginationProvider>\n </Flex>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * PageSize\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description The page size component is responsible for rendering the select input that allows\n * the user to change the number of items displayed per page.\n * If the total number of items is less than the minimum option, this component will not render.\n */\nconst PageSize = ({ options = ['10', '20', '50', '100'] }: Pagination.PageSizeProps) => {\n const { formatMessage } = useIntl();\n\n const pageSize = usePagination('PageSize', (state) => state.pageSize);\n const totalCount = usePagination('PageSize', (state) => state.total);\n const setPageSize = usePagination('PageSize', (state) => state.setPageSize);\n\n const handleChange = (value: string) => {\n setPageSize(value);\n };\n\n const minimumOption = parseInt(options[0], 10);\n\n if (minimumOption >= totalCount) {\n return null;\n }\n\n return (\n <Flex gap={2}>\n <SingleSelect\n size=\"S\"\n aria-label={formatMessage({\n id: 'components.PageFooter.select',\n defaultMessage: 'Entries per page',\n })}\n // @ts-expect-error from the DS V2 this won't be needed because we're only returning strings.\n onChange={handleChange}\n value={pageSize}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {option}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Typography textColor=\"neutral600\" tag=\"span\">\n {formatMessage({\n id: 'components.PageFooter.select',\n defaultMessage: 'Entries per page',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Links\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * The component works as follows\n * `1` , 2, 3, ... 10\n * 1, `2`, 3, ... 10\n * 1, 2, `3`, 4, ... 10\n * 1, 2, 3, `4`, 5, ... 10\n * 1, ..,4, `5`, 6, ... 10\n *\n * 1, ...., 8, 9, `10`\n * 1, ...., 8, `9`, 10\n * 1, ...., 7, `8`, 9, 10\n * 1, ... 6, `7`, 8, 9, 10\n */\n\n/**\n * @description The links component is responsible for rendering the pagination links.\n * If the total number of pages is less than or equal to 1, this component will not render.\n */\nconst Links = ({ boundaryCount = 1, siblingCount = 1 }: Pagination.LinksProps) => {\n const { formatMessage } = useIntl();\n\n const query = usePagination('Links', (state) => state.currentQuery);\n const currentPage = usePagination('Links', (state) => state.page);\n const totalPages = usePagination('Links', (state) => state.pageCount);\n\n const pageCount = parseInt(totalPages, 10);\n const activePage = parseInt(currentPage, 10);\n\n const range = (start: number, end: number) => {\n const length = end - start + 1;\n\n return Array.from({ length }, (_, i) => start + i);\n };\n\n const startPages = range(1, Math.min(boundaryCount, pageCount));\n const endPages = range(Math.max(pageCount - boundaryCount + 1, boundaryCount + 1), pageCount);\n\n const siblingsStart = Math.max(\n Math.min(\n // Natural start\n activePage - siblingCount,\n // Lower boundary when page is high\n pageCount - boundaryCount - siblingCount * 2 - 1\n ),\n // Greater than startPages\n boundaryCount + 2\n );\n\n const siblingsEnd = Math.min(\n Math.max(\n // Natural end\n activePage + siblingCount,\n // Upper boundary when page is low\n boundaryCount + siblingCount * 2 + 2\n ),\n // Less than endPages\n endPages.length > 0 ? endPages[0] - 2 : pageCount - 1\n );\n\n const items = [\n ...startPages,\n\n // Start ellipsis\n // eslint-disable-next-line no-nested-ternary\n ...(siblingsStart > boundaryCount + 2\n ? ['start-ellipsis']\n : boundaryCount + 1 < pageCount - boundaryCount\n ? [boundaryCount + 1]\n : []),\n\n // Sibling pages\n ...range(siblingsStart, siblingsEnd),\n\n // End ellipsis\n // eslint-disable-next-line no-nested-ternary\n ...(siblingsEnd < pageCount - boundaryCount - 1\n ? ['end-ellipsis']\n : pageCount - boundaryCount > boundaryCount\n ? [pageCount - boundaryCount]\n : []),\n\n ...endPages,\n ];\n\n if (pageCount <= 1) {\n return null;\n }\n\n return (\n <PaginationImpl activePage={activePage} pageCount={pageCount}>\n <PreviousLink tag={Link} to={{ search: stringify({ ...query, page: activePage - 1 }) }}>\n {formatMessage({\n id: 'components.pagination.go-to-previous',\n defaultMessage: 'Go to previous page',\n })}\n </PreviousLink>\n {items.map((item) => {\n if (typeof item === 'number') {\n return (\n <PageLink\n tag={Link}\n key={item}\n number={item}\n to={{ search: stringify({ ...query, page: item }) }}\n >\n {formatMessage(\n { id: 'components.pagination.go-to', defaultMessage: 'Go to page {page}' },\n { page: item }\n )}\n </PageLink>\n );\n }\n\n return <Dots key={item} />;\n })}\n\n <NextLink tag={Link} to={{ search: stringify({ ...query, page: activePage + 1 }) }}>\n {formatMessage({\n id: 'components.pagination.go-to-next',\n defaultMessage: 'Go to next page',\n })}\n </NextLink>\n </PaginationImpl>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Pagination = {\n Root,\n Links,\n PageSize,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Pagination {\n export interface Props extends RootProps {}\n\n export interface PageSizeProps {\n options?: string[];\n }\n\n export interface LinksProps {\n /**\n * @default 1\n * @description Number of always visible pages at the beginning and end.\n */\n boundaryCount?: number;\n /**\n * @default 1\n * @description Number of always visible pages before and after the current page.\n */\n siblingCount?: number;\n }\n}\n\nexport { Pagination };\n"],"names":["PaginationProvider","usePagination","createContext","Root","React","forwardRef","children","defaultPageSize","pageCount","defaultPage","onPageSizeChange","total","forwardedRef","query","setQuery","useQueryParams","pageSize","toString","page","setPageSize","withEncodedUserParams","_jsx","Flex","ref","paddingTop","paddingBottom","alignItems","justifyContent","currentQuery","PageSize","options","formatMessage","useIntl","state","totalCount","handleChange","value","minimumOption","parseInt","_jsxs","gap","SingleSelect","size","aria-label","id","defaultMessage","onChange","map","option","SingleSelectOption","Typography","textColor","tag","Links","boundaryCount","siblingCount","currentPage","totalPages","activePage","range","start","end","length","Array","from","_","i","startPages","Math","min","endPages","max","siblingsStart","siblingsEnd","items","PaginationImpl","PreviousLink","Link","to","search","stringify","item","PageLink","number","Dots","NextLink","Pagination"],"mappings":";;;;;;;;;AAyCA,MAAM,CAACA,kBAAAA,EAAoBC,aAAAA,CAAc,GAAGC,aAAAA,CAAsC,YAAA,CAAA;AA+BlF;;;;;;;;;;;;;;;IAgBA,MAAMC,qBAAOC,KAAAA,CAAMC,UAAU,CAC3B,CACE,EAAEC,QAAQ,EAAEC,eAAAA,GAAkB,EAAE,EAAEC,SAAAA,GAAY,CAAC,EAAEC,WAAAA,GAAc,CAAC,EAAEC,gBAAgB,EAAEC,KAAAA,GAAQ,CAAC,EAAE,EAC/FC,YAAAA,GAAAA;AAEA,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,EAAEC,QAAAA,CAAS,GAAGC,cAAAA,CAE5B;AACAC,QAAAA,QAAAA,EAAUT,gBAAgBU,QAAQ,EAAA;AAClCC,QAAAA,IAAAA,EAAMT,YAAYQ,QAAQ;AAC5B,KAAA,CAAA;AAEA,IAAA,MAAME,cAAc,CAACH,QAAAA,GAAAA;AACnBF,QAAAA,QAAAA,CAASM,sBAAsBP,KAAAA,EAAO;AAAEG,YAAAA,QAAAA;YAAUE,IAAAA,EAAM;AAAI,SAAA,CAAA,CAAA;AAE5D,QAAA,IAAIR,gBAAAA,EAAkB;YACpBA,gBAAAA,CAAiBM,QAAAA,CAAAA;AACnB,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEK,GAAA,CAACC,IAAAA,EAAAA;QACCC,GAAAA,EAAKX,YAAAA;QACLY,UAAAA,EAAY,CAAA;QACZC,aAAAA,EAAe,CAAA;QACfC,UAAAA,EAAW,UAAA;QACXC,cAAAA,EAAe,eAAA;AAEf,QAAA,QAAA,gBAAAN,GAAA,CAACrB,kBAAAA,EAAAA;YACC4B,YAAAA,EAAcf,KAAAA;AACdK,YAAAA,IAAAA,EAAML,MAAMK,IAAI;AAChBF,YAAAA,QAAAA,EAAUH,MAAMG,QAAQ;AACxBR,YAAAA,SAAAA,EAAWA,UAAUS,QAAQ,EAAA;YAC7BE,WAAAA,EAAaA,WAAAA;YACbR,KAAAA,EAAOA,KAAAA;AAENL,YAAAA,QAAAA,EAAAA;;;AAIT,CAAA,CAAA;AAGF;;;;;;AAQC,IACD,MAAMuB,QAAAA,GAAW,CAAC,EAAEC,OAAAA,GAAU;AAAC,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA,IAAA;AAAM,IAAA;CAAM,EAA4B,GAAA;IACjF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,MAAMhB,WAAWf,aAAAA,CAAc,UAAA,EAAY,CAACgC,KAAAA,GAAUA,MAAMjB,QAAQ,CAAA;AACpE,IAAA,MAAMkB,aAAajC,aAAAA,CAAc,UAAA,EAAY,CAACgC,KAAAA,GAAUA,MAAMtB,KAAK,CAAA;AACnE,IAAA,MAAMQ,cAAclB,aAAAA,CAAc,UAAA,EAAY,CAACgC,KAAAA,GAAUA,MAAMd,WAAW,CAAA;AAE1E,IAAA,MAAMgB,eAAe,CAACC,KAAAA,GAAAA;QACpBjB,WAAAA,CAAYiB,KAAAA,CAAAA;AACd,IAAA,CAAA;AAEA,IAAA,MAAMC,aAAAA,GAAgBC,QAAAA,CAASR,OAAO,CAAC,EAAE,EAAE,EAAA,CAAA;AAE3C,IAAA,IAAIO,iBAAiBH,UAAAA,EAAY;QAC/B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEK,IAAA,CAACjB,IAAAA,EAAAA;QAAKkB,GAAAA,EAAK,CAAA;;0BACTnB,GAAA,CAACoB,YAAAA,EAAAA;gBACCC,IAAAA,EAAK,GAAA;AACLC,gBAAAA,YAAAA,EAAYZ,aAAAA,CAAc;oBACxBa,EAAAA,EAAI,8BAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;;gBAEAC,QAAAA,EAAUX,YAAAA;gBACVC,KAAAA,EAAOpB,QAAAA;AAENc,gBAAAA,QAAAA,EAAAA,OAAAA,CAAQiB,GAAG,CAAC,CAACC,MAAAA,iBACZ3B,GAAA,CAAC4B,kBAAAA,EAAAA;wBAAgCb,KAAAA,EAAOY,MAAAA;AACrCA,wBAAAA,QAAAA,EAAAA;AADsBA,qBAAAA,EAAAA,MAAAA,CAAAA;;0BAK7B3B,GAAA,CAAC6B,UAAAA,EAAAA;gBAAWC,SAAAA,EAAU,YAAA;gBAAaC,GAAAA,EAAI,MAAA;0BACpCrB,aAAAA,CAAc;oBACba,EAAAA,EAAI,8BAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAEA;;;;;;;;;;;;;;;;;IAsBA,MAAMQ,QAAQ,CAAC,EAAEC,gBAAgB,CAAC,EAAEC,YAAAA,GAAe,CAAC,EAAyB,GAAA;IAC3E,MAAM,EAAExB,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,MAAMnB,QAAQZ,aAAAA,CAAc,OAAA,EAAS,CAACgC,KAAAA,GAAUA,MAAML,YAAY,CAAA;AAClE,IAAA,MAAM4B,cAAcvD,aAAAA,CAAc,OAAA,EAAS,CAACgC,KAAAA,GAAUA,MAAMf,IAAI,CAAA;AAChE,IAAA,MAAMuC,aAAaxD,aAAAA,CAAc,OAAA,EAAS,CAACgC,KAAAA,GAAUA,MAAMzB,SAAS,CAAA;IAEpE,MAAMA,SAAAA,GAAY8B,SAASmB,UAAAA,EAAY,EAAA,CAAA;IACvC,MAAMC,UAAAA,GAAapB,SAASkB,WAAAA,EAAa,EAAA,CAAA;IAEzC,MAAMG,KAAAA,GAAQ,CAACC,KAAAA,EAAeC,GAAAA,GAAAA;QAC5B,MAAMC,MAAAA,GAASD,MAAMD,KAAAA,GAAQ,CAAA;QAE7B,OAAOG,KAAAA,CAAMC,IAAI,CAAC;AAAEF,YAAAA;SAAO,EAAG,CAACG,CAAAA,EAAGC,CAAAA,GAAMN,KAAAA,GAAQM,CAAAA,CAAAA;AAClD,IAAA,CAAA;AAEA,IAAA,MAAMC,aAAaR,KAAAA,CAAM,CAAA,EAAGS,IAAAA,CAAKC,GAAG,CAACf,aAAAA,EAAe9C,SAAAA,CAAAA,CAAAA;IACpD,MAAM8D,QAAAA,GAAWX,MAAMS,IAAAA,CAAKG,GAAG,CAAC/D,SAAAA,GAAY8C,aAAAA,GAAgB,CAAA,EAAGA,aAAAA,GAAgB,CAAA,CAAA,EAAI9C,SAAAA,CAAAA;AAEnF,IAAA,MAAMgE,gBAAgBJ,IAAAA,CAAKG,GAAG,CAC5BH,IAAAA,CAAKC,GAAG;AAENX,IAAAA,UAAAA,GAAaH;AAEb/C,IAAAA,SAAAA,GAAY8C,aAAAA,GAAgBC,YAAAA,GAAe,CAAA,GAAI,CAAA,CAAA;IAGjDD,aAAAA,GAAgB,CAAA,CAAA;AAGlB,IAAA,MAAMmB,cAAcL,IAAAA,CAAKC,GAAG,CAC1BD,IAAAA,CAAKG,GAAG;AAENb,IAAAA,UAAAA,GAAaH;IAEbD,aAAAA,GAAgBC,YAAAA,GAAe,CAAA,GAAI,CAAA,CAAA;IAGrCe,QAAAA,CAASR,MAAM,GAAG,CAAA,GAAIQ,QAAQ,CAAC,CAAA,CAAE,GAAG,IAAI9D,SAAAA,GAAY,CAAA,CAAA;AAGtD,IAAA,MAAMkE,KAAAA,GAAQ;AACTP,QAAAA,GAAAA,UAAAA;;;AAICK,QAAAA,GAAAA,aAAAA,GAAgBlB,gBAAgB,CAAA,GAChC;AAAC,YAAA;SAAiB,GAClBA,aAAAA,GAAgB,CAAA,GAAI9C,SAAAA,GAAY8C,aAAAA,GAC9B;YAACA,aAAAA,GAAgB;AAAE,SAAA,GACnB,EAAE;;AAGLK,QAAAA,GAAAA,KAAAA,CAAMa,aAAAA,EAAeC,WAAAA,CAAAA;;;WAIpBA,WAAAA,GAAcjE,SAAAA,GAAY8C,gBAAgB,CAAA,GAC1C;AAAC,YAAA;SAAe,GAChB9C,SAAAA,GAAY8C,gBAAgBA,aAAAA,GAC1B;YAAC9C,SAAAA,GAAY8C;AAAc,SAAA,GAC3B,EAAE;AAELgB,QAAAA,GAAAA;AACJ,KAAA;AAED,IAAA,IAAI9D,aAAa,CAAA,EAAG;QAClB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACE+B,IAAA,CAACoC,YAAAA,EAAAA;QAAejB,UAAAA,EAAYA,UAAAA;QAAYlD,SAAAA,EAAWA,SAAAA;;0BACjDa,GAAA,CAACuD,YAAAA,EAAAA;gBAAaxB,GAAAA,EAAKyB,IAAAA;gBAAMC,EAAAA,EAAI;AAAEC,oBAAAA,MAAAA,EAAQC,SAAAA,CAAU;AAAE,wBAAA,GAAGnE,KAAK;AAAEK,wBAAAA,IAAAA,EAAMwC,UAAAA,GAAa;AAAE,qBAAA;AAAG,iBAAA;0BAClF3B,aAAAA,CAAc;oBACba,EAAAA,EAAI,sCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;YAED6B,KAAAA,CAAM3B,GAAG,CAAC,CAACkC,IAAAA,GAAAA;gBACV,IAAI,OAAOA,SAAS,QAAA,EAAU;AAC5B,oBAAA,qBACE5D,GAAA,CAAC6D,QAAAA,EAAAA;wBACC9B,GAAAA,EAAKyB,IAAAA;wBAELM,MAAAA,EAAQF,IAAAA;wBACRH,EAAAA,EAAI;AAAEC,4BAAAA,MAAAA,EAAQC,SAAAA,CAAU;AAAE,gCAAA,GAAGnE,KAAK;gCAAEK,IAAAA,EAAM+D;AAAK,6BAAA;AAAG,yBAAA;kCAEjDlD,aAAAA,CACC;4BAAEa,EAAAA,EAAI,6BAAA;4BAA+BC,cAAAA,EAAgB;yBAAoB,EACzE;4BAAE3B,IAAAA,EAAM+D;AAAK,yBAAA;AANVA,qBAAAA,EAAAA,IAAAA,CAAAA;AAUX,gBAAA;AAEA,gBAAA,qBAAO5D,IAAC+D,IAAAA,EAAAA,EAAAA,EAAUH,IAAAA,CAAAA;AACpB,YAAA,CAAA,CAAA;0BAEA5D,GAAA,CAACgE,QAAAA,EAAAA;gBAASjC,GAAAA,EAAKyB,IAAAA;gBAAMC,EAAAA,EAAI;AAAEC,oBAAAA,MAAAA,EAAQC,SAAAA,CAAU;AAAE,wBAAA,GAAGnE,KAAK;AAAEK,wBAAAA,IAAAA,EAAMwC,UAAAA,GAAa;AAAE,qBAAA;AAAG,iBAAA;0BAC9E3B,aAAAA,CAAc;oBACba,EAAAA,EAAI,kCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAEA;;AAEkG,2GAE5FyC,UAAAA,GAAa;AACjBnF,IAAAA,IAAAA;AACAkD,IAAAA,KAAAA;AACAxB,IAAAA;AACF;;;;"}
@@ -46,11 +46,12 @@ const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventD
46
46
  }, [
47
47
  isOpen
48
48
  ]);
49
+ const clearSearch = ()=>setQuery(useQueryParams.withEncodedUserParams(query, {
50
+ _q: undefined
51
+ }));
49
52
  const handleClear = ()=>{
50
53
  setValue('');
51
- setQuery({
52
- _q: ''
53
- }, 'remove');
54
+ clearSearch();
54
55
  };
55
56
  const handleSubmit = (e)=>{
56
57
  e.preventDefault();
@@ -59,15 +60,13 @@ const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventD
59
60
  if (trackedEvent) {
60
61
  trackUsage(trackedEvent, trackedEventDetails);
61
62
  }
62
- setQuery({
63
+ setQuery(useQueryParams.withEncodedUserParams(query, {
63
64
  _q: encodeURIComponent(value),
64
65
  page: 1
65
- });
66
+ }));
66
67
  } else {
67
68
  handleToggle();
68
- setQuery({
69
- _q: ''
70
- }, 'remove');
69
+ clearSearch();
71
70
  }
72
71
  };
73
72
  const renderSearchForm = (opts)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SearchForm, {
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{ _q: string; page?: number }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const isMobile = useIsMobile();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleClear = () => {\n setValue('');\n setQuery({ _q: '' }, 'remove');\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery({ _q: encodeURIComponent(value), page: 1 });\n } else {\n handleToggle();\n setQuery({ _q: '' }, 'remove');\n }\n };\n\n const renderSearchForm = (opts?: { enableBlurClose?: boolean }) => (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={isMobile ? undefined : placeholder}\n disabled={disabled}\n onBlur={\n opts?.enableBlurClose\n ? (e) => {\n if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {\n setIsOpen(false);\n }\n }\n : undefined\n }\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n\n if (isMobile) {\n // Add wrapper so that the Searchbar takes up the rest of the available space.\n return <Box width=\"100%\">{renderSearchForm()}</Box>;\n }\n\n if (isOpen) {\n return renderSearchForm({ enableBlurClose: true });\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","isMobile","useIsMobile","handleToggle","prev","useLayoutEffect","current","focus","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","renderSearchForm","opts","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","undefined","onBlur","enableBlurClose","currentTarget","contains","relatedTarget","Box","width","IconButton","onClick","SearchIcon"],"mappings":"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"}
1
+ {"version":3,"file":"SearchInput.js","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { useQueryParams, withEncodedUserParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{\n _q?: string;\n page?: number;\n filters?: unknown;\n }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const isMobile = useIsMobile();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const clearSearch = () => setQuery(withEncodedUserParams(query, { _q: undefined }));\n\n const handleClear = () => {\n setValue('');\n clearSearch();\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery(withEncodedUserParams(query, { _q: encodeURIComponent(value), page: 1 }));\n } else {\n handleToggle();\n clearSearch();\n }\n };\n\n const renderSearchForm = (opts?: { enableBlurClose?: boolean }) => (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={isMobile ? undefined : placeholder}\n disabled={disabled}\n onBlur={\n opts?.enableBlurClose\n ? (e) => {\n if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {\n setIsOpen(false);\n }\n }\n : undefined\n }\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n\n if (isMobile) {\n // Add wrapper so that the Searchbar takes up the rest of the available space.\n return <Box width=\"100%\">{renderSearchForm()}</Box>;\n }\n\n if (isOpen) {\n return renderSearchForm({ enableBlurClose: true });\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","isMobile","useIsMobile","handleToggle","prev","useLayoutEffect","current","focus","clearSearch","withEncodedUserParams","undefined","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","renderSearchForm","opts","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","onBlur","enableBlurClose","currentTarget","contains","relatedTarget","Box","width","IconButton","onClick","SearchIcon"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Search } from '@strapi/icons';
5
5
  import { useIntl } from 'react-intl';
6
6
  import { useTracking } from '../features/Tracking.mjs';
7
7
  import { useIsMobile } from '../hooks/useMediaQuery.mjs';
8
- import { useQueryParams } from '../hooks/useQueryParams.mjs';
8
+ import { useQueryParams, withEncodedUserParams } from '../hooks/useQueryParams.mjs';
9
9
 
10
10
  const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventDetails })=>{
11
11
  const inputRef = React.useRef(null);
@@ -24,11 +24,12 @@ const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventD
24
24
  }, [
25
25
  isOpen
26
26
  ]);
27
+ const clearSearch = ()=>setQuery(withEncodedUserParams(query, {
28
+ _q: undefined
29
+ }));
27
30
  const handleClear = ()=>{
28
31
  setValue('');
29
- setQuery({
30
- _q: ''
31
- }, 'remove');
32
+ clearSearch();
32
33
  };
33
34
  const handleSubmit = (e)=>{
34
35
  e.preventDefault();
@@ -37,15 +38,13 @@ const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventD
37
38
  if (trackedEvent) {
38
39
  trackUsage(trackedEvent, trackedEventDetails);
39
40
  }
40
- setQuery({
41
+ setQuery(withEncodedUserParams(query, {
41
42
  _q: encodeURIComponent(value),
42
43
  page: 1
43
- });
44
+ }));
44
45
  } else {
45
46
  handleToggle();
46
- setQuery({
47
- _q: ''
48
- }, 'remove');
47
+ clearSearch();
49
48
  }
50
49
  };
51
50
  const renderSearchForm = (opts)=>/*#__PURE__*/ jsx(SearchForm, {
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.mjs","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{ _q: string; page?: number }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const isMobile = useIsMobile();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleClear = () => {\n setValue('');\n setQuery({ _q: '' }, 'remove');\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery({ _q: encodeURIComponent(value), page: 1 });\n } else {\n handleToggle();\n setQuery({ _q: '' }, 'remove');\n }\n };\n\n const renderSearchForm = (opts?: { enableBlurClose?: boolean }) => (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={isMobile ? undefined : placeholder}\n disabled={disabled}\n onBlur={\n opts?.enableBlurClose\n ? (e) => {\n if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {\n setIsOpen(false);\n }\n }\n : undefined\n }\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n\n if (isMobile) {\n // Add wrapper so that the Searchbar takes up the rest of the available space.\n return <Box width=\"100%\">{renderSearchForm()}</Box>;\n }\n\n if (isOpen) {\n return renderSearchForm({ enableBlurClose: true });\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","isMobile","useIsMobile","handleToggle","prev","useLayoutEffect","current","focus","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","renderSearchForm","opts","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","undefined","onBlur","enableBlurClose","currentTarget","contains","relatedTarget","Box","width","IconButton","onClick","SearchIcon"],"mappings":";;;;;;;;;AAkBA,MAAMA,WAAAA,GAAc,CAAC,EACnBC,QAAQ,EACRC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,mBAAmB,EACF,GAAA;IACjB,MAAMC,QAAAA,GAAWC,KAAAA,CAAMC,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAMC,aAAAA,GAAgBF,KAAAA,CAAMC,MAAM,CAAoB,IAAA,CAAA;AAEtD,IAAA,MAAM,CAAC,EAAEE,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;IAE9B,MAAM,CAACC,OAAOC,QAAAA,CAAS,GAAGP,MAAMQ,QAAQ,CAACL,OAAOM,EAAAA,IAAM,EAAA,CAAA;IACtD,MAAM,CAACC,QAAQC,SAAAA,CAAU,GAAGX,MAAMQ,QAAQ,CAAC,CAAC,CAACF,KAAAA,CAAAA;IAE7C,MAAM,EAAEM,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;AAEjB,IAAA,MAAMC,YAAAA,GAAe,IAAMP,SAAAA,CAAU,CAACQ,OAAS,CAACA,IAAAA,CAAAA;AAEhDnB,IAAAA,KAAAA,CAAMoB,eAAe,CAAC,IAAA;QACpB,IAAIV,MAAAA,IAAUX,QAAAA,CAASsB,OAAO,EAAE;YAC9BtB,QAAAA,CAASsB,OAAO,CAACC,KAAK,EAAA;AACxB,QAAA;IACF,CAAA,EAAG;AAACZ,QAAAA;AAAO,KAAA,CAAA;AAEX,IAAA,MAAMa,WAAAA,GAAc,IAAA;QAClBhB,QAAAA,CAAS,EAAA,CAAA;QACTH,QAAAA,CAAS;YAAEK,EAAAA,EAAI;SAAG,EAAG,QAAA,CAAA;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMe,eAAe,CAACC,CAAAA,GAAAA;AACpBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;;AAGhB,QAAA,IAAIpB,KAAAA,EAAO;AACT,YAAA,IAAIT,YAAAA,EAAc;AAChBiB,gBAAAA,UAAAA,CAAWjB,YAAAA,EAAcC,mBAAAA,CAAAA;AAC3B,YAAA;YACAM,QAAAA,CAAS;AAAEK,gBAAAA,EAAAA,EAAIkB,kBAAAA,CAAmBrB,KAAAA,CAAAA;gBAAQsB,IAAAA,EAAM;AAAE,aAAA,CAAA;QACpD,CAAA,MAAO;AACLV,YAAAA,YAAAA,EAAAA;YACAd,QAAAA,CAAS;gBAAEK,EAAAA,EAAI;aAAG,EAAG,QAAA,CAAA;AACvB,QAAA;AACF,IAAA,CAAA;IAEA,MAAMoB,gBAAAA,GAAmB,CAACC,IAAAA,iBACxBC,GAAA,CAACC,UAAAA,EAAAA;YAAWC,QAAAA,EAAUT,YAAAA;AACpB,YAAA,QAAA,gBAAAO,GAAA,CAACG,SAAAA,EAAAA;gBACCC,GAAAA,EAAKpC,QAAAA;gBACLqC,IAAAA,EAAK,QAAA;AACLC,gBAAAA,QAAAA,EAAU,CAACZ,CAAAA,GAAMlB,QAAAA,CAASkB,CAAAA,CAAEa,MAAM,CAAChC,KAAK,CAAA;gBACxCA,KAAAA,EAAOA,KAAAA;AACPiC,gBAAAA,UAAAA,EAAY3B,aAAAA,CAAc;oBAAE4B,EAAAA,EAAI,YAAA;oBAAcC,cAAAA,EAAgB;AAAQ,iBAAA,CAAA;gBACtEC,OAAAA,EAASnB,WAAAA;AACT3B,gBAAAA,WAAAA,EAAaoB,WAAW2B,SAAAA,GAAY/C,WAAAA;gBACpCF,QAAAA,EAAUA,QAAAA;gBACVkD,MAAAA,EACEd,IAAAA,EAAMe,kBACF,CAACpB,CAAAA,GAAAA;AACC,oBAAA,IAAI,CAACA,CAAAA,CAAEqB,aAAa,CAACC,QAAQ,CAACtB,CAAAA,CAAEuB,aAAa,CAAA,IAAKvB,CAAAA,CAAEqB,aAAa,CAACxC,KAAK,KAAK,EAAA,EAAI;wBAC9EK,SAAAA,CAAU,KAAA,CAAA;AACZ,oBAAA;gBACF,CAAA,GACAgC,SAAAA;AAGLhD,gBAAAA,QAAAA,EAAAA;;;AAKP,IAAA,IAAIqB,QAAAA,EAAU;;AAEZ,QAAA,qBAAOe,GAAA,CAACkB,GAAAA,EAAAA;YAAIC,KAAAA,EAAM,MAAA;AAAQrB,YAAAA,QAAAA,EAAAA,gBAAAA;;AAC5B,IAAA;AAEA,IAAA,IAAInB,MAAAA,EAAQ;AACV,QAAA,OAAOmB,gBAAAA,CAAiB;YAAEgB,eAAAA,EAAiB;AAAK,SAAA,CAAA;AAClD,IAAA;AAEA,IAAA,qBACEd,GAAA,CAACoB,UAAAA,EAAAA;QACChB,GAAAA,EAAKjC,aAAAA;QACLR,QAAAA,EAAUA,QAAAA;AACVC,QAAAA,KAAAA,EAAOiB,aAAAA,CAAc;YAAE4B,EAAAA,EAAI,eAAA;YAAiBC,cAAAA,EAAgB;AAAS,SAAA,CAAA;QACrEW,OAAAA,EAASlC,YAAAA;AAET,QAAA,QAAA,gBAAAa,GAAA,CAACsB,MAAAA,EAAAA,EAAAA;;AAGP;;;;"}
1
+ {"version":3,"file":"SearchInput.mjs","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useIsMobile } from '../hooks/useMediaQuery';\nimport { useQueryParams, withEncodedUserParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{\n _q?: string;\n page?: number;\n filters?: unknown;\n }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const isMobile = useIsMobile();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const clearSearch = () => setQuery(withEncodedUserParams(query, { _q: undefined }));\n\n const handleClear = () => {\n setValue('');\n clearSearch();\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery(withEncodedUserParams(query, { _q: encodeURIComponent(value), page: 1 }));\n } else {\n handleToggle();\n clearSearch();\n }\n };\n\n const renderSearchForm = (opts?: { enableBlurClose?: boolean }) => (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={isMobile ? undefined : placeholder}\n disabled={disabled}\n onBlur={\n opts?.enableBlurClose\n ? (e) => {\n if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {\n setIsOpen(false);\n }\n }\n : undefined\n }\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n\n if (isMobile) {\n // Add wrapper so that the Searchbar takes up the rest of the available space.\n return <Box width=\"100%\">{renderSearchForm()}</Box>;\n }\n\n if (isOpen) {\n return renderSearchForm({ enableBlurClose: true });\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","isMobile","useIsMobile","handleToggle","prev","useLayoutEffect","current","focus","clearSearch","withEncodedUserParams","undefined","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","renderSearchForm","opts","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","onBlur","enableBlurClose","currentTarget","contains","relatedTarget","Box","width","IconButton","onClick","SearchIcon"],"mappings":"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"}
@@ -113,9 +113,9 @@ const Root = ({ children, defaultSelectedRows, footer, headers = [], isLoading =
113
113
  });
114
114
  const handleClickSort = ()=>{
115
115
  if (sortable) {
116
- setQuery({
116
+ setQuery(useQueryParams.withEncodedUserParams(query, {
117
117
  sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`
118
- }, 'push', true);
118
+ }), 'push', true);
119
119
  }
120
120
  };
121
121
  const handleKeyDown = (e)=>{
@@ -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 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}\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\ntype DefaultTableHeader = TableHeader<BaseRow, object>;\ntype DefaultTableContextValue = TableContextValue<BaseRow, DefaultTableHeader>;\n\nconst [TableProvider, useTable] = createContext<DefaultTableContextValue>('Table');\n\nconst GenericTableProvider = TableProvider as <\n TRow extends BaseRow,\n THeader extends TableHeader<TRow, THeader>,\n>(\n props: TableContextValue<TRow, THeader> & { children?: React.ReactNode }\n) => React.ReactElement;\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 <GenericTableProvider\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 </GenericTableProvider>\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 {\n id: 'components.TableHeader.sort',\n defaultMessage: 'Sort on {label}',\n },\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 const row = rows.find((row) => row.id === id);\n\n if (row !== undefined) {\n selectRow(row);\n }\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","GenericTableProvider","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
+ {"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 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, withEncodedUserParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\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\ntype DefaultTableHeader = TableHeader<BaseRow, object>;\ntype DefaultTableContextValue = TableContextValue<BaseRow, DefaultTableHeader>;\n\nconst [TableProvider, useTable] = createContext<DefaultTableContextValue>('Table');\n\nconst GenericTableProvider = TableProvider as <\n TRow extends BaseRow,\n THeader extends TableHeader<TRow, THeader>,\n>(\n props: TableContextValue<TRow, THeader> & { children?: React.ReactNode }\n) => React.ReactElement;\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 <GenericTableProvider\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 </GenericTableProvider>\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<{\n sort?: `${string}:${'ASC' | 'DESC'}`;\n filters?: unknown;\n _q?: unknown;\n }>();\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 {\n id: 'components.TableHeader.sort',\n defaultMessage: 'Sort on {label}',\n },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n withEncodedUserParams(query, {\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 const row = rows.find((row) => row.id === id);\n\n if (row !== undefined) {\n selectRow(row);\n }\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","GenericTableProvider","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","withEncodedUserParams","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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"}
@@ -6,7 +6,7 @@ import { EmptyDocuments } from '@strapi/icons/symbols';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { styled } from 'styled-components';
8
8
  import { useControllableState } from '../hooks/useControllableState.mjs';
9
- import { useQueryParams } from '../hooks/useQueryParams.mjs';
9
+ import { useQueryParams, withEncodedUserParams } from '../hooks/useQueryParams.mjs';
10
10
  import { createContext } from './Context.mjs';
11
11
 
12
12
  const [TableProvider, useTable] = createContext('Table');
@@ -91,9 +91,9 @@ const Root = ({ children, defaultSelectedRows, footer, headers = [], isLoading =
91
91
  });
92
92
  const handleClickSort = ()=>{
93
93
  if (sortable) {
94
- setQuery({
94
+ setQuery(withEncodedUserParams(query, {
95
95
  sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`
96
- }, 'push', true);
96
+ }), 'push', true);
97
97
  }
98
98
  };
99
99
  const handleKeyDown = (e)=>{
@@ -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 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}\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\ntype DefaultTableHeader = TableHeader<BaseRow, object>;\ntype DefaultTableContextValue = TableContextValue<BaseRow, DefaultTableHeader>;\n\nconst [TableProvider, useTable] = createContext<DefaultTableContextValue>('Table');\n\nconst GenericTableProvider = TableProvider as <\n TRow extends BaseRow,\n THeader extends TableHeader<TRow, THeader>,\n>(\n props: TableContextValue<TRow, THeader> & { children?: React.ReactNode }\n) => React.ReactElement;\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 <GenericTableProvider\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 </GenericTableProvider>\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 {\n id: 'components.TableHeader.sort',\n defaultMessage: 'Sort on {label}',\n },\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 const row = rows.find((row) => row.id === id);\n\n if (row !== undefined) {\n selectRow(row);\n }\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","GenericTableProvider","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
+ {"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 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, withEncodedUserParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\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\ntype DefaultTableHeader = TableHeader<BaseRow, object>;\ntype DefaultTableContextValue = TableContextValue<BaseRow, DefaultTableHeader>;\n\nconst [TableProvider, useTable] = createContext<DefaultTableContextValue>('Table');\n\nconst GenericTableProvider = TableProvider as <\n TRow extends BaseRow,\n THeader extends TableHeader<TRow, THeader>,\n>(\n props: TableContextValue<TRow, THeader> & { children?: React.ReactNode }\n) => React.ReactElement;\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 <GenericTableProvider\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 </GenericTableProvider>\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<{\n sort?: `${string}:${'ASC' | 'DESC'}`;\n filters?: unknown;\n _q?: unknown;\n }>();\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 {\n id: 'components.TableHeader.sort',\n defaultMessage: 'Sort on {label}',\n },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n withEncodedUserParams(query, {\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 const row = rows.find((row) => row.id === id);\n\n if (row !== undefined) {\n selectRow(row);\n }\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","GenericTableProvider","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","withEncodedUserParams","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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"}