@webiny/languages 0.0.0-unstable.0d717d18dd

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 (139) hide show
  1. package/LICENSE +36 -0
  2. package/Languages.d.ts +2 -0
  3. package/Languages.js +11 -0
  4. package/Languages.js.map +1 -0
  5. package/README.md +11 -0
  6. package/admin/Extension.d.ts +2 -0
  7. package/admin/Extension.js +29 -0
  8. package/admin/Extension.js.map +1 -0
  9. package/admin/GenericCell.d.ts +6 -0
  10. package/admin/GenericCell.js +11 -0
  11. package/admin/GenericCell.js.map +1 -0
  12. package/admin/LanguageEntryList.d.ts +2 -0
  13. package/admin/LanguageEntryList.js +37 -0
  14. package/admin/LanguageEntryList.js.map +1 -0
  15. package/admin/PermissionsSchema.d.ts +5 -0
  16. package/admin/PermissionsSchema.js +9 -0
  17. package/admin/PermissionsSchema.js.map +1 -0
  18. package/admin/SecurityPermission.d.ts +2 -0
  19. package/admin/SecurityPermission.js +15 -0
  20. package/admin/SecurityPermission.js.map +1 -0
  21. package/admin/features/listLanguages/LanguageEntryAfterCreateHandler.d.ts +11 -0
  22. package/admin/features/listLanguages/LanguageEntryAfterCreateHandler.js +24 -0
  23. package/admin/features/listLanguages/LanguageEntryAfterCreateHandler.js.map +1 -0
  24. package/admin/features/listLanguages/LanguageEntryAfterDeleteHandler.d.ts +11 -0
  25. package/admin/features/listLanguages/LanguageEntryAfterDeleteHandler.js +21 -0
  26. package/admin/features/listLanguages/LanguageEntryAfterDeleteHandler.js.map +1 -0
  27. package/admin/features/listLanguages/LanguageEntryAfterUpdateHandler.d.ts +11 -0
  28. package/admin/features/listLanguages/LanguageEntryAfterUpdateHandler.js +26 -0
  29. package/admin/features/listLanguages/LanguageEntryAfterUpdateHandler.js.map +1 -0
  30. package/admin/features/listLanguages/ListLanguagesGateway.d.ts +11 -0
  31. package/admin/features/listLanguages/ListLanguagesGateway.js +44 -0
  32. package/admin/features/listLanguages/ListLanguagesGateway.js.map +1 -0
  33. package/admin/features/listLanguages/ListLanguagesRepository.d.ts +13 -0
  34. package/admin/features/listLanguages/ListLanguagesRepository.js +30 -0
  35. package/admin/features/listLanguages/ListLanguagesRepository.js.map +1 -0
  36. package/admin/features/listLanguages/ListLanguagesUseCase.d.ts +10 -0
  37. package/admin/features/listLanguages/ListLanguagesUseCase.js +18 -0
  38. package/admin/features/listLanguages/ListLanguagesUseCase.js.map +1 -0
  39. package/admin/features/listLanguages/abstractions.d.ts +35 -0
  40. package/admin/features/listLanguages/abstractions.js +8 -0
  41. package/admin/features/listLanguages/abstractions.js.map +1 -0
  42. package/admin/features/listLanguages/feature.d.ts +6 -0
  43. package/admin/features/listLanguages/feature.js +31 -0
  44. package/admin/features/listLanguages/feature.js.map +1 -0
  45. package/admin/features/listLanguages/index.d.ts +2 -0
  46. package/admin/features/listLanguages/index.js +1 -0
  47. package/admin/features/listLanguages/toLanguageDto.d.ts +3 -0
  48. package/admin/features/listLanguages/toLanguageDto.js +13 -0
  49. package/admin/features/listLanguages/toLanguageDto.js.map +1 -0
  50. package/admin/presentation/hooks/useLanguages.d.ts +5 -0
  51. package/admin/presentation/hooks/useLanguages.js +27 -0
  52. package/admin/presentation/hooks/useLanguages.js.map +1 -0
  53. package/api/Extension.d.ts +4 -0
  54. package/api/Extension.js +25 -0
  55. package/api/Extension.js.map +1 -0
  56. package/api/domain/Language.d.ts +8 -0
  57. package/api/domain/Language.js +0 -0
  58. package/api/domain/LanguageModel.d.ts +8 -0
  59. package/api/domain/LanguageModel.js +56 -0
  60. package/api/domain/LanguageModel.js.map +1 -0
  61. package/api/domain/errors.d.ts +15 -0
  62. package/api/domain/errors.js +28 -0
  63. package/api/domain/errors.js.map +1 -0
  64. package/api/domain/permissionsSchema.d.ts +5 -0
  65. package/api/domain/permissionsSchema.js +9 -0
  66. package/api/domain/permissionsSchema.js.map +1 -0
  67. package/api/features/AddCmsPermissions/AddCmsPermissions.d.ts +8 -0
  68. package/api/features/AddCmsPermissions/AddCmsPermissions.js +49 -0
  69. package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -0
  70. package/api/features/AddCmsPermissions/feature.d.ts +4 -0
  71. package/api/features/AddCmsPermissions/feature.js +11 -0
  72. package/api/features/AddCmsPermissions/feature.js.map +1 -0
  73. package/api/features/EnsureSingleDefaultLanguage/UnsetDefaultLanguagesHandler.d.ts +15 -0
  74. package/api/features/EnsureSingleDefaultLanguage/UnsetDefaultLanguagesHandler.js +48 -0
  75. package/api/features/EnsureSingleDefaultLanguage/UnsetDefaultLanguagesHandler.js.map +1 -0
  76. package/api/features/EnsureSingleDefaultLanguage/feature.d.ts +4 -0
  77. package/api/features/EnsureSingleDefaultLanguage/feature.js +11 -0
  78. package/api/features/EnsureSingleDefaultLanguage/feature.js.map +1 -0
  79. package/api/features/GetDefaultLanguage/GetDefaultLanguageRepository.d.ts +13 -0
  80. package/api/features/GetDefaultLanguage/GetDefaultLanguageRepository.js +48 -0
  81. package/api/features/GetDefaultLanguage/GetDefaultLanguageRepository.js.map +1 -0
  82. package/api/features/GetDefaultLanguage/GetDefaultLanguageUseCase.d.ts +8 -0
  83. package/api/features/GetDefaultLanguage/GetDefaultLanguageUseCase.js +20 -0
  84. package/api/features/GetDefaultLanguage/GetDefaultLanguageUseCase.js.map +1 -0
  85. package/api/features/GetDefaultLanguage/abstractions.d.ts +33 -0
  86. package/api/features/GetDefaultLanguage/abstractions.js +6 -0
  87. package/api/features/GetDefaultLanguage/abstractions.js.map +1 -0
  88. package/api/features/GetDefaultLanguage/feature.d.ts +4 -0
  89. package/api/features/GetDefaultLanguage/feature.js +13 -0
  90. package/api/features/GetDefaultLanguage/feature.js.map +1 -0
  91. package/api/features/GetDefaultLanguage/index.d.ts +1 -0
  92. package/api/features/GetDefaultLanguage/index.js +1 -0
  93. package/api/features/GetLanguageByCode/GetLanguageByCodeRepository.d.ts +13 -0
  94. package/api/features/GetLanguageByCode/GetLanguageByCodeRepository.js +48 -0
  95. package/api/features/GetLanguageByCode/GetLanguageByCodeRepository.js.map +1 -0
  96. package/api/features/GetLanguageByCode/GetLanguageByCodeUseCase.d.ts +8 -0
  97. package/api/features/GetLanguageByCode/GetLanguageByCodeUseCase.js +20 -0
  98. package/api/features/GetLanguageByCode/GetLanguageByCodeUseCase.js.map +1 -0
  99. package/api/features/GetLanguageByCode/abstractions.d.ts +33 -0
  100. package/api/features/GetLanguageByCode/abstractions.js +6 -0
  101. package/api/features/GetLanguageByCode/abstractions.js.map +1 -0
  102. package/api/features/GetLanguageByCode/feature.d.ts +4 -0
  103. package/api/features/GetLanguageByCode/feature.js +13 -0
  104. package/api/features/GetLanguageByCode/feature.js.map +1 -0
  105. package/api/features/GetLanguageByCode/index.d.ts +1 -0
  106. package/api/features/GetLanguageByCode/index.js +1 -0
  107. package/api/features/ListLanguages/ListLanguagesRepository.d.ts +13 -0
  108. package/api/features/ListLanguages/ListLanguagesRepository.js +48 -0
  109. package/api/features/ListLanguages/ListLanguagesRepository.js.map +1 -0
  110. package/api/features/ListLanguages/ListLanguagesUseCase.d.ts +8 -0
  111. package/api/features/ListLanguages/ListLanguagesUseCase.js +20 -0
  112. package/api/features/ListLanguages/ListLanguagesUseCase.js.map +1 -0
  113. package/api/features/ListLanguages/abstractions.d.ts +31 -0
  114. package/api/features/ListLanguages/abstractions.js +6 -0
  115. package/api/features/ListLanguages/abstractions.js.map +1 -0
  116. package/api/features/ListLanguages/feature.d.ts +4 -0
  117. package/api/features/ListLanguages/feature.js +13 -0
  118. package/api/features/ListLanguages/feature.js.map +1 -0
  119. package/api/features/ListLanguages/index.d.ts +1 -0
  120. package/api/features/ListLanguages/index.js +1 -0
  121. package/api/features/Permissions/abstractions.d.ts +10 -0
  122. package/api/features/Permissions/abstractions.js +6 -0
  123. package/api/features/Permissions/abstractions.js.map +1 -0
  124. package/api/features/Permissions/feature.d.ts +4 -0
  125. package/api/features/Permissions/feature.js +7 -0
  126. package/api/features/Permissions/feature.js.map +1 -0
  127. package/api/graphql/LanguagesGraphQLSchema.d.ts +8 -0
  128. package/api/graphql/LanguagesGraphQLSchema.js +59 -0
  129. package/api/graphql/LanguagesGraphQLSchema.js.map +1 -0
  130. package/exports/admin/languages.d.ts +2 -0
  131. package/exports/admin/languages.js +1 -0
  132. package/exports/api/languages.d.ts +3 -0
  133. package/exports/api/languages.js +3 -0
  134. package/index.d.ts +1 -0
  135. package/index.js +1 -0
  136. package/package.json +53 -0
  137. package/shared/constants.d.ts +1 -0
  138. package/shared/constants.js +4 -0
  139. package/shared/constants.js.map +1 -0
