@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,150 @@
|
|
|
1
|
+
import { useDocumentsInSelectedDrive } from "@powerhousedao/reactor-browser";
|
|
2
|
+
import { actions } from "../../../document-models/expense-report/index.js";
|
|
3
|
+
import { generateId } from "document-model";
|
|
4
|
+
export function useSyncWallet() {
|
|
5
|
+
const documents = useDocumentsInSelectedDrive();
|
|
6
|
+
const syncWallet = (walletAddress, existingLineItems, billingStatementIds, groups, allWallets, accountTransactionsDocumentId, periodStart, periodEnd, dispatch) => {
|
|
7
|
+
if (!documents)
|
|
8
|
+
return;
|
|
9
|
+
// Get billing statement documents
|
|
10
|
+
const billingStatements = new Map();
|
|
11
|
+
documents
|
|
12
|
+
.filter((doc) => doc.header.documentType === "powerhouse/billing-statement")
|
|
13
|
+
.forEach((doc) => {
|
|
14
|
+
billingStatements.set(doc.header.id, doc);
|
|
15
|
+
});
|
|
16
|
+
// Helper function to map tag to group
|
|
17
|
+
const mapTagToGroup = (billingLineItem) => {
|
|
18
|
+
// Find expense-account tag
|
|
19
|
+
const expenseAccountTag = billingLineItem.lineItemTag?.find((tag) => tag.dimension === "expense-account");
|
|
20
|
+
if (!expenseAccountTag || !expenseAccountTag.label)
|
|
21
|
+
return null;
|
|
22
|
+
// Find matching group by label
|
|
23
|
+
const group = groups.find((g) => g.label === expenseAccountTag.label);
|
|
24
|
+
return group ? group.id : null;
|
|
25
|
+
};
|
|
26
|
+
// Helper function to calculate payments from AccountTransactions document
|
|
27
|
+
const calculatePaymentsFromTransactions = (txDocumentId, start, end) => {
|
|
28
|
+
// Find AccountTransactions document
|
|
29
|
+
const txDoc = documents?.find((doc) => doc.header.id === txDocumentId &&
|
|
30
|
+
doc.header.documentType === "powerhouse/account-transactions");
|
|
31
|
+
if (!txDoc?.state?.global?.transactions) {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
const transactions = txDoc.state.global.transactions || [];
|
|
35
|
+
const startDate = new Date(start);
|
|
36
|
+
const endDate = new Date(end);
|
|
37
|
+
// USD stablecoin list
|
|
38
|
+
const USD_STABLECOINS = ["USDC", "USDT", "USDS", "DAI", "GUSD", "TUSD"];
|
|
39
|
+
// Create set of all wallet addresses for intergroup detection
|
|
40
|
+
const walletAddresses = new Set(allWallets.map((w) => w.wallet?.toLowerCase()).filter(Boolean));
|
|
41
|
+
// Calculate total payments from USD transactions
|
|
42
|
+
const totalPayments = transactions.reduce((sum, tx) => {
|
|
43
|
+
// Only count OUTFLOW transactions
|
|
44
|
+
if (tx.direction !== "OUTFLOW")
|
|
45
|
+
return sum;
|
|
46
|
+
// Check if transaction is within period
|
|
47
|
+
const txDate = new Date(tx.datetime);
|
|
48
|
+
if (txDate < startDate || txDate > endDate)
|
|
49
|
+
return sum;
|
|
50
|
+
// Extract currency unit from amount
|
|
51
|
+
const unit = tx.amount?.unit || tx.details?.token;
|
|
52
|
+
if (!USD_STABLECOINS.includes(unit))
|
|
53
|
+
return sum;
|
|
54
|
+
// Exclude intergroup transactions (transactions to other wallets in this report)
|
|
55
|
+
const counterParty = tx.counterParty?.toLowerCase();
|
|
56
|
+
if (counterParty && walletAddresses.has(counterParty))
|
|
57
|
+
return sum;
|
|
58
|
+
// Add the transaction amount (convert to number if it's a string)
|
|
59
|
+
const amount = parseFloat(tx.amount?.value || 0);
|
|
60
|
+
return sum + amount;
|
|
61
|
+
}, 0);
|
|
62
|
+
return totalPayments;
|
|
63
|
+
};
|
|
64
|
+
// Aggregate line items by category
|
|
65
|
+
const categoryAggregation = new Map();
|
|
66
|
+
// Extract and aggregate line items from all billing statements
|
|
67
|
+
billingStatementIds.forEach((statementId) => {
|
|
68
|
+
const statement = billingStatements.get(statementId);
|
|
69
|
+
if (!statement?.state?.global?.lineItems)
|
|
70
|
+
return;
|
|
71
|
+
const lineItems = statement.state.global.lineItems || [];
|
|
72
|
+
lineItems.forEach((billingLineItem) => {
|
|
73
|
+
const groupId = mapTagToGroup(billingLineItem);
|
|
74
|
+
const categoryKey = groupId || "uncategorized";
|
|
75
|
+
const existing = categoryAggregation.get(categoryKey);
|
|
76
|
+
if (existing) {
|
|
77
|
+
// Aggregate values for the same category
|
|
78
|
+
existing.actuals += billingLineItem.totalPriceCash || 0;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Create new category entry
|
|
82
|
+
const group = groups.find((g) => g.id === groupId);
|
|
83
|
+
categoryAggregation.set(categoryKey, {
|
|
84
|
+
groupId: groupId,
|
|
85
|
+
groupLabel: group?.label || "Uncategorized",
|
|
86
|
+
budget: 0,
|
|
87
|
+
actuals: billingLineItem.totalPriceCash || 0,
|
|
88
|
+
forecast: 0,
|
|
89
|
+
payments: 0,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
// Calculate payments from transactions for "Uncategorized" items
|
|
95
|
+
if (accountTransactionsDocumentId && periodStart && periodEnd) {
|
|
96
|
+
const transactionPayments = calculatePaymentsFromTransactions(accountTransactionsDocumentId, periodStart, periodEnd);
|
|
97
|
+
if (transactionPayments > 0) {
|
|
98
|
+
// Add payments to "uncategorized" category
|
|
99
|
+
const uncategorized = categoryAggregation.get("uncategorized");
|
|
100
|
+
if (uncategorized) {
|
|
101
|
+
// Update existing uncategorized category with payments
|
|
102
|
+
uncategorized.payments = transactionPayments;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Create new uncategorized category entry with payments
|
|
106
|
+
categoryAggregation.set("uncategorized", {
|
|
107
|
+
groupId: null,
|
|
108
|
+
groupLabel: "Uncategorized",
|
|
109
|
+
budget: 0,
|
|
110
|
+
actuals: 0,
|
|
111
|
+
forecast: 0,
|
|
112
|
+
payments: transactionPayments,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Now add or update line items in wallet
|
|
118
|
+
categoryAggregation.forEach((aggregatedItem) => {
|
|
119
|
+
// Check if this line item already exists for this wallet
|
|
120
|
+
const existingLineItem = existingLineItems.find((item) => item.group === aggregatedItem.groupId);
|
|
121
|
+
if (existingLineItem && existingLineItem.id) {
|
|
122
|
+
// Update existing line item
|
|
123
|
+
dispatch(actions.updateLineItem({
|
|
124
|
+
wallet: walletAddress,
|
|
125
|
+
lineItemId: existingLineItem.id,
|
|
126
|
+
actuals: aggregatedItem.actuals,
|
|
127
|
+
payments: aggregatedItem.payments,
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Add new line item
|
|
132
|
+
const expenseLineItem = {
|
|
133
|
+
id: generateId(),
|
|
134
|
+
label: aggregatedItem.groupLabel,
|
|
135
|
+
group: aggregatedItem.groupId,
|
|
136
|
+
budget: aggregatedItem.budget,
|
|
137
|
+
actuals: aggregatedItem.actuals,
|
|
138
|
+
forecast: aggregatedItem.forecast,
|
|
139
|
+
payments: aggregatedItem.payments,
|
|
140
|
+
comments: null,
|
|
141
|
+
};
|
|
142
|
+
dispatch(actions.addLineItem({
|
|
143
|
+
wallet: walletAddress,
|
|
144
|
+
lineItem: expenseLineItem,
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
return { syncWallet };
|
|
150
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Wallet } from "../../../document-models/expense-report/gen/types.js";
|
|
2
|
+
interface SyncStatus {
|
|
3
|
+
needsSync: boolean;
|
|
4
|
+
outdatedWallets: string[];
|
|
5
|
+
tagChangedWallets: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function useWalletSync(wallets: Wallet[]): SyncStatus;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=useWalletSync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWalletSync.d.ts","sourceRoot":"","sources":["../../../../editors/expense-report/hooks/useWalletSync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sDAAsD,CAAC;AAEnF,UAAU,UAAU;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CA2G3D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { useDocumentsInSelectedDrive } from "@powerhousedao/reactor-browser";
|
|
3
|
+
export function useWalletSync(wallets) {
|
|
4
|
+
const documents = useDocumentsInSelectedDrive();
|
|
5
|
+
const syncStatus = useMemo(() => {
|
|
6
|
+
if (!documents || wallets.length === 0) {
|
|
7
|
+
return { needsSync: false, outdatedWallets: [], tagChangedWallets: [] };
|
|
8
|
+
}
|
|
9
|
+
// Create a map of billing statement documents
|
|
10
|
+
const billingStatements = new Map();
|
|
11
|
+
documents
|
|
12
|
+
.filter((doc) => doc.header.documentType === "powerhouse/billing-statement")
|
|
13
|
+
.forEach((doc) => {
|
|
14
|
+
billingStatements.set(doc.header.id, doc);
|
|
15
|
+
});
|
|
16
|
+
const outdatedWallets = [];
|
|
17
|
+
const tagChangedWallets = [];
|
|
18
|
+
// Check each wallet
|
|
19
|
+
wallets.forEach((wallet) => {
|
|
20
|
+
if (!wallet.billingStatements || wallet.billingStatements.length === 0) {
|
|
21
|
+
return; // No billing statements to sync
|
|
22
|
+
}
|
|
23
|
+
// Get current aggregated totals by category from wallet line items
|
|
24
|
+
const currentCategoryTotals = new Map();
|
|
25
|
+
wallet.lineItems?.forEach((item) => {
|
|
26
|
+
if (item?.group) {
|
|
27
|
+
const currentTotal = currentCategoryTotals.get(item.group) || 0;
|
|
28
|
+
currentCategoryTotals.set(item.group, currentTotal + (item.actuals || 0));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
// Calculate expected aggregated totals by category from billing statements
|
|
32
|
+
const expectedCategoryTotals = new Map();
|
|
33
|
+
const expectedCategoryLabels = new Set();
|
|
34
|
+
wallet.billingStatements.forEach((statementId) => {
|
|
35
|
+
if (!statementId)
|
|
36
|
+
return;
|
|
37
|
+
const statement = billingStatements.get(statementId);
|
|
38
|
+
if (statement?.state?.global?.lineItems) {
|
|
39
|
+
statement.state.global.lineItems.forEach((item) => {
|
|
40
|
+
// Find expense-account tag
|
|
41
|
+
const expenseAccountTag = item.lineItemTag?.find((tag) => tag.dimension === "expense-account");
|
|
42
|
+
if (expenseAccountTag?.label) {
|
|
43
|
+
expectedCategoryLabels.add(expenseAccountTag.label);
|
|
44
|
+
const currentTotal = expectedCategoryTotals.get(expenseAccountTag.label) || 0;
|
|
45
|
+
expectedCategoryTotals.set(expenseAccountTag.label, currentTotal + (item.totalPriceCash || 0));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// Check if categories have changed
|
|
51
|
+
const currentCategories = new Set(currentCategoryTotals.keys());
|
|
52
|
+
const hasTagChanges = currentCategories.size !== expectedCategoryLabels.size;
|
|
53
|
+
// Check if totals per category have changed
|
|
54
|
+
let hasTotalMismatch = false;
|
|
55
|
+
// We need to check if the aggregated totals match
|
|
56
|
+
// Since wallet stores group IDs but billing statements have labels,
|
|
57
|
+
// we need to sum up all line items regardless of category structure
|
|
58
|
+
const currentTotalActuals = Array.from(currentCategoryTotals.values()).reduce((sum, total) => sum + total, 0);
|
|
59
|
+
const expectedTotalActuals = Array.from(expectedCategoryTotals.values()).reduce((sum, total) => sum + total, 0);
|
|
60
|
+
hasTotalMismatch =
|
|
61
|
+
Math.abs(currentTotalActuals - expectedTotalActuals) > 0.01;
|
|
62
|
+
if (hasTagChanges || hasTotalMismatch) {
|
|
63
|
+
if (wallet.wallet) {
|
|
64
|
+
outdatedWallets.push(wallet.wallet);
|
|
65
|
+
if (hasTagChanges) {
|
|
66
|
+
tagChangedWallets.push(wallet.wallet);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
needsSync: outdatedWallets.length > 0,
|
|
73
|
+
outdatedWallets,
|
|
74
|
+
tagChangedWallets,
|
|
75
|
+
};
|
|
76
|
+
}, [documents, wallets]);
|
|
77
|
+
return syncStatus;
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../editors/expense-report/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,eAAO,MAAM,aAAa,EAAE,YAO3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../editors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface AddCategoryModalProps {
|
|
2
|
+
onClose: () => void;
|
|
3
|
+
isDarkMode: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function AddCategoryModal({ onClose, isDarkMode, }: AddCategoryModalProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=AddCategoryModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddCategoryModal.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/AddCategoryModal.tsx"],"names":[],"mappings":"AAKA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,GACX,EAAE,qBAAqB,2CA4HvB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { generateId } from "document-model/core";
|
|
4
|
+
import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
5
|
+
import { addCategory } from "../../../document-models/service-subscriptions/gen/creators.js";
|
|
6
|
+
export function AddCategoryModal({ onClose, isDarkMode, }) {
|
|
7
|
+
const [, dispatch] = useSelectedServiceSubscriptionsDocument();
|
|
8
|
+
const [formData, setFormData] = useState({
|
|
9
|
+
name: "",
|
|
10
|
+
description: "",
|
|
11
|
+
});
|
|
12
|
+
const handleSubmit = (e) => {
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
if (!formData.name) {
|
|
15
|
+
alert("Name is required");
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
dispatch?.(addCategory({
|
|
19
|
+
id: generateId(),
|
|
20
|
+
name: formData.name,
|
|
21
|
+
description: formData.description || undefined,
|
|
22
|
+
}));
|
|
23
|
+
onClose();
|
|
24
|
+
};
|
|
25
|
+
const updateField = (field, value) => {
|
|
26
|
+
setFormData((prev) => ({ ...prev, [field]: value }));
|
|
27
|
+
};
|
|
28
|
+
const inputClass = `w-full px-3 py-2.5 text-sm rounded-lg border transition-colors focus:outline-none focus:border-indigo-500 ${isDarkMode
|
|
29
|
+
? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500"
|
|
30
|
+
: "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400"}`;
|
|
31
|
+
const labelClass = `block text-sm font-medium mb-1.5 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
|
|
32
|
+
return (_jsx("div", { className: `fixed inset-0 flex items-center justify-center z-50 ${isDarkMode ? "bg-black/70" : "bg-black/40"}`, onClick: onClose, children: _jsxs("div", { className: `w-full max-w-md rounded-xl border ${isDarkMode
|
|
33
|
+
? "bg-gray-800 border-gray-700"
|
|
34
|
+
: "bg-white border-gray-200 shadow-xl"}`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: `flex justify-between items-center px-6 py-5 border-b ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("h2", { className: `text-lg font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "Add Category" }), _jsx("button", { className: `w-8 h-8 flex items-center justify-center rounded-md transition-colors ${isDarkMode
|
|
35
|
+
? "text-gray-400 hover:text-gray-100 hover:bg-gray-700"
|
|
36
|
+
: "text-gray-500 hover:text-gray-900 hover:bg-gray-100"}`, onClick: onClose, children: "\u2715" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Name *" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., Development Tools, Cloud Infrastructure", value: formData.name, onChange: (e) => updateField("name", e.target.value), autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Description" }), _jsx("textarea", { className: `${inputClass} resize-y`, placeholder: "Optional description...", value: formData.description, onChange: (e) => updateField("description", e.target.value), rows: 3 })] })] }), _jsxs("div", { className: `flex justify-end gap-3 px-6 py-4 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("button", { type: "button", className: `px-4 py-2 text-sm font-medium rounded-lg border transition-colors ${isDarkMode
|
|
37
|
+
? "bg-gray-700 border-gray-600 text-gray-100 hover:bg-gray-600"
|
|
38
|
+
: "bg-white border-gray-200 text-gray-900 hover:bg-gray-50"}`, onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "px-4 py-2 text-sm font-medium bg-indigo-500 text-white rounded-lg hover:bg-indigo-600 transition-colors", children: "Add Category" })] })] })] }) }));
|
|
39
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Vendor, Category } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
2
|
+
interface AddSubscriptionModalProps {
|
|
3
|
+
vendors: Vendor[];
|
|
4
|
+
categories: Category[];
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
isDarkMode: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function AddSubscriptionModal({ vendors, categories, onClose, isDarkMode, }: AddSubscriptionModalProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=AddSubscriptionModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddSubscriptionModal.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/AddSubscriptionModal.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EAGT,MAAM,yEAAyE,CAAC;AAEjF,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,UAAU,EACV,OAAO,EACP,UAAU,GACX,EAAE,yBAAyB,2CAiS3B"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { generateId } from "document-model/core";
|
|
4
|
+
import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
5
|
+
import { addSubscription } from "../../../document-models/service-subscriptions/gen/creators.js";
|
|
6
|
+
export function AddSubscriptionModal({ vendors, categories, onClose, isDarkMode, }) {
|
|
7
|
+
const [, dispatch] = useSelectedServiceSubscriptionsDocument();
|
|
8
|
+
const [formData, setFormData] = useState({
|
|
9
|
+
name: "",
|
|
10
|
+
vendorId: vendors[0]?.id ?? "",
|
|
11
|
+
categoryId: "",
|
|
12
|
+
billingCycle: "MONTHLY",
|
|
13
|
+
amount: "",
|
|
14
|
+
currency: "USD",
|
|
15
|
+
status: "ACTIVE",
|
|
16
|
+
planName: "",
|
|
17
|
+
totalSeats: "",
|
|
18
|
+
accountEmail: "",
|
|
19
|
+
accountOwner: "",
|
|
20
|
+
loginUrl: "",
|
|
21
|
+
notes: "",
|
|
22
|
+
});
|
|
23
|
+
const handleSubmit = (e) => {
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
if (!formData.name || !formData.vendorId) {
|
|
26
|
+
alert("Name and vendor are required");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
dispatch?.(addSubscription({
|
|
30
|
+
id: generateId(),
|
|
31
|
+
name: formData.name,
|
|
32
|
+
vendorId: formData.vendorId,
|
|
33
|
+
categoryId: formData.categoryId || undefined,
|
|
34
|
+
billingCycle: formData.billingCycle,
|
|
35
|
+
amount: formData.amount ? parseFloat(formData.amount) : undefined,
|
|
36
|
+
currency: formData.currency || undefined,
|
|
37
|
+
status: formData.status,
|
|
38
|
+
planName: formData.planName || undefined,
|
|
39
|
+
seats: formData.totalSeats
|
|
40
|
+
? { total: parseInt(formData.totalSeats), assignedMembers: [] }
|
|
41
|
+
: undefined,
|
|
42
|
+
accountEmail: formData.accountEmail || undefined,
|
|
43
|
+
accountOwner: formData.accountOwner || undefined,
|
|
44
|
+
loginUrl: formData.loginUrl || undefined,
|
|
45
|
+
notes: formData.notes || undefined,
|
|
46
|
+
tags: [],
|
|
47
|
+
}));
|
|
48
|
+
onClose();
|
|
49
|
+
};
|
|
50
|
+
const updateField = (field, value) => {
|
|
51
|
+
setFormData((prev) => ({ ...prev, [field]: value }));
|
|
52
|
+
};
|
|
53
|
+
const inputClass = `w-full px-3 py-2.5 text-sm rounded-lg border transition-colors focus:outline-none focus:border-indigo-500 ${isDarkMode
|
|
54
|
+
? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500"
|
|
55
|
+
: "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400"}`;
|
|
56
|
+
const labelClass = `block text-sm font-medium mb-1.5 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
|
|
57
|
+
return (_jsx("div", { className: `fixed inset-0 flex items-center justify-center z-50 ${isDarkMode ? "bg-black/70" : "bg-black/40"}`, onClick: onClose, children: _jsxs("div", { className: `w-full max-w-lg max-h-[90vh] overflow-y-auto rounded-xl border ${isDarkMode
|
|
58
|
+
? "bg-gray-800 border-gray-700"
|
|
59
|
+
: "bg-white border-gray-200 shadow-xl"}`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: `flex justify-between items-center px-6 py-5 border-b ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("h2", { className: `text-lg font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "Add Subscription" }), _jsx("button", { className: `w-8 h-8 flex items-center justify-center rounded-md transition-colors ${isDarkMode
|
|
60
|
+
? "text-gray-400 hover:text-gray-100 hover:bg-gray-700"
|
|
61
|
+
: "text-gray-500 hover:text-gray-900 hover:bg-gray-100"}`, onClick: onClose, children: "\u2715" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Name *" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., GitHub Enterprise", value: formData.name, onChange: (e) => updateField("name", e.target.value), autoFocus: true })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Vendor *" }), _jsxs("select", { className: inputClass, value: formData.vendorId, onChange: (e) => updateField("vendorId", e.target.value), children: [vendors.length === 0 && (_jsx("option", { value: "", children: "No vendors available" })), vendors.map((v) => (_jsx("option", { value: v.id, children: v.name }, v.id)))] })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Category" }), _jsxs("select", { className: inputClass, value: formData.categoryId, onChange: (e) => updateField("categoryId", e.target.value), children: [_jsx("option", { value: "", children: "None" }), categories.map((c) => (_jsx("option", { value: c.id, children: c.name }, c.id)))] })] })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Status" }), _jsxs("select", { className: inputClass, value: formData.status, onChange: (e) => updateField("status", e.target.value), children: [_jsx("option", { value: "ACTIVE", children: "Active" }), _jsx("option", { value: "TRIAL", children: "Trial" }), _jsx("option", { value: "PENDING", children: "Pending" }), _jsx("option", { value: "PAUSED", children: "Paused" }), _jsx("option", { value: "CANCELLED", children: "Cancelled" }), _jsx("option", { value: "EXPIRED", children: "Expired" })] })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Plan Name" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., Pro, Enterprise", value: formData.planName, onChange: (e) => updateField("planName", e.target.value) })] })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Amount" }), _jsx("input", { type: "number", className: inputClass, placeholder: "0.00", value: formData.amount, onChange: (e) => updateField("amount", e.target.value) })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Billing Cycle" }), _jsxs("select", { className: inputClass, value: formData.billingCycle, onChange: (e) => updateField("billingCycle", e.target.value), children: [_jsx("option", { value: "MONTHLY", children: "Monthly" }), _jsx("option", { value: "QUARTERLY", children: "Quarterly" }), _jsx("option", { value: "ANNUAL", children: "Annual" }), _jsx("option", { value: "BIENNIAL", children: "Biennial" }), _jsx("option", { value: "ONE_TIME", children: "One-time" }), _jsx("option", { value: "USAGE_BASED", children: "Usage-based" })] })] })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Total Seats" }), _jsx("input", { type: "number", className: inputClass, placeholder: "Leave empty if not applicable", value: formData.totalSeats, onChange: (e) => updateField("totalSeats", e.target.value) })] }), _jsxs("div", { className: "flex gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Account Owner" }), _jsx("input", { type: "text", className: inputClass, placeholder: "Name", value: formData.accountOwner, onChange: (e) => updateField("accountOwner", e.target.value) })] }), _jsxs("div", { className: "flex-1", children: [_jsx("label", { className: labelClass, children: "Account Email" }), _jsx("input", { type: "email", className: inputClass, placeholder: "email@company.com", value: formData.accountEmail, onChange: (e) => updateField("accountEmail", e.target.value) })] })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Login URL" }), _jsx("input", { type: "url", className: inputClass, placeholder: "https://...", value: formData.loginUrl, onChange: (e) => updateField("loginUrl", e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Notes" }), _jsx("textarea", { className: `${inputClass} resize-y`, placeholder: "Additional notes...", value: formData.notes, onChange: (e) => updateField("notes", e.target.value), rows: 3 })] })] }), _jsxs("div", { className: `flex justify-end gap-3 px-6 py-4 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("button", { type: "button", className: `px-4 py-2 text-sm font-medium rounded-lg border transition-colors ${isDarkMode
|
|
62
|
+
? "bg-gray-700 border-gray-600 text-gray-100 hover:bg-gray-600"
|
|
63
|
+
: "bg-white border-gray-200 text-gray-900 hover:bg-gray-50"}`, onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "px-4 py-2 text-sm font-medium bg-indigo-500 text-white rounded-lg hover:bg-indigo-600 transition-colors", children: "Add Subscription" })] })] })] }) }));
|
|
64
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface AddVendorModalProps {
|
|
2
|
+
onClose: () => void;
|
|
3
|
+
isDarkMode: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function AddVendorModal({ onClose, isDarkMode }: AddVendorModalProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=AddVendorModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddVendorModal.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/AddVendorModal.tsx"],"names":[],"mappings":"AAKA,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,mBAAmB,2CAsJ1E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { generateId } from "document-model/core";
|
|
4
|
+
import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
5
|
+
import { addVendor } from "../../../document-models/service-subscriptions/gen/creators.js";
|
|
6
|
+
export function AddVendorModal({ onClose, isDarkMode }) {
|
|
7
|
+
const [, dispatch] = useSelectedServiceSubscriptionsDocument();
|
|
8
|
+
const [formData, setFormData] = useState({
|
|
9
|
+
name: "",
|
|
10
|
+
website: "",
|
|
11
|
+
supportEmail: "",
|
|
12
|
+
supportUrl: "",
|
|
13
|
+
});
|
|
14
|
+
const handleSubmit = (e) => {
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
if (!formData.name) {
|
|
17
|
+
alert("Name is required");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
dispatch?.(addVendor({
|
|
21
|
+
id: generateId(),
|
|
22
|
+
name: formData.name,
|
|
23
|
+
website: formData.website || undefined,
|
|
24
|
+
supportEmail: formData.supportEmail || undefined,
|
|
25
|
+
supportUrl: formData.supportUrl || undefined,
|
|
26
|
+
}));
|
|
27
|
+
onClose();
|
|
28
|
+
};
|
|
29
|
+
const updateField = (field, value) => {
|
|
30
|
+
setFormData((prev) => ({ ...prev, [field]: value }));
|
|
31
|
+
};
|
|
32
|
+
const inputClass = `w-full px-3 py-2.5 text-sm rounded-lg border transition-colors focus:outline-none focus:border-indigo-500 ${isDarkMode
|
|
33
|
+
? "bg-gray-900 border-gray-700 text-gray-100 placeholder-gray-500"
|
|
34
|
+
: "bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400"}`;
|
|
35
|
+
const labelClass = `block text-sm font-medium mb-1.5 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
|
|
36
|
+
return (_jsx("div", { className: `fixed inset-0 flex items-center justify-center z-50 ${isDarkMode ? "bg-black/70" : "bg-black/40"}`, onClick: onClose, children: _jsxs("div", { className: `w-full max-w-md rounded-xl border ${isDarkMode
|
|
37
|
+
? "bg-gray-800 border-gray-700"
|
|
38
|
+
: "bg-white border-gray-200 shadow-xl"}`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: `flex justify-between items-center px-6 py-5 border-b ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("h2", { className: `text-lg font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "Add Vendor" }), _jsx("button", { className: `w-8 h-8 flex items-center justify-center rounded-md transition-colors ${isDarkMode
|
|
39
|
+
? "text-gray-400 hover:text-gray-100 hover:bg-gray-700"
|
|
40
|
+
: "text-gray-500 hover:text-gray-900 hover:bg-gray-100"}`, onClick: onClose, children: "\u2715" })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "p-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Name *" }), _jsx("input", { type: "text", className: inputClass, placeholder: "e.g., Google, Microsoft, Anthropic", value: formData.name, onChange: (e) => updateField("name", e.target.value), autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Website" }), _jsx("input", { type: "url", className: inputClass, placeholder: "https://...", value: formData.website, onChange: (e) => updateField("website", e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Support Email" }), _jsx("input", { type: "email", className: inputClass, placeholder: "support@vendor.com", value: formData.supportEmail, onChange: (e) => updateField("supportEmail", e.target.value) })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, children: "Support URL" }), _jsx("input", { type: "url", className: inputClass, placeholder: "https://support.vendor.com", value: formData.supportUrl, onChange: (e) => updateField("supportUrl", e.target.value) })] })] }), _jsxs("div", { className: `flex justify-end gap-3 px-6 py-4 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: [_jsx("button", { type: "button", className: `px-4 py-2 text-sm font-medium rounded-lg border transition-colors ${isDarkMode
|
|
41
|
+
? "bg-gray-700 border-gray-600 text-gray-100 hover:bg-gray-600"
|
|
42
|
+
: "bg-white border-gray-200 text-gray-900 hover:bg-gray-50"}`, onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "px-4 py-2 text-sm font-medium bg-indigo-500 text-white rounded-lg hover:bg-indigo-600 transition-colors", children: "Add Vendor" })] })] })] }) }));
|
|
43
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Category } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
2
|
+
interface CategoriesListProps {
|
|
3
|
+
categories: Category[];
|
|
4
|
+
isDarkMode: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function CategoriesList({ categories, isDarkMode, }: CategoriesListProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=CategoriesList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CategoriesList.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/CategoriesList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yEAAyE,CAAC;AAExG,UAAU,mBAAmB;IAC3B,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,UAAU,GACX,EAAE,mBAAmB,2CAwCrB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
3
|
+
import { deleteCategory } from "../../../document-models/service-subscriptions/gen/creators.js";
|
|
4
|
+
export function CategoriesList({ categories, isDarkMode, }) {
|
|
5
|
+
if (categories.length === 0) {
|
|
6
|
+
return (_jsxs("div", { className: `text-center py-16 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`, children: [_jsx("svg", { className: "w-12 h-12 mx-auto mb-4 opacity-50", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }), _jsx("div", { className: `text-base font-medium mb-2 ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: "No categories yet" }), _jsx("p", { children: "Add categories to organize your subscriptions." })] }));
|
|
7
|
+
}
|
|
8
|
+
return (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: categories.map((category) => (_jsx(CategoryCard, { category: category, isDarkMode: isDarkMode }, category.id))) }));
|
|
9
|
+
}
|
|
10
|
+
function CategoryCard({ category, isDarkMode }) {
|
|
11
|
+
const [, dispatch] = useSelectedServiceSubscriptionsDocument();
|
|
12
|
+
const handleDelete = () => {
|
|
13
|
+
if (confirm(`Delete category "${category.name}"?`)) {
|
|
14
|
+
dispatch?.(deleteCategory({ id: category.id }));
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const cardClass = `p-4 rounded-lg border transition-colors ${isDarkMode
|
|
18
|
+
? "bg-gray-800 border-gray-700 hover:border-indigo-500"
|
|
19
|
+
: "bg-white border-gray-200 hover:border-indigo-500 shadow-sm"}`;
|
|
20
|
+
return (_jsxs("div", { className: cardClass, children: [_jsx("div", { className: "mb-3", children: _jsx("h3", { className: `text-base font-semibold ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: category.name }) }), category.description && (_jsx("div", { className: "flex flex-col gap-2", children: _jsx("p", { className: `text-sm m-0 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`, children: category.description }) })), _jsx("div", { className: `flex gap-2 mt-3 pt-3 border-t ${isDarkMode ? "border-gray-700" : "border-gray-200"}`, children: _jsx("button", { className: `px-2.5 py-1.5 text-xs rounded-lg transition-colors ${isDarkMode
|
|
21
|
+
? "text-red-400 hover:bg-red-500/10"
|
|
22
|
+
: "text-red-600 hover:bg-red-500/10"}`, onClick: handleDelete, children: "Delete" }) })] }));
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditName.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/EditName.tsx"],"names":[],"mappings":"AAKA,4FAA4F;AAC5F,wBAAgB,4BAA4B,mDAyE3C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { setName } from "document-model";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { useSelectedServiceSubscriptionsDocument } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
5
|
+
/** Displays the name of the selected ServiceSubscriptions document and allows editing it */
|
|
6
|
+
export function EditServiceSubscriptionsName() {
|
|
7
|
+
const [serviceSubscriptionsDocument, dispatch] = useSelectedServiceSubscriptionsDocument();
|
|
8
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
9
|
+
if (!serviceSubscriptionsDocument)
|
|
10
|
+
return null;
|
|
11
|
+
const serviceSubscriptionsDocumentName = serviceSubscriptionsDocument.header.name;
|
|
12
|
+
const onClickEditServiceSubscriptionsName = () => {
|
|
13
|
+
setIsEditing(true);
|
|
14
|
+
};
|
|
15
|
+
const onClickCancelEditServiceSubscriptionsName = () => {
|
|
16
|
+
setIsEditing(false);
|
|
17
|
+
};
|
|
18
|
+
const onSubmitSetName = (event) => {
|
|
19
|
+
event.preventDefault();
|
|
20
|
+
const form = event.currentTarget;
|
|
21
|
+
const nameInput = form.elements.namedItem("name");
|
|
22
|
+
const name = nameInput.value;
|
|
23
|
+
if (!name)
|
|
24
|
+
return;
|
|
25
|
+
dispatch(setName(name));
|
|
26
|
+
setIsEditing(false);
|
|
27
|
+
};
|
|
28
|
+
if (isEditing)
|
|
29
|
+
return (_jsxs("form", { className: "flex gap-2 items-center justify-between", onSubmit: onSubmitSetName, children: [_jsx("input", { className: "text-lg font-semibold text-gray-900 p-1", type: "text", name: "name", defaultValue: serviceSubscriptionsDocumentName, autoFocus: true }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { type: "submit", className: "text-sm text-gray-600", children: "Save" }), _jsx("button", { className: "text-sm text-red-800", onClick: onClickCancelEditServiceSubscriptionsName, children: "Cancel" })] })] }));
|
|
30
|
+
return (_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900", children: serviceSubscriptionsDocumentName }), _jsx("button", { className: "text-sm text-gray-600", onClick: onClickEditServiceSubscriptionsName, children: "Edit Name" })] }));
|
|
31
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ServiceSubscription } from "@powerhousedao/builder-team-admin/document-models/service-subscriptions";
|
|
2
|
+
interface StatsOverviewProps {
|
|
3
|
+
subscriptions: ServiceSubscription[];
|
|
4
|
+
isDarkMode: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function StatsOverview({ subscriptions, isDarkMode, }: StatsOverviewProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=StatsOverview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatsOverview.d.ts","sourceRoot":"","sources":["../../../../editors/service-subscriptions-editor/components/StatsOverview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yEAAyE,CAAC;AAEnH,UAAU,kBAAkB;IAC1B,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,UAAU,GACX,EAAE,kBAAkB,2CA0EpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function StatsOverview({ subscriptions, isDarkMode, }) {
|
|
3
|
+
const activeCount = subscriptions.filter((s) => s.status === "ACTIVE").length;
|
|
4
|
+
const trialCount = subscriptions.filter((s) => s.status === "TRIAL").length;
|
|
5
|
+
const totalMonthly = subscriptions.reduce((sum, sub) => {
|
|
6
|
+
if (!sub.amount)
|
|
7
|
+
return sum;
|
|
8
|
+
const amount = sub.amount;
|
|
9
|
+
switch (sub.billingCycle) {
|
|
10
|
+
case "MONTHLY":
|
|
11
|
+
return sum + amount;
|
|
12
|
+
case "QUARTERLY":
|
|
13
|
+
return sum + amount / 3;
|
|
14
|
+
case "ANNUAL":
|
|
15
|
+
return sum + amount / 12;
|
|
16
|
+
case "BIENNIAL":
|
|
17
|
+
return sum + amount / 24;
|
|
18
|
+
default:
|
|
19
|
+
return sum;
|
|
20
|
+
}
|
|
21
|
+
}, 0);
|
|
22
|
+
const totalSeats = subscriptions.reduce((sum, sub) => sum + (sub.seats?.total ?? 0), 0);
|
|
23
|
+
const usedSeats = subscriptions.reduce((sum, sub) => sum + (sub.seats?.assignedMembers.length ?? 0), 0);
|
|
24
|
+
const cardClass = `p-4 rounded-lg border ${isDarkMode
|
|
25
|
+
? "bg-gray-800 border-gray-700"
|
|
26
|
+
: "bg-white border-gray-200 shadow-sm"}`;
|
|
27
|
+
const labelClass = `text-sm mb-2 ${isDarkMode ? "text-gray-400" : "text-gray-500"}`;
|
|
28
|
+
return (_jsxs("div", { className: "grid grid-cols-4 gap-4 mb-6", children: [_jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Active Subscriptions" }), _jsx("div", { className: "text-3xl font-semibold tracking-tight text-green-500", children: activeCount })] }), _jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Trial Subscriptions" }), _jsx("div", { className: "text-3xl font-semibold tracking-tight text-amber-500", children: trialCount })] }), _jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Monthly Cost (est.)" }), _jsxs("div", { className: `text-3xl font-semibold tracking-tight ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: ["$", totalMonthly.toLocaleString(undefined, {
|
|
29
|
+
minimumFractionDigits: 0,
|
|
30
|
+
maximumFractionDigits: 0,
|
|
31
|
+
})] })] }), _jsxs("div", { className: cardClass, children: [_jsx("div", { className: labelClass, children: "Seats Used" }), _jsxs("div", { className: `text-3xl font-semibold tracking-tight ${isDarkMode ? "text-gray-100" : "text-gray-900"}`, children: [usedSeats, "/", totalSeats] })] })] }));
|
|
32
|
+
}
|