{"version":3,"file":"index-_gC-H8De.mjs","sources":["../../admin/src/pages/SettingsPage/init.js","../../admin/src/pages/SettingsPage/reducer.js","../../admin/src/pages/SettingsPage/index.jsx"],"sourcesContent":["const init = (initialState) => {\n  return initialState;\n};\n\nexport default init;\n","import produce from 'immer';\nimport set from 'lodash/set';\n\nconst 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, action) =>\n  // eslint-disable-next-line consistent-return\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 default reducer;\nexport { initialState };\n","import React, { useReducer } from 'react';\n\nimport {\n  Box,\n  Button,\n  ContentLayout,\n  Flex,\n  Grid,\n  GridItem,\n  HeaderLayout,\n  Layout,\n  Main,\n  ToggleInput,\n  Typography,\n} from '@strapi/design-system';\nimport {\n  CheckPagePermissions,\n  LoadingIndicatorPage,\n  useFetchClient,\n  useFocusWhenNavigate,\n  useNotification,\n  useOverlayBlocker,\n} from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nexport const SettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { lockApp, unlockApp } = useOverlayBlocker();\n  const toggleNotification = useNotification();\n  const { get, put } = useFetchClient();\n\n  useFocusWhenNavigate();\n\n  const [{ initialData, modifiedData }, dispatch] = 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: isSubmiting } = useMutation({\n    async mutationFn(body) {\n      return put('/upload/settings', body);\n    },\n    onSuccess() {\n      refetch();\n\n      toggleNotification({\n        type: 'success',\n        message: { id: 'notification.form.success.fields' },\n      });\n    },\n    onError(err) {\n      console.error(err);\n    },\n  });\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n\n    if (isSaveButtonDisabled) {\n      return;\n    }\n\n    lockApp();\n\n    await mutateAsync(modifiedData);\n\n    unlockApp();\n  };\n\n  const handleChange = ({ target: { name, value } }) => {\n    dispatch({\n      type: 'ON_CHANGE',\n      keys: name,\n      value,\n    });\n  };\n\n  return (\n    <Main tabIndex={-1}>\n      <Helmet\n        title={formatMessage({\n          id: getTrad('page.title'),\n          defaultMessage: 'Settings - Media Libray',\n        })}\n      />\n      <form onSubmit={handleSubmit}>\n        <HeaderLayout\n          title={formatMessage({\n            id: getTrad('settings.header.label'),\n            defaultMessage: 'Media Library',\n          })}\n          primaryAction={\n            <Button\n              disabled={isSaveButtonDisabled}\n              loading={isSubmiting}\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        <ContentLayout>\n          {isLoading ? (\n            <LoadingIndicatorPage />\n          ) : (\n            <Layout>\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\" as=\"h2\">\n                        {formatMessage({\n                          id: getTrad('settings.blockTitle'),\n                          defaultMessage: 'Asset management',\n                        })}\n                      </Typography>\n                    </Flex>\n                    <Grid gap={6}>\n                      <GridItem col={6} s={12}>\n                        <ToggleInput\n                          aria-label=\"responsiveDimensions\"\n                          checked={modifiedData.responsiveDimensions}\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                          label={formatMessage({\n                            id: getTrad('settings.form.responsiveDimensions.label'),\n                            defaultMessage: 'Responsive friendly upload',\n                          })}\n                          name=\"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                      </GridItem>\n                      <GridItem col={6} s={12}>\n                        <ToggleInput\n                          aria-label=\"sizeOptimization\"\n                          checked={modifiedData.sizeOptimization}\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                          label={formatMessage({\n                            id: getTrad('settings.form.sizeOptimization.label'),\n                            defaultMessage: 'Size optimization',\n                          })}\n                          name=\"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                      </GridItem>\n                      <GridItem col={6} s={12}>\n                        <ToggleInput\n                          aria-label=\"autoOrientation\"\n                          checked={modifiedData.autoOrientation}\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                          label={formatMessage({\n                            id: getTrad('settings.form.autoOrientation.label'),\n                            defaultMessage: 'Auto orientation',\n                          })}\n                          name=\"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                      </GridItem>\n                    </Grid>\n                  </Flex>\n                </Box>\n              </Flex>\n            </Layout>\n          )}\n        </ContentLayout>\n      </form>\n    </Main>\n  );\n};\n\nconst ProtectedSettingsPage = () => (\n  <CheckPagePermissions permissions={PERMISSIONS.settings}>\n    <SettingsPage />\n  </CheckPagePermissions>\n);\n\nexport default ProtectedSettingsPage;\n"],"names":["initialState","data","React"],"mappings":"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"}