@extravirgin/payload-enchants-translator 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/LICENSE +21 -0
  2. package/dist/client/api/index.d.ts +2 -1
  3. package/dist/client/api/index.d.ts.map +1 -1
  4. package/dist/client/api/index.js +2 -2
  5. package/dist/client/api/index.js.map +1 -1
  6. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +2 -1
  7. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +1 -1
  8. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +7 -3
  9. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +1 -1
  10. package/dist/client/components/CustomButton/index.d.ts +1 -1
  11. package/dist/client/components/CustomButton/index.d.ts.map +1 -1
  12. package/dist/client/components/CustomButton/index.js +3 -2
  13. package/dist/client/components/CustomButton/index.js.map +1 -1
  14. package/dist/client/components/TranslatorModal/Content.d.ts +3 -1
  15. package/dist/client/components/TranslatorModal/Content.d.ts.map +1 -1
  16. package/dist/client/components/TranslatorModal/Content.js +2 -2
  17. package/dist/client/components/TranslatorModal/Content.js.map +1 -1
  18. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +3 -1
  19. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +1 -1
  20. package/dist/client/components/TranslatorModal/TranslatorModal.js +4 -2
  21. package/dist/client/components/TranslatorModal/TranslatorModal.js.map +1 -1
  22. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -1
  23. package/dist/client/providers/Translator/TranslatorProvider.js +2 -0
  24. package/dist/client/providers/Translator/TranslatorProvider.js.map +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +5 -4
  27. package/dist/index.js.map +1 -1
  28. package/dist/types.d.ts +8 -0
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/types.js.map +1 -1
  31. package/package.json +12 -13
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Ritsu / Sasha Rakhmatulin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,6 +1,7 @@
1
1
  import type { TranslateEndpointArgs, TranslateResult } from '../../translate/types';
