{"version":3,"file":"SettingsPage-DjNyJDaf.mjs","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","data"],"mappings":"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"}