@strapi/upload 5.0.0-beta.7 → 5.0.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/_chunks/{index-DJC1L27M.js → index-B96Z3Gq6.js} +2 -2
  2. package/dist/_chunks/{index-DJC1L27M.js.map → index-B96Z3Gq6.js.map} +1 -1
  3. package/dist/_chunks/{index-2C3ZYD4e.mjs → index-Bvg2llNU.mjs} +9 -9
  4. package/dist/_chunks/index-Bvg2llNU.mjs.map +1 -0
  5. package/dist/_chunks/{index-PKgX3DYk.js → index-C7nlFYgw.js} +66 -60
  6. package/dist/_chunks/index-C7nlFYgw.js.map +1 -0
  7. package/dist/_chunks/{index-ASLx4V_D.mjs → index-CjolPMop.mjs} +67 -61
  8. package/dist/_chunks/index-CjolPMop.mjs.map +1 -0
  9. package/dist/_chunks/{index-fmt8afwE.mjs → index-CpIJ-CJ3.mjs} +2 -2
  10. package/dist/_chunks/{index-fmt8afwE.mjs.map → index-CpIJ-CJ3.mjs.map} +1 -1
  11. package/dist/_chunks/{index-BxUjcUMp.js → index-De1W-cb7.js} +2 -2
  12. package/dist/_chunks/{index-BxUjcUMp.js.map → index-De1W-cb7.js.map} +1 -1
  13. package/dist/_chunks/{index-BbFs7_Gx.js → index-DwWG14v6.js} +9 -9
  14. package/dist/_chunks/index-DwWG14v6.js.map +1 -0
  15. package/dist/_chunks/{index-q-dRjRbA.mjs → index-TnbVQ0RI.mjs} +2 -2
  16. package/dist/_chunks/{index-q-dRjRbA.mjs.map → index-TnbVQ0RI.mjs.map} +1 -1
  17. package/dist/admin/index.js +1 -1
  18. package/dist/admin/index.mjs +1 -1
  19. package/dist/server/src/index.d.ts +0 -1
  20. package/dist/server/src/index.d.ts.map +1 -1
  21. package/dist/server/src/services/image-manipulation.d.ts +0 -1
  22. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  23. package/dist/server/src/services/index.d.ts +0 -1
  24. package/dist/server/src/services/index.d.ts.map +1 -1
  25. package/dist/server/src/types.d.ts +0 -1
  26. package/dist/server/src/types.d.ts.map +1 -1
  27. package/package.json +13 -16
  28. package/dist/_chunks/index-2C3ZYD4e.mjs.map +0 -1
  29. package/dist/_chunks/index-ASLx4V_D.mjs.map +0 -1
  30. package/dist/_chunks/index-BbFs7_Gx.js.map +0 -1
  31. package/dist/_chunks/index-PKgX3DYk.js.map +0 -1
@@ -9,7 +9,7 @@ const isEqual = require("lodash/isEqual");
9
9
  const PropTypes = require("prop-types");
10
10
  const reactIntl = require("react-intl");
11
11
  const reactRouterDom = require("react-router-dom");
12
- const index = require("./index-PKgX3DYk.js");
12
+ const index = require("./index-C7nlFYgw.js");
13
13
  const immer = require("immer");
14
14
  const get = require("lodash/get");
15
15
  const set = require("lodash/set");
@@ -235,4 +235,4 @@ ConfigureTheView.propTypes = {
235
235
  }).isRequired
236
236
  };
237
237
  exports.default = ConfigureTheView;
