@strapi/upload 5.47.0 → 5.47.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/admin/future/components/Drawer.js +7 -1
  2. package/dist/admin/future/components/Drawer.js.map +1 -1
  3. package/dist/admin/future/components/Drawer.mjs +7 -1
  4. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  5. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +275 -147
  6. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  7. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +279 -152
  8. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  9. package/dist/admin/future/services/assets.js +32 -1
  10. package/dist/admin/future/services/assets.js.map +1 -1
  11. package/dist/admin/future/services/assets.mjs +32 -2
  12. package/dist/admin/future/services/assets.mjs.map +1 -1
  13. package/dist/admin/future/services/folders.js +33 -1
  14. package/dist/admin/future/services/folders.js.map +1 -1
  15. package/dist/admin/future/services/folders.mjs +33 -2
  16. package/dist/admin/future/services/folders.mjs.map +1 -1
  17. package/dist/admin/index.js +1 -1
  18. package/dist/admin/index.mjs +1 -1
  19. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +8 -0
  20. package/dist/admin/src/future/services/assets.d.ts +6 -2
  21. package/dist/admin/src/future/services/folders.d.ts +1 -1
  22. package/dist/admin/translations/{dk.json.js → da.json.js} +3 -3
  23. package/dist/admin/translations/{dk.json.js.map → da.json.js.map} +1 -1
  24. package/dist/admin/translations/{dk.json.mjs → da.json.mjs} +3 -3
  25. package/dist/admin/translations/{dk.json.mjs.map → da.json.mjs.map} +1 -1
  26. package/dist/admin/translations/en.json.js +5 -1
  27. package/dist/admin/translations/en.json.js.map +1 -1
  28. package/dist/admin/translations/en.json.mjs +5 -1
  29. package/dist/admin/translations/en.json.mjs.map +1 -1
  30. package/dist/server/bootstrap.js +0 -3
  31. package/dist/server/bootstrap.js.map +1 -1
  32. package/dist/server/bootstrap.mjs +0 -3
  33. package/dist/server/bootstrap.mjs.map +1 -1
  34. package/dist/server/services/ai-metadata-jobs.js +0 -23
  35. package/dist/server/services/ai-metadata-jobs.js.map +1 -1
  36. package/dist/server/services/ai-metadata-jobs.mjs +0 -23
  37. package/dist/server/services/ai-metadata-jobs.mjs.map +1 -1
  38. package/dist/server/src/bootstrap.d.ts.map +1 -1
  39. package/dist/server/src/index.d.ts +0 -1
  40. package/dist/server/src/index.d.ts.map +1 -1
  41. package/dist/server/src/services/ai-metadata-jobs.d.ts +0 -1
  42. package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -1
  43. package/dist/server/src/services/index.d.ts +0 -1
  44. package/dist/server/src/services/index.d.ts.map +1 -1
  45. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"AssetDetailsDrawer.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, getDisplayName } from '@strapi/admin/strapi-admin';\nimport {\n Alert,\n Box,\n Field,\n Flex,\n Loader,\n TextInput,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { ArrowLineRight, FileError, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Drawer, DRAWER_CLOSE_ANIMATION_MS } from '../../../../components/Drawer';\nimport { AssetType } from '../../../../enums';\nimport { useGetAssetQuery } from '../../../../services/assets';\nimport { formatBytes, getFileExtension } from '../../../../utils/files';\nimport { getAssetIcon } from '../../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport { AssetPreview } from './AssetPreview';\n\nimport type { AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';\n\n// Name of the parameter to look for in the URL to open the drawer\nconst URL_PARAM = 'assetId';\n\n/* -------------------------------------------------------------------------------------------------\n * useAssetDetailsParam - sync drawer visibility with URL ?{URL_PARAM}={id}\n * -----------------------------------------------------------------------------------------------*/\n\nexport const useAssetDetailsParam = () => {\n const [{ query }, setQuery] = useQueryParams<{ [URL_PARAM]?: string }>();\n\n const detailsId = query?.[URL_PARAM];\n const assetId = detailsId ? parseInt(detailsId, 10) : null;\n const hasValidId = assetId !== null && !Number.isNaN(assetId);\n\n const [isClosing, setIsClosing] = React.useState(false);\n const displayAssetId = React.useRef<number | null>(null);\n\n const isVisible = hasValidId && !isClosing;\n\n React.useEffect(() => {\n if (hasValidId) {\n displayAssetId.current = assetId;\n }\n }, [hasValidId, assetId]);\n\n const openDetails = React.useCallback(\n (id: number) => {\n setIsClosing(false);\n setQuery({ [URL_PARAM]: String(id) });\n },\n [setQuery]\n );\n\n const closeDetails = React.useCallback(() => {\n if (!hasValidId) return;\n setIsClosing(true);\n }, [hasValidId]);\n\n React.useEffect(() => {\n if (!isClosing) return;\n const timer = window.setTimeout(() => {\n setQuery({ [URL_PARAM]: undefined }, 'remove');\n setIsClosing(false);\n displayAssetId.current = null;\n }, DRAWER_CLOSE_ANIMATION_MS);\n return () => window.clearTimeout(timer);\n }, [isClosing, setQuery]);\n\n const shouldRenderDrawer = hasValidId || isClosing;\n const drawerAssetId = isClosing ? (displayAssetId.current ?? assetId) : assetId;\n\n return {\n assetId: drawerAssetId,\n isVisible,\n shouldRenderDrawer,\n openDetails,\n closeDetails,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DetailItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DetailItemProps {\n label: string;\n value: React.ReactNode;\n}\n\nconst DetailItemContainer = styled(Flex)`\n flex: 0 0 calc(50% - ${({ theme }) => theme.spaces[2]});\n`;\n\nconst DetailItem = ({ label, value }: DetailItemProps) => (\n <DetailItemContainer\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n gap={1}\n >\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n fontWeight=\"semiBold\"\n textTransform=\"uppercase\"\n >\n {label}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n {value ?? '-'}\n </Typography>\n </DetailItemContainer>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DetailField\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledWarning = styled(WarningCircle)`\n width: 1.6rem;\n height: 1.6rem;\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\ninterface DetailFieldProps {\n name: string;\n label: string;\n value: string | null | undefined;\n required?: boolean;\n}\n\nconst DetailField = ({ name, label, value, required }: DetailFieldProps) => (\n <Field.Root name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n value={value ?? ''}\n // TODO: handle onChange\n onChange={() => {}}\n endAction={!value ? <StyledWarning /> : undefined}\n type=\"text\"\n />\n </Field.Root>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetails\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetDetailsProps {\n asset: AssetWithPopulatedCreatedBy;\n}\n\nconst AssetDetails = ({ asset }: AssetDetailsProps) => {\n const { formatMessage, formatDate } = useIntl();\n\n const isImage = asset.mime?.includes(AssetType.Image);\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n >\n <Typography variant=\"beta\" fontWeight=\"semiBold\" tag=\"h3\">\n {formatMessage({\n id: getTranslationKey('asset-details.fileInfo'),\n defaultMessage: 'File info',\n })}\n </Typography>\n <Flex\n wrap=\"wrap\"\n gap={4}\n background=\"neutral100\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n alignItems=\"flex-start\"\n >\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.creationDate'),\n defaultMessage: 'Creation date',\n })}\n value={\n asset.createdAt\n ? formatDate(new Date(asset.createdAt), { dateStyle: 'long', timeStyle: 'short' })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.lastUpdated'),\n defaultMessage: 'Last updated',\n })}\n value={\n asset.updatedAt\n ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long', timeStyle: 'short' })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.createdBy'),\n defaultMessage: 'Created by',\n })}\n value={\n asset.createdBy\n ? (getDisplayName({\n firstname: asset.createdBy.firstname ?? undefined,\n lastname: asset.createdBy.lastname ?? undefined,\n username: asset.createdBy.username ?? undefined,\n email: asset.createdBy.email ?? undefined,\n }) ?? '-')\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.size'),\n defaultMessage: 'Size',\n })}\n value={asset.size ? formatBytes(asset.size, 1) : null}\n />\n {isImage && (asset.width != null || asset.height != null) && (\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.dimensions'),\n defaultMessage: 'Dimensions',\n })}\n value={\n asset.width != null && asset.height != null\n ? `${asset.width} × ${asset.height}`\n : null\n }\n />\n )}\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.extension'),\n defaultMessage: 'Extension',\n })}\n value={getFileExtension(asset.ext)}\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.assetId'),\n defaultMessage: 'Asset ID',\n })}\n value={String(asset.id)}\n />\n </Flex>\n <DetailField\n name=\"fileName\"\n label={formatMessage({\n id: getTranslationKey('asset-details.fileName'),\n defaultMessage: 'File name',\n })}\n value={asset.name}\n required\n />\n {isImage && (\n <>\n <DetailField\n name=\"caption\"\n label={formatMessage({\n id: getTranslationKey('asset-details.caption'),\n defaultMessage: 'Caption',\n })}\n value={asset.caption}\n />\n <DetailField\n name=\"alternativeText\"\n label={formatMessage({\n id: getTranslationKey('asset-details.alternativeText'),\n defaultMessage: 'Alternative text',\n })}\n value={asset.alternativeText}\n />\n </>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerHeader\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerHeaderProps {\n asset: AssetWithPopulatedCreatedBy;\n closeDetails: () => void;\n}\n\nconst DrawerHeader = ({ asset, closeDetails }: DrawerHeaderProps) => {\n const DocIcon = asset ? getAssetIcon(asset.mime, asset.ext) : FileError;\n return (\n <Flex gap={2} paddingLeft={5} paddingTop={3} paddingBottom={3} paddingRight={3}>\n <DocIcon width={20} height={20} />\n <Drawer.Title asChild>\n <Typography variant=\"omega\" fontWeight=\"semiBold\" overflow=\"hidden\" ellipsis tag=\"h2\">\n {asset.name}\n </Typography>\n </Drawer.Title>\n <Box marginLeft=\"auto\">\n <Drawer.CloseButton onClose={closeDetails}>\n <ArrowLineRight />\n </Drawer.CloseButton>\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerContentProps {\n assetId: number;\n closeDetails: () => void;\n}\n\nconst DrawerContent = ({ assetId, closeDetails }: DrawerContentProps) => {\n const { formatMessage } = useIntl();\n const {\n data: asset,\n isLoading,\n error,\n } = useGetAssetQuery(assetId, {\n refetchOnMountOrArgChange: false,\n refetchOnReconnect: false,\n refetchOnFocus: false,\n });\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error || !asset) {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} padding={4}>\n <Alert\n variant=\"danger\"\n closeLabel={formatMessage({ id: 'global.close', defaultMessage: 'Close' })}\n onClose={closeDetails}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.error'),\n defaultMessage: 'Failed to load file details.',\n })}\n </Alert>\n </Flex>\n );\n }\n\n return (\n <>\n <DrawerHeader asset={asset} closeDetails={closeDetails} />\n <Drawer.ScrollableContent>\n <AssetPreview asset={asset} />\n <AssetDetails asset={asset} />\n </Drawer.ScrollableContent>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetailsDrawer\n * -----------------------------------------------------------------------------------------------*/\n\nexport const AssetDetailsDrawer = () => {\n const { formatMessage } = useIntl();\n const { assetId, isVisible, shouldRenderDrawer, closeDetails } = useAssetDetailsParam();\n\n if (!shouldRenderDrawer || assetId === null) {\n return null;\n }\n\n return (\n <Drawer.Root isVisible={isVisible} onClose={closeDetails}>\n {/* Wrapper div required: Dialog.Portal uses asChild and merges ref onto each child.\n VisuallyHidden does not forward refs, so we wrap it in a div that can receive the ref. */}\n <div>\n <VisuallyHidden>\n <Drawer.Title>\n {formatMessage({\n id: getTranslationKey('asset-details.title'),\n defaultMessage: 'File details',\n })}\n </Drawer.Title>\n <Drawer.Description>\n {formatMessage({\n id: getTranslationKey('asset-details.description'),\n defaultMessage: 'Displays file information and metadata',\n })}\n </Drawer.Description>\n </VisuallyHidden>\n </div>\n <Drawer.Body animationDirection=\"left\" width=\"41.6rem\" height=\"100vh\">\n <DrawerContent assetId={assetId} closeDetails={closeDetails} />\n </Drawer.Body>\n </Drawer.Root>\n );\n};\n"],"names":["URL_PARAM","useAssetDetailsParam","query","setQuery","useQueryParams","detailsId","assetId","parseInt","hasValidId","Number","isNaN","isClosing","setIsClosing","React","useState","displayAssetId","useRef","isVisible","useEffect","current","openDetails","useCallback","id","String","closeDetails","timer","window","setTimeout","undefined","DRAWER_CLOSE_ANIMATION_MS","clearTimeout","shouldRenderDrawer","drawerAssetId","DetailItemContainer","styled","Flex","theme","spaces","DetailItem","label","value","_jsxs","direction","justifyContent","alignItems","gap","_jsx","Typography","variant","textColor","fontWeight","textTransform","StyledWarning","WarningCircle","colors","warning500","DetailField","name","required","Field","Root","Label","TextInput","onChange","endAction","type","AssetDetails","asset","formatMessage","formatDate","useIntl","isImage","mime","includes","AssetType","Image","paddingTop","paddingBottom","paddingLeft","paddingRight","tag","getTranslationKey","defaultMessage","wrap","background","createdAt","Date","dateStyle","timeStyle","updatedAt","createdBy","getDisplayName","firstname","lastname","username","email","size","formatBytes","width","height","getFileExtension","ext","_Fragment","caption","alternativeText","DrawerHeader","DocIcon","getAssetIcon","FileError","Drawer","Title","asChild","overflow","ellipsis","Box","marginLeft","CloseButton","onClose","ArrowLineRight","DrawerContent","data","isLoading","error","useGetAssetQuery","refetchOnMountOrArgChange","refetchOnReconnect","refetchOnFocus","padding","Loader","Alert","closeLabel","ScrollableContent","AssetPreview","AssetDetailsDrawer","div","VisuallyHidden","Description","Body","animationDirection"],"mappings":"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"}
