@strapi/upload 5.3.0 → 5.4.1

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 (118) hide show
  1. package/dist/_chunks/{index-Bl2-6oC8.js → App-DeNaeOad.js} +94 -87
  2. package/dist/_chunks/App-DeNaeOad.js.map +1 -0
  3. package/dist/_chunks/{index-DCAQ4hHN.mjs → App-qgVMMoa7.mjs} +94 -87
  4. package/dist/_chunks/App-qgVMMoa7.mjs.map +1 -0
  5. package/dist/_chunks/{index-BM9Ayh_r.js → ConfigureTheView-AK7hc1C0.js} +42 -23
  6. package/dist/_chunks/ConfigureTheView-AK7hc1C0.js.map +1 -0
  7. package/dist/_chunks/{index-C_cWV2yS.mjs → ConfigureTheView-C30XDPKG.mjs} +24 -23
  8. package/dist/_chunks/ConfigureTheView-C30XDPKG.mjs.map +1 -0
  9. package/dist/_chunks/{index-C1MSWEyZ.js → SettingsPage-C60zLXmE.js} +61 -41
  10. package/dist/_chunks/SettingsPage-C60zLXmE.js.map +1 -0
  11. package/dist/_chunks/{index-BWIqjWzC.mjs → SettingsPage-DV0sB7xY.mjs} +45 -43
  12. package/dist/_chunks/SettingsPage-DV0sB7xY.mjs.map +1 -0
  13. package/dist/_chunks/{index-BwEfHu6y.mjs → index-DFekBoCC.mjs} +142 -236
  14. package/dist/_chunks/index-DFekBoCC.mjs.map +1 -0
  15. package/dist/_chunks/{index-YwynuEzj.js → index-DwVjDEMt.js} +119 -214
  16. package/dist/_chunks/index-DwVjDEMt.js.map +1 -0
  17. package/dist/admin/index.js +2 -2
  18. package/dist/admin/index.mjs +2 -2
  19. package/dist/admin/src/components/AssetCard/AssetCardBase.d.ts +1 -1
  20. package/dist/admin/src/components/AssetCard/UploadingAssetCard.d.ts +1 -1
  21. package/dist/admin/src/components/AssetCard/VideoPreview.d.ts +1 -1
  22. package/dist/admin/src/components/AssetDialog/BrowseStep/{index.d.ts → BrowseStep.d.ts} +1 -1
  23. package/dist/admin/src/components/AssetDialog/BrowseStep/PageSize.d.ts +2 -2
  24. package/dist/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.d.ts +4 -0
  25. package/dist/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.d.ts +9 -0
  26. package/dist/admin/src/components/AssetDialog/BrowseStep/SearchAsset/{index.d.ts → SearchAsset.d.ts} +2 -2
  27. package/dist/admin/src/components/AssetGridList/{index.d.ts → AssetGridList.d.ts} +1 -2
  28. package/dist/admin/src/components/Breadcrumbs/Breadcrumbs.d.ts +1 -2
  29. package/dist/admin/src/components/EditFolderDialog/EditFolderDialog.d.ts +3 -1
  30. package/dist/admin/src/components/EditFolderDialog/RemoveFolderDialog.d.ts +1 -1
  31. package/dist/admin/src/components/FilterList/{index.d.ts → FilterList.d.ts} +3 -3
  32. package/dist/admin/src/components/FilterList/FilterTag.d.ts +3 -3
  33. package/dist/admin/src/components/FilterPopover/{index.d.ts → FilterPopover.d.ts} +3 -3
  34. package/dist/admin/src/components/FilterPopover/FilterValueInput.d.ts +2 -2
  35. package/dist/admin/src/components/FilterPopover/utils/getFilterList.d.ts +2 -2
  36. package/dist/admin/src/components/FolderGridList/FolderGridList.d.ts +1 -2
  37. package/dist/admin/src/components/MediaLibraryDialog/{index.d.ts → MediaLibraryDialog.d.ts} +1 -2
  38. package/dist/admin/src/components/MediaLibraryInput/{index.d.ts → MediaLibraryInput.d.ts} +2 -2
  39. package/dist/admin/src/components/SelectTree/Option.d.ts +2 -2
  40. package/dist/admin/src/components/SelectTree/SelectTree.d.ts +2 -3
  41. package/dist/admin/src/components/SelectTree/utils/flattenTree.d.ts +1 -1
  42. package/dist/admin/src/components/SelectTree/utils/getOpenValues.d.ts +2 -2
  43. package/dist/admin/src/components/SelectTree/utils/getValuesToClose.d.ts +2 -2
  44. package/dist/admin/src/components/SortPicker/{index.d.ts → SortPicker.d.ts} +2 -2
  45. package/dist/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.d.ts +1 -1
  46. package/dist/admin/src/components/UploadAssetDialog/UploadAssetDialog.d.ts +1 -1
  47. package/dist/admin/src/{newConstants.d.ts → constants.d.ts} +1 -0
  48. package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
  49. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  50. package/dist/admin/src/hooks/useFolderStructure.d.ts +1 -1
  51. package/dist/admin/src/hooks/useModalQueryParams.d.ts +1 -2
  52. package/dist/admin/src/hooks/useSelectionState.d.ts +1 -1
  53. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  54. package/dist/admin/src/index.d.ts +3 -0
  55. package/dist/admin/src/pages/App/App.d.ts +1 -0
  56. package/dist/admin/src/pages/App/ConfigureTheView/ConfigureTheView.d.ts +6 -0
  57. package/dist/admin/src/pages/App/ConfigureTheView/components/Settings.d.ts +13 -0
  58. package/dist/admin/src/pages/App/ConfigureTheView/state/actionTypes.d.ts +2 -0
  59. package/dist/admin/src/pages/App/ConfigureTheView/state/actions.d.ts +12 -0
  60. package/dist/admin/src/pages/App/ConfigureTheView/state/init.d.ts +8 -0
  61. package/dist/admin/src/pages/App/ConfigureTheView/state/reducer.d.ts +15 -0
  62. package/dist/admin/src/pages/App/MediaLibrary/MediaLibrary.d.ts +1 -0
  63. package/dist/admin/src/pages/App/MediaLibrary/components/BulkActions.d.ts +15 -0
  64. package/dist/admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.d.ts +7 -0
  65. package/dist/admin/src/pages/App/MediaLibrary/components/BulkMoveButton.d.ts +15 -0
  66. package/dist/admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.d.ts +7 -0
  67. package/dist/admin/src/pages/App/MediaLibrary/components/Filters.d.ts +1 -0
  68. package/dist/admin/src/pages/App/MediaLibrary/components/Header.d.ts +22 -0
  69. package/dist/admin/src/pages/App/components/BulkActions.d.ts +15 -0
  70. package/dist/admin/src/pages/App/components/BulkDeleteButton.d.ts +10 -0
  71. package/dist/admin/src/pages/App/components/BulkMoveButton.d.ts +15 -0
  72. package/dist/admin/src/pages/App/components/EmptyOrNoPermissions.d.ts +8 -0
  73. package/dist/admin/src/pages/App/components/Filters.d.ts +1 -0
  74. package/dist/admin/src/pages/App/components/Header.d.ts +13 -0
  75. package/dist/admin/src/pages/SettingsPage/SettingsPage.d.ts +2 -0
  76. package/dist/admin/src/pages/SettingsPage/init.d.ts +2 -0
  77. package/dist/admin/src/pages/SettingsPage/reducer.d.ts +27 -0
  78. package/dist/admin/src/pluginId.d.ts +0 -1
  79. package/dist/admin/src/utils/getBreadcrumbDataML.d.ts +1 -1
  80. package/dist/admin/src/utils/rawFileToAsset.d.ts +2 -2
  81. package/dist/admin/src/utils/toSingularTypes.d.ts +0 -1
  82. package/dist/admin/src/utils/typeFromMime.d.ts +1 -1
  83. package/dist/admin/src/utils/urlsToAssets.d.ts +2 -2
  84. package/dist/shared/contracts/settings.d.ts +3 -2
  85. package/package.json +8 -8
  86. package/dist/_chunks/index-BM9Ayh_r.js.map +0 -1
  87. package/dist/_chunks/index-BWIqjWzC.mjs.map +0 -1
  88. package/dist/_chunks/index-Bl2-6oC8.js.map +0 -1
  89. package/dist/_chunks/index-BwEfHu6y.mjs.map +0 -1
  90. package/dist/_chunks/index-C1MSWEyZ.js.map +0 -1
  91. package/dist/_chunks/index-C_cWV2yS.mjs.map +0 -1
  92. package/dist/_chunks/index-DCAQ4hHN.mjs.map +0 -1
  93. package/dist/_chunks/index-YwynuEzj.js.map +0 -1
  94. package/dist/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/PaginationContext.d.ts +0 -9
  95. package/dist/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/components.d.ts +0 -15
  96. package/dist/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/index.d.ts +0 -9
  97. package/dist/admin/src/components/Breadcrumbs/index.d.ts +0 -1
  98. package/dist/admin/src/components/BulkMoveDialog/index.d.ts +0 -1
  99. package/dist/admin/src/components/ContextInfo/index.d.ts +0 -1
  100. package/dist/admin/src/components/EditFolderDialog/ModalHeader/index.d.ts +0 -2
  101. package/dist/admin/src/components/EditFolderDialog/index.d.ts +0 -1
  102. package/dist/admin/src/components/FolderCard/FolderCard/index.d.ts +0 -1
  103. package/dist/admin/src/components/FolderCard/FolderCardBody/index.d.ts +0 -1
  104. package/dist/admin/src/components/FolderCard/FolderCardCheckbox/index.d.ts +0 -1
  105. package/dist/admin/src/components/FolderCard/index.d.ts +0 -4
  106. package/dist/admin/src/components/FolderGridList/index.d.ts +0 -1
  107. package/dist/admin/src/components/SelectTree/index.d.ts +0 -2
  108. /package/dist/admin/src/components/AssetDialog/{index.d.ts → AssetDialog.d.ts} +0 -0
  109. /package/dist/admin/src/components/AssetDialog/SelectedStep/{index.d.ts → SelectedStep.d.ts} +0 -0
  110. /package/dist/admin/src/components/CopyLinkButton/{index.d.ts → CopyLinkButton.d.ts} +0 -0
  111. /package/dist/admin/src/components/EditAssetDialog/{index.d.ts → EditAssetContent.d.ts} +0 -0
  112. /package/dist/admin/src/components/EditAssetDialog/PreviewBox/{index.d.ts → PreviewBox.d.ts} +0 -0
  113. /package/dist/admin/src/components/EditAssetDialog/PreviewBox/{components.d.ts → PreviewComponents.d.ts} +0 -0
  114. /package/dist/admin/src/components/EmptyAssets/{index.d.ts → EmptyAssets.d.ts} +0 -0
  115. /package/dist/admin/src/components/FolderCard/FolderCardBodyAction/{index.d.ts → FolderCardBodyAction.d.ts} +0 -0
  116. /package/dist/admin/src/components/TableList/{index.d.ts → TableList.d.ts} +0 -0
  117. /package/dist/admin/src/components/UploadProgress/{index.d.ts → UploadProgress.d.ts} +0 -0
  118. /package/dist/admin/src/hooks/utils/{rename-keys.d.ts → renameKeys.d.ts} +0 -0