238
- //# sourceMappingURL=index-DJC1L27M.js.map
238
+ //# sourceMappingURL=index-B96Z3Gq6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DJC1L27M.js","sources":["../../admin/src/pages/App/ConfigureTheView/components/Settings.jsx","../../admin/src/pages/App/ConfigureTheView/state/actionTypes.js","../../admin/src/pages/App/ConfigureTheView/state/actions.js","../../admin/src/pages/App/ConfigureTheView/state/init.js","../../admin/src/pages/App/ConfigureTheView/state/reducer.js","../../admin/src/pages/App/ConfigureTheView/index.jsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Box,\n Grid,\n GridItem,\n SingleSelectOption,\n SingleSelect,\n Field,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { pageSizes, sortOptions } from '../../../../constants';\nimport getTrad from '../../../../utils/getTrad';\n\nconst Settings = ({ sort = '', pageSize = 10, onChange }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <Field.Root\n hint={formatMessage({\n id: getTrad('config.entries.note'),\n defaultMessage: 'Number of assets displayed by default in the Media Library',\n })}\n name=\"pageSize\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('config.entries.title'),\n defaultMessage: 'Entries per page',\n })}\n </Field.Label>\n <SingleSelect\n onChange={(value) => onChange({ target: { name: 'pageSize', value } })}\n value={pageSize}\n >\n {pageSizes.map((pageSize) => (\n <SingleSelectOption key={pageSize} value={pageSize}>\n {pageSize}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n </GridItem>\n <GridItem s={12} col={6}>\n <Field.Root\n hint={formatMessage({\n id: getTrad('config.note'),\n defaultMessage: 'Note: You can override this value in the media library.',\n })}\n name=\"sort\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('config.sort.title'),\n defaultMessage: 'Default sort order',\n })}\n </Field.Label>\n <SingleSelect\n onChange={(value) => onChange({ target: { name: 'sort', value } })}\n value={sort}\n test-sort={sort}\n data-testid=\"sort-select\"\n >\n {sortOptions.map((filter) => (\n <SingleSelectOption\n data-testid={`sort-option-${filter.value}`}\n key={filter.key}\n value={filter.value}\n >\n {formatMessage({ id: getTrad(filter.key), defaultMessage: `${filter.value}` })}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n </GridItem>\n </Grid>\n </Box>\n );\n};\n\nSettings.propTypes = {\n sort: PropTypes.string.isRequired,\n pageSize: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport { Settings };\n","import pluginId from '../../../../pluginId';\n\nexport const ON_CHANGE = `${pluginId}/ON_CHANGE`;\nexport const SET_LOADED = `${pluginId}/SET_LOADED`;\n","import { ON_CHANGE, SET_LOADED } from './actionTypes';\n\nexport const onChange = ({ name, value }) => ({\n type: ON_CHANGE,\n keys: name,\n value,\n});\n\nexport const setLoaded = () => ({\n type: SET_LOADED,\n});\n","const initialState = {\n initialData: {},\n modifiedData: {},\n};\n\nconst init = (configData) => {\n return {\n ...initialState,\n initialData: configData,\n modifiedData: configData,\n };\n};\nexport { init, initialState };\n","import { produce } from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { ON_CHANGE, SET_LOADED } from './actionTypes';\nimport { init, initialState } from './init';\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case ON_CHANGE: {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n case SET_LOADED: {\n // This action re-initialises the state using the current modifiedData.\n const reInitialise = init(get(draftState, ['modifiedData'], {}));\n draftState.initialData = reInitialise.initialData;\n draftState.modifiedData = reInitialise.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useReducer, useState } from 'react';\n\nimport {\n ConfirmDialog,\n useTracking,\n useNotification,\n Page,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Link } from '@strapi/design-system';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useConfig } from '../../../hooks/useConfig';\nimport pluginID from '../../../pluginId';\nimport getTrad from '../../../utils/getTrad';\n\nimport { Settings } from './components/Settings';\nimport { onChange, setLoaded } from './state/actions';\nimport { init, initialState } from './state/init';\nimport reducer from './state/reducer';\n\nconst ConfigureTheView = ({ config }) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { mutateConfig } = useConfig();\n const { isLoading: isSubmittingForm } = mutateConfig;\n\n const [showWarningSubmit, setWarningSubmit] = useState(false);\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n const [reducerState, dispatch] = useReducer(reducer, initialState, () => init(config));\n const { initialData, modifiedData } = reducerState;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n toggleWarningSubmit();\n };\n\n const handleConfirm = async () => {\n trackUsage('willEditMediaLibraryConfig');\n await mutateConfig.mutateAsync(modifiedData);\n toggleWarningSubmit();\n dispatch(setLoaded());\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.form.success.fields',\n defaultMessage: 'Changes saved',\n }),\n });\n };\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch(onChange({ name, value }));\n };\n\n return (\n <Layouts.Root>\n <Page.Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n navigationAction={\n <Link\n tag={NavLink}\n startIcon={<ArrowLeft />}\n to={`/plugins/${pluginID}`}\n id=\"go-back\"\n >\n {formatMessage({ id: getTrad('config.back'), defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('config.subtitle'),\n defaultMessage: 'Define the view settings of the media library.',\n })}\n title={formatMessage({\n id: getTrad('config.title'),\n defaultMessage: 'Configure the view - Media Library',\n })}\n />\n\n <Layouts.Content>\n <Settings\n data-testid=\"settings\"\n pageSize={modifiedData.pageSize || ''}\n sort={modifiedData.sort || ''}\n onChange={handleChange}\n />\n </Layouts.Content>\n\n <ConfirmDialog\n isOpen={showWarningSubmit}\n onClose={toggleWarningSubmit}\n onConfirm={handleConfirm}\n variant=\"success-light\"\n >\n {formatMessage({\n id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n })}\n </ConfirmDialog>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nConfigureTheView.propTypes = {\n config: PropTypes.shape({\n pageSize: PropTypes.number,\n sort: PropTypes.string,\n }).isRequired,\n};\n\nexport default ConfigureTheView;\n"],"names":["onChange","useIntl","jsx","Box","jsxs","Grid","GridItem","Field","getTrad","SingleSelect","pageSizes","pageSize","SingleSelectOption","sortOptions","PropTypes","pluginId","produce","set","get","useTracking","useNotification","useConfig","useState","useReducer","Layouts","Page","Link","NavLink","ArrowLeft","pluginID","Button","Check","isEqual","ConfirmDialog"],"mappings":"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"}
1
+ {"version":3,"file":"index-B96Z3Gq6.js","sources":["../../admin/src/pages/App/ConfigureTheView/components/Settings.jsx","../../admin/src/pages/App/ConfigureTheView/state/actionTypes.js","../../admin/src/pages/App/ConfigureTheView/state/actions.js","../../admin/src/pages/App/ConfigureTheView/state/init.js","../../admin/src/pages/App/ConfigureTheView/state/reducer.js","../../admin/src/pages/App/ConfigureTheView/index.jsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Box,\n Grid,\n GridItem,\n SingleSelectOption,\n SingleSelect,\n Field,\n} from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { pageSizes, sortOptions } from '../../../../constants';\nimport getTrad from '../../../../utils/getTrad';\n\nconst Settings = ({ sort = '', pageSize = 10, onChange }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <Field.Root\n hint={formatMessage({\n id: getTrad('config.entries.note'),\n defaultMessage: 'Number of assets displayed by default in the Media Library',\n })}\n name=\"pageSize\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('config.entries.title'),\n defaultMessage: 'Entries per page',\n })}\n </Field.Label>\n <SingleSelect\n onChange={(value) => onChange({ target: { name: 'pageSize', value } })}\n value={pageSize}\n >\n {pageSizes.map((pageSize) => (\n <SingleSelectOption key={pageSize} value={pageSize}>\n {pageSize}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n </GridItem>\n <GridItem s={12} col={6}>\n <Field.Root\n hint={formatMessage({\n id: getTrad('config.note'),\n defaultMessage: 'Note: You can override this value in the media library.',\n })}\n name=\"sort\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('config.sort.title'),\n defaultMessage: 'Default sort order',\n })}\n </Field.Label>\n <SingleSelect\n onChange={(value) => onChange({ target: { name: 'sort', value } })}\n value={sort}\n test-sort={sort}\n data-testid=\"sort-select\"\n >\n {sortOptions.map((filter) => (\n <SingleSelectOption\n data-testid={`sort-option-${filter.value}`}\n key={filter.key}\n value={filter.value}\n >\n {formatMessage({ id: getTrad(filter.key), defaultMessage: `${filter.value}` })}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n <Field.Hint />\n </Field.Root>\n </GridItem>\n </Grid>\n </Box>\n );\n};\n\nSettings.propTypes = {\n sort: PropTypes.string.isRequired,\n pageSize: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport { Settings };\n","import pluginId from '../../../../pluginId';\n\nexport const ON_CHANGE = `${pluginId}/ON_CHANGE`;\nexport const SET_LOADED = `${pluginId}/SET_LOADED`;\n","import { ON_CHANGE, SET_LOADED } from './actionTypes';\n\nexport const onChange = ({ name, value }) => ({\n type: ON_CHANGE,\n keys: name,\n value,\n});\n\nexport const setLoaded = () => ({\n type: SET_LOADED,\n});\n","const initialState = {\n initialData: {},\n modifiedData: {},\n};\n\nconst init = (configData) => {\n return {\n ...initialState,\n initialData: configData,\n modifiedData: configData,\n };\n};\nexport { init, initialState };\n","import { produce } from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { ON_CHANGE, SET_LOADED } from './actionTypes';\nimport { init, initialState } from './init';\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case ON_CHANGE: {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n case SET_LOADED: {\n // This action re-initialises the state using the current modifiedData.\n const reInitialise = init(get(draftState, ['modifiedData'], {}));\n draftState.initialData = reInitialise.initialData;\n draftState.modifiedData = reInitialise.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import React, { useReducer, useState } from 'react';\n\nimport {\n ConfirmDialog,\n useTracking,\n useNotification,\n Page,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Link } from '@strapi/design-system';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useConfig } from '../../../hooks/useConfig';\nimport pluginID from '../../../pluginId';\nimport getTrad from '../../../utils/getTrad';\n\nimport { Settings } from './components/Settings';\nimport { onChange, setLoaded } from './state/actions';\nimport { init, initialState } from './state/init';\nimport reducer from './state/reducer';\n\nconst ConfigureTheView = ({ config }) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { mutateConfig } = useConfig();\n const { isLoading: isSubmittingForm } = mutateConfig;\n\n const [showWarningSubmit, setWarningSubmit] = useState(false);\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n const [reducerState, dispatch] = useReducer(reducer, initialState, () => init(config));\n const { initialData, modifiedData } = reducerState;\n\n const handleSubmit = (e) => {\n e.preventDefault();\n toggleWarningSubmit();\n };\n\n const handleConfirm = async () => {\n trackUsage('willEditMediaLibraryConfig');\n await mutateConfig.mutateAsync(modifiedData);\n toggleWarningSubmit();\n dispatch(setLoaded());\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.form.success.fields',\n defaultMessage: 'Changes saved',\n }),\n });\n };\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch(onChange({ name, value }));\n };\n\n return (\n <Layouts.Root>\n <Page.Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n navigationAction={\n <Link\n tag={NavLink}\n startIcon={<ArrowLeft />}\n to={`/plugins/${pluginID}`}\n id=\"go-back\"\n >\n {formatMessage({ id: getTrad('config.back'), defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('config.subtitle'),\n defaultMessage: 'Define the view settings of the media library.',\n })}\n title={formatMessage({\n id: getTrad('config.title'),\n defaultMessage: 'Configure the view - Media Library',\n })}\n />\n\n <Layouts.Content>\n <Settings\n data-testid=\"settings\"\n pageSize={modifiedData.pageSize || ''}\n sort={modifiedData.sort || ''}\n onChange={handleChange}\n />\n </Layouts.Content>\n\n <ConfirmDialog\n isOpen={showWarningSubmit}\n onClose={toggleWarningSubmit}\n onConfirm={handleConfirm}\n variant=\"success-light\"\n >\n {formatMessage({\n id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n })}\n </ConfirmDialog>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n\nConfigureTheView.propTypes = {\n config: PropTypes.shape({\n pageSize: PropTypes.number,\n sort: PropTypes.string,\n }).isRequired,\n};\n\nexport default ConfigureTheView;\n"],"names":["onChange","useIntl","jsx","Box","jsxs","Grid","GridItem","Field","getTrad","SingleSelect","pageSizes","pageSize","SingleSelectOption","sortOptions","PropTypes","pluginId","produce","set","get","useTracking","useNotification","useConfig","useState","useReducer","Layouts","Page","Link","NavLink","ArrowLeft","pluginID","Button","Check","isEqual","ConfirmDialog"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBA,MAAM,WAAW,CAAC,EAAE,OAAO,IAAI,WAAW,IAAI,UAAAA,gBAAe;AACrD,QAAA,EAAE,kBAAkBC,UAAAA;AAGxB,SAAAC,2BAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,WAAS;AAAA,MACT,QAAO;AAAA,MACP,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MAEd,UAAAC,2BAAA,KAACC,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,QAAAH,2BAAA,IAACI,aAAS,UAAA,EAAA,GAAG,IAAI,KAAK,GACpB,UAAAF,2BAAA;AAAA,UAACG,aAAAA,MAAM;AAAA,UAAN;AAAA,YACC,MAAM,cAAc;AAAA,cAClB,IAAIC,cAAQ,qBAAqB;AAAA,cACjC,gBAAgB;AAAA,YAAA,CACjB;AAAA,YACD,MAAK;AAAA,YAEL,UAAA;AAAA,cAACN,2BAAAA,IAAAK,aAAAA,MAAM,OAAN,EACE,UAAc,cAAA;AAAA,gBACb,IAAIC,cAAQ,sBAAsB;AAAA,gBAClC,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cACAN,2BAAA;AAAA,gBAACO,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,CAAC,UAAUT,UAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,MAAM,GAAG;AAAA,kBACrE,OAAO;AAAA,kBAEN,UAAAU,MAAAA,UAAU,IAAI,CAACC,cACdT,2BAAAA,IAACU,aAAAA,oBAAkC,EAAA,OAAOD,WACvC,UAAAA,UADsBA,GAAAA,SAEzB,CACD;AAAA,gBAAA;AAAA,cACH;AAAA,cACAT,+BAACK,aAAAA,MAAM,MAAN,EAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEhB;AAAA,QACCL,2BAAA,IAAAI,aAAA,UAAA,EAAS,GAAG,IAAI,KAAK,GACpB,UAAAF,2BAAA;AAAA,UAACG,aAAAA,MAAM;AAAA,UAAN;AAAA,YACC,MAAM,cAAc;AAAA,cAClB,IAAIC,cAAQ,aAAa;AAAA,cACzB,gBAAgB;AAAA,YAAA,CACjB;AAAA,YACD,MAAK;AAAA,YAEL,UAAA;AAAA,cAACN,2BAAAA,IAAAK,aAAAA,MAAM,OAAN,EACE,UAAc,cAAA;AAAA,gBACb,IAAIC,cAAQ,mBAAmB;AAAA,gBAC/B,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,cACAN,2BAAA;AAAA,gBAACO,aAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,CAAC,UAAUT,UAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,MAAM,GAAG;AAAA,kBACjE,OAAO;AAAA,kBACP,aAAW;AAAA,kBACX,eAAY;AAAA,kBAEX,UAAAa,MAAA,YAAY,IAAI,CAAC,WAChBX,2BAAA;AAAA,oBAACU,aAAA;AAAA,oBAAA;AAAA,sBACC,eAAa,eAAe,OAAO,KAAK;AAAA,sBAExC,OAAO,OAAO;AAAA,sBAEb,UAAc,cAAA,EAAE,IAAIJ,MAAAA,QAAQ,OAAO,GAAG,GAAG,gBAAgB,GAAG,OAAO,KAAK,GAAA,CAAI;AAAA,oBAAA;AAAA,oBAHxE,OAAO;AAAA,kBAAA,CAKf;AAAA,gBAAA;AAAA,cACH;AAAA,cACAN,+BAACK,aAAAA,MAAM,MAAN,EAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEhB;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAS,YAAY;AAAA,EACnB,MAAMO,mBAAAA,QAAU,OAAO;AAAA,EACvB,UAAUA,mBAAAA,QAAU,OAAO;AAAA,EAC3B,UAAUA,mBAAAA,QAAU,KAAK;AAC3B;ACjGO,MAAM,YAAY,GAAGC,cAAQ;AAC7B,MAAM,aAAa,GAAGA,MAAQ,QAAA;ACD9B,MAAM,WAAW,CAAC,EAAE,MAAM,aAAa;AAAA,EAC5C,MAAM;AAAA,EACN,MAAM;AAAA,EACN;AACF;AAEO,MAAM,YAAY,OAAO;AAAA,EAC9B,MAAM;AACR;ACVA,MAAM,eAAe;AAAA,EACnB,aAAa,CAAE;AAAA,EACf,cAAc,CAAE;AAClB;AAEA,MAAM,OAAO,CAAC,eAAe;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,IACb,cAAc;AAAA,EAClB;AACA;ACJA,MAAM,UAAU,CAAC,QAAQ,cAAc;AAAA;AAAA,EAErCC,cAAQ,OAAO,CAAC,eAAe;AAC7B,YAAQ,OAAO,MAAI;AAAA,MACjB,KAAK,WAAW;AACdC,qBAAAA,QAAI,YAAY,CAAC,gBAAgB,GAAG,OAAO,KAAK,MAAM,GAAG,CAAC,GAAG,OAAO,KAAK;AACzE;AAAA,MACD;AAAA,MACD,KAAK,YAAY;AAEf,cAAM,eAAe,KAAKC,qBAAI,YAAY,CAAC,cAAc,GAAG,CAAE,CAAA,CAAC;AAC/D,mBAAW,cAAc,aAAa;AACtC,mBAAW,eAAe,aAAa;AACvC;AAAA,MACD;AAAA,MACD;AACE,eAAO;AAAA,IACV;AAAA,EACL,CAAG;AAAA;ACAH,MAAM,mBAAmB,CAAC,EAAE,aAAa;AACjC,QAAA,EAAE,eAAeC,YAAAA;AACjB,QAAA,EAAE,kBAAkBlB,UAAAA;AACpB,QAAA,EAAE,uBAAuBmB,YAAAA;AACzB,QAAA,EAAE,iBAAiBC,MAAAA;AACnB,QAAA,EAAE,WAAW,iBAAqB,IAAA;AAExC,QAAM,CAAC,mBAAmB,gBAAgB,IAAIC,eAAS,KAAK;AAC5D,QAAM,sBAAsB,MAAM,iBAAiB,CAAC,cAAc,CAAC,SAAS;AAEtE,QAAA,CAAC,cAAc,QAAQ,IAAIC,MAAA,WAAW,SAAS,cAAc,MAAM,KAAK,MAAM,CAAC;AAC/E,QAAA,EAAE,aAAa,aAAiB,IAAA;AAEhC,QAAA,eAAe,CAAC,MAAM;AAC1B,MAAE,eAAe;AACG;EAAA;AAGtB,QAAM,gBAAgB,YAAY;AAChC,eAAW,4BAA4B;AACjC,UAAA,aAAa,YAAY,YAAY;AACvB;AACpB,aAAS,WAAW;AACD,uBAAA;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,cAAc;AAAA,QACrB,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,IAAA,CACF;AAAA,EAAA;AAGG,QAAA,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,MAAA,QAAc;AACpD,aAAS,SAAS,EAAE,MAAM,MAAA,CAAO,CAAC;AAAA,EAAA;AAGpC,SACGrB,2BAAAA,IAAAsB,YAAAA,QAAQ,MAAR,EACC,UAACtB,2BAAAA,IAAAuB,YAAAA,KAAK,MAAL,EAAU,aAAW,kBACpB,UAACrB,2BAAA,KAAA,QAAA,EAAK,UAAU,cACd,UAAA;AAAA,IAAAF,2BAAA;AAAA,MAACsB,YAAAA,QAAQ;AAAA,MAAR;AAAA,QACC,kBACEtB,2BAAA;AAAA,UAACwB,aAAA;AAAA,UAAA;AAAA,YACC,KAAKC,eAAA;AAAA,YACL,0CAAYC,MAAU,WAAA,EAAA;AAAA,YACtB,IAAI,YAAYC,MAAAA,QAAQ;AAAA,YACxB,IAAG;AAAA,YAEF,UAAA,cAAc,EAAE,IAAIrB,MAAAA,QAAQ,aAAa,GAAG,gBAAgB,QAAQ;AAAA,UAAA;AAAA,QACvE;AAAA,QAEF,eACEN,2BAAA;AAAA,UAAC4B,aAAA;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,0CAAYC,MAAM,OAAA,EAAA;AAAA,YAClB,UAAUC,iBAAAA,QAAQ,cAAc,WAAW;AAAA,YAC3C,MAAK;AAAA,YAEJ,wBAAc,EAAE,IAAI,eAAe,gBAAgB,QAAQ;AAAA,UAAA;AAAA,QAC9D;AAAA,QAEF,UAAU,cAAc;AAAA,UACtB,IAAIxB,cAAQ,iBAAiB;AAAA,UAC7B,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,OAAO,cAAc;AAAA,UACnB,IAAIA,cAAQ,cAAc;AAAA,UAC1B,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IAEAN,2BAAAA,IAACsB,YAAQ,QAAA,SAAR,EACC,UAAAtB,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,UAAU,aAAa,YAAY;AAAA,QACnC,MAAM,aAAa,QAAQ;AAAA,QAC3B,UAAU;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IAEAA,2BAAA;AAAA,MAAC+B,YAAA;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAQ;AAAA,QAEP,UAAc,cAAA;AAAA,UACb,IAAIzB,cAAQ,+CAA+C;AAAA,UAC3D,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,EAAA,GACF,GACF,EACF,CAAA;AAEJ;AAEA,iBAAiB,YAAY;AAAA,EAC3B,QAAQM,2BAAU,MAAM;AAAA,IACtB,UAAUA,mBAAU,QAAA;AAAA,IACpB,MAAMA,mBAAU,QAAA;AAAA,EACjB,CAAA,EAAE;AACL;;"}
@@ -3,7 +3,7 @@ import { useState, useRef, lazy, useEffect, Suspense } from "react";
3
3
  import { ConfirmDialog, useNotification, useFetchClient, useTracking, useQueryParams, Layouts, Page, SearchInput, Pagination } from "@strapi/admin/strapi-admin";
4
4
  import { useIntl } from "react-intl";
5
5
  import { useLocation, useNavigate, Link as Link$1, Routes, Route } from "react-router-dom";
6
- import { g as getTrad, a as getFolderURL, u as useFolderCard, A as AssetDefinition, F as FolderDefinition, b as useBulkRemove, p as pluginId, c as useFolderStructure, S as SelectTree, n as normalizeAPIError, E as EmptyAssets, d as FilterPopover, e as displayedFilters, f as FilterList, B as BreadcrumbsDefinition, h as Breadcrumbs, i as useMediaLibraryPermissions, j as usePersistentState, v as viewOptions, l as localStorageKeys, k as useAssets, m as useFolders, o as containsAssetFilter, q as useFolder, r as useSelectionState, s as SortPicker, T as TableList, t as FolderGridList, w as FolderCard, x as FolderCardBody, y as FolderCardBodyAction, z as AssetGridList, U as UploadAssetDialog, C as EditFolderDialog, D as EditAssetDialog, G as useConfig } from "./index-ASLx4V_D.mjs";
6
+ import { g as getTrad, a as getFolderURL, u as useFolderCard, A as AssetDefinition, F as FolderDefinition, b as useBulkRemove, p as pluginId, c as useFolderStructure, S as SelectTree, n as normalizeAPIError, E as EmptyAssets, d as FilterPopover, e as displayedFilters, f as FilterList, B as BreadcrumbsDefinition, h as Breadcrumbs, i as useMediaLibraryPermissions, j as usePersistentState, v as viewOptions, l as localStorageKeys, k as useAssets, m as useFolders, o as containsAssetFilter, q as useFolder, r as useSelectionState, s as SortPicker, T as TableList, t as FolderGridList, w as FolderCard, x as FolderCardBody, y as FolderCardBodyAction, z as AssetGridList, U as UploadAssetDialog, C as EditFolderDialog, D as EditAssetDialog, G as useConfig } from "./index-CjolPMop.mjs";
7
7
  import "byte-size";
8
8
  import "date-fns";
9
9
  import { stringify } from "qs";
@@ -608,17 +608,16 @@ const MediaLibrary = () => {
608
608
  pathname: `${pathname}/configuration`,
609
609
  search: stringify(query, { encode: false })
610
610
  },
611
- icon: /* @__PURE__ */ jsx(Cog, {}),
612
611
  label: formatMessage({
613
612
  id: "app.links.configure-view",
614
613
  defaultMessage: "Configure the view"
615
- })
614
+ }),
615
+ children: /* @__PURE__ */ jsx(Cog, {})
616
616
  }
