{"version":3,"file":"useBulkMove.mjs","sources":["../../../admin/src/hooks/useBulkMove.ts"],"sourcesContent":["import { type FetchResponse, useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport { File, BulkMoveFiles } from '../../../shared/contracts/files';\nimport { Folder, BulkMoveFolders } from '../../../shared/contracts/folders';\nimport { pluginId } from '../pluginId';\nimport { getTrad } from '../utils';\n\nexport interface FolderWithType extends Folder {\n type: string;\n}\n\nexport interface FileWithType extends File {\n type: string;\n}\n\ninterface BulkMoveParams {\n destinationFolderId: number | string;\n filesAndFolders: Array;\n}\n\n// Define the shape of the accumulator object\ntype Payload = {\n fileIds?: number[];\n folderIds?: number[];\n};\n\nexport const useBulkMove = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { post } = useFetchClient();\n\n const bulkMoveQuery = ({ destinationFolderId, filesAndFolders }: BulkMoveParams) => {\n const payload = filesAndFolders.reduce((acc, selected) => {\n const { id, type } = selected;\n const key = type === 'asset' ? 'fileIds' : 'folderIds';\n\n if (!acc[key]) {\n acc[key] = [];\n }\n\n acc[key]!.push(id);\n\n return acc;\n }, {});\n\n return post(\n '/upload/actions/bulk-move',\n { ...payload, destinationFolderId }\n );\n };\n\n const mutation = useMutation<\n FetchResponse,\n BulkMoveFolders.Response['error'] | BulkMoveFiles.Response['error'],\n BulkMoveParams\n >(bulkMoveQuery, {\n onSuccess(res) {\n const {\n data: { data },\n } = res;\n\n if (data?.files?.length > 0) {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n }\n\n // folders need to be re-fetched in any case, because assets might have been\n // moved into a sub-folder and therefore the count needs to be updated\n queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('modal.move.success-label'),\n defaultMessage: 'Elements have been moved successfully.',\n }),\n });\n },\n });\n\n const move = (\n destinationFolderId: number | string,\n filesAndFolders: Array\n ) => mutation.mutateAsync({ destinationFolderId, filesAndFolders });\n\n return { ...mutation, move };\n};\n"],"names":["useBulkMove","formatMessage","useIntl","toggleNotification","useNotification","queryClient","useQueryClient","post","useFetchClient","bulkMoveQuery","destinationFolderId","filesAndFolders","payload","reduce","acc","selected","id","type","key","push","mutation","useMutation","onSuccess","res","data","files","length","refetchQueries","pluginId","active","message","getTrad","defaultMessage","move","mutateAsync"],"mappings":";;;;;;;;;;MA4BaA,WAAAA,GAAc,IAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAAA,GAAcC,cAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,gBAAgB,CAAC,EAAEC,mBAAmB,EAAEC,eAAe,EAAkB,GAAA;AAC7E,QAAA,MAAMC,OAAAA,GAAUD,eAAAA,CAAgBE,MAAM,CAAU,CAACC,GAAAA,EAAKC,QAAAA,GAAAA;AACpD,YAAA,MAAM,EAAEC,EAAE,EAAEC,IAAI,EAAE,GAAGF,QAAAA;YACrB,MAAMG,GAAAA,GAAMD,IAAAA,KAAS,OAAA,GAAU,SAAA,GAAY,WAAA;AAE3C,YAAA,IAAI,CAACH,GAAG,CAACI,GAAAA,CAAI,EAAE;gBACbJ,GAAG,CAACI,GAAAA,CAAI,GAAG,EAAE;AACf,YAAA;AAEAJ,YAAAA,GAAG,CAACI,GAAAA,CAAI,CAAEC,IAAI,CAACH,EAAAA,CAAAA;YAEf,OAAOF,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;AAEJ,QAAA,OAAOP,KACL,2BAAA,EACA;AAAE,YAAA,GAAGK,OAAO;AAAEF,YAAAA;AAAoB,SAAA,CAAA;AAEtC,IAAA,CAAA;IAEA,MAAMU,QAAAA,GAAWC,YAIfZ,aAAAA,EAAe;AACfa,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;AACX,YAAA,MAAM,EACJC,IAAAA,EAAM,EAAEA,IAAI,EAAE,EACf,GAAGD,GAAAA;YAEJ,IAAIC,IAAAA,EAAMC,KAAAA,EAAOC,MAAAA,GAAS,CAAA,EAAG;AAC3BrB,gBAAAA,WAAAA,CAAYsB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAAA,EAAQ;AAAK,iBAAA,CAAA;AAChExB,gBAAAA,WAAAA,CAAYsB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAAA,EAAQ;AAAK,iBAAA,CAAA;AACvE,YAAA;;;AAIAxB,YAAAA,WAAAA,CAAYsB,cAAc,CAAC;AAACC,gBAAAA,QAAAA;AAAU,gBAAA;aAAU,EAAE;gBAAEC,MAAAA,EAAQ;AAAK,aAAA,CAAA;YAEjE1B,kBAAAA,CAAmB;gBACjBc,IAAAA,EAAM,SAAA;AACNa,gBAAAA,OAAAA,EAAS7B,aAAAA,CAAc;AACrBe,oBAAAA,EAAAA,EAAIe,OAAAA,CAAQ,0BAAA,CAAA;oBACZC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,OAAO,CACXvB,mBAAAA,EACAC,eAAAA,GACGS,QAAAA,CAASc,WAAW,CAAC;AAAExB,YAAAA,mBAAAA;AAAqBC,YAAAA;AAAgB,SAAA,CAAA;IAEjE,OAAO;AAAE,QAAA,GAAGS,QAAQ;AAAEa,QAAAA;AAAK,KAAA;AAC7B;;;;"}