{"version":3,"file":"useBulkMove.mjs","sources":["../../../admin/src/hooks/useBulkMove.ts"],"sourcesContent":["import { 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<FolderWithType | FileWithType>;\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<Payload>((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('/upload/actions/bulk-move', { ...payload, destinationFolderId });\n  };\n\n  const mutation = useMutation<\n    BulkMoveFolders.Response | BulkMoveFiles.Response,\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<FolderWithType | FileWithType>\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,KAAK,2BAAA,EAA6B;AAAE,YAAA,GAAGK,OAAO;AAAEF,YAAAA;AAAoB,SAAA,CAAA;AAC7E,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;;;;"}