{"version":3,"file":"useI18n.mjs","sources":["../../../admin/src/hooks/useI18n.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useAuth } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument as useDocument } from '@strapi/content-manager/strapi-admin';\nimport union from 'lodash/union';\nimport { useParams } from 'react-router-dom';\n\nimport { doesPluginOptionsHaveI18nLocalized } from '../utils/fields';\nimport { capitalize } from '../utils/strings';\n\ntype UseI18n = () => {\n  hasI18n: boolean;\n  canCreate: string[];\n  canRead: string[];\n  canUpdate: string[];\n  canDelete: string[];\n  canPublish: string[];\n};\n\ntype I18nPermissionKeys = keyof Omit<ReturnType<UseI18n>, 'hasI18n'>;\n\n/**\n * @alpha\n * @description This hook is used to get the i18n status of a content type.\n * Also returns the CRUDP permission locale properties for the content type\n * so we know which locales the user can perform actions on.\n */\nconst useI18n: UseI18n = () => {\n  // Extract the params from the URL to pass to our useDocument hook\n  const params = useParams<{ collectionType: string; slug: string; model: string }>();\n\n  const userPermissions = useAuth('useI18n', (state) => state.permissions);\n  const actions = React.useMemo(() => {\n    const permissions = userPermissions.filter((permission) => permission.subject === params.slug);\n\n    return permissions.reduce<Record<I18nPermissionKeys, string[]>>(\n      (acc, permission) => {\n        const [actionShorthand] = permission.action.split('.').slice(-1);\n        const permissionKey = `can${capitalize(actionShorthand)}` as I18nPermissionKeys;\n\n        acc[permissionKey] = union(acc[permissionKey] ?? [], permission.properties?.locales ?? []);\n\n        return acc;\n      },\n      { canCreate: [], canRead: [], canUpdate: [], canDelete: [], canPublish: [] }\n    );\n  }, [params.slug, userPermissions]);\n\n  // TODO: use specific hook to get schema only\n  const { schema } = useDocument(\n    {\n      // We can non-null assert these because below we skip the query if they are not present\n      collectionType: params.collectionType!,\n      model: params.slug!,\n    },\n    {\n      skip: true,\n    }\n  );\n\n  if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {\n    return {\n      hasI18n: schema.pluginOptions.i18n.localized,\n      ...actions,\n    };\n  }\n\n  return {\n    hasI18n: false,\n    ...actions,\n  };\n};\n\nexport { useI18n };\n"],"names":["useI18n","params","useParams","userPermissions","useAuth","state","permissions","actions","React","useMemo","filter","permission","subject","slug","reduce","acc","actionShorthand","action","split","slice","permissionKey","capitalize","union","properties","locales","canCreate","canRead","canUpdate","canDelete","canPublish","schema","useDocument","collectionType","model","skip","doesPluginOptionsHaveI18nLocalized","pluginOptions","hasI18n","i18n","localized"],"mappings":";;;;;;;;AAqBA;;;;;AAKC,UACKA,OAAAA,GAAmB,IAAA;;AAEvB,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AAEf,IAAA,MAAMC,kBAAkBC,OAAAA,CAAQ,SAAA,EAAW,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;IACvE,MAAMC,OAAAA,GAAUC,KAAAA,CAAMC,OAAO,CAAC,IAAA;QAC5B,MAAMH,WAAAA,GAAcH,eAAAA,CAAgBO,MAAM,CAAC,CAACC,aAAeA,UAAAA,CAAWC,OAAO,KAAKX,MAAAA,CAAOY,IAAI,CAAA;AAE7F,QAAA,OAAOP,WAAAA,CAAYQ,MAAM,CACvB,CAACC,GAAAA,EAAKJ,UAAAA,GAAAA;YACJ,MAAM,CAACK,eAAAA,CAAgB,GAAGL,UAAAA,CAAWM,MAAM,CAACC,KAAK,CAAC,GAAA,CAAA,CAAKC,KAAK,CAAC,EAAC,CAAA;AAC9D,YAAA,MAAMC,aAAAA,GAAgB,CAAC,GAAG,EAAEC,WAAWL,eAAAA,CAAAA,CAAAA,CAAkB;AAEzDD,YAAAA,GAAG,CAACK,aAAAA,CAAc,GAAGE,KAAAA,CAAMP,GAAG,CAACK,aAAAA,CAAc,IAAI,EAAE,EAAET,UAAAA,CAAWY,UAAU,EAAEC,WAAW,EAAE,CAAA;YAEzF,OAAOT,GAAAA;QACT,CAAA,EACA;AAAEU,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,OAAAA,EAAS,EAAE;AAAEC,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,SAAAA,EAAW,EAAE;AAAEC,YAAAA,UAAAA,EAAY;AAAG,SAAA,CAAA;IAE/E,CAAA,EAAG;AAAC5B,QAAAA,MAAAA,CAAOY,IAAI;AAAEV,QAAAA;AAAgB,KAAA,CAAA;;AAGjC,IAAA,MAAM,EAAE2B,MAAM,EAAE,GAAGC,oBAAAA,CACjB;;AAEEC,QAAAA,cAAAA,EAAgB/B,OAAO+B,cAAc;AACrCC,QAAAA,KAAAA,EAAOhC,OAAOY;KAChB,EACA;QACEqB,IAAAA,EAAM;AACR,KAAA,CAAA;IAGF,IAAIC,kCAAAA,CAAmCL,QAAQM,aAAAA,CAAAA,EAAgB;QAC7D,OAAO;AACLC,YAAAA,OAAAA,EAASP,MAAAA,CAAOM,aAAa,CAACE,IAAI,CAACC,SAAS;AAC5C,YAAA,GAAGhC;AACL,SAAA;AACF,IAAA;IAEA,OAAO;QACL8B,OAAAA,EAAS,KAAA;AACT,QAAA,GAAG9B;AACL,KAAA;AACF;;;;"}