617
617
  ) }) : null,
618
618
  /* @__PURE__ */ jsx(ActionContainer, { paddingTop: 1, paddingBottom: 1, children: /* @__PURE__ */ jsx(
619
619
  IconButton,
620
620
  {
621
- icon: isGridView ? /* @__PURE__ */ jsx(List, {}) : /* @__PURE__ */ jsx(GridFour, {}),
622
621
  label: isGridView ? formatMessage({
623
622
  id: getTrad("view-switch.list"),
624
623
  defaultMessage: "List View"
@@ -626,7 +625,8 @@ const MediaLibrary = () => {
626
625
  id: getTrad("view-switch.grid"),
627
626
  defaultMessage: "Grid View"
628
627
  }),
629
- onClick: () => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)
628
+ onClick: () => setView(isGridView ? viewOptions.LIST : viewOptions.GRID),
629
+ children: isGridView ? /* @__PURE__ */ jsx(List, {}) : /* @__PURE__ */ jsx(GridFour, {})
630
630
  }
631
631
  ) }),
632
632
  /* @__PURE__ */ jsx(
@@ -722,12 +722,12 @@ const MediaLibrary = () => {
722
722
  cardActions: /* @__PURE__ */ jsx(
723
723
  IconButton,
724
724
  {
725
- icon: /* @__PURE__ */ jsx(Pencil, {}),
726
725
  "aria-label": formatMessage({
727
726
  id: getTrad("list.folder.edit"),
728
727
  defaultMessage: "Edit folder"
729
728
  }),
730
- onClick: () => handleEditFolder(folder)
729
+ onClick: () => handleEditFolder(folder),
730
+ children: /* @__PURE__ */ jsx(Pencil, {})
731
731
  }
732
732
  ),
733
733
  children: /* @__PURE__ */ jsx(FolderCardBody, { children: /* @__PURE__ */ jsx(FolderCardBodyAction, { to: url, children: /* @__PURE__ */ jsxs(Flex, { tag: "h2", direction: "column", alignItems: "start", maxWidth: "100%", children: [
@@ -825,7 +825,7 @@ const MediaLibrary = () => {
825
825
  )
826
826
  ] });
827
827
  };
828
- const ConfigureTheView = lazy(() => import("./index-q-dRjRbA.mjs"));
828
+ const ConfigureTheView = lazy(() => import("./index-TnbVQ0RI.mjs"));
829
829
  const Upload = () => {
830
830
  const {
831
831
  config: { isLoading, isError, data: config }
@@ -853,4 +853,4 @@ const Upload = () => {
853
853
  export {
854
854
  Upload as default
855
855
  };
856
- //# sourceMappingURL=index-2C3ZYD4e.mjs.map
856
+ //# sourceMappingURL=index-Bvg2llNU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Bvg2llNU.mjs","sources":["../../admin/src/utils/getBreadcrumbDataML.js","../../admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.jsx","../../admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.jsx","../../admin/src/hooks/useBulkMove.js","../../admin/src/components/BulkMoveDialog/BulkMoveDialog.jsx","../../admin/src/pages/App/MediaLibrary/components/BulkMoveButton.jsx","../../admin/src/pages/App/MediaLibrary/components/BulkActions.jsx","../../admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.jsx","../../admin/src/pages/App/MediaLibrary/components/Filters.jsx","../../admin/src/pages/App/MediaLibrary/components/Header.jsx","../../admin/src/pages/App/MediaLibrary/index.jsx","../../admin/src/pages/App/index.jsx"],"sourcesContent":["import getFolderURL from './getFolderURL';\nimport getTrad from './getTrad';\n\nconst getBreadcrumbDataML = (folder, { pathname, query }) => {\n let data = [\n {\n id: null,\n label: { id: getTrad('plugin.name'), defaultMessage: 'Media Library' },\n href: folder ? getFolderURL(pathname, query) : undefined,\n },\n ];\n\n if (folder?.parent?.parent) {\n data.push([]);\n }\n\n if (folder?.parent) {\n data.push({\n id: folder.parent.id,\n label: folder.parent.name,\n href: getFolderURL(pathname, query, {\n folder: folder.parent.id,\n folderPath: folder.parent.path,\n }),\n });\n }\n\n if (folder) {\n data.push({\n id: folder.id,\n label: folder.name,\n });\n }\n\n return data;\n};\n\nexport default getBreadcrumbDataML;\n","import React from 'react';\n\nimport { BaseCheckbox, Box } from '@strapi/design-system';\n\nimport { useFolderCard } from '../contexts/FolderCard';\n\nexport const FolderCardCheckbox = (props) => {\n const { id } = useFolderCard();\n\n return (\n <Box position=\"relative\" zIndex={2}>\n <BaseCheckbox aria-labelledby={`${id}-title`} {...props} />\n </Box>\n );\n};\n","import React, { useState } from 'react';\n\nimport { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport { Button } from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition } from '../../../../constants';\nimport { useBulkRemove } from '../../../../hooks/useBulkRemove';\n\nexport const BulkDeleteButton = ({ selected, onSuccess }) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n const { remove } = useBulkRemove();\n\n const handleConfirmRemove = async () => {\n await remove(selected);\n onSuccess();\n };\n\n return (\n <>\n <Button\n variant=\"danger-light\"\n size=\"S\"\n startIcon={<Trash />}\n onClick={() => setShowConfirmDialog(true)}\n >\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n\n <ConfirmDialog\n isOpen={showConfirmDialog}\n onClose={() => setShowConfirmDialog(false)}\n onConfirm={handleConfirmRemove}\n />\n </>\n );\n};\n\nBulkDeleteButton.propTypes = {\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n onSuccess: PropTypes.func.isRequired,\n};\n","import { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQueryClient } from 'react-query';\n\nimport pluginId from '../pluginId';\nimport { getTrad } from '../utils';\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 }) => {\n const payload = filesAndFolders.reduce((acc, selected) => {\n const { id, type } = selected;\n const key = type === 'asset' ? 'fileIds' : 'folderIds';\n\n if (!acc[key]) {\n acc[key] = [];\n }\n\n acc[key].push(id);\n\n return acc;\n }, {});\n\n return post('/upload/actions/bulk-move', { ...payload, destinationFolderId });\n };\n\n const mutation = useMutation(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 = (destinationFolderId, filesAndFolders) =>\n mutation.mutateAsync({ destinationFolderId, filesAndFolders });\n\n return { ...mutation, move };\n};\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n Field,\n GridItem,\n Loader,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition } from '../../constants';\nimport { useBulkMove } from '../../hooks/useBulkMove';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { getTrad } from '../../utils';\nimport { normalizeAPIError } from '../../utils/normalizeAPIError';\nimport SelectTree from '../SelectTree';\n\nexport const BulkMoveDialog = ({ onClose, selected, currentFolder }) => {\n const { formatMessage } = useIntl();\n const { data: folderStructure, isLoading } = useFolderStructure();\n const { move } = useBulkMove();\n\n if (!folderStructure) {\n return null;\n }\n\n const handleSubmit = async (values, { setErrors }) => {\n try {\n await move(values.destination.value, selected);\n onClose();\n } catch (error) {\n const normalizedError = normalizeAPIError(error);\n\n const formikErrors = normalizedError.errors.reduce((acc, error) => {\n acc[error.values?.path?.length || 'destination'] = error.defaultMessage;\n\n return acc;\n }, {});\n\n if (!isEmpty(formikErrors)) {\n setErrors(formikErrors);\n }\n }\n };\n\n const handleClose = () => {\n onClose();\n };\n\n if (isLoading) {\n return (\n <ModalLayout onClose={handleClose} labelledBy=\"title\">\n <ModalBody>\n <Flex justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </Flex>\n </ModalBody>\n </ModalLayout>\n );\n }\n\n const initialFormData = {\n destination: {\n value: currentFolder?.id || '',\n label: currentFolder?.name || folderStructure[0].label,\n },\n };\n\n return (\n <ModalLayout onClose={handleClose} labelledBy=\"title\">\n <Formik validateOnChange={false} onSubmit={handleSubmit} initialValues={initialFormData}>\n {({ values, errors, setFieldValue }) => (\n <Form noValidate>\n <ModalHeader>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" tag=\"h2\" id=\"title\">\n {formatMessage({\n id: getTrad('modal.folder.move.title'),\n defaultMessage: 'Move elements to',\n })}\n </Typography>\n </ModalHeader>\n\n <ModalBody>\n <Grid gap={4}>\n <GridItem xs={12} col={12}>\n <Field.Root id=\"folder-destination\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.folder-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n options={folderStructure}\n onChange={(value) => {\n setFieldValue('destination', value);\n }}\n defaultValue={values.destination}\n name=\"destination\"\n menuPortalTarget={document.querySelector('body')}\n inputId=\"folder-destination\"\n error={errors?.destination}\n ariaErrorMessage=\"destination-error\"\n />\n\n {errors.destination && (\n <Typography variant=\"pi\" tag=\"p\" textColor=\"danger600\">\n {errors.destination}\n </Typography>\n )}\n </Field.Root>\n </GridItem>\n </Grid>\n </ModalBody>\n\n <ModalFooter\n startActions={\n <Button onClick={handleClose} variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\" loading={isLoading}>\n {formatMessage({ id: 'modal.folder.move.submit', defaultMessage: 'Move' })}\n </Button>\n }\n />\n </Form>\n )}\n </Formik>\n </ModalLayout>\n );\n};\n\nBulkMoveDialog.defaultProps = {\n currentFolder: undefined,\n};\n\nBulkMoveDialog.propTypes = {\n onClose: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(FolderDefinition, AssetDefinition).isRequired,\n};\n","import React, { useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { Folder } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { BulkMoveDialog } from '../../../../components/BulkMoveDialog';\nimport { AssetDefinition, FolderDefinition } from '../../../../constants';\n\nexport const BulkMoveButton = ({ selected, onSuccess, currentFolder }) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\n\n const handleConfirmMove = () => {\n setShowConfirmDialog(false);\n onSuccess();\n };\n\n return (\n <>\n <Button\n variant=\"secondary\"\n size=\"S\"\n startIcon={<Folder />}\n onClick={() => setShowConfirmDialog(true)}\n >\n {formatMessage({ id: 'global.move', defaultMessage: 'Move' })}\n </Button>\n\n {showConfirmDialog && (\n <BulkMoveDialog\n currentFolder={currentFolder}\n onClose={handleConfirmMove}\n selected={selected}\n />\n )}\n </>\n );\n};\n\nBulkMoveButton.defaultProps = {\n currentFolder: undefined,\n};\n\nBulkMoveButton.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n};\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { AssetDefinition, FolderDefinition } from '../../../../constants';\nimport getTrad from '../../../../utils/getTrad';\n\nimport { BulkDeleteButton } from './BulkDeleteButton';\nimport { BulkMoveButton } from './BulkMoveButton';\n\nexport const BulkActions = ({ selected, onSuccess, currentFolder }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={2} paddingBottom={5}>\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: getTrad('list.assets.selected'),\n defaultMessage:\n '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected',\n },\n {\n numberFolders: selected.filter(({ type }) => type === 'folder').length,\n numberAssets: selected.filter(({ type }) => type === 'asset').length,\n }\n )}\n </Typography>\n\n <BulkDeleteButton selected={selected} onSuccess={onSuccess} />\n <BulkMoveButton currentFolder={currentFolder} selected={selected} onSuccess={onSuccess} />\n </Flex>\n );\n};\n\nBulkActions.defaultProps = {\n currentFolder: undefined,\n};\n\nBulkActions.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n currentFolder: FolderDefinition,\n selected: PropTypes.arrayOf(AssetDefinition, FolderDefinition).isRequired,\n};\n","import React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyPermissions } from '@strapi/icons/symbols';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { EmptyAssets } from '../../../../components/EmptyAssets';\nimport { getTrad } from '../../../../utils';\n\nconst getContentIntlMessage = ({ isFiltering, canCreate, canRead }) => {\n if (isFiltering) {\n return {\n id: 'list.assets-empty.title-withSearch',\n defaultMessage: 'There are no elements with the applied filters',\n };\n }\n\n if (canRead) {\n if (canCreate) {\n return {\n id: 'list.assets.empty-upload',\n defaultMessage: 'Upload your first assets...',\n };\n }\n\n return {\n id: 'list.assets.empty',\n defaultMessage: 'Media Library is empty',\n };\n }\n\n return {\n id: 'header.actions.no-permissions',\n defaultMessage: 'No permissions to view',\n };\n};\n\nexport const EmptyOrNoPermissions = ({ canCreate, isFiltering, canRead, onActionClick }) => {\n const { formatMessage } = useIntl();\n const content = getContentIntlMessage({ isFiltering, canCreate, canRead });\n\n return (\n <EmptyAssets\n icon={!canRead ? EmptyPermissions : undefined}\n action={\n canCreate &&\n !isFiltering && (\n <Button variant=\"secondary\" startIcon={<Plus />} onClick={onActionClick}>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Button>\n )\n }\n content={formatMessage({\n ...content,\n id: getTrad(content.id),\n })}\n />\n );\n};\n\nEmptyOrNoPermissions.propTypes = {\n canCreate: PropTypes.bool.isRequired,\n canRead: PropTypes.bool.isRequired,\n isFiltering: PropTypes.bool.isRequired,\n onActionClick: PropTypes.func.isRequired,\n};\n","import React, { useRef, useState } from 'react';\n\nimport { useTracking, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Button } from '@strapi/design-system';\nimport { Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport FilterList from '../../../../components/FilterList';\nimport FilterPopover from '../../../../components/FilterPopover';\nimport displayedFilters from '../../../../utils/displayedFilters';\n\nexport const Filters = () => {\n const buttonRef = useRef(null);\n const [isVisible, setVisible] = useState(false);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams();\n const filters = query?.filters?.$and || [];\n\n const toggleFilter = () => setVisible((prev) => !prev);\n\n const handleRemoveFilter = (nextFilters) => {\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n const handleSubmit = (filters) => {\n trackUsage('didFilterMediaLibraryElements', {\n location: 'content-manager',\n filter: Object.keys(filters[filters.length - 1])[0],\n });\n setQuery({ filters: { $and: filters }, page: 1 });\n };\n\n return (\n <>\n <Button\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<Filter />}\n onClick={toggleFilter}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n {isVisible && (\n <FilterPopover\n displayedFilters={displayedFilters}\n filters={filters}\n onSubmit={handleSubmit}\n onToggle={toggleFilter}\n source={buttonRef}\n />\n )}\n <FilterList\n appliedFilters={filters}\n filtersSchema={displayedFilters}\n onRemoveFilter={handleRemoveFilter}\n />\n </>\n );\n};\n","import React from 'react';\n\nimport { useQueryParams, Layouts } from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Link } from '@strapi/design-system';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { Breadcrumbs } from '../../../../components/Breadcrumbs';\nimport { BreadcrumbsDefinition, FolderDefinition } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nexport const Header = ({\n breadcrumbs,\n canCreate,\n folder,\n onToggleEditFolderDialog,\n onToggleUploadAssetDialog,\n}) => {\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const backQuery = {\n ...query,\n folder: folder?.parent?.id ?? undefined,\n folderPath: folder?.parent?.path ?? undefined,\n };\n\n return (\n <Layouts.Header\n title={formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: `Media Library`,\n })}\n subtitle={\n breadcrumbs &&\n folder && (\n <Breadcrumbs\n tag=\"nav\"\n label={formatMessage({\n id: getTrad('header.breadcrumbs.nav.label'),\n defaultMessage: 'Folders navigation',\n })}\n breadcrumbs={breadcrumbs}\n currentFolderId={folder?.id}\n />\n )\n }\n navigationAction={\n folder && (\n <Link\n startIcon={<ArrowLeft />}\n to={`${pathname}?${stringify(backQuery, { encode: false })}`}\n >\n {formatMessage({\n id: getTrad('header.actions.folder-level-up'),\n defaultMessage: 'Back',\n })}\n </Link>\n )\n }\n primaryAction={\n canCreate && (\n <Flex gap={2}>\n <Button startIcon={<Plus />} variant=\"secondary\" onClick={onToggleEditFolderDialog}>\n {formatMessage({\n id: getTrad('header.actions.add-folder'),\n defaultMessage: 'Add new folder',\n })}\n </Button>\n\n <Button startIcon={<Plus />} onClick={onToggleUploadAssetDialog}>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Button>\n </Flex>\n )\n }\n />\n );\n};\n\nHeader.defaultProps = {\n breadcrumbs: false,\n folder: null,\n};\n\nHeader.propTypes = {\n breadcrumbs: PropTypes.oneOfType([BreadcrumbsDefinition, PropTypes.bool]),\n canCreate: PropTypes.bool.isRequired,\n folder: FolderDefinition,\n onToggleEditFolderDialog: PropTypes.func.isRequired,\n onToggleUploadAssetDialog: PropTypes.func.isRequired,\n};\n","import React, { useRef, useState } from 'react';\n\nimport {\n Page,\n SearchInput,\n Pagination,\n useTracking,\n useQueryParams,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n BaseCheckbox,\n Box,\n Divider,\n Flex,\n GridItem,\n IconButton,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Cog, GridFour as Grid, List, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link as ReactRouterLink, useNavigate, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { AssetGridList } from '../../../components/AssetGridList';\nimport { EditAssetDialog } from '../../../components/EditAssetDialog';\nimport { EditFolderDialog } from '../../../components/EditFolderDialog';\nimport {\n FolderCard,\n FolderCardBody,\n FolderCardBodyAction,\n FolderCardCheckbox,\n} from '../../../components/FolderCard';\nimport { FolderGridList } from '../../../components/FolderGridList';\nimport SortPicker from '../../../components/SortPicker';\nimport { TableList } from '../../../components/TableList';\nimport { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog';\nimport { localStorageKeys, viewOptions } from '../../../constants';\nimport { useAssets } from '../../../hooks/useAssets';\nimport { useFolder } from '../../../hooks/useFolder';\nimport { useFolders } from '../../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';\nimport { usePersistentState } from '../../../hooks/usePersistentState';\nimport { useSelectionState } from '../../../hooks/useSelectionState';\nimport { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../../utils';\n\nimport { BulkActions } from './components/BulkActions';\nimport { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions';\nimport { Filters } from './components/Filters';\nimport { Header } from './components/Header';\n\nconst BoxWithHeight = styled(Box)`\n height: 3.2rem;\n display: flex;\n align-items: center;\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 100%;\n`;\n\nconst ActionContainer = styled(Box)`\n svg {\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\nexport const MediaLibrary = () => {\n const navigate = useNavigate();\n const {\n canRead,\n canCreate,\n canUpdate,\n canCopyLink,\n canDownload,\n canConfigureView,\n isLoading: permissionsLoading,\n } = useMediaLibraryPermissions();\n const currentFolderToEditRef = useRef();\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const { trackUsage } = useTracking();\n const [{ query }, setQuery] = useQueryParams();\n const isFiltering = Boolean(query._q || query.filters);\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n const {\n data: assetsData,\n isLoading: assetsLoading,\n errors: assetsError,\n } = useAssets({\n skipWhen: !canRead,\n query,\n });\n\n const {\n data: foldersData,\n isLoading: foldersLoading,\n errors: foldersError,\n } = useFolders({\n enabled: canRead && assetsData?.pagination?.page === 1 && !containsAssetFilter(query),\n query,\n });\n\n const {\n data: currentFolder,\n isLoading: isCurrentFolderLoading,\n error: currentFolderError,\n } = useFolder(query?.folder, {\n enabled: canRead && !!query?.folder,\n });\n\n // Folder was not found: redirect to the media library root\n if (currentFolderError?.response?.status === 404) {\n navigate(pathname);\n }\n\n const folders =\n foldersData?.map((folder) => ({\n ...folder,\n type: 'folder',\n folderURL: getFolderURL(pathname, query, folder.id),\n isSelectable: canUpdate,\n })) ?? [];\n const folderCount = folders?.length || 0;\n const assets =\n assetsData?.results?.map((asset) => ({ ...asset, type: 'asset', isSelectable: canUpdate })) ||\n [];\n const assetCount = assets?.length ?? 0;\n const totalAssetCount = assetsData?.pagination?.total;\n\n const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading;\n const [showUploadAssetDialog, setShowUploadAssetDialog] = useState(false);\n const [showEditFolderDialog, setShowEditFolderDialog] = useState(false);\n const [assetToEdit, setAssetToEdit] = useState(undefined);\n const [folderToEdit, setFolderToEdit] = useState(undefined);\n const [selected, { selectOne, selectAll }] = useSelectionState(['type', 'id'], []);\n const indeterminateBulkSelect =\n selected?.length > 0 && selected?.length !== assetCount + folderCount;\n const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev);\n const toggleEditFolderDialog = ({ created = false } = {}) => {\n // folders are only displayed on the first page, therefore\n // we have to navigate the user to that page, in case a folder\n // was created successfully in order for them to see it\n if (created && query?.page !== '1') {\n setQuery({\n ...query,\n page: 1,\n });\n }\n\n setShowEditFolderDialog((prev) => !prev);\n };\n\n const handleBulkSelect = (event, elements) => {\n if (event.target.checked) {\n trackUsage('didSelectAllMediaLibraryElements');\n }\n\n selectAll(elements);\n };\n\n const handleChangeSort = (value) => {\n trackUsage('didSortMediaLibraryElements', {\n location: 'upload',\n sort: value,\n });\n setQuery({ sort: value });\n };\n\n const handleEditFolder = (folder) => {\n setFolderToEdit(folder);\n setShowEditFolderDialog(true);\n };\n\n const handleEditFolderClose = (payload) => {\n setFolderToEdit(null);\n toggleEditFolderDialog(payload);\n\n if (currentFolderToEditRef.current) {\n currentFolderToEditRef.current.focus();\n }\n };\n\n const handleAssetDeleted = (numberOfAssets) => {\n if (\n numberOfAssets === assetCount &&\n assetsData.pagination.page === assetsData.pagination.pageCount &&\n assetsData.pagination.page > 1\n ) {\n setQuery({\n ...query,\n page: assetsData.pagination.page - 1,\n });\n }\n };\n\n const handleBulkActionSuccess = () => {\n selectAll();\n\n handleAssetDeleted(selected.length);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (assetsError || foldersError) {\n return <Page.Error />;\n }\n\n return (\n <Layouts.Root>\n <Page.Main>\n <Header\n breadcrumbs={\n !isCurrentFolderLoading && getBreadcrumbDataML(currentFolder, { pathname, query })\n }\n canCreate={canCreate}\n onToggleEditFolderDialog={toggleEditFolderDialog}\n onToggleUploadAssetDialog={toggleUploadAssetDialog}\n folder={currentFolder}\n />\n <Layouts.Action\n startActions={\n <>\n {canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && (\n <BoxWithHeight\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n hasRadius\n borderColor=\"neutral200\"\n >\n <BaseCheckbox\n aria-label={formatMessage({\n id: getTrad('bulk.select.label'),\n defaultMessage: 'Select all folders & assets',\n })}\n indeterminate={indeterminateBulkSelect}\n value={\n (assetCount > 0 || folderCount > 0) &&\n selected.length === assetCount + folderCount\n }\n onChange={(e) => handleBulkSelect(e, [...assets, ...folders])}\n />\n </BoxWithHeight>\n )}\n {canRead && isGridView && (\n <SortPicker value={query?.sort} onChangeSort={handleChangeSort} />\n )}\n {canRead && <Filters />}\n </>\n }\n endActions={\n <>\n {canConfigureView ? (\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n tag={ReactRouterLink}\n to={{\n pathname: `${pathname}/configuration`,\n search: stringify(query, { encode: false }),\n }}\n label={formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n >\n <Cog />\n </IconButton>\n </ActionContainer>\n ) : null}\n <ActionContainer paddingTop={1} paddingBottom={1}>\n <IconButton\n label={\n isGridView\n ? formatMessage({\n id: getTrad('view-switch.list'),\n defaultMessage: 'List View',\n })\n : formatMessage({\n id: getTrad('view-switch.grid'),\n defaultMessage: 'Grid View',\n })\n }\n onClick={() => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)}\n >\n {isGridView ? <List /> : <Grid />}\n </IconButton>\n </ActionContainer>\n <SearchInput\n label={formatMessage({\n id: getTrad('search.label'),\n defaultMessage: 'Search for an asset',\n })}\n trackedEvent=\"didSearchMediaLibraryElements\"\n trackedEventDetails={{ location: 'upload' }}\n />\n </>\n }\n />\n\n <Layouts.Content>\n {selected.length > 0 && (\n <BulkActions\n currentFolder={currentFolder}\n selected={selected}\n onSuccess={handleBulkActionSuccess}\n />\n )}\n\n {folderCount === 0 && assetCount === 0 && (\n <EmptyOrNoPermissions\n canCreate={canCreate}\n canRead={canRead}\n isFiltering={isFiltering}\n onActionClick={toggleUploadAssetDialog}\n />\n )}\n\n {/* TODO: fix AssetListTable should handle no assets views (loading) */}\n {canRead && !isGridView && (assetCount > 0 || folderCount > 0) && (\n <TableList\n assetCount={assetCount}\n folderCount={folderCount}\n indeterminate={indeterminateBulkSelect}\n onChangeSort={handleChangeSort}\n onChangeFolder={(folderID, folderPath) =>\n navigate(getFolderURL(pathname, query, { folder: folderID, folderPath }))\n }\n onEditAsset={setAssetToEdit}\n onEditFolder={handleEditFolder}\n onSelectOne={selectOne}\n onSelectAll={handleBulkSelect}\n rows={[...folders, ...assets]}\n selected={selected}\n shouldDisableBulkSelect={!canUpdate}\n sortQuery={query?.sort ?? ''}\n />\n )}\n\n {canRead && isGridView && (\n <>\n {folderCount > 0 && (\n <FolderGridList\n title={\n // Folders title should only appear if:\n // user is filtering and there are assets to display, to divide both type of elements\n // user is not filtering\n (((isFiltering && assetCount > 0) || !isFiltering) &&\n formatMessage(\n {\n id: getTrad('list.folders.title'),\n defaultMessage: 'Folders ({count})',\n },\n { count: folderCount }\n )) ||\n ''\n }\n >\n {folders.map((folder) => {\n const selectedFolders = selected.filter(({ type }) => type === 'folder');\n const isSelected = !!selectedFolders.find(\n (currentFolder) => currentFolder.id === folder.id\n );\n\n const url = getFolderURL(pathname, query, {\n folder: folder?.id,\n folderPath: folder?.path,\n });\n\n return (\n <GridItem col={3} key={`folder-${folder.id}`}>\n <FolderCard\n ref={\n folderToEdit && folder.id === folderToEdit.id\n ? currentFolderToEditRef\n : undefined\n }\n ariaLabel={folder.name}\n id={`folder-${folder.id}`}\n to={url}\n startAction={\n selectOne && folder.isSelectable ? (\n <FolderCardCheckbox\n data-testid={`folder-checkbox-${folder.id}`}\n value={isSelected}\n onChange={() => selectOne(folder)}\n />\n ) : null\n }\n cardActions={\n <IconButton\n aria-label={formatMessage({\n id: getTrad('list.folder.edit'),\n defaultMessage: 'Edit folder',\n })}\n onClick={() => handleEditFolder(folder)}\n >\n <Pencil />\n </IconButton>\n }\n >\n <FolderCardBody>\n <FolderCardBodyAction to={url}>\n <Flex tag=\"h2\" direction=\"column\" alignItems=\"start\" maxWidth=\"100%\">\n <TypographyMaxWidth fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n <VisuallyHidden>:</VisuallyHidden>\n </TypographyMaxWidth>\n\n <TypographyMaxWidth\n tag=\"span\"\n textColor=\"neutral600\"\n variant=\"pi\"\n ellipsis\n >\n {formatMessage(\n {\n id: getTrad('list.folder.subtitle'),\n defaultMessage:\n '{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} one {# asset} other {# assets}}',\n },\n {\n folderCount: folder.children.count,\n filesCount: folder.files.count,\n }\n )}\n </TypographyMaxWidth>\n </Flex>\n </FolderCardBodyAction>\n </FolderCardBody>\n </FolderCard>\n </GridItem>\n );\n })}\n </FolderGridList>\n )}\n\n {assetCount > 0 && folderCount > 0 && (\n <Box paddingTop={6} paddingBottom={4}>\n <Divider />\n </Box>\n )}\n\n {assetCount > 0 && (\n <AssetGridList\n assets={assets}\n onEditAsset={setAssetToEdit}\n onSelectAsset={selectOne}\n selectedAssets={selected.filter(({ type }) => type === 'asset')}\n title={\n // Assets title should only appear if:\n // - user is not filtering\n // - user is filtering and there are folders to display, to separate them\n // - user is on page 1 since folders won't appear on any other page than the first one (no need to visually separate them)\n ((!isFiltering || (isFiltering && folderCount > 0)) &&\n assetsData?.pagination?.page === 1 &&\n formatMessage(\n {\n id: getTrad('list.assets.title'),\n defaultMessage: 'Assets ({count})',\n },\n { count: totalAssetCount }\n )) ||\n ''\n }\n />\n )}\n </>\n )}\n <Pagination.Root {...assetsData.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n </Page.Main>\n\n {showUploadAssetDialog && (\n <UploadAssetDialog\n onClose={toggleUploadAssetDialog}\n trackedLocation=\"upload\"\n folderId={query?.folder}\n />\n )}\n\n {showEditFolderDialog && (\n <EditFolderDialog\n onClose={handleEditFolderClose}\n folder={folderToEdit}\n parentFolderId={query?.folder}\n location=\"upload\"\n />\n )}\n\n {assetToEdit && (\n <EditAssetDialog\n onClose={(editedAsset) => {\n // The asset has been deleted\n if (editedAsset === null) {\n handleAssetDeleted(1);\n }\n\n setAssetToEdit(undefined);\n }}\n asset={assetToEdit}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation=\"upload\"\n />\n )}\n </Layouts.Root>\n );\n};\n","import React, { lazy, Suspense, useEffect } from 'react';\n\nimport { Page, useQueryParams } from '@strapi/admin/strapi-admin';\n\nimport { useIntl } from 'react-intl';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { useConfig } from '../../hooks/useConfig';\nimport { getTrad } from '../../utils';\n\nimport { MediaLibrary } from './MediaLibrary';\n\nconst ConfigureTheView = lazy(() => import('./ConfigureTheView'));\n\nconst Upload = () => {\n const {\n config: { isLoading, isError, data: config },\n } = useConfig();\n\n const [{ rawQuery }, setQuery] = useQueryParams();\n const { formatMessage } = useIntl();\n const title = formatMessage({ id: getTrad('plugin.name'), defaultMessage: 'Media Library' });\n\n useEffect(() => {\n if (isLoading || isError || rawQuery) {\n return;\n }\n setQuery({ sort: config.sort, page: 1, pageSize: config.pageSize });\n }, [isLoading, isError, config, rawQuery, setQuery]);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>{title}</Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n return (\n <Page.Main>\n {rawQuery ? (\n <Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route index element={<MediaLibrary />} />\n <Route path=\"configuration\" element={<ConfigureTheView config={config} />} />\n </Routes>\n </Suspense>\n ) : null}\n </Page.Main>\n );\n};\n\nexport default Upload;\n"],"names":["error","filters","ReactRouterLink","Grid","currentFolder"],"mappings":"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"}
@@ -60,7 +60,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path) => {
60
60
  });
61
61
  };
62
62
  const name$1 = "@strapi/upload";
63
- const version = "5.0.0-beta.6";
63
+ const version = "5.0.0-beta.7";
64
64
  const description = "Makes it easy to upload images and files to your Strapi Application.";
65
65
  const license = "SEE LICENSE IN LICENSE";
66
66
  const author = {
@@ -100,18 +100,15 @@ const scripts = {
100
100
  clean: "run -T rimraf dist",
101
101
  lint: "run -T eslint .",
102
102
  "test:front": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js",
103
- "test:front:ce": "run -T cross-env IS_EE=false jest --config ./jest.config.front.js",
104
- "test:front:watch": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js --watchAll",
105
- "test:front:watch:ce": "run -T cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll",
106
103
  "test:unit": "run -T jest",
107
104
  "test:unit:watch": "run -T jest --watch",
108
105
  watch: "pack-up watch"
109
106
  };
110
107
  const dependencies = {
111
- "@strapi/design-system": "2.0.0-beta.3",
112
- "@strapi/icons": "2.0.0-beta.3",
113
- "@strapi/provider-upload-local": "5.0.0-beta.6",
114
- "@strapi/utils": "5.0.0-beta.6",
108
+ "@strapi/design-system": "2.0.0-beta.4",
109
+ "@strapi/icons": "2.0.0-beta.4",
110
+ "@strapi/provider-upload-local": "5.0.0-beta.7",
111
+ "@strapi/utils": "5.0.0-beta.7",
115
112
  "byte-size": "8.1.1",
116
113
  cropperjs: "1.6.1",
117
114
  "date-fns": "2.30.0",
@@ -133,12 +130,12 @@ const dependencies = {
133
130
  yup: "0.32.9"
134
131
  };
135
132
  const devDependencies = {
136
- "@strapi/admin": "5.0.0-beta.6",
133
+ "@strapi/admin": "5.0.0-beta.7",
137
134
  "@strapi/pack-up": "5.0.0",
138
- "@strapi/types": "5.0.0-beta.6",
139
- "@testing-library/dom": "9.2.0",
140
- "@testing-library/react": "14.0.0",
141
- "@testing-library/user-event": "14.4.3",
135
+ "@strapi/types": "5.0.0-beta.7",
136
+ "@testing-library/dom": "10.1.0",
137
+ "@testing-library/react": "15.0.7",
138
+ "@testing-library/user-event": "14.5.2",
142
139
  "@types/fs-extra": "11.0.4",
143
140
  "@types/koa": "2.13.4",
144
141
  "@types/koa-range": "0.3.5",
@@ -147,8 +144,8 @@ const devDependencies = {
147
144
  koa: "2.15.2",
148
145
  "koa-body": "6.0.1",
149
146
  msw: "1.3.0",
150
- react: "^18.2.0",
151
- "react-dom": "^18.2.0",
147
+ react: "18.3.1",
148
+ "react-dom": "18.3.1",
152
149
  "react-router-dom": "6.22.3",
153
150
  "styled-components": "6.1.8"
154
151
  };
@@ -1713,26 +1710,33 @@ const CroppingActions = ({ onCancel, onValidate, onDuplicate }) => {
1713
1710
  id: getTrad("control-card.stop-crop"),
1714
1711
  defaultMessage: "Stop cropping"
1715
1712
  }),
1716
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Cross, {}),
1717
- onClick: onCancel
1713
+ onClick: onCancel,
1714
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Cross, {})
1718
1715
  }
1719
1716
  ),
1720
1717
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Root, { children: [
1721
- /* @__PURE__ */ jsxRuntime.jsxs(Trigger, { variant: "tertiary", paddingLeft: 2, paddingRight: 2, endIcon: null, children: [
1722
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { tag: "span", children: formatMessage({
1723
- id: getTrad("control-card.crop"),
1724
- defaultMessage: "Crop"
1725
- }) }),
1726
- /* @__PURE__ */ jsxRuntime.jsx(
1727
- icons.Check,
1728
- {
1729
- "aria-hidden": true,
1730
- focusable: false,
1731
- style: { position: "relative", top: 2 },
1732
- fill: "#C0C0D0"
1733
- }
1734
- )
1735
- ] }),
1718
+ /* @__PURE__ */ jsxRuntime.jsx(
1719
+ Trigger,
1720
+ {
1721
+ "aria-label": formatMessage({
1722
+ id: getTrad("control-card.crop"),
1723
+ defaultMessage: "Crop"
1724
+ }),
1725
+ variant: "tertiary",
1726
+ paddingLeft: 2,
1727
+ paddingRight: 2,
1728
+ endIcon: null,
1729
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1730
+ icons.Check,
1731
+ {
1732
+ "aria-hidden": true,
1733
+ focusable: false,
1734
+ style: { position: "relative", top: 2 },
1735
+ fill: "#C0C0D0"
1736
+ }
1737
+ )
1738
+ }
1739
+ ),
1736
1740
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { zIndex: 5, children: [
1737
1741
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Item, { onSelect: onValidate, children: formatMessage({
1738
1742
  id: getTrad("checkControl.crop-original"),
@@ -1885,8 +1889,8 @@ const PreviewBox = ({
1885
1889
  id: "global.delete",
1886
1890
  defaultMessage: "Delete"
1887
1891
  }),
1888
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}),
1889
- onClick: () => setShowConfirmDialog(true)
1892
+ onClick: () => setShowConfirmDialog(true),
1893
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
1890
1894
  }
1891
1895
  ),
1892
1896
  canDownload && /* @__PURE__ */ jsxRuntime.jsx(
@@ -1896,8 +1900,8 @@ const PreviewBox = ({
1896
1900
  id: getTrad("control-card.download"),
1897
1901
  defaultMessage: "Download"
1898
1902
  }),
1899
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Download, {}),
1900
- onClick: () => downloadFile(assetUrl, asset.name)
1903
+ onClick: () => downloadFile(assetUrl, asset.name),
1904
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Download, {})
1901
1905
  }
1902
1906
  ),
1903
1907
  canCopyLink && /* @__PURE__ */ jsxRuntime.jsx(CopyLinkButton, { url: assetUrl }),
@@ -1905,8 +1909,8 @@ const PreviewBox = ({
1905
1909
  designSystem.IconButton,
1906
1910
  {
1907
1911
  label: formatMessage({ id: getTrad("control-card.crop"), defaultMessage: "Crop" }),
1908
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Crop, {}),
1909
- onClick: handleCropStart
1912
+ onClick: handleCropStart,
1913
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Crop, {})
1910
1914
  }
1911
1915
  )