@@ -6,10 +6,9 @@ const strapiAdmin = require("@strapi/admin/strapi-admin");
6
6
  const designSystem = require("@strapi/design-system");
7
7
  const icons = require("@strapi/icons");
8
8
  const isEqual = require("lodash/isEqual");
9
- const PropTypes = require("prop-types");
10
9
  const reactIntl = require("react-intl");
11
10
  const reactRouterDom = require("react-router-dom");
12
- const index = require("./index-YwynuEzj.js");
11
+ const index = require("./index-DwVjDEMt.js");
13
12
  require("byte-size");
14
13
  require("date-fns");
15
14
  require("qs");
@@ -17,8 +16,26 @@ const immer = require("immer");
17
16
  const get = require("lodash/get");
18
17
  const set = require("lodash/set");
19
18
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
19
+ function _interopNamespace(e) {
20
+ if (e && e.__esModule)
21
+ return e;
22
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
23
+ if (e) {
24
+ for (const k in e) {
25
+ if (k !== "default") {
26
+ const d = Object.getOwnPropertyDescriptor(e, k);
27
+ Object.defineProperty(n, k, d.get ? d : {
28
+ enumerable: true,
29
+ get: () => e[k]
30
+ });
31
+ }
32
+ }
33
+ }
34
+ n.default = e;
35
+ return Object.freeze(n);
36
+ }
37
+ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
20
38
  const isEqual__default = /* @__PURE__ */ _interopDefault(isEqual);
