{"version":3,"file":"LocalePicker.mjs","sources":["../../../admin/src/components/LocalePicker.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface Query extends I18nBaseQuery {\n  page?: number;\n}\n\nconst LocalePicker = () => {\n  const { formatMessage } = useIntl();\n  const [{ query }, setQuery] = useQueryParams<Query>();\n\n  const { hasI18n, canRead, canCreate } = useI18n();\n  const { data: locales = [] } = useGetLocalesQuery(undefined, {\n    skip: !hasI18n,\n  });\n\n  const handleChange = React.useCallback(\n    (code: string, replace = false) => {\n      setQuery(\n        {\n          page: 1,\n          plugins: { ...query.plugins, i18n: { locale: code } },\n        },\n        'push',\n        replace\n      );\n    },\n    [query.plugins, setQuery]\n  );\n\n  React.useEffect(() => {\n    if (!Array.isArray(locales) || !hasI18n) {\n      return;\n    }\n    /**\n     * Handle the case where the current locale query param doesn't exist\n     * in the list of available locales, so we redirect to the default locale\n     * when the user can read it, or the first locale they can read: the list\n     * cannot be displayed for the other locales.\n     */\n    const currentDesiredLocale = query.plugins?.i18n?.locale;\n    const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n    const readableLocales = locales.filter((locale) => canRead.includes(locale.code));\n    const targetLocale = readableLocales.find((locale) => locale.isDefault) ?? readableLocales[0];\n    if (!doesLocaleExist && targetLocale?.code) {\n      handleChange(targetLocale.code, true);\n    }\n  }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale, canRead]);\n\n  const sortedLocaleOptions = React.useMemo(() => {\n    const displayedLocales = Array.isArray(locales)\n      ? locales.filter((locale) => {\n          /**\n           * If you can create or read we allow you to see the locale exists\n           * this is because in the ListView, you may be able to create a new entry\n           * in a locale you can't read.\n           */\n          return canCreate.includes(locale.code) || canRead.includes(locale.code);\n        })\n      : [];\n\n    return displayedLocales\n      .sort((a, b) => a.name.localeCompare(b.name))\n      .map((locale) => (\n        <SingleSelectOption key={locale.id} value={locale.code}>\n          {locale.name}\n        </SingleSelectOption>\n      ));\n  }, [locales, canCreate, canRead]);\n\n  if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n    return null;\n  }\n\n  return (\n    <SingleSelect\n      size=\"S\"\n      aria-label={formatMessage({\n        id: getTranslation('actions.select-locale'),\n        defaultMessage: 'Select locale',\n      })}\n      value={query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code}\n      // @ts-expect-error – This can be removed in V2 of the DS.\n      onChange={handleChange}\n    >\n      {sortedLocaleOptions}\n    </SingleSelect>\n  );\n};\n\nexport { LocalePicker };\n"],"names":["LocalePicker","formatMessage","useIntl","query","setQuery","useQueryParams","hasI18n","canRead","canCreate","useI18n","data","locales","useGetLocalesQuery","undefined","skip","handleChange","React","useCallback","code","replace","page","plugins","i18n","locale","useEffect","Array","isArray","currentDesiredLocale","doesLocaleExist","find","loc","readableLocales","filter","includes","targetLocale","isDefault","sortedLocaleOptions","useMemo","displayedLocales","sort","a","b","name","localeCompare","map","_jsx","SingleSelectOption","value","id","length","SingleSelect","size","aria-label","getTranslation","defaultMessage","onChange"],"mappings":"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"}