1912
1916
  ] }) }),
@@ -2718,16 +2722,16 @@ const AssetCardBase = ({
2718
2722
  id: getTrad("control-card.remove-selection"),
2719
2723
  defaultMessage: "Remove from selection"
2720
2724
  }),
2721
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}),
2722
- onClick: onRemove
2725
+ onClick: onRemove,
2726
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
2723
2727
  }
2724
2728
  ),
2725
2729
  onEdit && /* @__PURE__ */ jsxRuntime.jsx(
2726
2730
  designSystem.IconButton,
2727
2731
  {
2728
2732
  label: formatMessage({ id: getTrad("control-card.edit"), defaultMessage: "Edit" }),
2729
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {}),
2730
- onClick: onEdit
2733
+ onClick: onEdit,
2734
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
2731
2735
  }
2732
2736
  )
2733
2737
  ] }),
@@ -3616,7 +3620,7 @@ const TableRows = ({
3616
3620
  }),
3617
3621
  to: folderURL,
3618
3622
  onClick: () => !folderURL && onChangeFolder(id2),
3619
- noBorder: true,
3623
+ borderWidth: 0,
3620
3624
  children: /* @__PURE__ */ jsxRuntime.jsx(icons.Eye, {})
3621
3625
  }
3622
3626
  ),
