@strapi/upload 5.26.0 → 5.28.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/ai/components/AIAssetCard.js +589 -0
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -0
- package/dist/admin/ai/components/AIAssetCard.mjs +567 -0
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -0
- package/dist/admin/ai/components/AIUploadModal.js +363 -0
- package/dist/admin/ai/components/AIUploadModal.js.map +1 -0
- package/dist/admin/ai/components/AIUploadModal.mjs +341 -0
- package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -0
- package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
- package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +3 -3
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +4 -4
- package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +5 -5
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +5 -5
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +2 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +2 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.js +11 -6
- package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs +11 -6
- package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
- package/dist/admin/hooks/useAiAvailability.js +22 -0
- package/dist/admin/hooks/useAiAvailability.js.map +1 -0
- package/dist/admin/hooks/useAiAvailability.mjs +20 -0
- package/dist/admin/hooks/useAiAvailability.mjs.map +1 -0
- package/dist/admin/hooks/useBulkEdit.js +66 -0
- package/dist/admin/hooks/useBulkEdit.js.map +1 -0
- package/dist/admin/hooks/useBulkEdit.mjs +64 -0
- package/dist/admin/hooks/useBulkEdit.mjs.map +1 -0
- package/dist/admin/hooks/useSettings.js +22 -0
- package/dist/admin/hooks/useSettings.js.map +1 -0
- package/dist/admin/hooks/useSettings.mjs +20 -0
- package/dist/admin/hooks/useSettings.mjs.map +1 -0
- package/dist/admin/hooks/useUpload.js +25 -14
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +25 -14
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/package.json.js +5 -5
- package/dist/admin/package.json.mjs +5 -5
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +0 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +19 -5
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +19 -5
- package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +222 -144
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +225 -147
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.js +9 -10
- package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
- package/dist/admin/pages/SettingsPage/reducer.mjs +9 -10
- package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
- package/dist/admin/src/ai/components/AIAssetCard.d.ts +13 -0
- package/dist/admin/src/ai/components/AIUploadModal.d.ts +55 -0
- package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +3 -1
- package/dist/admin/src/components/SelectTree/utils/flattenTree.d.ts +3 -1
- package/dist/admin/src/hooks/useAiAvailability.d.ts +4 -0
- package/dist/admin/src/hooks/useBulkEdit.d.ts +91 -0
- package/dist/admin/src/hooks/useSettings.d.ts +7 -0
- package/dist/admin/src/hooks/useUpload.d.ts +1 -1
- package/dist/admin/src/pages/SettingsPage/reducer.d.ts +3 -12
- package/dist/admin/translations/en.json.js +7 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/getFolderParents.js +2 -1
- package/dist/admin/utils/getFolderParents.js.map +1 -1
- package/dist/admin/utils/getFolderParents.mjs +2 -1
- package/dist/admin/utils/getFolderParents.mjs.map +1 -1
- package/dist/server/bootstrap.js +2 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +2 -1
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +57 -2
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +59 -4
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +3 -1
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +3 -1
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/settings.js +2 -1
- package/dist/server/controllers/validation/admin/settings.js.map +1 -1
- package/dist/server/controllers/validation/admin/settings.mjs +2 -1
- package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js +8 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +8 -1
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/routes/admin.js +18 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +18 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-metadata.js +97 -0
- package/dist/server/services/ai-metadata.js.map +1 -0
- package/dist/server/services/ai-metadata.mjs +95 -0
- package/dist/server/services/ai-metadata.mjs.map +1 -0
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/services/weekly-metrics.js +5 -1
- package/dist/server/services/weekly-metrics.js.map +1 -1
- package/dist/server/services/weekly-metrics.mjs +5 -1
- package/dist/server/services/weekly-metrics.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-upload.d.ts +1 -0
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/settings.d.ts +3 -0
- package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts +42 -0
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +14 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata.d.ts +13 -0
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +13 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts +2 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/services/weekly-metrics.d.ts +1 -0
- package/dist/server/src/services/weekly-metrics.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +1 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/files.d.ts +22 -0
- package/dist/shared/contracts/settings.d.ts +2 -0
- package/package.json +5 -5
|
@@ -33,6 +33,7 @@ const CarouselAssets = /*#__PURE__*/ React__namespace.forwardRef(({ assets, disa
|
|
|
33
33
|
const { formatMessage } = reactIntl.useIntl();
|
|
34
34
|
const [isEditingAsset, setIsEditingAsset] = React__namespace.useState(false);
|
|
35
35
|
const currentAsset = assets[selectedAssetIndex];
|
|
36
|
+
const canEditMedia = !disabled && onEditAsset;
|
|
36
37
|
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
37
38
|
children: [
|
|
38
39
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CarouselInput, {
|
|
@@ -58,7 +59,7 @@ const CarouselAssets = /*#__PURE__*/ React__namespace.forwardRef(({ assets, disa
|
|
|
58
59
|
asset: currentAsset,
|
|
59
60
|
onDeleteAsset: disabled ? undefined : onDeleteAsset,
|
|
60
61
|
onAddAsset: disabled ? undefined : onAddAsset,
|
|
61
|
-
onEditAsset:
|
|
62
|
+
onEditAsset: canEditMedia ? ()=>setIsEditingAsset(true) : undefined
|
|
62
63
|
}) : undefined,
|
|
63
64
|
children: assets.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.CarouselSlide, {
|
|
64
65
|
label: formatMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselAssets.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { CarouselInput, CarouselSlide } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { EditAssetDialog } from '../../EditAssetDialog/EditAssetContent';\n\nimport { CarouselAsset } from './CarouselAsset';\nimport { CarouselAssetActions } from './CarouselAssetActions';\nimport { EmptyStateAsset } from './EmptyStateAsset';\n\nimport type { File as FileAsset, RawFile } from '../../../../../shared/contracts/files';\n\nexport type FileWithoutIdHash = Omit<FileAsset, 'id' | 'hash'>;\n\ninterface Asset extends Omit<FileAsset, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileAsset['folder'] & { id: number };\n}\n\nexport interface CarouselAssetsProps {\n assets: FileAsset[];\n disabled?: boolean;\n error?: string;\n hint?: string;\n label: string;\n labelAction?: React.ReactNode;\n onAddAsset: (asset?: FileAsset, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDeleteAsset: (asset: FileAsset) => void;\n onDeleteAssetFromMediaLibrary: () => void;\n onDropAsset?: (assets: FileWithoutIdHash[]) => void;\n onEditAsset?: (asset: FileAsset) => void;\n onNext: () => void;\n onPrevious: () => void;\n required?: boolean;\n selectedAssetIndex: number;\n trackedLocation?: string;\n}\n\nexport const CarouselAssets = React.forwardRef(\n (\n {\n assets,\n disabled = false,\n error,\n hint,\n label,\n labelAction,\n onAddAsset,\n onDeleteAsset,\n onDeleteAssetFromMediaLibrary,\n onDropAsset,\n onEditAsset,\n onNext,\n onPrevious,\n required = false,\n selectedAssetIndex,\n trackedLocation,\n }: CarouselAssetsProps,\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const [isEditingAsset, setIsEditingAsset] = React.useState(false);\n\n const currentAsset = assets[selectedAssetIndex];\n\n return (\n <>\n <CarouselInput\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n label={label}\n labelAction={labelAction}\n secondaryLabel={currentAsset?.name}\n selectedSlide={selectedAssetIndex}\n previousLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.previousSlide'),\n defaultMessage: 'Previous slide',\n })}\n nextLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.nextSlide'),\n defaultMessage: 'Next slide',\n })}\n onNext={onNext}\n onPrevious={onPrevious}\n hint={hint}\n error={error}\n required={required}\n actions={\n currentAsset ? (\n <CarouselAssetActions\n asset={currentAsset}\n onDeleteAsset={disabled ? undefined : onDeleteAsset}\n onAddAsset={disabled ? undefined : onAddAsset}\n onEditAsset={
|
|
1
|
+
{"version":3,"file":"CarouselAssets.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { CarouselInput, CarouselSlide } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { EditAssetDialog } from '../../EditAssetDialog/EditAssetContent';\n\nimport { CarouselAsset } from './CarouselAsset';\nimport { CarouselAssetActions } from './CarouselAssetActions';\nimport { EmptyStateAsset } from './EmptyStateAsset';\n\nimport type { File as FileAsset, RawFile } from '../../../../../shared/contracts/files';\n\nexport type FileWithoutIdHash = Omit<FileAsset, 'id' | 'hash'>;\n\ninterface Asset extends Omit<FileAsset, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileAsset['folder'] & { id: number };\n}\n\nexport interface CarouselAssetsProps {\n assets: FileAsset[];\n disabled?: boolean;\n error?: string;\n hint?: string;\n label: string;\n labelAction?: React.ReactNode;\n onAddAsset: (asset?: FileAsset, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDeleteAsset: (asset: FileAsset) => void;\n onDeleteAssetFromMediaLibrary: () => void;\n onDropAsset?: (assets: FileWithoutIdHash[]) => void;\n onEditAsset?: (asset: FileAsset) => void;\n onNext: () => void;\n onPrevious: () => void;\n required?: boolean;\n selectedAssetIndex: number;\n trackedLocation?: string;\n}\n\nexport const CarouselAssets = React.forwardRef(\n (\n {\n assets,\n disabled = false,\n error,\n hint,\n label,\n labelAction,\n onAddAsset,\n onDeleteAsset,\n onDeleteAssetFromMediaLibrary,\n onDropAsset,\n onEditAsset,\n onNext,\n onPrevious,\n required = false,\n selectedAssetIndex,\n trackedLocation,\n }: CarouselAssetsProps,\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const [isEditingAsset, setIsEditingAsset] = React.useState(false);\n\n const currentAsset = assets[selectedAssetIndex];\n const canEditMedia = !disabled && onEditAsset;\n\n return (\n <>\n <CarouselInput\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n label={label}\n labelAction={labelAction}\n secondaryLabel={currentAsset?.name}\n selectedSlide={selectedAssetIndex}\n previousLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.previousSlide'),\n defaultMessage: 'Previous slide',\n })}\n nextLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.nextSlide'),\n defaultMessage: 'Next slide',\n })}\n onNext={onNext}\n onPrevious={onPrevious}\n hint={hint}\n error={error}\n required={required}\n actions={\n currentAsset ? (\n <CarouselAssetActions\n asset={currentAsset}\n onDeleteAsset={disabled ? undefined : onDeleteAsset}\n onAddAsset={disabled ? undefined : onAddAsset}\n onEditAsset={canEditMedia ? () => setIsEditingAsset(true) : undefined}\n />\n ) : undefined\n }\n >\n {assets.length === 0 ? (\n <CarouselSlide\n label={formatMessage(\n {\n id: getTrad('mediaLibraryInput.slideCount'),\n defaultMessage: '{n} of {m} slides',\n },\n { n: 1, m: 1 }\n )}\n >\n <EmptyStateAsset\n disabled={disabled}\n onClick={onAddAsset}\n onDropAsset={onDropAsset!}\n />\n </CarouselSlide>\n ) : (\n assets.map((asset, index) => (\n <CarouselSlide\n key={asset.id}\n label={formatMessage(\n {\n id: getTrad('mediaLibraryInput.slideCount'),\n defaultMessage: '{n} of {m} slides',\n },\n { n: index + 1, m: assets.length }\n )}\n >\n <CarouselAsset asset={asset} />\n </CarouselSlide>\n ))\n )}\n </CarouselInput>\n <EditAssetDialog\n open={isEditingAsset}\n onClose={(editedAsset) => {\n setIsEditingAsset(false);\n\n // The asset has been deleted\n if (editedAsset === null) {\n onDeleteAssetFromMediaLibrary();\n }\n if (editedAsset && typeof editedAsset !== 'boolean') {\n onEditAsset?.(editedAsset);\n }\n }}\n asset={currentAsset as Asset}\n canUpdate\n canCopyLink\n canDownload\n trackedLocation={trackedLocation}\n />\n </>\n );\n }\n);\n"],"names":["CarouselAssets","React","forwardRef","assets","disabled","error","hint","label","labelAction","onAddAsset","onDeleteAsset","onDeleteAssetFromMediaLibrary","onDropAsset","onEditAsset","onNext","onPrevious","required","selectedAssetIndex","trackedLocation","forwardedRef","formatMessage","useIntl","isEditingAsset","setIsEditingAsset","useState","currentAsset","canEditMedia","_jsxs","_Fragment","_jsx","CarouselInput","ref","secondaryLabel","name","selectedSlide","previousLabel","id","getTrad","defaultMessage","nextLabel","actions","CarouselAssetActions","asset","undefined","length","CarouselSlide","n","m","EmptyStateAsset","onClick","map","index","CarouselAsset","EditAssetDialog","open","onClose","editedAsset","canUpdate","canCopyLink","canDownload"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyCaA,cAAiBC,iBAAAA,gBAAAA,CAAMC,UAAU,CAC5C,CACE,EACEC,MAAM,EACNC,QAAW,GAAA,KAAK,EAChBC,KAAK,EACLC,IAAI,EACJC,KAAK,EACLC,WAAW,EACXC,UAAU,EACVC,aAAa,EACbC,6BAA6B,EAC7BC,WAAW,EACXC,WAAW,EACXC,MAAM,EACNC,UAAU,EACVC,WAAW,KAAK,EAChBC,kBAAkB,EAClBC,eAAe,EACK,EACtBC,YAAAA,GAAAA;IAEA,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,cAAgBC,EAAAA,iBAAAA,CAAkB,GAAGtB,gBAAAA,CAAMuB,QAAQ,CAAC,KAAA,CAAA;IAE3D,MAAMC,YAAAA,GAAetB,MAAM,CAACc,kBAAmB,CAAA;IAC/C,MAAMS,YAAAA,GAAe,CAACtB,QAAYS,IAAAA,WAAAA;IAElC,qBACEc,eAAA,CAAAC,mBAAA,EAAA;;0BACEC,cAACC,CAAAA,0BAAAA,EAAAA;gBACCC,GAAKZ,EAAAA,YAAAA;gBACLZ,KAAOA,EAAAA,KAAAA;gBACPC,WAAaA,EAAAA,WAAAA;AACbwB,gBAAAA,cAAAA,EAAgBP,YAAcQ,EAAAA,IAAAA;gBAC9BC,aAAejB,EAAAA,kBAAAA;AACfkB,gBAAAA,aAAAA,EAAef,aAAc,CAAA;AAC3BgB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,yCAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAC,gBAAAA,SAAAA,EAAWnB,aAAc,CAAA;AACvBgB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,qCAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAxB,MAAQA,EAAAA,MAAAA;gBACRC,UAAYA,EAAAA,UAAAA;gBACZT,IAAMA,EAAAA,IAAAA;gBACND,KAAOA,EAAAA,KAAAA;gBACPW,QAAUA,EAAAA,QAAAA;AACVwB,gBAAAA,OAAAA,EACEf,6BACEI,cAACY,CAAAA,yCAAAA,EAAAA;oBACCC,KAAOjB,EAAAA,YAAAA;AACPf,oBAAAA,aAAAA,EAAeN,WAAWuC,SAAYjC,GAAAA,aAAAA;AACtCD,oBAAAA,UAAAA,EAAYL,WAAWuC,SAAYlC,GAAAA,UAAAA;oBACnCI,WAAaa,EAAAA,YAAAA,GAAe,IAAMH,iBAAAA,CAAkB,IAAQoB,CAAAA,GAAAA;AAE5DA,iBAAAA,CAAAA,GAAAA,SAAAA;0BAGLxC,MAAOyC,CAAAA,MAAM,KAAK,CAAA,iBACjBf,cAACgB,CAAAA,0BAAAA,EAAAA;AACCtC,oBAAAA,KAAAA,EAAOa,aACL,CAAA;AACEgB,wBAAAA,EAAAA,EAAIC,eAAQ,CAAA,8BAAA,CAAA;wBACZC,cAAgB,EAAA;qBAElB,EAAA;wBAAEQ,CAAG,EAAA,CAAA;wBAAGC,CAAG,EAAA;AAAE,qBAAA,CAAA;AAGf,oBAAA,QAAA,gBAAAlB,cAACmB,CAAAA,+BAAAA,EAAAA;wBACC5C,QAAUA,EAAAA,QAAAA;wBACV6C,OAASxC,EAAAA,UAAAA;wBACTG,WAAaA,EAAAA;;AAIjBT,iBAAAA,CAAAA,GAAAA,MAAAA,CAAO+C,GAAG,CAAC,CAACR,KAAAA,EAAOS,sBACjBtB,cAACgB,CAAAA,0BAAAA,EAAAA;AAECtC,wBAAAA,KAAAA,EAAOa,aACL,CAAA;AACEgB,4BAAAA,EAAAA,EAAIC,eAAQ,CAAA,8BAAA,CAAA;4BACZC,cAAgB,EAAA;yBAElB,EAAA;AAAEQ,4BAAAA,CAAAA,EAAGK,KAAQ,GAAA,CAAA;AAAGJ,4BAAAA,CAAAA,EAAG5C,OAAOyC;AAAO,yBAAA,CAAA;AAGnC,wBAAA,QAAA,gBAAAf,cAACuB,CAAAA,2BAAAA,EAAAA;4BAAcV,KAAOA,EAAAA;;AATjBA,qBAAAA,EAAAA,KAAAA,CAAMN,EAAE,CAAA;;0BAcrBP,cAACwB,CAAAA,gCAAAA,EAAAA;gBACCC,IAAMhC,EAAAA,cAAAA;AACNiC,gBAAAA,OAAAA,EAAS,CAACC,WAAAA,GAAAA;oBACRjC,iBAAkB,CAAA,KAAA,CAAA;;AAGlB,oBAAA,IAAIiC,gBAAgB,IAAM,EAAA;AACxB7C,wBAAAA,6BAAAA,EAAAA;AACF;oBACA,IAAI6C,WAAAA,IAAe,OAAOA,WAAAA,KAAgB,SAAW,EAAA;wBACnD3C,WAAc2C,GAAAA,WAAAA,CAAAA;AAChB;AACF,iBAAA;gBACAd,KAAOjB,EAAAA,YAAAA;gBACPgC,SAAS,EAAA,IAAA;gBACTC,WAAW,EAAA,IAAA;gBACXC,WAAW,EAAA,IAAA;gBACXzC,eAAiBA,EAAAA;;;;AAIzB,CACA;;;;"}
|
|
@@ -12,6 +12,7 @@ const CarouselAssets = /*#__PURE__*/ React.forwardRef(({ assets, disabled = fals
|
|
|
12
12
|
const { formatMessage } = useIntl();
|
|
13
13
|
const [isEditingAsset, setIsEditingAsset] = React.useState(false);
|
|
14
14
|
const currentAsset = assets[selectedAssetIndex];
|
|
15
|
+
const canEditMedia = !disabled && onEditAsset;
|
|
15
16
|
return /*#__PURE__*/ jsxs(Fragment, {
|
|
16
17
|
children: [
|
|
17
18
|
/*#__PURE__*/ jsx(CarouselInput, {
|
|
@@ -37,7 +38,7 @@ const CarouselAssets = /*#__PURE__*/ React.forwardRef(({ assets, disabled = fals
|
|
|
37
38
|
asset: currentAsset,
|
|
38
39
|
onDeleteAsset: disabled ? undefined : onDeleteAsset,
|
|
39
40
|
onAddAsset: disabled ? undefined : onAddAsset,
|
|
40
|
-
onEditAsset:
|
|
41
|
+
onEditAsset: canEditMedia ? ()=>setIsEditingAsset(true) : undefined
|
|
41
42
|
}) : undefined,
|
|
42
43
|
children: assets.length === 0 ? /*#__PURE__*/ jsx(CarouselSlide, {
|
|
43
44
|
label: formatMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselAssets.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { CarouselInput, CarouselSlide } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { EditAssetDialog } from '../../EditAssetDialog/EditAssetContent';\n\nimport { CarouselAsset } from './CarouselAsset';\nimport { CarouselAssetActions } from './CarouselAssetActions';\nimport { EmptyStateAsset } from './EmptyStateAsset';\n\nimport type { File as FileAsset, RawFile } from '../../../../../shared/contracts/files';\n\nexport type FileWithoutIdHash = Omit<FileAsset, 'id' | 'hash'>;\n\ninterface Asset extends Omit<FileAsset, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileAsset['folder'] & { id: number };\n}\n\nexport interface CarouselAssetsProps {\n assets: FileAsset[];\n disabled?: boolean;\n error?: string;\n hint?: string;\n label: string;\n labelAction?: React.ReactNode;\n onAddAsset: (asset?: FileAsset, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDeleteAsset: (asset: FileAsset) => void;\n onDeleteAssetFromMediaLibrary: () => void;\n onDropAsset?: (assets: FileWithoutIdHash[]) => void;\n onEditAsset?: (asset: FileAsset) => void;\n onNext: () => void;\n onPrevious: () => void;\n required?: boolean;\n selectedAssetIndex: number;\n trackedLocation?: string;\n}\n\nexport const CarouselAssets = React.forwardRef(\n (\n {\n assets,\n disabled = false,\n error,\n hint,\n label,\n labelAction,\n onAddAsset,\n onDeleteAsset,\n onDeleteAssetFromMediaLibrary,\n onDropAsset,\n onEditAsset,\n onNext,\n onPrevious,\n required = false,\n selectedAssetIndex,\n trackedLocation,\n }: CarouselAssetsProps,\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const [isEditingAsset, setIsEditingAsset] = React.useState(false);\n\n const currentAsset = assets[selectedAssetIndex];\n\n return (\n <>\n <CarouselInput\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n label={label}\n labelAction={labelAction}\n secondaryLabel={currentAsset?.name}\n selectedSlide={selectedAssetIndex}\n previousLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.previousSlide'),\n defaultMessage: 'Previous slide',\n })}\n nextLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.nextSlide'),\n defaultMessage: 'Next slide',\n })}\n onNext={onNext}\n onPrevious={onPrevious}\n hint={hint}\n error={error}\n required={required}\n actions={\n currentAsset ? (\n <CarouselAssetActions\n asset={currentAsset}\n onDeleteAsset={disabled ? undefined : onDeleteAsset}\n onAddAsset={disabled ? undefined : onAddAsset}\n onEditAsset={
|
|
1
|
+
{"version":3,"file":"CarouselAssets.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { CarouselInput, CarouselSlide } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { EditAssetDialog } from '../../EditAssetDialog/EditAssetContent';\n\nimport { CarouselAsset } from './CarouselAsset';\nimport { CarouselAssetActions } from './CarouselAssetActions';\nimport { EmptyStateAsset } from './EmptyStateAsset';\n\nimport type { File as FileAsset, RawFile } from '../../../../../shared/contracts/files';\n\nexport type FileWithoutIdHash = Omit<FileAsset, 'id' | 'hash'>;\n\ninterface Asset extends Omit<FileAsset, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileAsset['folder'] & { id: number };\n}\n\nexport interface CarouselAssetsProps {\n assets: FileAsset[];\n disabled?: boolean;\n error?: string;\n hint?: string;\n label: string;\n labelAction?: React.ReactNode;\n onAddAsset: (asset?: FileAsset, event?: React.MouseEventHandler<HTMLButtonElement>) => void;\n onDeleteAsset: (asset: FileAsset) => void;\n onDeleteAssetFromMediaLibrary: () => void;\n onDropAsset?: (assets: FileWithoutIdHash[]) => void;\n onEditAsset?: (asset: FileAsset) => void;\n onNext: () => void;\n onPrevious: () => void;\n required?: boolean;\n selectedAssetIndex: number;\n trackedLocation?: string;\n}\n\nexport const CarouselAssets = React.forwardRef(\n (\n {\n assets,\n disabled = false,\n error,\n hint,\n label,\n labelAction,\n onAddAsset,\n onDeleteAsset,\n onDeleteAssetFromMediaLibrary,\n onDropAsset,\n onEditAsset,\n onNext,\n onPrevious,\n required = false,\n selectedAssetIndex,\n trackedLocation,\n }: CarouselAssetsProps,\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const [isEditingAsset, setIsEditingAsset] = React.useState(false);\n\n const currentAsset = assets[selectedAssetIndex];\n const canEditMedia = !disabled && onEditAsset;\n\n return (\n <>\n <CarouselInput\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n label={label}\n labelAction={labelAction}\n secondaryLabel={currentAsset?.name}\n selectedSlide={selectedAssetIndex}\n previousLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.previousSlide'),\n defaultMessage: 'Previous slide',\n })}\n nextLabel={formatMessage({\n id: getTrad('mediaLibraryInput.actions.nextSlide'),\n defaultMessage: 'Next slide',\n })}\n onNext={onNext}\n onPrevious={onPrevious}\n hint={hint}\n error={error}\n required={required}\n actions={\n currentAsset ? (\n <CarouselAssetActions\n asset={currentAsset}\n onDeleteAsset={disabled ? undefined : onDeleteAsset}\n onAddAsset={disabled ? undefined : onAddAsset}\n onEditAsset={canEditMedia ? () => setIsEditingAsset(true) : undefined}\n />\n ) : undefined\n }\n >\n {assets.length === 0 ? (\n <CarouselSlide\n label={formatMessage(\n {\n id: getTrad('mediaLibraryInput.slideCount'),\n defaultMessage: '{n} of {m} slides',\n },\n { n: 1, m: 1 }\n )}\n >\n <EmptyStateAsset\n disabled={disabled}\n onClick={onAddAsset}\n onDropAsset={onDropAsset!}\n />\n </CarouselSlide>\n ) : (\n assets.map((asset, index) => (\n <CarouselSlide\n key={asset.id}\n label={formatMessage(\n {\n id: getTrad('mediaLibraryInput.slideCount'),\n defaultMessage: '{n} of {m} slides',\n },\n { n: index + 1, m: assets.length }\n )}\n >\n <CarouselAsset asset={asset} />\n </CarouselSlide>\n ))\n )}\n </CarouselInput>\n <EditAssetDialog\n open={isEditingAsset}\n onClose={(editedAsset) => {\n setIsEditingAsset(false);\n\n // The asset has been deleted\n if (editedAsset === null) {\n onDeleteAssetFromMediaLibrary();\n }\n if (editedAsset && typeof editedAsset !== 'boolean') {\n onEditAsset?.(editedAsset);\n }\n }}\n asset={currentAsset as Asset}\n canUpdate\n canCopyLink\n canDownload\n trackedLocation={trackedLocation}\n />\n </>\n );\n }\n);\n"],"names":["CarouselAssets","React","forwardRef","assets","disabled","error","hint","label","labelAction","onAddAsset","onDeleteAsset","onDeleteAssetFromMediaLibrary","onDropAsset","onEditAsset","onNext","onPrevious","required","selectedAssetIndex","trackedLocation","forwardedRef","formatMessage","useIntl","isEditingAsset","setIsEditingAsset","useState","currentAsset","canEditMedia","_jsxs","_Fragment","_jsx","CarouselInput","ref","secondaryLabel","name","selectedSlide","previousLabel","id","getTrad","defaultMessage","nextLabel","actions","CarouselAssetActions","asset","undefined","length","CarouselSlide","n","m","EmptyStateAsset","onClick","map","index","CarouselAsset","EditAssetDialog","open","onClose","editedAsset","canUpdate","canCopyLink","canDownload"],"mappings":"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"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
function flattenTree(tree, parent = null, depth = 0) {
|
|
4
|
-
return tree.flatMap((item)=>
|
|
3
|
+
function flattenTree(tree, parent = null, depth = 0, path = '') {
|
|
4
|
+
return tree.flatMap((item)=>{
|
|
5
|
+
const newPath = item.value ? `${path}/${item.value}` : path;
|
|
6
|
+
return item.children ? [
|
|
5
7
|
{
|
|
6
8
|
...item,
|
|
7
9
|
parent: parent?.value,
|
|
8
|
-
depth
|
|
10
|
+
depth,
|
|
11
|
+
path: newPath
|
|
9
12
|
},
|
|
10
|
-
...flattenTree(item.children, item, depth + 1)
|
|
13
|
+
...flattenTree(item.children, item, depth + 1, newPath)
|
|
11
14
|
] : {
|
|
12
15
|
...item,
|
|
13
16
|
depth,
|
|
14
|
-
parent: parent?.value
|
|
15
|
-
|
|
17
|
+
parent: parent?.value,
|
|
18
|
+
path: newPath
|
|
19
|
+
};
|
|
20
|
+
});
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
exports.flattenTree = flattenTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenTree.js","sources":["../../../../../admin/src/components/SelectTree/utils/flattenTree.ts"],"sourcesContent":["type TreeNode<T> = {\n value: T;\n children?: TreeNode<T>[];\n label?: string;\n};\n\nexport type FlattenedNode<T> = {\n value: T;\n parent?: T;\n depth: number;\n // we need the label in places where flattenTree is used\n label?: string;\n children?: TreeNode<T>[];\n};\n\nexport function flattenTree<T>(\n tree: TreeNode<T>[],\n parent: TreeNode<T> | null = null,\n depth: number = 0\n): FlattenedNode<T>[] {\n return tree.flatMap((item)
|
|
1
|
+
{"version":3,"file":"flattenTree.js","sources":["../../../../../admin/src/components/SelectTree/utils/flattenTree.ts"],"sourcesContent":["type TreeNode<T> = {\n value: T;\n children?: TreeNode<T>[];\n label?: string;\n path?: string;\n};\n\nexport type FlattenedNode<T> = {\n value: T;\n parent?: T;\n depth: number;\n // we need the label in places where flattenTree is used\n label?: string;\n path?: string;\n children?: TreeNode<T>[];\n};\n\nexport function flattenTree<T>(\n tree: TreeNode<T>[],\n parent: TreeNode<T> | null = null,\n depth: number = 0,\n path: string = ''\n): FlattenedNode<T>[] {\n return tree.flatMap((item) => {\n const newPath = item.value ? `${path}/${item.value}` : path;\n\n return item.children\n ? [\n { ...item, parent: parent?.value, depth, path: newPath },\n ...flattenTree(item.children, item, depth + 1, newPath),\n ]\n : { ...item, depth, parent: parent?.value, path: newPath };\n });\n}\n"],"names":["flattenTree","tree","parent","depth","path","flatMap","item","newPath","value","children"],"mappings":";;AAiBO,SAASA,WACdC,CAAAA,IAAmB,EACnBC,MAAAA,GAA6B,IAAI,EACjCC,KAAgB,GAAA,CAAC,EACjBC,IAAAA,GAAe,EAAE,EAAA;IAEjB,OAAOH,IAAAA,CAAKI,OAAO,CAAC,CAACC,IAAAA,GAAAA;AACnB,QAAA,MAAMC,OAAUD,GAAAA,IAAAA,CAAKE,KAAK,GAAG,CAAC,EAAEJ,IAAK,CAAA,CAAC,EAAEE,IAAAA,CAAKE,KAAK,CAAC,CAAC,GAAGJ,IAAAA;QAEvD,OAAOE,IAAAA,CAAKG,QAAQ,GAChB;AACE,YAAA;AAAE,gBAAA,GAAGH,IAAI;AAAEJ,gBAAAA,MAAAA,EAAQA,MAAQM,EAAAA,KAAAA;AAAOL,gBAAAA,KAAAA;gBAAOC,IAAMG,EAAAA;AAAQ,aAAA;AACpDP,YAAAA,GAAAA,WAAAA,CAAYM,IAAKG,CAAAA,QAAQ,EAAEH,IAAAA,EAAMH,QAAQ,CAAGI,EAAAA,OAAAA;SAChD,GACD;AAAE,YAAA,GAAGD,IAAI;AAAEH,YAAAA,KAAAA;AAAOD,YAAAA,MAAAA,EAAQA,MAAQM,EAAAA,KAAAA;YAAOJ,IAAMG,EAAAA;AAAQ,SAAA;AAC7D,KAAA,CAAA;AACF;;;;"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
function flattenTree(tree, parent = null, depth = 0) {
|
|
2
|
-
return tree.flatMap((item)=>
|
|
1
|
+
function flattenTree(tree, parent = null, depth = 0, path = '') {
|
|
2
|
+
return tree.flatMap((item)=>{
|
|
3
|
+
const newPath = item.value ? `${path}/${item.value}` : path;
|
|
4
|
+
return item.children ? [
|
|
3
5
|
{
|
|
4
6
|
...item,
|
|
5
7
|
parent: parent?.value,
|
|
6
|
-
depth
|
|
8
|
+
depth,
|
|
9
|
+
path: newPath
|
|
7
10
|
},
|
|
8
|
-
...flattenTree(item.children, item, depth + 1)
|
|
11
|
+
...flattenTree(item.children, item, depth + 1, newPath)
|
|
9
12
|
] : {
|
|
10
13
|
...item,
|
|
11
14
|
depth,
|
|
12
|
-
parent: parent?.value
|
|
13
|
-
|
|
15
|
+
parent: parent?.value,
|
|
16
|
+
path: newPath
|
|
17
|
+
};
|
|
18
|
+
});
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
export { flattenTree };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenTree.mjs","sources":["../../../../../admin/src/components/SelectTree/utils/flattenTree.ts"],"sourcesContent":["type TreeNode<T> = {\n value: T;\n children?: TreeNode<T>[];\n label?: string;\n};\n\nexport type FlattenedNode<T> = {\n value: T;\n parent?: T;\n depth: number;\n // we need the label in places where flattenTree is used\n label?: string;\n children?: TreeNode<T>[];\n};\n\nexport function flattenTree<T>(\n tree: TreeNode<T>[],\n parent: TreeNode<T> | null = null,\n depth: number = 0\n): FlattenedNode<T>[] {\n return tree.flatMap((item)
|
|
1
|
+
{"version":3,"file":"flattenTree.mjs","sources":["../../../../../admin/src/components/SelectTree/utils/flattenTree.ts"],"sourcesContent":["type TreeNode<T> = {\n value: T;\n children?: TreeNode<T>[];\n label?: string;\n path?: string;\n};\n\nexport type FlattenedNode<T> = {\n value: T;\n parent?: T;\n depth: number;\n // we need the label in places where flattenTree is used\n label?: string;\n path?: string;\n children?: TreeNode<T>[];\n};\n\nexport function flattenTree<T>(\n tree: TreeNode<T>[],\n parent: TreeNode<T> | null = null,\n depth: number = 0,\n path: string = ''\n): FlattenedNode<T>[] {\n return tree.flatMap((item) => {\n const newPath = item.value ? `${path}/${item.value}` : path;\n\n return item.children\n ? [\n { ...item, parent: parent?.value, depth, path: newPath },\n ...flattenTree(item.children, item, depth + 1, newPath),\n ]\n : { ...item, depth, parent: parent?.value, path: newPath };\n });\n}\n"],"names":["flattenTree","tree","parent","depth","path","flatMap","item","newPath","value","children"],"mappings":"AAiBO,SAASA,WACdC,CAAAA,IAAmB,EACnBC,MAAAA,GAA6B,IAAI,EACjCC,KAAgB,GAAA,CAAC,EACjBC,IAAAA,GAAe,EAAE,EAAA;IAEjB,OAAOH,IAAAA,CAAKI,OAAO,CAAC,CAACC,IAAAA,GAAAA;AACnB,QAAA,MAAMC,OAAUD,GAAAA,IAAAA,CAAKE,KAAK,GAAG,CAAC,EAAEJ,IAAK,CAAA,CAAC,EAAEE,IAAAA,CAAKE,KAAK,CAAC,CAAC,GAAGJ,IAAAA;QAEvD,OAAOE,IAAAA,CAAKG,QAAQ,GAChB;AACE,YAAA;AAAE,gBAAA,GAAGH,IAAI;AAAEJ,gBAAAA,MAAAA,EAAQA,MAAQM,EAAAA,KAAAA;AAAOL,gBAAAA,KAAAA;gBAAOC,IAAMG,EAAAA;AAAQ,aAAA;AACpDP,YAAAA,GAAAA,WAAAA,CAAYM,IAAKG,CAAAA,QAAQ,EAAEH,IAAAA,EAAMH,QAAQ,CAAGI,EAAAA,OAAAA;SAChD,GACD;AAAE,YAAA,GAAGD,IAAI;AAAEH,YAAAA,KAAAA;AAAOD,YAAAA,MAAAA,EAAQA,MAAQM,EAAAA,KAAAA;YAAOJ,IAAMG,EAAAA;AAAQ,SAAA;AAC7D,KAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ee = require('@strapi/admin/strapi-admin/ee');
|
|
4
|
+
var useSettings = require('./useSettings.js');
|
|
5
|
+
|
|
6
|
+
const useAIAvailability = ()=>{
|
|
7
|
+
const isAiAvailable = ee.useAIAvailability();
|
|
8
|
+
const { status, data } = useSettings.useSettings(isAiAvailable);
|
|
9
|
+
if (!isAiAvailable) {
|
|
10
|
+
return {
|
|
11
|
+
status: 'success',
|
|
12
|
+
isEnabled: false
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
status,
|
|
17
|
+
isEnabled: data?.aiMetadata
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.useAIAvailability = useAIAvailability;
|
|
22
|
+
//# sourceMappingURL=useAiAvailability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAiAvailability.js","sources":["../../../admin/src/hooks/useAiAvailability.ts"],"sourcesContent":["import { useAIAvailability as useGlobalAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useSettings } from './useSettings';\n\nexport const useAIAvailability = () => {\n const isAiAvailable = useGlobalAIAvailability();\n const { status, data } = useSettings(isAiAvailable);\n\n if (!isAiAvailable) {\n return { status: 'success' as const, isEnabled: false };\n }\n\n return { status, isEnabled: data?.aiMetadata };\n};\n"],"names":["useAIAvailability","isAiAvailable","useGlobalAIAvailability","status","data","useSettings","isEnabled","aiMetadata"],"mappings":";;;;;MAIaA,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMC,aAAgBC,GAAAA,oBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGC,uBAAYJ,CAAAA,aAAAA,CAAAA;AAErC,IAAA,IAAI,CAACA,aAAe,EAAA;QAClB,OAAO;YAAEE,MAAQ,EAAA,SAAA;YAAoBG,SAAW,EAAA;AAAM,SAAA;AACxD;IAEA,OAAO;AAAEH,QAAAA,MAAAA;AAAQG,QAAAA,SAAAA,EAAWF,IAAMG,EAAAA;AAAW,KAAA;AAC/C;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useAIAvailability as useAIAvailability$1 } from '@strapi/admin/strapi-admin/ee';
|
|
2
|
+
import { useSettings } from './useSettings.mjs';
|
|
3
|
+
|
|
4
|
+
const useAIAvailability = ()=>{
|
|
5
|
+
const isAiAvailable = useAIAvailability$1();
|
|
6
|
+
const { status, data } = useSettings(isAiAvailable);
|
|
7
|
+
if (!isAiAvailable) {
|
|
8
|
+
return {
|
|
9
|
+
status: 'success',
|
|
10
|
+
isEnabled: false
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
status,
|
|
15
|
+
isEnabled: data?.aiMetadata
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { useAIAvailability };
|
|
20
|
+
//# sourceMappingURL=useAiAvailability.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAiAvailability.mjs","sources":["../../../admin/src/hooks/useAiAvailability.ts"],"sourcesContent":["import { useAIAvailability as useGlobalAIAvailability } from '@strapi/admin/strapi-admin/ee';\n\nimport { useSettings } from './useSettings';\n\nexport const useAIAvailability = () => {\n const isAiAvailable = useGlobalAIAvailability();\n const { status, data } = useSettings(isAiAvailable);\n\n if (!isAiAvailable) {\n return { status: 'success' as const, isEnabled: false };\n }\n\n return { status, isEnabled: data?.aiMetadata };\n};\n"],"names":["useAIAvailability","isAiAvailable","useGlobalAIAvailability","status","data","useSettings","isEnabled","aiMetadata"],"mappings":";;;MAIaA,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMC,aAAgBC,GAAAA,mBAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAGC,WAAYJ,CAAAA,aAAAA,CAAAA;AAErC,IAAA,IAAI,CAACA,aAAe,EAAA;QAClB,OAAO;YAAEE,MAAQ,EAAA,SAAA;YAAoBG,SAAW,EAAA;AAAM,SAAA;AACxD;IAEA,OAAO;AAAEH,QAAAA,MAAAA;AAAQG,QAAAA,SAAAA,EAAWF,IAAMG,EAAAA;AAAW,KAAA;AAC/C;;;;"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
|
+
var reactIntl = require('react-intl');
|
|
5
|
+
var reactQuery = require('react-query');
|
|
6
|
+
var pluginId = require('../pluginId.js');
|
|
7
|
+
require('byte-size');
|
|
8
|
+
require('date-fns');
|
|
9
|
+
var getTrad = require('../utils/getTrad.js');
|
|
10
|
+
require('qs');
|
|
11
|
+
require('../constants.js');
|
|
12
|
+
require('../utils/urlYupSchema.js');
|
|
13
|
+
|
|
14
|
+
const useBulkEdit = ()=>{
|
|
15
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
16
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
17
|
+
const queryClient = reactQuery.useQueryClient();
|
|
18
|
+
const { post } = strapiAdmin.useFetchClient();
|
|
19
|
+
const bulkEditQuery = ({ updates })=>{
|
|
20
|
+
return post('/upload/actions/bulk-update', {
|
|
21
|
+
updates
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
const mutation = reactQuery.useMutation(bulkEditQuery, {
|
|
25
|
+
onSuccess (res) {
|
|
26
|
+
const { data } = res;
|
|
27
|
+
if (data && data.length > 0) {
|
|
28
|
+
queryClient.refetchQueries([
|
|
29
|
+
pluginId.pluginId,
|
|
30
|
+
'assets'
|
|
31
|
+
], {
|
|
32
|
+
active: true
|
|
33
|
+
});
|
|
34
|
+
queryClient.refetchQueries([
|
|
35
|
+
pluginId.pluginId,
|
|
36
|
+
'asset-count'
|
|
37
|
+
], {
|
|
38
|
+
active: true
|
|
39
|
+
});
|
|
40
|
+
queryClient.refetchQueries([
|
|
41
|
+
pluginId.pluginId,
|
|
42
|
+
'folders'
|
|
43
|
+
], {
|
|
44
|
+
active: true
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
toggleNotification({
|
|
48
|
+
type: 'success',
|
|
49
|
+
message: formatMessage({
|
|
50
|
+
id: getTrad.getTrad('modal.edit.success-label'),
|
|
51
|
+
defaultMessage: 'Files have been successfully updated.'
|
|
52
|
+
})
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const edit = (updates)=>mutation.mutateAsync({
|
|
57
|
+
updates
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
...mutation,
|
|
61
|
+
edit
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
exports.useBulkEdit = useBulkEdit;
|
|
66
|
+
//# sourceMappingURL=useBulkEdit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBulkEdit.js","sources":["../../../admin/src/hooks/useBulkEdit.ts"],"sourcesContent":["import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport { BulkUpdateFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\nimport { getTrad } from '../utils';\n\ninterface FileInfoUpdate {\n name: string;\n alternativeText: string | null;\n caption: string | null;\n folder: number | null;\n}\n\ninterface BulkEditParams {\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>;\n}\n\nexport const useBulkEdit = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { post } = useFetchClient();\n\n const bulkEditQuery = ({ updates }: BulkEditParams) => {\n return post('/upload/actions/bulk-update', { updates });\n };\n\n const mutation = useMutation<\n BulkUpdateFiles.Response,\n BulkUpdateFiles.Response['error'],\n BulkEditParams\n >(bulkEditQuery, {\n onSuccess(res) {\n const { data } = res;\n\n if (data && data.length > 0) {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('modal.edit.success-label'),\n defaultMessage: 'Files have been successfully updated.',\n }),\n });\n },\n });\n\n const edit = (\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>\n ) => mutation.mutateAsync({ updates });\n\n return { ...mutation, edit };\n};\n"],"names":["useBulkEdit","formatMessage","useIntl","toggleNotification","useNotification","queryClient","useQueryClient","post","useFetchClient","bulkEditQuery","updates","mutation","useMutation","onSuccess","res","data","length","refetchQueries","pluginId","active","type","message","id","getTrad","defaultMessage","edit","mutateAsync"],"mappings":";;;;;;;;;;;;;MAsBaA,WAAc,GAAA,IAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,yBAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,aAAgB,GAAA,CAAC,EAAEC,OAAO,EAAkB,GAAA;AAChD,QAAA,OAAOH,KAAK,6BAA+B,EAAA;AAAEG,YAAAA;AAAQ,SAAA,CAAA;AACvD,KAAA;IAEA,MAAMC,QAAAA,GAAWC,uBAIfH,aAAe,EAAA;AACfI,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;YACX,MAAM,EAAEC,IAAI,EAAE,GAAGD,GAAAA;AAEjB,YAAA,IAAIC,IAAQA,IAAAA,IAAAA,CAAKC,MAAM,GAAG,CAAG,EAAA;AAC3BX,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AAChEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACrEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACnE;YAEAhB,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASpB,aAAc,CAAA;AACrBqB,oBAAAA,EAAAA,EAAIC,eAAQ,CAAA,0BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,IAAO,GAAA,CACXf,OAIGC,GAAAA,QAAAA,CAASe,WAAW,CAAC;AAAEhB,YAAAA;AAAQ,SAAA,CAAA;IAEpC,OAAO;AAAE,QAAA,GAAGC,QAAQ;AAAEc,QAAAA;AAAK,KAAA;AAC7B;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
3
|
+
import { useQueryClient, useMutation } from 'react-query';
|
|
4
|
+
import { pluginId } from '../pluginId.mjs';
|
|
5
|
+
import 'byte-size';
|
|
6
|
+
import 'date-fns';
|
|
7
|
+
import { getTrad } from '../utils/getTrad.mjs';
|
|
8
|
+
import 'qs';
|
|
9
|
+
import '../constants.mjs';
|
|
10
|
+
import '../utils/urlYupSchema.mjs';
|
|
11
|
+
|
|
12
|
+
const useBulkEdit = ()=>{
|
|
13
|
+
const { formatMessage } = useIntl();
|
|
14
|
+
const { toggleNotification } = useNotification();
|
|
15
|
+
const queryClient = useQueryClient();
|
|
16
|
+
const { post } = useFetchClient();
|
|
17
|
+
const bulkEditQuery = ({ updates })=>{
|
|
18
|
+
return post('/upload/actions/bulk-update', {
|
|
19
|
+
updates
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
const mutation = useMutation(bulkEditQuery, {
|
|
23
|
+
onSuccess (res) {
|
|
24
|
+
const { data } = res;
|
|
25
|
+
if (data && data.length > 0) {
|
|
26
|
+
queryClient.refetchQueries([
|
|
27
|
+
pluginId,
|
|
28
|
+
'assets'
|
|
29
|
+
], {
|
|
30
|
+
active: true
|
|
31
|
+
});
|
|
32
|
+
queryClient.refetchQueries([
|
|
33
|
+
pluginId,
|
|
34
|
+
'asset-count'
|
|
35
|
+
], {
|
|
36
|
+
active: true
|
|
37
|
+
});
|
|
38
|
+
queryClient.refetchQueries([
|
|
39
|
+
pluginId,
|
|
40
|
+
'folders'
|
|
41
|
+
], {
|
|
42
|
+
active: true
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
toggleNotification({
|
|
46
|
+
type: 'success',
|
|
47
|
+
message: formatMessage({
|
|
48
|
+
id: getTrad('modal.edit.success-label'),
|
|
49
|
+
defaultMessage: 'Files have been successfully updated.'
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const edit = (updates)=>mutation.mutateAsync({
|
|
55
|
+
updates
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
...mutation,
|
|
59
|
+
edit
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export { useBulkEdit };
|
|
64
|
+
//# sourceMappingURL=useBulkEdit.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBulkEdit.mjs","sources":["../../../admin/src/hooks/useBulkEdit.ts"],"sourcesContent":["import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport { BulkUpdateFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\nimport { getTrad } from '../utils';\n\ninterface FileInfoUpdate {\n name: string;\n alternativeText: string | null;\n caption: string | null;\n folder: number | null;\n}\n\ninterface BulkEditParams {\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>;\n}\n\nexport const useBulkEdit = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { post } = useFetchClient();\n\n const bulkEditQuery = ({ updates }: BulkEditParams) => {\n return post('/upload/actions/bulk-update', { updates });\n };\n\n const mutation = useMutation<\n BulkUpdateFiles.Response,\n BulkUpdateFiles.Response['error'],\n BulkEditParams\n >(bulkEditQuery, {\n onSuccess(res) {\n const { data } = res;\n\n if (data && data.length > 0) {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('modal.edit.success-label'),\n defaultMessage: 'Files have been successfully updated.',\n }),\n });\n },\n });\n\n const edit = (\n updates: Array<{\n id: number;\n fileInfo: FileInfoUpdate;\n }>\n ) => mutation.mutateAsync({ updates });\n\n return { ...mutation, edit };\n};\n"],"names":["useBulkEdit","formatMessage","useIntl","toggleNotification","useNotification","queryClient","useQueryClient","post","useFetchClient","bulkEditQuery","updates","mutation","useMutation","onSuccess","res","data","length","refetchQueries","pluginId","active","type","message","id","getTrad","defaultMessage","edit","mutateAsync"],"mappings":";;;;;;;;;;;MAsBaA,WAAc,GAAA,IAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,cAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,aAAgB,GAAA,CAAC,EAAEC,OAAO,EAAkB,GAAA;AAChD,QAAA,OAAOH,KAAK,6BAA+B,EAAA;AAAEG,YAAAA;AAAQ,SAAA,CAAA;AACvD,KAAA;IAEA,MAAMC,QAAAA,GAAWC,YAIfH,aAAe,EAAA;AACfI,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;YACX,MAAM,EAAEC,IAAI,EAAE,GAAGD,GAAAA;AAEjB,YAAA,IAAIC,IAAQA,IAAAA,IAAAA,CAAKC,MAAM,GAAG,CAAG,EAAA;AAC3BX,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AAChEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACrEd,gBAAAA,WAAAA,CAAYY,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACnE;YAEAhB,kBAAmB,CAAA;gBACjBiB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASpB,aAAc,CAAA;AACrBqB,oBAAAA,EAAAA,EAAIC,OAAQ,CAAA,0BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,IAAO,GAAA,CACXf,OAIGC,GAAAA,QAAAA,CAASe,WAAW,CAAC;AAAEhB,YAAAA;AAAQ,SAAA,CAAA;IAEpC,OAAO;AAAE,QAAA,GAAGC,QAAQ;AAAEc,QAAAA;AAAK,KAAA;AAC7B;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
|
+
var reactQuery = require('react-query');
|
|
5
|
+
|
|
6
|
+
function useSettings(isEnabled = true) {
|
|
7
|
+
const { get } = strapiAdmin.useFetchClient();
|
|
8
|
+
return reactQuery.useQuery({
|
|
9
|
+
queryKey: [
|
|
10
|
+
'upload',
|
|
11
|
+
'settings'
|
|
12
|
+
],
|
|
13
|
+
enabled: isEnabled,
|
|
14
|
+
async queryFn () {
|
|
15
|
+
const { data: { data } } = await get('/upload/settings');
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.useSettings = useSettings;
|
|
22
|
+
//# sourceMappingURL=useSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSettings.js","sources":["../../../admin/src/hooks/useSettings.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useQuery } from 'react-query';\n\nimport type { GetSettings } from '../../../shared/contracts/settings';\n\nexport function useSettings(isEnabled: boolean = true) {\n const { get } = useFetchClient();\n\n return useQuery({\n queryKey: ['upload', 'settings'],\n enabled: isEnabled,\n async queryFn() {\n const {\n data: { data },\n } = await get<GetSettings.Response['data']>('/upload/settings');\n\n return data;\n },\n });\n}\n"],"names":["useSettings","isEnabled","get","useFetchClient","useQuery","queryKey","enabled","queryFn","data"],"mappings":";;;;;AAKO,SAASA,WAAYC,CAAAA,SAAAA,GAAqB,IAAI,EAAA;IACnD,MAAM,EAAEC,GAAG,EAAE,GAAGC,0BAAAA,EAAAA;AAEhB,IAAA,OAAOC,mBAAS,CAAA;QACdC,QAAU,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAW,SAAA;QAChCC,OAASL,EAAAA,SAAAA;QACT,MAAMM,OAAAA,CAAAA,GAAAA;YACJ,MAAM,EACJC,MAAM,EAAEA,IAAI,EAAE,EACf,GAAG,MAAMN,GAAkC,CAAA,kBAAA,CAAA;YAE5C,OAAOM,IAAAA;AACT;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useFetchClient } from '@strapi/admin/strapi-admin';
|
|
2
|
+
import { useQuery } from 'react-query';
|
|
3
|
+
|
|
4
|
+
function useSettings(isEnabled = true) {
|
|
5
|
+
const { get } = useFetchClient();
|
|
6
|
+
return useQuery({
|
|
7
|
+
queryKey: [
|
|
8
|
+
'upload',
|
|
9
|
+
'settings'
|
|
10
|
+
],
|
|
11
|
+
enabled: isEnabled,
|
|
12
|
+
async queryFn () {
|
|
13
|
+
const { data: { data } } = await get('/upload/settings');
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { useSettings };
|
|
20
|
+
//# sourceMappingURL=useSettings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSettings.mjs","sources":["../../../admin/src/hooks/useSettings.ts"],"sourcesContent":["import { useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useQuery } from 'react-query';\n\nimport type { GetSettings } from '../../../shared/contracts/settings';\n\nexport function useSettings(isEnabled: boolean = true) {\n const { get } = useFetchClient();\n\n return useQuery({\n queryKey: ['upload', 'settings'],\n enabled: isEnabled,\n async queryFn() {\n const {\n data: { data },\n } = await get<GetSettings.Response['data']>('/upload/settings');\n\n return data;\n },\n });\n}\n"],"names":["useSettings","isEnabled","get","useFetchClient","useQuery","queryKey","enabled","queryFn","data"],"mappings":";;;AAKO,SAASA,WAAYC,CAAAA,SAAAA,GAAqB,IAAI,EAAA;IACnD,MAAM,EAAEC,GAAG,EAAE,GAAGC,cAAAA,EAAAA;AAEhB,IAAA,OAAOC,QAAS,CAAA;QACdC,QAAU,EAAA;AAAC,YAAA,QAAA;AAAU,YAAA;AAAW,SAAA;QAChCC,OAASL,EAAAA,SAAAA;QACT,MAAMM,OAAAA,CAAAA,GAAAA;YACJ,MAAM,EACJC,MAAM,EAAEA,IAAI,EAAE,EACf,GAAG,MAAMN,GAAkC,CAAA,kBAAA,CAAA;YAE5C,OAAOM,IAAAA;AACT;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -26,16 +26,26 @@ function _interopNamespaceDefault(e) {
|
|
|
26
26
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
27
27
|
|
|
28
28
|
const endpoint = `/${pluginId.pluginId}`;
|
|
29
|
-
const
|
|
30
|
-
const
|
|
29
|
+
const uploadAssets = (assets, folderId, signal, onProgress, post)=>{
|
|
30
|
+
const assetsArray = Array.isArray(assets) ? assets : [
|
|
31
|
+
assets
|
|
32
|
+
];
|
|
31
33
|
const formData = new FormData();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
// Add all files to the form data
|
|
35
|
+
assetsArray.forEach((asset)=>{
|
|
36
|
+
if (asset.rawFile) {
|
|
37
|
+
formData.append('files', asset.rawFile);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// Add each fileInfo as a separate stringified field
|
|
41
|
+
assetsArray.forEach((asset)=>{
|
|
42
|
+
formData.append('fileInfo', JSON.stringify({
|
|
43
|
+
name: asset.name,
|
|
44
|
+
caption: asset.caption,
|
|
45
|
+
alternativeText: asset.alternativeText,
|
|
46
|
+
folder: folderId
|
|
47
|
+
}));
|
|
48
|
+
});
|
|
39
49
|
/**
|
|
40
50
|
* onProgress is not possible using native fetch
|
|
41
51
|
* need to look into an alternative to make it work
|
|
@@ -51,8 +61,8 @@ const useUpload = ()=>{
|
|
|
51
61
|
const abortController = new AbortController();
|
|
52
62
|
const signal = abortController.signal;
|
|
53
63
|
const { post } = strapiAdmin.useFetchClient();
|
|
54
|
-
const mutation = reactQuery.useMutation(({
|
|
55
|
-
return
|
|
64
|
+
const mutation = reactQuery.useMutation(({ assets, folderId })=>{
|
|
65
|
+
return uploadAssets(assets, folderId, signal, setProgress, post);
|
|
56
66
|
}, {
|
|
57
67
|
onSuccess () {
|
|
58
68
|
queryClient.refetchQueries([
|
|
@@ -68,12 +78,13 @@ const useUpload = ()=>{
|
|
|
68
78
|
active: true
|
|
69
79
|
});
|
|
70
80
|
dispatch(strapiAdmin.adminApi.util.invalidateTags([
|
|
71
|
-
'HomepageKeyStatistics'
|
|
81
|
+
'HomepageKeyStatistics',
|
|
82
|
+
'AIUsage'
|
|
72
83
|
]));
|
|
73
84
|
}
|
|
74
85
|
});
|
|
75
|
-
const upload = (
|
|
76
|
-
|
|
86
|
+
const upload = (assets, folderId)=>mutation.mutateAsync({
|
|
87
|
+
assets,
|
|
77
88
|
folderId
|
|
78
89
|
});
|
|
79
90
|
const cancel = ()=>abortController.abort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUpload.js","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"useUpload.js","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { File, RawFile, CreateFile } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\nconst endpoint = `/${pluginId}`;\n\ninterface Asset extends Omit<File, 'id' | 'hash'> {\n rawFile?: RawFile;\n id?: File['id'];\n hash?: File['hash'];\n}\n\nconst uploadAssets = (\n assets: Asset | Asset[],\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const assetsArray = Array.isArray(assets) ? assets : [assets];\n const formData = new FormData();\n\n // Add all files to the form data\n assetsArray.forEach((asset) => {\n if (asset.rawFile) {\n formData.append('files', asset.rawFile);\n }\n });\n\n // Add each fileInfo as a separate stringified field\n assetsArray.forEach((asset) => {\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name: asset.name,\n caption: asset.caption,\n alternativeText: asset.alternativeText,\n folder: folderId,\n })\n );\n });\n\n /**\n * onProgress is not possible using native fetch\n * need to look into an alternative to make it work\n * perhaps using xhr like Axios does\n */\n return post(endpoint, formData, {\n signal,\n }).then((res) => res.data);\n};\n\nexport const useUpload = () => {\n const dispatch = useDispatch();\n const [progress, setProgress] = React.useState(0);\n const queryClient = useQueryClient();\n const abortController = new AbortController();\n const signal = abortController.signal;\n const { post } = useFetchClient();\n\n const mutation = useMutation<\n CreateFile.Response['data'],\n CreateFile.Response['error'],\n { assets: Asset | Asset[]; folderId: number | null }\n >(\n ({ assets, folderId }) => {\n return uploadAssets(assets, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics', 'AIUsage']));\n },\n }\n );\n\n const upload = (assets: Asset | Asset[], folderId: number | null) =>\n mutation.mutateAsync({ assets, folderId });\n\n const cancel = () => abortController.abort();\n\n return {\n upload,\n isLoading: mutation.isLoading,\n cancel,\n error: mutation.error,\n progress,\n status: mutation.status,\n };\n};\n"],"names":["endpoint","pluginId","uploadAssets","assets","folderId","signal","onProgress","post","assetsArray","Array","isArray","formData","FormData","forEach","asset","rawFile","append","JSON","stringify","name","caption","alternativeText","folder","then","res","data","useUpload","dispatch","useDispatch","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","adminApi","util","invalidateTags","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":"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"}
|