1
+ {"version":3,"file":"AssetDetailsDrawer.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Blocker,\n Form,\n useField,\n useForm,\n useNotification,\n useQueryParams,\n getDisplayName,\n} from '@strapi/admin/strapi-admin';\nimport {\n Alert,\n Box,\n Button,\n Field,\n Flex,\n Loader,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n Tooltip,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { ArrowLineRight, FileError, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { Drawer } from '../../../../components/Drawer';\nimport { AssetType } from '../../../../enums';\nimport { useGetAssetQuery, useUpdateAssetMutation } from '../../../../services/assets';\nimport { useGetAllFoldersQuery } from '../../../../services/folders';\nimport { formatBytes, getFileExtension } from '../../../../utils/files';\nimport { getAssetIcon } from '../../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport { AssetPreview } from './AssetPreview';\n\nimport type { AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';\n\n// Name of the parameter to look for in the URL to open the drawer\nconst URL_PARAM = 'assetId';\n\n/* -------------------------------------------------------------------------------------------------\n * useAssetDetailsParam - sync drawer visibility with URL ?{URL_PARAM}={id}\n * -----------------------------------------------------------------------------------------------*/\n\nexport const useAssetDetailsParam = () => {\n const [{ query }, setQuery] = useQueryParams<{ [URL_PARAM]?: string }>();\n\n const detailsId = query?.[URL_PARAM];\n const assetId = detailsId ? parseInt(detailsId, 10) : null;\n const hasValidId = assetId !== null && !Number.isNaN(assetId);\n\n // Closing is driven by removing the URL param (a navigation), so navigation\n // guards like <Blocker> can intercept it. `isMounted` keeps the drawer in the\n // tree through the slide-out: it stays true once opened and only flips false\n // when the close animation actually ends (see onCloseAnimationEnd), so the\n // close duration lives entirely in CSS — no JS timer.\n const [isMounted, setIsMounted] = React.useState(hasValidId);\n const displayAssetId = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n if (hasValidId) {\n displayAssetId.current = assetId;\n setIsMounted(true);\n }\n }, [hasValidId, assetId]);\n\n const onCloseAnimationEnd = React.useCallback(\n (event: React.AnimationEvent) => {\n // Ignore animations bubbling up from descendants, and the slide-in.\n if (event.target === event.currentTarget && !hasValidId) {\n setIsMounted(false);\n }\n },\n [hasValidId]\n );\n\n const openDetails = React.useCallback(\n (id: number) => {\n setQuery({ [URL_PARAM]: String(id) }, 'push', true);\n },\n [setQuery]\n );\n\n const closeDetails = React.useCallback(() => {\n setQuery({ [URL_PARAM]: undefined }, 'remove', true);\n }, [setQuery]);\n\n return {\n assetId: hasValidId ? assetId : displayAssetId.current,\n isVisible: hasValidId,\n shouldRenderDrawer: isMounted,\n onCloseAnimationEnd,\n openDetails,\n closeDetails,\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DetailItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DetailItemProps {\n label: string;\n value: React.ReactNode;\n}\n\nconst DetailItemContainer = styled(Flex)`\n flex: 0 0 calc(50% - ${({ theme }) => theme.spaces[2]});\n`;\n\nconst DetailItem = ({ label, value }: DetailItemProps) => (\n <DetailItemContainer\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n gap={1}\n >\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n fontWeight=\"semiBold\"\n textTransform=\"uppercase\"\n >\n {label}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n {value ?? '-'}\n </Typography>\n </DetailItemContainer>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DetailField\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledWarning = styled(WarningCircle)`\n width: 1.6rem;\n height: 1.6rem;\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\ninterface DetailFieldProps {\n name: string;\n label: string;\n required?: boolean;\n}\n\nconst DetailField = ({ name, label, required }: DetailFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<string>(name);\n const isSubmitting = useForm('DetailField', (state) => state.isSubmitting);\n const value = field.value ?? '';\n const emptyTooltipLabel = formatMessage(\n {\n id: getTranslationKey('asset-details.field.empty'),\n defaultMessage: '{label} is currently empty.',\n },\n { label }\n );\n\n return (\n <Field.Root name={name} required={required}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n value={value}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n field.onChange(name, event.target.value)\n }\n endAction={\n !value ? (\n <Tooltip label={emptyTooltipLabel}>\n <StyledWarning aria-label={emptyTooltipLabel} role=\"img\" />\n </Tooltip>\n ) : undefined\n }\n type=\"text\"\n disabled={isSubmitting}\n />\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LocationField\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocationFieldProps {\n label: string;\n rootLabel: string;\n folders: Array<{ id: number; name: string }>;\n}\n\nconst LocationField = ({ label, rootLabel, folders }: LocationFieldProps) => {\n const field = useField<number | null>('folder');\n const isSubmitting = useForm('LocationField', (state) => state.isSubmitting);\n\n return (\n <Field.Root name=\"folder\" required>\n <Field.Label>{label}</Field.Label>\n {/* `null` is the canonical \"root of the Media Library\" value everywhere\n in the upload domain. The DS `SingleSelectOption.value` prop is typed\n `string | number`, so we use the empty string as a DOM-only sentinel\n for the root option and map it back to `null` on change. */}\n <SingleSelect\n value={field.value == null ? '' : String(field.value)}\n onChange={(value) => {\n const next = value === '' ? null : Number(value);\n field.onChange('folder', next);\n }}\n disabled={isSubmitting}\n >\n <SingleSelectOption value=\"\">{rootLabel}</SingleSelectOption>\n {folders.map((folder) => (\n <SingleSelectOption key={folder.id} value={String(folder.id)}>\n {folder.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetails\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetDetailsProps {\n asset: AssetWithPopulatedCreatedBy;\n}\n\ninterface AssetFormState {\n name: string;\n caption: string;\n alternativeText: string;\n folder: number | null;\n}\n\nexport const AssetDetails = ({ asset }: AssetDetailsProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { toggleNotification } = useNotification();\n const { data: folders = [] } = useGetAllFoldersQuery();\n const [updateAsset] = useUpdateAssetMutation();\n\n const isImage = asset.mime?.includes(AssetType.Image);\n\n const initialValues: AssetFormState = {\n name: asset.name ?? '',\n caption: asset.caption ?? '',\n alternativeText: asset.alternativeText ?? '',\n folder:\n typeof asset.folder === 'object' && asset.folder !== null\n ? ((asset.folder as { id: number }).id ?? null)\n : ((asset.folder as number | null | undefined) ?? null),\n };\n\n const handleSubmit = async (values: AssetFormState) => {\n const res = await updateAsset({\n id: asset.id,\n fileInfo: {\n name: values.name,\n caption: values.caption,\n alternativeText: values.alternativeText,\n folder: values.folder,\n },\n });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTranslationKey('asset-details.update.error'),\n defaultMessage: 'Failed to update the file.',\n }),\n });\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTranslationKey('asset-details.update.success'),\n defaultMessage: 'File updated',\n }),\n });\n };\n\n return (\n // `key={asset.id}` resets the form when the drawer switches to a different\n // asset so cached values from the previous asset don't bleed in.\n <Form key={asset.id} method=\"POST\" initialValues={initialValues} onSubmit={handleSubmit}>\n {({ modified, isSubmitting, values, resetForm }) => {\n const nameIsEmpty = ((values as AssetFormState).name ?? '').trim() === '';\n return (\n <>\n {/* Guards every close path (X button, ESC, route change, browser\n back) by intercepting the navigation when the form is dirty.\n `onProceed` resets the form so the held navigation can complete.\n Lives inside <Form> so it can read the form context. */}\n <Blocker onProceed={resetForm} />\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n >\n <Typography variant=\"beta\" fontWeight=\"semiBold\" tag=\"h3\">\n {formatMessage({\n id: getTranslationKey('asset-details.fileInfo'),\n defaultMessage: 'File info',\n })}\n </Typography>\n <Flex\n wrap=\"wrap\"\n gap={4}\n background=\"neutral100\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={6}\n alignItems=\"flex-start\"\n >\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.creationDate'),\n defaultMessage: 'Creation date',\n })}\n value={\n asset.createdAt\n ? formatDate(new Date(asset.createdAt), {\n dateStyle: 'long',\n timeStyle: 'short',\n })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.lastUpdated'),\n defaultMessage: 'Last updated',\n })}\n value={\n asset.updatedAt\n ? formatDate(new Date(asset.updatedAt), {\n dateStyle: 'long',\n timeStyle: 'short',\n })\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.createdBy'),\n defaultMessage: 'Created by',\n })}\n value={\n asset.createdBy\n ? (getDisplayName({\n firstname: asset.createdBy.firstname ?? undefined,\n lastname: asset.createdBy.lastname ?? undefined,\n username: asset.createdBy.username ?? undefined,\n email: asset.createdBy.email ?? undefined,\n }) ?? '-')\n : null\n }\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.size'),\n defaultMessage: 'Size',\n })}\n value={asset.size ? formatBytes(asset.size, 1) : null}\n />\n {isImage && (asset.width != null || asset.height != null) && (\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.dimensions'),\n defaultMessage: 'Dimensions',\n })}\n value={\n asset.width != null && asset.height != null\n ? `${asset.width} × ${asset.height}`\n : null\n }\n />\n )}\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.extension'),\n defaultMessage: 'Extension',\n })}\n value={getFileExtension(asset.ext)}\n />\n <DetailItem\n label={formatMessage({\n id: getTranslationKey('asset-details.assetId'),\n defaultMessage: 'Asset ID',\n })}\n value={String(asset.id)}\n />\n </Flex>\n <DetailField\n name=\"name\"\n label={formatMessage({\n id: getTranslationKey('asset-details.fileName'),\n defaultMessage: 'File name',\n })}\n required\n />\n <LocationField\n label={formatMessage({\n id: getTranslationKey('asset-details.location'),\n defaultMessage: 'Location',\n })}\n rootLabel={formatMessage({\n id: getTranslationKey('plugin.home'),\n defaultMessage: 'Home',\n })}\n folders={folders}\n />\n {isImage && (\n <>\n <DetailField\n name=\"caption\"\n label={formatMessage({\n id: getTranslationKey('asset-details.caption'),\n defaultMessage: 'Caption',\n })}\n />\n <DetailField\n name=\"alternativeText\"\n label={formatMessage({\n id: getTranslationKey('asset-details.alternativeText'),\n defaultMessage: 'Alternative text',\n })}\n />\n </>\n )}\n\n <Flex justifyContent=\"flex-end\" gap={2} paddingTop={2}>\n <Button\n type=\"submit\"\n variant=\"default\"\n loading={isSubmitting}\n // File name is required; block submit when it's empty or whitespace so the API can't 400 on a blank value.\n disabled={!modified || isSubmitting || nameIsEmpty}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.save'),\n defaultMessage: 'Save changes',\n })}\n </Button>\n </Flex>\n </Flex>\n </>\n );\n }}\n </Form>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerHeader\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerHeaderProps {\n asset: AssetWithPopulatedCreatedBy;\n closeDetails: () => void;\n}\n\nconst DrawerHeader = ({ asset, closeDetails }: DrawerHeaderProps) => {\n const DocIcon = asset ? getAssetIcon(asset.mime, asset.ext) : FileError;\n return (\n <Flex gap={2} paddingLeft={5} paddingTop={3} paddingBottom={3} paddingRight={3}>\n <DocIcon width={20} height={20} />\n <Drawer.Title asChild>\n <Typography variant=\"omega\" fontWeight=\"semiBold\" overflow=\"hidden\" ellipsis tag=\"h2\">\n {asset.name}\n </Typography>\n </Drawer.Title>\n <Box marginLeft=\"auto\">\n <Drawer.CloseButton onClose={closeDetails}>\n <ArrowLineRight />\n </Drawer.CloseButton>\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DrawerContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DrawerContentProps {\n assetId: number;\n closeDetails: () => void;\n}\n\nconst DrawerContent = ({ assetId, closeDetails }: DrawerContentProps) => {\n const { formatMessage } = useIntl();\n const {\n data: asset,\n isLoading,\n error,\n } = useGetAssetQuery(assetId, {\n refetchOnMountOrArgChange: false,\n refetchOnReconnect: false,\n refetchOnFocus: false,\n });\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error || !asset) {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} padding={4}>\n <Alert\n variant=\"danger\"\n closeLabel={formatMessage({ id: 'global.close', defaultMessage: 'Close' })}\n onClose={closeDetails}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.error'),\n defaultMessage: 'Failed to load file details.',\n })}\n </Alert>\n </Flex>\n );\n }\n\n return (\n <>\n <DrawerHeader asset={asset} closeDetails={closeDetails} />\n <Drawer.ScrollableContent>\n <AssetPreview asset={asset} />\n <AssetDetails asset={asset} />\n </Drawer.ScrollableContent>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetDetailsDrawer\n * -----------------------------------------------------------------------------------------------*/\n\nexport const AssetDetailsDrawer = () => {\n const { formatMessage } = useIntl();\n const { assetId, isVisible, shouldRenderDrawer, onCloseAnimationEnd, closeDetails } =\n useAssetDetailsParam();\n\n if (!shouldRenderDrawer || assetId === null) {\n return null;\n }\n\n return (\n <Drawer.Root isVisible={isVisible} onClose={closeDetails}>\n {/* Wrapper div required: Dialog.Portal uses asChild and merges ref onto each child.\n VisuallyHidden does not forward refs, so we wrap it in a div that can receive the ref. */}\n <div>\n <VisuallyHidden>\n <Drawer.Title>\n {formatMessage({\n id: getTranslationKey('asset-details.title'),\n defaultMessage: 'File details',\n })}\n </Drawer.Title>\n <Drawer.Description>\n {formatMessage({\n id: getTranslationKey('asset-details.description'),\n defaultMessage: 'Displays file information and metadata',\n })}\n </Drawer.Description>\n </VisuallyHidden>\n </div>\n <Drawer.Body\n animationDirection=\"left\"\n width=\"41.6rem\"\n height=\"100vh\"\n onAnimationEnd={onCloseAnimationEnd}\n >\n <DrawerContent assetId={assetId} closeDetails={closeDetails} />\n </Drawer.Body>\n </Drawer.Root>\n );\n};\n"],"names":["URL_PARAM","useAssetDetailsParam","query","setQuery","useQueryParams","detailsId","assetId","parseInt","hasValidId","Number","isNaN","isMounted","setIsMounted","React","useState","displayAssetId","useRef","useEffect","current","onCloseAnimationEnd","useCallback","event","target","currentTarget","openDetails","id","String","closeDetails","undefined","isVisible","shouldRenderDrawer","DetailItemContainer","styled","Flex","theme","spaces","DetailItem","label","value","_jsxs","direction","justifyContent","alignItems","gap","_jsx","Typography","variant","textColor","fontWeight","textTransform","StyledWarning","WarningCircle","colors","warning500","DetailField","name","required","formatMessage","useIntl","field","useField","isSubmitting","useForm","state","emptyTooltipLabel","getTranslationKey","defaultMessage","Field","Root","Label","TextInput","onChange","endAction","Tooltip","aria-label","role","type","disabled","LocationField","rootLabel","folders","SingleSelect","next","SingleSelectOption","map","folder","AssetDetails","asset","formatDate","toggleNotification","useNotification","data","useGetAllFoldersQuery","updateAsset","useUpdateAssetMutation","isImage","mime","includes","AssetType","Image","initialValues","caption","alternativeText","handleSubmit","values","res","fileInfo","message","Form","method","onSubmit","modified","resetForm","nameIsEmpty","trim","_Fragment","Blocker","onProceed","paddingTop","paddingBottom","paddingLeft","paddingRight","tag","wrap","background","createdAt","Date","dateStyle","timeStyle","updatedAt","createdBy","getDisplayName","firstname","lastname","username","email","size","formatBytes","width","height","getFileExtension","ext","Button","loading","DrawerHeader","DocIcon","getAssetIcon","FileError","Drawer","Title","asChild","overflow","ellipsis","Box","marginLeft","CloseButton","onClose","ArrowLineRight","DrawerContent","isLoading","error","useGetAssetQuery","refetchOnMountOrArgChange","refetchOnReconnect","refetchOnFocus","padding","Loader","Alert","closeLabel","ScrollableContent","AssetPreview","AssetDetailsDrawer","div","VisuallyHidden","Description","Body","animationDirection","onAnimationEnd"],"mappings":"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"}
@@ -69,11 +69,42 @@ const assetsApi = api.uploadApi.injectEndpoints({
69
69
  id
70
70
  }
71
71
  ]
