@powerhousedao/codegen 4.1.0-dev.8 → 4.1.0-dev.80

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 (161) hide show
  1. package/README.md +0 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.js +10 -0
  7. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/resolvers.esm.t +17 -0
  8. package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/schema.esm.t +16 -0
  9. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/documentModel.esm.t +2 -2
  10. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.esm.t +8 -2
  11. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.js +69 -54
  12. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/ph-factories.esm.t +93 -0
  13. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/reducer.esm.t +9 -4
  14. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/rootIndex.esm.t +6 -7
  15. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/types.esm.t +20 -8
  16. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/utils.esm.t +19 -26
  17. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/creators.esm.t +1 -1
  18. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/customTest.esm.t +2 -2
  19. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/error.esm.t +6 -10
  20. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js +52 -27
  21. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.js +21 -20
  22. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/resolvers.esm.t +64 -51
  23. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/schema.esm.t +3 -3
  24. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/CreateDocument.esm.t +48 -26
  25. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/DriveExplorer.esm.t +213 -218
  26. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderTree.esm.t +96 -67
  27. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/editor.esm.t +2 -73
  28. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.esm.t +8 -7
  29. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.js +12 -0
  30. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/editor.esm.t +87 -20
  31. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/hooks.esm.t +16 -0
  32. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.esm.t +4 -9
  33. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js +28 -15
  34. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.js +8 -10
  35. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/factory.esm.t +5 -4
  36. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.esm.t +5 -9
  37. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.js +13 -15
  38. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.esm.t +8 -6
  39. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_call.esm.t +1 -1
  40. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.inject_import.esm.t +1 -1
  41. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/factory.esm.t +6 -5
  42. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.esm.t +7 -9
  43. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.js +13 -15
  44. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.esm.t +8 -9
  45. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_call.esm.t +2 -2
  46. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.inject_import.esm.t +1 -1
  47. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/migrations.esm.t +2 -2
  48. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/schema.esm.t +10 -2
  49. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.esm.t +5 -36
  50. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.js +9 -11
  51. package/dist/src/codegen/generate.d.ts +30 -0
  52. package/dist/src/codegen/generate.d.ts.map +1 -0
  53. package/dist/src/codegen/generate.js +199 -0
  54. package/dist/src/codegen/generate.js.map +1 -0
  55. package/dist/src/codegen/graphql.d.ts +2 -2
  56. package/dist/src/codegen/graphql.d.ts.map +1 -1
  57. package/dist/src/codegen/graphql.js +1 -1
  58. package/dist/src/codegen/graphql.js.map +1 -1
  59. package/dist/src/codegen/hygen.d.ts +15 -10
  60. package/dist/src/codegen/hygen.d.ts.map +1 -1
  61. package/dist/src/codegen/hygen.js +47 -17
  62. package/dist/src/codegen/hygen.js.map +1 -1
  63. package/dist/src/codegen/index.d.ts +6 -32
  64. package/dist/src/codegen/index.d.ts.map +1 -1
  65. package/dist/src/codegen/index.js +6 -182
  66. package/dist/src/codegen/index.js.map +1 -1
  67. package/dist/src/codegen/types.d.ts +9 -0
  68. package/dist/src/codegen/types.d.ts.map +1 -0
  69. package/dist/src/codegen/types.js +2 -0
  70. package/dist/src/codegen/types.js.map +1 -0
  71. package/dist/src/codegen/utils.d.ts +5 -2
  72. package/dist/src/codegen/utils.d.ts.map +1 -1
  73. package/dist/src/codegen/utils.js +42 -4
  74. package/dist/src/codegen/utils.js.map +1 -1
  75. package/dist/src/create-lib/create-project.d.ts.map +1 -1
  76. package/dist/src/create-lib/create-project.js +17 -2
  77. package/dist/src/create-lib/create-project.js.map +1 -1
  78. package/dist/src/index.d.ts +5 -0
  79. package/dist/src/index.d.ts.map +1 -0
  80. package/dist/src/index.js +5 -0
  81. package/dist/src/index.js.map +1 -0
  82. package/dist/src/ts-morph-generator/core/FileGenerator.d.ts +2 -3
  83. package/dist/src/ts-morph-generator/core/FileGenerator.d.ts.map +1 -1
  84. package/dist/src/ts-morph-generator/core/FileGenerator.js.map +1 -1
  85. package/dist/src/ts-morph-generator/core/GenerationContext.d.ts +18 -8
  86. package/dist/src/ts-morph-generator/core/GenerationContext.d.ts.map +1 -1
  87. package/dist/src/ts-morph-generator/core/ReducerGenerator.d.ts +12 -0
  88. package/dist/src/ts-morph-generator/core/ReducerGenerator.d.ts.map +1 -0
  89. package/dist/src/ts-morph-generator/core/ReducerGenerator.js +140 -0
  90. package/dist/src/ts-morph-generator/core/ReducerGenerator.js.map +1 -0
  91. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.d.ts +4 -3
  92. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.d.ts.map +1 -1
  93. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.js +11 -10
  94. package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.js.map +1 -1
  95. package/dist/src/ts-morph-generator/index.d.ts +2 -2
  96. package/dist/src/ts-morph-generator/index.d.ts.map +1 -1
  97. package/dist/src/ts-morph-generator/index.js +2 -2
  98. package/dist/src/ts-morph-generator/index.js.map +1 -1
  99. package/dist/src/ts-morph-generator/utilities/DirectoryManager.d.ts +2 -2
  100. package/dist/src/ts-morph-generator/utilities/DirectoryManager.d.ts.map +1 -1
  101. package/dist/src/ts-morph-generator/utilities/ImportManager.d.ts +1 -1
  102. package/dist/src/ts-morph-generator/utilities/ImportManager.d.ts.map +1 -1
  103. package/dist/src/utils/index.d.ts +0 -1
  104. package/dist/src/utils/index.d.ts.map +1 -1
  105. package/dist/src/utils/index.js +0 -1
  106. package/dist/src/utils/index.js.map +1 -1
  107. package/dist/src/utils/validation.d.ts +6 -6
  108. package/dist/src/utils/validation.d.ts.map +1 -1
  109. package/dist/src/utils/validation.js +2 -2
  110. package/dist/src/utils/validation.js.map +1 -1
  111. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  112. package/package.json +25 -27
  113. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.d.ts +0 -25
  114. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.d.ts.map +0 -1
  115. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/index.js.map +0 -1
  116. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/object.esm.t +0 -49
  117. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.d.ts +0 -23
  118. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.d.ts.map +0 -1
  119. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js.map +0 -1
  120. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/object.esm.t +0 -37
  121. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.d.ts +0 -22
  122. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.d.ts.map +0 -1
  123. package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/index.js.map +0 -1
  124. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/EditorContainer.esm.t +0 -124
  125. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FileItemsGrid.esm.t +0 -44
  126. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderItemsGrid.esm.t +0 -96
  127. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/hooks/useSelectedFolderChildren.esm.t +0 -35
  128. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/hooks/useTransformedNodes.esm.t +0 -35
  129. package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/types/css.d.esm.t +0 -8
  130. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.d.ts +0 -20
  131. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.d.ts.map +0 -1
  132. package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js.map +0 -1
  133. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.d.ts +0 -14
  134. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.d.ts.map +0 -1
  135. package/dist/src/codegen/.hygen/templates/powerhouse/generate-import-script/index.js.map +0 -1
  136. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.d.ts +0 -20
  137. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.d.ts.map +0 -1
  138. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/index.js.map +0 -1
  139. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.d.ts +0 -20
  140. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.d.ts.map +0 -1
  141. package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/index.js.map +0 -1
  142. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.d.ts +0 -16
  143. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.d.ts.map +0 -1
  144. package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.js.map +0 -1
  145. package/dist/src/ts-morph-generator/core/index.d.ts +0 -4
  146. package/dist/src/ts-morph-generator/core/index.d.ts.map +0 -1
  147. package/dist/src/ts-morph-generator/core/index.js +0 -4
  148. package/dist/src/ts-morph-generator/core/index.js.map +0 -1
  149. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.d.ts +0 -9
  150. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.d.ts.map +0 -1
  151. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.js +0 -69
  152. package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.js.map +0 -1
  153. package/dist/src/ts-morph-generator/file-generators/index.d.ts +0 -2
  154. package/dist/src/ts-morph-generator/file-generators/index.d.ts.map +0 -1
  155. package/dist/src/ts-morph-generator/file-generators/index.js +0 -2
  156. package/dist/src/ts-morph-generator/file-generators/index.js.map +0 -1
  157. package/dist/src/utils/package-manager.d.ts +0 -5
  158. package/dist/src/utils/package-manager.d.ts.map +0 -1
  159. package/dist/src/utils/package-manager.js +0 -17
  160. package/dist/src/utils/package-manager.js.map +0 -1
  161. package/dist/tsconfig.hygen.tsbuildinfo +0 -1
