@powerhousedao/builder-team-admin 0.0.1
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.
- package/LICENSE +661 -0
- package/README.md +179 -0
- package/dist/document-models/builders/actions.d.ts +14 -0
- package/dist/document-models/builders/actions.d.ts.map +1 -0
- package/dist/document-models/builders/actions.js +4 -0
- package/dist/document-models/builders/gen/actions.d.ts +4 -0
- package/dist/document-models/builders/gen/actions.d.ts.map +1 -0
- package/dist/document-models/builders/gen/actions.js +1 -0
- package/dist/document-models/builders/gen/builders/actions.d.ts +12 -0
- package/dist/document-models/builders/gen/builders/actions.d.ts.map +1 -0
- package/dist/document-models/builders/gen/builders/actions.js +1 -0
- package/dist/document-models/builders/gen/builders/creators.d.ts +5 -0
- package/dist/document-models/builders/gen/builders/creators.d.ts.map +1 -0
- package/dist/document-models/builders/gen/builders/creators.js +4 -0
- package/dist/document-models/builders/gen/builders/error.d.ts +2 -0
- package/dist/document-models/builders/gen/builders/error.d.ts.map +1 -0
- package/dist/document-models/builders/gen/builders/error.js +1 -0
- package/dist/document-models/builders/gen/builders/operations.d.ts +8 -0
- package/dist/document-models/builders/gen/builders/operations.d.ts.map +1 -0
- package/dist/document-models/builders/gen/builders/operations.js +3 -0
- package/dist/document-models/builders/gen/creators.d.ts +3 -0
- package/dist/document-models/builders/gen/creators.d.ts.map +1 -0
- package/dist/document-models/builders/gen/creators.js +2 -0
- package/dist/document-models/builders/gen/document-model.d.ts +3 -0
- package/dist/document-models/builders/gen/document-model.d.ts.map +1 -0
- package/dist/document-models/builders/gen/document-model.js +59 -0
- package/dist/document-models/builders/gen/document-schema.d.ts +142 -0
- package/dist/document-models/builders/gen/document-schema.d.ts.map +1 -0
- package/dist/document-models/builders/gen/document-schema.js +33 -0
- package/dist/document-models/builders/gen/document-type.d.ts +2 -0
- package/dist/document-models/builders/gen/document-type.d.ts.map +1 -0
- package/dist/document-models/builders/gen/document-type.js +1 -0
- package/dist/document-models/builders/gen/index.d.ts +12 -0
- package/dist/document-models/builders/gen/index.d.ts.map +1 -0
- package/dist/document-models/builders/gen/index.js +11 -0
- package/dist/document-models/builders/gen/ph-factories.d.ts +23 -0
- package/dist/document-models/builders/gen/ph-factories.d.ts.map +1 -0
- package/dist/document-models/builders/gen/ph-factories.js +47 -0
- package/dist/document-models/builders/gen/reducer.d.ts +3 -0
- package/dist/document-models/builders/gen/reducer.d.ts.map +1 -0
- package/dist/document-models/builders/gen/reducer.js +21 -0
- package/dist/document-models/builders/gen/schema/index.d.ts +3 -0
- package/dist/document-models/builders/gen/schema/index.d.ts.map +1 -0
- package/dist/document-models/builders/gen/schema/index.js +2 -0
- package/dist/document-models/builders/gen/schema/types.d.ts +146 -0
- package/dist/document-models/builders/gen/schema/types.d.ts.map +1 -0
- package/dist/document-models/builders/gen/schema/types.js +1 -0
- package/dist/document-models/builders/gen/schema/zod.d.ts +13 -0
- package/dist/document-models/builders/gen/schema/zod.d.ts.map +1 -0
- package/dist/document-models/builders/gen/schema/zod.js +21 -0
- package/dist/document-models/builders/gen/types.d.ts +12 -0
- package/dist/document-models/builders/gen/types.d.ts.map +1 -0
- package/dist/document-models/builders/gen/types.js +1 -0
- package/dist/document-models/builders/gen/utils.d.ts +15 -0
- package/dist/document-models/builders/gen/utils.d.ts.map +1 -0
- package/dist/document-models/builders/gen/utils.js +51 -0
- package/dist/document-models/builders/hooks.d.ts +11 -0
- package/dist/document-models/builders/hooks.d.ts.map +1 -0
- package/dist/document-models/builders/hooks.js +26 -0
- package/dist/document-models/builders/index.d.ts +10 -0
- package/dist/document-models/builders/index.d.ts.map +1 -0
- package/dist/document-models/builders/index.js +9 -0
- package/dist/document-models/builders/module.d.ts +5 -0
- package/dist/document-models/builders/module.d.ts.map +1 -0
- package/dist/document-models/builders/module.js +10 -0
- package/dist/document-models/builders/src/index.d.ts +2 -0
- package/dist/document-models/builders/src/index.d.ts.map +1 -0
- package/dist/document-models/builders/src/index.js +1 -0
- package/dist/document-models/builders/src/reducers/builders.d.ts +3 -0
- package/dist/document-models/builders/src/reducers/builders.d.ts.map +1 -0
- package/dist/document-models/builders/src/reducers/builders.js +8 -0
- package/dist/document-models/builders/src/tests/builders.test.d.ts +6 -0
- package/dist/document-models/builders/src/tests/builders.test.d.ts.map +1 -0
- package/dist/document-models/builders/src/tests/builders.test.js +29 -0
- package/dist/document-models/builders/src/tests/document-model.test.d.ts +10 -0
- package/dist/document-models/builders/src/tests/document-model.test.d.ts.map +1 -0
- package/dist/document-models/builders/src/tests/document-model.test.js +104 -0
- package/dist/document-models/builders/src/utils.d.ts +2 -0
- package/dist/document-models/builders/src/utils.d.ts.map +1 -0
- package/dist/document-models/builders/src/utils.js +1 -0
- package/dist/document-models/builders/utils.d.ts +14 -0
- package/dist/document-models/builders/utils.d.ts.map +1 -0
- package/dist/document-models/builders/utils.js +7 -0
- package/dist/document-models/document-models.d.ts +3 -0
- package/dist/document-models/document-models.d.ts.map +1 -0
- package/dist/document-models/document-models.js +6 -0
- package/dist/document-models/expense-report/actions.d.ts +27 -0
- package/dist/document-models/expense-report/actions.d.ts.map +1 -0
- package/dist/document-models/expense-report/actions.js +4 -0
- package/dist/document-models/expense-report/gen/actions.d.ts +4 -0
- package/dist/document-models/expense-report/gen/actions.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/actions.js +1 -0
- package/dist/document-models/expense-report/gen/creators.d.ts +3 -0
- package/dist/document-models/expense-report/gen/creators.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/creators.js +2 -0
- package/dist/document-models/expense-report/gen/document-model.d.ts +3 -0
- package/dist/document-models/expense-report/gen/document-model.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/document-model.js +202 -0
- package/dist/document-models/expense-report/gen/document-schema.d.ts +199 -0
- package/dist/document-models/expense-report/gen/document-schema.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/document-schema.js +33 -0
- package/dist/document-models/expense-report/gen/document-type.d.ts +2 -0
- package/dist/document-models/expense-report/gen/document-type.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/document-type.js +1 -0
- package/dist/document-models/expense-report/gen/index.d.ts +12 -0
- package/dist/document-models/expense-report/gen/index.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/index.js +11 -0
- package/dist/document-models/expense-report/gen/ph-factories.d.ts +23 -0
- package/dist/document-models/expense-report/gen/ph-factories.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/ph-factories.js +186 -0
- package/dist/document-models/expense-report/gen/reducer.d.ts +3 -0
- package/dist/document-models/expense-report/gen/reducer.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/reducer.js +73 -0
- package/dist/document-models/expense-report/gen/schema/index.d.ts +3 -0
- package/dist/document-models/expense-report/gen/schema/index.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/schema/index.js +2 -0
- package/dist/document-models/expense-report/gen/schema/types.d.ts +258 -0
- package/dist/document-models/expense-report/gen/schema/types.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/schema/types.js +1 -0
- package/dist/document-models/expense-report/gen/schema/zod.d.ts +32 -0
- package/dist/document-models/expense-report/gen/schema/zod.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/schema/zod.js +200 -0
- package/dist/document-models/expense-report/gen/types.d.ts +12 -0
- package/dist/document-models/expense-report/gen/types.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/types.js +1 -0
- package/dist/document-models/expense-report/gen/utils.d.ts +15 -0
- package/dist/document-models/expense-report/gen/utils.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/utils.js +190 -0
- package/dist/document-models/expense-report/gen/wallet/actions.d.ts +64 -0
- package/dist/document-models/expense-report/gen/wallet/actions.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/wallet/actions.js +1 -0
- package/dist/document-models/expense-report/gen/wallet/creators.d.ts +18 -0
- package/dist/document-models/expense-report/gen/wallet/creators.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/wallet/creators.js +17 -0
- package/dist/document-models/expense-report/gen/wallet/error.d.ts +2 -0
- package/dist/document-models/expense-report/gen/wallet/error.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/wallet/error.js +1 -0
- package/dist/document-models/expense-report/gen/wallet/operations.d.ts +21 -0
- package/dist/document-models/expense-report/gen/wallet/operations.d.ts.map +1 -0
- package/dist/document-models/expense-report/gen/wallet/operations.js +3 -0
- package/dist/document-models/expense-report/hooks.d.ts +11 -0
- package/dist/document-models/expense-report/hooks.d.ts.map +1 -0
- package/dist/document-models/expense-report/hooks.js +26 -0
- package/dist/document-models/expense-report/index.d.ts +10 -0
- package/dist/document-models/expense-report/index.d.ts.map +1 -0
- package/dist/document-models/expense-report/index.js +9 -0
- package/dist/document-models/expense-report/module.d.ts +5 -0
- package/dist/document-models/expense-report/module.d.ts.map +1 -0
- package/dist/document-models/expense-report/module.js +10 -0
- package/dist/document-models/expense-report/src/index.d.ts +2 -0
- package/dist/document-models/expense-report/src/index.d.ts.map +1 -0
- package/dist/document-models/expense-report/src/index.js +1 -0
- package/dist/document-models/expense-report/src/reducers/wallet.d.ts +3 -0
- package/dist/document-models/expense-report/src/reducers/wallet.d.ts.map +1 -0
- package/dist/document-models/expense-report/src/reducers/wallet.js +196 -0
- package/dist/document-models/expense-report/src/tests/document-model.test.d.ts +10 -0
- package/dist/document-models/expense-report/src/tests/document-model.test.d.ts.map +1 -0
- package/dist/document-models/expense-report/src/tests/document-model.test.js +104 -0
- package/dist/document-models/expense-report/src/tests/wallet.test.d.ts +6 -0
- package/dist/document-models/expense-report/src/tests/wallet.test.d.ts.map +1 -0
- package/dist/document-models/expense-report/src/tests/wallet.test.js +159 -0
- package/dist/document-models/expense-report/src/utils.d.ts +2 -0
- package/dist/document-models/expense-report/src/utils.d.ts.map +1 -0
- package/dist/document-models/expense-report/src/utils.js +1 -0
- package/dist/document-models/expense-report/utils.d.ts +14 -0
- package/dist/document-models/expense-report/utils.d.ts.map +1 -0
- package/dist/document-models/expense-report/utils.js +7 -0
- package/dist/document-models/index.d.ts +3 -0
- package/dist/document-models/index.d.ts.map +1 -0
- package/dist/document-models/index.js +2 -0
- package/dist/document-models/service-subscriptions/actions.d.ts +25 -0
- package/dist/document-models/service-subscriptions/actions.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/actions.js +9 -0
- package/dist/document-models/service-subscriptions/gen/actions.d.ts +8 -0
- package/dist/document-models/service-subscriptions/gen/actions.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/actions.js +3 -0
- package/dist/document-models/service-subscriptions/gen/categories/actions.d.ts +16 -0
- package/dist/document-models/service-subscriptions/gen/categories/actions.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/categories/actions.js +1 -0
- package/dist/document-models/service-subscriptions/gen/categories/creators.d.ts +6 -0
- package/dist/document-models/service-subscriptions/gen/categories/creators.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/categories/creators.js +5 -0
- package/dist/document-models/service-subscriptions/gen/categories/error.d.ts +2 -0
- package/dist/document-models/service-subscriptions/gen/categories/error.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/categories/error.js +1 -0
- package/dist/document-models/service-subscriptions/gen/categories/operations.d.ts +9 -0
- package/dist/document-models/service-subscriptions/gen/categories/operations.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/categories/operations.js +3 -0
- package/dist/document-models/service-subscriptions/gen/creators.d.ts +7 -0
- package/dist/document-models/service-subscriptions/gen/creators.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/creators.js +6 -0
- package/dist/document-models/service-subscriptions/gen/document-model.d.ts +3 -0
- package/dist/document-models/service-subscriptions/gen/document-model.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/document-model.js +194 -0
- package/dist/document-models/service-subscriptions/gen/document-schema.d.ts +180 -0
- package/dist/document-models/service-subscriptions/gen/document-schema.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/document-schema.js +33 -0
- package/dist/document-models/service-subscriptions/gen/document-type.d.ts +2 -0
- package/dist/document-models/service-subscriptions/gen/document-type.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/document-type.js +1 -0
- package/dist/document-models/service-subscriptions/gen/index.d.ts +14 -0
- package/dist/document-models/service-subscriptions/gen/index.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/index.js +13 -0
- package/dist/document-models/service-subscriptions/gen/ph-factories.d.ts +23 -0
- package/dist/document-models/service-subscriptions/gen/ph-factories.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/ph-factories.js +45 -0
- package/dist/document-models/service-subscriptions/gen/reducer.d.ts +3 -0
- package/dist/document-models/service-subscriptions/gen/reducer.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/reducer.js +67 -0
- package/dist/document-models/service-subscriptions/gen/schema/index.d.ts +3 -0
- package/dist/document-models/service-subscriptions/gen/schema/index.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/schema/index.js +2 -0
- package/dist/document-models/service-subscriptions/gen/schema/types.d.ts +274 -0
- package/dist/document-models/service-subscriptions/gen/schema/types.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/schema/types.js +1 -0
- package/dist/document-models/service-subscriptions/gen/schema/zod.d.ts +31 -0
- package/dist/document-models/service-subscriptions/gen/schema/zod.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/schema/zod.js +199 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/actions.d.ts +32 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/actions.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/actions.js +1 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/creators.d.ts +10 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/creators.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/creators.js +9 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/error.d.ts +2 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/error.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/error.js +1 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/operations.d.ts +13 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/operations.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/subscriptions/operations.js +3 -0
- package/dist/document-models/service-subscriptions/gen/types.d.ts +12 -0
- package/dist/document-models/service-subscriptions/gen/types.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/types.js +1 -0
- package/dist/document-models/service-subscriptions/gen/utils.d.ts +15 -0
- package/dist/document-models/service-subscriptions/gen/utils.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/utils.js +53 -0
- package/dist/document-models/service-subscriptions/gen/vendors/actions.d.ts +16 -0
- package/dist/document-models/service-subscriptions/gen/vendors/actions.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/vendors/actions.js +1 -0
- package/dist/document-models/service-subscriptions/gen/vendors/creators.d.ts +6 -0
- package/dist/document-models/service-subscriptions/gen/vendors/creators.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/vendors/creators.js +5 -0
- package/dist/document-models/service-subscriptions/gen/vendors/error.d.ts +2 -0
- package/dist/document-models/service-subscriptions/gen/vendors/error.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/vendors/error.js +1 -0
- package/dist/document-models/service-subscriptions/gen/vendors/operations.d.ts +9 -0
- package/dist/document-models/service-subscriptions/gen/vendors/operations.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/gen/vendors/operations.js +3 -0
- package/dist/document-models/service-subscriptions/hooks.d.ts +11 -0
- package/dist/document-models/service-subscriptions/hooks.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/hooks.js +26 -0
- package/dist/document-models/service-subscriptions/index.d.ts +10 -0
- package/dist/document-models/service-subscriptions/index.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/index.js +9 -0
- package/dist/document-models/service-subscriptions/module.d.ts +5 -0
- package/dist/document-models/service-subscriptions/module.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/module.js +10 -0
- package/dist/document-models/service-subscriptions/src/index.d.ts +2 -0
- package/dist/document-models/service-subscriptions/src/index.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/index.js +1 -0
- package/dist/document-models/service-subscriptions/src/reducers/categories.d.ts +3 -0
- package/dist/document-models/service-subscriptions/src/reducers/categories.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/reducers/categories.js +24 -0
- package/dist/document-models/service-subscriptions/src/reducers/subscriptions.d.ts +3 -0
- package/dist/document-models/service-subscriptions/src/reducers/subscriptions.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/reducers/subscriptions.js +114 -0
- package/dist/document-models/service-subscriptions/src/reducers/vendors.d.ts +3 -0
- package/dist/document-models/service-subscriptions/src/reducers/vendors.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/reducers/vendors.js +30 -0
- package/dist/document-models/service-subscriptions/src/tests/categories.test.d.ts +6 -0
- package/dist/document-models/service-subscriptions/src/tests/categories.test.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/tests/categories.test.js +39 -0
- package/dist/document-models/service-subscriptions/src/tests/document-model.test.d.ts +10 -0
- package/dist/document-models/service-subscriptions/src/tests/document-model.test.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/tests/document-model.test.js +104 -0
- package/dist/document-models/service-subscriptions/src/tests/subscriptions.test.d.ts +6 -0
- package/dist/document-models/service-subscriptions/src/tests/subscriptions.test.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/tests/subscriptions.test.js +79 -0
- package/dist/document-models/service-subscriptions/src/tests/vendors.test.d.ts +6 -0
- package/dist/document-models/service-subscriptions/src/tests/vendors.test.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/tests/vendors.test.js +39 -0
- package/dist/document-models/service-subscriptions/src/utils.d.ts +2 -0
- package/dist/document-models/service-subscriptions/src/utils.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/src/utils.js +1 -0
- package/dist/document-models/service-subscriptions/utils.d.ts +14 -0
- package/dist/document-models/service-subscriptions/utils.d.ts.map +1 -0
- package/dist/document-models/service-subscriptions/utils.js +7 -0
- package/dist/editors/builder-team-admin/components/CreateDocument.d.ts +6 -0
- package/dist/editors/builder-team-admin/components/CreateDocument.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/CreateDocument.js +18 -0
- package/dist/editors/builder-team-admin/components/DriveContents.d.ts +6 -0
- package/dist/editors/builder-team-admin/components/DriveContents.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/DriveContents.js +38 -0
- package/dist/editors/builder-team-admin/components/DriveExplorer.d.ts +7 -0
- package/dist/editors/builder-team-admin/components/DriveExplorer.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/DriveExplorer.js +45 -0
- package/dist/editors/builder-team-admin/components/EmptyState.d.ts +3 -0
- package/dist/editors/builder-team-admin/components/EmptyState.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/EmptyState.js +10 -0
- package/dist/editors/builder-team-admin/components/ExpenseReportsStats.d.ts +11 -0
- package/dist/editors/builder-team-admin/components/ExpenseReportsStats.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/ExpenseReportsStats.js +137 -0
- package/dist/editors/builder-team-admin/components/Files.d.ts +3 -0
- package/dist/editors/builder-team-admin/components/Files.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/Files.js +12 -0
- package/dist/editors/builder-team-admin/components/FolderTree.d.ts +14 -0
- package/dist/editors/builder-team-admin/components/FolderTree.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/FolderTree.js +209 -0
- package/dist/editors/builder-team-admin/components/Folders.d.ts +3 -0
- package/dist/editors/builder-team-admin/components/Folders.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/Folders.js +12 -0
- package/dist/editors/builder-team-admin/components/NavigationBreadcrumbs.d.ts +3 -0
- package/dist/editors/builder-team-admin/components/NavigationBreadcrumbs.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/NavigationBreadcrumbs.js +6 -0
- package/dist/editors/builder-team-admin/components/expense-reports.d.ts +2 -0
- package/dist/editors/builder-team-admin/components/expense-reports.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/expense-reports.js +250 -0
- package/dist/editors/builder-team-admin/components/overview/ProfileHeader.d.ts +10 -0
- package/dist/editors/builder-team-admin/components/overview/ProfileHeader.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/overview/ProfileHeader.js +24 -0
- package/dist/editors/builder-team-admin/components/overview/SubscriptionsStats.d.ts +15 -0
- package/dist/editors/builder-team-admin/components/overview/SubscriptionsStats.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/overview/SubscriptionsStats.js +61 -0
- package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.d.ts +10 -0
- package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/overview/TeamMembersOverview.js +97 -0
- package/dist/editors/builder-team-admin/components/team-members.d.ts +2 -0
- package/dist/editors/builder-team-admin/components/team-members.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/components/team-members.js +200 -0
- package/dist/editors/builder-team-admin/config.d.ts +4 -0
- package/dist/editors/builder-team-admin/config.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/config.js +10 -0
- package/dist/editors/builder-team-admin/editor.d.ts +4 -0
- package/dist/editors/builder-team-admin/editor.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/editor.js +11 -0
- package/dist/editors/builder-team-admin/module.d.ts +3 -0
- package/dist/editors/builder-team-admin/module.d.ts.map +1 -0
- package/dist/editors/builder-team-admin/module.js +10 -0
- package/dist/editors/builders/editor.d.ts +3 -0
- package/dist/editors/builders/editor.d.ts.map +1 -0
- package/dist/editors/builders/editor.js +204 -0
- package/dist/editors/builders/module.d.ts +4 -0
- package/dist/editors/builders/module.d.ts.map +1 -0
- package/dist/editors/builders/module.js +10 -0
- package/dist/editors/editors.d.ts +3 -0
- package/dist/editors/editors.d.ts.map +1 -0
- package/dist/editors/editors.js +8 -0
- package/dist/editors/expense-report/components/AddBillingStatementModal.d.ts +11 -0
- package/dist/editors/expense-report/components/AddBillingStatementModal.d.ts.map +1 -0
- package/dist/editors/expense-report/components/AddBillingStatementModal.js +195 -0
- package/dist/editors/expense-report/components/AggregatedExpensesTable.d.ts +11 -0
- package/dist/editors/expense-report/components/AggregatedExpensesTable.d.ts.map +1 -0
- package/dist/editors/expense-report/components/AggregatedExpensesTable.js +388 -0
- package/dist/editors/expense-report/components/ExpenseReportPDF.d.ts +10 -0
- package/dist/editors/expense-report/components/ExpenseReportPDF.d.ts.map +1 -0
- package/dist/editors/expense-report/components/ExpenseReportPDF.js +287 -0
- package/dist/editors/expense-report/components/ExpenseReportTransactionsTable.d.ts +14 -0
- package/dist/editors/expense-report/components/ExpenseReportTransactionsTable.d.ts.map +1 -0
- package/dist/editors/expense-report/components/ExpenseReportTransactionsTable.js +64 -0
- package/dist/editors/expense-report/components/WalletsTable.d.ts +12 -0
- package/dist/editors/expense-report/components/WalletsTable.d.ts.map +1 -0
- package/dist/editors/expense-report/components/WalletsTable.js +456 -0
- package/dist/editors/expense-report/config.d.ts +3 -0
- package/dist/editors/expense-report/config.d.ts.map +1 -0
- package/dist/editors/expense-report/config.js +3 -0
- package/dist/editors/expense-report/editor.d.ts +2 -0
- package/dist/editors/expense-report/editor.d.ts.map +1 -0
- package/dist/editors/expense-report/editor.js +107 -0
- package/dist/editors/expense-report/hooks/useSyncWallet.d.ts +5 -0
- package/dist/editors/expense-report/hooks/useSyncWallet.d.ts.map +1 -0
- package/dist/editors/expense-report/hooks/useSyncWallet.js +150 -0
- package/dist/editors/expense-report/hooks/useWalletSync.d.ts +9 -0
- package/dist/editors/expense-report/hooks/useWalletSync.d.ts.map +1 -0
- package/dist/editors/expense-report/hooks/useWalletSync.js +78 -0
- package/dist/editors/expense-report/module.d.ts +3 -0
- package/dist/editors/expense-report/module.d.ts.map +1 -0
- package/dist/editors/expense-report/module.js +9 -0
- package/dist/editors/index.d.ts +4 -0
- package/dist/editors/index.d.ts.map +1 -0
- package/dist/editors/index.js +3 -0
- package/dist/editors/service-subscriptions-editor/components/AddCategoryModal.d.ts +7 -0
- package/dist/editors/service-subscriptions-editor/components/AddCategoryModal.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/AddCategoryModal.js +39 -0
- package/dist/editors/service-subscriptions-editor/components/AddSubscriptionModal.d.ts +10 -0
- package/dist/editors/service-subscriptions-editor/components/AddSubscriptionModal.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/AddSubscriptionModal.js +64 -0
- package/dist/editors/service-subscriptions-editor/components/AddVendorModal.d.ts +7 -0
- package/dist/editors/service-subscriptions-editor/components/AddVendorModal.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/AddVendorModal.js +43 -0
- package/dist/editors/service-subscriptions-editor/components/CategoriesList.d.ts +8 -0
- package/dist/editors/service-subscriptions-editor/components/CategoriesList.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/CategoriesList.js +23 -0
- package/dist/editors/service-subscriptions-editor/components/EditName.d.ts +3 -0
- package/dist/editors/service-subscriptions-editor/components/EditName.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/EditName.js +31 -0
- package/dist/editors/service-subscriptions-editor/components/StatsOverview.d.ts +8 -0
- package/dist/editors/service-subscriptions-editor/components/StatsOverview.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/StatsOverview.js +32 -0
- package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.d.ts +10 -0
- package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/SubscriptionsList.js +88 -0
- package/dist/editors/service-subscriptions-editor/components/VendorsList.d.ts +8 -0
- package/dist/editors/service-subscriptions-editor/components/VendorsList.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/components/VendorsList.js +23 -0
- package/dist/editors/service-subscriptions-editor/editor.d.ts +2 -0
- package/dist/editors/service-subscriptions-editor/editor.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/editor.js +60 -0
- package/dist/editors/service-subscriptions-editor/module.d.ts +4 -0
- package/dist/editors/service-subscriptions-editor/module.d.ts.map +1 -0
- package/dist/editors/service-subscriptions-editor/module.js +10 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/package.json +119 -0
- package/dist/powerhouse.manifest.json +27 -0
- package/dist/processors/index.d.ts +2 -0
- package/dist/processors/index.d.ts.map +1 -0
- package/dist/processors/index.js +1 -0
- package/dist/style.css +3948 -0
- package/dist/subgraphs/index.d.ts +2 -0
- package/dist/subgraphs/index.d.ts.map +1 -0
- package/dist/subgraphs/index.js +1 -0
- package/dist/subgraphs/service-subscriptions/index.d.ts +11 -0
- package/dist/subgraphs/service-subscriptions/index.d.ts.map +1 -0
- package/dist/subgraphs/service-subscriptions/index.js +11 -0
- package/dist/subgraphs/service-subscriptions/resolvers.d.ts +3 -0
- package/dist/subgraphs/service-subscriptions/resolvers.d.ts.map +1 -0
- package/dist/subgraphs/service-subscriptions/resolvers.js +228 -0
- package/dist/subgraphs/service-subscriptions/schema.d.ts +3 -0
- package/dist/subgraphs/service-subscriptions/schema.d.ts.map +1 -0
- package/dist/subgraphs/service-subscriptions/schema.js +193 -0
- package/dist/vite.config.d.ts +3 -0
- package/dist/vite.config.d.ts.map +1 -0
- package/dist/vite.config.js +13 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +15 -0
- package/package.json +119 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState, useRef, useEffect } from "react";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { actions } from "../../../document-models/expense-report/index.js";
|
|
5
|
+
import { Textarea, Select, Button } from "@powerhousedao/document-engineering";
|
|
6
|
+
import { Plus, Trash2 } from "lucide-react";
|
|
7
|
+
import { generateId } from "document-model";
|
|
8
|
+
export function AggregatedExpensesTable({ wallets, groups, periodStart, periodEnd, dispatch, }) {
|
|
9
|
+
// State for active tab (selected wallet)
|
|
10
|
+
const [activeWalletIndex, setActiveWalletIndex] = useState(0);
|
|
11
|
+
// State for editing comments
|
|
12
|
+
const [editingGroupId, setEditingGroupId] = useState(null);
|
|
13
|
+
const [editingComment, setEditingComment] = useState("");
|
|
14
|
+
const [originalComment, setOriginalComment] = useState("");
|
|
15
|
+
// State for editing numeric fields
|
|
16
|
+
const [editingField, setEditingField] = useState(null);
|
|
17
|
+
const [editingValue, setEditingValue] = useState("");
|
|
18
|
+
// State for adding new line item
|
|
19
|
+
const [isAddingLineItem, setIsAddingLineItem] = useState(false);
|
|
20
|
+
const [selectedGroupId, setSelectedGroupId] = useState("");
|
|
21
|
+
const [duplicateCategoryError, setDuplicateCategoryError] = useState("");
|
|
22
|
+
// State for delete confirmation modal
|
|
23
|
+
const [deleteModalOpen, setDeleteModalOpen] = useState(false);
|
|
24
|
+
const [lineItemToDelete, setLineItemToDelete] = useState(null);
|
|
25
|
+
// Ref for line item editor to scroll into view
|
|
26
|
+
const lineItemEditorRef = useRef(null);
|
|
27
|
+
// Scroll to bottom of page when editor opens
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (isAddingLineItem && lineItemEditorRef.current) {
|
|
30
|
+
// Use a slight delay to ensure the editor is rendered
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
// Find the scrollable container by traversing up from the ref
|
|
33
|
+
let element = lineItemEditorRef.current?.parentElement;
|
|
34
|
+
while (element) {
|
|
35
|
+
const style = window.getComputedStyle(element);
|
|
36
|
+
const isScrollable = style.overflow === "auto" ||
|
|
37
|
+
style.overflow === "scroll" ||
|
|
38
|
+
style.overflowY === "auto" ||
|
|
39
|
+
style.overflowY === "scroll";
|
|
40
|
+
if (isScrollable && element.scrollHeight > element.clientHeight) {
|
|
41
|
+
// Found the scrollable container, scroll to bottom
|
|
42
|
+
element.scrollTo({ top: element.scrollHeight, behavior: "smooth" });
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
element = element.parentElement;
|
|
46
|
+
}
|
|
47
|
+
}, 150);
|
|
48
|
+
}
|
|
49
|
+
}, [isAddingLineItem]);
|
|
50
|
+
// Get existing category IDs for the active wallet
|
|
51
|
+
const existingCategoryIds = useMemo(() => {
|
|
52
|
+
const wallet = wallets[activeWalletIndex];
|
|
53
|
+
if (!wallet || !wallet.lineItems)
|
|
54
|
+
return new Set();
|
|
55
|
+
return new Set(wallet.lineItems
|
|
56
|
+
.filter((item) => item !== null && item !== undefined)
|
|
57
|
+
.map((item) => item.group)
|
|
58
|
+
.filter((group) => !!group));
|
|
59
|
+
}, [wallets, activeWalletIndex]);
|
|
60
|
+
// Create group options for Select component
|
|
61
|
+
const groupOptions = useMemo(() => {
|
|
62
|
+
return groups.map((group) => ({
|
|
63
|
+
value: group.id,
|
|
64
|
+
label: group.label || group.id,
|
|
65
|
+
}));
|
|
66
|
+
}, [groups]);
|
|
67
|
+
// Handle category selection with duplicate check
|
|
68
|
+
const handleCategoryChange = (value) => {
|
|
69
|
+
setSelectedGroupId(value);
|
|
70
|
+
// Check if category already exists
|
|
71
|
+
if (existingCategoryIds.has(value)) {
|
|
72
|
+
const categoryLabel = groups.find((g) => g.id === value)?.label || value;
|
|
73
|
+
setDuplicateCategoryError(`"${categoryLabel}" already exists in this wallet. Please select a different category.`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
setDuplicateCategoryError("");
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
// Handle saving new line item
|
|
80
|
+
const handleSaveLineItem = () => {
|
|
81
|
+
const wallet = wallets[activeWalletIndex];
|
|
82
|
+
if (!wallet || !wallet.wallet || !selectedGroupId)
|
|
83
|
+
return;
|
|
84
|
+
// Prevent saving if duplicate
|
|
85
|
+
if (existingCategoryIds.has(selectedGroupId)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const newLineItem = {
|
|
89
|
+
id: generateId(),
|
|
90
|
+
label: groups.find((g) => g.id === selectedGroupId)?.label || "",
|
|
91
|
+
group: selectedGroupId,
|
|
92
|
+
budget: 0,
|
|
93
|
+
actuals: 0,
|
|
94
|
+
forecast: 0,
|
|
95
|
+
payments: 0,
|
|
96
|
+
comments: "",
|
|
97
|
+
};
|
|
98
|
+
dispatch(actions.addLineItem({
|
|
99
|
+
wallet: wallet.wallet,
|
|
100
|
+
lineItem: newLineItem,
|
|
101
|
+
}));
|
|
102
|
+
// Reset state
|
|
103
|
+
setIsAddingLineItem(false);
|
|
104
|
+
setSelectedGroupId("");
|
|
105
|
+
setDuplicateCategoryError("");
|
|
106
|
+
};
|
|
107
|
+
// Handle canceling new line item
|
|
108
|
+
const handleCancelLineItem = () => {
|
|
109
|
+
setIsAddingLineItem(false);
|
|
110
|
+
setSelectedGroupId("");
|
|
111
|
+
setDuplicateCategoryError("");
|
|
112
|
+
};
|
|
113
|
+
// Handle opening delete confirmation modal
|
|
114
|
+
const handleDeleteLineItem = (lineItemId, lineItemLabel) => {
|
|
115
|
+
setLineItemToDelete({ id: lineItemId, label: lineItemLabel });
|
|
116
|
+
setDeleteModalOpen(true);
|
|
117
|
+
};
|
|
118
|
+
// Handle confirming deletion
|
|
119
|
+
const handleConfirmDelete = () => {
|
|
120
|
+
const wallet = wallets[activeWalletIndex];
|
|
121
|
+
if (!wallet || !wallet.wallet || !lineItemToDelete)
|
|
122
|
+
return;
|
|
123
|
+
dispatch(actions.removeLineItem({
|
|
124
|
+
wallet: wallet.wallet,
|
|
125
|
+
lineItemId: lineItemToDelete.id,
|
|
126
|
+
}));
|
|
127
|
+
// Close modal and reset state
|
|
128
|
+
setDeleteModalOpen(false);
|
|
129
|
+
setLineItemToDelete(null);
|
|
130
|
+
};
|
|
131
|
+
// Handle canceling deletion
|
|
132
|
+
const handleCancelDelete = () => {
|
|
133
|
+
setDeleteModalOpen(false);
|
|
134
|
+
setLineItemToDelete(null);
|
|
135
|
+
};
|
|
136
|
+
// Format period for title
|
|
137
|
+
const periodTitle = useMemo(() => {
|
|
138
|
+
if (!periodStart)
|
|
139
|
+
return "Breakdown";
|
|
140
|
+
const date = new Date(periodStart);
|
|
141
|
+
const month = date.toLocaleDateString("en-US", { month: "short" });
|
|
142
|
+
const year = date.getFullYear();
|
|
143
|
+
return `${month} ${year} Breakdown`;
|
|
144
|
+
}, [periodStart]);
|
|
145
|
+
// Create a map of groups with their parent info
|
|
146
|
+
const groupsMap = useMemo(() => {
|
|
147
|
+
const map = new Map();
|
|
148
|
+
groups.forEach((group) => {
|
|
149
|
+
map.set(group.id, { group });
|
|
150
|
+
});
|
|
151
|
+
// Add parent references
|
|
152
|
+
groups.forEach((group) => {
|
|
153
|
+
if (group.parentId) {
|
|
154
|
+
const entry = map.get(group.id);
|
|
155
|
+
const parentEntry = map.get(group.parentId);
|
|
156
|
+
if (entry && parentEntry) {
|
|
157
|
+
entry.parent = parentEntry.group;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return map;
|
|
162
|
+
}, [groups]);
|
|
163
|
+
// Get line items for the active wallet with group information
|
|
164
|
+
// Line items are now already aggregated by category
|
|
165
|
+
const walletLineItems = useMemo(() => {
|
|
166
|
+
if (!wallets[activeWalletIndex])
|
|
167
|
+
return [];
|
|
168
|
+
const wallet = wallets[activeWalletIndex];
|
|
169
|
+
const lineItems = wallet.lineItems || [];
|
|
170
|
+
return lineItems
|
|
171
|
+
.filter((item) => item !== null && item !== undefined)
|
|
172
|
+
.map((item) => {
|
|
173
|
+
const groupInfo = item.group ? groupsMap.get(item.group) : undefined;
|
|
174
|
+
return {
|
|
175
|
+
...item,
|
|
176
|
+
groupLabel: groupInfo?.group.label || item.label || undefined,
|
|
177
|
+
parentGroupId: groupInfo?.parent?.id || null,
|
|
178
|
+
parentGroupLabel: groupInfo?.parent?.label || undefined,
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
}, [wallets, activeWalletIndex, groupsMap]);
|
|
182
|
+
// Group line items by parent category
|
|
183
|
+
// Line items are already aggregated by category, so we just need to group them by parent
|
|
184
|
+
const groupedAndAggregatedItems = useMemo(() => {
|
|
185
|
+
const grouped = new Map();
|
|
186
|
+
walletLineItems.forEach((item) => {
|
|
187
|
+
if (!item)
|
|
188
|
+
return;
|
|
189
|
+
const parentKey = item.parentGroupId || "uncategorized";
|
|
190
|
+
const items = grouped.get(parentKey) || [];
|
|
191
|
+
items.push({
|
|
192
|
+
lineItemId: item.id || "",
|
|
193
|
+
groupId: item.group || "uncategorized",
|
|
194
|
+
groupLabel: item.groupLabel || "Uncategorised",
|
|
195
|
+
parentGroupId: item.parentGroupId,
|
|
196
|
+
parentGroupLabel: item.parentGroupLabel,
|
|
197
|
+
budget: item.budget || 0,
|
|
198
|
+
forecast: item.forecast || 0,
|
|
199
|
+
actuals: item.actuals || 0,
|
|
200
|
+
payments: item.payments || 0,
|
|
201
|
+
comment: item.comments || "",
|
|
202
|
+
});
|
|
203
|
+
grouped.set(parentKey, items);
|
|
204
|
+
});
|
|
205
|
+
return grouped;
|
|
206
|
+
}, [walletLineItems]);
|
|
207
|
+
// Calculate subtotals for each parent group
|
|
208
|
+
const calculateSubtotal = (items) => {
|
|
209
|
+
return items.reduce((acc, item) => ({
|
|
210
|
+
budget: acc.budget + item.budget,
|
|
211
|
+
forecast: acc.forecast + item.forecast,
|
|
212
|
+
actuals: acc.actuals + item.actuals,
|
|
213
|
+
difference: acc.difference + (item.forecast - item.actuals),
|
|
214
|
+
payments: acc.payments + item.payments,
|
|
215
|
+
}), { budget: 0, forecast: 0, actuals: 0, difference: 0, payments: 0 });
|
|
216
|
+
};
|
|
217
|
+
// Calculate grand totals
|
|
218
|
+
const grandTotals = useMemo(() => {
|
|
219
|
+
return walletLineItems.reduce((acc, item) => ({
|
|
220
|
+
budget: acc.budget + (item?.budget || 0),
|
|
221
|
+
forecast: acc.forecast + (item?.forecast || 0),
|
|
222
|
+
actuals: acc.actuals + (item?.actuals || 0),
|
|
223
|
+
difference: acc.difference + ((item?.forecast || 0) - (item?.actuals || 0)),
|
|
224
|
+
payments: acc.payments + (item?.payments || 0),
|
|
225
|
+
}), { budget: 0, forecast: 0, actuals: 0, difference: 0, payments: 0 });
|
|
226
|
+
}, [walletLineItems]);
|
|
227
|
+
const formatNumber = (value) => {
|
|
228
|
+
return new Intl.NumberFormat("en-US", {
|
|
229
|
+
minimumFractionDigits: 2,
|
|
230
|
+
maximumFractionDigits: 2,
|
|
231
|
+
}).format(value);
|
|
232
|
+
};
|
|
233
|
+
const formatWalletAddress = (address) => {
|
|
234
|
+
if (!address || address.length < 13)
|
|
235
|
+
return address;
|
|
236
|
+
return `${address.substring(0, 6)}...${address.substring(address.length - 6)}`;
|
|
237
|
+
};
|
|
238
|
+
// Handle starting comment edit
|
|
239
|
+
const handleStartEdit = (lineItemId, currentComment) => {
|
|
240
|
+
setEditingGroupId(lineItemId);
|
|
241
|
+
setEditingComment(currentComment);
|
|
242
|
+
setOriginalComment(currentComment);
|
|
243
|
+
};
|
|
244
|
+
// Handle saving comment for a single line item
|
|
245
|
+
const handleSaveComment = () => {
|
|
246
|
+
const wallet = wallets[activeWalletIndex];
|
|
247
|
+
if (!wallet || !wallet.wallet || !editingGroupId)
|
|
248
|
+
return;
|
|
249
|
+
// Only dispatch if the comment has actually changed
|
|
250
|
+
if (editingComment !== originalComment) {
|
|
251
|
+
dispatch(actions.updateLineItem({
|
|
252
|
+
wallet: wallet.wallet,
|
|
253
|
+
lineItemId: editingGroupId,
|
|
254
|
+
comments: editingComment,
|
|
255
|
+
}));
|
|
256
|
+
}
|
|
257
|
+
// Reset editing state
|
|
258
|
+
setEditingGroupId(null);
|
|
259
|
+
setEditingComment("");
|
|
260
|
+
setOriginalComment("");
|
|
261
|
+
};
|
|
262
|
+
// Handle canceling comment edit
|
|
263
|
+
const handleCancelEdit = () => {
|
|
264
|
+
setEditingGroupId(null);
|
|
265
|
+
setEditingComment("");
|
|
266
|
+
setOriginalComment("");
|
|
267
|
+
};
|
|
268
|
+
// Handle starting numeric field edit
|
|
269
|
+
const handleStartFieldEdit = (lineItemId, field, currentValue) => {
|
|
270
|
+
setEditingField({ lineItemId, field, originalValue: currentValue });
|
|
271
|
+
setEditingValue(currentValue.toString());
|
|
272
|
+
};
|
|
273
|
+
// Handle saving numeric field
|
|
274
|
+
const handleSaveField = () => {
|
|
275
|
+
const wallet = wallets[activeWalletIndex];
|
|
276
|
+
if (!wallet || !wallet.wallet || !editingField)
|
|
277
|
+
return;
|
|
278
|
+
const numericValue = parseFloat(editingValue);
|
|
279
|
+
if (isNaN(numericValue)) {
|
|
280
|
+
// Invalid number, cancel edit
|
|
281
|
+
handleCancelFieldEdit();
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
// Only dispatch if the value has actually changed
|
|
285
|
+
if (numericValue !== editingField.originalValue) {
|
|
286
|
+
dispatch(actions.updateLineItem({
|
|
287
|
+
wallet: wallet.wallet,
|
|
288
|
+
lineItemId: editingField.lineItemId,
|
|
289
|
+
[editingField.field]: numericValue,
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
292
|
+
// Reset editing state
|
|
293
|
+
setEditingField(null);
|
|
294
|
+
setEditingValue("");
|
|
295
|
+
};
|
|
296
|
+
// Handle canceling numeric field edit
|
|
297
|
+
const handleCancelFieldEdit = () => {
|
|
298
|
+
setEditingField(null);
|
|
299
|
+
setEditingValue("");
|
|
300
|
+
};
|
|
301
|
+
// Sort parent groups: Headcount first, then Non-Headcount, then others, then uncategorized
|
|
302
|
+
const sortedParentKeys = useMemo(() => {
|
|
303
|
+
const keys = Array.from(groupedAndAggregatedItems.keys());
|
|
304
|
+
// Find Headcount and Non-Headcount group IDs
|
|
305
|
+
const headcountGroup = groups.find((g) => g.label === "Headcount Expenses");
|
|
306
|
+
const nonHeadcountGroup = groups.find((g) => g.label === "Non-Headcount Expenses");
|
|
307
|
+
return keys.sort((a, b) => {
|
|
308
|
+
// Uncategorized always goes last
|
|
309
|
+
if (a === "uncategorized")
|
|
310
|
+
return 1;
|
|
311
|
+
if (b === "uncategorized")
|
|
312
|
+
return -1;
|
|
313
|
+
// Headcount Expenses always first
|
|
314
|
+
if (a === headcountGroup?.id)
|
|
315
|
+
return -1;
|
|
316
|
+
if (b === headcountGroup?.id)
|
|
317
|
+
return 1;
|
|
318
|
+
// Non-Headcount Expenses always second
|
|
319
|
+
if (a === nonHeadcountGroup?.id)
|
|
320
|
+
return -1;
|
|
321
|
+
if (b === nonHeadcountGroup?.id)
|
|
322
|
+
return 1;
|
|
323
|
+
// For other groups, maintain their original order
|
|
324
|
+
return 0;
|
|
325
|
+
});
|
|
326
|
+
}, [groupedAndAggregatedItems, groups]);
|
|
327
|
+
if (wallets.length === 0) {
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "border-b border-gray-200 dark:border-gray-700", children: _jsx("nav", { className: "-mb-px flex space-x-8", "aria-label": "Tabs", children: wallets.map((wallet, index) => {
|
|
331
|
+
const isActive = index === activeWalletIndex;
|
|
332
|
+
return (_jsx("button", { onClick: () => setActiveWalletIndex(index), className: `
|
|
333
|
+
whitespace-nowrap py-4 px-1 border-b-2 font-medium text-sm transition-colors
|
|
334
|
+
${isActive
|
|
335
|
+
? "border-green-500 text-green-600 dark:text-green-400"
|
|
336
|
+
: "border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-600"}
|
|
337
|
+
`, children: wallet.name || formatWalletAddress(wallet.wallet || "") }, wallet.wallet || index));
|
|
338
|
+
}) }) }), _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [_jsx("thead", { className: "bg-gray-50 dark:bg-gray-800", children: _jsxs("tr", { children: [_jsx("th", { className: "pl-6 pr-3 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { onClick: () => setIsAddingLineItem(true), className: "inline-flex items-center justify-center w-6 h-6 text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 bg-blue-50 dark:bg-blue-900/20 hover:bg-blue-100 dark:hover:bg-blue-900/30 rounded-md transition-colors", children: _jsx(Plus, { size: 14 }) }), _jsx("span", { children: "Expense Category" })] }) }), _jsx("th", { className: "px-3 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Mthly Budget" }), _jsx("th", { className: "px-3 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Forecast" }), _jsx("th", { className: "px-3 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Actuals" }), _jsx("th", { className: "px-3 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: "Difference" }), _jsx("th", { className: "px-3 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider w-96", children: "Comments" }), _jsx("th", { className: "px-3 py-3 text-right text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider w-32", children: "Payments" }), _jsx("th", { className: "px-2 py-3 text-center text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider w-16", children: "Actions" })] }) }), _jsxs("tbody", { className: "divide-y divide-gray-200 dark:divide-gray-700", children: [sortedParentKeys.map((parentKey) => {
|
|
339
|
+
const items = groupedAndAggregatedItems.get(parentKey) || [];
|
|
340
|
+
if (items.length === 0)
|
|
341
|
+
return null;
|
|
342
|
+
const subtotals = calculateSubtotal(items);
|
|
343
|
+
const parentLabel = parentKey === "uncategorized"
|
|
344
|
+
? "Uncategorised"
|
|
345
|
+
: items[0]?.parentGroupLabel || "Other";
|
|
346
|
+
return (_jsxs(React.Fragment, { children: [_jsx("tr", { className: "bg-gray-100 dark:bg-gray-800", children: _jsx("td", { colSpan: 8, className: "px-6 py-3 text-sm font-bold text-gray-900 dark:text-white", children: parentLabel }) }), items.map((item) => {
|
|
347
|
+
if (!item)
|
|
348
|
+
return null;
|
|
349
|
+
const difference = item.forecast - item.actuals;
|
|
350
|
+
const isEditingComment = editingGroupId === item.lineItemId;
|
|
351
|
+
// Helper function to render editable numeric cell
|
|
352
|
+
const renderEditableCell = (field, value) => {
|
|
353
|
+
const isEditingThis = editingField?.lineItemId === item.lineItemId &&
|
|
354
|
+
editingField?.field === field;
|
|
355
|
+
if (isEditingThis) {
|
|
356
|
+
return (_jsx("div", { className: "flex items-center gap-1", children: _jsx("input", { type: "number", step: "0.01", value: editingValue, onChange: (e) => setEditingValue(e.target.value), onKeyDown: (e) => {
|
|
357
|
+
if (e.key === "Enter") {
|
|
358
|
+
handleSaveField();
|
|
359
|
+
}
|
|
360
|
+
else if (e.key === "Escape") {
|
|
361
|
+
handleCancelFieldEdit();
|
|
362
|
+
}
|
|
363
|
+
}, onBlur: handleSaveField, autoFocus: true, className: "w-full px-2 py-1 text-right text-sm border border-blue-500 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 bg-white dark:bg-gray-800 text-gray-900 dark:text-white" }) }));
|
|
364
|
+
}
|
|
365
|
+
return (_jsx("div", { className: "group cursor-pointer text-right", onClick: () => handleStartFieldEdit(item.lineItemId, field, value), children: _jsx("span", { className: "group-hover:bg-blue-50 dark:group-hover:bg-blue-900/20 inline-block px-1 py-0.5 rounded transition-colors min-w-[4rem]", children: formatNumber(value) }) }));
|
|
366
|
+
};
|
|
367
|
+
return (_jsxs("tr", { className: "bg-white dark:bg-gray-900 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors align-top", children: [_jsx("td", { className: "pl-6 pr-3 py-3 whitespace-nowrap text-sm text-gray-900 dark:text-white", children: item.groupLabel }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: renderEditableCell("budget", item.budget) }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: renderEditableCell("forecast", item.forecast) }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: renderEditableCell("actuals", item.actuals) }), _jsx("td", { className: `px-3 py-3 whitespace-nowrap text-right text-sm font-medium ${difference < 0
|
|
368
|
+
? "text-red-600 dark:text-red-400"
|
|
369
|
+
: "text-gray-900 dark:text-white"}`, children: formatNumber(difference) }), _jsx("td", { className: "px-3 py-3 text-sm w-96", children: isEditingComment ? (_jsx(Textarea, { value: editingComment, onChange: (e) => setEditingComment(e.target.value), placeholder: "Add comment...", autoExpand: true, multiline: true, onKeyDown: (e) => {
|
|
370
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
371
|
+
e.preventDefault();
|
|
372
|
+
handleSaveComment();
|
|
373
|
+
}
|
|
374
|
+
else if (e.key === "Escape") {
|
|
375
|
+
handleCancelEdit();
|
|
376
|
+
}
|
|
377
|
+
else if (e.key === "Tab") {
|
|
378
|
+
e.preventDefault();
|
|
379
|
+
handleSaveComment();
|
|
380
|
+
}
|
|
381
|
+
}, onBlur: handleSaveComment, autoFocus: true, className: "w-full px-2 py-1 text-sm border border-blue-500 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 bg-white dark:bg-gray-800 text-gray-900 dark:text-white max-h-32 overflow-y-auto" })) : (_jsx("div", { className: "group cursor-pointer w-full max-h-20 overflow-hidden", onClick: () => handleStartEdit(item.lineItemId, item.comment), title: item.comment || "No comments", children: _jsx("span", { className: "group-hover:bg-blue-50 dark:group-hover:bg-blue-900/20 px-1 py-0.5 rounded transition-colors block text-gray-600 dark:text-gray-400 break-words", children: item.comment || "No comments" }) })) }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white w-32", children: renderEditableCell("payments", item.payments) }), _jsx("td", { className: "px-2 py-3 whitespace-nowrap text-center w-16", children: _jsx("button", { onClick: () => handleDeleteLineItem(item.lineItemId, item.groupLabel), className: "inline-flex items-center justify-center p-0.5 text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300 hover:bg-red-50 dark:hover:bg-red-900/20 rounded transition-colors", title: "Delete line item", children: _jsx(Trash2, { size: 14 }) }) })] }, item.lineItemId));
|
|
382
|
+
}), _jsxs("tr", { className: "bg-gray-50 dark:bg-gray-800/50 font-semibold align-top", children: [_jsx("td", { className: "pl-6 pr-3 py-3 whitespace-nowrap text-sm text-gray-900 dark:text-white", children: "Subtotal" }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(subtotals.budget) }) }) }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(subtotals.forecast) }) }) }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(subtotals.actuals) }) }) }), _jsx("td", { className: `px-3 py-3 whitespace-nowrap text-right text-sm font-bold ${subtotals.difference < 0
|
|
383
|
+
? "text-red-600 dark:text-red-400"
|
|
384
|
+
: "text-gray-900 dark:text-white"}`, children: formatNumber(subtotals.difference) }), _jsx("td", { className: "px-3 py-3" }), _jsx("td", { className: "px-3 py-3 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white w-32", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(subtotals.payments) }) }) }), _jsx("td", { className: "px-2 py-3" })] })] }, parentKey));
|
|
385
|
+
}), _jsxs("tr", { className: "bg-gray-100 dark:bg-gray-800 font-bold align-top", children: [_jsx("td", { className: "pl-6 pr-3 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-white", children: "Total" }), _jsx("td", { className: "px-3 py-4 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(grandTotals.budget) }) }) }), _jsx("td", { className: "px-3 py-4 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(grandTotals.forecast) }) }) }), _jsx("td", { className: "px-3 py-4 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(grandTotals.actuals) }) }) }), _jsx("td", { className: `px-3 py-4 whitespace-nowrap text-right text-sm ${grandTotals.difference < 0
|
|
386
|
+
? "text-red-600 dark:text-red-400"
|
|
387
|
+
: "text-gray-900 dark:text-white"}`, children: formatNumber(grandTotals.difference) }), _jsx("td", { className: "px-3 py-4" }), _jsx("td", { className: "px-3 py-4 whitespace-nowrap text-right text-sm text-gray-900 dark:text-white w-32", children: _jsx("div", { className: "text-right", children: _jsx("span", { className: "inline-block px-1 py-0.5 min-w-[4rem]", children: formatNumber(grandTotals.payments) }) }) }), _jsx("td", { className: "px-2 py-4" })] }), isAddingLineItem && (_jsx("tr", { ref: lineItemEditorRef, className: "bg-white dark:bg-gray-900 border-t border-gray-900 dark:border-gray-100", children: _jsx("td", { colSpan: 8, className: "px-6 py-4", children: _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-end gap-4", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: "block text-xs font-medium text-gray-700 dark:text-gray-300 mb-2", children: "Select Category" }), _jsx(Select, { name: "category", searchable: true, value: selectedGroupId, onChange: (value) => handleCategoryChange(value), options: groupOptions, placeholder: "Choose a category...", className: "w-full" })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { onClick: handleSaveLineItem, disabled: !selectedGroupId || !!duplicateCategoryError, className: "bg-green-600 hover:bg-green-700 text-white", children: "SAVE" }), _jsx(Button, { onClick: handleCancelLineItem, variant: "secondary", children: "CANCEL" })] })] }), duplicateCategoryError && (_jsx("div", { className: "flex items-start gap-2 p-3 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 rounded-md", children: _jsx("span", { className: "text-sm text-amber-800 dark:text-amber-200", children: duplicateCategoryError }) }))] }) }) }))] })] }) }), deleteModalOpen && lineItemToDelete && (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm", onClick: handleCancelDelete }), _jsxs("div", { className: "relative bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-md w-full mx-4 overflow-hidden", children: [_jsx("div", { className: "px-6 py-4 border-b border-gray-200 dark:border-gray-700", children: _jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white", children: "Delete Line Item" }) }), _jsx("div", { className: "px-6 py-4", children: _jsxs("p", { className: "text-sm text-gray-600 dark:text-gray-400", children: ["Are you sure you want to delete the line item", " ", _jsxs("span", { className: "font-semibold text-gray-900 dark:text-white", children: ["\"", lineItemToDelete.label, "\""] }), "? This action cannot be undone."] }) }), _jsxs("div", { className: "px-6 py-4 bg-gray-50 dark:bg-gray-800/50 border-t border-gray-200 dark:border-gray-700 flex justify-end gap-3", children: [_jsx(Button, { onClick: handleCancelDelete, variant: "secondary", children: "CANCEL" }), _jsx(Button, { onClick: handleConfirmDelete, className: "bg-red-600 hover:bg-red-700 text-white", children: "DELETE" })] })] })] }))] }));
|
|
388
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Wallet, LineItemGroup } from "../../../document-models/expense-report/gen/types.js";
|
|
2
|
+
interface ExpenseReportPDFProps {
|
|
3
|
+
periodStart?: string | null;
|
|
4
|
+
periodEnd?: string | null;
|
|
5
|
+
wallets: Wallet[];
|
|
6
|
+
groups: LineItemGroup[];
|
|
7
|
+
}
|
|
8
|
+
export declare function ExpenseReportPDF({ periodStart, periodEnd, wallets, groups, }: ExpenseReportPDFProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ExpenseReportPDF.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpenseReportPDF.d.ts","sourceRoot":"","sources":["../../../../editors/expense-report/components/ExpenseReportPDF.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EAEd,MAAM,sDAAsD,CAAC;AAE9D,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAmKD,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,GACP,EAAE,qBAAqB,2CAoVvB"}
|