21
- const PropTypes__default = /* @__PURE__ */ _interopDefault(PropTypes);
22
39
  const get__default = /* @__PURE__ */ _interopDefault(get);
23
40
  const set__default = /* @__PURE__ */ _interopDefault(set);
24
41
  const Settings = ({ sort = "", pageSize = 10, onChange: onChange2 }) => {
@@ -98,14 +115,12 @@ const Settings = ({ sort = "", pageSize = 10, onChange: onChange2 }) => {
98
115
  }
99
116
  );
100
117
  };
101
- Settings.propTypes = {
102
- sort: PropTypes__default.default.string.isRequired,
103
- pageSize: PropTypes__default.default.number.isRequired,
104
- onChange: PropTypes__default.default.func.isRequired
105
- };
106
118
  const ON_CHANGE = `${index.pluginId}/ON_CHANGE`;
107
119
  const SET_LOADED = `${index.pluginId}/SET_LOADED`;
108
- const onChange = ({ name, value }) => ({
120
+ const onChange = ({
121
+ name,
122
+ value
123
+ }) => ({
109
124
  type: ON_CHANGE,
110
125
  keys: name,
111
126
  value
@@ -131,7 +146,9 @@ const reducer = (state = initialState, action = {
131
146
  immer.produce(state, (draftState) => {
132
147
  switch (action.type) {
133
148
  case ON_CHANGE: {
134
- set__default.default(draftState, ["modifiedData", ...action.keys.split(".")], action.value);
149
+ if ("keys" in action && "value" in action && action.keys) {
150
+ set__default.default(draftState, ["modifiedData", ...action.keys.split(".")], action.value);
151
+ }
135
152
  break;
136
153
  }
137
154
  case SET_LOADED: {
@@ -151,9 +168,14 @@ const ConfigureTheView = ({ config }) => {
151
168
  const { toggleNotification } = strapiAdmin.useNotification();
152
169
  const { mutateConfig } = index.useConfig();
153
170
  const { isLoading: isSubmittingForm } = mutateConfig;
154
- const [showWarningSubmit, setWarningSubmit] = React.useState(false);
171
+ const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
155
172
  const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);
156
- const [reducerState, dispatch] = React.useReducer(reducer, initialState, () => init(config));
173
+ const [reducerState, dispatch] = React__namespace.useReducer(
174
+ reducer,
175
+ initialState,
176
+ () => init(config)
177
+ );
178
+ const typedDispatch = dispatch;
157
179
  const { initialData, modifiedData } = reducerState;
158
180
  const handleSubmit = (e) => {
159
181
  e.preventDefault();
@@ -163,7 +185,7 @@ const ConfigureTheView = ({ config }) => {
163
185
  trackUsage("willEditMediaLibraryConfig");
164
186
  await mutateConfig.mutateAsync(modifiedData);
165
187
  setWarningSubmit(false);
166
- dispatch(setLoaded());
188
+ typedDispatch(setLoaded());
167
189
  toggleNotification({
168
190
  type: "success",
169
191
  message: formatMessage({
@@ -172,8 +194,10 @@ const ConfigureTheView = ({ config }) => {
172
194
  })
173
195
  });
174
196
  };
175
- const handleChange = ({ target: { name, value } }) => {
176
- dispatch(onChange({ name, value }));
197
+ const handleChange = ({
198
+ target: { name, value }
199
+ }) => {
200
+ typedDispatch(onChange({ name, value }));
177
201
  };
178
202
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Layouts.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Main, { "aria-busy": isSubmittingForm, children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, children: [
179
203
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -218,17 +242,12 @@ const ConfigureTheView = ({ config }) => {
218
242
  onChange: handleChange
219
243
  }
220
244
  ) }),
245
+ "x",
221
246
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, { onConfirm: handleConfirm, variant: "default", children: formatMessage({
222
247
  id: index.getTrad("config.popUpWarning.warning.updateAllSettings"),
223
248
  defaultMessage: "This will modify all your settings"
224
249
  }) }) })
225
250
  ] }) }) });
226
251
  };
227
- ConfigureTheView.propTypes = {
228
- config: PropTypes__default.default.shape({
229
- pageSize: PropTypes__default.default.number,
230
- sort: PropTypes__default.default.string
231
- }).isRequired
232
- };
233
- exports.default = ConfigureTheView;
234
- //# sourceMappingURL=index-BM9Ayh_r.js.map
252
+ exports.ConfigureTheView = ConfigureTheView;
253
+ //# sourceMappingURL=ConfigureTheView-AK7hc1C0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigureTheView-AK7hc1C0.js","sources":["../../admin/src/pages/App/ConfigureTheView/components/Settings.tsx","../../admin/src/pages/App/ConfigureTheView/state/actionTypes.ts","../../admin/src/pages/App/ConfigureTheView/state/actions.ts","../../admin/src/pages/App/ConfigureTheView/state/init.ts","../../admin/src/pages/App/ConfigureTheView/state/reducer.ts","../../admin/src/pages/App/ConfigureTheView/ConfigureTheView.tsx"],"sourcesContent":["import { Box, Grid, SingleSelectOption, SingleSelect, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { pageSizes, sortOptions } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport type { Configuration } from '../../../../../../shared/contracts/configuration';\n\ninterface SettingsProps {\n sort: string;\n pageSize: string | number;\n onChange: ({\n target: { name, value },\n }: {\n target: { name: keyof Configuration; value: string | number };\n }) => void;\n}\n\nconst Settings = ({ sort = '', pageSize = 10, onChange }: SettingsProps) => {\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.Root gap={4}>\n <Grid.Item s={12} col={6} direction=\"column\" alignItems=\"stretch\">\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 </Grid.Item>\n <Grid.Item s={12} col={6} direction=\"column\" alignItems=\"stretch\">\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 </Grid.Item>\n </Grid.Root>\n </Box>\n );\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\nimport type { InitialState } from './init';\n\nexport const onChange = ({\n name,\n value,\n}: {\n name: keyof NonNullable<InitialState['initialData']>;\n value: number | string;\n}) => ({\n type: ON_CHANGE,\n keys: name,\n value,\n});\n\nexport const setLoaded = () => ({\n type: SET_LOADED,\n});\n","import type { Configuration } from '../../../../../../shared/contracts/configuration';\n\nexport type InitialState = {\n initialData: Partial<Configuration>;\n modifiedData: Partial<Configuration>;\n};\n\nconst initialState: InitialState = {\n initialData: {},\n modifiedData: {},\n};\n\nconst init = (configData: InitialState['initialData']): InitialState => {\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\nimport type { InitialState } from './init';\n\nexport interface ActionOnChange {\n type: string;\n keys?: string;\n value: string | number;\n}\n\nexport interface ActionSetLoaded {\n type: string;\n}\n\ninterface ActionInitialValue {\n type: string;\n}\n\nexport type Action = ActionSetLoaded | ActionOnChange | ActionInitialValue;\n\nexport const reducer = (\n state: InitialState = initialState,\n action: Action = {\n type: '',\n }\n) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case ON_CHANGE: {\n if ('keys' in action && 'value' in action && action.keys) {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n }\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","// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {\n ConfirmDialog,\n useTracking,\n useNotification,\n Page,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Dialog, Link } from '@strapi/design-system';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\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';\n\nimport { Settings } from './components/Settings';\nimport { onChange, setLoaded } from './state/actions';\nimport { init, initialState } from './state/init';\nimport { reducer } from './state/reducer';\n\nimport type { InitialState } from './state/init';\nimport type { Action } from './state/reducer';\nimport type { Configuration } from '../../../../../shared/contracts/configuration';\n\ninterface ConfigureTheViewProps {\n config: Configuration;\n}\n\nexport const ConfigureTheView = ({ config }: ConfigureTheViewProps) => {\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] = React.useState(false);\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n const [reducerState, dispatch] = React.useReducer(\n reducer,\n initialState,\n (): InitialState => init(config)\n );\n const typedDispatch: React.Dispatch<Action> = dispatch;\n const { initialData, modifiedData } = reducerState;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n toggleWarningSubmit();\n };\n\n const handleConfirm = async () => {\n trackUsage('willEditMediaLibraryConfig');\n await mutateConfig.mutateAsync(modifiedData as Configuration);\n setWarningSubmit(false);\n typedDispatch(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 = ({\n target: { name, value },\n }: {\n target: { name: keyof Configuration; value: string | number };\n }) => {\n typedDispatch(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 <Layouts.Content>\n <Settings\n data-testid=\"settings\"\n pageSize={modifiedData.pageSize || ''}\n sort={modifiedData.sort || ''}\n onChange={handleChange}\n />\n </Layouts.Content>\n x\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleConfirm} variant=\"default\">\n {formatMessage({\n id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n"],"names":["onChange","useIntl","jsx","Box","jsxs","Grid","Field","getTrad","SingleSelect","pageSizes","pageSize","SingleSelectOption","sortOptions","pluginId","produce","set","get","useTracking","useNotification","useConfig","React","Layouts","Page","Link","NavLink","ArrowLeft","Button","Check","isEqual","Dialog","ConfirmDialog"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useState, useReducer } from "react";
2
+ import * as React from "react";
3
3
  import { useTracking, useNotification, Layouts, Page, ConfirmDialog } from "@strapi/admin/strapi-admin";
4
4
  import { Box, Grid, Field, SingleSelect, SingleSelectOption, Link, Button, Dialog } from "@strapi/design-system";
5
5
  import { ArrowLeft, Check } from "@strapi/icons";
6
6
  import isEqual from "lodash/isEqual";
7
- import PropTypes from "prop-types";
8
7
  import { useIntl } from "react-intl";
9
8
  import { NavLink } from "react-router-dom";
10
- import { g as getTrad, H as pageSizes, I as sortOptions, p as pluginId, G as useConfig } from "./index-BwEfHu6y.mjs";
9
+ import { g as getTrad, C as pageSizes, D as sortOptions, p as pluginId, z as useConfig } from "./index-DFekBoCC.mjs";
11
10
  import "byte-size";
12
11
  import "date-fns";
13
12
  import "qs";
@@ -91,14 +90,12 @@ const Settings = ({ sort = "", pageSize = 10, onChange: onChange2 }) => {
91
90
  }
92
91
  );