72
+ }),
73
+ /**
74
+ * Update the editable metadata of an existing asset.
75
+ * Hits the legacy `POST /upload?id=<id>` endpoint which dispatches to
76
+ * `admin-upload.updateFileInfo`.
77
+ */ updateAsset: builder.mutation({
78
+ query: ({ id, fileInfo })=>{
79
+ const formData = new FormData();
80
+ formData.append('fileInfo', JSON.stringify(fileInfo));
81
+ return {
82
+ url: '/upload',
83
+ method: 'POST',
84
+ data: formData,
85
+ config: {
86
+ params: {
87
+ id
88
+ }
89
+ }
90
+ };
91
+ },
92
+ invalidatesTags: (_result, _error, { id })=>[
93
+ {
94
+ type: 'Asset',
95
+ id
96
+ },
97
+ {
98
+ type: 'Asset',
99
+ id: 'LIST'
100
+ }
101
+ ]
72
102
  })
73
103
  })
74
104
  });
75
- const { useGetAssetsQuery, useGetAssetQuery } = assetsApi;
105
+ const { useGetAssetsQuery, useGetAssetQuery, useUpdateAssetMutation } = assetsApi;
76
106
 
77
107
  exports.useGetAssetQuery = useGetAssetQuery;
78
108
  exports.useGetAssetsQuery = useGetAssetsQuery;