@@ -0,0 +1,31 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { ListCache } from "@webiny/app-admin/features/listCache/index.js";
3
+ import { LanguagesCache, ListLanguagesRepository, ListLanguagesUseCase } from "./abstractions.js";
4
+ import { ListLanguagesUseCase as external_ListLanguagesUseCase_js_ListLanguagesUseCase } from "./ListLanguagesUseCase.js";
5
+ import { ListLanguagesRepository as external_ListLanguagesRepository_js_ListLanguagesRepository } from "./ListLanguagesRepository.js";
6
+ import { ListLanguagesGateway } from "./ListLanguagesGateway.js";
7
+ import { LanguageEntryAfterCreateHandler } from "./LanguageEntryAfterCreateHandler.js";
8
+ import { LanguageEntryAfterUpdateHandler } from "./LanguageEntryAfterUpdateHandler.js";
9
+ import { LanguageEntryAfterDeleteHandler } from "./LanguageEntryAfterDeleteHandler.js";
10
+ const ListLanguagesFeature = createFeature({
11
+ name: "Languages/ListLanguages",
12
+ register (container) {
13
+ container.registerInstance(LanguagesCache, new ListCache());
14
+ container.register(external_ListLanguagesUseCase_js_ListLanguagesUseCase);
15
+ container.register(external_ListLanguagesRepository_js_ListLanguagesRepository).inSingletonScope();
16
+ container.register(ListLanguagesGateway).inSingletonScope();
17
+ container.register(LanguageEntryAfterCreateHandler);
18
+ container.register(LanguageEntryAfterUpdateHandler);
19
+ container.register(LanguageEntryAfterDeleteHandler);
20
+ },
21
+ resolve (container) {
22
+ return {
23
+ useCase: container.resolve(ListLanguagesUseCase),
24
+ repository: container.resolve(ListLanguagesRepository),
25
+ cache: container.resolve(LanguagesCache)
26
+ };
27
+ }
28
+ });
29
+ export { ListLanguagesFeature };
30
+
31
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/features/listLanguages/feature.js","sources":["../../../../src/admin/features/listLanguages/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport {\n ListLanguagesUseCase as UseCaseAbstraction,\n ListLanguagesRepository as RepositoryAbstraction,\n LanguagesCache\n} from \"./abstractions.js\";\nimport type { LanguageDto } from \"./abstractions.js\";\nimport { ListLanguagesUseCase } from \"./ListLanguagesUseCase.js\";\nimport { ListLanguagesRepository } from \"./ListLanguagesRepository.js\";\nimport { ListLanguagesGateway } from \"./ListLanguagesGateway.js\";\nimport { LanguageEntryAfterCreateHandler } from \"./LanguageEntryAfterCreateHandler.js\";\nimport { LanguageEntryAfterUpdateHandler } from \"./LanguageEntryAfterUpdateHandler.js\";\nimport { LanguageEntryAfterDeleteHandler } from \"./LanguageEntryAfterDeleteHandler.js\";\n\nexport const ListLanguagesFeature = createFeature({\n name: \"Languages/ListLanguages\",\n register(container) {\n container.registerInstance(LanguagesCache, new ListCache<LanguageDto>());\n container.register(ListLanguagesUseCase);\n container.register(ListLanguagesRepository).inSingletonScope();\n container.register(ListLanguagesGateway).inSingletonScope();\n container.register(LanguageEntryAfterCreateHandler);\n container.register(LanguageEntryAfterUpdateHandler);\n container.register(LanguageEntryAfterDeleteHandler);\n },\n resolve(container) {\n return {\n useCase: container.resolve(UseCaseAbstraction),\n repository: container.resolve(RepositoryAbstraction),\n cache: container.resolve(LanguagesCache)\n };\n }\n});\n"],"names":["ListLanguagesFeature","createFeature","container","LanguagesCache","ListCache","ListLanguagesUseCase","ListLanguagesRepository","ListLanguagesGateway","LanguageEntryAfterCreateHandler","LanguageEntryAfterUpdateHandler","LanguageEntryAfterDeleteHandler","UseCaseAbstraction","RepositoryAbstraction"],"mappings":";;;;;;;;;AAeO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,gBAAgB,CAACC,gBAAgB,IAAIC;QAC/CF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI,6DAAyB,gBAAgB;QAC5DJ,UAAU,QAAQ,CAACK,sBAAsB,gBAAgB;QACzDL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;IACvB;IACA,SAAQR,SAAS;QACb,OAAO;YACH,SAASA,UAAU,OAAO,CAACS;YAC3B,YAAYT,UAAU,OAAO,CAACU;YAC9B,OAAOV,UAAU,OAAO,CAACC;QAC7B;IACJ;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { ListLanguagesFeature } from "./feature.js";
2
+ export type { LanguageDto } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { ListLanguagesFeature } from "./feature.js";
@@ -0,0 +1,3 @@
1
+ import type { LanguageDto } from "./abstractions.js";
2
+ import type { CmsContentEntry } from "@webiny/app-headless-cms/types.js";
3
+ export declare function toLanguageDto(entry: CmsContentEntry): LanguageDto;
@@ -0,0 +1,13 @@
1
+ function toLanguageDto(entry) {
2
+ return {
3
+ id: entry.entryId,
4
+ code: entry.values.code,
5
+ name: entry.values.name,
6
+ direction: entry.values.direction,
7
+ isDefault: entry.values.isDefault,
8
+ enabled: entry.values.enabled
9
+ };
10
+ }
11
+ export { toLanguageDto };
12
+
13
+ //# sourceMappingURL=toLanguageDto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/features/listLanguages/toLanguageDto.js","sources":["../../../../src/admin/features/listLanguages/toLanguageDto.ts"],"sourcesContent":["import type { LanguageDto } from \"./abstractions.js\";\nimport type { CmsContentEntry } from \"@webiny/app-headless-cms/types.js\";\n\nexport function toLanguageDto(entry: CmsContentEntry): LanguageDto {\n return {\n id: entry.entryId,\n code: entry.values.code,\n name: entry.values.name,\n direction: entry.values.direction,\n isDefault: entry.values.isDefault,\n enabled: entry.values.enabled\n };\n}\n"],"names":["toLanguageDto","entry"],"mappings":"AAGO,SAASA,cAAcC,KAAsB;IAChD,OAAO;QACH,IAAIA,MAAM,OAAO;QACjB,MAAMA,MAAM,MAAM,CAAC,IAAI;QACvB,MAAMA,MAAM,MAAM,CAAC,IAAI;QACvB,WAAWA,MAAM,MAAM,CAAC,SAAS;QACjC,WAAWA,MAAM,MAAM,CAAC,SAAS;QACjC,SAASA,MAAM,MAAM,CAAC,OAAO;IACjC;AACJ"}
@@ -0,0 +1,5 @@
1
+ import type { LanguageDto } from "../../../admin/features/listLanguages/index.js";
2
+ export declare const useLanguages: () => {
3
+ loading: boolean;
4
+ languages: LanguageDto[];
5
+ };
@@ -0,0 +1,27 @@
1
+ import { useEffect, useState } from "react";
2
+ import { autorun } from "mobx";
3
+ import { useFeature } from "@webiny/app";
4
+ import { ListLanguagesFeature } from "../../features/listLanguages/index.js";
5
+ const useLanguages = ()=>{
6
+ const { useCase, cache } = useFeature(ListLanguagesFeature);
7
+ const [languages, setLanguages] = useState([]);
8
+ const [loading, setLoading] = useState(true);
9
+ useEffect(()=>{
10
+ useCase.execute().then(()=>{
11
+ setLoading(false);
12
+ });
13
+ return autorun(()=>{
14
+ setLanguages(cache.getItems());
15
+ });
16
+ }, [
17
+ useCase,
18
+ cache
19
+ ]);
20
+ return {
21
+ loading,
22
+ languages
23
+ };
24
+ };
25
+ export { useLanguages };
26
+
27
+ //# sourceMappingURL=useLanguages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/hooks/useLanguages.js","sources":["../../../../src/admin/presentation/hooks/useLanguages.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { autorun } from \"mobx\";\nimport { useFeature } from \"@webiny/app\";\nimport { ListLanguagesFeature } from \"~/admin/features/listLanguages/index.js\";\nimport type { LanguageDto } from \"~/admin/features/listLanguages/index.js\";\n\nexport const useLanguages = () => {\n const { useCase, cache } = useFeature(ListLanguagesFeature);\n const [languages, setLanguages] = useState<LanguageDto[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n useCase.execute().then(() => {\n setLoading(false);\n });\n\n return autorun(() => {\n setLanguages(cache.getItems());\n });\n }, [useCase, cache]);\n\n return { loading, languages };\n};\n"],"names":["useLanguages","useCase","cache","useFeature","ListLanguagesFeature","languages","setLanguages","useState","loading","setLoading","useEffect","autorun"],"mappings":";;;;AAMO,MAAMA,eAAe;IACxB,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAE,GAAGC,WAAWC;IACtC,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAwB,EAAE;IAC5D,MAAM,CAACC,SAASC,WAAW,GAAGF,SAAS;IAEvCG,UAAU;QACNT,QAAQ,OAAO,GAAG,IAAI,CAAC;YACnBQ,WAAW;QACf;QAEA,OAAOE,QAAQ;YACXL,aAAaJ,MAAM,QAAQ;QAC/B;IACJ,GAAG;QAACD;QAASC;KAAM;IAEnB,OAAO;QAAEM;QAASH;IAAU;AAChC"}
@@ -0,0 +1,4 @@
1
+ export declare const Extension: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,25 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import LanguageModel from "./domain/LanguageModel.js";
3
+ import { EnsureSingleDefaultLanguageFeature } from "./features/EnsureSingleDefaultLanguage/feature.js";
4
+ import { GetDefaultLanguageFeature } from "./features/GetDefaultLanguage/feature.js";
5
+ import { GetLanguageByCodeFeature } from "./features/GetLanguageByCode/feature.js";
6
+ import { ListLanguagesFeature } from "./features/ListLanguages/feature.js";
7
+ import { LanguagesGraphQLSchema } from "./graphql/LanguagesGraphQLSchema.js";
8
+ import { AddCmsPermissionsFeature } from "./features/AddCmsPermissions/feature.js";
9
+ import { LanguagesPermissionsFeature } from "./features/Permissions/feature.js";
10
+ const Extension = createFeature({
11
+ name: "Languages",
12
+ register (container) {
13
+ container.register(LanguageModel);
14
+ EnsureSingleDefaultLanguageFeature.register(container);
15
+ GetDefaultLanguageFeature.register(container);
16
+ GetLanguageByCodeFeature.register(container);
17
+ ListLanguagesFeature.register(container);
18
+ AddCmsPermissionsFeature.register(container);
19
+ LanguagesPermissionsFeature.register(container);
20
+ container.register(LanguagesGraphQLSchema);
21
+ }
22
+ });
23
+ export { Extension };
24
+
25
+ //# sourceMappingURL=Extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/Extension.js","sources":["../../src/api/Extension.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport LanguageModel from \"./domain/LanguageModel.js\";\nimport { EnsureSingleDefaultLanguageFeature } from \"./features/EnsureSingleDefaultLanguage/feature.js\";\nimport { GetDefaultLanguageFeature } from \"./features/GetDefaultLanguage/feature.js\";\nimport { GetLanguageByCodeFeature } from \"./features/GetLanguageByCode/feature.js\";\nimport { ListLanguagesFeature } from \"./features/ListLanguages/feature.js\";\nimport { LanguagesGraphQLSchema } from \"./graphql/LanguagesGraphQLSchema.js\";\nimport { AddCmsPermissionsFeature } from \"~/api/features/AddCmsPermissions/feature.js\";\nimport { LanguagesPermissionsFeature } from \"~/api/features/Permissions/feature.js\";\n\nexport const Extension = createFeature({\n name: \"Languages\",\n register(container) {\n container.register(LanguageModel);\n\n // Features\n EnsureSingleDefaultLanguageFeature.register(container);\n GetDefaultLanguageFeature.register(container);\n GetLanguageByCodeFeature.register(container);\n ListLanguagesFeature.register(container);\n AddCmsPermissionsFeature.register(container);\n LanguagesPermissionsFeature.register(container);\n\n // GraphQL\n container.register(LanguagesGraphQLSchema);\n }\n});\n"],"names":["Extension","createFeature","container","LanguageModel","EnsureSingleDefaultLanguageFeature","GetDefaultLanguageFeature","GetLanguageByCodeFeature","ListLanguagesFeature","AddCmsPermissionsFeature","LanguagesPermissionsFeature","LanguagesGraphQLSchema"],"mappings":";;;;;;;;;AAUO,MAAMA,YAAYC,cAAc;IACnC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QAGnBC,mCAAmC,QAAQ,CAACF;QAC5CG,0BAA0B,QAAQ,CAACH;QACnCI,yBAAyB,QAAQ,CAACJ;QAClCK,qBAAqB,QAAQ,CAACL;QAC9BM,yBAAyB,QAAQ,CAACN;QAClCO,4BAA4B,QAAQ,CAACP;QAGrCA,UAAU,QAAQ,CAACQ;IACvB;AACJ"}
@@ -0,0 +1,8 @@
1
+ export interface Language {
2
+ id: string;
3
+ name: string;
4
+ code: string;
5
+ direction: "ltr" | "rtl";
6
+ isDefault: boolean;
7
+ enabled: boolean;
8
+ }
File without changes
@@ -0,0 +1,8 @@
1
+ import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
2
+ declare class LanguageModelFactory implements ModelFactory.Interface {
3
+ execute(builder: ModelFactory.Builder): Promise<import("@webiny/api-headless-cms/features/modelBuilder/index.js").PublicModelBuilder[]>;
4
+ }
5
+ declare const _default: typeof LanguageModelFactory & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms/features/modelBuilder/abstractions").IModelFactory>;
7
+ };
8
+ export default _default;
@@ -0,0 +1,56 @@
1
+ import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
2
+ import { LANGUAGE_MODEL_ID } from "../../shared/constants.js";
3
+ class LanguageModelFactory {
4
+ async execute(builder) {
5
+ const model = builder.public({
6
+ modelId: LANGUAGE_MODEL_ID,
7
+ name: "Language",
8
+ group: "hidden"
9
+ }).description("Manage system languages.").titleFieldId("name").icon("fas/language").singularApiName("Language").pluralApiName("Languages").tags([
10
+ "$publishing:false",
11
+ "$hidden:true"
12
+ ]);
13
+ model.fields((fields)=>({
14
+ name: fields.text().label("Name").description("The display name for this language (e.g., German, English, Arabic).").required().renderer("textInput"),
15
+ code: fields.text().label("Code").description("A unique language or locale code used for URL routing and identifying content (e.g., en, de, pt-BR).").required().renderer("textInput"),
16
+ direction: fields.text().label("Direction").description("Controls the text direction. Most languages read left-to-right, but some (like Arabic and Hebrew) read right-to-left.").defaultValue("ltr").renderer("select").required().predefinedValues([
17
+ {
18
+ value: "ltr",
19
+ label: "LTR"
20
+ },
21
+ {
22
+ value: "rtl",
23
+ label: "RTL"
24
+ }
25
+ ]),
26
+ isDefault: fields.boolean().label("Is default?").description("Make this the primary language. Default language content is shown when no specific language is requested.").defaultValue(false).renderer("switch"),
27
+ enabled: fields.boolean().label("Is enabled?").description("Disabled languages are hidden from the public site but can still be configured and translated in the admin.").defaultValue(false).renderer("switch")
28
+ })).layout([
29
+ [
30
+ "name"
31
+ ],
32
+ [
33
+ "code"
34
+ ],
35
+ [
36
+ "direction"
37
+ ],
38
+ [
39
+ "isDefault"
40
+ ],
41
+ [
42
+ "enabled"
43
+ ]
44
+ ]);
45
+ return [
46
+ model
47
+ ];
48
+ }
49
+ }
50
+ const LanguageModel = ModelFactory.createImplementation({
51
+ implementation: LanguageModelFactory,
52
+ dependencies: []
53
+ });
54
+ export default LanguageModel;
55
+
56
+ //# sourceMappingURL=LanguageModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/domain/LanguageModel.js","sources":["../../../src/api/domain/LanguageModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { LANGUAGE_MODEL_ID } from \"~/shared/constants.js\";\n\nclass LanguageModelFactory implements ModelFactory.Interface {\n async execute(builder: ModelFactory.Builder) {\n const model = builder\n .public({\n modelId: LANGUAGE_MODEL_ID,\n name: \"Language\",\n group: \"hidden\"\n })\n .description(\"Manage system languages.\")\n .titleFieldId(\"name\")\n .icon(\"fas/language\")\n .singularApiName(\"Language\")\n .pluralApiName(\"Languages\")\n .tags([\"$publishing:false\", \"$hidden:true\"]);\n\n model\n .fields(fields => ({\n name: fields\n .text()\n .label(\"Name\")\n .description(\n \"The display name for this language (e.g., German, English, Arabic).\"\n )\n .required()\n .renderer(\"textInput\"),\n code: fields\n .text()\n .label(\"Code\")\n .description(\n \"A unique language or locale code used for URL routing and identifying content (e.g., en, de, pt-BR).\"\n )\n .required()\n .renderer(\"textInput\"),\n direction: fields\n .text()\n .label(\"Direction\")\n .description(\n \"Controls the text direction. Most languages read left-to-right, but some (like Arabic and Hebrew) read right-to-left.\"\n )\n .defaultValue(\"ltr\")\n .renderer(\"select\")\n .required()\n .predefinedValues([\n {\n value: \"ltr\",\n label: \"LTR\"\n },\n {\n value: \"rtl\",\n label: \"RTL\"\n }\n ]),\n isDefault: fields\n .boolean()\n .label(\"Is default?\")\n .description(\n \"Make this the primary language. Default language content is shown when no specific language is requested.\"\n )\n .defaultValue(false)\n .renderer(\"switch\"),\n enabled: fields\n .boolean()\n .label(\"Is enabled?\")\n .description(\n \"Disabled languages are hidden from the public site but can still be configured and translated in the admin.\"\n )\n .defaultValue(false)\n .renderer(\"switch\")\n }))\n .layout([[\"name\"], [\"code\"], [\"direction\"], [\"isDefault\"], [\"enabled\"]]);\n\n return [model];\n }\n}\n\nexport default ModelFactory.createImplementation({\n implementation: LanguageModelFactory,\n dependencies: []\n});\n"],"names":["LanguageModelFactory","builder","model","LANGUAGE_MODEL_ID","fields","ModelFactory"],"mappings":";;AAGA,MAAMA;IACF,MAAM,QAAQC,OAA6B,EAAE;QACzC,MAAMC,QAAQD,QACT,MAAM,CAAC;YACJ,SAASE;YACT,MAAM;YACN,OAAO;QACX,GACC,WAAW,CAAC,4BACZ,YAAY,CAAC,QACb,IAAI,CAAC,gBACL,eAAe,CAAC,YAChB,aAAa,CAAC,aACd,IAAI,CAAC;YAAC;YAAqB;SAAe;QAE/CD,MACK,MAAM,CAACE,CAAAA,SAAW;gBACf,MAAMA,OACD,IAAI,GACJ,KAAK,CAAC,QACN,WAAW,CACR,uEAEH,QAAQ,GACR,QAAQ,CAAC;gBACd,MAAMA,OACD,IAAI,GACJ,KAAK,CAAC,QACN,WAAW,CACR,wGAEH,QAAQ,GACR,QAAQ,CAAC;gBACd,WAAWA,OACN,IAAI,GACJ,KAAK,CAAC,aACN,WAAW,CACR,yHAEH,YAAY,CAAC,OACb,QAAQ,CAAC,UACT,QAAQ,GACR,gBAAgB,CAAC;oBACd;wBACI,OAAO;wBACP,OAAO;oBACX;oBACA;wBACI,OAAO;wBACP,OAAO;oBACX;iBACH;gBACL,WAAWA,OACN,OAAO,GACP,KAAK,CAAC,eACN,WAAW,CACR,6GAEH,YAAY,CAAC,OACb,QAAQ,CAAC;gBACd,SAASA,OACJ,OAAO,GACP,KAAK,CAAC,eACN,WAAW,CACR,+GAEH,YAAY,CAAC,OACb,QAAQ,CAAC;YAClB,IACC,MAAM,CAAC;YAAC;gBAAC;aAAO;YAAE;gBAAC;aAAO;YAAE;gBAAC;aAAY;YAAE;gBAAC;aAAY;YAAE;gBAAC;aAAU;SAAC;QAE3E,OAAO;YAACF;SAAM;IAClB;AACJ;AAEA,sBAAeG,aAAa,oBAAoB,CAAC;IAC7C,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,15 @@
1
+ import { BaseError } from "@webiny/feature/api";
2
+ export declare class LanguageNotFoundError extends BaseError<{
3
+ code: string;
4
+ }> {
5
+ readonly code: "Languages/NotFound";
6
+ constructor(languageCode: string);
7
+ }
8
+ export declare class DefaultLanguageNotFoundError extends BaseError {
9
+ readonly code: "Languages/DefaultNotFound";
10
+ constructor();
11
+ }
12
+ export declare class LanguagePersistenceError extends BaseError {
13
+ readonly code: "Languages/PersistenceError";
14
+ constructor(error: Error);
15
+ }
@@ -0,0 +1,28 @@
1
+ import { BaseError } from "@webiny/feature/api";
2
+ class LanguageNotFoundError extends BaseError {
3
+ constructor(languageCode){
4
+ super({
5
+ message: `Language not found: "${languageCode}".`,
6
+ data: {
7
+ code: languageCode
8
+ }
9
+ }), this.code = "Languages/NotFound";
10
+ }
11
+ }
12
+ class DefaultLanguageNotFoundError extends BaseError {
13
+ constructor(){
14
+ super({
15
+ message: "No default language is configured."
16
+ }), this.code = "Languages/DefaultNotFound";
17
+ }
18
+ }
19
+ class LanguagePersistenceError extends BaseError {
20
+ constructor(error){
21
+ super({
22
+ message: error.message
23
+ }), this.code = "Languages/PersistenceError";
24
+ }
25
+ }
26
+ export { DefaultLanguageNotFoundError, LanguageNotFoundError, LanguagePersistenceError };
27
+
28
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/domain/errors.js","sources":["../../../src/api/domain/errors.ts"],"sourcesContent":["import { BaseError } from \"@webiny/feature/api\";\n\nexport class LanguageNotFoundError extends BaseError<{ code: string }> {\n override readonly code = \"Languages/NotFound\" as const;\n\n constructor(languageCode: string) {\n super({\n message: `Language not found: \"${languageCode}\".`,\n data: {\n code: languageCode\n }\n });\n }\n}\n\nexport class DefaultLanguageNotFoundError extends BaseError {\n override readonly code = \"Languages/DefaultNotFound\" as const;\n\n constructor() {\n super({\n message: \"No default language is configured.\"\n });\n }\n}\n\nexport class LanguagePersistenceError extends BaseError {\n override readonly code = \"Languages/PersistenceError\" as const;\n\n constructor(error: Error) {\n super({ message: error.message });\n }\n}\n"],"names":["LanguageNotFoundError","BaseError","languageCode","DefaultLanguageNotFoundError","LanguagePersistenceError","error"],"mappings":";AAEO,MAAMA,8BAA8BC;IAGvC,YAAYC,YAAoB,CAAE;QAC9B,KAAK,CAAC;YACF,SAAS,CAAC,qBAAqB,EAAEA,aAAa,EAAE,CAAC;YACjD,MAAM;gBACF,MAAMA;YACV;QACJ,SARc,IAAI,GAAG;IASzB;AACJ;AAEO,MAAMC,qCAAqCF;IAG9C,aAAc;QACV,KAAK,CAAC;YACF,SAAS;QACb,SALc,IAAI,GAAG;IAMzB;AACJ;AAEO,MAAMG,iCAAiCH;IAG1C,YAAYI,KAAY,CAAE;QACtB,KAAK,CAAC;YAAE,SAASA,MAAM,OAAO;QAAC,SAHjB,IAAI,GAAG;IAIzB;AACJ"}
@@ -0,0 +1,5 @@
1
+ export declare const LANGUAGES_PERMISSIONS_SCHEMA: {
2
+ readonly prefix: "languages";
3
+ readonly fullAccess: true;
4
+ readonly readOnlyAccess: true;
5
+ };
@@ -0,0 +1,9 @@
1
+ import { createPermissionSchema } from "@webiny/api-core/exports/api/security.js";
2
+ const LANGUAGES_PERMISSIONS_SCHEMA = createPermissionSchema({
3
+ prefix: "languages",
4
+ fullAccess: true,
5
+ readOnlyAccess: true
6
+ });
7
+ export { LANGUAGES_PERMISSIONS_SCHEMA };
8
+
9
+ //# sourceMappingURL=permissionsSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/domain/permissionsSchema.js","sources":["../../../src/api/domain/permissionsSchema.ts"],"sourcesContent":["import { createPermissionSchema } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const LANGUAGES_PERMISSIONS_SCHEMA = createPermissionSchema({\n prefix: \"languages\",\n fullAccess: true,\n readOnlyAccess: true\n});\n"],"names":["LANGUAGES_PERMISSIONS_SCHEMA","createPermissionSchema"],"mappings":";AAEO,MAAMA,+BAA+BC,uBAAuB;IAC/D,QAAQ;IACR,YAAY;IACZ,gBAAgB;AACpB"}
@@ -0,0 +1,8 @@
1
+ import { PermissionTransformer } from "@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js";
2
+ declare class AddCmsPermissions implements PermissionTransformer.Interface {
3
+ execute(permission: PermissionTransformer.Permission): PermissionTransformer.Permission[] | PermissionTransformer.Permission;
4
+ }
5
+ declare const _default: typeof AddCmsPermissions & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js").IPermissionTransformer>;
7
+ };
8
+ export default _default;
@@ -0,0 +1,49 @@
1
+ import { PermissionTransformer } from "@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js";
2
+ import { LANGUAGE_MODEL_ID } from "../../../shared/constants.js";
3
+ class AddCmsPermissions {
4
+ execute(permission) {
5
+ if (!permission.name.startsWith("languages.")) return permission;
6
+ const isReadOnly = "languages.*" === permission.name && "r" === permission.rwd;
7
+ return [
8
+ permission,
9
+ {
10
+ name: "cms.endpoint.manage",
11
+ _src: "languages"
12
+ },
13
+ {
14
+ name: "cms.contentModel",
15
+ own: false,
16
+ rwd: "r",
17
+ pw: "",
18
+ models: [
19
+ LANGUAGE_MODEL_ID
20
+ ],
21
+ _src: "languages"
22
+ },
23
+ {
24
+ name: "cms.contentModelGroup",
25
+ own: false,
26
+ rwd: "r",
27
+ pw: "",
28
+ groups: [
29
+ "hidden"
30
+ ],
31
+ _src: "languages"
32
+ },
33
+ {
34
+ name: "cms.contentEntry",
35
+ own: false,
36
+ rwd: isReadOnly ? "r" : "rwd",
37
+ pw: "",
38
+ _src: "languages"
39
+ }
40
+ ];
41
+ }
42
+ }
43
+ const AddCmsPermissions_AddCmsPermissions = PermissionTransformer.createImplementation({
44
+ implementation: AddCmsPermissions,
45
+ dependencies: []
46
+ });
47
+ export default AddCmsPermissions_AddCmsPermissions;
48
+
49
+ //# sourceMappingURL=AddCmsPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/AddCmsPermissions/AddCmsPermissions.js","sources":["../../../../src/api/features/AddCmsPermissions/AddCmsPermissions.ts"],"sourcesContent":["import { PermissionTransformer } from \"@webiny/api-core/features/security/authorization/AuthorizationContext/abstractions.js\";\nimport { LANGUAGE_MODEL_ID } from \"~/shared/constants.js\";\n\nclass AddCmsPermissions implements PermissionTransformer.Interface {\n execute(permission: PermissionTransformer.Permission) {\n if (!permission.name.startsWith(\"languages.\")) {\n return permission;\n }\n\n const isReadOnly = permission.name === \"languages.*\" && permission.rwd === \"r\";\n\n return [\n permission,\n {\n name: \"cms.endpoint.manage\",\n _src: \"languages\"\n },\n {\n name: \"cms.contentModel\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n models: [LANGUAGE_MODEL_ID],\n _src: \"languages\"\n },\n {\n name: \"cms.contentModelGroup\",\n own: false,\n rwd: \"r\",\n pw: \"\",\n groups: [\"hidden\"],\n _src: \"languages\"\n },\n {\n name: \"cms.contentEntry\",\n own: false,\n rwd: isReadOnly ? \"r\" : \"rwd\",\n pw: \"\",\n _src: \"languages\"\n }\n ];\n }\n}\n\nexport default PermissionTransformer.createImplementation({\n implementation: AddCmsPermissions,\n dependencies: []\n});\n"],"names":["AddCmsPermissions","permission","isReadOnly","LANGUAGE_MODEL_ID","PermissionTransformer"],"mappings":";;AAGA,MAAMA;IACF,QAAQC,UAA4C,EAAE;QAClD,IAAI,CAACA,WAAW,IAAI,CAAC,UAAU,CAAC,eAC5B,OAAOA;QAGX,MAAMC,aAAaD,AAAoB,kBAApBA,WAAW,IAAI,IAAsBA,AAAmB,QAAnBA,WAAW,GAAG;QAEtE,OAAO;YACHA;YACA;gBACI,MAAM;gBACN,MAAM;YACV;YACA;gBACI,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,IAAI;gBACJ,QAAQ;oBAACE;iBAAkB;gBAC3B,MAAM;YACV;YACA;gBACI,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,IAAI;gBACJ,QAAQ;oBAAC;iBAAS;gBAClB,MAAM;YACV;YACA;gBACI,MAAM;gBACN,KAAK;gBACL,KAAKD,aAAa,MAAM;gBACxB,IAAI;gBACJ,MAAM;YACV;SACH;IACL;AACJ;AAEA,4CAAeE,sBAAsB,oBAAoB,CAAC;IACtD,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,4 @@
1
+ export declare const AddCmsPermissionsFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import AddCmsPermissions from "./AddCmsPermissions.js";
3
+ const AddCmsPermissionsFeature = createFeature({
4
+ name: "Languages/AddCmsPermissions",
5
+ register (container) {
6
+ container.register(AddCmsPermissions);
7
+ }
8
+ });
9
+ export { AddCmsPermissionsFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/AddCmsPermissions/feature.js","sources":["../../../../src/api/features/AddCmsPermissions/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport AddCmsPermissions from \"./AddCmsPermissions.js\";\n\nexport const AddCmsPermissionsFeature = createFeature({\n name: \"Languages/AddCmsPermissions\",\n register(container) {\n container.register(AddCmsPermissions);\n }\n});\n"],"names":["AddCmsPermissionsFeature","createFeature","container","AddCmsPermissions"],"mappings":";;AAGO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1,15 @@
1
+ import { EntryAfterUpdateEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry/events.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
3
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js";
4
+ import { UpdateEntryRepository } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry/abstractions.js";
5
+ declare class UnsetDefaultLanguagesHandler implements EntryAfterUpdateEventHandler.Interface {
6
+ private getModel;
7
+ private listLatestEntries;
8
+ private updateEntry;
9
+ constructor(getModel: GetModelUseCase.Interface, listLatestEntries: ListLatestEntriesUseCase.Interface, updateEntry: UpdateEntryRepository.Interface);
10
+ handle(event: EntryAfterUpdateEventHandler.Event): Promise<void>;
11
+ }
12
+ declare const _default: typeof UnsetDefaultLanguagesHandler & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/UpdateEntry/events.js").EntryAfterUpdateEvent>>;
14
+ };
15
+ export default _default;
@@ -0,0 +1,48 @@
1
+ import { EntryAfterUpdateEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry/events.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
3
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js";
4
+ import { LANGUAGE_MODEL_ID } from "../../../shared/constants.js";
5
+ import { UpdateEntryRepository } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry/abstractions.js";
6
+ class UnsetDefaultLanguagesHandler {
7
+ constructor(getModel, listLatestEntries, updateEntry){
8
+ this.getModel = getModel;
9
+ this.listLatestEntries = listLatestEntries;
10
+ this.updateEntry = updateEntry;
11
+ }
12
+ async handle(event) {
13
+ const { entry, model } = event.payload;
14
+ if (model.modelId !== LANGUAGE_MODEL_ID) return;
15
+ if (!entry.values.isDefault) return;
16
+ const modelResult = await this.getModel.execute(LANGUAGE_MODEL_ID);
17
+ if (modelResult.isFail()) return;
18
+ const languageModel = modelResult.value;
19
+ const listResult = await this.listLatestEntries.execute(languageModel, {
20
+ where: {
21
+ entryId_not: entry.entryId,
22
+ values: {
23
+ isDefault: true
24
+ }
25
+ }
26
+ });
27
+ if (listResult.isFail()) return;
28
+ const { entries } = listResult.value;
29
+ for (const other of entries)await this.updateEntry.execute(languageModel, {
30
+ ...other,
31
+ values: {
32
+ ...other.values,
33
+ isDefault: false
34
+ }
35
+ });
36
+ }
37
+ }
38
+ const EnsureSingleDefaultLanguage_UnsetDefaultLanguagesHandler = EntryAfterUpdateEventHandler.createImplementation({
39
+ implementation: UnsetDefaultLanguagesHandler,
40
+ dependencies: [
41
+ GetModelUseCase,
42
+ ListLatestEntriesUseCase,
43
+ UpdateEntryRepository
44
+ ]
45
+ });
46
+ export default EnsureSingleDefaultLanguage_UnsetDefaultLanguagesHandler;
47
+
48
+ //# sourceMappingURL=UnsetDefaultLanguagesHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/EnsureSingleDefaultLanguage/UnsetDefaultLanguagesHandler.js","sources":["../../../../src/api/features/EnsureSingleDefaultLanguage/UnsetDefaultLanguagesHandler.ts"],"sourcesContent":["import { EntryAfterUpdateEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry/events.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js\";\nimport { LANGUAGE_MODEL_ID } from \"~/shared/constants.js\";\nimport { UpdateEntryRepository } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry/abstractions.js\";\n\nclass UnsetDefaultLanguagesHandler implements EntryAfterUpdateEventHandler.Interface {\n constructor(\n private getModel: GetModelUseCase.Interface,\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private updateEntry: UpdateEntryRepository.Interface\n ) {}\n\n async handle(event: EntryAfterUpdateEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n if (model.modelId !== LANGUAGE_MODEL_ID) {\n return;\n }\n\n if (!entry.values.isDefault) {\n return;\n }\n\n const modelResult = await this.getModel.execute(LANGUAGE_MODEL_ID);\n if (modelResult.isFail()) {\n return;\n }\n\n const languageModel = modelResult.value;\n\n const listResult = await this.listLatestEntries.execute(languageModel, {\n where: {\n entryId_not: entry.entryId,\n values: {\n isDefault: true\n }\n }\n });\n\n if (listResult.isFail()) {\n return;\n }\n\n const { entries } = listResult.value;\n\n for (const other of entries) {\n await this.updateEntry.execute(languageModel, {\n ...other,\n values: {\n ...other.values,\n isDefault: false\n }\n });\n }\n }\n}\n\nexport default EntryAfterUpdateEventHandler.createImplementation({\n implementation: UnsetDefaultLanguagesHandler,\n dependencies: [GetModelUseCase, ListLatestEntriesUseCase, UpdateEntryRepository]\n});\n"],"names":["UnsetDefaultLanguagesHandler","getModel","listLatestEntries","updateEntry","event","entry","model","LANGUAGE_MODEL_ID","modelResult","languageModel","listResult","entries","other","EntryAfterUpdateEventHandler","GetModelUseCase","ListLatestEntriesUseCase","UpdateEntryRepository"],"mappings":";;;;;AAMA,MAAMA;IACF,YACYC,QAAmC,EACnCC,iBAAqD,EACrDC,WAA4C,CACtD;aAHUF,QAAQ,GAARA;aACAC,iBAAiB,GAAjBA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAEtC,IAAIE,MAAM,OAAO,KAAKC,mBAClB;QAGJ,IAAI,CAACF,MAAM,MAAM,CAAC,SAAS,EACvB;QAGJ,MAAMG,cAAc,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD;QAChD,IAAIC,YAAY,MAAM,IAClB;QAGJ,MAAMC,gBAAgBD,YAAY,KAAK;QAEvC,MAAME,aAAa,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACD,eAAe;YACnE,OAAO;gBACH,aAAaJ,MAAM,OAAO;gBAC1B,QAAQ;oBACJ,WAAW;gBACf;YACJ;QACJ;QAEA,IAAIK,WAAW,MAAM,IACjB;QAGJ,MAAM,EAAEC,OAAO,EAAE,GAAGD,WAAW,KAAK;QAEpC,KAAK,MAAME,SAASD,QAChB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACF,eAAe;YAC1C,GAAGG,KAAK;YACR,QAAQ;gBACJ,GAAGA,MAAM,MAAM;gBACf,WAAW;YACf;QACJ;IAER;AACJ;AAEA,iEAAeC,6BAA6B,oBAAoB,CAAC;IAC7D,gBAAgBb;IAChB,cAAc;QAACc;QAAiBC;QAA0BC;KAAsB;AACpF"}
@@ -0,0 +1,4 @@
1
+ export declare const EnsureSingleDefaultLanguageFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import UnsetDefaultLanguagesHandler from "./UnsetDefaultLanguagesHandler.js";
3
+ const EnsureSingleDefaultLanguageFeature = createFeature({
4
+ name: "Languages/EnsureSingleDefaultLanguage",
5
+ register (container) {
6
+ container.register(UnsetDefaultLanguagesHandler);
7
+ }
8
+ });
9
+ export { EnsureSingleDefaultLanguageFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/EnsureSingleDefaultLanguage/feature.js","sources":["../../../../src/api/features/EnsureSingleDefaultLanguage/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport UnsetDefaultLanguagesHandler from \"./UnsetDefaultLanguagesHandler.js\";\n\nexport const EnsureSingleDefaultLanguageFeature = createFeature({\n name: \"Languages/EnsureSingleDefaultLanguage\",\n register(container) {\n container.register(UnsetDefaultLanguagesHandler);\n }\n});\n"],"names":["EnsureSingleDefaultLanguageFeature","createFeature","container","UnsetDefaultLanguagesHandler"],"mappings":";;AAGO,MAAMA,qCAAqCC,cAAc;IAC5D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1,13 @@
1
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
2
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js";
3
+ import { GetDefaultLanguageRepository as RepositoryAbstraction } from "./abstractions.js";
4
+ declare class GetDefaultLanguageRepositoryImpl implements RepositoryAbstraction.Interface {
5
+ private getModel;
6
+ private listLatestEntries;
7
+ constructor(getModel: GetModelUseCase.Interface, listLatestEntries: ListLatestEntriesUseCase.Interface);
8
+ execute(): RepositoryAbstraction.Return;
9
+ }
10
+ export declare const GetDefaultLanguageRepository: typeof GetDefaultLanguageRepositoryImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetDefaultLanguageRepository>;
12
+ };
13
+ export {};
@@ -0,0 +1,48 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
3
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js";
4
+ import { GetDefaultLanguageRepository } from "./abstractions.js";
5
+ import { LANGUAGE_MODEL_ID } from "../../../shared/constants.js";
6
+ import { DefaultLanguageNotFoundError, LanguagePersistenceError } from "../../domain/errors.js";
7
+ class GetDefaultLanguageRepositoryImpl {
8
+ constructor(getModel, listLatestEntries){
9
+ this.getModel = getModel;
10
+ this.listLatestEntries = listLatestEntries;
11
+ }
12
+ async execute() {
13
+ const modelResult = await this.getModel.execute(LANGUAGE_MODEL_ID);
14
+ if (modelResult.isFail()) return Result.fail(new LanguagePersistenceError(modelResult.error));
15
+ const model = modelResult.value;
16
+ const listResult = await this.listLatestEntries.execute(model, {
17
+ where: {
18
+ values: {
19
+ isDefault: true
20
+ }
21
+ },
22
+ limit: 1
23
+ });
24
+ if (listResult.isFail()) return Result.fail(new LanguagePersistenceError(listResult.error));
25
+ const { entries } = listResult.value;
26
+ if (0 === entries.length) return Result.fail(new DefaultLanguageNotFoundError());
27
+ const entry = entries[0];
28
+ const language = {
29
+ id: entry.entryId,
30
+ name: entry.values.name,
31
+ code: entry.values.code,
32
+ direction: entry.values.direction,
33
+ isDefault: entry.values.isDefault,
34
+ enabled: entry.values.enabled
35
+ };
36
+ return Result.ok(language);
37
+ }
38
+ }
39
+ const GetDefaultLanguageRepository_GetDefaultLanguageRepository = GetDefaultLanguageRepository.createImplementation({
40
+ implementation: GetDefaultLanguageRepositoryImpl,
41
+ dependencies: [
42
+ GetModelUseCase,
43
+ ListLatestEntriesUseCase
44
+ ]
45
+ });
46
+ export { GetDefaultLanguageRepository_GetDefaultLanguageRepository as GetDefaultLanguageRepository };
47
+
48
+ //# sourceMappingURL=GetDefaultLanguageRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/GetDefaultLanguage/GetDefaultLanguageRepository.js","sources":["../../../../src/api/features/GetDefaultLanguage/GetDefaultLanguageRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js\";\nimport { GetDefaultLanguageRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { LANGUAGE_MODEL_ID } from \"~/shared/constants.js\";\nimport { DefaultLanguageNotFoundError, LanguagePersistenceError } from \"~/api/domain/errors.js\";\nimport type { Language } from \"~/api/domain/Language.js\";\n\nclass GetDefaultLanguageRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private getModel: GetModelUseCase.Interface,\n private listLatestEntries: ListLatestEntriesUseCase.Interface\n ) {}\n\n async execute(): RepositoryAbstraction.Return {\n const modelResult = await this.getModel.execute(LANGUAGE_MODEL_ID);\n if (modelResult.isFail()) {\n return Result.fail(new LanguagePersistenceError(modelResult.error));\n }\n\n const model = modelResult.value;\n\n const listResult = await this.listLatestEntries.execute(model, {\n where: {\n values: {\n isDefault: true\n }\n },\n limit: 1\n });\n\n if (listResult.isFail()) {\n return Result.fail(new LanguagePersistenceError(listResult.error));\n }\n\n const { entries } = listResult.value;\n\n if (entries.length === 0) {\n return Result.fail(new DefaultLanguageNotFoundError());\n }\n\n const entry = entries[0];\n\n const language: Language = {\n id: entry.entryId,\n name: entry.values.name,\n code: entry.values.code,\n direction: entry.values.direction,\n isDefault: entry.values.isDefault,\n enabled: entry.values.enabled\n };\n\n return Result.ok(language);\n }\n}\n\nexport const GetDefaultLanguageRepository = RepositoryAbstraction.createImplementation({\n implementation: GetDefaultLanguageRepositoryImpl,\n dependencies: [GetModelUseCase, ListLatestEntriesUseCase]\n});\n"],"names":["GetDefaultLanguageRepositoryImpl","getModel","listLatestEntries","modelResult","LANGUAGE_MODEL_ID","Result","LanguagePersistenceError","model","listResult","entries","DefaultLanguageNotFoundError","entry","language","GetDefaultLanguageRepository","RepositoryAbstraction","GetModelUseCase","ListLatestEntriesUseCase"],"mappings":";;;;;;AAQA,MAAMA;IACF,YACYC,QAAmC,EACnCC,iBAAqD,CAC/D;aAFUD,QAAQ,GAARA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,UAAwC;QAC1C,MAAMC,cAAc,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACC;QAChD,IAAID,YAAY,MAAM,IAClB,OAAOE,OAAO,IAAI,CAAC,IAAIC,yBAAyBH,YAAY,KAAK;QAGrE,MAAMI,QAAQJ,YAAY,KAAK;QAE/B,MAAMK,aAAa,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACD,OAAO;YAC3D,OAAO;gBACH,QAAQ;oBACJ,WAAW;gBACf;YACJ;YACA,OAAO;QACX;QAEA,IAAIC,WAAW,MAAM,IACjB,OAAOH,OAAO,IAAI,CAAC,IAAIC,yBAAyBE,WAAW,KAAK;QAGpE,MAAM,EAAEC,OAAO,EAAE,GAAGD,WAAW,KAAK;QAEpC,IAAIC,AAAmB,MAAnBA,QAAQ,MAAM,EACd,OAAOJ,OAAO,IAAI,CAAC,IAAIK;QAG3B,MAAMC,QAAQF,OAAO,CAAC,EAAE;QAExB,MAAMG,WAAqB;YACvB,IAAID,MAAM,OAAO;YACjB,MAAMA,MAAM,MAAM,CAAC,IAAI;YACvB,MAAMA,MAAM,MAAM,CAAC,IAAI;YACvB,WAAWA,MAAM,MAAM,CAAC,SAAS;YACjC,WAAWA,MAAM,MAAM,CAAC,SAAS;YACjC,SAASA,MAAM,MAAM,CAAC,OAAO;QACjC;QAEA,OAAON,OAAO,EAAE,CAACO;IACrB;AACJ;AAEO,MAAMC,4DAA+BC,6BAAAA,oBAA0C,CAAC;IACnF,gBAAgBd;IAChB,cAAc;QAACe;QAAiBC;KAAyB;AAC7D"}
@@ -0,0 +1,8 @@
1
+ import { GetDefaultLanguageUseCase as UseCaseAbstraction, GetDefaultLanguageRepository } from "./abstractions.js";
2
+ declare class GetDefaultLanguageUseCaseImpl implements UseCaseAbstraction.Interface {
3
+ private repository;
4
+ constructor(repository: GetDefaultLanguageRepository.Interface);
5
+ execute(): UseCaseAbstraction.Return;
6
+ }
7
+ export declare const GetDefaultLanguageUseCase: import("@webiny/di").Implementation<typeof GetDefaultLanguageUseCaseImpl>;
8
+ export {};
@@ -0,0 +1,20 @@
1
+ import { createImplementation } from "@webiny/feature/api";
2
+ import { GetDefaultLanguageRepository, GetDefaultLanguageUseCase } from "./abstractions.js";
3
+ class GetDefaultLanguageUseCaseImpl {
4
+ constructor(repository){
5
+ this.repository = repository;
6
+ }
7
+ async execute() {
8
+ return this.repository.execute();
9
+ }
10
+ }
11
+ const GetDefaultLanguageUseCase_GetDefaultLanguageUseCase = createImplementation({
12
+ abstraction: GetDefaultLanguageUseCase,
13
+ implementation: GetDefaultLanguageUseCaseImpl,
14
+ dependencies: [
15
+ GetDefaultLanguageRepository
16
+ ]
17
+ });
18
+ export { GetDefaultLanguageUseCase_GetDefaultLanguageUseCase as GetDefaultLanguageUseCase };
19
+
20
+ //# sourceMappingURL=GetDefaultLanguageUseCase.js.map