93
92
  };
94
- Settings.propTypes = {
95
- sort: PropTypes.string.isRequired,
96
- pageSize: PropTypes.number.isRequired,
97
- onChange: PropTypes.func.isRequired
98
- };
99
93
  const ON_CHANGE = `${pluginId}/ON_CHANGE`;
100
94
  const SET_LOADED = `${pluginId}/SET_LOADED`;
101
- const onChange = ({ name, value }) => ({
95
+ const onChange = ({
96
+ name,
97
+ value
98
+ }) => ({
102
99
  type: ON_CHANGE,
103
100
  keys: name,
104
101
  value
@@ -124,7 +121,9 @@ const reducer = (state = initialState, action = {
124
121
  produce(state, (draftState) => {
125
122
  switch (action.type) {
126
123
  case ON_CHANGE: {
127
- set(draftState, ["modifiedData", ...action.keys.split(".")], action.value);
124
+ if ("keys" in action && "value" in action && action.keys) {
125
+ set(draftState, ["modifiedData", ...action.keys.split(".")], action.value);
126
+ }
128
127
  break;
129
128
  }
130
129
  case SET_LOADED: {
@@ -144,9 +143,14 @@ const ConfigureTheView = ({ config }) => {
144
143
  const { toggleNotification } = useNotification();
145
144
  const { mutateConfig } = useConfig();
146
145
  const { isLoading: isSubmittingForm } = mutateConfig;
147
- const [showWarningSubmit, setWarningSubmit] = useState(false);
146
+ const [showWarningSubmit, setWarningSubmit] = React.useState(false);
148
147
  const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);
149
- const [reducerState, dispatch] = useReducer(reducer, initialState, () => init(config));
148
+ const [reducerState, dispatch] = React.useReducer(
149
+ reducer,
150
+ initialState,
151
+ () => init(config)
152
+ );
153
+ const typedDispatch = dispatch;
150
154
  const { initialData, modifiedData } = reducerState;
151
155
  const handleSubmit = (e) => {
152
156
  e.preventDefault();
@@ -156,7 +160,7 @@ const ConfigureTheView = ({ config }) => {
156
160
  trackUsage("willEditMediaLibraryConfig");
157
161
  await mutateConfig.mutateAsync(modifiedData);
158
162
  setWarningSubmit(false);
159
- dispatch(setLoaded());
163
+ typedDispatch(setLoaded());
160
164
  toggleNotification({
161
165
  type: "success",
162
166
  message: formatMessage({
@@ -165,8 +169,10 @@ const ConfigureTheView = ({ config }) => {
165
169
  })
166
170
  });
167
171
  };
168
- const handleChange = ({ target: { name, value } }) => {
169
- dispatch(onChange({ name, value }));
172
+ const handleChange = ({
173
+ target: { name, value }
174
+ }) => {
175
+ typedDispatch(onChange({ name, value }));
170
176
  };
171
177
  return /* @__PURE__ */ jsx(Layouts.Root, { children: /* @__PURE__ */ jsx(Page.Main, { "aria-busy": isSubmittingForm, children: /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, children: [
172
178
  /* @__PURE__ */ jsx(
@@ -211,19 +217,14 @@ const ConfigureTheView = ({ config }) => {
211
217
  onChange: handleChange
212
218
  }
213
219
  ) }),
220
+ "x",
214
221
  /* @__PURE__ */ jsx(Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleConfirm, variant: "default", children: formatMessage({
215
222
  id: getTrad("config.popUpWarning.warning.updateAllSettings"),
216
223
  defaultMessage: "This will modify all your settings"
217
224
  }) }) })
218
225
  ] }) }) });
219
226
  };
220
- ConfigureTheView.propTypes = {
221
- config: PropTypes.shape({
222
- pageSize: PropTypes.number,
223
- sort: PropTypes.string
224
- }).isRequired
225
- };
226
227
  export {
227
- ConfigureTheView as default
228
+ ConfigureTheView
228
229
  };
229
- //# sourceMappingURL=index-C_cWV2yS.mjs.map
230
+ //# sourceMappingURL=ConfigureTheView-C30XDPKG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigureTheView-C30XDPKG.mjs","sources":["../../admin/src/pages/App/ConfigureTheView/components/Settings.tsx","../../admin/src/pages/App/ConfigureTheView/state/actionTypes.ts","../../admin/src/pages/App/ConfigureTheView/state/actions.ts","../../admin/src/pages/App/ConfigureTheView/state/init.ts","../../admin/src/pages/App/ConfigureTheView/state/reducer.ts","../../admin/src/pages/App/ConfigureTheView/ConfigureTheView.tsx"],"sourcesContent":["import { Box, Grid, SingleSelectOption, SingleSelect, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { pageSizes, sortOptions } from '../../../../constants';\nimport { getTrad } from '../../../../utils';\n\nimport type { Configuration } from '../../../../../../shared/contracts/configuration';\n\ninterface SettingsProps {\n sort: string;\n pageSize: string | number;\n onChange: ({\n target: { name, value },\n }: {\n target: { name: keyof Configuration; value: string | number };\n }) => void;\n}\n\nconst Settings = ({ sort = '', pageSize = 10, onChange }: SettingsProps) => {\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.Root gap={4}>\n <Grid.Item s={12} col={6} direction=\"column\" alignItems=\"stretch\">\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 </Grid.Item>\n <Grid.Item s={12} col={6} direction=\"column\" alignItems=\"stretch\">\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 </Grid.Item>\n </Grid.Root>\n </Box>\n );\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\nimport type { InitialState } from './init';\n\nexport const onChange = ({\n name,\n value,\n}: {\n name: keyof NonNullable<InitialState['initialData']>;\n value: number | string;\n}) => ({\n type: ON_CHANGE,\n keys: name,\n value,\n});\n\nexport const setLoaded = () => ({\n type: SET_LOADED,\n});\n","import type { Configuration } from '../../../../../../shared/contracts/configuration';\n\nexport type InitialState = {\n initialData: Partial<Configuration>;\n modifiedData: Partial<Configuration>;\n};\n\nconst initialState: InitialState = {\n initialData: {},\n modifiedData: {},\n};\n\nconst init = (configData: InitialState['initialData']): InitialState => {\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\nimport type { InitialState } from './init';\n\nexport interface ActionOnChange {\n type: string;\n keys?: string;\n value: string | number;\n}\n\nexport interface ActionSetLoaded {\n type: string;\n}\n\ninterface ActionInitialValue {\n type: string;\n}\n\nexport type Action = ActionSetLoaded | ActionOnChange | ActionInitialValue;\n\nexport const reducer = (\n state: InitialState = initialState,\n action: Action = {\n type: '',\n }\n) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case ON_CHANGE: {\n if ('keys' in action && 'value' in action && action.keys) {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n }\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","// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport {\n ConfirmDialog,\n useTracking,\n useNotification,\n Page,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Dialog, Link } from '@strapi/design-system';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\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';\n\nimport { Settings } from './components/Settings';\nimport { onChange, setLoaded } from './state/actions';\nimport { init, initialState } from './state/init';\nimport { reducer } from './state/reducer';\n\nimport type { InitialState } from './state/init';\nimport type { Action } from './state/reducer';\nimport type { Configuration } from '../../../../../shared/contracts/configuration';\n\ninterface ConfigureTheViewProps {\n config: Configuration;\n}\n\nexport const ConfigureTheView = ({ config }: ConfigureTheViewProps) => {\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] = React.useState(false);\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n const [reducerState, dispatch] = React.useReducer(\n reducer,\n initialState,\n (): InitialState => init(config)\n );\n const typedDispatch: React.Dispatch<Action> = dispatch;\n const { initialData, modifiedData } = reducerState;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n toggleWarningSubmit();\n };\n\n const handleConfirm = async () => {\n trackUsage('willEditMediaLibraryConfig');\n await mutateConfig.mutateAsync(modifiedData as Configuration);\n setWarningSubmit(false);\n typedDispatch(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 = ({\n target: { name, value },\n }: {\n target: { name: keyof Configuration; value: string | number };\n }) => {\n typedDispatch(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 <Layouts.Content>\n <Settings\n data-testid=\"settings\"\n pageSize={modifiedData.pageSize || ''}\n sort={modifiedData.sort || ''}\n onChange={handleChange}\n />\n </Layouts.Content>\n x\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleConfirm} variant=\"default\">\n {formatMessage({\n id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </form>\n </Page.Main>\n </Layouts.Root>\n );\n};\n"],"names":["onChange","pageSize"],"mappings":"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"}
@@ -8,14 +8,32 @@ const icons = require("@strapi/icons");
8
8
  const isEqual = require("lodash/isEqual");
9
9
  const reactIntl = require("react-intl");
10
10
  const reactQuery = require("react-query");
11
- const index = require("./index-YwynuEzj.js");
11
+ const index = require("./index-DwVjDEMt.js");
12
12
  require("byte-size");
13
13
  require("date-fns");
14
14
  require("qs");
15
15
  const immer = require("immer");
16
16
  const set = require("lodash/set");
17
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
- const React__default = /* @__PURE__ */ _interopDefault(React);
18
+ function _interopNamespace(e) {
19
+ if (e && e.__esModule)
20
+ return e;
21
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
22
+ if (e) {
23
+ for (const k in e) {
24
+ if (k !== "default") {
25
+ const d = Object.getOwnPropertyDescriptor(e, k);
26
+ Object.defineProperty(n, k, d.get ? d : {
27
+ enumerable: true,
28
+ get: () => e[k]
29
+ });
30
+ }
31
+ }
32
+ }
33
+ n.default = e;
34
+ return Object.freeze(n);
35
+ }
36
+ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
19
37
  const isEqual__default = /* @__PURE__ */ _interopDefault(isEqual);
20
38
  const set__default = /* @__PURE__ */ _interopDefault(set);
21
39
  const init = (initialState2) => {
@@ -35,29 +53,26 @@ const initialState = {
35
53
  videoPreview: false
36
54
  }
37
55
  };
38
- const reducer = (state, action) => (
39
- // eslint-disable-next-line consistent-return
40
- immer.produce(state, (drafState) => {
41
- switch (action.type) {
42
- case "GET_DATA_SUCCEEDED": {
43
- drafState.initialData = action.data;
44
- drafState.modifiedData = action.data;
45
- break;
46
- }
47
- case "ON_CHANGE": {
48
- set__default.default(drafState, ["modifiedData", ...action.keys.split(".")], action.value);
49
- break;
50
- }
51
- default:
52
- return state;
56
+ const reducer = (state, action) => immer.produce(state, (drafState) => {
57
+ switch (action.type) {
58
+ case "GET_DATA_SUCCEEDED": {
59
+ drafState.initialData = action.data;
60
+ drafState.modifiedData = action.data;
61
+ break;
62
+ }
63
+ case "ON_CHANGE": {
64
+ set__default.default(drafState, ["modifiedData", ...action.keys.split(".")], action.value);
65
+ break;
53
66
  }
54
- })
55
- );
67
+ default:
68
+ return state;
69
+ }
70
+ });
56
71
  const SettingsPage = () => {
57
72
  const { formatMessage } = reactIntl.useIntl();
58
73
  const { toggleNotification } = strapiAdmin.useNotification();
59
74
  const { get, put } = strapiAdmin.useFetchClient();
60
- const [{ initialData, modifiedData }, dispatch] = React.useReducer(reducer, initialState, init);
75
+ const [{ initialData, modifiedData }, dispatch] = React__namespace.useReducer(reducer, initialState, init);
61
76
  const { data, isLoading, refetch } = reactQuery.useQuery({
62
77
  queryKey: ["upload", "settings"],
63
78
  async queryFn() {
@@ -67,7 +82,7 @@ const SettingsPage = () => {
67
82
  return data2;
68
83
  }
69
84
  });
70
- React__default.default.useEffect(() => {
85
+ React__namespace.useEffect(() => {
71
86
  if (data) {
72
87
  dispatch({
73
88
  type: "GET_DATA_SUCCEEDED",
@@ -76,21 +91,24 @@ const SettingsPage = () => {
76
91
  }
77
92
  }, [data]);
78
93
  const isSaveButtonDisabled = isEqual__default.default(initialData, modifiedData);
79
- const { mutateAsync, isLoading: isSubmiting } = reactQuery.useMutation({
80
- async mutationFn(body) {
81
- return put("/upload/settings", body);
82
- },
83
- onSuccess() {
84
- refetch();
85
- toggleNotification({
86
- type: "success",
87
- message: formatMessage({ id: "notification.form.success.fields" })
88
- });
94
+ const { mutateAsync, isLoading: isSubmitting } = reactQuery.useMutation(
95
+ async (body) => {
96
+ const { data: data2 } = await put("/upload/settings", body);
97
+ return data2;
89
98
  },
90
- onError(err) {
91
- console.error(err);
99
+ {
100
+ onSuccess() {
101
+ refetch();
102
+ toggleNotification({
103
+ type: "success",
104
+ message: formatMessage({ id: "notification.form.success.fields" })
105
+ });
106
+ },
107
+ onError(err) {
108
+ console.error(err);
109
+ }
92
110
  }
93
- });
111
+ );
94
112
  const handleSubmit = async (e) => {
95
113
  e.preventDefault();
96
114
  if (isSaveButtonDisabled) {
@@ -98,7 +116,9 @@ const SettingsPage = () => {
98
116
  }
99
117
  await mutateAsync(modifiedData);
100
118
  };
101
- const handleChange = ({ target: { name, value } }) => {
119
+ const handleChange = ({
120
+ target: { name, value }
121
+ }) => {
102
122
  dispatch({
103
123
  type: "ON_CHANGE",
104
124
  keys: name,
@@ -125,7 +145,7 @@ const SettingsPage = () => {
125
145
  designSystem.Button,
126
146
  {
127
147
  disabled: isSaveButtonDisabled,
128
- loading: isSubmiting,
148
+ loading: isSubmitting,
129
149
  type: "submit",
130
150
  startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}),
131
151
  size: "S",
@@ -163,7 +183,7 @@ const SettingsPage = () => {
163
183
  /* @__PURE__ */ jsxRuntime.jsx(
164
184
  designSystem.Toggle,
165
185
  {
166
- checked: modifiedData.responsiveDimensions,
186
+ checked: modifiedData?.responsiveDimensions,
167
187
  offLabel: formatMessage({
168
188
  id: "app.components.ToggleCheckbox.off-label",
169
189
  defaultMessage: "Off"
@@ -199,7 +219,7 @@ const SettingsPage = () => {
199
219
  /* @__PURE__ */ jsxRuntime.jsx(
200
220
  designSystem.Toggle,
201
221
  {
202
- checked: modifiedData.sizeOptimization,
222
+ checked: modifiedData?.sizeOptimization,
203
223
  offLabel: formatMessage({
204
224
  id: "app.components.ToggleCheckbox.off-label",
205
225
  defaultMessage: "Off"
@@ -235,7 +255,7 @@ const SettingsPage = () => {
235
255
  /* @__PURE__ */ jsxRuntime.jsx(
236
256
  designSystem.Toggle,
237
257
  {
238
- checked: modifiedData.autoOrientation,
258
+ checked: modifiedData?.autoOrientation,
239
259
  offLabel: formatMessage({
240
260
  id: "app.components.ToggleCheckbox.off-label",
241
261
  defaultMessage: "Off"
@@ -261,6 +281,6 @@ const SettingsPage = () => {
261
281
  ] });
262
282
  };
263
283
  const ProtectedSettingsPage = () => /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions: index.PERMISSIONS.settings, children: /* @__PURE__ */ jsxRuntime.jsx(SettingsPage, {}) });
284
+ exports.ProtectedSettingsPage = ProtectedSettingsPage;
264
285
  exports.SettingsPage = SettingsPage;
265
- exports.default = ProtectedSettingsPage;
266
- //# sourceMappingURL=index-C1MSWEyZ.js.map
286
+ //# sourceMappingURL=SettingsPage-C60zLXmE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPage-C60zLXmE.js","sources":["../../admin/src/pages/SettingsPage/init.ts","../../admin/src/pages/SettingsPage/reducer.ts","../../admin/src/pages/SettingsPage/SettingsPage.tsx"],"sourcesContent":["import type { InitialState } from './reducer';\n\nexport const init = (initialState: InitialState) => {\n return initialState;\n};\n","import { produce } from 'immer';\nimport set from 'lodash/set';\n\nexport type InitialState = {\n initialData: {\n responsiveDimensions?: boolean;\n sizeOptimization?: boolean;\n autoOrientation?: boolean;\n videoPreview?: boolean;\n } | null;\n modifiedData: {\n responsiveDimensions?: boolean;\n sizeOptimization?: boolean;\n autoOrientation?: boolean;\n videoPreview?: boolean;\n } | null;\n};\n\ninterface ActionGetDataSucceeded {\n type: 'GET_DATA_SUCCEEDED';\n data: InitialState['initialData'];\n}\n\ninterface ActionOnChange {\n type: 'ON_CHANGE';\n keys: keyof NonNullable<InitialState['initialData']>;\n value: boolean;\n}\n\nexport type Action = ActionGetDataSucceeded | ActionOnChange;\n\nconst initialState: InitialState = {\n initialData: {\n responsiveDimensions: true,\n sizeOptimization: true,\n autoOrientation: false,\n videoPreview: false,\n },\n modifiedData: {\n responsiveDimensions: true,\n sizeOptimization: true,\n autoOrientation: false,\n videoPreview: false,\n },\n};\n\nconst reducer = (state: InitialState, action: Action) =>\n produce(state, (drafState) => {\n switch (action.type) {\n case 'GET_DATA_SUCCEEDED': {\n drafState.initialData = action.data;\n drafState.modifiedData = action.data;\n break;\n }\n case 'ON_CHANGE': {\n set(drafState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n default:\n return state;\n }\n });\n\nexport { initialState, reducer };\n","// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Grid, Toggle, Typography, Field } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { UpdateSettings } from '../../../../shared/contracts/settings';\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport { init } from './init';\nimport { initialState, reducer } from './reducer';\n\nimport type { InitialState } from './reducer';\n\nexport const SettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { get, put } = useFetchClient();\n\n const [{ initialData, modifiedData }, dispatch] = React.useReducer(reducer, initialState, init);\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: ['upload', 'settings'],\n async queryFn() {\n const {\n data: { data },\n } = await get('/upload/settings');\n\n return data;\n },\n });\n\n React.useEffect(() => {\n if (data) {\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data,\n });\n }\n }, [data]);\n\n const isSaveButtonDisabled = isEqual(initialData, modifiedData);\n\n const { mutateAsync, isLoading: isSubmitting } = useMutation<\n UpdateSettings.Response['data'],\n UpdateSettings.Response['error'],\n UpdateSettings.Request['body']\n >(\n async (body) => {\n const { data } = await put('/upload/settings', body);\n\n return data;\n },\n {\n onSuccess() {\n refetch();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.form.success.fields' }),\n });\n },\n onError(err) {\n console.error(err);\n },\n }\n );\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (isSaveButtonDisabled) {\n return;\n }\n\n await mutateAsync(modifiedData!);\n };\n\n const handleChange = ({\n target: { name, value },\n }: {\n target: { name: keyof NonNullable<InitialState['initialData']>; value: boolean };\n }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value,\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main tabIndex={-1}>\n <Page.Title>\n {formatMessage({\n id: getTrad('page.title'),\n defaultMessage: 'Settings - Media Libray',\n })}\n </Page.Title>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('settings.header.label'),\n defaultMessage: 'Media Library',\n })}\n primaryAction={\n <Button\n disabled={isSaveButtonDisabled}\n loading={isSubmitting}\n type=\"submit\"\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('settings.sub-header.label'),\n defaultMessage: 'Configure the settings for the Media Library',\n })}\n />\n <Layouts.Content>\n <Layouts.Root>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={12}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('settings.blockTitle'),\n defaultMessage: 'Asset management',\n })}\n </Typography>\n </Flex>\n <Grid.Root gap={6}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.responsiveDimensions.description'),\n defaultMessage:\n 'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',\n })}\n name=\"responsiveDimensions\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.responsiveDimensions.label'),\n defaultMessage: 'Responsive friendly upload',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.responsiveDimensions}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'responsiveDimensions', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.sizeOptimization.description'),\n defaultMessage:\n 'Enabling this option will reduce the image size and slightly reduce its quality.',\n })}\n name=\"sizeOptimization\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.sizeOptimization.label'),\n defaultMessage: 'Size optimization',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.sizeOptimization}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'sizeOptimization', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n hint={formatMessage({\n id: getTrad('settings.form.autoOrientation.description'),\n defaultMessage:\n 'Enabling this option will automatically rotate the image according to EXIF orientation tag.',\n })}\n name=\"autoOrientation\"\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('settings.form.autoOrientation.label'),\n defaultMessage: 'Auto orientation',\n })}\n </Field.Label>\n <Toggle\n checked={modifiedData?.autoOrientation}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n handleChange({\n target: { name: 'autoOrientation', value: e.target.checked },\n });\n }}\n />\n <Field.Hint />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n </Flex>\n </Layouts.Root>\n </Layouts.Content>\n </form>\n </Page.Main>\n );\n};\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n"],"names":["initialState","produce","set","useIntl","useNotification","useFetchClient","React","useQuery","data","isEqual","useMutation","jsx","Page","jsxs","getTrad","Layouts","Button","Check","Flex","Box","Typography","Grid","Field","Toggle","PERMISSIONS"],"mappings":"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"}