109
+ exports.useUpdateAssetMutation = useUpdateAssetMutation;
79
110
  //# sourceMappingURL=assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sources":["../../../../admin/src/future/services/assets.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n GetFiles,\n File,\n Pagination,\n AssetWithPopulatedCreatedBy,\n} from '../../../../shared/contracts/files';\n\ninterface GetAssetsParams {\n page?: number;\n pageSize?: number;\n folder?: number | null;\n sort?: string;\n}\n\ninterface GetAssetsResponse {\n results: File[];\n pagination: Pagination;\n}\n\nconst assetsApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getAssets: builder.query<GetAssetsResponse, GetAssetsParams | void>({\n query: (params = {}) => {\n const { folder, ...rest } = params as GetAssetsParams;\n\n const queryParams: Record<string, unknown> = { ...rest };\n\n if (folder != null) {\n queryParams['filters'] = {\n $and: [{ folder: { id: folder } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ folder: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/files',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFiles.Response['data']) => response,\n providesTags: (result) =>\n result\n ? [\n ...result.results.map(({ id }) => ({ type: 'Asset' as const, id })),\n { type: 'Asset', id: 'LIST' },\n ]\n : [{ type: 'Asset', id: 'LIST' }],\n }),\n getAsset: builder.query<AssetWithPopulatedCreatedBy, number>({\n query: (id) => ({\n url: `/upload/files/${id}`,\n method: 'GET',\n }),\n providesTags: (_result, _error, id) => [{ type: 'Asset' as const, id }],\n }),\n }),\n});\n\nexport const { useGetAssetsQuery, useGetAssetQuery } = assetsApi;\n"],"names":["assetsApi","uploadApi","injectEndpoints","endpoints","builder","getAssets","query","params","folder","rest","queryParams","$and","id","$null","url","method","config","transformResponse","response","providesTags","result","results","map","type","getAsset","_result","_error","useGetAssetsQuery","useGetAssetQuery"],"mappings":";;;;AAqBA,MAAMA,SAAAA,GAAYC,aAAAA,CAAUC,eAAe,CAAC;IAC1CC,SAAAA,EAAW,CAACC,WAAa;YACvBC,SAAAA,EAAWD,OAAAA,CAAQE,KAAK,CAA4C;gBAClEA,KAAAA,EAAO,CAACC,MAAAA,GAAS,EAAE,GAAA;AACjB,oBAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,MAAM,GAAGF,MAAAA;AAE5B,oBAAA,MAAMG,WAAAA,GAAuC;AAAE,wBAAA,GAAGD;AAAK,qBAAA;AAEvD,oBAAA,IAAID,UAAU,IAAA,EAAM;wBAClBE,WAAW,CAAC,UAAU,GAAG;4BACvBC,IAAAA,EAAM;AAAC,gCAAA;oCAAEH,MAAAA,EAAQ;wCAAEI,EAAAA,EAAIJ;AAAO;AAAE;AAAE;AACpC,yBAAA;oBACF,CAAA,MAAO;wBACLE,WAAW,CAAC,UAAU,GAAG;4BACvBC,IAAAA,EAAM;AAAC,gCAAA;oCAAEH,MAAAA,EAAQ;wCAAEI,EAAAA,EAAI;4CAAEC,KAAAA,EAAO;AAAK;AAAE;AAAE;AAAE;AAC7C,yBAAA;AACF,oBAAA;oBAEA,OAAO;wBACLC,GAAAA,EAAK,eAAA;wBACLC,MAAAA,EAAQ,KAAA;wBACRC,MAAAA,EAAQ;4BAAET,MAAAA,EAAQG;AAAY;AAChC,qBAAA;AACF,gBAAA,CAAA;AACAO,gBAAAA,iBAAAA,EAAmB,CAACC,QAAAA,GAAwCA,QAAAA;gBAC5DC,YAAAA,EAAc,CAACC,SACbA,MAAAA,GACI;2BACKA,MAAAA,CAAOC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEV,EAAE,EAAE,IAAM;gCAAEW,IAAAA,EAAM,OAAA;AAAkBX,gCAAAA;6BAAG,CAAA,CAAA;AAChE,wBAAA;4BAAEW,IAAAA,EAAM,OAAA;4BAASX,EAAAA,EAAI;AAAO;qBAC7B,GACD;AAAC,wBAAA;4BAAEW,IAAAA,EAAM,OAAA;4BAASX,EAAAA,EAAI;AAAO;AAAE;AACvC,aAAA,CAAA;YACAY,QAAAA,EAAUpB,OAAAA,CAAQE,KAAK,CAAsC;gBAC3DA,KAAAA,EAAO,CAACM,MAAQ;wBACdE,GAAAA,EAAK,CAAC,cAAc,EAAEF,EAAAA,CAAAA,CAAI;wBAC1BG,MAAAA,EAAQ;qBACV,CAAA;gBACAI,YAAAA,EAAc,CAACM,OAAAA,EAASC,MAAAA,EAAQd,EAAAA,GAAO;AAAC,wBAAA;4BAAEW,IAAAA,EAAM,OAAA;AAAkBX,4BAAAA;AAAG;AAAE;AACzE,aAAA;SACF;AACF,CAAA,CAAA;MAEa,EAAEe,iBAAiB,EAAEC,gBAAgB,EAAE,GAAG5B;;;;;"}