@@ -1,28 +1,53 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const change_case_1 = require("change-case");
4
- exports.default = {
5
- params: ({ args }) => {
6
- const documentModel = JSON.parse(args.documentModel);
7
- const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
8
- const filteredModules = latestSpec.modules.filter((m) => m.name === args.module);
9
- const actions = filteredModules.length > 0
10
- ? filteredModules[0].operations.map((a) => ({
11
- name: a.name,
12
- hasInput: a.schema !== null,
13
- hasAttachment: a.schema?.includes(": Attachment"),
14
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
15
- scope: a.scope || "global",
16
- state: a.scope === "global" ? "" : a.scope, // the state this action affects
17
- errors: a.errors,
18
- }))
19
- : [];
20
- return {
21
- rootDir: args.rootDir,
22
- documentType: documentModel.name,
23
- module: (0, change_case_1.paramCase)(args.module),
24
- actions,
25
- };
26
- },
1
+ // @ts-check
2
+ const { paramCase, pascalCase } = require("change-case");
3
+
4
+ module.exports = {
5
+ params: ({ args }) => {
6
+ const documentModel = JSON.parse(args.documentModel);
7
+ const latestSpec =
8
+ documentModel.specifications[documentModel.specifications.length - 1];
9
+ const filteredModules = latestSpec.modules.filter(
10
+ (m) => m.name === args.module,
11
+ );
12
+
13
+ const actions =
14
+ filteredModules.length > 0
15
+ ? filteredModules[0].operations.map((a) => ({
16
+ name: a.name,
17
+ hasInput: a.schema !== null,
18
+ hasAttachment: a.schema?.includes(": Attachment"),
19
+ scope: a.scope || "global",
20
+ state: a.scope === "global" ? "" : a.scope, // the state this action affects
21
+ errors: a.errors,
22
+ }))
23
+ : [];
24
+
25
+ const errors = actions.reduce((acc, action) => {
26
+ action.errors.forEach((error) => {
27
+ // Fallback: If error code is empty, generate it from the error name in PascalCase
28
+ const errorCode = error.code || pascalCase(error.name || "");
29
+ const normalizedError = { ...error, code: errorCode };
30
+
31
+ const existingError = acc.find((e) => e.code === errorCode);
32
+ if (!existingError) {
33
+ acc.push(normalizedError);
34
+ } else if (
35
+ JSON.stringify(existingError) !== JSON.stringify(normalizedError)
36
+ ) {
37
+ console.warn(
38
+ `Warning: Duplicate error code "${errorCode}" with different fields found`,
39
+ );
40
+ }
41
+ });
42
+ return acc;
43
+ }, []);
44
+
45
+ return {
46
+ rootDir: args.rootDir,
47
+ documentType: documentModel.name,
48
+ module: paramCase(args.module),
49
+ actions,
50
+ errors,
51
+ };
52
+ },
27
53
  };
28
- //# sourceMappingURL=index.js.map
@@ -1,22 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const change_case_1 = require("change-case");
1
+ // @ts-check
2
+ const { paramCase } = require("change-case");
3
+
4
4
  const generateDocumentModelMutations = {
5
- params: ({ args, }) => {
6
- const documentModel = JSON.parse(args.documentModel);
7
- const latestSpec = documentModel.specifications[documentModel.specifications.length - 1];
8
- return {
9
- rootDir: args.rootDir,
10
- subgraph: args.subgraph,
11
- documentTypeId: documentModel.id,
12
- documentType: documentModel.name,
13
- schema: latestSpec.state.global.schema,
14
- modules: latestSpec.modules.map((m) => ({
15
- ...m,
16
- name: (0, change_case_1.paramCase)(m.name),
17
- })),
18
- };
19
- },
5
+ params: ({ args }) => {
6
+ const documentModel = JSON.parse(args.documentModel);
7
+ const latestSpec =
8
+ documentModel.specifications[documentModel.specifications.length - 1];
9
+
10
+ return {
11
+ rootDir: args.rootDir,
12
+ subgraph: args.subgraph,
13
+ documentTypeId: documentModel.id,
14
+ documentType: documentModel.name,
15
+ schema: latestSpec.state.global.schema,
16
+ modules: latestSpec.modules.map((m) => ({
17
+ ...m,
18
+ name: paramCase(m.name),
19
+ })),
20
+ };
21
+ },
20
22
  };
21
- exports.default = generateDocumentModelMutations;
22
- //# sourceMappingURL=index.js.map
23
+ module.exports = generateDocumentModelMutations;
@@ -2,49 +2,59 @@
2
2
  to: "<%= rootDir %>/<%= h.changeCase.param(subgraph) %>/resolvers.ts"
3
3
  force: true
4
4
  ---
5
- /* eslint-disable @typescript-eslint/no-unsafe-argument */
6
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
7
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
8
- import { type Subgraph } from "@powerhousedao/reactor-api";
5
+ import type { BaseSubgraph } from "@powerhousedao/reactor-api";
9
6
  import { addFile } from "document-drive";
10
- import { actions } from "../../document-models/<%- h.changeCase.param(documentType) %>/index.js";
11
- import { generateId } from "document-model";
7
+ import { actions <% modules.forEach(module => { %><% module.operations.forEach(op => { %>, type <%- h.changeCase.pascal(op.name) %>Input<%_ })}); %>, type <%- h.changeCase.pascal(documentType) %>Document } from "../../document-models/<%- h.changeCase.param(documentType) %>/index.js";
8
+ import { setName } from "document-model";
12
9
 
13
- const DEFAULT_DRIVE_ID = "powerhouse";
14
-
15
- export const getResolvers = (subgraph: Subgraph): Record<string, any> => {
10
+ export const getResolvers = (subgraph: BaseSubgraph): Record<string, unknown> => {
16
11
  const reactor = subgraph.reactor;
17
12
 
18
13
  return ({
19
14
  Query: {
20
- <%- h.changeCase.pascal(documentType) %>: async (_: any, args: any, ctx: any) => {
15
+ <%- h.changeCase.pascal(documentType) %>: async () => {
21
16
  return {
22
- getDocument: async (args: any) => {
23
- const driveId: string = args.driveId || DEFAULT_DRIVE_ID;
24
- const docId: string = args.docId || "";
25
- const doc = await reactor.getDocument(driveId, docId);
26
- return {
17
+ getDocument: async (args: { docId: string, driveId: string }) => {
18
+ const { docId, driveId } = args;
19
+
20
+ if(!docId) {
21
+ throw new Error("Document id is required");
22
+ }
23
+
24
+ if(driveId) {
25
+ const docIds = await reactor.getDocuments(driveId);
26
+ if(!docIds.includes(docId)) {
27
+ throw new Error(`Document with id ${docId} is not part of ${driveId}`);
28
+ }
29
+ }
30
+
31
+ const doc = await reactor.getDocument<<%- h.changeCase.pascal(documentType) %>Document>(docId);
32
+ return {
27
33
  driveId: driveId,
28
34
  ...doc,
29
35
  ...doc.header,
36
+ created: doc.header.createdAtUtcIso,
37
+ lastModified: doc.header.lastModifiedAtUtcIso,
30
38
  state: doc.state.global,
31
39
  stateJSON: doc.state.global,
32
- revision: doc.header.revision["global"] ?? 0,
40
+ revision: doc.header?.revision?.global ?? 0,
33
41
  };
34
42
  },
35
- getDocuments: async (args: any) => {
36
- const driveId: string = args.driveId || DEFAULT_DRIVE_ID;
43
+ getDocuments: async (args: { driveId: string }) => {
44
+ const { driveId } = args;
37
45
  const docsIds = await reactor.getDocuments(driveId);
38
46
  const docs = await Promise.all(
39
47
  docsIds.map(async (docId) => {
40
- const doc = await reactor.getDocument(driveId, docId);
48
+ const doc = await reactor.getDocument<<%- h.changeCase.pascal(documentType) %>Document>(docId);
41
49
  return {
42
50
  driveId: driveId,
43
51
  ...doc,
44
52
  ...doc.header,
53
+ created: doc.header.createdAtUtcIso,
54
+ lastModified: doc.header.lastModifiedAtUtcIso,
45
55
  state: doc.state.global,
46
56
  stateJSON: doc.state.global,
47
- revision: doc.header.revision["global"] ?? 0,
57
+ revision: doc.header?.revision?.global ?? 0,
48
58
  };
49
59
  }),
50
60
  );
@@ -57,47 +67,50 @@ export const getResolvers = (subgraph: Subgraph): Record<string, any> => {
57
67
  },
58
68
  },
59
69
  Mutation: {
60
-
61
- <%- h.changeCase.pascal(documentType) %>_createDocument: async (_: any, args: any) => {
62
- const driveId: string = args.driveId || DEFAULT_DRIVE_ID;
63
- const docId = generateId();
70
+ <%- h.changeCase.pascal(documentType) %>_createDocument: async (_: unknown, args: { name: string, driveId?: string }) => {
71
+ const { driveId, name } = args;
72
+ const document = await reactor.addDocument("<%- documentTypeId %>");
64
73
 
65
- await reactor.addDriveAction(driveId, addFile({
66
- id: docId,
67
- name: args.name,
68
- documentType: "<%- documentTypeId %>",
69
- synchronizationUnits:[
70
- {
71
- branch: "main",
72
- scope: "global",
73
- syncId: generateId(),
74
- },
75
- {
76
- branch: "main",
77
- scope: "local",
78
- syncId: generateId(),
79
- }
80
- ],
81
- }));
74
+ if(driveId) {
75
+ await reactor.addAction(
76
+ driveId,
77
+ addFile({
78
+ name,
79
+ id: document.header.id,
80
+ documentType: "<%- documentTypeId %>",
81
+ }),
82
+ );
83
+ }
84
+
85
+ if(name) {
86
+ await reactor.addAction(
87
+ document.header.id,
88
+ setName(name),
89
+ );
90
+ }
82
91
 
83
- return docId;
92
+ return document.header.id;
84
93
  },
85
94
 
86
95
  <% modules.forEach(module => { _%>
87
96
  <% module.operations.forEach(op => { _%>
88
- <%- h.changeCase.pascal(documentType) + '_' + h.changeCase.camel(op.name)
89
- %>: async (_: any, args: any) => {
90
- const driveId: string = args.driveId || DEFAULT_DRIVE_ID;
91
- const docId: string = args.docId || "";
92
- const doc = await reactor.getDocument(driveId, docId);
97
+ <%- h.changeCase.pascal(documentType) + '_' + h.changeCase.camel(op.name) %>: async (_: unknown, args: { docId: string, input: <%- h.changeCase.pascal(op.name) %>Input}) => {
98
+ const { docId, input } = args;
99
+ const doc = await reactor.getDocument<<%- h.changeCase.pascal(documentType) %>Document>(docId);
100
+ if(!doc) {
101
+ throw new Error("Document not found");
102
+ }
93
103
 
94
- await reactor.addAction(
95
- driveId,
104
+ const result = await reactor.addAction(
96
105
  docId,
97
- actions.<%- h.changeCase.camel(op.name) %>({...args.input})
106
+ actions.<%- h.changeCase.camel(op.name) %>(input)
98
107
  );
99
108
 
100
- return (doc.header.revision["global"] ?? 0) + 1;
109
+ if(result.status !== "SUCCESS") {
110
+ throw new Error(result.error?.message ?? "Failed to <%- h.changeCase.camel(op.name) %>");
111
+ }
112
+
113
+ return true;
101
114
  },
102
115
 
103
116
  <%_ })}); %>
@@ -17,8 +17,8 @@ Queries: <%= h.changeCase.pascal(documentType) %>
17
17
  """
18
18
 
19
19
  type <%- h.changeCase.pascal(documentType) %>Queries {
20
- getDocument(driveId: String, docId: PHID): <%- h.changeCase.pascal(documentType) %>
21
- getDocuments(driveId: String): [<%- h.changeCase.pascal(documentType) %>!]
20
+ getDocument(docId: PHID!, driveId: PHID): <%- h.changeCase.pascal(documentType) %>
21
+ getDocuments(driveId: String!): [<%- h.changeCase.pascal(documentType) %>!]
22
22
  }
23
23
 
24
24
  type Query {
@@ -30,7 +30,7 @@ Mutations: <%= h.changeCase.pascal(documentType) %>
30
30
  """
31
31
  type Mutation {
32
32
 
33
- <%- h.changeCase.pascal(documentType) %>_createDocument(driveId:String, name:String): String
33
+ <%- h.changeCase.pascal(documentType) %>_createDocument(name:String!, driveId:String): String
34
34
 
35
35
  <% modules.forEach(module => { _%>
36
36
  <% module.operations.forEach(op => { _%>
@@ -3,48 +3,70 @@ to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/components/CreateDocument.ts
3
3
  unless_exists: true
4
4
  ---
5
5
  import { Button } from "@powerhousedao/design-system";
6
- import { type DocumentModelModule } from "document-model";
6
+ import {
7
+ isDocumentTypeSupported,
8
+ showPHModal,
9
+ useDocumentModelModules,
10
+ useSelectedDriveId,
11
+ type VetraDocumentModelModule,
12
+ } from "@powerhousedao/reactor-browser";
7
13
 
8
14
  interface CreateDocumentProps {
9
- documentModels?: DocumentModelModule[];
10
- createDocument: (doc: DocumentModelModule) => void;
15
+ documentTypes?: string[];
11
16
  }
12
17
 
13
- function getDocumentSpec(doc: DocumentModelModule) {
14
- if ("documentModelState" in doc) {
15
- return doc.documentModelState as DocumentModelModule["documentModel"];
16
- }
18
+ /**
19
+ * Document creation UI component.
20
+ * Displays available document types as clickable buttons.
21
+ */
22
+ export const CreateDocument = (props: CreateDocumentProps) => {
23
+ const { documentTypes = [] } = props;
17
24
 
18
- return doc.documentModel;
19
- }
25
+ const selectedDriveId = useSelectedDriveId();
26
+ const documentModelModules = useDocumentModelModules();
27
+
28
+ const filteredDocumentModelModules = documentModelModules?.filter((module) =>
29
+ isDocumentTypeSupported(module.documentModel.global.id, documentTypes),
30
+ );
31
+
32
+ function handleAddDocument(module: VetraDocumentModelModule) {
33
+ if (!selectedDriveId) {
34
+ return;
35
+ }
36
+
37
+ // Display the Create Document modal on the host app
38
+ showPHModal({
39
+ type: "createDocument",
40
+ documentType: module.documentModel.global.id,
41
+ });
42
+ }
20
43
 
21
- export const CreateDocument: React.FC<CreateDocumentProps> = ({
22
- documentModels,
23
- createDocument,
24
- }) => {
25
44
  return (
26
- <div className="px-6">
45
+ <div>
46
+ {/* Customize section title here */}
27
47
  <h3 className="mb-3 mt-4 text-sm font-bold text-gray-600">
28
- New document
48
+ Create document
29
49
  </h3>
50
+ {/* Customize layout by changing flex-wrap, gap, or grid layout */}
30
51
  <div className="flex w-full flex-wrap gap-4">
31
- {documentModels?.map((doc) => {
32
- const spec = getDocumentSpec(doc);
52
+ {filteredDocumentModelModules?.map((documentModelModule) => {
33
53
  return (
34
54
  <Button
35
- key={spec.id}
36
- color="light"
37
- size="small"
38
- className="cursor-pointer"
39
- title={spec.name}
40
- aria-description={spec.description}
41
- onClick={() => createDocument(doc)}
55
+ key={documentModelModule.documentModel.global.id}
56
+ color="light" // Customize button appearance
57
+ className="cursor-pointer bg-gray-200 p-2 hover:bg-gray-300"
58
+ title={documentModelModule.documentModel.global.name}
59
+ aria-description={documentModelModule.documentModel.global.description}
60
+ onClick={() => handleAddDocument(documentModelModule)}
42
61
  >
43
- <span className="text-sm">{spec.name}</span>
62
+ {/* Customize document type display format */}
63
+ <span className="text-sm">
64
+ {documentModelModule.documentModel.global.name}
65
+ </span>
44
66
  </Button>
45
67
  );
46
68
  })}
47
69
  </div>
48
70
  </div>
49
71
  );
50
- };
72
+ };