{"version":3,"file":"useBulkRemove.mjs","sources":["../../../admin/src/hooks/useBulkRemove.ts"],"sourcesContent":["import { useNotification, useFetchClient, adminApi } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { BulkDeleteFiles, File } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\nimport { getTrad } from '../utils';\n\nimport type { BulkDeleteFolders, FolderDefinition } from '../../../shared/contracts/folders';\n\nexport interface FileWithType extends File {\n  type: string;\n}\n\ntype BulkRemovePayload = Partial<BulkDeleteFiles.Request['body']> &\n  Partial<BulkDeleteFolders.Request['body']>;\n\nexport const useBulkRemove = () => {\n  const dispatch = useDispatch();\n  const { toggleNotification } = useNotification();\n  const { formatMessage } = useIntl();\n  const queryClient = useQueryClient();\n  const { post } = useFetchClient();\n\n  const bulkRemoveQuery = (filesAndFolders: Array<FileWithType | FolderDefinition>) => {\n    const payload = filesAndFolders.reduce<BulkRemovePayload>((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-delete', payload);\n  };\n\n  const mutation = useMutation<\n    BulkDeleteFiles.Response | BulkDeleteFolders.Response,\n    BulkDeleteFiles.Response['error'] | BulkDeleteFolders.Response['error'],\n    Array<FileWithType | FolderDefinition>\n  >(bulkRemoveQuery, {\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      if (data?.folders?.length > 0) {\n        queryClient.refetchQueries([pluginId, 'folders'], { active: true });\n      }\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({\n          id: getTrad('modal.remove.success-label'),\n          defaultMessage: 'Elements have been successfully deleted.',\n        }),\n      });\n\n      dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics']));\n    },\n    onError(error) {\n      toggleNotification({ type: 'danger', message: error?.message });\n    },\n  });\n\n  const remove = (...args: Parameters<typeof mutation.mutateAsync>) =>\n    mutation.mutateAsync(...args);\n\n  return { ...mutation, remove };\n};\n"],"names":["useBulkRemove","dispatch","useDispatch","toggleNotification","useNotification","formatMessage","useIntl","queryClient","useQueryClient","post","useFetchClient","bulkRemoveQuery","filesAndFolders","payload","reduce","acc","selected","id","type","key","push","mutation","useMutation","onSuccess","res","data","files","length","refetchQueries","pluginId","active","folders","message","getTrad","defaultMessage","adminApi","util","invalidateTags","onError","error","remove","args","mutateAsync"],"mappings":";;;;;;;;;;;;MAkBaA,aAAAA,GAAgB,IAAA;AAC3B,IAAA,MAAMC,QAAAA,GAAWC,WAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAAA,GAAcC,cAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,kBAAkB,CAACC,eAAAA,GAAAA;AACvB,QAAA,MAAMC,OAAAA,GAAUD,eAAAA,CAAgBE,MAAM,CAAoB,CAACC,GAAAA,EAAKC,QAAAA,GAAAA;AAC9D,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,OAAON,KAAK,6BAAA,EAA+BI,OAAAA,CAAAA;AAC7C,IAAA,CAAA;IAEA,MAAMQ,QAAAA,GAAWC,YAIfX,eAAAA,EAAiB;AACjBY,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;AAC3BpB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAAA,EAAQ;AAAK,iBAAA,CAAA;AAChEvB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAAA,EAAQ;AAAK,iBAAA,CAAA;AACvE,YAAA;YAEA,IAAIL,IAAAA,EAAMM,OAAAA,EAASJ,MAAAA,GAAS,CAAA,EAAG;AAC7BpB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAAA,EAAQ;AAAK,iBAAA,CAAA;AACnE,YAAA;YAEA3B,kBAAAA,CAAmB;gBACjBe,IAAAA,EAAM,SAAA;AACNc,gBAAAA,OAAAA,EAAS3B,aAAAA,CAAc;AACrBY,oBAAAA,EAAAA,EAAIgB,OAAAA,CAAQ,4BAAA,CAAA;oBACZC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AAEAjC,YAAAA,QAAAA,CAASkC,QAAAA,CAASC,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE,QAAA,CAAA;AACAC,QAAAA,OAAAA,CAAAA,CAAQC,KAAK,EAAA;YACXpC,kBAAAA,CAAmB;gBAAEe,IAAAA,EAAM,QAAA;AAAUc,gBAAAA,OAAAA,EAASO,KAAAA,EAAOP;AAAQ,aAAA,CAAA;AAC/D,QAAA;AACF,KAAA,CAAA;AAEA,IAAA,MAAMQ,SAAS,CAAC,GAAGC,IAAAA,GACjBpB,QAAAA,CAASqB,WAAW,CAAA,GAAID,IAAAA,CAAAA;IAE1B,OAAO;AAAE,QAAA,GAAGpB,QAAQ;AAAEmB,QAAAA;AAAO,KAAA;AAC/B;;;;"}