1
+ {"version":3,"file":"assets.js","sources":["../../../../admin/src/future/services/assets.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n GetFiles,\n File,\n Pagination,\n UploadFileInfo,\n AssetWithPopulatedCreatedBy,\n} from '../../../../shared/contracts/files';\n\ninterface GetAssetsParams {\n page?: number;\n pageSize?: number;\n folder?: number | null;\n sort?: string;\n}\n\ninterface GetAssetsResponse {\n results: File[];\n pagination: Pagination;\n}\n\ninterface UpdateAssetArgs {\n id: number;\n fileInfo: Partial<UploadFileInfo>;\n}\n\nconst assetsApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getAssets: builder.query<GetAssetsResponse, GetAssetsParams | void>({\n query: (params = {}) => {\n const { folder, ...rest } = params as GetAssetsParams;\n\n const queryParams: Record<string, unknown> = { ...rest };\n\n if (folder != null) {\n queryParams['filters'] = {\n $and: [{ folder: { id: folder } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ folder: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/files',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFiles.Response['data']) => response,\n providesTags: (result) =>\n result\n ? [\n ...result.results.map(({ id }) => ({ type: 'Asset' as const, id })),\n { type: 'Asset', id: 'LIST' },\n ]\n : [{ type: 'Asset', id: 'LIST' }],\n }),\n getAsset: builder.query<AssetWithPopulatedCreatedBy, number>({\n query: (id) => ({\n url: `/upload/files/${id}`,\n method: 'GET',\n }),\n providesTags: (_result, _error, id) => [{ type: 'Asset' as const, id }],\n }),\n /**\n * Update the editable metadata of an existing asset.\n * Hits the legacy `POST /upload?id=<id>` endpoint which dispatches to\n * `admin-upload.updateFileInfo`.\n */\n updateAsset: builder.mutation<AssetWithPopulatedCreatedBy, UpdateAssetArgs>({\n query: ({ id, fileInfo }) => {\n const formData = new FormData();\n formData.append('fileInfo', JSON.stringify(fileInfo));\n\n return {\n url: '/upload',\n method: 'POST',\n data: formData,\n config: { params: { id } },\n };\n },\n invalidatesTags: (_result, _error, { id }) => [\n { type: 'Asset' as const, id },\n { type: 'Asset' as const, id: 'LIST' },\n ],\n }),\n }),\n});\n\nexport const { useGetAssetsQuery, useGetAssetQuery, useUpdateAssetMutation } = assetsApi;\n"],"names":["assetsApi","uploadApi","injectEndpoints","endpoints","builder","getAssets","query","params","folder","rest","queryParams","$and","id","$null","url","method","config","transformResponse","response","providesTags","result","results","map","type","getAsset","_result","_error","updateAsset","mutation","fileInfo","formData","FormData","append","JSON","stringify","data","invalidatesTags","useGetAssetsQuery","useGetAssetQuery","useUpdateAssetMutation"],"mappings":"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"}
@@ -67,10 +67,40 @@ const assetsApi = uploadApi.injectEndpoints({
67
67
  id
68
68
  }
69
69
  ]
70
+ }),
71
+ /**
72
+ * Update the editable metadata of an existing asset.
73
+ * Hits the legacy `POST /upload?id=<id>` endpoint which dispatches to
74
+ * `admin-upload.updateFileInfo`.
75
+ */ updateAsset: builder.mutation({
76
+ query: ({ id, fileInfo })=>{
77
+ const formData = new FormData();
78
+ formData.append('fileInfo', JSON.stringify(fileInfo));
79
+ return {
80
+ url: '/upload',
81
+ method: 'POST',
82
+ data: formData,
83
+ config: {
84
+ params: {
85
+ id
86
+ }
87
+ }
88
+ };
89
+ },
90
+ invalidatesTags: (_result, _error, { id })=>[
91
+ {
92
+ type: 'Asset',
93
+ id
94
+ },
95
+ {
96
+ type: 'Asset',
97
+ id: 'LIST'
98
+ }
99
+ ]
70
100
  })
71
101
  })
72
102
  });
73
- const { useGetAssetsQuery, useGetAssetQuery } = assetsApi;
103
+ const { useGetAssetsQuery, useGetAssetQuery, useUpdateAssetMutation } = assetsApi;
74
104
 
