{"version":3,"file":"ConfigureTheView-Dk28Sh2k.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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"}