@strapi/upload 5.19.0 → 5.21.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/components/FilterPopover/FilterPopover.js +3 -0
- package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -1
- package/dist/admin/components/FilterPopover/FilterPopover.mjs +3 -0
- package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +1 -1
- package/dist/admin/hooks/useBulkRemove.js +5 -0
- package/dist/admin/hooks/useBulkRemove.js.map +1 -1
- package/dist/admin/hooks/useBulkRemove.mjs +6 -1
- package/dist/admin/hooks/useBulkRemove.mjs.map +1 -1
- package/dist/admin/hooks/useRemoveAsset.js +5 -0
- package/dist/admin/hooks/useRemoveAsset.js.map +1 -1
- package/dist/admin/hooks/useRemoveAsset.mjs +6 -1
- package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -1
- package/dist/admin/hooks/useUpload.js +5 -0
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +6 -1
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/package.json.js +8 -6
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +8 -6
- package/dist/admin/package.json.mjs.map +1 -1
- package/dist/server/routes/content-api.js +84 -24
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs +65 -24
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/routes/validation/upload.js +99 -0
- package/dist/server/routes/validation/upload.js.map +1 -0
- package/dist/server/routes/validation/upload.mjs +78 -0
- package/dist/server/routes/validation/upload.mjs.map +1 -0
- package/dist/server/src/index.d.ts +1 -8
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/content-api.d.ts +2 -8
- package/dist/server/src/routes/content-api.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +1 -8
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/routes/validation/index.d.ts +2 -0
- package/dist/server/src/routes/validation/index.d.ts.map +1 -0
- package/dist/server/src/routes/validation/upload.d.ts +94 -0
- package/dist/server/src/routes/validation/upload.d.ts.map +1 -0
- package/package.json +8 -6
|
@@ -194,6 +194,9 @@ const FilterPopover = ({ displayedFilters, filters, onSubmit, onToggle })=>{
|
|
|
194
194
|
const appliedFilter = displayedFilters.find((filter)=>filter.name === modifiedData.name);
|
|
195
195
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
|
|
196
196
|
sideOffset: 4,
|
|
197
|
+
style: {
|
|
198
|
+
zIndex: 499
|
|
199
|
+
},
|
|
197
200
|
children: /*#__PURE__*/ jsxRuntime.jsx("form", {
|
|
198
201
|
onSubmit: handleSubmit,
|
|
199
202
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPopover.js","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","form","_jsxs","Flex","padding","direction","alignItems","gap","style","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPopover.js","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4} style={{ zIndex: 499 }}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","style","zIndex","form","_jsxs","Flex","padding","direction","alignItems","gap","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
@@ -173,6 +173,9 @@ const FilterPopover = ({ displayedFilters, filters, onSubmit, onToggle })=>{
|
|
|
173
173
|
const appliedFilter = displayedFilters.find((filter)=>filter.name === modifiedData.name);
|
|
174
174
|
return /*#__PURE__*/ jsx(Popover.Content, {
|
|
175
175
|
sideOffset: 4,
|
|
176
|
+
style: {
|
|
177
|
+
zIndex: 499
|
|
178
|
+
},
|
|
176
179
|
children: /*#__PURE__*/ jsx("form", {
|
|
177
180
|
onSubmit: handleSubmit,
|
|
178
181
|
children: /*#__PURE__*/ jsxs(Flex, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPopover.mjs","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","form","_jsxs","Flex","padding","direction","alignItems","gap","style","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPopover.mjs","sources":["../../../../admin/src/components/FilterPopover/FilterPopover.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\n/**\n *\n * FilterPopover\n *\n */\nimport * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { FilterValueInput } from './FilterValueInput';\nimport { getFilterList } from './utils/getFilterList';\n\ntype Filter = {\n [key in 'mime' | 'createdAt' | 'updatedAt']?:\n | {\n [key in '$contains' | '$notContains' | '$eq' | '$not']?:\n | string[]\n | string\n | { $contains: string[] };\n }\n | undefined;\n};\n\nexport interface FilterPopoverProps {\n displayedFilters: {\n name: string;\n metadatas?: {\n label?: string;\n };\n fieldSchema: {\n type: string;\n options?: {\n value: string;\n }[];\n mainField?: {\n schema: {\n type: string;\n };\n };\n };\n }[];\n filters: Filter[];\n onSubmit: (filters: Filter[]) => void;\n onToggle: () => void;\n}\n\nexport const FilterPopover = ({\n displayedFilters,\n filters,\n onSubmit,\n onToggle,\n}: FilterPopoverProps) => {\n const { formatMessage } = useIntl();\n\n const [modifiedData, setModifiedData] = React.useState({\n name: 'createdAt',\n filter: '$eq',\n value: '',\n });\n\n const handleChangeFilterField = (value: string | number) => {\n const nextField = displayedFilters.find((f) => f.name === value);\n if (!nextField) {\n return;\n }\n const {\n fieldSchema: { type, options },\n } = nextField;\n let filterValue = '';\n\n if (type === 'enumeration') {\n filterValue = options?.[0].value || '';\n }\n\n const filter = getFilterList(nextField)[0].value;\n\n setModifiedData({ name: value.toString(), filter, value: filterValue });\n };\n\n const handleChangeOperator = (operator: string | number) => {\n if (modifiedData.name === 'mime') {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: 'image' }));\n } else {\n setModifiedData((prev) => ({ ...prev, filter: operator.toString(), value: '' }));\n }\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n const encodedValue = encodeURIComponent(modifiedData.value);\n\n if (encodedValue) {\n if (modifiedData.name === 'mime') {\n const alreadyAppliedFilters = filters.filter((filter) => {\n return Object.keys(filter)[0] === 'mime';\n });\n\n if (modifiedData.value === 'file') {\n const filtersWithoutMimeType = filters.filter((filter) => {\n return Object.keys(filter)[0] !== 'mime';\n });\n\n let hasCurrentFilter = false;\n\n let filterToAdd: Filter;\n\n if (modifiedData.filter === '$contains') {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n if (typeof filter.mime?.$not !== 'string' && !Array.isArray(filter.mime?.$not)) {\n return filter.mime?.$not?.$contains !== undefined;\n }\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $not: {\n $contains: ['image', 'video'],\n },\n },\n };\n } else {\n hasCurrentFilter =\n alreadyAppliedFilters.find((filter) => {\n return Array.isArray(filter.mime?.$contains);\n }) !== undefined;\n\n filterToAdd = {\n mime: {\n $contains: ['image', 'video'],\n },\n };\n }\n\n if (hasCurrentFilter) {\n onToggle();\n\n return;\n }\n\n const nextFilters = [...filtersWithoutMimeType, filterToAdd];\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n const hasFilter =\n alreadyAppliedFilters.find((filter) => {\n const modifiedDataFilter = modifiedData.filter;\n return (\n filter.mime &&\n filter.mime[modifiedDataFilter as keyof typeof filter.mime] === modifiedData.value\n );\n }) !== undefined;\n\n // Don't apply the same filter twice\n if (hasFilter) {\n onToggle();\n\n return;\n }\n\n const filtersWithoutFile = filters.filter((filter) => {\n const filterType = Object.keys(filter)[0];\n\n if (filterType !== 'mime') {\n return true;\n }\n\n if (\n typeof filter.mime?.$not !== 'string' &&\n !Array.isArray(filter.mime?.$not) &&\n filter.mime?.$not?.$contains !== undefined\n ) {\n return false;\n }\n\n if (Array.isArray(filter?.mime?.$contains)) {\n return false;\n }\n\n return true;\n });\n\n const oppositeFilter = modifiedData.filter === '$contains' ? '$notContains' : '$contains';\n\n const oppositeFilterIndex = filtersWithoutFile.findIndex((filter) => {\n return filter.mime?.[oppositeFilter] === modifiedData.value;\n });\n const hasOppositeFilter = oppositeFilterIndex !== -1;\n\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: modifiedData.value } };\n\n if (!hasOppositeFilter) {\n const nextFilters = [...filtersWithoutFile, filterToAdd];\n\n onSubmit(nextFilters);\n\n onToggle();\n\n return;\n }\n\n if (hasOppositeFilter) {\n const nextFilters = filtersWithoutFile.slice();\n nextFilters.splice(oppositeFilterIndex, 1, filterToAdd);\n onSubmit(nextFilters);\n\n onToggle();\n }\n\n return;\n }\n\n const hasFilter =\n filters.find((filter) => {\n const modifiedDataName = modifiedData.name as\n | 'mime'\n | 'createdAt'\n | 'updatedAt'\n | '$contains'\n | '$notContains'\n | '$eq'\n | '$not';\n return (\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt'] &&\n filter[modifiedDataName as 'mime' | 'createdAt' | 'updatedAt']?.[\n modifiedDataName as '$contains' | '$notContains' | '$eq' | '$not'\n ] === encodedValue\n );\n }) !== undefined;\n\n if (!hasFilter) {\n const filterToAdd = { [modifiedData.name]: { [modifiedData.filter]: encodedValue } };\n\n const nextFilters = [...filters, filterToAdd];\n\n onSubmit(nextFilters);\n }\n }\n\n onToggle();\n };\n\n const appliedFilter = displayedFilters.find((filter) => filter.name === modifiedData.name);\n\n return (\n <Popover.Content sideOffset={4} style={{ zIndex: 499 }}>\n <form onSubmit={handleSubmit}>\n <Flex padding={3} direction=\"column\" alignItems=\"stretch\" gap={1} style={{ minWidth: 184 }}>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n })}\n name=\"name\"\n size=\"M\"\n onChange={handleChangeFilterField}\n value={modifiedData.name}\n >\n {displayedFilters.map((filter) => {\n return (\n <SingleSelectOption key={filter.name} value={filter.name}>\n {filter.metadatas?.label}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <SingleSelect\n aria-label={formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n })}\n name=\"filter\"\n size=\"M\"\n value={modifiedData.filter}\n onChange={handleChangeOperator}\n >\n {getFilterList(appliedFilter!).map((option) => {\n return (\n <SingleSelectOption key={option.value} value={option.value}>\n {formatMessage(option.intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n <Box>\n <FilterValueInput\n {...appliedFilter?.metadatas}\n {...appliedFilter?.fieldSchema}\n value={modifiedData.value}\n onChange={(value) => setModifiedData((prev) => ({ ...prev, value }))}\n />\n </Box>\n <Box>\n <Button size=\"L\" variant=\"secondary\" startIcon={<Plus />} type=\"submit\" fullWidth>\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Box>\n </Flex>\n </form>\n </Popover.Content>\n );\n};\n"],"names":["FilterPopover","displayedFilters","filters","onSubmit","onToggle","formatMessage","useIntl","modifiedData","setModifiedData","React","useState","name","filter","value","handleChangeFilterField","nextField","find","f","fieldSchema","type","options","filterValue","getFilterList","toString","handleChangeOperator","operator","prev","handleSubmit","e","preventDefault","stopPropagation","encodedValue","encodeURIComponent","alreadyAppliedFilters","Object","keys","filtersWithoutMimeType","hasCurrentFilter","filterToAdd","mime","$not","Array","isArray","$contains","undefined","nextFilters","hasFilter","modifiedDataFilter","filtersWithoutFile","filterType","oppositeFilter","oppositeFilterIndex","findIndex","hasOppositeFilter","slice","splice","modifiedDataName","appliedFilter","_jsx","Popover","Content","sideOffset","style","zIndex","form","_jsxs","Flex","padding","direction","alignItems","gap","minWidth","Box","SingleSelect","aria-label","id","defaultMessage","size","onChange","map","SingleSelectOption","metadatas","label","option","intlLabel","FilterValueInput","Button","variant","startIcon","Plus","fullWidth"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
4
|
var reactIntl = require('react-intl');
|
|
5
5
|
var reactQuery = require('react-query');
|
|
6
|
+
var reactRedux = require('react-redux');
|
|
6
7
|
var pluginId = require('../pluginId.js');
|
|
7
8
|
require('byte-size');
|
|
8
9
|
require('date-fns');
|
|
@@ -12,6 +13,7 @@ require('../constants.js');
|
|
|
12
13
|
require('../utils/urlYupSchema.js');
|
|
13
14
|
|
|
14
15
|
const useBulkRemove = ()=>{
|
|
16
|
+
const dispatch = reactRedux.useDispatch();
|
|
15
17
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
16
18
|
const { formatMessage } = reactIntl.useIntl();
|
|
17
19
|
const queryClient = reactQuery.useQueryClient();
|
|
@@ -60,6 +62,9 @@ const useBulkRemove = ()=>{
|
|
|
60
62
|
defaultMessage: 'Elements have been successfully deleted.'
|
|
61
63
|
})
|
|
62
64
|
});
|
|
65
|
+
dispatch(strapiAdmin.adminApi.util.invalidateTags([
|
|
66
|
+
'HomepageKeyStatistics'
|
|
67
|
+
]));
|
|
63
68
|
},
|
|
64
69
|
onError (error) {
|
|
65
70
|
toggleNotification({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBulkRemove.js","sources":["../../../admin/src/hooks/useBulkRemove.ts"],"sourcesContent":["import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\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 { 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 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","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","onError","error","remove","args","mutateAsync"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBulkRemove.js","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,aAAgB,GAAA,IAAA;AAC3B,IAAA,MAAMC,QAAWC,GAAAA,sBAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAcC,GAAAA,yBAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,kBAAkB,CAACC,eAAAA,GAAAA;AACvB,QAAA,MAAMC,OAAUD,GAAAA,eAAAA,CAAgBE,MAAM,CAAoB,CAACC,GAAKC,EAAAA,QAAAA,GAAAA;AAC9D,YAAA,MAAM,EAAEC,EAAE,EAAEC,IAAI,EAAE,GAAGF,QAAAA;YACrB,MAAMG,GAAAA,GAAMD,IAAS,KAAA,OAAA,GAAU,SAAY,GAAA,WAAA;AAE3C,YAAA,IAAI,CAACH,GAAG,CAACI,GAAAA,CAAI,EAAE;gBACbJ,GAAG,CAACI,GAAI,CAAA,GAAG,EAAE;AACf;AAEAJ,YAAAA,GAAG,CAACI,GAAAA,CAAI,CAAEC,IAAI,CAACH,EAAAA,CAAAA;YAEf,OAAOF,GAAAA;AACT,SAAA,EAAG,EAAC,CAAA;AAEJ,QAAA,OAAON,KAAK,6BAA+BI,EAAAA,OAAAA,CAAAA;AAC7C,KAAA;IAEA,MAAMQ,QAAAA,GAAWC,uBAIfX,eAAiB,EAAA;AACjBY,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;AACX,YAAA,MAAM,EACJC,IAAM,EAAA,EAAEA,IAAI,EAAE,EACf,GAAGD,GAAAA;YAEJ,IAAIC,IAAAA,EAAMC,KAAOC,EAAAA,MAAAA,GAAS,CAAG,EAAA;AAC3BpB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AAChEvB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACvE;YAEA,IAAIL,IAAAA,EAAMM,OAASJ,EAAAA,MAAAA,GAAS,CAAG,EAAA;AAC7BpB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,iBAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACnE;YAEA3B,kBAAmB,CAAA;gBACjBe,IAAM,EAAA,SAAA;AACNc,gBAAAA,OAAAA,EAAS3B,aAAc,CAAA;AACrBY,oBAAAA,EAAAA,EAAIgB,eAAQ,CAAA,4BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AAEAjC,YAAAA,QAAAA,CAASkC,oBAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE,SAAA;AACAC,QAAAA,OAAAA,CAAAA,CAAQC,KAAK,EAAA;YACXpC,kBAAmB,CAAA;gBAAEe,IAAM,EAAA,QAAA;AAAUc,gBAAAA,OAAAA,EAASO,KAAOP,EAAAA;AAAQ,aAAA,CAAA;AAC/D;AACF,KAAA,CAAA;AAEA,IAAA,MAAMQ,SAAS,CAAC,GAAGC,IACjBpB,GAAAA,QAAAA,CAASqB,WAAW,CAAID,GAAAA,IAAAA,CAAAA;IAE1B,OAAO;AAAE,QAAA,GAAGpB,QAAQ;AAAEmB,QAAAA;AAAO,KAAA;AAC/B;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';
|
|
1
|
+
import { useNotification, useFetchClient, adminApi } from '@strapi/admin/strapi-admin';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import { useQueryClient, useMutation } from 'react-query';
|
|
4
|
+
import { useDispatch } from 'react-redux';
|
|
4
5
|
import { pluginId } from '../pluginId.mjs';
|
|
5
6
|
import 'byte-size';
|
|
6
7
|
import 'date-fns';
|
|
@@ -10,6 +11,7 @@ import '../constants.mjs';
|
|
|
10
11
|
import '../utils/urlYupSchema.mjs';
|
|
11
12
|
|
|
12
13
|
const useBulkRemove = ()=>{
|
|
14
|
+
const dispatch = useDispatch();
|
|
13
15
|
const { toggleNotification } = useNotification();
|
|
14
16
|
const { formatMessage } = useIntl();
|
|
15
17
|
const queryClient = useQueryClient();
|
|
@@ -58,6 +60,9 @@ const useBulkRemove = ()=>{
|
|
|
58
60
|
defaultMessage: 'Elements have been successfully deleted.'
|
|
59
61
|
})
|
|
60
62
|
});
|
|
63
|
+
dispatch(adminApi.util.invalidateTags([
|
|
64
|
+
'HomepageKeyStatistics'
|
|
65
|
+
]));
|
|
61
66
|
},
|
|
62
67
|
onError (error) {
|
|
63
68
|
toggleNotification({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBulkRemove.mjs","sources":["../../../admin/src/hooks/useBulkRemove.ts"],"sourcesContent":["import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\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 { 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 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","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","onError","error","remove","args","mutateAsync"],"mappings":"
|
|
1
|
+
{"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,aAAgB,GAAA,IAAA;AAC3B,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAcC,GAAAA,cAAAA,EAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGC,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,kBAAkB,CAACC,eAAAA,GAAAA;AACvB,QAAA,MAAMC,OAAUD,GAAAA,eAAAA,CAAgBE,MAAM,CAAoB,CAACC,GAAKC,EAAAA,QAAAA,GAAAA;AAC9D,YAAA,MAAM,EAAEC,EAAE,EAAEC,IAAI,EAAE,GAAGF,QAAAA;YACrB,MAAMG,GAAAA,GAAMD,IAAS,KAAA,OAAA,GAAU,SAAY,GAAA,WAAA;AAE3C,YAAA,IAAI,CAACH,GAAG,CAACI,GAAAA,CAAI,EAAE;gBACbJ,GAAG,CAACI,GAAI,CAAA,GAAG,EAAE;AACf;AAEAJ,YAAAA,GAAG,CAACI,GAAAA,CAAI,CAAEC,IAAI,CAACH,EAAAA,CAAAA;YAEf,OAAOF,GAAAA;AACT,SAAA,EAAG,EAAC,CAAA;AAEJ,QAAA,OAAON,KAAK,6BAA+BI,EAAAA,OAAAA,CAAAA;AAC7C,KAAA;IAEA,MAAMQ,QAAAA,GAAWC,YAIfX,eAAiB,EAAA;AACjBY,QAAAA,SAAAA,CAAAA,CAAUC,GAAG,EAAA;AACX,YAAA,MAAM,EACJC,IAAM,EAAA,EAAEA,IAAI,EAAE,EACf,GAAGD,GAAAA;YAEJ,IAAIC,IAAAA,EAAMC,KAAOC,EAAAA,MAAAA,GAAS,CAAG,EAAA;AAC3BpB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAS,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AAChEvB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAc,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACvE;YAEA,IAAIL,IAAAA,EAAMM,OAASJ,EAAAA,MAAAA,GAAS,CAAG,EAAA;AAC7BpB,gBAAAA,WAAAA,CAAYqB,cAAc,CAAC;AAACC,oBAAAA,QAAAA;AAAU,oBAAA;iBAAU,EAAE;oBAAEC,MAAQ,EAAA;AAAK,iBAAA,CAAA;AACnE;YAEA3B,kBAAmB,CAAA;gBACjBe,IAAM,EAAA,SAAA;AACNc,gBAAAA,OAAAA,EAAS3B,aAAc,CAAA;AACrBY,oBAAAA,EAAAA,EAAIgB,OAAQ,CAAA,4BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AAEAjC,YAAAA,QAAAA,CAASkC,QAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE,SAAA;AACAC,QAAAA,OAAAA,CAAAA,CAAQC,KAAK,EAAA;YACXpC,kBAAmB,CAAA;gBAAEe,IAAM,EAAA,QAAA;AAAUc,gBAAAA,OAAAA,EAASO,KAAOP,EAAAA;AAAQ,aAAA,CAAA;AAC/D;AACF,KAAA,CAAA;AAEA,IAAA,MAAMQ,SAAS,CAAC,GAAGC,IACjBpB,GAAAA,QAAAA,CAASqB,WAAW,CAAID,GAAAA,IAAAA,CAAAA;IAE1B,OAAO;AAAE,QAAA,GAAGpB,QAAQ;AAAEmB,QAAAA;AAAO,KAAA;AAC/B;;;;"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
4
4
|
var reactIntl = require('react-intl');
|
|
5
5
|
var reactQuery = require('react-query');
|
|
6
|
+
var reactRedux = require('react-redux');
|
|
6
7
|
var pluginId = require('../pluginId.js');
|
|
7
8
|
|
|
8
9
|
const useRemoveAsset = (onSuccess)=>{
|
|
10
|
+
const dispatch = reactRedux.useDispatch();
|
|
9
11
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
10
12
|
const { formatMessage } = reactIntl.useIntl();
|
|
11
13
|
const queryClient = reactQuery.useQueryClient();
|
|
@@ -31,6 +33,9 @@ const useRemoveAsset = (onSuccess)=>{
|
|
|
31
33
|
defaultMessage: 'Elements have been successfully deleted.'
|
|
32
34
|
})
|
|
33
35
|
});
|
|
36
|
+
dispatch(strapiAdmin.adminApi.util.invalidateTags([
|
|
37
|
+
'HomepageKeyStatistics'
|
|
38
|
+
]));
|
|
34
39
|
onSuccess();
|
|
35
40
|
},
|
|
36
41
|
onError (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRemoveAsset.js","sources":["../../../admin/src/hooks/useRemoveAsset.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useRemoveAsset.js","sources":["../../../admin/src/hooks/useRemoveAsset.ts"],"sourcesContent":["import {\n useNotification,\n useFetchClient,\n FetchResponse,\n adminApi,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient, UseMutationResult } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { pluginId } from '../pluginId';\n\nimport type { DeleteFile } from '../../../shared/contracts/files';\n\ntype UseRemoveAsset = {\n removeAsset: (assetId: number) => Promise<void>;\n} & UseMutationResult<FetchResponse<DeleteFile.Response>, Error, number>;\n\nexport const useRemoveAsset = (onSuccess: () => void): UseRemoveAsset => {\n const dispatch = useDispatch();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const queryClient = useQueryClient();\n const { del } = useFetchClient();\n\n const mutation = useMutation(\n (assetId: number) => del<DeleteFile.Response>(`/upload/files/${assetId}`),\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'modal.remove.success-label',\n defaultMessage: 'Elements have been successfully deleted.',\n }),\n });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics']));\n\n onSuccess();\n },\n onError(error: Error) {\n toggleNotification({ type: 'danger', message: error.message });\n },\n }\n );\n\n const removeAsset = async (assetId: number) => {\n await mutation.mutateAsync(assetId);\n };\n\n return { ...mutation, removeAsset };\n};\n"],"names":["useRemoveAsset","onSuccess","dispatch","useDispatch","toggleNotification","useNotification","formatMessage","useIntl","queryClient","useQueryClient","del","useFetchClient","mutation","useMutation","assetId","refetchQueries","pluginId","active","type","message","id","defaultMessage","adminApi","util","invalidateTags","onError","error","removeAsset","mutateAsync"],"mappings":";;;;;;;;AAkBO,MAAMA,iBAAiB,CAACC,SAAAA,GAAAA;AAC7B,IAAA,MAAMC,QAAWC,GAAAA,sBAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAcC,GAAAA,yBAAAA,EAAAA;IACpB,MAAM,EAAEC,GAAG,EAAE,GAAGC,0BAAAA,EAAAA;IAEhB,MAAMC,QAAAA,GAAWC,sBACf,CAAA,CAACC,OAAoBJ,GAAAA,GAAAA,CAAyB,CAAC,cAAc,EAAEI,OAAQ,CAAA,CAAC,CACxE,EAAA;AACEb,QAAAA,SAAAA,CAAAA,GAAAA;AACEO,YAAAA,WAAAA,CAAYO,cAAc,CAAC;AAACC,gBAAAA,iBAAAA;AAAU,gBAAA;aAAS,EAAE;gBAAEC,MAAQ,EAAA;AAAK,aAAA,CAAA;AAChET,YAAAA,WAAAA,CAAYO,cAAc,CAAC;AAACC,gBAAAA,iBAAAA;AAAU,gBAAA;aAAc,EAAE;gBAAEC,MAAQ,EAAA;AAAK,aAAA,CAAA;YAErEb,kBAAmB,CAAA;gBACjBc,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASb,aAAc,CAAA;oBACrBc,EAAI,EAAA,4BAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACAnB,YAAAA,QAAAA,CAASoB,oBAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AAE/DvB,YAAAA,SAAAA,EAAAA;AACF,SAAA;AACAwB,QAAAA,OAAAA,CAAAA,CAAQC,KAAY,EAAA;YAClBtB,kBAAmB,CAAA;gBAAEc,IAAM,EAAA,QAAA;AAAUC,gBAAAA,OAAAA,EAASO,MAAMP;AAAQ,aAAA,CAAA;AAC9D;AACF,KAAA,CAAA;AAGF,IAAA,MAAMQ,cAAc,OAAOb,OAAAA,GAAAA;QACzB,MAAMF,QAAAA,CAASgB,WAAW,CAACd,OAAAA,CAAAA;AAC7B,KAAA;IAEA,OAAO;AAAE,QAAA,GAAGF,QAAQ;AAAEe,QAAAA;AAAY,KAAA;AACpC;;;;"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';
|
|
1
|
+
import { useNotification, useFetchClient, adminApi } from '@strapi/admin/strapi-admin';
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import { useQueryClient, useMutation } from 'react-query';
|
|
4
|
+
import { useDispatch } from 'react-redux';
|
|
4
5
|
import { pluginId } from '../pluginId.mjs';
|
|
5
6
|
|
|
6
7
|
const useRemoveAsset = (onSuccess)=>{
|
|
8
|
+
const dispatch = useDispatch();
|
|
7
9
|
const { toggleNotification } = useNotification();
|
|
8
10
|
const { formatMessage } = useIntl();
|
|
9
11
|
const queryClient = useQueryClient();
|
|
@@ -29,6 +31,9 @@ const useRemoveAsset = (onSuccess)=>{
|
|
|
29
31
|
defaultMessage: 'Elements have been successfully deleted.'
|
|
30
32
|
})
|
|
31
33
|
});
|
|
34
|
+
dispatch(adminApi.util.invalidateTags([
|
|
35
|
+
'HomepageKeyStatistics'
|
|
36
|
+
]));
|
|
32
37
|
onSuccess();
|
|
33
38
|
},
|
|
34
39
|
onError (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRemoveAsset.mjs","sources":["../../../admin/src/hooks/useRemoveAsset.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useRemoveAsset.mjs","sources":["../../../admin/src/hooks/useRemoveAsset.ts"],"sourcesContent":["import {\n useNotification,\n useFetchClient,\n FetchResponse,\n adminApi,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient, UseMutationResult } from 'react-query';\nimport { useDispatch } from 'react-redux';\n\nimport { pluginId } from '../pluginId';\n\nimport type { DeleteFile } from '../../../shared/contracts/files';\n\ntype UseRemoveAsset = {\n removeAsset: (assetId: number) => Promise<void>;\n} & UseMutationResult<FetchResponse<DeleteFile.Response>, Error, number>;\n\nexport const useRemoveAsset = (onSuccess: () => void): UseRemoveAsset => {\n const dispatch = useDispatch();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const queryClient = useQueryClient();\n const { del } = useFetchClient();\n\n const mutation = useMutation(\n (assetId: number) => del<DeleteFile.Response>(`/upload/files/${assetId}`),\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'modal.remove.success-label',\n defaultMessage: 'Elements have been successfully deleted.',\n }),\n });\n dispatch(adminApi.util.invalidateTags(['HomepageKeyStatistics']));\n\n onSuccess();\n },\n onError(error: Error) {\n toggleNotification({ type: 'danger', message: error.message });\n },\n }\n );\n\n const removeAsset = async (assetId: number) => {\n await mutation.mutateAsync(assetId);\n };\n\n return { ...mutation, removeAsset };\n};\n"],"names":["useRemoveAsset","onSuccess","dispatch","useDispatch","toggleNotification","useNotification","formatMessage","useIntl","queryClient","useQueryClient","del","useFetchClient","mutation","useMutation","assetId","refetchQueries","pluginId","active","type","message","id","defaultMessage","adminApi","util","invalidateTags","onError","error","removeAsset","mutateAsync"],"mappings":";;;;;;AAkBO,MAAMA,iBAAiB,CAACC,SAAAA,GAAAA;AAC7B,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAcC,GAAAA,cAAAA,EAAAA;IACpB,MAAM,EAAEC,GAAG,EAAE,GAAGC,cAAAA,EAAAA;IAEhB,MAAMC,QAAAA,GAAWC,WACf,CAAA,CAACC,OAAoBJ,GAAAA,GAAAA,CAAyB,CAAC,cAAc,EAAEI,OAAQ,CAAA,CAAC,CACxE,EAAA;AACEb,QAAAA,SAAAA,CAAAA,GAAAA;AACEO,YAAAA,WAAAA,CAAYO,cAAc,CAAC;AAACC,gBAAAA,QAAAA;AAAU,gBAAA;aAAS,EAAE;gBAAEC,MAAQ,EAAA;AAAK,aAAA,CAAA;AAChET,YAAAA,WAAAA,CAAYO,cAAc,CAAC;AAACC,gBAAAA,QAAAA;AAAU,gBAAA;aAAc,EAAE;gBAAEC,MAAQ,EAAA;AAAK,aAAA,CAAA;YAErEb,kBAAmB,CAAA;gBACjBc,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAASb,aAAc,CAAA;oBACrBc,EAAI,EAAA,4BAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACAnB,YAAAA,QAAAA,CAASoB,QAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AAE/DvB,YAAAA,SAAAA,EAAAA;AACF,SAAA;AACAwB,QAAAA,OAAAA,CAAAA,CAAQC,KAAY,EAAA;YAClBtB,kBAAmB,CAAA;gBAAEc,IAAM,EAAA,QAAA;AAAUC,gBAAAA,OAAAA,EAASO,MAAMP;AAAQ,aAAA,CAAA;AAC9D;AACF,KAAA,CAAA;AAGF,IAAA,MAAMQ,cAAc,OAAOb,OAAAA,GAAAA;QACzB,MAAMF,QAAAA,CAASgB,WAAW,CAACd,OAAAA,CAAAA;AAC7B,KAAA;IAEA,OAAO;AAAE,QAAA,GAAGF,QAAQ;AAAEe,QAAAA;AAAY,KAAA;AACpC;;;;"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
5
|
var reactQuery = require('react-query');
|
|
6
|
+
var reactRedux = require('react-redux');
|
|
6
7
|
var pluginId = require('../pluginId.js');
|
|
7
8
|
|
|
8
9
|
function _interopNamespaceDefault(e) {
|
|
@@ -44,6 +45,7 @@ const uploadAsset = (asset, folderId, signal, onProgress, post)=>{
|
|
|
44
45
|
}).then((res)=>res.data);
|
|
45
46
|
};
|
|
46
47
|
const useUpload = ()=>{
|
|
48
|
+
const dispatch = reactRedux.useDispatch();
|
|
47
49
|
const [progress, setProgress] = React__namespace.useState(0);
|
|
48
50
|
const queryClient = reactQuery.useQueryClient();
|
|
49
51
|
const abortController = new AbortController();
|
|
@@ -65,6 +67,9 @@ const useUpload = ()=>{
|
|
|
65
67
|
], {
|
|
66
68
|
active: true
|
|
67
69
|
});
|
|
70
|
+
dispatch(strapiAdmin.adminApi.util.invalidateTags([
|
|
71
|
+
'HomepageKeyStatistics'
|
|
72
|
+
]));
|
|
68
73
|
}
|
|
69
74
|
});
|
|
70
75
|
const upload = (asset, folderId)=>mutation.mutateAsync({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUpload.js","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\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 uploadAsset = (\n asset: Asset,\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const { rawFile, caption, name, alternativeText } = asset;\n const formData = new FormData();\n\n formData.append('files', rawFile!);\n\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name,\n caption,\n alternativeText,\n folder: folderId,\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 [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 { asset: Asset; folderId: number | null }\n >(\n ({ asset, folderId }) => {\n return uploadAsset(asset, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n },\n }\n );\n\n const upload = (asset: Asset, folderId: number | null) =>\n mutation.mutateAsync({ asset, 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","uploadAsset","asset","folderId","signal","onProgress","post","rawFile","caption","name","alternativeText","formData","FormData","append","JSON","stringify","folder","then","res","data","useUpload","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":"
|
|
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 uploadAsset = (\n asset: Asset,\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const { rawFile, caption, name, alternativeText } = asset;\n const formData = new FormData();\n\n formData.append('files', rawFile!);\n\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name,\n caption,\n alternativeText,\n folder: folderId,\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 { asset: Asset; folderId: number | null }\n >(\n ({ asset, folderId }) => {\n return uploadAsset(asset, 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']));\n },\n }\n );\n\n const upload = (asset: Asset, folderId: number | null) =>\n mutation.mutateAsync({ asset, 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","uploadAsset","asset","folderId","signal","onProgress","post","rawFile","caption","name","alternativeText","formData","FormData","append","JSON","stringify","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAMA,QAAW,GAAA,CAAC,CAAC,EAAEC,kBAAS,CAAC;AAQ/B,MAAMC,WAAc,GAAA,CAClBC,KACAC,EAAAA,QAAAA,EACAC,QACAC,UACAC,EAAAA,IAAAA,GAAAA;IAEA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAGR,KAAAA;AACpD,IAAA,MAAMS,WAAW,IAAIC,QAAAA,EAAAA;IAErBD,QAASE,CAAAA,MAAM,CAAC,OAASN,EAAAA,OAAAA,CAAAA;AAEzBI,IAAAA,QAAAA,CAASE,MAAM,CACb,UACAC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACbN,QAAAA,IAAAA;AACAD,QAAAA,OAAAA;AACAE,QAAAA,eAAAA;QACAM,MAAQb,EAAAA;AACV,KAAA,CAAA,CAAA;AAGF;;;;MAKA,OAAOG,IAAKP,CAAAA,QAAAA,EAAUY,QAAU,EAAA;AAC9BP,QAAAA;AACF,KAAA,CAAA,CAAGa,IAAI,CAAC,CAACC,GAAAA,GAAQA,IAAIC,IAAI,CAAA;AAC3B,CAAA;MAEaC,SAAY,GAAA,IAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,sBAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AAC/C,IAAA,MAAMC,WAAcC,GAAAA,yBAAAA,EAAAA;AACpB,IAAA,MAAMC,kBAAkB,IAAIC,eAAAA,EAAAA;IAC5B,MAAM1B,MAAAA,GAASyB,gBAAgBzB,MAAM;IACrC,MAAM,EAAEE,IAAI,EAAE,GAAGyB,0BAAAA,EAAAA;AAEjB,IAAA,MAAMC,WAAWC,sBAKf,CAAA,CAAC,EAAE/B,KAAK,EAAEC,QAAQ,EAAE,GAAA;AAClB,QAAA,OAAOF,WAAYC,CAAAA,KAAAA,EAAOC,QAAUC,EAAAA,MAAAA,EAAQoB,WAAalB,EAAAA,IAAAA,CAAAA;KAE3D,EAAA;AACE4B,QAAAA,SAAAA,CAAAA,GAAAA;AACEP,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,iBAAAA;AAAU,gBAAA;aAAS,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AAChET,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,iBAAAA;AAAU,gBAAA;aAAc,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AACrEf,YAAAA,QAAAA,CAASgB,oBAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE;AACF,KAAA,CAAA;AAGF,IAAA,MAAMC,SAAS,CAACtC,KAAAA,EAAcC,QAC5B6B,GAAAA,QAAAA,CAASS,WAAW,CAAC;AAAEvC,YAAAA,KAAAA;AAAOC,YAAAA;AAAS,SAAA,CAAA;IAEzC,MAAMuC,MAAAA,GAAS,IAAMb,eAAAA,CAAgBc,KAAK,EAAA;IAE1C,OAAO;AACLH,QAAAA,MAAAA;AACAI,QAAAA,SAAAA,EAAWZ,SAASY,SAAS;AAC7BF,QAAAA,MAAAA;AACAG,QAAAA,KAAAA,EAAOb,SAASa,KAAK;AACrBtB,QAAAA,QAAAA;AACAuB,QAAAA,MAAAA,EAAQd,SAASc;AACnB,KAAA;AACF;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useFetchClient } from '@strapi/admin/strapi-admin';
|
|
2
|
+
import { useFetchClient, adminApi } from '@strapi/admin/strapi-admin';
|
|
3
3
|
import { useQueryClient, useMutation } from 'react-query';
|
|
4
|
+
import { useDispatch } from 'react-redux';
|
|
4
5
|
import { pluginId } from '../pluginId.mjs';
|
|
5
6
|
|
|
6
7
|
const endpoint = `/${pluginId}`;
|
|
@@ -23,6 +24,7 @@ const uploadAsset = (asset, folderId, signal, onProgress, post)=>{
|
|
|
23
24
|
}).then((res)=>res.data);
|
|
24
25
|
};
|
|
25
26
|
const useUpload = ()=>{
|
|
27
|
+
const dispatch = useDispatch();
|
|
26
28
|
const [progress, setProgress] = React.useState(0);
|
|
27
29
|
const queryClient = useQueryClient();
|
|
28
30
|
const abortController = new AbortController();
|
|
@@ -44,6 +46,9 @@ const useUpload = ()=>{
|
|
|
44
46
|
], {
|
|
45
47
|
active: true
|
|
46
48
|
});
|
|
49
|
+
dispatch(adminApi.util.invalidateTags([
|
|
50
|
+
'HomepageKeyStatistics'
|
|
51
|
+
]));
|
|
47
52
|
}
|
|
48
53
|
});
|
|
49
54
|
const upload = (asset, folderId)=>mutation.mutateAsync({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUpload.mjs","sources":["../../../admin/src/hooks/useUpload.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useFetchClient, FetchClient } from '@strapi/admin/strapi-admin';\nimport { useMutation, useQueryClient } from 'react-query';\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 uploadAsset = (\n asset: Asset,\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const { rawFile, caption, name, alternativeText } = asset;\n const formData = new FormData();\n\n formData.append('files', rawFile!);\n\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name,\n caption,\n alternativeText,\n folder: folderId,\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 [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 { asset: Asset; folderId: number | null }\n >(\n ({ asset, folderId }) => {\n return uploadAsset(asset, folderId, signal, setProgress, post);\n },\n {\n onSuccess() {\n queryClient.refetchQueries([pluginId, 'assets'], { active: true });\n queryClient.refetchQueries([pluginId, 'asset-count'], { active: true });\n },\n }\n );\n\n const upload = (asset: Asset, folderId: number | null) =>\n mutation.mutateAsync({ asset, 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","uploadAsset","asset","folderId","signal","onProgress","post","rawFile","caption","name","alternativeText","formData","FormData","append","JSON","stringify","folder","then","res","data","useUpload","progress","setProgress","React","useState","queryClient","useQueryClient","abortController","AbortController","useFetchClient","mutation","useMutation","onSuccess","refetchQueries","active","upload","mutateAsync","cancel","abort","isLoading","error","status"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useUpload.mjs","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 uploadAsset = (\n asset: Asset,\n folderId: number | null,\n signal: AbortSignal,\n onProgress: (progress: number) => void,\n post: FetchClient['post']\n) => {\n const { rawFile, caption, name, alternativeText } = asset;\n const formData = new FormData();\n\n formData.append('files', rawFile!);\n\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name,\n caption,\n alternativeText,\n folder: folderId,\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 { asset: Asset; folderId: number | null }\n >(\n ({ asset, folderId }) => {\n return uploadAsset(asset, 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']));\n },\n }\n );\n\n const upload = (asset: Asset, folderId: number | null) =>\n mutation.mutateAsync({ asset, 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","uploadAsset","asset","folderId","signal","onProgress","post","rawFile","caption","name","alternativeText","formData","FormData","append","JSON","stringify","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":";;;;;;AASA,MAAMA,QAAW,GAAA,CAAC,CAAC,EAAEC,SAAS,CAAC;AAQ/B,MAAMC,WAAc,GAAA,CAClBC,KACAC,EAAAA,QAAAA,EACAC,QACAC,UACAC,EAAAA,IAAAA,GAAAA;IAEA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAGR,KAAAA;AACpD,IAAA,MAAMS,WAAW,IAAIC,QAAAA,EAAAA;IAErBD,QAASE,CAAAA,MAAM,CAAC,OAASN,EAAAA,OAAAA,CAAAA;AAEzBI,IAAAA,QAAAA,CAASE,MAAM,CACb,UACAC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACbN,QAAAA,IAAAA;AACAD,QAAAA,OAAAA;AACAE,QAAAA,eAAAA;QACAM,MAAQb,EAAAA;AACV,KAAA,CAAA,CAAA;AAGF;;;;MAKA,OAAOG,IAAKP,CAAAA,QAAAA,EAAUY,QAAU,EAAA;AAC9BP,QAAAA;AACF,KAAA,CAAA,CAAGa,IAAI,CAAC,CAACC,GAAAA,GAAQA,IAAIC,IAAI,CAAA;AAC3B,CAAA;MAEaC,SAAY,GAAA,IAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AAC/C,IAAA,MAAMC,WAAcC,GAAAA,cAAAA,EAAAA;AACpB,IAAA,MAAMC,kBAAkB,IAAIC,eAAAA,EAAAA;IAC5B,MAAM1B,MAAAA,GAASyB,gBAAgBzB,MAAM;IACrC,MAAM,EAAEE,IAAI,EAAE,GAAGyB,cAAAA,EAAAA;AAEjB,IAAA,MAAMC,WAAWC,WAKf,CAAA,CAAC,EAAE/B,KAAK,EAAEC,QAAQ,EAAE,GAAA;AAClB,QAAA,OAAOF,WAAYC,CAAAA,KAAAA,EAAOC,QAAUC,EAAAA,MAAAA,EAAQoB,WAAalB,EAAAA,IAAAA,CAAAA;KAE3D,EAAA;AACE4B,QAAAA,SAAAA,CAAAA,GAAAA;AACEP,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,QAAAA;AAAU,gBAAA;aAAS,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AAChET,YAAAA,WAAAA,CAAYQ,cAAc,CAAC;AAACnC,gBAAAA,QAAAA;AAAU,gBAAA;aAAc,EAAE;gBAAEoC,MAAQ,EAAA;AAAK,aAAA,CAAA;AACrEf,YAAAA,QAAAA,CAASgB,QAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA;AAAwB,aAAA,CAAA,CAAA;AACjE;AACF,KAAA,CAAA;AAGF,IAAA,MAAMC,SAAS,CAACtC,KAAAA,EAAcC,QAC5B6B,GAAAA,QAAAA,CAASS,WAAW,CAAC;AAAEvC,YAAAA,KAAAA;AAAOC,YAAAA;AAAS,SAAA,CAAA;IAEzC,MAAMuC,MAAAA,GAAS,IAAMb,eAAAA,CAAgBc,KAAK,EAAA;IAE1C,OAAO;AACLH,QAAAA,MAAAA;AACAI,QAAAA,SAAAA,EAAWZ,SAASY,SAAS;AAC7BF,QAAAA,MAAAA;AACAG,QAAAA,KAAAA,EAAOb,SAASa,KAAK;AACrBtB,QAAAA,QAAAA;AACAuB,QAAAA,MAAAA,EAAQd,SAASc;AACnB,KAAA;AACF;;;;"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/upload";
|
|
6
|
-
var version = "5.
|
|
6
|
+
var version = "5.21.0";
|
|
7
7
|
var description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
8
8
|
var license = "SEE LICENSE IN LICENSE";
|
|
9
9
|
var author = {
|
|
@@ -64,10 +64,11 @@ var scripts = {
|
|
|
64
64
|
};
|
|
65
65
|
var dependencies = {
|
|
66
66
|
"@mux/mux-player-react": "3.1.0",
|
|
67
|
+
"@reduxjs/toolkit": "1.9.7",
|
|
67
68
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
68
69
|
"@strapi/icons": "2.0.0-rc.29",
|
|
69
|
-
"@strapi/provider-upload-local": "5.
|
|
70
|
-
"@strapi/utils": "5.
|
|
70
|
+
"@strapi/provider-upload-local": "5.21.0",
|
|
71
|
+
"@strapi/utils": "5.21.0",
|
|
71
72
|
"byte-size": "8.1.1",
|
|
72
73
|
cropperjs: "1.6.1",
|
|
73
74
|
"date-fns": "2.30.0",
|
|
@@ -86,11 +87,12 @@ var dependencies = {
|
|
|
86
87
|
"react-redux": "8.1.3",
|
|
87
88
|
"react-select": "5.8.0",
|
|
88
89
|
sharp: "0.33.5",
|
|
89
|
-
yup: "0.32.9"
|
|
90
|
+
yup: "0.32.9",
|
|
91
|
+
zod: "3.25.67"
|
|
90
92
|
};
|
|
91
93
|
var devDependencies = {
|
|
92
|
-
"@strapi/admin": "5.
|
|
93
|
-
"@strapi/types": "5.
|
|
94
|
+
"@strapi/admin": "5.21.0",
|
|
95
|
+
"@strapi/types": "5.21.0",
|
|
94
96
|
"@testing-library/dom": "10.1.0",
|
|
95
97
|
"@testing-library/react": "15.0.7",
|
|
96
98
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/upload";
|
|
2
|
-
var version = "5.
|
|
2
|
+
var version = "5.21.0";
|
|
3
3
|
var description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
4
4
|
var license = "SEE LICENSE IN LICENSE";
|
|
5
5
|
var author = {
|
|
@@ -60,10 +60,11 @@ var scripts = {
|
|
|
60
60
|
};
|
|
61
61
|
var dependencies = {
|
|
62
62
|
"@mux/mux-player-react": "3.1.0",
|
|
63
|
+
"@reduxjs/toolkit": "1.9.7",
|
|
63
64
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
64
65
|
"@strapi/icons": "2.0.0-rc.29",
|
|
65
|
-
"@strapi/provider-upload-local": "5.
|
|
66
|
-
"@strapi/utils": "5.
|
|
66
|
+
"@strapi/provider-upload-local": "5.21.0",
|
|
67
|
+
"@strapi/utils": "5.21.0",
|
|
67
68
|
"byte-size": "8.1.1",
|
|
68
69
|
cropperjs: "1.6.1",
|
|
69
70
|
"date-fns": "2.30.0",
|
|
@@ -82,11 +83,12 @@ var dependencies = {
|
|
|
82
83
|
"react-redux": "8.1.3",
|
|
83
84
|
"react-select": "5.8.0",
|
|
84
85
|
sharp: "0.33.5",
|
|
85
|
-
yup: "0.32.9"
|
|
86
|
+
yup: "0.32.9",
|
|
87
|
+
zod: "3.25.67"
|
|
86
88
|
};
|
|
87
89
|
var devDependencies = {
|
|
88
|
-
"@strapi/admin": "5.
|
|
89
|
-
"@strapi/types": "5.
|
|
90
|
+
"@strapi/admin": "5.21.0",
|
|
91
|
+
"@strapi/types": "5.21.0",
|
|
90
92
|
"@testing-library/dom": "10.1.0",
|
|
91
93
|
"@testing-library/react": "15.0.7",
|
|
92
94
|
"@testing-library/user-event": "14.5.2",
|