@strapi/admin 5.22.0 → 5.23.1

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 (122) hide show
  1. package/dist/admin/admin/src/components/GuidedTour/Context.js +48 -8
  2. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  3. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +48 -9
  4. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/GuidedTour/Overview.js +35 -24
  6. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  7. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +36 -25
  8. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js +156 -0
  10. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js.map +1 -0
  11. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs +154 -0
  12. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs.map +1 -0
  13. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js +221 -0
  14. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js.map +1 -0
  15. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs +219 -0
  16. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs.map +1 -0
  17. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +219 -0
  18. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -0
  19. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +217 -0
  20. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -0
  21. package/dist/admin/admin/src/components/GuidedTour/{Step.js → Steps/Step.js} +116 -71
  22. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -0
  23. package/dist/admin/admin/src/components/GuidedTour/{Step.mjs → Steps/Step.mjs} +117 -74
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -0
  25. package/dist/admin/admin/src/components/GuidedTour/Tours.js +47 -324
  26. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  27. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +48 -326
  28. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  29. package/dist/admin/admin/src/components/GuidedTour/utils/constants.js +19 -0
  30. package/dist/admin/admin/src/components/GuidedTour/utils/constants.js.map +1 -0
  31. package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs +17 -0
  32. package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs.map +1 -0
  33. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +31 -0
  34. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -0
  35. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +29 -0
  36. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -0
  37. package/dist/admin/admin/src/components/SubNav.js +3 -1
  38. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  39. package/dist/admin/admin/src/components/SubNav.mjs +3 -1
  40. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  41. package/dist/admin/admin/src/components/Widgets.js +4 -0
  42. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  43. package/dist/admin/admin/src/components/Widgets.mjs +5 -1
  44. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  45. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  46. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  47. package/dist/admin/admin/src/pages/Home/HomePage.js +10 -1
  48. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  49. package/dist/admin/admin/src/pages/Home/HomePage.mjs +10 -1
  50. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  51. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +17 -14
  52. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  53. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +17 -14
  54. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  55. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +31 -6
  56. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  57. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +12 -6
  58. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +28 -24
  60. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +28 -24
  62. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  64. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +56 -57
  66. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +57 -58
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  69. package/dist/admin/admin/src/services/apiTokens.js +0 -1
  70. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  71. package/dist/admin/admin/src/services/apiTokens.mjs +0 -1
  72. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  73. package/dist/admin/admin/src/translations/en.json.js +33 -21
  74. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  75. package/dist/admin/admin/src/translations/en.json.mjs +33 -21
  76. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  77. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +2 -2
  78. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
  79. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs +2 -2
  80. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
  81. package/dist/admin/index.js +6 -2
  82. package/dist/admin/index.js.map +1 -1
  83. package/dist/admin/index.mjs +2 -0
  84. package/dist/admin/index.mjs.map +1 -1
  85. package/dist/admin/src/components/GuidedTour/Context.d.ts +28 -10
  86. package/dist/admin/src/components/GuidedTour/Steps/ApiTokensSteps.d.ts +20 -0
  87. package/dist/admin/src/components/GuidedTour/Steps/ContentManagerSteps.d.ts +21 -0
  88. package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +30 -0
  89. package/dist/admin/src/components/GuidedTour/{Step.d.ts → Steps/Step.d.ts} +25 -6
  90. package/dist/admin/src/components/GuidedTour/Tours.d.ts +53 -14
  91. package/dist/admin/src/components/GuidedTour/utils/constants.d.ts +15 -0
  92. package/dist/admin/src/components/GuidedTour/utils/migrations.d.ts +6 -0
  93. package/dist/admin/src/features/Tracking.d.ts +23 -4
  94. package/dist/admin/src/index.d.ts +5 -0
  95. package/dist/admin/src/pages/Home/HomePage.d.ts +2 -2
  96. package/dist/server/server/src/controllers/admin.js +2 -5
  97. package/dist/server/server/src/controllers/admin.js.map +1 -1
  98. package/dist/server/server/src/controllers/admin.mjs +2 -5
  99. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  100. package/dist/server/server/src/services/index.js +0 -2
  101. package/dist/server/server/src/services/index.js.map +1 -1
  102. package/dist/server/server/src/services/index.mjs +0 -2
  103. package/dist/server/server/src/services/index.mjs.map +1 -1
  104. package/dist/server/src/controllers/admin.d.ts +1 -1
  105. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  106. package/dist/server/src/controllers/index.d.ts +1 -1
  107. package/dist/server/src/index.d.ts +1 -6
  108. package/dist/server/src/index.d.ts.map +1 -1
  109. package/dist/server/src/services/constants.d.ts +1 -0
  110. package/dist/server/src/services/guided-tour.d.ts +2 -3
  111. package/dist/server/src/services/guided-tour.d.ts.map +1 -1
  112. package/dist/server/src/services/index.d.ts +0 -5
  113. package/dist/server/src/services/index.d.ts.map +1 -1
  114. package/dist/shared/contracts/admin.d.ts +2 -2
  115. package/dist/shared/contracts/admin.d.ts.map +1 -1
  116. package/package.json +7 -7
  117. package/dist/admin/admin/src/components/GuidedTour/Step.js.map +0 -1
  118. package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +0 -1
  119. package/dist/server/server/src/services/guided-tour.js +0 -61
  120. package/dist/server/server/src/services/guided-tour.js.map +0 -1
  121. package/dist/server/server/src/services/guided-tour.mjs +0 -59
  122. package/dist/server/server/src/services/guided-tour.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n ))}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import 'react';
