@strapi/admin 5.21.0 → 5.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +38 -8
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +36 -6
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js +23 -8
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs +23 -8
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js +7 -5
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +7 -5
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js +156 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs +154 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js +221 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs +219 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +219 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +217 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/{Step.js → Steps/Step.js} +116 -71
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/{Step.mjs → Steps/Step.mjs} +117 -74
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +47 -322
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +48 -324
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.js +19 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs +17 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +31 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +29 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -0
- package/dist/admin/admin/src/components/SubNav.js +3 -1
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +3 -1
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +27 -9
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +28 -10
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +40 -33
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +41 -34
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +17 -14
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +17 -14
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +31 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +12 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +28 -24
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +28 -24
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +56 -57
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +57 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js +0 -1
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs +0 -1
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +35 -21
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +35 -21
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +131 -0
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -0
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs +129 -0
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -0
- package/dist/admin/ee/admin/src/constants.js +3 -1
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +3 -2
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/index.js +6 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/GuidedTour/Context.d.ts +26 -9
- package/dist/admin/src/components/GuidedTour/Steps/ApiTokensSteps.d.ts +20 -0
- package/dist/admin/src/components/GuidedTour/Steps/ContentManagerSteps.d.ts +21 -0
- package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +30 -0
- package/dist/admin/src/components/GuidedTour/{Step.d.ts → Steps/Step.d.ts} +25 -6
- package/dist/admin/src/components/GuidedTour/Tours.d.ts +53 -14
- package/dist/admin/src/components/GuidedTour/utils/constants.d.ts +15 -0
- package/dist/admin/src/components/GuidedTour/utils/migrations.d.ts +6 -0
- package/dist/admin/src/features/Tracking.d.ts +20 -2
- package/dist/admin/src/index.d.ts +5 -0
- package/dist/admin/src/pages/Home/HomePage.d.ts +2 -2
- package/dist/ee/admin/src/components/AuditLogs/Widgets.d.ts +2 -0
- package/dist/ee/admin/src/constants.d.ts +1 -0
- package/dist/server/server/src/controllers/admin.js +2 -5
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +2 -5
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/services/index.js +0 -2
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +0 -2
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/index.d.ts +1 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +1 -0
- package/dist/server/src/services/guided-tour.d.ts +2 -3
- package/dist/server/src/services/guided-tour.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +0 -5
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +2 -2
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/admin/admin/src/components/GuidedTour/Step.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +0 -1
- package/dist/server/server/src/services/guided-tour.js +0 -61
- package/dist/server/server/src/services/guided-tour.js.map +0 -1
- package/dist/server/server/src/services/guided-tour.mjs +0 -59
- package/dist/server/server/src/services/guided-tour.mjs.map +0 -1
|
@@ -6,6 +6,7 @@ var designSystem = require('@strapi/design-system');
|
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
8
|
var ConfirmDialog = require('../../../../components/ConfirmDialog.js');
|
|
9
|
+
var Tours = require('../../../../components/GuidedTour/Tours.js');
|
|
9
10
|
var Layout = require('../../../../components/Layouts/Layout.js');
|
|
10
11
|
var BackButton = require('../../../../features/BackButton.js');
|
|
11
12
|
var Notifications = require('../../../../features/Notifications.js');
|
|
@@ -125,20 +126,22 @@ const FormHead = ({ title, token, setToken, toggleToken, showToken, canShowToken
|
|
|
125
126
|
onRegenerate: handleRegenerate,
|
|
126
127
|
url: `${regenerateUrl}${token?.id ?? ''}`
|
|
127
128
|
}),
|
|
128
|
-
token?.id && toggleToken && /*#__PURE__*/ jsxRuntime.jsx(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
129
|
+
token?.id && toggleToken && /*#__PURE__*/ jsxRuntime.jsx(Tours.tours.apiTokens.ViewAPIToken, {
|
|
130
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
|
|
131
|
+
label: !canShowToken && formatMessage({
|
|
132
|
+
id: 'Settings.tokens.encryptionKeyMissing',
|
|
133
|
+
defaultMessage: 'In order to view the token, you need a valid encryption key in the admin configuration'
|
|
134
|
+
}),
|
|
135
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
136
|
+
type: "button",
|
|
137
|
+
startIcon: showToken ? /*#__PURE__*/ jsxRuntime.jsx(icons.EyeStriked, {}) : /*#__PURE__*/ jsxRuntime.jsx(icons.Eye, {}),
|
|
138
|
+
variant: "secondary",
|
|
139
|
+
onClick: ()=>toggleToken?.(),
|
|
140
|
+
disabled: !canShowToken,
|
|
141
|
+
children: formatMessage({
|
|
142
|
+
id: 'Settings.tokens.viewToken',
|
|
143
|
+
defaultMessage: 'View token'
|
|
144
|
+
})
|
|
142
145
|
})
|
|
143
146
|
})
|
|
144
147
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormHead.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <Button\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex gap={2}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n {token?.id && toggleToken && (\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <Button\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </Button>\n </Tooltip>\n )}\n <Button\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={<BackButton />}\n ellipsis\n />\n );\n};\n"],"names":["Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","Button","startIcon","ArrowClockwise","size","variant","onClick","name","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","gap","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","BackButton","ellipsis"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormHead.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <Button\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex gap={2}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n {token?.id && toggleToken && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <Button\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </Button>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <Button\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={<BackButton />}\n ellipsis\n />\n );\n};\n"],"names":["Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","Button","startIcon","ArrowClockwise","size","variant","onClick","name","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","gap","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","BackButton","ellipsis"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { Flex, Tooltip, Button, Dialog } from '@strapi/design-system';
|
|
|
4
4
|
import { EyeStriked, Eye, Check, ArrowClockwise } from '@strapi/icons';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { ConfirmDialog } from '../../../../components/ConfirmDialog.mjs';
|
|
7
|
+
import { tours } from '../../../../components/GuidedTour/Tours.mjs';
|
|
7
8
|
import { Layouts } from '../../../../components/Layouts/Layout.mjs';
|
|
8
9
|
import { BackButton } from '../../../../features/BackButton.mjs';
|
|
9
10
|
import { useNotification } from '../../../../features/Notifications.mjs';
|
|
@@ -104,20 +105,22 @@ const FormHead = ({ title, token, setToken, toggleToken, showToken, canShowToken
|
|
|
104
105
|
onRegenerate: handleRegenerate,
|
|
105
106
|
url: `${regenerateUrl}${token?.id ?? ''}`
|
|
106
107
|
}),
|
|
107
|
-
token?.id && toggleToken && /*#__PURE__*/ jsx(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
108
|
+
token?.id && toggleToken && /*#__PURE__*/ jsx(tours.apiTokens.ViewAPIToken, {
|
|
109
|
+
children: /*#__PURE__*/ jsx(Tooltip, {
|
|
110
|
+
label: !canShowToken && formatMessage({
|
|
111
|
+
id: 'Settings.tokens.encryptionKeyMissing',
|
|
112
|
+
defaultMessage: 'In order to view the token, you need a valid encryption key in the admin configuration'
|
|
113
|
+
}),
|
|
114
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
115
|
+
type: "button",
|
|
116
|
+
startIcon: showToken ? /*#__PURE__*/ jsx(EyeStriked, {}) : /*#__PURE__*/ jsx(Eye, {}),
|
|
117
|
+
variant: "secondary",
|
|
118
|
+
onClick: ()=>toggleToken?.(),
|
|
119
|
+
disabled: !canShowToken,
|
|
120
|
+
children: formatMessage({
|
|
121
|
+
id: 'Settings.tokens.viewToken',
|
|
122
|
+
defaultMessage: 'View token'
|
|
123
|
+
})
|
|
121
124
|
})
|
|
122
125
|
})
|
|
123
126
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormHead.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <Button\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex gap={2}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n {token?.id && toggleToken && (\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <Button\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </Button>\n </Tooltip>\n )}\n <Button\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={<BackButton />}\n ellipsis\n />\n );\n};\n"],"names":["Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","Button","startIcon","ArrowClockwise","size","variant","onClick","name","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","gap","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","BackButton","ellipsis"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormHead.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <Button\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex gap={2}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n {token?.id && toggleToken && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <Button\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </Button>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <Button\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={<BackButton />}\n ellipsis\n />\n );\n};\n"],"names":["Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","Button","startIcon","ArrowClockwise","size","variant","onClick","name","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","gap","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","BackButton","ellipsis"],"mappings":"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"}
|
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
require('react');
|
|
4
|
+
var React = require('react');
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
8
|
var reactRouterDom = require('react-router-dom');
|
|
9
9
|
var styled = require('styled-components');
|
|
10
10
|
var ConfirmDialog = require('../../../../components/ConfirmDialog.js');
|
|
11
|
+
var Tours = require('../../../../components/GuidedTour/Tours.js');
|
|
11
12
|
var RelativeTime = require('../../../../components/RelativeTime.js');
|
|
12
13
|
var Table$1 = require('../../../../components/Table.js');
|
|
13
14
|
var Tracking = require('../../../../features/Tracking.js');
|
|
14
15
|
var useQueryParams = require('../../../../hooks/useQueryParams.js');
|
|
15
16
|
|
|
17
|
+
function _interopNamespaceDefault(e) {
|
|
18
|
+
var n = Object.create(null);
|
|
19
|
+
if (e) {
|
|
20
|
+
Object.keys(e).forEach(function (k) {
|
|
21
|
+
if (k !== 'default') {
|
|
22
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
23
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () { return e[k]; }
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
n.default = e;
|
|
31
|
+
return Object.freeze(n);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
35
|
+
|
|
16
36
|
const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onConfirmDelete, tokenType })=>{
|
|
17
37
|
const [{ query }] = useQueryParams.useQueryParams();
|
|
18
38
|
const { formatMessage, locale } = reactIntl.useIntl();
|
|
@@ -51,7 +71,9 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
|
|
|
51
71
|
/*#__PURE__*/ jsxRuntime.jsx(Table$1.Table.Empty, {}),
|
|
52
72
|
/*#__PURE__*/ jsxRuntime.jsx(Table$1.Table.Loading, {}),
|
|
53
73
|
/*#__PURE__*/ jsxRuntime.jsx(Table$1.Table.Body, {
|
|
54
|
-
children: sortedTokens.map((token)
|
|
74
|
+
children: sortedTokens.map((token)=>{
|
|
75
|
+
const GuidedTourTooltip = token.name === 'Read Only' ? Tours.tours.apiTokens.ManageAPIToken : React__namespace.Fragment;
|
|
76
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(Table$1.Table.Row, {
|
|
55
77
|
onClick: handleRowClick(token.id),
|
|
56
78
|
children: [
|
|
57
79
|
/*#__PURE__*/ jsxRuntime.jsx(Table$1.Table.Cell, {
|
|
@@ -101,9 +123,11 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
|
|
|
101
123
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
102
124
|
justifyContent: "end",
|
|
103
125
|
children: [
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
126
|
+
/*#__PURE__*/ jsxRuntime.jsx(GuidedTourTooltip, {
|
|
127
|
+
children: canUpdate && /*#__PURE__*/ jsxRuntime.jsx(UpdateButton, {
|
|
128
|
+
tokenName: token.name,
|
|
129
|
+
tokenId: token.id
|
|
130
|
+
})
|
|
107
131
|
}),
|
|
108
132
|
canDelete && /*#__PURE__*/ jsxRuntime.jsx(DeleteButton, {
|
|
109
133
|
tokenName: token.name,
|
|
@@ -114,7 +138,8 @@ const Table = ({ permissions, headers = [], isLoading = false, tokens = [], onCo
|
|
|
114
138
|
})
|
|
115
139
|
}) : null
|
|
116
140
|
]
|
|
117
|
-
}, token.id)
|
|
141
|
+
}, token.id);
|
|
142
|
+
})
|
|
118
143
|
})
|
|
119
144
|
]
|
|
120
145
|
})
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAMA,QAAQ,CAAC,EACbC,WAAW,EACXC,UAAU,EAAE,EACZC,SAAY,GAAA,KAAK,EACjBC,MAAS,GAAA,EAAE,EACXC,eAAe,EACfC,SAAS,EACE,GAAA;AACX,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,6BAAAA,EAAAA;AACpB,IAAA,MAAM,EAAEC,aAAa,EAAEC,MAAM,EAAE,GAAGC,iBAAAA,EAAAA;AAClC,IAAA,MAAM,GAAGC,SAAAA,CAAU,GAAGL,KAAAA,IAASA,KAAMM,CAAAA,IAAI,GAAGN,KAAAA,CAAMM,IAAI,CAACC,KAAK,CAAC,GAAO,CAAA,GAAA;AAACC,QAAAA,SAAAA;AAAW,QAAA;AAAM,KAAA;AACtF,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAMC,YAAYC,wBAAYX,CAAAA,MAAAA,CAAAA;AAE9B,IAAA,MAAMY,YAAe,GAAA;AAAIlB,QAAAA,GAAAA;KAAO,CAACS,IAAI,CAAC,CAACU,CAAGC,EAAAA,CAAAA,GAAAA;AACxC,QAAA,OAAOZ,cAAc,MACjBQ,GAAAA,SAAAA,CAAUK,OAAO,CAACD,CAAAA,CAAEE,IAAI,EAAEH,CAAAA,CAAEG,IAAI,CAAA,GAChCN,UAAUK,OAAO,CAACF,EAAEG,IAAI,EAAEF,EAAEE,IAAI,CAAA;AACtC,KAAA,CAAA;AAEA,IAAA,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAG5B,WAAAA;IAE1C,MAAM6B,cAAAA,GAAiB,CAACC,EAAgB,GAAA,IAAA;AACtC,YAAA,IAAIF,OAAS,EAAA;AACXX,gBAAAA,UAAAA,CAAW,uBAAyB,EAAA;AAClCZ,oBAAAA;AACF,iBAAA,CAAA;AACAU,gBAAAA,QAAAA,CAASe,GAAGC,QAAQ,EAAA,CAAA;AACtB;AACF,SAAA;IAEA,qBACEC,cAAA,CAACC,cAAUC,IAAI,EAAA;QAACjC,OAASA,EAAAA,OAAAA;QAASkC,IAAMd,EAAAA,YAAAA;QAAcnB,SAAWA,EAAAA,SAAAA;gCAC/DkC,eAAA,CAACH,cAAUI,OAAO,EAAA;;AAChB,8BAAAL,cAAA,CAACC,cAAUK,IAAI,EAAA;AACZrC,oBAAAA,QAAAA,EAAAA,OAAAA,CAAQsC,GAAG,CAAC,CAACC,MACZ,iBAAAR,cAAA,CAACC,cAAUQ,UAAU,EAAA;AAAoB,4BAAA,GAAGD;AAAjBA,yBAAAA,EAAAA,MAAAA,CAAOf,IAAI,CAAA;;AAG1C,8BAAAO,cAAA,CAACC,cAAUS,KAAK,EAAA,EAAA,CAAA;AAChB,8BAAAV,cAAA,CAACC,cAAUU,OAAO,EAAA,EAAA,CAAA;AAClB,8BAAAX,cAAA,CAACC,cAAUW,IAAI,EAAA;8BACZvB,YAAakB,CAAAA,GAAG,CAAC,CAACM,KAAAA,GAAAA;wBACjB,MAAMC,iBAAAA,GACJD,KAAMpB,CAAAA,IAAI,KAAK,WAAA,GAAcsB,WAAMC,CAAAA,SAAS,CAACC,cAAc,GAAGC,gBAAAA,CAAMC,QAAQ;wBAC9E,qBACEf,eAAA,CAACH,cAAUmB,GAAG,EAAA;4BAAgBC,OAASxB,EAAAA,cAAAA,CAAegB,MAAMf,EAAE,CAAA;;AAC5D,8CAAAE,cAAA,CAACC,cAAUqB,IAAI,EAAA;oCAACC,QAAS,EAAA,OAAA;AACvB,oCAAA,QAAA,gBAAAvB,cAACwB,CAAAA,uBAAAA,EAAAA;wCAAWC,SAAU,EAAA,YAAA;wCAAaC,UAAW,EAAA,MAAA;wCAAOC,QAAQ,EAAA,IAAA;AAC1Dd,wCAAAA,QAAAA,EAAAA,KAAAA,CAAMpB;;;AAGX,8CAAAO,cAAA,CAACC,cAAUqB,IAAI,EAAA;oCAACC,QAAS,EAAA,OAAA;AACvB,oCAAA,QAAA,gBAAAvB,cAACwB,CAAAA,uBAAAA,EAAAA;wCAAWC,SAAU,EAAA,YAAA;wCAAaE,QAAQ,EAAA,IAAA;AACxCd,wCAAAA,QAAAA,EAAAA,KAAAA,CAAMe;;;AAGX,8CAAA5B,cAAA,CAACC,cAAUqB,IAAI,EAAA;AACb,oCAAA,QAAA,gBAAAtB,cAACwB,CAAAA,uBAAAA,EAAAA;wCAAWC,SAAU,EAAA,YAAA;AAEpB,wCAAA,QAAA,gBAAAzB,cAAC6B,CAAAA,yBAAAA,EAAAA;4CAAaC,SAAW,EAAA,IAAIC,IAAKlB,CAAAA,KAAAA,CAAMmB,SAAS;;;;AAGrD,8CAAAhC,cAAA,CAACC,cAAUqB,IAAI,EAAA;8CACZT,KAAMoB,CAAAA,UAAU,kBACfjC,cAACwB,CAAAA,uBAAAA,EAAAA;wCAAWC,SAAU,EAAA,YAAA;AACpB,wCAAA,QAAA,gBAAAzB,cAAC6B,CAAAA,yBAAAA,EAAAA;4CACCC,SAAW,EAAA,IAAIC,IAAKlB,CAAAA,KAAAA,CAAMoB,UAAU,CAAA;4CACpCC,eAAiB,EAAA;AACf,gDAAA;oDACEC,IAAM,EAAA,OAAA;oDACNC,SAAW,EAAA,CAAA;AACXC,oDAAAA,IAAAA,EAAM7D,aAAc,CAAA;wDAClBsB,EAAI,EAAA,6BAAA;wDACJwC,cAAgB,EAAA;AAClB,qDAAA;AACF;AACD;;;;AAKR3C,gCAAAA,SAAAA,IAAaC,OAAWF,IAAAA,SAAAA,iBACvBM,cAACC,CAAAA,aAAAA,CAAUqB,IAAI,EAAA;AACb,oCAAA,QAAA,gBAAAlB,eAACmC,CAAAA,iBAAAA,EAAAA;wCAAKC,cAAe,EAAA,KAAA;;0DACnBxC,cAACc,CAAAA,iBAAAA,EAAAA;AACEnB,gDAAAA,QAAAA,EAAAA,SAAAA,kBAAaK,cAACyC,CAAAA,YAAAA,EAAAA;AAAaC,oDAAAA,SAAAA,EAAW7B,MAAMpB,IAAI;AAAEkD,oDAAAA,OAAAA,EAAS9B,MAAMf;;;AAEnEJ,4CAAAA,SAAAA,kBACCM,cAAC4C,CAAAA,YAAAA,EAAAA;AACCF,gDAAAA,SAAAA,EAAW7B,MAAMpB,IAAI;gDACrBoD,aAAe,EAAA,IAAMzE,eAAkByC,GAAAA,KAAAA,CAAMf,EAAE,CAAA;gDAC/CzB,SAAWA,EAAAA;;;;AAKjB,iCAAA,CAAA,GAAA;;AAnDcwC,yBAAAA,EAAAA,KAAAA,CAAMf,EAAE,CAAA;AAsDhC,qBAAA;;;;;AAKV;AAEA;;AAEkG,qGAElG,MAAMgD,YAAe,GAAA;IACnBC,IAAM,EAAA;QACJjD,EAAI,EAAA,0BAAA;QACJwC,cAAgB,EAAA;AAClB,KAAA;IACAU,IAAM,EAAA;QACJlD,EAAI,EAAA,0BAAA;QACJwC,cAAgB,EAAA;AAClB;AACF,CAAA;AASA,MAAMW,aAAAA,GAAgB,CAAC,EACrBP,SAAS,EACTC,OAAO,EACPO,UAAa,GAAA,MAAM,EACnBC,QAAQ,EACW,GAAA;IACnB,MAAM,EAAE3E,aAAa,EAAE,GAAGE,iBAAAA,EAAAA;AAE1B,IAAA,qBACEsB,cAACoD,CAAAA,gBAAAA,EAAAA;QACCC,GAAKC,EAAAA,sBAAAA;AACLC,QAAAA,EAAAA,EAAIZ,QAAQ5C,QAAQ,EAAA;QACpBsB,OAAS,EAAA,CAACmC,CAAwBA,GAAAA,CAAAA,CAAEC,eAAe,EAAA;AACnDC,QAAAA,KAAAA,EAAOlF,aAAcsE,CAAAA,YAAY,CAACI,UAAAA,CAAW,EAAE;YAAES,MAAQjB,EAAAA;AAAU,SAAA,CAAA;QACnEkB,OAAQ,EAAA,OAAA;QACRC,IAAK,EAAA,GAAA;AAEJV,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;AAEA,MAAMC,gBAAAA,GAAmBU,aAAOC,CAAAA,uBAAAA,CAAW;;;;;;AAM3C,CAAC;AAMD,MAAMnB,YAAAA,GAAe,CAAC,EAAEF,SAAS,EAAEG,aAAa,EAAExE,SAAS,EAAqB,GAAA;IAC9E,MAAM,EAAEG,aAAa,EAAE,GAAGE,iBAAAA,EAAAA;IAC1B,MAAM,EAAEO,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAM8E,iBAAoB,GAAA,IAAA;AACxB/E,QAAAA,UAAAA,CAAW,iBAAmB,EAAA;AAC5BZ,YAAAA;AACF,SAAA,CAAA;AACAwE,QAAAA,aAAAA,EAAAA;AACF,KAAA;IAEA,qBACE7C,cAAA,CAACiE,oBAAO/D,IAAI,EAAA;AACV,QAAA,QAAA,gBAAAE,eAAC8D,CAAAA,gBAAAA,EAAAA;YAAWC,WAAa,EAAA,CAAA;YAAG9C,OAAS,EAAA,CAACmC,CAAMA,GAAAA,CAAAA,CAAEC,eAAe,EAAA;;AAC3D,8BAAAzD,cAAA,CAACiE,oBAAOG,OAAO,EAAA;AACb,oBAAA,QAAA,gBAAApE,cAACqE,CAAAA,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAO9F,aACL,CAAA;4BACEsB,EAAI,EAAA,sBAAA;4BACJwC,cAAgB,EAAA;yBAElB,EAAA;4BAAEqB,MAAQ,EAAA,CAAC,EAAEjB,SAAAA,CAAU;AAAE,yBAAA,CAAA;wBAE3BjD,IAAK,EAAA,QAAA;wBACLmE,OAAQ,EAAA,OAAA;AAER,wBAAA,QAAA,gBAAA5D,cAACuE,CAAAA,WAAAA,EAAAA,EAAAA;;;8BAGLvE,cAACwE,CAAAA,2BAAAA,EAAAA;oBAAcC,SAAWT,EAAAA;;;;;AAIlC,CAAA;AAOA,MAAMvB,eAAe,CAAC,EAAEC,SAAS,EAAEC,OAAO,EAAe,GAAA;AACvD,IAAA,qBACE3C,cAACiD,CAAAA,aAAAA,EAAAA;QAAcP,SAAWA,EAAAA,SAAAA;QAAWC,OAASA,EAAAA,OAAAA;AAC5C,QAAA,QAAA,gBAAA3C,cAAC0E,CAAAA,YAAAA,EAAAA,EAAAA;;AAGP,CAAA;;;;"}
|
|
@@ -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)
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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.
|
|
72
|
-
defaultMessage:
|
|
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:
|
|
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',
|