@@ -3628,7 +3632,7 @@ const TableRows = ({
3628
3632
  defaultMessage: "Edit"
3629
3633
  }),
3630
3634
  onClick: () => contentType === "asset" ? onEditAsset(element) : onEditFolder(element),
3631
- noBorder: true,
3635
+ borderWidth: 0,
3632
3636
  children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
3633
3637
  }
3634
3638
  )
@@ -3702,7 +3706,7 @@ const TableList = ({
3702
3706
  {
3703
3707
  label: sortLabel,
3704
3708
  onClick: () => handleClickSort(isSorted, name2),
3705
- noBorder: true,
3709
+ borderWidth: 0,
3706
3710
  children: isUp ? /* @__PURE__ */ jsxRuntime.jsx(icons.CaretUp, {}) : /* @__PURE__ */ jsxRuntime.jsx(icons.CaretDown, {})
3707
3711
  }
3708
3712
  ),
@@ -4599,7 +4603,7 @@ const SearchAsset = ({ onChangeSearch, queryValue }) => {
4599
4603
  }
4600
4604
  ) }) });
4601
4605
  }
4602
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Search, {}), label: "Search", onClick: handleToggle });
4606
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { label: "Search", onClick: handleToggle, children: /* @__PURE__ */ jsxRuntime.jsx(icons.Search, {}) });
4603
4607
  };