75
- export { useGetAssetQuery, useGetAssetsQuery };
105
+ export { useGetAssetQuery, useGetAssetsQuery, useUpdateAssetMutation };
76
106
  //# sourceMappingURL=assets.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.mjs","sources":["../../../../admin/src/future/services/assets.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n GetFiles,\n File,\n Pagination,\n AssetWithPopulatedCreatedBy,\n} from '../../../../shared/contracts/files';\n\ninterface GetAssetsParams {\n page?: number;\n pageSize?: number;\n folder?: number | null;\n sort?: string;\n}\n\ninterface GetAssetsResponse {\n results: File[];\n pagination: Pagination;\n}\n\nconst assetsApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getAssets: builder.query<GetAssetsResponse, GetAssetsParams | void>({\n query: (params = {}) => {\n const { folder, ...rest } = params as GetAssetsParams;\n\n const queryParams: Record<string, unknown> = { ...rest };\n\n if (folder != null) {\n queryParams['filters'] = {\n $and: [{ folder: { id: folder } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ folder: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/files',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFiles.Response['data']) => response,\n providesTags: (result) =>\n result\n ? [\n ...result.results.map(({ id }) => ({ type: 'Asset' as const, id })),\n { type: 'Asset', id: 'LIST' },\n ]\n : [{ type: 'Asset', id: 'LIST' }],\n }),\n getAsset: builder.query<AssetWithPopulatedCreatedBy, number>({\n query: (id) => ({\n url: `/upload/files/${id}`,\n method: 'GET',\n }),\n providesTags: (_result, _error, id) => [{ type: 'Asset' as const, id }],\n }),\n }),\n});\n\nexport const { useGetAssetsQuery, useGetAssetQuery } = assetsApi;\n"],"names":["assetsApi","uploadApi","injectEndpoints","endpoints","builder","getAssets","query","params","folder","rest","queryParams","$and","id","$null","url","method","config","transformResponse","response","providesTags","result","results","map","type","getAsset","_result","_error","useGetAssetsQuery","useGetAssetQuery"],"mappings":";;AAqBA,MAAMA,SAAAA,GAAYC,SAAAA,CAAUC,eAAe,CAAC;IAC1CC,SAAAA,EAAW,CAACC,WAAa;YACvBC,SAAAA,EAAWD,OAAAA,CAAQE,KAAK,CAA4C;gBAClEA,KAAAA,EAAO,CAACC,MAAAA,GAAS,EAAE,GAAA;AACjB,oBAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,MAAM,GAAGF,MAAAA;AAE5B,oBAAA,MAAMG,WAAAA,GAAuC;AAAE,wBAAA,GAAGD;AAAK,qBAAA;AAEvD,oBAAA,IAAID,UAAU,IAAA,EAAM;wBAClBE,WAAW,CAAC,UAAU,GAAG;4BACvBC,IAAAA,EAAM;AAAC,gCAAA;oCAAEH,MAAAA,EAAQ;wCAAEI,EAAAA,EAAIJ;AAAO;AAAE;AAAE;AACpC,yBAAA;oBACF,CAAA,MAAO;wBACLE,WAAW,CAAC,UAAU,GAAG;4BACvBC,IAAAA,EAAM;AAAC,gCAAA;oCAAEH,MAAAA,EAAQ;wCAAEI,EAAAA,EAAI;4CAAEC,KAAAA,EAAO;AAAK;AAAE;AAAE;AAAE;AAC7C,yBAAA;AACF,oBAAA;oBAEA,OAAO;wBACLC,GAAAA,EAAK,eAAA;wBACLC,MAAAA,EAAQ,KAAA;wBACRC,MAAAA,EAAQ;4BAAET,MAAAA,EAAQG;AAAY;AAChC,qBAAA;AACF,gBAAA,CAAA;AACAO,gBAAAA,iBAAAA,EAAmB,CAACC,QAAAA,GAAwCA,QAAAA;gBAC5DC,YAAAA,EAAc,CAACC,SACbA,MAAAA,GACI;2BACKA,MAAAA,CAAOC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAEV,EAAE,EAAE,IAAM;gCAAEW,IAAAA,EAAM,OAAA;AAAkBX,gCAAAA;6BAAG,CAAA,CAAA;AAChE,wBAAA;4BAAEW,IAAAA,EAAM,OAAA;4BAASX,EAAAA,EAAI;AAAO;qBAC7B,GACD;AAAC,wBAAA;4BAAEW,IAAAA,EAAM,OAAA;4BAASX,EAAAA,EAAI;AAAO;AAAE;AACvC,aAAA,CAAA;YACAY,QAAAA,EAAUpB,OAAAA,CAAQE,KAAK,CAAsC;gBAC3DA,KAAAA,EAAO,CAACM,MAAQ;wBACdE,GAAAA,EAAK,CAAC,cAAc,EAAEF,EAAAA,CAAAA,CAAI;wBAC1BG,MAAAA,EAAQ;qBACV,CAAA;gBACAI,YAAAA,EAAc,CAACM,OAAAA,EAASC,MAAAA,EAAQd,EAAAA,GAAO;AAAC,wBAAA;4BAAEW,IAAAA,EAAM,OAAA;AAAkBX,4BAAAA;AAAG;AAAE;AACzE,aAAA;SACF;AACF,CAAA,CAAA;MAEa,EAAEe,iBAAiB,EAAEC,gBAAgB,EAAE,GAAG5B;;;;"}
1
+ {"version":3,"file":"assets.mjs","sources":["../../../../admin/src/future/services/assets.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n GetFiles,\n File,\n Pagination,\n UploadFileInfo,\n AssetWithPopulatedCreatedBy,\n} from '../../../../shared/contracts/files';\n\ninterface GetAssetsParams {\n page?: number;\n pageSize?: number;\n folder?: number | null;\n sort?: string;\n}\n\ninterface GetAssetsResponse {\n results: File[];\n pagination: Pagination;\n}\n\ninterface UpdateAssetArgs {\n id: number;\n fileInfo: Partial<UploadFileInfo>;\n}\n\nconst assetsApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getAssets: builder.query<GetAssetsResponse, GetAssetsParams | void>({\n query: (params = {}) => {\n const { folder, ...rest } = params as GetAssetsParams;\n\n const queryParams: Record<string, unknown> = { ...rest };\n\n if (folder != null) {\n queryParams['filters'] = {\n $and: [{ folder: { id: folder } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ folder: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/files',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFiles.Response['data']) => response,\n providesTags: (result) =>\n result\n ? [\n ...result.results.map(({ id }) => ({ type: 'Asset' as const, id })),\n { type: 'Asset', id: 'LIST' },\n ]\n : [{ type: 'Asset', id: 'LIST' }],\n }),\n getAsset: builder.query<AssetWithPopulatedCreatedBy, number>({\n query: (id) => ({\n url: `/upload/files/${id}`,\n method: 'GET',\n }),\n providesTags: (_result, _error, id) => [{ type: 'Asset' as const, id }],\n }),\n /**\n * Update the editable metadata of an existing asset.\n * Hits the legacy `POST /upload?id=<id>` endpoint which dispatches to\n * `admin-upload.updateFileInfo`.\n */\n updateAsset: builder.mutation<AssetWithPopulatedCreatedBy, UpdateAssetArgs>({\n query: ({ id, fileInfo }) => {\n const formData = new FormData();\n formData.append('fileInfo', JSON.stringify(fileInfo));\n\n return {\n url: '/upload',\n method: 'POST',\n data: formData,\n config: { params: { id } },\n };\n },\n invalidatesTags: (_result, _error, { id }) => [\n { type: 'Asset' as const, id },\n { type: 'Asset' as const, id: 'LIST' },\n ],\n }),\n }),\n});\n\nexport const { useGetAssetsQuery, useGetAssetQuery, useUpdateAssetMutation } = assetsApi;\n"],"names":["assetsApi","uploadApi","injectEndpoints","endpoints","builder","getAssets","query","params","folder","rest","queryParams","$and","id","$null","url","method","config","transformResponse","response","providesTags","result","results","map","type","getAsset","_result","_error","updateAsset","mutation","fileInfo","formData","FormData","append","JSON","stringify","data","invalidatesTags","useGetAssetsQuery","useGetAssetQuery","useUpdateAssetMutation"],"mappings":"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"}
@@ -76,6 +76,37 @@ const foldersApi = api.uploadApi.injectEndpoints({
76
76
  }
77
77
  ]
78
78
  }),
79
+ /**
80
+ * Flat list of every folder, used to populate the "Location" select in the
81
+ * asset details drawer. No parent filter — we want the entire tree in one
82
+ * query so the select can render any destination folder.
83
+ */ getAllFolders: builder.query({
84
+ query: ()=>({
85
+ url: '/upload/folders',
86
+ method: 'GET'
87
+ }),
88
+ transformResponse: (response)=>response?.data ?? response ?? [],
89
+ providesTags: (results)=>{
90
+ if (results) {
91
+ return [
92
+ ...results.map(({ id })=>({
93
+ type: 'Folder',
94
+ id
95
+ })),
96
+ {
97
+ type: 'Folder',
98
+ id: 'LIST'
99
+ }
100
+ ];
101
+ }
102
+ return [
103
+ {
104
+ type: 'Folder',
105
+ id: 'LIST'
106
+ }
107
+ ];
108
+ }
109
+ }),
79
110
  getFolder: builder.query({
80
111
  query: ({ id })=>({
81
112
  url: `/upload/folders/${id}`,
@@ -108,9 +139,10 @@ const foldersApi = api.uploadApi.injectEndpoints({
108
139
  })
109
140
  })
110
141
  });
111
- const { useCreateFolderMutation, useGetFoldersQuery, useGetFolderQuery } = foldersApi;
142
+ const { useCreateFolderMutation, useGetFoldersQuery, useGetFolderQuery, useGetAllFoldersQuery } = foldersApi;
112
143
 
113
144
  exports.useCreateFolderMutation = useCreateFolderMutation;
145
+ exports.useGetAllFoldersQuery = useGetAllFoldersQuery;
114
146
  exports.useGetFolderQuery = useGetFolderQuery;
115
147
  exports.useGetFoldersQuery = useGetFoldersQuery;
