@powerhousedao/contributor-billing 0.0.76 → 0.0.77

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 (176) hide show
  1. package/dist/document-models/billing-statement/gen/general/actions.d.ts +13 -4
  2. package/dist/document-models/billing-statement/gen/general/actions.d.ts.map +1 -1
  3. package/dist/document-models/billing-statement/gen/general/object.d.ts +3 -3
  4. package/dist/document-models/billing-statement/gen/general/object.d.ts.map +1 -1
  5. package/dist/document-models/billing-statement/gen/index.d.ts +2 -0
  6. package/dist/document-models/billing-statement/gen/index.d.ts.map +1 -1
  7. package/dist/document-models/billing-statement/gen/index.js +1 -0
  8. package/dist/document-models/billing-statement/gen/line-items/actions.d.ts +9 -3
  9. package/dist/document-models/billing-statement/gen/line-items/actions.d.ts.map +1 -1
  10. package/dist/document-models/billing-statement/gen/line-items/object.d.ts +3 -3
  11. package/dist/document-models/billing-statement/gen/line-items/object.d.ts.map +1 -1
  12. package/dist/document-models/billing-statement/gen/object.d.ts +4 -5
  13. package/dist/document-models/billing-statement/gen/object.d.ts.map +1 -1
  14. package/dist/document-models/billing-statement/gen/object.js +2 -2
  15. package/dist/document-models/billing-statement/gen/ph-factories.d.ts +27 -0
  16. package/dist/document-models/billing-statement/gen/ph-factories.d.ts.map +1 -0
  17. package/dist/document-models/billing-statement/gen/ph-factories.js +58 -0
  18. package/dist/document-models/billing-statement/gen/reducer.d.ts +4 -2
  19. package/dist/document-models/billing-statement/gen/reducer.d.ts.map +1 -1
  20. package/dist/document-models/billing-statement/gen/reducer.js +4 -1
  21. package/dist/document-models/billing-statement/gen/schema/types.d.ts +4 -0
  22. package/dist/document-models/billing-statement/gen/schema/types.d.ts.map +1 -1
  23. package/dist/document-models/billing-statement/gen/tags/actions.d.ts +5 -2
  24. package/dist/document-models/billing-statement/gen/tags/actions.d.ts.map +1 -1
  25. package/dist/document-models/billing-statement/gen/tags/object.d.ts +3 -3
  26. package/dist/document-models/billing-statement/gen/tags/object.d.ts.map +1 -1
  27. package/dist/document-models/billing-statement/gen/types.d.ts +4 -4
  28. package/dist/document-models/billing-statement/gen/types.d.ts.map +1 -1
  29. package/dist/document-models/billing-statement/gen/utils.d.ts +18 -3
  30. package/dist/document-models/billing-statement/gen/utils.d.ts.map +1 -1
  31. package/dist/document-models/billing-statement/gen/utils.js +33 -29
  32. package/dist/document-models/billing-statement/index.d.ts +8 -9
  33. package/dist/document-models/billing-statement/index.d.ts.map +1 -1
  34. package/dist/document-models/integrations/gen/index.d.ts +2 -0
  35. package/dist/document-models/integrations/gen/index.d.ts.map +1 -1
  36. package/dist/document-models/integrations/gen/index.js +1 -0
  37. package/dist/document-models/integrations/gen/integrations/actions.d.ts +13 -4
  38. package/dist/document-models/integrations/gen/integrations/actions.d.ts.map +1 -1
  39. package/dist/document-models/integrations/gen/integrations/object.d.ts +3 -3
  40. package/dist/document-models/integrations/gen/integrations/object.d.ts.map +1 -1
  41. package/dist/document-models/integrations/gen/object.d.ts +4 -5
  42. package/dist/document-models/integrations/gen/object.d.ts.map +1 -1
  43. package/dist/document-models/integrations/gen/object.js +2 -2
  44. package/dist/document-models/integrations/gen/ph-factories.d.ts +27 -0
  45. package/dist/document-models/integrations/gen/ph-factories.d.ts.map +1 -0
  46. package/dist/document-models/integrations/gen/ph-factories.js +75 -0
  47. package/dist/document-models/integrations/gen/reducer.d.ts +4 -2
  48. package/dist/document-models/integrations/gen/reducer.d.ts.map +1 -1
  49. package/dist/document-models/integrations/gen/reducer.js +4 -1
  50. package/dist/document-models/integrations/gen/schema/types.d.ts +4 -0
  51. package/dist/document-models/integrations/gen/schema/types.d.ts.map +1 -1
  52. package/dist/document-models/integrations/gen/types.d.ts +4 -4
  53. package/dist/document-models/integrations/gen/types.d.ts.map +1 -1
  54. package/dist/document-models/integrations/gen/utils.d.ts +18 -3
  55. package/dist/document-models/integrations/gen/utils.d.ts.map +1 -1
  56. package/dist/document-models/integrations/gen/utils.js +36 -32
  57. package/dist/document-models/integrations/index.d.ts +8 -9
  58. package/dist/document-models/integrations/index.d.ts.map +1 -1
  59. package/dist/document-models/invoice/gen/general/actions.d.ts +21 -6
  60. package/dist/document-models/invoice/gen/general/actions.d.ts.map +1 -1
  61. package/dist/document-models/invoice/gen/general/object.d.ts +3 -3
  62. package/dist/document-models/invoice/gen/general/object.d.ts.map +1 -1
  63. package/dist/document-models/invoice/gen/index.d.ts +2 -0
  64. package/dist/document-models/invoice/gen/index.d.ts.map +1 -1
  65. package/dist/document-models/invoice/gen/index.js +1 -0
  66. package/dist/document-models/invoice/gen/items/actions.d.ts +21 -6
  67. package/dist/document-models/invoice/gen/items/actions.d.ts.map +1 -1
  68. package/dist/document-models/invoice/gen/items/object.d.ts +3 -3
  69. package/dist/document-models/invoice/gen/items/object.d.ts.map +1 -1
  70. package/dist/document-models/invoice/gen/object.d.ts +4 -5
  71. package/dist/document-models/invoice/gen/object.d.ts.map +1 -1
  72. package/dist/document-models/invoice/gen/object.js +2 -2
  73. package/dist/document-models/invoice/gen/parties/actions.d.ts +25 -7
  74. package/dist/document-models/invoice/gen/parties/actions.d.ts.map +1 -1
  75. package/dist/document-models/invoice/gen/parties/object.d.ts +3 -3
  76. package/dist/document-models/invoice/gen/parties/object.d.ts.map +1 -1
  77. package/dist/document-models/invoice/gen/ph-factories.d.ts +27 -0
  78. package/dist/document-models/invoice/gen/ph-factories.d.ts.map +1 -0
  79. package/dist/document-models/invoice/gen/ph-factories.js +190 -0
  80. package/dist/document-models/invoice/gen/reducer.d.ts +4 -2
  81. package/dist/document-models/invoice/gen/reducer.d.ts.map +1 -1
  82. package/dist/document-models/invoice/gen/reducer.js +4 -1
  83. package/dist/document-models/invoice/gen/schema/types.d.ts +4 -0
  84. package/dist/document-models/invoice/gen/schema/types.d.ts.map +1 -1
  85. package/dist/document-models/invoice/gen/schema/zod.d.ts.map +1 -1
  86. package/dist/document-models/invoice/gen/transitions/actions.d.ts +49 -13
  87. package/dist/document-models/invoice/gen/transitions/actions.d.ts.map +1 -1
  88. package/dist/document-models/invoice/gen/transitions/object.d.ts +3 -3
  89. package/dist/document-models/invoice/gen/transitions/object.d.ts.map +1 -1
  90. package/dist/document-models/invoice/gen/types.d.ts +4 -4
  91. package/dist/document-models/invoice/gen/types.d.ts.map +1 -1
  92. package/dist/document-models/invoice/gen/utils.d.ts +18 -3
  93. package/dist/document-models/invoice/gen/utils.d.ts.map +1 -1
  94. package/dist/document-models/invoice/gen/utils.js +33 -29
  95. package/dist/document-models/invoice/index.d.ts +8 -9
  96. package/dist/document-models/invoice/index.d.ts.map +1 -1
  97. package/dist/editors/billing-statement/editor.d.ts +2 -3
  98. package/dist/editors/billing-statement/editor.d.ts.map +1 -1
  99. package/dist/editors/billing-statement/editor.js +11 -3
  100. package/dist/editors/billing-statement/index.d.ts +1 -2
  101. package/dist/editors/billing-statement/index.d.ts.map +1 -1
  102. package/dist/editors/billing-statement/lineItemTags/lineItemTags.js +1 -1
  103. package/dist/editors/contributor-billing/components/CreateDocument.d.ts +5 -7
  104. package/dist/editors/contributor-billing/components/CreateDocument.d.ts.map +1 -1
  105. package/dist/editors/contributor-billing/components/CreateDocument.js +18 -9
  106. package/dist/editors/contributor-billing/components/DriveExplorer.d.ts +6 -16
  107. package/dist/editors/contributor-billing/components/DriveExplorer.d.ts.map +1 -1
  108. package/dist/editors/contributor-billing/components/DriveExplorer.js +190 -89
  109. package/dist/editors/contributor-billing/components/EditorContainer.d.ts +9 -13
  110. package/dist/editors/contributor-billing/components/EditorContainer.d.ts.map +1 -1
  111. package/dist/editors/contributor-billing/components/EditorContainer.js +37 -26
  112. package/dist/editors/contributor-billing/components/FolderTree.d.ts +7 -3
  113. package/dist/editors/contributor-billing/components/FolderTree.d.ts.map +1 -1
  114. package/dist/editors/contributor-billing/components/FolderTree.js +11 -4
  115. package/dist/editors/contributor-billing/components/InvoiceTable/HeaderControls.d.ts +1 -2
  116. package/dist/editors/contributor-billing/components/InvoiceTable/HeaderControls.d.ts.map +1 -1
  117. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.d.ts +4 -8
  118. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.d.ts.map +1 -1
  119. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.js +125 -119
  120. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.d.ts +1 -2
  121. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.d.ts.map +1 -1
  122. package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.js +24 -4
  123. package/dist/editors/contributor-billing/editor.d.ts +9 -4
  124. package/dist/editors/contributor-billing/editor.d.ts.map +1 -1
  125. package/dist/editors/contributor-billing/editor.js +15 -41
  126. package/dist/editors/contributor-billing/hooks/useTransformedNodes.d.ts +1 -2
  127. package/dist/editors/contributor-billing/hooks/useTransformedNodes.d.ts.map +1 -1
  128. package/dist/editors/contributor-billing/index.d.ts +1 -2
  129. package/dist/editors/contributor-billing/index.d.ts.map +1 -1
  130. package/dist/editors/integrations/editor.d.ts +1 -4
  131. package/dist/editors/integrations/editor.d.ts.map +1 -1
  132. package/dist/editors/integrations/editor.js +10 -1
  133. package/dist/editors/integrations/index.d.ts +1 -2
  134. package/dist/editors/integrations/index.d.ts.map +1 -1
  135. package/dist/editors/invoice/editor.d.ts +1 -4
  136. package/dist/editors/invoice/editor.d.ts.map +1 -1
  137. package/dist/editors/invoice/editor.js +10 -1
  138. package/dist/editors/invoice/index.d.ts +1 -2
  139. package/dist/editors/invoice/index.d.ts.map +1 -1
  140. package/dist/editors/invoice/ingestPDF.js +1 -1
  141. package/dist/editors/invoice/invoiceToGnosis.js +3 -3
  142. package/dist/editors/invoice/requestFinance.js +2 -2
  143. package/dist/editors/invoice/uploadPdfChunked.js +1 -1
  144. package/dist/index.d.ts +2 -2
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/reducers/general.d.ts +8 -0
  147. package/dist/reducers/general.d.ts.map +1 -0
  148. package/dist/reducers/general.js +73 -0
  149. package/dist/reducers/items.d.ts +8 -0
  150. package/dist/reducers/items.d.ts.map +1 -0
  151. package/dist/reducers/items.js +195 -0
  152. package/dist/reducers/parties.d.ts +8 -0
  153. package/dist/reducers/parties.d.ts.map +1 -0
  154. package/dist/reducers/parties.js +266 -0
  155. package/dist/reducers/transitions.d.ts +8 -0
  156. package/dist/reducers/transitions.d.ts.map +1 -0
  157. package/dist/reducers/transitions.js +162 -0
  158. package/dist/scripts/contributor-billing/createXeroCsv.js +2 -2
  159. package/dist/scripts/invoice/gnosisTransactionBuilder.js +1 -1
  160. package/dist/style.css +730 -108
  161. package/dist/subgraphs/billing-statement/index.d.ts +2 -1
  162. package/dist/subgraphs/billing-statement/index.d.ts.map +1 -1
  163. package/dist/subgraphs/billing-statement/resolvers.d.ts.map +1 -1
  164. package/dist/subgraphs/billing-statement/resolvers.js +101 -69
  165. package/dist/subgraphs/billing-statement/schema.js +3 -3
  166. package/dist/subgraphs/integrations/index.d.ts +2 -1
  167. package/dist/subgraphs/integrations/index.d.ts.map +1 -1
  168. package/dist/subgraphs/integrations/resolvers.d.ts.map +1 -1
  169. package/dist/subgraphs/integrations/resolvers.js +61 -46
  170. package/dist/subgraphs/integrations/schema.js +3 -3
  171. package/dist/subgraphs/invoice/index.d.ts +2 -1
  172. package/dist/subgraphs/invoice/index.d.ts.map +1 -1
  173. package/dist/subgraphs/invoice/resolvers.d.ts.map +1 -1
  174. package/dist/subgraphs/invoice/resolvers.js +323 -181
  175. package/dist/subgraphs/invoice/schema.js +3 -3
  176. package/package.json +14 -14
