{"version":3,"file":"index-cQ1UWdta.mjs","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 { Box, Grid, GridItem, Option, Select } 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          <Select\n            label={formatMessage({\n              id: getTrad('config.entries.title'),\n              defaultMessage: 'Entries per page',\n            })}\n            hint={formatMessage({\n              id: getTrad('config.entries.note'),\n              defaultMessage: 'Number of assets displayed by default in the Media Library',\n            })}\n            onChange={(value) => onChange({ target: { name: 'pageSize', value } })}\n            name=\"pageSize\"\n            value={pageSize}\n          >\n            {pageSizes.map((pageSize) => (\n              <Option key={pageSize} value={pageSize}>\n                {pageSize}\n              </Option>\n            ))}\n          </Select>\n        </GridItem>\n        <GridItem s={12} col={6}>\n          <Select\n            label={formatMessage({\n              id: getTrad('config.sort.title'),\n              defaultMessage: 'Default sort order',\n            })}\n            hint={formatMessage({\n              id: getTrad('config.note'),\n              defaultMessage: 'Note: You can override this value in the media library.',\n            })}\n            onChange={(value) => onChange({ target: { name: 'sort', value } })}\n            name=\"sort\"\n            value={sort}\n            test-sort={sort}\n            data-testid=\"sort-select\"\n          >\n            {sortOptions.map((filter) => (\n              <Option\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              </Option>\n            ))}\n          </Select>\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 { Button, ContentLayout, HeaderLayout, Layout, Main } from '@strapi/design-system';\nimport {\n  ConfirmDialog,\n  Link,\n  useFocusWhenNavigate,\n  useNotification,\n  useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\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: {\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  useFocusWhenNavigate();\n\n  return (\n    <Layout>\n      <Main aria-busy={isSubmittingForm}>\n        <form onSubmit={handleSubmit}>\n          <HeaderLayout\n            navigationAction={\n              <Link startIcon={<ArrowLeft />} to={`/plugins/${pluginID}`} id=\"go-back\">\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          <ContentLayout>\n            <Settings\n              data-testid=\"settings\"\n              pageSize={modifiedData.pageSize || ''}\n              sort={modifiedData.sort || ''}\n              onChange={handleChange}\n            />\n          </ContentLayout>\n\n          <ConfirmDialog\n            bodyText={{\n              id: getTrad('config.popUpWarning.warning.updateAllSettings'),\n              defaultMessage: 'This will modify all your settings',\n            }}\n            iconRightButton={<Check />}\n            isConfirmButtonLoading={isSubmittingForm}\n            isOpen={showWarningSubmit}\n            onToggleDialog={toggleWarningSubmit}\n            onConfirm={handleConfirm}\n            variantRightButton=\"success-light\"\n          />\n        </form>\n      </Main>\n    </Layout>\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","pageSize","pluginID"],"mappings":"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"}