2
+ import * as React from 'react';
3
3
  import { LinkButton, useCollator, Typography, Flex, Dialog, Box, IconButton } from '@strapi/design-system';
4
4
  import { Trash, Pencil } from '@strapi/icons';
5
5
  import { useIntl } from 'react-intl';
6
6
  import { useNavigate, NavLink } from 'react-router-dom';
7
7
  import { styled } from 'styled-components';
8
8
  import { ConfirmDialog } from '../../../../components/ConfirmDialog.mjs';
9
+ import { tours } from '../../../../components/GuidedTour/Tours.mjs';
9
10
  import { RelativeTime } from '../../../../components/RelativeTime.mjs';
10
11
  import { Table as Table$1 } from '../../../../components/Table.mjs';
11
12
  import { useTracking } from '../../../../features/Tracking.mjs';
@@ -49,7 +50,9 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
49
50
  /*#__PURE__*/ jsx(Table$1.Empty, {}),
50
51
  /*#__PURE__*/ jsx(Table$1.Loading, {}),
51
52
  /*#__PURE__*/ jsx(Table$1.Body, {
52
- children: sortedTokens.map((token)=>/*#__PURE__*/ jsxs(Table$1.Row, {
53
+ children: sortedTokens.map((token)=>{
54
+ const GuidedTourTooltip = token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;
55
+ return /*#__PURE__*/ jsxs(Table$1.Row, {
53
56
  onClick: handleRowClick(token.id),
54
57
  children: [
55
58
  /*#__PURE__*/ jsx(Table$1.Cell, {
@@ -99,9 +102,11 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
99
102
  children: /*#__PURE__*/ jsxs(Flex, {
100
103
  justifyContent: "end",
101
104
  children: [
102
- canUpdate && /*#__PURE__*/ jsx(UpdateButton, {
103
- tokenName: token.name,
104
- tokenId: token.id
105
+ /*#__PURE__*/ jsx(GuidedTourTooltip, {
106
+ children: canUpdate && /*#__PURE__*/ jsx(UpdateButton, {
107
+ tokenName: token.name,
108
+ tokenId: token.id
109
+ })
105
110
  }),
106
111
  canDelete && /*#__PURE__*/ jsx(DeleteButton, {
107
112
  tokenName: token.name,
@@ -112,7 +117,8 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
112
117
  })
113
118
  }) : null
114
119
  ]
115
- }, token.id))
120
+ }, token.id);
121
+ })
116
122
  })
117
123
  ]
118
124
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n ))}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
1
+ {"version":3,"file":"Table.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { Data } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
@@ -9,6 +9,7 @@ var styled = require('styled-components');
9
9
  var ContentBox = require('../../../../components/ContentBox.js');
10
10
  var Context = require('../../../../components/GuidedTour/Context.js');
11
11
  var Tours = require('../../../../components/GuidedTour/Tours.js');
12
+ var constants = require('../../../../components/GuidedTour/utils/constants.js');
12
13
  var Notifications = require('../../../../features/Notifications.js');
13
14
  var Tracking = require('../../../../features/Tracking.js');
14
15
  var useClipboard = require('../../../../hooks/useClipboard.js');
@@ -22,28 +23,28 @@ const ApiTokenBox = ({ token, tokenType })=>{
22
23
  const { trackUsage } = Tracking.useTracking();
23
24
  const dispatch = Context.useGuidedTour('TokenBox', (s)=>s.dispatch);
24
25
  const { copy } = useClipboard.useClipboard();
25
- const handleClick = (token)=>async ()=>{
26
- if (token) {
27
- const didCopy = await copy(token);
28
- if (didCopy) {
29
- trackUsage('didCopyTokenKey', {
30
- tokenType
31
- });
32
- dispatch({
33
- type: 'set_completed_actions',
34
- payload: [
35
- 'didCopyApiToken'
36
- ]
37
- });
38
- toggleNotification({
39
- type: 'success',
40
- message: formatMessage({
41
- id: 'Settings.tokens.notification.copied'
42
- })
43
- });
44
- }
26
+ const handleCopyToken = async (token)=>{
27
+ if (token) {
28
+ const didCopy = await copy(token);
29
+ if (didCopy) {
30
+ trackUsage('didCopyTokenKey', {
31
+ tokenType
32
+ });
33
+ dispatch({
34
+ type: 'set_completed_actions',
35
+ payload: [
36
+ constants.GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken
37
+ ]
38
+ });
39
+ toggleNotification({
40
+ type: 'success',
41
+ message: formatMessage({
42
+ id: 'Settings.tokens.notification.copied'
43
+ })
44
+ });
45
45
  }
46
- };
46
+ }
47
+ };
47
48
  return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
48
49
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
49
50
  shadow: "tableShadow",
@@ -68,8 +69,8 @@ const ApiTokenBox = ({ token, tokenType })=>{
68
69
  }),
69
70
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
70
71
  children: formatMessage({
71
- id: 'Settings.tokens.copy.lastWarning',
72
- defaultMessage: "Make sure to copy this token, you won't be able to see it again!"
72
+ id: 'Settings.apiTokens.copy.lastWarning',
73
+ defaultMessage: 'Copy your API token'
73
74
  })
74
75
  })
75
76
  ]