2
- export declare const createClient: ({ api, serverURL }: {
2
+ export declare const createClient: ({ api, basePath, serverURL }: {
3
3
  api: string;
4
+ basePath?: string;
4
5
  serverURL: string;
5
6
  }) => {
6
7
  translate: (args: TranslateEndpointArgs) => Promise<TranslateResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEpF,eAAO,MAAM,YAAY,uBAAwB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;sBAClD,qBAAqB,KAAG,OAAO,CAAC,eAAe,CAAC;CAwBhF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEpF,eAAO,MAAM,YAAY,iCAAkC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;sBAC/E,qBAAqB,KAAG,OAAO,CAAC,eAAe,CAAC;CAwBhF,CAAC"}
@@ -1,7 +1,7 @@
1
- export const createClient = ({ api, serverURL })=>{
1
+ export const createClient = ({ api, basePath, serverURL })=>{
2
2
  const translate = async (args)=>{
3
3
  try {
4
- const response = await fetch(`${serverURL}${api}/translator/translate`, {
4
+ const response = await fetch(`${serverURL}${basePath ?? ''}${api}/translator/translate`, {
5
5
  body: JSON.stringify(args),
6
6
  credentials: 'include',
7
7
  headers: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/client/api/index.ts"],"sourcesContent":["import type { TranslateEndpointArgs, TranslateResult } from '../../translate/types';\n\nexport const createClient = ({ api, serverURL }: { api: string; serverURL: string }) => {\n const translate = async (args: TranslateEndpointArgs): Promise<TranslateResult> => {\n try {\n const response = await fetch(`${serverURL}${api}/translator/translate`, {\n body: JSON.stringify(args),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n\n if (!response.ok) return { success: false };\n\n return response.json();\n } catch (e) {\n if (e instanceof Error) console.error(e.message);\n\n return { success: false };\n }\n };\n\n return {\n translate,\n };\n};\n"],"names":["createClient","api","serverURL","translate","args","response","fetch","body","JSON","stringify","credentials","headers","method","ok","success","json","e","Error","console","error","message"],"mappings":"AAEA,OAAO,MAAMA,eAAe,CAAC,EAAEC,GAAG,EAAEC,SAAS,EAAsC;IACjF,MAAMC,YAAY,OAAOC;QACvB,IAAI;YACF,MAAMC,WAAW,MAAMC,MAAM,GAAGJ,YAAYD,IAAI,qBAAqB,CAAC,EAAE;gBACtEM,MAAMC,KAAKC,SAAS,CAACL;gBACrBM,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAEA,IAAI,CAACP,SAASQ,EAAE,EAAE,OAAO;gBAAEC,SAAS;YAAM;YAE1C,OAAOT,SAASU,IAAI;QACtB,EAAE,OAAOC,GAAG;YACV,IAAIA,aAAaC,OAAOC,QAAQC,KAAK,CAACH,EAAEI,OAAO;YAE/C,OAAO;gBAAEN,SAAS;YAAM;QAC1B;IACF;IAEA,OAAO;QACLX;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../../../src/client/api/index.ts"],"sourcesContent":["import type { TranslateEndpointArgs, TranslateResult } from '../../translate/types';\n\nexport const createClient = ({ api, basePath, serverURL }: { api: string; basePath?: string; serverURL: string }) => {\n const translate = async (args: TranslateEndpointArgs): Promise<TranslateResult> => {\n try {\n const response = await fetch(`${serverURL}${basePath ?? ''}${api}/translator/translate`, {\n body: JSON.stringify(args),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n\n if (!response.ok) return { success: false };\n\n return response.json();\n } catch (e) {\n if (e instanceof Error) console.error(e.message);\n\n return { success: false };\n }\n };\n\n return {\n translate,\n };\n};\n"],"names":["createClient","api","basePath","serverURL","translate","args","response","fetch","body","JSON","stringify","credentials","headers","method","ok","success","json","e","Error","console","error","message"],"mappings":"AAEA,OAAO,MAAMA,eAAe,CAAC,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,SAAS,EAAyD;IAC9G,MAAMC,YAAY,OAAOC;QACvB,IAAI;YACF,MAAMC,WAAW,MAAMC,MAAM,GAAGJ,YAAYD,YAAY,KAAKD,IAAI,qBAAqB,CAAC,EAAE;gBACvFO,MAAMC,KAAKC,SAAS,CAACL;gBACrBM,aAAa;gBACbC,SAAS;oBACP,gBAAgB;gBAClB;gBACAC,QAAQ;YACV;YAEA,IAAI,CAACP,SAASQ,EAAE,EAAE,OAAO;gBAAEC,SAAS;YAAM;YAE1C,OAAOT,SAASU,IAAI;QACtB,EAAE,OAAOC,GAAG;YACV,IAAIA,aAAaC,OAAOC,QAAQC,KAAK,CAACH,EAAEI,OAAO;YAE/C,OAAO;gBAAEN,SAAS;YAAM;QAC1B;IACF;IAEA,OAAO;QACLX;IACF;AACF,EAAE"}
@@ -1,5 +1,6 @@
1
1
  import './styles.scss';
2
- export declare const CustomButtonWithTranslator: ({ type }: {
2
+ export declare const CustomButtonWithTranslator: ({ type, disabledLocales }: {
3
3
  type: "publish" | "save";
4
+ disabledLocales: string[];
4
5
  }) => import("react").JSX.Element;
5
6
  //# sourceMappingURL=CustomButtonWithTranslator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomButtonWithTranslator.d.ts","sourceRoot":"","sources":["../../../../src/client/components/CustomButton/CustomButtonWithTranslator.tsx"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AASvB,eAAO,MAAM,0BAA0B,aAAc;IAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,gCAsBhF,CAAC"}
1
+ {"version":3,"file":"CustomButtonWithTranslator.d.ts","sourceRoot":"","sources":["../../../../src/client/components/CustomButton/CustomButtonWithTranslator.tsx"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AASvB,eAAO,MAAM,0BAA0B,8BAA+B;IAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,gCAyB5H,CAAC"}
@@ -1,21 +1,25 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import './styles.scss';
4
- import { PublishButton, SaveButton, useConfig, useDocumentInfo } from '@payloadcms/ui';
4
+ import { PublishButton, SaveButton, useConfig, useDocumentInfo, useLocale } from '@payloadcms/ui';
5
5
  import { TranslatorProvider } from '../../providers/Translator/TranslatorProvider';
6
6
  import { ResolverButton } from '../ResolverButton';
7
7
  import { TranslatorModal } from '../TranslatorModal';
8
- export const CustomButtonWithTranslator = ({ type })=>{
8
+ export const CustomButtonWithTranslator = ({ type, disabledLocales })=>{
9
9
  const { config } = useConfig();
10
+ const locale = useLocale();
10
11
  const DefaultButton = type === 'publish' ? PublishButton : SaveButton;
11
12
  const { globalSlug, id } = useDocumentInfo();
12
13
  const resolvers = config.admin?.custom?.translator?.resolvers ?? [];
13
14
  if (!id && !globalSlug) return /*#__PURE__*/ _jsx(DefaultButton, {});
15
+ if (disabledLocales.includes(locale.code)) return /*#__PURE__*/ _jsx(DefaultButton, {});
14
16
  return /*#__PURE__*/ _jsx(TranslatorProvider, {
15
17
  children: /*#__PURE__*/ _jsxs("div", {
16
18
  className: 'translator__custom-save-button',
17
19
  children: [
18
- /*#__PURE__*/ _jsx(TranslatorModal, {}),
20
+ /*#__PURE__*/ _jsx(TranslatorModal, {
21
+ disabledLocales: disabledLocales
22
+ }),
19
23
  resolvers.map((resolver)=>/*#__PURE__*/ _jsx(ResolverButton, {
20
24
  resolver: resolver
21
25
  }, resolver.key)),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/client/components/CustomButton/CustomButtonWithTranslator.tsx"],"sourcesContent":["'use client';\n\nimport './styles.scss';\n\nimport { PublishButton, SaveButton, useConfig, useDocumentInfo } from '@payloadcms/ui';\n\nimport type { TranslateResolver } from '../../../resolvers/types';\nimport { TranslatorProvider } from '../../providers/Translator/TranslatorProvider';\nimport { ResolverButton } from '../ResolverButton';\nimport { TranslatorModal } from '../TranslatorModal';\n\nexport const CustomButtonWithTranslator = ({ type }: { type: 'publish' | 'save' }) => {\n const { config } = useConfig();\n\n const DefaultButton = type === 'publish' ? PublishButton : SaveButton;\n\n const { globalSlug, id } = useDocumentInfo();\n\n const resolvers = (config.admin?.custom?.translator?.resolvers as TranslateResolver[]) ?? [];\n\n if (!id && !globalSlug) return <DefaultButton />;\n\n return (\n <TranslatorProvider>\n <div className={'translator__custom-save-button'}>\n <TranslatorModal />\n {resolvers.map((resolver) => (\n <ResolverButton key={resolver.key} resolver={resolver} />\n ))}\n {<DefaultButton />}\n </div>\n </TranslatorProvider>\n );\n};\n"],"names":["PublishButton","SaveButton","useConfig","useDocumentInfo","TranslatorProvider","ResolverButton","TranslatorModal","CustomButtonWithTranslator","type","config","DefaultButton","globalSlug","id","resolvers","admin","custom","translator","div","className","map","resolver","key"],"mappings":"AAAA;;AAEA,OAAO,gBAAgB;AAEvB,SAASA,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,eAAe,QAAQ,iBAAiB;AAGvF,SAASC,kBAAkB,QAAQ,gDAAgD;AACnF,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,eAAe,QAAQ,qBAAqB;AAErD,OAAO,MAAMC,6BAA6B,CAAC,EAAEC,IAAI,EAAgC;IAC/E,MAAM,EAAEC,MAAM,EAAE,GAAGP;IAEnB,MAAMQ,gBAAgBF,SAAS,YAAYR,gBAAgBC;IAE3D,MAAM,EAAEU,UAAU,EAAEC,EAAE,EAAE,GAAGT;IAE3B,MAAMU,YAAY,AAACJ,OAAOK,KAAK,EAAEC,QAAQC,YAAYH,aAAqC,EAAE;IAE5F,IAAI,CAACD,MAAM,CAACD,YAAY,qBAAO,KAACD;IAEhC,qBACE,KAACN;kBACC,cAAA,MAACa;YAAIC,WAAW;;8BACd,KAACZ;gBACAO,UAAUM,GAAG,CAAC,CAACC,yBACd,KAACf;wBAAkCe,UAAUA;uBAAxBA,SAASC,GAAG;8BAElC,KAACX;;;;AAIV,EAAE"}
1
+ {"version":3,"sources":["../../../../src/client/components/CustomButton/CustomButtonWithTranslator.tsx"],"sourcesContent":["'use client';\n\nimport './styles.scss';\n\nimport { PublishButton, SaveButton, useConfig, useDocumentInfo, useLocale } from '@payloadcms/ui';\n\nimport type { TranslateResolver } from '../../../resolvers/types';\nimport { TranslatorProvider } from '../../providers/Translator/TranslatorProvider';\nimport { ResolverButton } from '../ResolverButton';\nimport { TranslatorModal } from '../TranslatorModal';\n\nexport const CustomButtonWithTranslator = ({ type, disabledLocales }: { type: 'publish' | 'save', disabledLocales: string[] }) => {\n const { config } = useConfig();\n const locale = useLocale();\n\n const DefaultButton = type === 'publish' ? PublishButton : SaveButton;\n\n const { globalSlug, id } = useDocumentInfo();\n\n const resolvers = (config.admin?.custom?.translator?.resolvers as TranslateResolver[]) ?? [];\n\n if (!id && !globalSlug) return <DefaultButton />;\n\n if(disabledLocales.includes(locale.code)) return <DefaultButton />;\n\n return (\n <TranslatorProvider>\n <div className={'translator__custom-save-button'}>\n <TranslatorModal disabledLocales={disabledLocales} />\n {resolvers.map((resolver) => (\n <ResolverButton key={resolver.key} resolver={resolver} />\n ))}\n {<DefaultButton />}\n </div>\n </TranslatorProvider>\n );\n};\n"],"names":["PublishButton","SaveButton","useConfig","useDocumentInfo","useLocale","TranslatorProvider","ResolverButton","TranslatorModal","CustomButtonWithTranslator","type","disabledLocales","config","locale","DefaultButton","globalSlug","id","resolvers","admin","custom","translator","includes","code","div","className","map","resolver","key"],"mappings":"AAAA;;AAEA,OAAO,gBAAgB;AAEvB,SAASA,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,eAAe,EAAEC,SAAS,QAAQ,iBAAiB;AAGlG,SAASC,kBAAkB,QAAQ,gDAAgD;AACnF,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,eAAe,QAAQ,qBAAqB;AAErD,OAAO,MAAMC,6BAA6B,CAAC,EAAEC,IAAI,EAAEC,eAAe,EAA2D;IAC3H,MAAM,EAAEC,MAAM,EAAE,GAAGT;IACnB,MAAMU,SAASR;IAEf,MAAMS,gBAAgBJ,SAAS,YAAYT,gBAAgBC;IAE3D,MAAM,EAAEa,UAAU,EAAEC,EAAE,EAAE,GAAGZ;IAE3B,MAAMa,YAAY,AAACL,OAAOM,KAAK,EAAEC,QAAQC,YAAYH,aAAqC,EAAE;IAE5F,IAAI,CAACD,MAAM,CAACD,YAAY,qBAAO,KAACD;IAEhC,IAAGH,gBAAgBU,QAAQ,CAACR,OAAOS,IAAI,GAAG,qBAAO,KAACR;IAElD,qBACE,KAACR;kBACC,cAAA,MAACiB;YAAIC,WAAW;;8BACd,KAAChB;oBAAgBG,iBAAiBA;;gBACjCM,UAAUQ,GAAG,CAAC,CAACC,yBACd,KAACnB;wBAAkCmB,UAAUA;uBAAxBA,SAASC,GAAG;8BAElC,KAACb;;;;AAIV,EAAE"}
@@ -1,3 +1,3 @@
1
1
  import type { CustomPublishButton, CustomSaveButton } from 'payload';
2
- export declare const CustomButton: (type: "publish" | "save") => CustomPublishButton | CustomSaveButton;
2
+ export declare const CustomButton: (type: "publish" | "save", disabledLocales?: string[]) => CustomPublishButton | CustomSaveButton;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/components/CustomButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErE,eAAO,MAAM,YAAY,SAAU,SAAS,GAAG,MAAM,KAAG,mBAAmB,GAAG,gBAO7E,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/components/CustomButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErE,eAAO,MAAM,YAAY,SAAU,SAAS,GAAG,MAAM,oBAAoB,MAAM,EAAE,KAAG,mBAAmB,GAAG,gBAQzG,CAAC"}
@@ -1,7 +1,8 @@
1
- export const CustomButton = (type)=>{
1
+ export const CustomButton = (type, disabledLocales)=>{
2
2
  return {
3
3
  clientProps: {
4
- type
4
+ type,
5
+ disabledLocales: disabledLocales || []
5
6
  },
6
7
  path: '@extravirgin/payload-enchants-translator/client#CustomButtonWithTranslator'
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/client/components/CustomButton/index.tsx"],"sourcesContent":["import type { CustomPublishButton, CustomSaveButton } from 'payload';\n\nexport const CustomButton = (type: 'publish' | 'save'): CustomPublishButton | CustomSaveButton => {\n return {\n clientProps: {\n type,\n },\n path: '@extravirgin/payload-enchants-translator/client#CustomButtonWithTranslator',\n };\n};\n"],"names":["CustomButton","type","clientProps","path"],"mappings":"AAEA,OAAO,MAAMA,eAAe,CAACC;IAC3B,OAAO;QACLC,aAAa;YACXD;QACF;QACAE,MAAM;IACR;AACF,EAAE"}
1
+ {"version":3,"sources":["../../../../src/client/components/CustomButton/index.tsx"],"sourcesContent":["import type { CustomPublishButton, CustomSaveButton } from 'payload';\n\nexport const CustomButton = (type: 'publish' | 'save', disabledLocales?: string[]): CustomPublishButton | CustomSaveButton => {\n return {\n clientProps: {\n type,\n disabledLocales: disabledLocales || [],\n },\n path: '@extravirgin/payload-enchants-translator/client#CustomButtonWithTranslator',\n };\n};\n"],"names":["CustomButton","type","disabledLocales","clientProps","path"],"mappings":"AAEA,OAAO,MAAMA,eAAe,CAACC,MAA0BC;IACrD,OAAO;QACLC,aAAa;YACXF;YACAC,iBAAiBA,mBAAmB,EAAE;QACxC;QACAE,MAAM;IACR;AACF,EAAE"}
@@ -1,2 +1,4 @@
1
- export declare const Content: () => import("react").JSX.Element;
1
+ export declare const Content: ({ disabledLocales }: {
2
+ disabledLocales: string[];
3
+ }) => import("react").JSX.Element;
2
4
  //# sourceMappingURL=Content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../src/client/components/TranslatorModal/Content.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,mCAwDnB,CAAC"}
1
+ {"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../src/client/components/TranslatorModal/Content.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,wBAAsB;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAC,gCAwDpE,CAAC"}
@@ -3,7 +3,7 @@ import { getTranslation } from '@payloadcms/translations';
3
3
  import { Button, Popup, PopupList, useTranslation } from '@payloadcms/ui';
4
4
  import { useTranslator } from '../../providers/Translator/context';
5
5
  import { LocaleLabel } from '../LocaleLabel';
6
- export const Content = ()=>{
6
+ export const Content = ({ disabledLocales })=>{
7
7
  const { localeToTranslateFrom: localeCodeToTranslateFrom, localesOptions, resolverT, setLocaleToTranslateFrom, submit } = useTranslator();
8
8
  const { i18n } = useTranslation();
9
9
  const localeToTranslateFrom = localesOptions.find((each)=>each.code === localeCodeToTranslateFrom);
@@ -19,7 +19,7 @@ export const Content = ()=>{
19
19
  }),
20
20
  horizontalAlign: "center",
21
21
  render: ({ close })=>/*#__PURE__*/ _jsx(PopupList.ButtonGroup, {
22
- children: localesOptions.map((option)=>{
22
+ children: localesOptions.filter((option)=>!disabledLocales.includes(option.code)).map((option)=>{
23
23
  const label = getTranslation(option.label, i18n);
24
24
  return /*#__PURE__*/ _jsxs(PopupList.Button, {
25
25
  active: option.code === localeCodeToTranslateFrom,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/client/components/TranslatorModal/Content.tsx"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations';\nimport { Button, Popup, PopupList, useTranslation } from '@payloadcms/ui';\n\nimport { useTranslator } from '../../providers/Translator/context';\nimport { LocaleLabel } from '../LocaleLabel';\n\nexport const Content = () => {\n const {\n localeToTranslateFrom: localeCodeToTranslateFrom,\n localesOptions,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n } = useTranslator();\n\n const { i18n } = useTranslation();\n\n const localeToTranslateFrom = localesOptions.find(\n (each) => each.code === localeCodeToTranslateFrom,\n );\n\n return (\n <div className={'translator__content'}>\n <h2>{resolverT('modalTitle')}</h2>\n {localeToTranslateFrom && (\n <Popup\n button={<LocaleLabel locale={localeToTranslateFrom} />}\n horizontalAlign='center'\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {localesOptions.map((option) => {\n const label = getTranslation(option.label, i18n);\n\n return (\n <PopupList.Button\n active={option.code === localeCodeToTranslateFrom}\n key={option.code}\n onClick={() => {\n setLocaleToTranslateFrom(option.code);\n close();\n }}\n >\n {label}\n {label !== option.code && ` (${option.code})`}\n </PopupList.Button>\n );\n })}\n </PopupList.ButtonGroup>\n )}\n verticalAlign='bottom'\n />\n )}\n <div className={'translator__buttons'}>\n <Button onClick={() => submit({ emptyOnly: false })}>\n {resolverT('submitButtonLabelFull')}\n </Button>\n <Button onClick={() => submit({ emptyOnly: true })}>\n {resolverT('submitButtonLabelEmpty')}\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["getTranslation","Button","Popup","PopupList","useTranslation","useTranslator","LocaleLabel","Content","localeToTranslateFrom","localeCodeToTranslateFrom","localesOptions","resolverT","setLocaleToTranslateFrom","submit","i18n","find","each","code","div","className","h2","button","locale","horizontalAlign","render","close","ButtonGroup","map","option","label","active","onClick","verticalAlign","emptyOnly"],"mappings":";AAAA,SAASA,cAAc,QAAQ,2BAA2B;AAC1D,SAASC,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,cAAc,QAAQ,iBAAiB;AAE1E,SAASC,aAAa,QAAQ,qCAAqC;AACnE,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,OAAO,MAAMC,UAAU;IACrB,MAAM,EACJC,uBAAuBC,yBAAyB,EAChDC,cAAc,EACdC,SAAS,EACTC,wBAAwB,EACxBC,MAAM,EACP,GAAGR;IAEJ,MAAM,EAAES,IAAI,EAAE,GAAGV;IAEjB,MAAMI,wBAAwBE,eAAeK,IAAI,CAC/C,CAACC,OAASA,KAAKC,IAAI,KAAKR;IAG1B,qBACE,MAACS;QAAIC,WAAW;;0BACd,KAACC;0BAAIT,UAAU;;YACdH,uCACC,KAACN;gBACCmB,sBAAQ,KAACf;oBAAYgB,QAAQd;;gBAC7Be,iBAAgB;gBAChBC,QAAQ,CAAC,EAAEC,KAAK,EAAE,iBAChB,KAACtB,UAAUuB,WAAW;kCACnBhB,eAAeiB,GAAG,CAAC,CAACC;4BACnB,MAAMC,QAAQ7B,eAAe4B,OAAOC,KAAK,EAAEf;4BAE3C,qBACE,MAACX,UAAUF,MAAM;gCACf6B,QAAQF,OAAOX,IAAI,KAAKR;gCAExBsB,SAAS;oCACPnB,yBAAyBgB,OAAOX,IAAI;oCACpCQ;gCACF;;oCAECI;oCACAA,UAAUD,OAAOX,IAAI,IAAI,CAAC,EAAE,EAAEW,OAAOX,IAAI,CAAC,CAAC,CAAC;;+BAPxCW,OAAOX,IAAI;wBAUtB;;gBAGJe,eAAc;;0BAGlB,MAACd;gBAAIC,WAAW;;kCACd,KAAClB;wBAAO8B,SAAS,IAAMlB,OAAO;gCAAEoB,WAAW;4BAAM;kCAC9CtB,UAAU;;kCAEb,KAACV;wBAAO8B,SAAS,IAAMlB,OAAO;gCAAEoB,WAAW;4BAAK;kCAC7CtB,UAAU;;;;;;AAKrB,EAAE"}
1
+ {"version":3,"sources":["../../../../src/client/components/TranslatorModal/Content.tsx"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations';\nimport { Button, Popup, PopupList, useTranslation } from '@payloadcms/ui';\n\nimport { useTranslator } from '../../providers/Translator/context';\nimport { LocaleLabel } from '../LocaleLabel';\n\nexport const Content = ({disabledLocales}:{disabledLocales: string[]}) => {\n const {\n localeToTranslateFrom: localeCodeToTranslateFrom,\n localesOptions,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n } = useTranslator();\n\n const { i18n } = useTranslation();\n\n const localeToTranslateFrom = localesOptions.find(\n (each) => each.code === localeCodeToTranslateFrom,\n );\n\n return (\n <div className={'translator__content'}>\n <h2>{resolverT('modalTitle')}</h2>\n {localeToTranslateFrom && (\n <Popup\n button={<LocaleLabel locale={localeToTranslateFrom} />}\n horizontalAlign='center'\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {localesOptions.filter((option) => !disabledLocales.includes(option.code)).map((option) => {\n const label = getTranslation(option.label, i18n);\n\n return (\n <PopupList.Button\n active={option.code === localeCodeToTranslateFrom}\n key={option.code}\n onClick={() => {\n setLocaleToTranslateFrom(option.code);\n close();\n }}\n >\n {label}\n {label !== option.code && ` (${option.code})`}\n </PopupList.Button>\n );\n })}\n </PopupList.ButtonGroup>\n )}\n verticalAlign='bottom'\n />\n )}\n <div className={'translator__buttons'}>\n <Button onClick={() => submit({ emptyOnly: false })}>\n {resolverT('submitButtonLabelFull')}\n </Button>\n <Button onClick={() => submit({ emptyOnly: true })}>\n {resolverT('submitButtonLabelEmpty')}\n </Button>\n </div>\n </div>\n );\n};\n"],"names":["getTranslation","Button","Popup","PopupList","useTranslation","useTranslator","LocaleLabel","Content","disabledLocales","localeToTranslateFrom","localeCodeToTranslateFrom","localesOptions","resolverT","setLocaleToTranslateFrom","submit","i18n","find","each","code","div","className","h2","button","locale","horizontalAlign","render","close","ButtonGroup","filter","option","includes","map","label","active","onClick","verticalAlign","emptyOnly"],"mappings":";AAAA,SAASA,cAAc,QAAQ,2BAA2B;AAC1D,SAASC,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,cAAc,QAAQ,iBAAiB;AAE1E,SAASC,aAAa,QAAQ,qCAAqC;AACnE,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,OAAO,MAAMC,UAAU,CAAC,EAACC,eAAe,EAA6B;IACnE,MAAM,EACJC,uBAAuBC,yBAAyB,EAChDC,cAAc,EACdC,SAAS,EACTC,wBAAwB,EACxBC,MAAM,EACP,GAAGT;IAEJ,MAAM,EAAEU,IAAI,EAAE,GAAGX;IAEjB,MAAMK,wBAAwBE,eAAeK,IAAI,CAC/C,CAACC,OAASA,KAAKC,IAAI,KAAKR;IAG1B,qBACE,MAACS;QAAIC,WAAW;;0BACd,KAACC;0BAAIT,UAAU;;YACdH,uCACC,KAACP;gBACCoB,sBAAQ,KAAChB;oBAAYiB,QAAQd;;gBAC7Be,iBAAgB;gBAChBC,QAAQ,CAAC,EAAEC,KAAK,EAAE,iBAChB,KAACvB,UAAUwB,WAAW;kCACnBhB,eAAeiB,MAAM,CAAC,CAACC,SAAW,CAACrB,gBAAgBsB,QAAQ,CAACD,OAAOX,IAAI,GAAGa,GAAG,CAAC,CAACF;4BAC9E,MAAMG,QAAQhC,eAAe6B,OAAOG,KAAK,EAAEjB;4BAE3C,qBACE,MAACZ,UAAUF,MAAM;gCACfgC,QAAQJ,OAAOX,IAAI,KAAKR;gCAExBwB,SAAS;oCACPrB,yBAAyBgB,OAAOX,IAAI;oCACpCQ;gCACF;;oCAECM;oCACAA,UAAUH,OAAOX,IAAI,IAAI,CAAC,EAAE,EAAEW,OAAOX,IAAI,CAAC,CAAC,CAAC;;+BAPxCW,OAAOX,IAAI;wBAUtB;;gBAGJiB,eAAc;;0BAGlB,MAAChB;gBAAIC,WAAW;;kCACd,KAACnB;wBAAOiC,SAAS,IAAMpB,OAAO;gCAAEsB,WAAW;4BAAM;kCAC9CxB,UAAU;;kCAEb,KAACX;wBAAOiC,SAAS,IAAMpB,OAAO;gCAAEsB,WAAW;4BAAK;kCAC7CxB,UAAU;;;;;;AAKrB,EAAE"}
@@ -1,3 +1,5 @@
1
1
  import './styles.scss';
2
- export declare const TranslatorModal: () => import("react").JSX.Element | undefined;
2
+ export declare const TranslatorModal: ({ disabledLocales }: {
3
+ disabledLocales: string[];
4
+ }) => import("react").JSX.Element | undefined;
3
5
  //# sourceMappingURL=TranslatorModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TranslatorModal.d.ts","sourceRoot":"","sources":["../../../../src/client/components/TranslatorModal/TranslatorModal.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAOvB,eAAO,MAAM,eAAe,+CAa3B,CAAC"}
1
+ {"version":3,"file":"TranslatorModal.d.ts","sourceRoot":"","sources":["../../../../src/client/components/TranslatorModal/TranslatorModal.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAOvB,eAAO,MAAM,eAAe,wBAAsB;IAAC,eAAe,EAAC,MAAM,EAAE,CAAA;CAAC,4CAa3E,CAAC"}
@@ -3,7 +3,7 @@ import './styles.scss';
3
3
  import { Modal } from '@payloadcms/ui';
4
4
  import { useTranslator } from '../../providers/Translator/context';
5
5
  import { Content } from './Content';
6
- export const TranslatorModal = ()=>{
6
+ export const TranslatorModal = ({ disabledLocales })=>{
7
7
  const { closeTranslator, modalSlug, resolver } = useTranslator();
8
8
  if (!resolver) return;
9
9
  return /*#__PURE__*/ _jsx(Modal, {
@@ -17,7 +17,9 @@ export const TranslatorModal = ()=>{
17
17
  className: 'translator__close',
18
18
  onClick: closeTranslator
19
19
  }),
20
- /*#__PURE__*/ _jsx(Content, {})
20
+ /*#__PURE__*/ _jsx(Content, {
21
+ disabledLocales: disabledLocales
22
+ })
21
23
  ]
22
24
  })
23
25
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/client/components/TranslatorModal/TranslatorModal.tsx"],"sourcesContent":["import './styles.scss';\n\nimport { Modal } from '@payloadcms/ui';\n\nimport { useTranslator } from '../../providers/Translator/context';\nimport { Content } from './Content';\n\nexport const TranslatorModal = () => {\n const { closeTranslator, modalSlug, resolver } = useTranslator();\n\n if (!resolver) return;\n\n return (\n <Modal className={'translator__modal'} slug={modalSlug}>\n <div className={'translator__wrapper'}>\n <button aria-label='Close' className={'translator__close'} onClick={closeTranslator} />\n <Content />\n </div>\n </Modal>\n );\n};\n"],"names":["Modal","useTranslator","Content","TranslatorModal","closeTranslator","modalSlug","resolver","className","slug","div","button","aria-label","onClick"],"mappings":";AAAA,OAAO,gBAAgB;AAEvB,SAASA,KAAK,QAAQ,iBAAiB;AAEvC,SAASC,aAAa,QAAQ,qCAAqC;AACnE,SAASC,OAAO,QAAQ,YAAY;AAEpC,OAAO,MAAMC,kBAAkB;IAC7B,MAAM,EAAEC,eAAe,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGL;IAEjD,IAAI,CAACK,UAAU;IAEf,qBACE,KAACN;QAAMO,WAAW;QAAqBC,MAAMH;kBAC3C,cAAA,MAACI;YAAIF,WAAW;;8BACd,KAACG;oBAAOC,cAAW;oBAAQJ,WAAW;oBAAqBK,SAASR;;8BACpE,KAACF;;;;AAIT,EAAE"}
1
+ {"version":3,"sources":["../../../../src/client/components/TranslatorModal/TranslatorModal.tsx"],"sourcesContent":["import './styles.scss';\n\nimport { Modal } from '@payloadcms/ui';\n\nimport { useTranslator } from '../../providers/Translator/context';\nimport { Content } from './Content';\n\nexport const TranslatorModal = ({disabledLocales}:{disabledLocales:string[]}) => {\n const { closeTranslator, modalSlug, resolver } = useTranslator();\n\n if (!resolver) return;\n\n return (\n <Modal className={'translator__modal'} slug={modalSlug}>\n <div className={'translator__wrapper'}>\n <button aria-label='Close' className={'translator__close'} onClick={closeTranslator} />\n <Content disabledLocales={disabledLocales} />\n </div>\n </Modal>\n );\n};\n"],"names":["Modal","useTranslator","Content","TranslatorModal","disabledLocales","closeTranslator","modalSlug","resolver","className","slug","div","button","aria-label","onClick"],"mappings":";AAAA,OAAO,gBAAgB;AAEvB,SAASA,KAAK,QAAQ,iBAAiB;AAEvC,SAASC,aAAa,QAAQ,qCAAqC;AACnE,SAASC,OAAO,QAAQ,YAAY;AAEpC,OAAO,MAAMC,kBAAkB,CAAC,EAACC,eAAe,EAA4B;IAC1E,MAAM,EAAEC,eAAe,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGN;IAEjD,IAAI,CAACM,UAAU;IAEf,qBACE,KAACP;QAAMQ,WAAW;QAAqBC,MAAMH;kBAC3C,cAAA,MAACI;YAAIF,WAAW;;8BACd,KAACG;oBAAOC,cAAW;oBAAQJ,WAAW;oBAAqBK,SAASR;;8BACpE,KAACH;oBAAQE,iBAAiBA;;;;;AAIlC,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"TranslatorProvider.d.ts","sourceRoot":"","sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AASrE,eAAO,MAAM,kBAAkB,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,gCAkJvE,CAAC"}
1
+ {"version":3,"file":"TranslatorProvider.d.ts","sourceRoot":"","sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AASrE,eAAO,MAAM,kBAAkB,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,gCAmJvE,CAAC"}
@@ -19,8 +19,10 @@ export const TranslatorProvider = ({ children })=>{
19
19
  };
20
20
  const locale = useLocale();
21
21
  const { config: { admin: { custom }, localization, routes: { api }, serverURL } } = useConfig();
22
+ const basePath = custom?.translator?.basePath ?? '';
22
23
  const apiClient = createClient({
23
24
  api,
25
+ basePath,
24
26
  serverURL
25
27
  });
26
28
  const resolverConfig = useMemo(()=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"sourcesContent":["import {\n toast,\n useAllFormFields,\n useConfig,\n useDocumentInfo,\n useForm,\n useLocale,\n useModal,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui';\nimport { reduceFieldsToValues } from 'payload/shared';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\n\nimport type { TranslateResolver } from '../../../resolvers/types';\nimport type { TranslateArgs } from '../../../translate/types';\nimport { createClient } from '../../api';\nimport { TranslatorContext } from './context';\n\nconst modalSlug = 'translator-modal';\n\nexport const TranslatorProvider = ({ children }: { children: ReactNode }) => {\n const [resolver, setResolver] = useState<null | string>(null);\n\n const [data, dispatch] = useAllFormFields();\n\n const { getFormState } = useServerFunctions();\n\n const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo();\n\n const { setModified } = useForm();\n\n const modal = useModal();\n\n const { t } = useTranslation();\n\n const resolverT = (\n key:\n | 'buttonLabel'\n | 'errorMessage'\n | 'modalTitle'\n | 'submitButtonLabelEmpty'\n | 'submitButtonLabelFull'\n | 'successMessage',\n ) => {\n if (!resolver) return '';\n\n return t(`plugin-translator:resolver_${resolver}_${key}` as Parameters<typeof t>[0]);\n };\n\n const locale = useLocale();\n\n const {\n config: {\n admin: { custom },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig();\n\n const apiClient = createClient({ api, serverURL });\n\n const resolverConfig = useMemo(() => {\n if (!resolver) return null;\n\n const resolvers = (custom?.translator?.resolvers as TranslateResolver[]) || undefined;\n\n if (!resolvers) return null;\n\n const resolverConfig = resolvers.find((each) => each.key === resolver);\n\n return resolverConfig ?? null;\n }, [custom, resolver]);\n\n if (!localization)\n throw new Error('Localization config is not provided and PluginTranslator is used');\n\n const localesOptions = localization.locales.filter((each) => each.code !== locale.code);\n\n const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState<string>('');\n\n useEffect(()=>{\n const localeToTranslateFromExists = localesOptions.find((each)=>localeToTranslateFrom === each.code);\n if (localeToTranslateFrom && localeToTranslateFromExists) return;\n const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);\n if (defaultFromOptions) {\n setLocaleToTranslateFrom(defaultFromOptions.code);\n return;\n }\n setLocaleToTranslateFrom(localesOptions[0].code);\n}, [\n locale,\n localesOptions,\n localization.defaultLocale\n]);\n\n const closeTranslator = () => modal.closeModal(modalSlug);\n\n const submit = async ({ emptyOnly }: { emptyOnly: boolean }) => {\n if (!resolver) return;\n\n const args: TranslateArgs = {\n collectionSlug,\n data: reduceFieldsToValues(data, true),\n emptyOnly,\n globalSlug,\n id: id === null ? undefined : id,\n locale: locale.code,\n localeFrom: localeToTranslateFrom,\n resolver,\n };\n\n const result = await apiClient.translate(args);\n\n if (!result.success) {\n toast.error(resolverT('errorMessage'));\n\n return;\n }\n\n const { state } = await getFormState({\n collectionSlug,\n data: result.translatedData,\n docPermissions: {\n fields: true,\n update: true,\n },\n docPreferences: await getDocPreferences(),\n globalSlug,\n locale: locale.code,\n operation: 'update',\n renderAllFields: true,\n schemaPath: collectionSlug || globalSlug || '',\n });\n\n if (state) {\n dispatch({\n state,\n type: 'REPLACE_STATE',\n });\n setModified(true);\n toast.success(resolverT('successMessage'));\n }\n closeTranslator();\n };\n\n return (\n <TranslatorContext.Provider\n value={{\n closeTranslator,\n localeToTranslateFrom,\n localesOptions,\n modalSlug,\n openTranslator: ({ resolverKey }) => {\n setResolver(resolverKey);\n modal.openModal(modalSlug);\n },\n resolver: resolverConfig,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n }}\n >\n {children}\n </TranslatorContext.Provider>\n );\n};\n"],"names":["toast","useAllFormFields","useConfig","useDocumentInfo","useForm","useLocale","useModal","useServerFunctions","useTranslation","reduceFieldsToValues","useEffect","useMemo","useState","createClient","TranslatorContext","modalSlug","TranslatorProvider","children","resolver","setResolver","data","dispatch","getFormState","collectionSlug","getDocPreferences","globalSlug","id","setModified","modal","t","resolverT","key","locale","config","admin","custom","localization","routes","api","serverURL","apiClient","resolverConfig","resolvers","translator","undefined","find","each","Error","localesOptions","locales","filter","code","localeToTranslateFrom","setLocaleToTranslateFrom","localeToTranslateFromExists","defaultFromOptions","defaultLocale","closeTranslator","closeModal","submit","emptyOnly","args","localeFrom","result","translate","success","error","state","translatedData","docPermissions","fields","update","docPreferences","operation","renderAllFields","schemaPath","type","Provider","value","openTranslator","resolverKey","openModal"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"sourcesContent":["import {\n toast,\n useAllFormFields,\n useConfig,\n useDocumentInfo,\n useForm,\n useLocale,\n useModal,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui';\nimport { reduceFieldsToValues } from 'payload/shared';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\n\nimport type { TranslateResolver } from '../../../resolvers/types';\nimport type { TranslateArgs } from '../../../translate/types';\nimport { createClient } from '../../api';\nimport { TranslatorContext } from './context';\n\nconst modalSlug = 'translator-modal';\n\nexport const TranslatorProvider = ({ children }: { children: ReactNode }) => {\n const [resolver, setResolver] = useState<null | string>(null);\n\n const [data, dispatch] = useAllFormFields();\n\n const { getFormState } = useServerFunctions();\n\n const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo();\n\n const { setModified } = useForm();\n\n const modal = useModal();\n\n const { t } = useTranslation();\n\n const resolverT = (\n key:\n | 'buttonLabel'\n | 'errorMessage'\n | 'modalTitle'\n | 'submitButtonLabelEmpty'\n | 'submitButtonLabelFull'\n | 'successMessage',\n ) => {\n if (!resolver) return '';\n\n return t(`plugin-translator:resolver_${resolver}_${key}` as Parameters<typeof t>[0]);\n };\n\n const locale = useLocale();\n\n const {\n config: {\n admin: { custom },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig();\n\n const basePath = (custom?.translator?.basePath as string | undefined) ?? '';\n const apiClient = createClient({ api, basePath, serverURL });\n\n const resolverConfig = useMemo(() => {\n if (!resolver) return null;\n\n const resolvers = (custom?.translator?.resolvers as TranslateResolver[]) || undefined;\n\n if (!resolvers) return null;\n\n const resolverConfig = resolvers.find((each) => each.key === resolver);\n\n return resolverConfig ?? null;\n }, [custom, resolver]);\n\n if (!localization)\n throw new Error('Localization config is not provided and PluginTranslator is used');\n\n const localesOptions = localization.locales.filter((each) => each.code !== locale.code);\n\n const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState<string>('');\n\n useEffect(()=>{\n const localeToTranslateFromExists = localesOptions.find((each)=>localeToTranslateFrom === each.code);\n if (localeToTranslateFrom && localeToTranslateFromExists) return;\n const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);\n if (defaultFromOptions) {\n setLocaleToTranslateFrom(defaultFromOptions.code);\n return;\n }\n setLocaleToTranslateFrom(localesOptions[0].code);\n}, [\n locale,\n localesOptions,\n localization.defaultLocale\n]);\n\n const closeTranslator = () => modal.closeModal(modalSlug);\n\n const submit = async ({ emptyOnly }: { emptyOnly: boolean }) => {\n if (!resolver) return;\n\n const args: TranslateArgs = {\n collectionSlug,\n data: reduceFieldsToValues(data, true),\n emptyOnly,\n globalSlug,\n id: id === null ? undefined : id,\n locale: locale.code,\n localeFrom: localeToTranslateFrom,\n resolver,\n };\n\n const result = await apiClient.translate(args);\n\n if (!result.success) {\n toast.error(resolverT('errorMessage'));\n\n return;\n }\n\n const { state } = await getFormState({\n collectionSlug,\n data: result.translatedData,\n docPermissions: {\n fields: true,\n update: true,\n },\n docPreferences: await getDocPreferences(),\n globalSlug,\n locale: locale.code,\n operation: 'update',\n renderAllFields: true,\n schemaPath: collectionSlug || globalSlug || '',\n });\n\n if (state) {\n dispatch({\n state,\n type: 'REPLACE_STATE',\n });\n setModified(true);\n toast.success(resolverT('successMessage'));\n }\n closeTranslator();\n };\n\n return (\n <TranslatorContext.Provider\n value={{\n closeTranslator,\n localeToTranslateFrom,\n localesOptions,\n modalSlug,\n openTranslator: ({ resolverKey }) => {\n setResolver(resolverKey);\n modal.openModal(modalSlug);\n },\n resolver: resolverConfig,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n }}\n >\n {children}\n </TranslatorContext.Provider>\n );\n};\n"],"names":["toast","useAllFormFields","useConfig","useDocumentInfo","useForm","useLocale","useModal","useServerFunctions","useTranslation","reduceFieldsToValues","useEffect","useMemo","useState","createClient","TranslatorContext","modalSlug","TranslatorProvider","children","resolver","setResolver","data","dispatch","getFormState","collectionSlug","getDocPreferences","globalSlug","id","setModified","modal","t","resolverT","key","locale","config","admin","custom","localization","routes","api","serverURL","basePath","translator","apiClient","resolverConfig","resolvers","undefined","find","each","Error","localesOptions","locales","filter","code","localeToTranslateFrom","setLocaleToTranslateFrom","localeToTranslateFromExists","defaultFromOptions","defaultLocale","closeTranslator","closeModal","submit","emptyOnly","args","localeFrom","result","translate","success","error","state","translatedData","docPermissions","fields","update","docPreferences","operation","renderAllFields","schemaPath","type","Provider","value","openTranslator","resolverKey","openModal"],"mappings":";AAAA,SACEA,KAAK,EACLC,gBAAgB,EAChBC,SAAS,EACTC,eAAe,EACfC,OAAO,EACPC,SAAS,EACTC,QAAQ,EACRC,kBAAkB,EAClBC,cAAc,QACT,iBAAiB;AACxB,SAASC,oBAAoB,QAAQ,iBAAiB;AACtD,SAAyBC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAQ;AAIrE,SAASC,YAAY,QAAQ,YAAY;AACzC,SAASC,iBAAiB,QAAQ,YAAY;AAE9C,MAAMC,YAAY;AAElB,OAAO,MAAMC,qBAAqB,CAAC,EAAEC,QAAQ,EAA2B;IACtE,MAAM,CAACC,UAAUC,YAAY,GAAGP,SAAwB;IAExD,MAAM,CAACQ,MAAMC,SAAS,GAAGpB;IAEzB,MAAM,EAAEqB,YAAY,EAAE,GAAGf;IAEzB,MAAM,EAAEgB,cAAc,EAAEC,iBAAiB,EAAEC,UAAU,EAAEC,EAAE,EAAE,GAAGvB;IAE9D,MAAM,EAAEwB,WAAW,EAAE,GAAGvB;IAExB,MAAMwB,QAAQtB;IAEd,MAAM,EAAEuB,CAAC,EAAE,GAAGrB;IAEd,MAAMsB,YAAY,CAChBC;QAQA,IAAI,CAACb,UAAU,OAAO;QAEtB,OAAOW,EAAE,CAAC,2BAA2B,EAAEX,SAAS,CAAC,EAAEa,KAAK;IAC1D;IAEA,MAAMC,SAAS3B;IAEf,MAAM,EACJ4B,QAAQ,EACNC,OAAO,EAAEC,MAAM,EAAE,EACjBC,YAAY,EACZC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,EACF,GAAGrC;IAEJ,MAAMsC,WAAW,AAACL,QAAQM,YAAYD,YAAmC;IACzE,MAAME,YAAY7B,aAAa;QAAEyB;QAAKE;QAAUD;IAAU;IAE1D,MAAMI,iBAAiBhC,QAAQ;QAC7B,IAAI,CAACO,UAAU,OAAO;QAEtB,MAAM0B,YAAY,AAACT,QAAQM,YAAYG,aAAqCC;QAE5E,IAAI,CAACD,WAAW,OAAO;QAEvB,MAAMD,iBAAiBC,UAAUE,IAAI,CAAC,CAACC,OAASA,KAAKhB,GAAG,KAAKb;QAE7D,OAAOyB,kBAAkB;IAC3B,GAAG;QAACR;QAAQjB;KAAS;IAErB,IAAI,CAACkB,cACH,MAAM,IAAIY,MAAM;IAElB,MAAMC,iBAAiBb,aAAac,OAAO,CAACC,MAAM,CAAC,CAACJ,OAASA,KAAKK,IAAI,KAAKpB,OAAOoB,IAAI;IAEtF,MAAM,CAACC,uBAAuBC,yBAAyB,GAAG1C,SAAiB;IAE3EF,UAAU;QACR,MAAM6C,8BAA8BN,eAAeH,IAAI,CAAC,CAACC,OAAOM,0BAA0BN,KAAKK,IAAI;QACnG,IAAIC,yBAAyBE,6BAA6B;QAC1D,MAAMC,qBAAqBP,eAAeH,IAAI,CAAC,CAACC,OAAOX,aAAaqB,aAAa,KAAKV,KAAKK,IAAI;QAC/F,IAAII,oBAAoB;YACpBF,yBAAyBE,mBAAmBJ,IAAI;YAChD;QACJ;QACAE,yBAAyBL,cAAc,CAAC,EAAE,CAACG,IAAI;IACnD,GAAG;QACCpB;QACAiB;QACAb,aAAaqB,aAAa;KAC7B;IAEC,MAAMC,kBAAkB,IAAM9B,MAAM+B,UAAU,CAAC5C;IAE/C,MAAM6C,SAAS,OAAO,EAAEC,SAAS,EAA0B;QACzD,IAAI,CAAC3C,UAAU;QAEf,MAAM4C,OAAsB;YAC1BvC;YACAH,MAAMX,qBAAqBW,MAAM;YACjCyC;YACApC;YACAC,IAAIA,OAAO,OAAOmB,YAAYnB;YAC9BM,QAAQA,OAAOoB,IAAI;YACnBW,YAAYV;YACZnC;QACF;QAEA,MAAM8C,SAAS,MAAMtB,UAAUuB,SAAS,CAACH;QAEzC,IAAI,CAACE,OAAOE,OAAO,EAAE;YACnBlE,MAAMmE,KAAK,CAACrC,UAAU;YAEtB;QACF;QAEA,MAAM,EAAEsC,KAAK,EAAE,GAAG,MAAM9C,aAAa;YACnCC;YACAH,MAAM4C,OAAOK,cAAc;YAC3BC,gBAAgB;gBACdC,QAAQ;gBACRC,QAAQ;YACV;YACAC,gBAAgB,MAAMjD;YACtBC;YACAO,QAAQA,OAAOoB,IAAI;YACnBsB,WAAW;YACXC,iBAAiB;YACjBC,YAAYrD,kBAAkBE,cAAc;QAC9C;QAEA,IAAI2C,OAAO;YACT/C,SAAS;gBACP+C;gBACAS,MAAM;YACR;YACAlD,YAAY;YACZ3B,MAAMkE,OAAO,CAACpC,UAAU;QAC1B;QACA4B;IACF;IAEA,qBACE,KAAC5C,kBAAkBgE,QAAQ;QACzBC,OAAO;YACLrB;YACAL;YACAJ;YACAlC;YACAiE,gBAAgB,CAAC,EAAEC,WAAW,EAAE;gBAC9B9D,YAAY8D;gBACZrD,MAAMsD,SAAS,CAACnE;YAClB;YACAG,UAAUyB;YACVb;YACAwB;YACAM;QACF;kBAEC3C;;AAGP,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsC,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,eAAO,MAAM,UAAU,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,MA+E5D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsC,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,eAAO,MAAM,UAAU,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,MAgF5D,CAAC"}
package/dist/index.js CHANGED
@@ -35,8 +35,8 @@ export const translator = (pluginConfig)=>{
35
35
  ...collection.admin?.components ?? {},
36
36
  edit: {
37
37
  ...collection.admin?.components?.edit ?? {},
38
- PublishButton: CustomButton('publish'),
39
- SaveButton: CustomButton('save')
38
+ PublishButton: CustomButton('publish', pluginConfig.disabledLocales ?? []),
39
+ SaveButton: CustomButton('save', pluginConfig.disabledLocales ?? [])
40
40
  }
41
41
  }
42
42
  }
@@ -45,6 +45,7 @@ export const translator = (pluginConfig)=>{
45
45
  custom: {
46
46
  ...config.custom ?? {},
47
47
  translator: {
48
+ basePath: pluginConfig.basePath ?? '',
48
49
  resolvers: pluginConfig.resolvers
49
50
  }
50
51
  },
@@ -66,8 +67,8 @@ export const translator = (pluginConfig)=>{
66
67
  ...global.admin?.components ?? {},
67
68
  elements: {
68
69
  ...global.admin?.components?.elements ?? {},
69
- PublishButton: CustomButton('publish'),
70
- SaveButton: CustomButton('save')
70
+ PublishButton: CustomButton('publish', pluginConfig.disabledLocales ?? []),
71
+ SaveButton: CustomButton('save', pluginConfig.disabledLocales ?? [])
71
72
  }
72
73
  }
73
74
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionSlug, Config, GlobalSlug, Plugin } from 'payload';\nimport { deepMerge } from 'payload/shared';\n\nimport { CustomButton } from './client/components/CustomButton';\nimport { translations } from './i18n-translations';\nimport { translateEndpoint } from './translate/endpoint';\nimport { translateOperation } from './translate/operation';\nimport type { TranslatorConfig } from './types';\n\nexport { copyResolver } from './resolvers/copy';\n\nexport { googleResolver } from './resolvers/google';\n\nexport { libreResolver } from './resolvers/libreTranslate';\n\nexport { openAIResolver } from './resolvers/openAI';\nexport * from './resolvers/types';\n\nexport { translateOperation };\n\nexport const translator: (pluginConfig: TranslatorConfig) => Plugin = (pluginConfig) => {\n return (config) => {\n if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2)\n return config;\n\n const updatedConfig: Config = {\n ...config,\n admin: {\n ...(config.admin ?? {}),\n custom: {\n ...(config.admin?.custom ?? {}),\n translator: {\n resolvers: pluginConfig.resolvers.map(({ key }) => ({ key })),\n },\n },\n },\n collections:\n config.collections?.map((collection) => {\n if (!pluginConfig.collections.includes(collection.slug as CollectionSlug))\n return collection;\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n edit: {\n ...(collection.admin?.components?.edit ?? {}),\n PublishButton: CustomButton('publish'),\n SaveButton: CustomButton('save'),\n },\n },\n },\n };\n }) ?? [],\n custom: {\n ...(config.custom ?? {}),\n translator: {\n resolvers: pluginConfig.resolvers,\n },\n },\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: translateEndpoint,\n method: 'post',\n path: '/translator/translate',\n },\n ],\n globals:\n config.globals?.map((global) => {\n if (!pluginConfig.globals.includes(global.slug as GlobalSlug)) return global;\n\n return {\n ...global,\n admin: {\n ...(global.admin ?? {}),\n components: {\n ...(global.admin?.components ?? {}),\n elements: {\n ...(global.admin?.components?.elements ?? {}),\n PublishButton: CustomButton('publish'),\n SaveButton: CustomButton('save'),\n },\n },\n },\n };\n }) ?? [],\n i18n: {\n ...config.i18n,\n translations: {\n ...deepMerge(config.i18n?.translations ?? {}, translations),\n },\n },\n };\n\n return updatedConfig;\n };\n};\n"],"names":["deepMerge","CustomButton","translations","translateEndpoint","translateOperation","copyResolver","googleResolver","libreResolver","openAIResolver","translator","pluginConfig","config","disabled","localization","locales","length","updatedConfig","admin","custom","resolvers","map","key","collections","collection","includes","slug","components","edit","PublishButton","SaveButton","endpoints","handler","method","path","globals","global","elements","i18n"],"mappings":"AACA,SAASA,SAAS,QAAQ,iBAAiB;AAE3C,SAASC,YAAY,QAAQ,mCAAmC;AAChE,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,kBAAkB,QAAQ,wBAAwB;AAG3D,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,SAASC,cAAc,QAAQ,qBAAqB;AAEpD,SAASC,aAAa,QAAQ,6BAA6B;AAE3D,SAASC,cAAc,QAAQ,qBAAqB;AACpD,cAAc,oBAAoB;AAElC,SAASJ,kBAAkB,GAAG;AAE9B,OAAO,MAAMK,aAAyD,CAACC;IACrE,OAAO,CAACC;QACN,IAAID,aAAaE,QAAQ,IAAI,CAACD,OAAOE,YAAY,IAAIF,OAAOE,YAAY,CAACC,OAAO,CAACC,MAAM,GAAG,GACxF,OAAOJ;QAET,MAAMK,gBAAwB;YAC5B,GAAGL,MAAM;YACTM,OAAO;gBACL,GAAIN,OAAOM,KAAK,IAAI,CAAC,CAAC;gBACtBC,QAAQ;oBACN,GAAIP,OAAOM,KAAK,EAAEC,UAAU,CAAC,CAAC;oBAC9BT,YAAY;wBACVU,WAAWT,aAAaS,SAAS,CAACC,GAAG,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAM,CAAA;gCAAEA;4BAAI,CAAA;oBAC5D;gBACF;YACF;YACAC,aACEX,OAAOW,WAAW,EAAEF,IAAI,CAACG;gBACvB,IAAI,CAACb,aAAaY,WAAW,CAACE,QAAQ,CAACD,WAAWE,IAAI,GACpD,OAAOF;gBAET,OAAO;oBACL,GAAGA,UAAU;oBACbN,OAAO;wBACL,GAAIM,WAAWN,KAAK,IAAI,CAAC,CAAC;wBAC1BS,YAAY;4BACV,GAAIH,WAAWN,KAAK,EAAES,cAAc,CAAC,CAAC;4BACtCC,MAAM;gCACJ,GAAIJ,WAAWN,KAAK,EAAES,YAAYC,QAAQ,CAAC,CAAC;gCAC5CC,eAAe3B,aAAa;gCAC5B4B,YAAY5B,aAAa;4BAC3B;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACViB,QAAQ;gBACN,GAAIP,OAAOO,MAAM,IAAI,CAAC,CAAC;gBACvBT,YAAY;oBACVU,WAAWT,aAAaS,SAAS;gBACnC;YACF;YACAW,WAAW;mBACLnB,OAAOmB,SAAS,IAAI,EAAE;gBAC1B;oBACEC,SAAS5B;oBACT6B,QAAQ;oBACRC,MAAM;gBACR;aACD;YACDC,SACEvB,OAAOuB,OAAO,EAAEd,IAAI,CAACe;gBACnB,IAAI,CAACzB,aAAawB,OAAO,CAACV,QAAQ,CAACW,OAAOV,IAAI,GAAiB,OAAOU;gBAEtE,OAAO;oBACL,GAAGA,MAAM;oBACTlB,OAAO;wBACL,GAAIkB,OAAOlB,KAAK,IAAI,CAAC,CAAC;wBACtBS,YAAY;4BACV,GAAIS,OAAOlB,KAAK,EAAES,cAAc,CAAC,CAAC;4BAClCU,UAAU;gCACR,GAAID,OAAOlB,KAAK,EAAES,YAAYU,YAAY,CAAC,CAAC;gCAC5CR,eAAe3B,aAAa;gCAC5B4B,YAAY5B,aAAa;4BAC3B;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACVoC,MAAM;gBACJ,GAAG1B,OAAO0B,IAAI;gBACdnC,cAAc;oBACZ,GAAGF,UAAUW,OAAO0B,IAAI,EAAEnC,gBAAgB,CAAC,GAAGA,aAAa;gBAC7D;YACF;QACF;QAEA,OAAOc;IACT;AACF,EAAE"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionSlug, Config, GlobalSlug, Plugin } from 'payload';\nimport { deepMerge } from 'payload/shared';\n\nimport { CustomButton } from './client/components/CustomButton';\nimport { translations } from './i18n-translations';\nimport { translateEndpoint } from './translate/endpoint';\nimport { translateOperation } from './translate/operation';\nimport type { TranslatorConfig } from './types';\n\nexport { copyResolver } from './resolvers/copy';\n\nexport { googleResolver } from './resolvers/google';\n\nexport { libreResolver } from './resolvers/libreTranslate';\n\nexport { openAIResolver } from './resolvers/openAI';\nexport * from './resolvers/types';\n\nexport { translateOperation };\n\nexport const translator: (pluginConfig: TranslatorConfig) => Plugin = (pluginConfig) => {\n return (config) => {\n if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2)\n return config;\n\n const updatedConfig: Config = {\n ...config,\n admin: {\n ...(config.admin ?? {}),\n custom: {\n ...(config.admin?.custom ?? {}),\n translator: {\n resolvers: pluginConfig.resolvers.map(({ key }) => ({ key })),\n },\n },\n },\n collections:\n config.collections?.map((collection) => {\n if (!pluginConfig.collections.includes(collection.slug as CollectionSlug))\n return collection;\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n edit: {\n ...(collection.admin?.components?.edit ?? {}),\n PublishButton: CustomButton('publish', pluginConfig.disabledLocales ?? []),\n SaveButton: CustomButton('save', pluginConfig.disabledLocales ?? []),\n },\n },\n },\n };\n }) ?? [],\n custom: {\n ...(config.custom ?? {}),\n translator: {\n basePath: pluginConfig.basePath ?? '',\n resolvers: pluginConfig.resolvers,\n },\n },\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: translateEndpoint,\n method: 'post',\n path: '/translator/translate',\n },\n ],\n globals:\n config.globals?.map((global) => {\n if (!pluginConfig.globals.includes(global.slug as GlobalSlug)) return global;\n\n return {\n ...global,\n admin: {\n ...(global.admin ?? {}),\n components: {\n ...(global.admin?.components ?? {}),\n elements: {\n ...(global.admin?.components?.elements ?? {}),\n PublishButton: CustomButton('publish', pluginConfig.disabledLocales ?? []),\n SaveButton: CustomButton('save', pluginConfig.disabledLocales ?? []),\n },\n },\n },\n };\n }) ?? [],\n i18n: {\n ...config.i18n,\n translations: {\n ...deepMerge(config.i18n?.translations ?? {}, translations),\n },\n },\n };\n\n return updatedConfig;\n };\n};\n"],"names":["deepMerge","CustomButton","translations","translateEndpoint","translateOperation","copyResolver","googleResolver","libreResolver","openAIResolver","translator","pluginConfig","config","disabled","localization","locales","length","updatedConfig","admin","custom","resolvers","map","key","collections","collection","includes","slug","components","edit","PublishButton","disabledLocales","SaveButton","basePath","endpoints","handler","method","path","globals","global","elements","i18n"],"mappings":"AACA,SAASA,SAAS,QAAQ,iBAAiB;AAE3C,SAASC,YAAY,QAAQ,mCAAmC;AAChE,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,kBAAkB,QAAQ,wBAAwB;AAG3D,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,SAASC,cAAc,QAAQ,qBAAqB;AAEpD,SAASC,aAAa,QAAQ,6BAA6B;AAE3D,SAASC,cAAc,QAAQ,qBAAqB;AACpD,cAAc,oBAAoB;AAElC,SAASJ,kBAAkB,GAAG;AAE9B,OAAO,MAAMK,aAAyD,CAACC;IACrE,OAAO,CAACC;QACN,IAAID,aAAaE,QAAQ,IAAI,CAACD,OAAOE,YAAY,IAAIF,OAAOE,YAAY,CAACC,OAAO,CAACC,MAAM,GAAG,GACxF,OAAOJ;QAET,MAAMK,gBAAwB;YAC5B,GAAGL,MAAM;YACTM,OAAO;gBACL,GAAIN,OAAOM,KAAK,IAAI,CAAC,CAAC;gBACtBC,QAAQ;oBACN,GAAIP,OAAOM,KAAK,EAAEC,UAAU,CAAC,CAAC;oBAC9BT,YAAY;wBACVU,WAAWT,aAAaS,SAAS,CAACC,GAAG,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAM,CAAA;gCAAEA;4BAAI,CAAA;oBAC5D;gBACF;YACF;YACAC,aACEX,OAAOW,WAAW,EAAEF,IAAI,CAACG;gBACvB,IAAI,CAACb,aAAaY,WAAW,CAACE,QAAQ,CAACD,WAAWE,IAAI,GACpD,OAAOF;gBAET,OAAO;oBACL,GAAGA,UAAU;oBACbN,OAAO;wBACL,GAAIM,WAAWN,KAAK,IAAI,CAAC,CAAC;wBAC1BS,YAAY;4BACV,GAAIH,WAAWN,KAAK,EAAES,cAAc,CAAC,CAAC;4BACtCC,MAAM;gCACJ,GAAIJ,WAAWN,KAAK,EAAES,YAAYC,QAAQ,CAAC,CAAC;gCAC5CC,eAAe3B,aAAa,WAAWS,aAAamB,eAAe,IAAI,EAAE;gCACzEC,YAAY7B,aAAa,QAAQS,aAAamB,eAAe,IAAI,EAAE;4BACrE;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACVX,QAAQ;gBACN,GAAIP,OAAOO,MAAM,IAAI,CAAC,CAAC;gBACvBT,YAAY;oBACVsB,UAAUrB,aAAaqB,QAAQ,IAAI;oBACnCZ,WAAWT,aAAaS,SAAS;gBACnC;YACF;YACAa,WAAW;mBACLrB,OAAOqB,SAAS,IAAI,EAAE;gBAC1B;oBACEC,SAAS9B;oBACT+B,QAAQ;oBACRC,MAAM;gBACR;aACD;YACDC,SACEzB,OAAOyB,OAAO,EAAEhB,IAAI,CAACiB;gBACnB,IAAI,CAAC3B,aAAa0B,OAAO,CAACZ,QAAQ,CAACa,OAAOZ,IAAI,GAAiB,OAAOY;gBAEtE,OAAO;oBACL,GAAGA,MAAM;oBACTpB,OAAO;wBACL,GAAIoB,OAAOpB,KAAK,IAAI,CAAC,CAAC;wBACtBS,YAAY;4BACV,GAAIW,OAAOpB,KAAK,EAAES,cAAc,CAAC,CAAC;4BAClCY,UAAU;gCACR,GAAID,OAAOpB,KAAK,EAAES,YAAYY,YAAY,CAAC,CAAC;gCAC5CV,eAAe3B,aAAa,WAAWS,aAAamB,eAAe,IAAI,EAAE;gCACzEC,YAAY7B,aAAa,QAAQS,aAAamB,eAAe,IAAI,EAAE;4BACrE;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACVU,MAAM;gBACJ,GAAG5B,OAAO4B,IAAI;gBACdrC,cAAc;oBACZ,GAAGF,UAAUW,OAAO4B,IAAI,EAAErC,gBAAgB,CAAC,GAAGA,aAAa;gBAC7D;YACF;QACF;QAEA,OAAOc;IACT;AACF,EAAE"}
package/dist/types.d.ts CHANGED
@@ -17,5 +17,13 @@ export type TranslatorConfig = {
17
17
  * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers
18
18
  */
19
19
  resolvers: TranslateResolver[];
20
+ /**
21
+ * Locales that should be excluded from translation (source and target)
22
+ */
23
+ disabledLocales?: string[];
24
+ /**
25
+ * Optional base path for the translator API endpoint
26
+ */
27
+ basePath?: string;
20
28
  };
21
29
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload';\n\nimport type { TranslateResolver } from './resolvers/types';\n\nexport type TranslatorConfig = {\n /**\n * Collections with the enabled translator in the admin UI\n */\n collections: CollectionSlug[];\n /**\n * Disable the plugin\n */\n disabled?: boolean;\n /**\n * Globals with the enabled translator in the admin UI\n */\n globals: GlobalSlug[];\n /**\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\n */\n resolvers: TranslateResolver[];\n};\n"],"names":[],"mappings":"AAIA,WAiBE"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from 'payload';\n\nimport type { TranslateResolver } from './resolvers/types';\n\nexport type TranslatorConfig = {\n /**\n * Collections with the enabled translator in the admin UI\n */\n collections: CollectionSlug[];\n /**\n * Disable the plugin\n */\n disabled?: boolean;\n /**\n * Globals with the enabled translator in the admin UI\n */\n globals: GlobalSlug[];\n /**\n * Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers\n */\n resolvers: TranslateResolver[];\n /**\n * Locales that should be excluded from translation (source and target)\n */\n disabledLocales?: string[];\n /**\n * Optional base path for the translator API endpoint\n */\n basePath?: string;\n};\n"],"names":[],"mappings":"AAIA,WAyBE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@extravirgin/payload-enchants-translator",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "private": false,
5
5
  "bugs": "https://github.com/Kliqs/payload-enchants/issues",
6
6
  "repository": "https://github.com/Kliqs/payload-enchants",
@@ -47,16 +47,6 @@
47
47
  "files": [
48
48
  "dist"
49
49
  ],
50
- "scripts": {
51
- "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types",
52
- "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
53
- "build:types": "tsc --emitDeclarationOnly --outDir dist",
54
- "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
55
- "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
56
- "lint": "eslint src",
57
- "lint:fix": "eslint --fix --ext .ts,.tsx src",
58
- "prepublishOnly": "pnpm clean && pnpm build"
59
- },
60
50
  "dependencies": {
61
51
  "bson-objectid": "^2.0.4",
62
52
  "he": "^1.2.0"
@@ -78,5 +68,14 @@
78
68
  "registry": "https://registry.npmjs.org/"
79
69
  },
80
70
  "main": "./dist/index.js",
81
- "types": "./dist/index.d.ts"
82
- }
71
+ "types": "./dist/index.d.ts",
72
+ "scripts": {
73
+ "build": "pnpm copyfiles && pnpm build:swc && pnpm build:types",
74
+ "build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
75
+ "build:types": "tsc --emitDeclarationOnly --outDir dist",
76
+ "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
77
+ "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png,json}\" dist/",
78
+ "lint": "eslint src",
79
+ "lint:fix": "eslint --fix --ext .ts,.tsx src"
80
+ }
81
+ }