4604
4608
  SearchAsset.defaultProps = {
4605
4609
  queryValue: null
@@ -4717,7 +4721,6 @@ const BrowseStep = ({
4717
4721
  /* @__PURE__ */ jsxRuntime.jsx(ActionContainer, { paddingTop: 1, paddingBottom: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
4718
4722
  designSystem.IconButton,
4719
4723
  {
4720
- icon: isGridView ? /* @__PURE__ */ jsxRuntime.jsx(icons.List, {}) : /* @__PURE__ */ jsxRuntime.jsx(icons.GridFour, {}),
4721
4724
  label: isGridView ? formatMessage({
4722
4725
  id: "view-switch.list",
4723
4726
  defaultMessage: "List View"
@@ -4725,7 +4728,8 @@ const BrowseStep = ({
4725
4728
  id: "view-switch.grid",
4726
4729
  defaultMessage: "Grid View"
4727
4730
  }),
4728
- onClick: () => setView(isGridView ? viewOptions.LIST : viewOptions.GRID)
4731
+ onClick: () => setView(isGridView ? viewOptions.LIST : viewOptions.GRID),
4732
+ children: isGridView ? /* @__PURE__ */ jsxRuntime.jsx(icons.List, {}) : /* @__PURE__ */ jsxRuntime.jsx(icons.GridFour, {})
4729
4733
  }
4730
4734
  ) }),
4731
4735
  /* @__PURE__ */ jsxRuntime.jsx(SearchAsset, { onChangeSearch, queryValue: queryObject._q || "" })
@@ -4809,12 +4813,13 @@ const BrowseStep = ({
4809
4813
  cardActions: onEditFolder && /* @__PURE__ */ jsxRuntime.jsx(
4810
4814
  designSystem.IconButton,
4811
4815
  {
4812
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {}),
4813
- "aria-label": formatMessage({
4816
+ withTooltip: false,
4817
+ label: formatMessage({
4814
4818
  id: getTrad("list.folder.edit"),
4815
4819
  defaultMessage: "Edit folder"
4816
4820
  }),
4817
- onClick: () => onEditFolder(folder)
4821
+ onClick: () => onEditFolder(folder),
4822
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
4818
4823
  }
4819
4824
  ),
4820
4825
  children: /* @__PURE__ */ jsxRuntime.jsx(FolderCardBody, { children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -6026,8 +6031,8 @@ const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset })
6026
6031
  id: getTrad("control-card.add"),
6027
6032
  defaultMessage: "Add"
6028
6033
  }),
6029
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
6030
- onClick: () => onAddAsset(asset)
6034
+ onClick: () => onAddAsset(asset),
6035
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {})
6031
6036
  }
6032
6037
  ),
6033
6038
  /* @__PURE__ */ jsxRuntime.jsx(CopyLinkButton, { url: prefixFileUrlWithBackendUrl(asset.url) }),
@@ -6038,8 +6043,8 @@ const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset })
6038
6043
  id: "global.delete",