@@ -89,7 +90,10 @@ const ApiTokenBox = ({ token, tokenType })=>{
89
90
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
90
91
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Duplicate, {}),
91
92
  variant: "secondary",
92
- onClick: handleClick(token),
93
+ onClick: (e)=>{
94
+ e.preventDefault();
95
+ handleCopyToken(token);
96
+ },
93
97
  marginTop: 6,
94
98
  children: formatMessage({
95
99
  id: 'Settings.tokens.copy.copy',
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBox.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: ['didCopyApiToken'],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage: \"Make sure to copy this token, you won't be able to see it again!\",\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleClick(token)}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleClick","didCopy","type","payload","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","apiTokens","CopyAPIToken","Button","startIcon","Duplicate","onClick","marginTop","TokenBox","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
1
+ {"version":3,"file":"TokenBox.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your API token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
@@ -7,6 +7,7 @@ import { styled } from 'styled-components';
7
7
  import { ContentBox } from '../../../../components/ContentBox.mjs';
8
8
  import { useGuidedTour } from '../../../../components/GuidedTour/Context.mjs';
9
9
  import { tours } from '../../../../components/GuidedTour/Tours.mjs';
10
+ import { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants.mjs';
10
11
  import { useNotification } from '../../../../features/Notifications.mjs';
11
12
  import { useTracking } from '../../../../features/Tracking.mjs';
12
13
  import { useClipboard } from '../../../../hooks/useClipboard.mjs';
@@ -20,28 +21,28 @@ const ApiTokenBox = ({ token, tokenType })=>{
20
21
  const { trackUsage } = useTracking();
21
22
  const dispatch = useGuidedTour('TokenBox', (s)=>s.dispatch);
22
23
  const { copy } = useClipboard();
23
- const handleClick = (token)=>async ()=>{
24
- if (token) {
25
- const didCopy = await copy(token);
26
- if (didCopy) {
27
- trackUsage('didCopyTokenKey', {
28
- tokenType
29
- });
30
- dispatch({
31
- type: 'set_completed_actions',
32
- payload: [
33
- 'didCopyApiToken'
34
- ]
35
- });
36
- toggleNotification({
37
- type: 'success',
38
- message: formatMessage({
39
- id: 'Settings.tokens.notification.copied'
40
- })
41
- });
42
- }
24
+ const handleCopyToken = async (token)=>{
25
+ if (token) {
26
+ const didCopy = await copy(token);
27
+ if (didCopy) {
28
+ trackUsage('didCopyTokenKey', {
29
+ tokenType
30
+ });
31
+ dispatch({
32
+ type: 'set_completed_actions',
33
+ payload: [
34
+ GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken
35
+ ]
36
+ });
37
+ toggleNotification({
38
+ type: 'success',
39
+ message: formatMessage({
40
+ id: 'Settings.tokens.notification.copied'
41
+ })
42
+ });
43
43
  }
44
- };
44
+ }
45
+ };
45
46
  return /*#__PURE__*/ jsx(Fragment, {
46
47
  children: /*#__PURE__*/ jsxs(Flex, {
47
48
  shadow: "tableShadow",
@@ -66,8 +67,8 @@ const ApiTokenBox = ({ token, tokenType })=>{
66
67
  }),
67
68
  /*#__PURE__*/ jsx(Typography, {
68
69
  children: formatMessage({
69
- id: 'Settings.tokens.copy.lastWarning',
70
- defaultMessage: "Make sure to copy this token, you won't be able to see it again!"
70
+ id: 'Settings.apiTokens.copy.lastWarning',
71
+ defaultMessage: 'Copy your API token'
71
72
  })
72
73
  })
73
74
  ]
@@ -87,7 +88,10 @@ const ApiTokenBox = ({ token, tokenType })=>{
87
88
  children: /*#__PURE__*/ jsx(Button, {
88
89
  startIcon: /*#__PURE__*/ jsx(Duplicate, {}),
89
90
  variant: "secondary",
90
- onClick: handleClick(token),
91
+ onClick: (e)=>{
92
+ e.preventDefault();
93
+ handleCopyToken(token);
94
+ },
91
95
  marginTop: 6,
92
96
  children: formatMessage({
93
97
  id: 'Settings.tokens.copy.copy',
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBox.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: ['didCopyApiToken'],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage: \"Make sure to copy this token, you won't be able to see it again!\",\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleClick(token)}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleClick","didCopy","type","payload","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","apiTokens","CopyAPIToken","Button","startIcon","Duplicate","onClick","marginTop","TokenBox","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
1
+ {"version":3,"file":"TokenBox.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your API token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}