116
148
  //# sourceMappingURL=folders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"folders.js","sources":["../../../../admin/src/future/services/folders.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n Folder,\n CreateFolders,\n GetFolder,\n GetFolders,\n} from '../../../../shared/contracts/folders';\n\nexport type FolderWithCounts = Omit<Folder, 'children' | 'files'> & {\n children?: { count: number };\n files?: { count: number };\n};\n\ninterface GetFoldersParams {\n parentId?: number | null;\n}\n\nconst foldersApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getFolders: builder.query<Folder[], GetFoldersParams | void>({\n query: (params = {}) => {\n const { parentId } = params as GetFoldersParams;\n\n const queryParams: Record<string, unknown> = {};\n\n if (parentId != null) {\n queryParams['filters'] = {\n $and: [{ parent: { id: parentId } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ parent: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/folders',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFolders.Response['data']) =>\n // TODO dont want this cast\n (response as any).data,\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder', id: 'LIST' },\n ];\n }\n return [{ type: 'Folder', id: 'LIST' }];\n },\n }),\n createFolder: builder.mutation<CreateFolders.Response['data'], CreateFolders.Request['body']>({\n query: (body) => ({\n url: '/upload/folders',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: CreateFolders.Response) => response.data,\n invalidatesTags: [{ type: 'Folder', id: 'LIST' }],\n }),\n getFolder: builder.query<FolderWithCounts, { id: number }>({\n query: ({ id }) => ({\n url: `/upload/folders/${id}`,\n method: 'GET',\n config: {\n params: {\n populate: {\n parent: {\n populate: {\n parent: '*',\n },\n },\n children: { count: true },\n files: { count: true },\n },\n },\n },\n }),\n transformResponse: (response: GetFolder.Response) =>\n response.data as unknown as FolderWithCounts,\n providesTags: (_result, _error, { id }) => [{ type: 'Folder', id }],\n }),\n }),\n});\n\nexport const { useCreateFolderMutation, useGetFoldersQuery, useGetFolderQuery } = foldersApi;\n"],"names":["foldersApi","uploadApi","injectEndpoints","endpoints","builder","getFolders","query","params","parentId","queryParams","$and","parent","id","$null","url","method","config","transformResponse","response","data","providesTags","results","map","type","createFolder","mutation","body","invalidatesTags","getFolder","populate","children","count","files","_result","_error","useCreateFolderMutation","useGetFoldersQuery","useGetFolderQuery"],"mappings":"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"}
1
+ {"version":3,"file":"folders.js","sources":["../../../../admin/src/future/services/folders.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n Folder,\n CreateFolders,\n GetFolder,\n GetFolders,\n} from '../../../../shared/contracts/folders';\n\nexport type FolderWithCounts = Omit<Folder, 'children' | 'files'> & {\n children?: { count: number };\n files?: { count: number };\n};\n\ninterface GetFoldersParams {\n parentId?: number | null;\n}\n\nconst foldersApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getFolders: builder.query<Folder[], GetFoldersParams | void>({\n query: (params = {}) => {\n const { parentId } = params as GetFoldersParams;\n\n const queryParams: Record<string, unknown> = {};\n\n if (parentId != null) {\n queryParams['filters'] = {\n $and: [{ parent: { id: parentId } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ parent: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/folders',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFolders.Response['data']) =>\n // TODO dont want this cast\n (response as any).data,\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder', id: 'LIST' },\n ];\n }\n return [{ type: 'Folder', id: 'LIST' }];\n },\n }),\n createFolder: builder.mutation<CreateFolders.Response['data'], CreateFolders.Request['body']>({\n query: (body) => ({\n url: '/upload/folders',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: CreateFolders.Response) => response.data,\n invalidatesTags: [{ type: 'Folder', id: 'LIST' }],\n }),\n /**\n * Flat list of every folder, used to populate the \"Location\" select in the\n * asset details drawer. No parent filter — we want the entire tree in one\n * query so the select can render any destination folder.\n */\n getAllFolders: builder.query<Folder[], void>({\n query: () => ({\n url: '/upload/folders',\n method: 'GET',\n }),\n transformResponse: (response: GetFolders.Response['data']) =>\n ((response as any)?.data ?? response ?? []) as Folder[],\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder' as const, id: 'LIST' },\n ];\n }\n return [{ type: 'Folder' as const, id: 'LIST' }];\n },\n }),\n getFolder: builder.query<FolderWithCounts, { id: number }>({\n query: ({ id }) => ({\n url: `/upload/folders/${id}`,\n method: 'GET',\n config: {\n params: {\n populate: {\n parent: {\n populate: {\n parent: '*',\n },\n },\n children: { count: true },\n files: { count: true },\n },\n },\n },\n }),\n transformResponse: (response: GetFolder.Response) =>\n response.data as unknown as FolderWithCounts,\n providesTags: (_result, _error, { id }) => [{ type: 'Folder', id }],\n }),\n }),\n});\n\nexport const {\n useCreateFolderMutation,\n useGetFoldersQuery,\n useGetFolderQuery,\n useGetAllFoldersQuery,\n} = foldersApi;\n"],"names":["foldersApi","uploadApi","injectEndpoints","endpoints","builder","getFolders","query","params","parentId","queryParams","$and","parent","id","$null","url","method","config","transformResponse","response","data","providesTags","results","map","type","createFolder","mutation","body","invalidatesTags","getAllFolders","getFolder","populate","children","count","files","_result","_error","useCreateFolderMutation","useGetFoldersQuery","useGetFolderQuery","useGetAllFoldersQuery"],"mappings":"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"}
@@ -74,6 +74,37 @@ const foldersApi = uploadApi.injectEndpoints({
74
74
  }
75
75
  ]
76
76
  }),
77
+ /**
78
+ * Flat list of every folder, used to populate the "Location" select in the
79
+ * asset details drawer. No parent filter — we want the entire tree in one
80
+ * query so the select can render any destination folder.
81
+ */ getAllFolders: builder.query({
82
+ query: ()=>({
83
+ url: '/upload/folders',
84
+ method: 'GET'
85
+ }),
86
+ transformResponse: (response)=>response?.data ?? response ?? [],
87
+ providesTags: (results)=>{
88
+ if (results) {
89
+ return [
90
+ ...results.map(({ id })=>({
91
+ type: 'Folder',
92
+ id
93
+ })),
94
+ {
95
+ type: 'Folder',
96
+ id: 'LIST'
97
+ }
98
+ ];
99
+ }
100
+ return [
101
+ {
102
+ type: 'Folder',
103
+ id: 'LIST'
104
+ }
105
+ ];
106
+ }
107
+ }),
77
108
  getFolder: builder.query({
78
109
  query: ({ id })=>({
79
110
  url: `/upload/folders/${id}`,
@@ -106,7 +137,7 @@ const foldersApi = uploadApi.injectEndpoints({
106
137
  })
107
138
  })
108
139
  });
109
- const { useCreateFolderMutation, useGetFoldersQuery, useGetFolderQuery } = foldersApi;
140
+ const { useCreateFolderMutation, useGetFoldersQuery, useGetFolderQuery, useGetAllFoldersQuery } = foldersApi;
110
141
 
111
- export { useCreateFolderMutation, useGetFolderQuery, useGetFoldersQuery };
142
+ export { useCreateFolderMutation, useGetAllFoldersQuery, useGetFolderQuery, useGetFoldersQuery };
112
143
  //# sourceMappingURL=folders.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"folders.mjs","sources":["../../../../admin/src/future/services/folders.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n Folder,\n CreateFolders,\n GetFolder,\n GetFolders,\n} from '../../../../shared/contracts/folders';\n\nexport type FolderWithCounts = Omit<Folder, 'children' | 'files'> & {\n children?: { count: number };\n files?: { count: number };\n};\n\ninterface GetFoldersParams {\n parentId?: number | null;\n}\n\nconst foldersApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getFolders: builder.query<Folder[], GetFoldersParams | void>({\n query: (params = {}) => {\n const { parentId } = params as GetFoldersParams;\n\n const queryParams: Record<string, unknown> = {};\n\n if (parentId != null) {\n queryParams['filters'] = {\n $and: [{ parent: { id: parentId } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ parent: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/folders',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFolders.Response['data']) =>\n // TODO dont want this cast\n (response as any).data,\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder', id: 'LIST' },\n ];\n }\n return [{ type: 'Folder', id: 'LIST' }];\n },\n }),\n createFolder: builder.mutation<CreateFolders.Response['data'], CreateFolders.Request['body']>({\n query: (body) => ({\n url: '/upload/folders',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: CreateFolders.Response) => response.data,\n invalidatesTags: [{ type: 'Folder', id: 'LIST' }],\n }),\n getFolder: builder.query<FolderWithCounts, { id: number }>({\n query: ({ id }) => ({\n url: `/upload/folders/${id}`,\n method: 'GET',\n config: {\n params: {\n populate: {\n parent: {\n populate: {\n parent: '*',\n },\n },\n children: { count: true },\n files: { count: true },\n },\n },\n },\n }),\n transformResponse: (response: GetFolder.Response) =>\n response.data as unknown as FolderWithCounts,\n providesTags: (_result, _error, { id }) => [{ type: 'Folder', id }],\n }),\n }),\n});\n\nexport const { useCreateFolderMutation, useGetFoldersQuery, useGetFolderQuery } = foldersApi;\n"],"names":["foldersApi","uploadApi","injectEndpoints","endpoints","builder","getFolders","query","params","parentId","queryParams","$and","parent","id","$null","url","method","config","transformResponse","response","data","providesTags","results","map","type","createFolder","mutation","body","invalidatesTags","getFolder","populate","children","count","files","_result","_error","useCreateFolderMutation","useGetFoldersQuery","useGetFolderQuery"],"mappings":"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"}