@@ -1,4 +1,4 @@
1
- import { baseCreateDocument, baseCreateExtendedState, baseSaveToFile, baseSaveToFileHandle, baseLoadFromFile, baseLoadFromInput, generateId, } from "document-model";
1
+ import { baseCreateDocument, baseSaveToFile, baseSaveToFileHandle, baseLoadFromFile, baseLoadFromInput, defaultBaseState, generateId, } from "document-model";
2
2
  import { reducer } from "./reducer.js";
3
3
  export const initialGlobalState = {
4
4
  invoiceNo: "",
@@ -144,35 +144,39 @@ export const initialGlobalState = {
144
144
  closureReason: null,
145
145
  };
146
146
  export const initialLocalState = {};
147
+ export const createState = (state) => {
148
+ return {
149
+ ...defaultBaseState(),
150
+ global: { ...initialGlobalState, ...(state?.global ?? {}) },
151
+ local: { ...initialLocalState, ...(state?.local ?? {}) },
152
+ };
153
+ };
154
+ export const createDocument = (state) => {
155
+ const document = baseCreateDocument(createState, state);
156
+ document.header.documentType = "powerhouse/invoice";
157
+ // for backwards compatibility, but this is NOT a valid signed document id
158
+ document.header.id = generateId();
159
+ return document;
160
+ };
161
+ export const saveToFile = (document, path, name) => {
162
+ return baseSaveToFile(document, path, ".phdm", name);
163
+ };
164
+ export const saveToFileHandle = (document, input) => {
165
+ return baseSaveToFileHandle(document, input);
166
+ };
167
+ export const loadFromFile = (path) => {
168
+ return baseLoadFromFile(path, reducer);
169
+ };
170
+ export const loadFromInput = (input) => {
171
+ return baseLoadFromInput(input, reducer);
172
+ };
147
173
  const utils = {
148
174
  fileExtension: ".phdm",
149
- createState(state) {
150
- return {
151
- global: { ...initialGlobalState, ...state?.global },
152
- local: { ...initialLocalState, ...state?.local },
153
- };
154
- },
155
- createExtendedState(extendedState) {
156
- return baseCreateExtendedState({ ...extendedState }, utils.createState);
157
- },
158
- createDocument(state) {
159
- const document = baseCreateDocument(utils.createExtendedState(state), utils.createState);
160
- document.header.documentType = "powerhouse/invoice";
161
- // for backwards compatibility, but this is NOT a valid signed document id
162
- document.header.id = generateId();
163
- return document;
164
- },
165
- saveToFile(document, path, name) {
166
- return baseSaveToFile(document, path, ".phdm", name);
167
- },
168
- saveToFileHandle(document, input) {
169
- return baseSaveToFileHandle(document, input);
170
- },
171
- loadFromFile(path) {
172
- return baseLoadFromFile(path, reducer);
173
- },
174
- loadFromInput(input) {
175
- return baseLoadFromInput(input, reducer);
176
- },
175
+ createState,
176
+ createDocument,
177
+ saveToFile,
178
+ saveToFileHandle,
179
+ loadFromFile,
180
+ loadFromInput,
177
181
  };
178
182
  export default utils;
@@ -5,16 +5,15 @@
5
5
  import { type DocumentModelModule } from "document-model";
6
6
  import { reducer } from "./gen/reducer.js";
7
7
  import { documentModel } from "./gen/document-model.js";
8
- import { type InvoiceDocument } from "./gen/types.js";
8
+ import type { InvoicePHState } from "./gen/ph-factories.js";
9
9
  declare const utils: {
10
10
  fileExtension: string;
11
- createState: import("document-model").CreateState<InvoiceDocument>;
12
- createExtendedState: import("document-model").CreateExtendedState<InvoiceDocument>;
13
- createDocument: import("document-model").CreateDocument<InvoiceDocument>;
14
- loadFromFile: import("document-model").LoadFromFile<InvoiceDocument>;
15
- loadFromInput: import("document-model").LoadFromInput<InvoiceDocument>;
16
- saveToFile: import("document-model").SaveToFile;
17
- saveToFileHandle: import("document-model").SaveToFileHandle;
11
+ createState: import("document-model").CreateState<InvoicePHState>;
12
+ createDocument: import("document-model").CreateDocument<InvoicePHState>;
13
+ saveToFile: (document: any, path: string, name?: string) => Promise<string>;
14
+ saveToFileHandle: (document: any, input: any) => Promise<void>;
15
+ loadFromFile: import("document-model").LoadFromFile<InvoicePHState>;
16
+ loadFromInput: import("document-model").LoadFromInput<InvoicePHState>;
18
17
  };
19
18
  declare const actions: {
20
19
  editInvoice: (input: import("./gen/index.js").EditInvoiceInput) => import("./gen/index.js").EditInvoiceAction;
@@ -46,7 +45,7 @@ declare const actions: {
46
45
  confirmPayment: (input: import("./gen/index.js").ConfirmPaymentInput) => import("./gen/index.js").ConfirmPaymentAction;
47
46
  closePayment: (input: import("./gen/index.js").ClosePaymentInput) => import("./gen/index.js").ClosePaymentAction;
48
47
  };
49
- export declare const module: DocumentModelModule<InvoiceDocument>;
48
+ export declare const module: DocumentModelModule<InvoicePHState>;
50
49
  export { reducer, actions, utils, documentModel };
51
50
  export * from "./gen/types.js";
52
51
  export * from "./src/utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../document-models/invoice/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,QAAA,MAAM,KAAK;;;;;;;;;CAAkC,CAAC;AAC9C,QAAA,MAAM,OAAO;kBALmB,gDAChB;iBAIoB,+CAElC;sBASO,oDACN;sBAC4J,oDAA2B;iBAAuL,+CAAsB;iBAhBhY,+CAAqB;qBAKY,mDACpC;uBAUkB,qDAA4B;gBAAyL,8CAAqB;oBAAuK,kDAAyB;sBAAsL,oDAA2B;kBAjBjpB,gDAAsB;mBAIuB,iDAEhC;qBASY,mDACN;qBACwJ,mDAA0B;oBAAwL,kDAAyB;aAJ/Y,2CAAkB;YAIiC,0CAAiB;YAAkJ,0CAAiB;aAAmJ,2CAAkB;aAAsJ,2CAAkB;gBAAyJ,8CAAqB;sBAAwK,oDAA2B;uBAA4L,qDAA4B;wBAAgM,sDAA6B;yBAAqM,uDAA8B;qBAAoM,mDAA0B;mBAAqL,iDAAwB;CAb17D,CAAC;AAEtD,eAAO,MAAM,MAAM,EAAE,mBAAmB,CAAC,eAAe,CAKvD,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAElD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../document-models/invoice/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,QAAA,MAAM,KAAK;;;;;;;;CAAkC,CAAC;AAC9C,QAAA,MAAM,OAAO;kBALmB,gDAChB;iBAIc,+CAAsB;sBAWjD,oDAA2B;sBAE4H,oDAA2B;iBAAuL,+CAAsB;iBAhB3X,+CAAqB;qBAKM,mDAA0B;uBAW3C,qDAA4B;gBAAyL,8CAAqB;oBAAuK,kDAAyB;sBAAsL,oDAA2B;kBAjB5oB,gDAAsB;mBAIiB,iDAEhC;qBASa,mDACN;qBACwJ,mDAA0B;oBAAwL,kDAAyB;aAJ/Y,2CAAkB;YAIiC,0CAAiB;YAAkJ,0CAAiB;aAAmJ,2CAAkB;aAAsJ,2CAAkB;gBAAyJ,8CAAqB;sBAAwK,oDAA2B;uBAA4L,qDAA4B;wBAAgM,sDAA6B;yBAAqM,uDAA8B;qBAAoM,mDAA0B;mBAAqL,iDAAwB;CAbr7D,CAAC;AAEtD,eAAO,MAAM,MAAM,EAAE,mBAAmB,CAAC,cAAc,CAKtD,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAElD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import type { EditorProps } from "document-model";
2
- import { type BillingStatementDocument } from "../../document-models/billing-statement/index.js";
3
- export type IProps = EditorProps<BillingStatementDocument>;
4
- export default function Editor(props: IProps): import("react/jsx-runtime").JSX.Element;
2
+ export type IProps = EditorProps;
3
+ export default function Editor(props: any): import("react/jsx-runtime").JSX.Element;
5
4
  //# sourceMappingURL=editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../editors/billing-statement/editor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,kDAAkD,CAAC;AAM1D,MAAM,MAAM,MAAM,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAE3D,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,MAAM,2CAyG3C"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../editors/billing-statement/editor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAWlD,MAAM,MAAM,MAAM,GAAG,WAAW,CAAC;AAEjC,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,GAAG,2CAmHxC"}
@@ -5,10 +5,18 @@ import { CurrencyForm } from "../invoice/components/currencyForm.js";
5
5
  import { Textarea } from "@powerhousedao/document-engineering";
6
6
  import LineItemsTable from "./components/lineItemsTable.js";
7
7
  import { formatNumber } from "../invoice/lineItems.js";
8
+ import { useSelectedDocument } from "@powerhousedao/reactor-browser";
8
9
  export default function Editor(props) {
9
- const { document: doc, dispatch } = props;
10
- const state = doc.state.global;
11
- // console.log("global state", state);
10
+ let dispatch;
11
+ const { document } = props;
12
+ if (props?.dispatch) {
13
+ dispatch = props.dispatch;
14
+ }
15
+ else {
16
+ const selectedDocument = useSelectedDocument();
17
+ dispatch = selectedDocument[1];
18
+ }
19
+ const state = document.state.global;
12
20
  const [notes, setNotes] = useState(state.notes ?? "");
13
21
  return (_jsxs("div", { className: "editor-container", children: [_jsxs("div", { className: "grid grid-cols-2 gap-2 border border-gray-500 p-2 rounded-md bg-gray-1001", children: [_jsx("div", { className: "col-span-1 flex items-center", children: _jsx("h1", { className: "text-xl md:text-2xl font-bold", children: "Billing Statement" }) }), _jsxs("div", { className: "grid col-span-1 grid-rows-2 gap-2 justify-end ", children: [_jsxs("div", { className: "col-span-1 space-x-2", children: [_jsx("span", { children: "Submitter" }), _jsx("span", { children: state.contributor })] }), _jsxs("div", { className: "col-span-1 space-x-2", children: [_jsx("span", { children: "Status" }), _jsx("span", { children: state.status })] })] })] }), _jsx("div", { className: "mt-6 p-2", children: _jsxs("div", { className: "flex justify-end", children: [_jsx("span", { className: "mr-2 pt-2", children: "Currency: " }), _jsx(CurrencyForm, { currency: props.document.state.global.currency, handleInputChange: (e) => {
14
22
  dispatch(actions.editBillingStatement({ currency: e.target.value }));
@@ -1,5 +1,4 @@
1
1
  import type { EditorModule } from "document-model";
2
- import type { BillingStatementDocument } from "../../document-models/billing-statement/index.js";
3
- export declare const module: EditorModule<BillingStatementDocument>;
2
+ export declare const module: EditorModule;
4
3
  export default module;
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../editors/billing-statement/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAEjG,eAAO,MAAM,MAAM,EAAE,YAAY,CAAC,wBAAwB,CASzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../editors/billing-statement/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,eAAO,MAAM,MAAM,EAAE,YASpB,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -24,7 +24,7 @@ export function LineItemTagsTable({ lineItems, onClose, dispatch, }) {
24
24
  id: item.id,
25
25
  description: e.target.value,
26
26
  }));
27
- }, className: "w-full text-xs" }) }), _jsx("td", { className: "border-b border-gray-200 p-2 w-50", children: _jsx(DatePicker, { name: "period", dateFormat: "YYYY-MM-DD", autoClose: true, placeholder: "Select Period", value: item.lineItemTag.find((tag) => tag.dimension === "accounting-period")?.label || "", onChange: (e) => dispatch(actions.editLineItemTag({
27
+ }, className: "w-full text-xs" }) }), _jsx("td", { className: "border-b border-gray-200 p-2 w-50", children: _jsx(DatePicker, { name: "period", dateFormat: "YYYY-MM", autoClose: true, placeholder: "Select Period", value: item.lineItemTag.find((tag) => tag.dimension === "accounting-period")?.label || "", onChange: (e) => dispatch(actions.editLineItemTag({
28
28
  lineItemId: item.id,
29
29
  dimension: "accounting-period",
30
30
  value: new Date(e.target.value)
@@ -1,8 +1,6 @@
1
- import { type DocumentModelModule } from "document-model";
2
- interface CreateDocumentProps {
3
- documentModels?: DocumentModelModule[];
4
- createDocument: (doc: DocumentModelModule) => void;
5
- }
6
- export declare const CreateDocument: React.FC<CreateDocumentProps>;
7
- export {};
1
+ /**
2
+ * Document creation UI component.
3
+ * Displays available document types as clickable buttons.
4
+ */
5
+ export declare const CreateDocument: () => import("react/jsx-runtime").JSX.Element;
8
6
  //# sourceMappingURL=CreateDocument.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateDocument.d.ts","sourceRoot":"","sources":["../../../../editors/contributor-billing/components/CreateDocument.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,UAAU,mBAAmB;IAC3B,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,cAAc,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACpD;AAUD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA4BxD,CAAC"}
1
+ {"version":3,"file":"CreateDocument.d.ts","sourceRoot":"","sources":["../../../../editors/contributor-billing/components/CreateDocument.tsx"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,cAAc,+CAkD1B,CAAC"}
@@ -1,14 +1,23 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { addDocument, useDocumentModelModules, useSelectedDriveId, useSelectedFolder, } from "@powerhousedao/reactor-browser";
2
3
  import { Button } from "@powerhousedao/design-system";
3
- function getDocumentSpec(doc) {
4
- if ("documentModelState" in doc) {
5
- return doc.documentModelState;
4
+ /**
5
+ * Document creation UI component.
6
+ * Displays available document types as clickable buttons.
7
+ */
8
+ export const CreateDocument = () => {
9
+ const selectedDriveId = useSelectedDriveId();
10
+ const selectedFolder = useSelectedFolder();
11
+ const documentModelModules = useDocumentModelModules();
12
+ async function handleAddDocument(module) {
13
+ console.log("create document module", module);
14
+ if (!selectedDriveId) {
15
+ return;
16
+ }
17
+ await addDocument(selectedDriveId, `New ${module.documentModel.name} document`, module.documentModel.id, selectedFolder?.id, undefined, undefined, "powerhouse-invoice-editor");
6
18
  }
7
- return doc.documentModel;
8
- }
9
- export const CreateDocument = ({ documentModels, createDocument, }) => {
10
- return (_jsxs("div", { className: "px-6", children: [_jsx("h3", { className: "mb-3 mt-4 text-sm font-bold text-gray-600", children: "New document" }), _jsx("div", { className: "flex w-full flex-wrap gap-4", children: documentModels?.map((doc) => {
11
- const spec = getDocumentSpec(doc);
12
- return (_jsx(Button, { color: "light", size: "small", className: "cursor-pointer", "aria-details": spec.description, onClick: () => createDocument(doc), children: _jsx("span", { className: "text-sm", children: spec.name }) }, spec.id));
19
+ return (_jsxs("div", { className: "px-6", children: [_jsx("h3", { className: "mb-3 mt-4 text-sm font-bold text-gray-600", children: "New document" }), _jsx("div", { className: "flex w-full flex-wrap gap-4", children: documentModelModules?.map((documentModelModule) => {
20
+ return (_jsx(Button, { color: "light" // Customize button appearance
21
+ , size: "small", className: "cursor-pointer", title: documentModelModule.documentModel.name, "aria-description": documentModelModule.documentModel.description, onClick: () => handleAddDocument(documentModelModule), children: _jsx("span", { className: "text-sm", children: documentModelModule.documentModel.name }) }, documentModelModule.documentModel.id));
13
22
  }) })] }));
14
23
  };
@@ -1,17 +1,7 @@
1
- import { DocumentDriveAction, type DocumentDriveDocument, type Node } from "document-drive";
2
- import type { EditorDispatch } from "document-model";
3
- import { type DriveEditorContext } from "@powerhousedao/reactor-browser";
4
- interface DriveExplorerProps {
5
- driveId: string;
6
- nodes: Node[];
7
- onAddFolder: (name: string, parentFolder?: string) => void;
8
- onDeleteNode: (nodeId: string) => void;
9
- renameNode: (nodeId: string, name: string) => void;
10
- onCopyNode: (nodeId: string, targetName: string, parentId?: string) => void;
11
- context: DriveEditorContext;
12
- document: DocumentDriveDocument;
13
- dispatch: EditorDispatch<DocumentDriveAction>;
14
- }
15
- export declare function DriveExplorer({ driveId, nodes, onDeleteNode, renameNode, onAddFolder, onCopyNode, context, document, dispatch, }: DriveExplorerProps): import("react/jsx-runtime").JSX.Element;
16
- export {};
1
+ import { type DriveEditorProps } from "@powerhousedao/reactor-browser";
2
+ /**
3
+ * Main drive explorer component with sidebar navigation and content area.
4
+ * Layout: Left sidebar (folder tree) + Right content area (files/folders + document editor)
5
+ */
6
+ export declare function DriveExplorer(props: DriveEditorProps): import("react/jsx-runtime").JSX.Element;
17
7
  //# sourceMappingURL=DriveExplorer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DriveExplorer.d.ts","sourceRoot":"","sources":["../../../../editors/contributor-billing/components/DriveExplorer.tsx"],"names":[],"mappings":"AAUA,OAAO,EAGL,mBAAmB,EAEnB,KAAK,qBAAqB,EAE1B,KAAK,IAAI,EACV,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAGV,cAAc,EACf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,KAAK,kBAAkB,EAMxB,MAAM,gCAAgC,CAAC;AAMxC,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;CAC/C;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,kBAAkB,2CAsRpB"}
1
+ {"version":3,"file":"DriveExplorer.d.ts","sourceRoot":"","sources":["../../../../editors/contributor-billing/components/DriveExplorer.tsx"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,gBAAgB,EAkBtB,MAAM,gCAAgC,CAAC;AAWxC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,2CA+UpD"}
@@ -1,110 +1,211 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useState, useRef, useEffect } from "react";
2
+ import { CreateDocumentModal, useBreadcrumbs, useDrop, } from "@powerhousedao/design-system";
3
+ import { addDocument, setSelectedNode, useAllFolderNodes, useDocumentModelModules, useDriveContext, useDriveSharingType, useEditorModules, useFileChildNodes, useFolderChildNodes, useSelectedDrive, useSelectedDriveDocuments, useSelectedFolder, useSelectedNodePath, useUserPermissions, } from "@powerhousedao/reactor-browser";
4
+ import { useCallback, useEffect, useRef, useState } from "react";
5
+ import { EditorContainer } from "./EditorContainer.jsx";
6
+ import { InvoiceTable } from "./InvoiceTable/InvoiceTable.jsx";
3
7
  import { twMerge } from "tailwind-merge";
4
- import { useTransformedNodes } from "../hooks/useTransformedNodes.js";
5
- import { useSelectedFolderChildren } from "../hooks/useSelectedFolderChildren.js";
6
- import { useDispatchMap } from "../hooks/useDispatchMap.js";
7
- import { DocumentDispatch } from "./DocumentDispatch.js";
8
- import { EditorContainer } from "./EditorContainer.js";
9
- import { CreateDocumentModal } from "@powerhousedao/design-system";
10
- import { useDriveActionsWithUiNodes, useDriveContext, } from "@powerhousedao/reactor-browser";
11
- import { InvoiceTable } from "./InvoiceTable/InvoiceTable.js";
12
- import { actions } from "../../../document-models/invoice/index.js";
13
- import { useDrop } from "../hooks/useDrop.js";
14
- import { ToastContainer } from '@powerhousedao/design-system';
15
- export function DriveExplorer({ driveId, nodes, onDeleteNode, renameNode, onAddFolder, onCopyNode, context, document, dispatch, }) {
16
- const [selectedNodeId, setSelectedNodeId] = useState();
8
+ import { ToastContainer } from "@powerhousedao/design-system";
9
+ /**
10
+ * Main drive explorer component with sidebar navigation and content area.
11
+ * Layout: Left sidebar (folder tree) + Right content area (files/folders + document editor)
12
+ */
13
+ export function DriveExplorer(props) {
14
+ const [selected, setSelected] = useState({});
15
+ // === DOCUMENT EDITOR STATE ===
16
+ // Customize document opening/closing behavior here
17
17
  const [activeDocumentId, setActiveDocumentId] = useState();
18
18
  const [openModal, setOpenModal] = useState(false);
19
- const [selected, setSelected] = useState({});
20
19
  const selectedDocumentModel = useRef(null);
21
- const { addDocument, documentModels, useDriveDocumentStates, selectedNode } = useDriveContext();
22
- const [state, fetchDocuments] = useDriveDocumentStates({ driveId });
23
- const { useDocumentEditorProps } = context;
24
- // Use our custom hook to manage the dispatch map
25
- const { dispatchMap, handleDispatchReady } = useDispatchMap(nodes, driveId, documentModels[1], context);
26
- const handleBatchAction = useCallback((action) => {
27
- Object.entries(selected).forEach(([id, checked]) => {
28
- console.log(action);
29
- if (checked) {
30
- if (action === "approve" && dispatchMap[id]) {
31
- dispatchMap[id](actions.editStatus({
32
- status: "ACCEPTED",
33
- }));
20
+ const editorModules = useEditorModules();
21
+ // === DRIVE CONTEXT HOOKS ===
22
+ // Core drive operations and document models
23
+ const { onAddFile, onAddFolder, onCopyNode, onDuplicateNode, onMoveNode, onRenameNode, showDeleteNodeModal, } = useDriveContext();
24
+ const { isAllowedToCreateDocuments } = useUserPermissions();
25
+ // === STATE MANAGEMENT HOOKS ===
26
+ // Core state hooks for drive navigation
27
+ const [selectedDrive] = useSelectedDrive(); // Currently selected drive
28
+ const selectedFolder = useSelectedFolder(); // Currently selected folder
29
+ const selectedNodePath = useSelectedNodePath();
30
+ const sharingType = useDriveSharingType(selectedDrive?.header.id);
31
+ // === DROP HOOKS ===
32
+ const { isDropTarget, dropProps } = useDrop({
33
+ node: selectedNodePath?.length > 0
34
+ ? selectedNodePath[selectedNodePath.length - 1]
35
+ : undefined,
36
+ onAddFile,
37
+ onCopyNode,
38
+ onMoveNode,
39
+ });
40
+ // === NAVIGATION SETUP ===
41
+ // Breadcrumbs for folder navigation
42
+ const { breadcrumbs, onBreadcrumbSelected } = useBreadcrumbs({
43
+ selectedNodePath,
44
+ setSelectedNode,
45
+ });
46
+ const folderChildren = useFolderChildNodes();
47
+ const fileChildren = useFileChildNodes();
48
+ // All folders for the sidebar tree view
49
+ const allFolders = useAllFolderNodes();
50
+ // All document states
51
+ const allDocuments = useSelectedDriveDocuments();
52
+ const state = allDocuments;
53
+ // Create a stable dispatcher map using useRef only (no useState to avoid re-renders)
54
+ const dispatchersRef = useRef(new Map());
55
+ // Create a working dispatch function that uses the existing reactor system
56
+ const createDispatchFunction = useCallback((docId) => {
57
+ return async (action) => {
58
+ try {
59
+ console.log(`Dispatching action for document ${docId}:`, action);
60
+ // Since we can't use GraphQL mutations, we need to find another way
61
+ // The key insight is that the existing useDocumentById hook already works
62
+ // We need to create a dispatch function that can handle actions
63
+ // Try to access the reactor instance through the global window object
64
+ // This is a common pattern in React applications
65
+ if (window.reactor) {
66
+ const result = await window.reactor.addAction(docId, action);
67
+ if (result.status !== "SUCCESS") {
68
+ throw new Error(result.error?.message ?? "Failed to dispatch action");
69
+ }
70
+ return;
34
71
  }
35
- else if (action === "reject" && dispatchMap[id]) {
36
- dispatchMap[id](actions.editStatus({
37
- status: "REJECTED",
38
- }));
72
+ // Alternative: Try to access through the context
73
+ // The DriveContextProvider might expose the reactor instance
74
+ if (window.driveContext?.reactor) {
75
+ const result = await window.driveContext.reactor.addAction(docId, action);
76
+ if (result.status !== "SUCCESS") {
77
+ throw new Error(result.error?.message ?? "Failed to dispatch action");
78
+ }
79
+ return;
39
80
  }
81
+ // Fallback: Use a custom event system
82
+ // This allows the reactor system to listen for actions
83
+ const actionEvent = new CustomEvent("reactor-action", {
84
+ detail: {
85
+ docId,
86
+ action,
87
+ timestamp: Date.now(),
88
+ },
89
+ });
90
+ window.dispatchEvent(actionEvent);
91
+ // For now, we'll just log the action to maintain the interface
92
+ // The InvoiceTable will still work, but actions won't be persisted
93
+ console.warn(`Action dispatched via event system for document ${docId}. Make sure the reactor system is listening for 'reactor-action' events.`);
40
94
  }
41
- else if (action === "pay" && dispatchMap[id]) {
42
- dispatchMap[id](actions.editStatus({
43
- status: "PAYMENTRECEIVED",
44
- }));
95
+ catch (error) {
96
+ console.error(`Failed to dispatch action for document ${docId}:`, error);
45
97
  }
46
- });
47
- }, [selected, dispatchMap]);
48
- // Transform nodes using the custom hook
49
- const transformedNodes = useTransformedNodes(nodes, driveId);
50
- // Separate folders and files
51
- const folders = transformedNodes.filter((node) => node.kind === "FOLDER");
52
- const files = transformedNodes.filter((node) => node.kind === "FILE");
53
- // Get the active document info from nodes
54
- const activeDocument = activeDocumentId
55
- ? files.find((file) => file.id === activeDocumentId)
56
- : undefined;
57
- const documentModelModule = activeDocument
58
- ? context.getDocumentModelModule(activeDocument.documentType)
59
- : null;
60
- useEffect(() => {
61
- fetchDocuments(driveId).catch(console.error);
62
- }, [activeDocumentId]);
63
- // Dummy functions to satisfy component types
64
- const dummyDuplicateNode = useCallback((node) => {
65
- console.log("Duplicate node:", node);
66
- }, []);
67
- const dummyAddFile = useCallback(async (file, parentNode) => {
68
- console.log("Add file:", file, parentNode);
69
- }, []);
70
- const dummyMoveNode = useCallback(async (uiNode, targetNode) => {
71
- console.log("Move node:", uiNode, targetNode);
72
- }, []);
73
- const handleNodeSelect = useCallback((node) => {
74
- console.log("Selected node:", node);
75
- setSelectedNodeId(node.id);
76
- }, []);
77
- const handleFileSelect = useCallback((node) => {
78
- setActiveDocumentId(node.id);
79
- }, []);
80
- const handleEditorClose = useCallback(() => {
81
- setActiveDocumentId(undefined);
98
+ };
82
99
  }, []);
100
+ // Update dispatchers when state changes - use a more stable approach
101
+ useEffect(() => {
102
+ // Only update if the document IDs have actually changed
103
+ const currentDocIds = state?.map((doc) => doc.header.id) || [];
104
+ const previousDocIds = Array.from(dispatchersRef.current.keys());
105
+ // Check if the document list has actually changed
106
+ const hasChanged = currentDocIds.length !== previousDocIds.length ||
107
+ !currentDocIds.every((id) => previousDocIds.includes(id));
108
+ if (!hasChanged) {
109
+ // Just update the document states without recreating dispatchers
110
+ state?.forEach((doc) => {
111
+ const docId = doc.header.id;
112
+ if (dispatchersRef.current.has(docId)) {
113
+ const [, dispatchFunction] = dispatchersRef.current.get(docId);
114
+ dispatchersRef.current.set(docId, [doc, dispatchFunction]);
115
+ }
116
+ });
117
+ return;
118
+ }
119
+ // Only recreate dispatchers when the document list actually changes
120
+ const newDispatchers = new Map();
121
+ state?.forEach((doc) => {
122
+ const docId = doc.header.id;
123
+ // Check if we already have a dispatcher for this document
124
+ if (dispatchersRef.current.has(docId)) {
125
+ // Update the document state but keep the same dispatch function
126
+ const [, dispatchFunction] = dispatchersRef.current.get(docId);
127
+ newDispatchers.set(docId, [doc, dispatchFunction]);
128
+ }
129
+ else {
130
+ // Create a new dispatcher for this document
131
+ const dispatchFunction = createDispatchFunction(docId);
132
+ newDispatchers.set(docId, [doc, dispatchFunction]);
133
+ }
134
+ });
135
+ // Clean up dispatchers for documents that no longer exist
136
+ for (const [docId] of dispatchersRef.current) {
137
+ if (!currentDocIds.includes(docId)) {
138
+ dispatchersRef.current.delete(docId);
139
+ }
140
+ }
141
+ // Update the ref
142
+ dispatchersRef.current = newDispatchers;
143
+ }, [state, createDispatchFunction]);
144
+ const getDocDispatcher = (id) => {
145
+ return dispatchersRef.current.get(id) || null;
146
+ };
147
+ // === EVENT HANDLERS ===
148
+ // Handle folder creation with optional name parameter
149
+ const handleCreateFolder = useCallback(async (folderName) => {
150
+ let name = folderName;
151
+ // If no name provided, prompt for it (for manual folder creation)
152
+ if (!name) {
153
+ const promptResult = prompt("Enter folder name:");
154
+ name = promptResult || undefined;
155
+ }
156
+ if (name?.trim()) {
157
+ try {
158
+ await onAddFolder(name.trim(), selectedFolder);
159
+ }
160
+ catch (error) {
161
+ console.error("Failed to create folder:", error);
162
+ }
163
+ }
164
+ }, [onAddFolder, selectedFolder]);
165
+ // Handle document creation from modal
83
166
  const onCreateDocument = useCallback(async (fileName) => {
84
167
  setOpenModal(false);
85
168
  const documentModel = selectedDocumentModel.current;
86
- if (!documentModel)
169
+ if (!documentModel || !selectedDrive?.header.id)
87
170
  return;
88
- const node = await addDocument(driveId, fileName, documentModel.documentModel.id);
89
- selectedDocumentModel.current = null;
90
- setActiveDocumentId(node.id);
91
- }, [addDocument, driveId]);
92
- const { addFile, copyNode, moveNode } = useDriveActionsWithUiNodes(document, dispatch);
93
- const { isDropTarget, dropProps } = useDrop({
94
- uiNode: selectedNode?.kind === "FOLDER" ? selectedNode : null,
95
- onAddFile: addFile,
96
- onCopyNode: copyNode,
97
- onMoveNode: moveNode,
98
- });
171
+ const editorType = documentModel.documentModel.id === "powerhouse/invoice"
172
+ ? "powerhouse-invoice-editor"
173
+ : "integrations-editor";
174
+ try {
175
+ const node = await addDocument(selectedDrive.header.id, fileName, documentModel.documentModel.id, selectedFolder?.id, undefined, undefined, editorType);
176
+ selectedDocumentModel.current = null;
177
+ if (node) {
178
+ // Customize: Auto-open created document by uncommenting below
179
+ // setActiveDocumentId(node.id);
180
+ }
181
+ }
182
+ catch (error) {
183
+ console.error("Failed to create document:", error);
184
+ }
185
+ }, [addDocument, editorModules, selectedDrive?.header.id, selectedFolder?.id]);
99
186
  const onSelectDocumentModel = useCallback((documentModel) => {
100
187
  selectedDocumentModel.current = documentModel;
101
188
  setOpenModal(true);
102
189
  }, []);
103
- const filteredDocumentModels = documentModels;
104
- // Get children of selected folder using the custom hook
105
- const selectedFolderChildren = useSelectedFolderChildren(selectedNodeId, folders, files);
190
+ // === DOCUMENT EDITOR DATA ===
191
+ // Filter available document types here if needed
192
+ const documentModelModules = useDocumentModelModules();
193
+ // Get active document and its editor components
194
+ const activeDocument = activeDocumentId
195
+ ? fileChildren.find((file) => file.id === activeDocumentId)
196
+ : undefined;
197
+ const documentModelModule = activeDocument
198
+ ? documentModelModules?.find((m) => m.documentModel.id === activeDocument.documentType)
199
+ : null;
106
200
  const editorModule = activeDocument
107
- ? context.getEditor(activeDocument.documentType)
201
+ ? editorModules?.find((e) => e.documentTypes.includes(activeDocument.documentType))
108
202
  : null;
109
- return (_jsxs("div", { className: "flex h-full", children: [_jsx(ToastContainer, { position: "bottom-right", autoClose: 5000, hideProgressBar: false, newestOnTop: false, closeOnClick: false, rtl: false, pauseOnFocusLoss: true, draggable: true, pauseOnHover: true, theme: "light" }), nodes.map((node) => (_jsx(DocumentDispatch, { documentId: node.id, driveId: driveId, documentModelModule: documentModels, context: context, onDispatchReady: (dispatch) => handleDispatchReady(node.id, dispatch) }, node.id))), _jsx("div", { className: "flex-1 p-4 overflow-y-auto", children: activeDocument && documentModelModule && editorModule ? (_jsx(EditorContainer, { context: context, documentId: activeDocumentId, documentType: activeDocument.documentType, driveId: driveId, onClose: handleEditorClose, title: activeDocument.name, documentModelModule: documentModelModule, editorModule: editorModule })) : (_jsx("div", { ...dropProps, className: twMerge("editor-container rounded-md border-2 border-transparent ", isDropTarget && "border-dashed border-blue-100"), children: _jsx(InvoiceTable, { setActiveDocumentId: setActiveDocumentId, files: files, state: state, getDispatch: () => dispatchMap[activeDocumentId || ""], selected: selected, setSelected: setSelected, onBatchAction: handleBatchAction, onDeleteNode: onDeleteNode, renameNode: renameNode, filteredDocumentModels: filteredDocumentModels, onSelectDocumentModel: onSelectDocumentModel, dispatchMap: dispatchMap, driveId: driveId }) })) }), _jsx(CreateDocumentModal, { onContinue: onCreateDocument, onOpenChange: (open) => setOpenModal(open), open: openModal })] }));
203
+ // === RENDER ===
204
+ // console.log("files", fileChildren);
205
+ // console.log("state", state);
206
+ // console.log("isDropTarget", isDropTarget);
207
+ // console.log("dropProps", dropProps);
208
+ return (_jsx("div", { className: "flex h-full editor-container", children: _jsxs("div", { ...dropProps, className: twMerge("rounded-md border-2 border-transparent ", isDropTarget && "border-dashed border-blue-100"), children: [_jsx(ToastContainer, { position: "bottom-right", autoClose: 5000, hideProgressBar: false, newestOnTop: false, closeOnClick: false, rtl: false, pauseOnFocusLoss: true, draggable: true, pauseOnHover: true, theme: "light" }), _jsx("div", { className: "flex-1 p-4", children: activeDocument && documentModelModule && editorModule ? (
209
+ // Document editor view
210
+ _jsx(EditorContainer, { handleClose: () => setActiveDocumentId(undefined), activeDocumentId: activeDocumentId || "" })) : (_jsx(InvoiceTable, { setActiveDocumentId: setActiveDocumentId, files: fileChildren, state: state || [], selected: selected, setSelected: setSelected, onBatchAction: () => { }, onDeleteNode: () => { }, renameNode: () => { }, filteredDocumentModels: documentModelModules, onSelectDocumentModel: onSelectDocumentModel, getDocDispatcher: getDocDispatcher })) }), _jsx(CreateDocumentModal, { onContinue: onCreateDocument, onOpenChange: (open) => setOpenModal(open), open: openModal })] }) }));
110
211
  }
@@ -1,14 +1,10 @@
1
- import { type DriveEditorContext } from "@powerhousedao/reactor-browser";
2
- import { type DocumentModelModule, type EditorModule, type PHDocument } from "document-model";
3
- export interface EditorContainerProps {
4
- driveId: string;
5
- documentId: string;
6
- documentType: string;
7
- onClose: () => void;
8
- title: string;
9
- context: DriveEditorContext;
10
- documentModelModule: DocumentModelModule<PHDocument>;
11
- editorModule: EditorModule;
12
- }
13
- export declare const EditorContainer: React.FC<EditorContainerProps>;
1
+ /**
2
+ * Document editor container that wraps individual document editors.
3
+ * Handles document loading, toolbar, revision history, and dynamic editor loading.
4
+ * Customize toolbar actions and editor context here.
5
+ */
6
+ export declare const EditorContainer: (props: {
7
+ handleClose: () => void;
8
+ activeDocumentId: string;
9
+ }) => import("react/jsx-runtime").JSX.Element;
14
10
  //# sourceMappingURL=EditorContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorContainer.d.ts","sourceRoot":"","sources":["../../../../editors/contributor-billing/components/EditorContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAQxB,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,CAAC;IAC5B,mBAAmB,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACrD,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwE1D,CAAC"}
1
+ {"version":3,"file":"EditorContainer.d.ts","sourceRoot":"","sources":["../../../../editors/contributor-billing/components/EditorContainer.tsx"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO;IACrC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,4CAqFA,CAAC"}