6039
6044
  defaultMessage: "Delete"
6040
6045
  }),
6041
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}),
6042
- onClick: () => onDeleteAsset(asset)
6046
+ onClick: () => onDeleteAsset(asset),
6047
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
6043
6048
  }
6044
6049
  ),
6045
6050
  onEditAsset && /* @__PURE__ */ jsxRuntime.jsx(
@@ -6049,8 +6054,8 @@ const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset })
6049
6054
  id: getTrad("control-card.edit"),
6050
6055
  defaultMessage: "edit"
6051
6056
  }),
6052
- icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {}),
6053
- onClick: onEditAsset
6057
+ onClick: onEditAsset,
6058
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
6054
6059
  }
6055
6060
  )
6056
6061
  ] });
@@ -6493,7 +6498,8 @@ const index = {
6493
6498
  defaultMessage: "Media Library"
6494
6499
  },
6495
6500
  permissions: PERMISSIONS.main,
6496
- Component: () => Promise.resolve().then(() => require("./index-BbFs7_Gx.js"))
6501
+ Component: () => Promise.resolve().then(() => require("./index-DwWG14v6.js")),
6502
+ position: 4
6497
6503
  });
6498
6504
  app.addSettingsLink("global", {
6499
6505
  id: "media-library-settings",
@@ -6502,7 +6508,7 @@ const index = {
6502
6508
  defaultMessage: "Media Library"
6503
6509
  },
6504
6510
  to: "media-library",
6505
- Component: () => Promise.resolve().then(() => require("./index-BxUjcUMp.js")),
6511
+ Component: () => Promise.resolve().then(() => require("./index-De1W-cb7.js")),
6506
6512
  permissions: PERMISSIONS.settings
6507
6513
  });
6508
6514
  app.addFields({ type: "media", Component: MediaLibraryInput });
@@ -6571,4 +6577,4 @@ exports.useMediaLibraryPermissions = useMediaLibraryPermissions;
6571
6577
  exports.usePersistentState = usePersistentState;
6572
6578
  exports.useSelectionState = useSelectionState;
6573
6579
  exports.viewOptions = viewOptions;
6574
- //# sourceMappingURL=index-PKgX3DYk.js.map
6580
+ //# sourceMappingURL=index-C7nlFYgw.js.map