1
+ {"version":3,"file":"folders.mjs","sources":["../../../../admin/src/future/services/folders.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type {\n Folder,\n CreateFolders,\n GetFolder,\n GetFolders,\n} from '../../../../shared/contracts/folders';\n\nexport type FolderWithCounts = Omit<Folder, 'children' | 'files'> & {\n children?: { count: number };\n files?: { count: number };\n};\n\ninterface GetFoldersParams {\n parentId?: number | null;\n}\n\nconst foldersApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getFolders: builder.query<Folder[], GetFoldersParams | void>({\n query: (params = {}) => {\n const { parentId } = params as GetFoldersParams;\n\n const queryParams: Record<string, unknown> = {};\n\n if (parentId != null) {\n queryParams['filters'] = {\n $and: [{ parent: { id: parentId } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ parent: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/folders',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFolders.Response['data']) =>\n // TODO dont want this cast\n (response as any).data,\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder', id: 'LIST' },\n ];\n }\n return [{ type: 'Folder', id: 'LIST' }];\n },\n }),\n createFolder: builder.mutation<CreateFolders.Response['data'], CreateFolders.Request['body']>({\n query: (body) => ({\n url: '/upload/folders',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: CreateFolders.Response) => response.data,\n invalidatesTags: [{ type: 'Folder', id: 'LIST' }],\n }),\n /**\n * Flat list of every folder, used to populate the \"Location\" select in the\n * asset details drawer. No parent filter — we want the entire tree in one\n * query so the select can render any destination folder.\n */\n getAllFolders: builder.query<Folder[], void>({\n query: () => ({\n url: '/upload/folders',\n method: 'GET',\n }),\n transformResponse: (response: GetFolders.Response['data']) =>\n ((response as any)?.data ?? response ?? []) as Folder[],\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder' as const, id: 'LIST' },\n ];\n }\n return [{ type: 'Folder' as const, id: 'LIST' }];\n },\n }),\n getFolder: builder.query<FolderWithCounts, { id: number }>({\n query: ({ id }) => ({\n url: `/upload/folders/${id}`,\n method: 'GET',\n config: {\n params: {\n populate: {\n parent: {\n populate: {\n parent: '*',\n },\n },\n children: { count: true },\n files: { count: true },\n },\n },\n },\n }),\n transformResponse: (response: GetFolder.Response) =>\n response.data as unknown as FolderWithCounts,\n providesTags: (_result, _error, { id }) => [{ type: 'Folder', id }],\n }),\n }),\n});\n\nexport const {\n useCreateFolderMutation,\n useGetFoldersQuery,\n useGetFolderQuery,\n useGetAllFoldersQuery,\n} = foldersApi;\n"],"names":["foldersApi","uploadApi","injectEndpoints","endpoints","builder","getFolders","query","params","parentId","queryParams","$and","parent","id","$null","url","method","config","transformResponse","response","data","providesTags","results","map","type","createFolder","mutation","body","invalidatesTags","getAllFolders","getFolder","populate","children","count","files","_result","_error","useCreateFolderMutation","useGetFoldersQuery","useGetFolderQuery","useGetAllFoldersQuery"],"mappings":"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"}
@@ -21,8 +21,8 @@ function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: nu
21
21
  function __variableDynamicImportRuntime3__(path) {
22
22
  switch (path) {
23
23
  case './translations/ca.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ca.json.js')); });
24
+ case './translations/da.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/da.json.js')); });
24
25
  case './translations/de.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/de.json.js')); });
25
- case './translations/dk.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/dk.json.js')); });
26
26
  case './translations/en.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en.json.js')); });
27
27
  case './translations/es.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/es.json.js')); });
28
28
  case './translations/fr.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/fr.json.js')); });
@@ -17,8 +17,8 @@ import './utils/urlYupSchema.mjs';
17
17
  function __variableDynamicImportRuntime3__(path) {
18
18
  switch (path) {
19
19
  case './translations/ca.json': return import('./translations/ca.json.mjs');
20
+ case './translations/da.json': return import('./translations/da.json.mjs');
20
21
  case './translations/de.json': return import('./translations/de.json.mjs');
21
- case './translations/dk.json': return import('./translations/dk.json.mjs');
22
22
  case './translations/en.json': return import('./translations/en.json.mjs');
23
23
  case './translations/es.json': return import('./translations/es.json.mjs');
24
24
  case './translations/fr.json': return import('./translations/fr.json.mjs');
@@ -1,8 +1,16 @@
1
+ import * as React from 'react';
2
+ import type { AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';
1
3
  export declare const useAssetDetailsParam: () => {
2
4
  assetId: number | null;
3
5
  isVisible: boolean;
4
6
  shouldRenderDrawer: boolean;
7
+ onCloseAnimationEnd: (event: React.AnimationEvent) => void;
5
8
  openDetails: (id: number) => void;
6
9
  closeDetails: () => void;
7
10
  };
11
+ interface AssetDetailsProps {
12
+ asset: AssetWithPopulatedCreatedBy;
13
+ }
14
+ export declare const AssetDetails: ({ asset }: AssetDetailsProps) => import("react/jsx-runtime").JSX.Element;
8
15
  export declare const AssetDetailsDrawer: () => import("react/jsx-runtime").JSX.Element | null;
16
+ export {};
@@ -1,4 +1,4 @@
1
- import type { File, Pagination, AssetWithPopulatedCreatedBy } from '../../../../shared/contracts/files';
1
+ import type { File, Pagination, UploadFileInfo, AssetWithPopulatedCreatedBy } from '../../../../shared/contracts/files';
2
2
  interface GetAssetsParams {
3
3
  page?: number;
4
4
  pageSize?: number;
@@ -9,5 +9,9 @@ interface GetAssetsResponse {
9
9
  results: File[];
10
10
  pagination: Pagination;
11
11
  }
12
- export declare const useGetAssetsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetAssetsParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", GetAssetsResponse, "adminApi">>, useGetAssetQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<number, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>;
12
+ interface UpdateAssetArgs {
13
+ id: number;
14
+ fileInfo: Partial<UploadFileInfo>;
15
+ }
16
+ export declare const useGetAssetsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetAssetsParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", GetAssetsResponse, "adminApi">>, useGetAssetQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<number, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>, useUpdateAssetMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UpdateAssetArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>;
13
17
  export {};
@@ -12,5 +12,5 @@ interface GetFoldersParams {
12
12
  }
13
13
  export declare const useCreateFolderMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Pick<Folder, "name" | "parent">, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", Folder, "adminApi">>, useGetFoldersQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetFoldersParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", Folder[], "adminApi">>, useGetFolderQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<{
14
14
  id: number;
15
- }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", FolderWithCounts, "adminApi">>;
15
+ }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", FolderWithCounts, "adminApi">>, useGetAllFoldersQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", Folder[], "adminApi">>;
16
16
  export {};
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var dk = {
3
+ var da = {
4
4
  "bulk.select.label": "Vælg alle medier",
5
5
  "button.next": "Næste",
6
6
  "checkControl.crop-duplicate": "Duplikér og beskær",
@@ -100,5 +100,5 @@ var dk = {
100
100
  "window.confirm.close-modal.files": "Er du sikker? Du har filer som ikke er blevet uploaded endnu."
101
101
  };
102
102
 
103
- module.exports = dk;
104
- //# sourceMappingURL=dk.json.js.map
103
+ module.exports = da;
104
+ //# sourceMappingURL=da.json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dk.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"da.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- var dk = {
1
+ var da = {
2
2
  "bulk.select.label": "Vælg alle medier",
3
3
  "button.next": "Næste",
4
4
  "checkControl.crop-duplicate": "Duplikér og beskær",
@@ -98,5 +98,5 @@ var dk = {
98
98
  "window.confirm.close-modal.files": "Er du sikker? Du har filer som ikke er blevet uploaded endnu."
99
99
  };
100
100
 
101
- export { dk as default };
102
- //# sourceMappingURL=dk.json.mjs.map
101
+ export { da as default };
102
+ //# sourceMappingURL=da.json.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dk.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"da.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}