@powerhousedao/vetra-builder-package 0.0.0
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/builder-account/gen/actions.d.ts +9 -0
- package/dist/document-models/builder-account/gen/actions.js +4 -0
- package/dist/document-models/builder-account/gen/creators.d.ts +4 -0
- package/dist/document-models/builder-account/gen/creators.js +4 -0
- package/dist/document-models/builder-account/gen/document-model.d.ts +2 -0
- package/dist/document-models/builder-account/gen/document-model.js +253 -0
- package/dist/document-models/builder-account/gen/index.d.ts +7 -0
- package/dist/document-models/builder-account/gen/index.js +6 -0
- package/dist/document-models/builder-account/gen/members/actions.d.ts +11 -0
- package/dist/document-models/builder-account/gen/members/actions.js +1 -0
- package/dist/document-models/builder-account/gen/members/creators.d.ts +4 -0
- package/dist/document-models/builder-account/gen/members/creators.js +4 -0
- package/dist/document-models/builder-account/gen/members/error.d.ts +1 -0
- package/dist/document-models/builder-account/gen/members/error.js +1 -0
- package/dist/document-models/builder-account/gen/members/object.d.ts +7 -0
- package/dist/document-models/builder-account/gen/members/object.js +10 -0
- package/dist/document-models/builder-account/gen/members/operations.d.ts +7 -0
- package/dist/document-models/builder-account/gen/members/operations.js +1 -0
- package/dist/document-models/builder-account/gen/object.d.ts +20 -0
- package/dist/document-models/builder-account/gen/object.js +36 -0
- package/dist/document-models/builder-account/gen/packages/actions.d.ts +23 -0
- package/dist/document-models/builder-account/gen/packages/actions.js +1 -0
- package/dist/document-models/builder-account/gen/packages/creators.d.ts +7 -0
- package/dist/document-models/builder-account/gen/packages/creators.js +7 -0
- package/dist/document-models/builder-account/gen/packages/error.d.ts +1 -0
- package/dist/document-models/builder-account/gen/packages/error.js +1 -0
- package/dist/document-models/builder-account/gen/packages/object.d.ts +10 -0
- package/dist/document-models/builder-account/gen/packages/object.js +19 -0
- package/dist/document-models/builder-account/gen/packages/operations.d.ts +10 -0
- package/dist/document-models/builder-account/gen/packages/operations.js +1 -0
- package/dist/document-models/builder-account/gen/ph-factories.d.ts +26 -0
- package/dist/document-models/builder-account/gen/ph-factories.js +62 -0
- package/dist/document-models/builder-account/gen/profile/actions.d.ts +23 -0
- package/dist/document-models/builder-account/gen/profile/actions.js +1 -0
- package/dist/document-models/builder-account/gen/profile/creators.d.ts +7 -0
- package/dist/document-models/builder-account/gen/profile/creators.js +7 -0
- package/dist/document-models/builder-account/gen/profile/error.d.ts +1 -0
- package/dist/document-models/builder-account/gen/profile/error.js +1 -0
- package/dist/document-models/builder-account/gen/profile/object.d.ts +10 -0
- package/dist/document-models/builder-account/gen/profile/object.js +19 -0
- package/dist/document-models/builder-account/gen/profile/operations.d.ts +10 -0
- package/dist/document-models/builder-account/gen/profile/operations.js +1 -0
- package/dist/document-models/builder-account/gen/reducer.d.ts +4 -0
- package/dist/document-models/builder-account/gen/reducer.js +87 -0
- package/dist/document-models/builder-account/gen/schema/index.d.ts +2 -0
- package/dist/document-models/builder-account/gen/schema/index.js +2 -0
- package/dist/document-models/builder-account/gen/schema/types.d.ts +269 -0
- package/dist/document-models/builder-account/gen/schema/types.js +1 -0
- package/dist/document-models/builder-account/gen/schema/zod.d.ts +34 -0
- package/dist/document-models/builder-account/gen/schema/zod.js +192 -0
- package/dist/document-models/builder-account/gen/spaces/actions.d.ts +23 -0
- package/dist/document-models/builder-account/gen/spaces/actions.js +1 -0
- package/dist/document-models/builder-account/gen/spaces/creators.d.ts +7 -0
- package/dist/document-models/builder-account/gen/spaces/creators.js +7 -0
- package/dist/document-models/builder-account/gen/spaces/error.d.ts +13 -0
- package/dist/document-models/builder-account/gen/spaces/error.js +11 -0
- package/dist/document-models/builder-account/gen/spaces/object.d.ts +10 -0
- package/dist/document-models/builder-account/gen/spaces/object.js +19 -0
- package/dist/document-models/builder-account/gen/spaces/operations.d.ts +10 -0
- package/dist/document-models/builder-account/gen/spaces/operations.js +1 -0
- package/dist/document-models/builder-account/gen/types.d.ts +9 -0
- package/dist/document-models/builder-account/gen/types.js +1 -0
- package/dist/document-models/builder-account/gen/utils.d.ts +21 -0
- package/dist/document-models/builder-account/gen/utils.js +54 -0
- package/dist/document-models/builder-account/index.d.ts +40 -0
- package/dist/document-models/builder-account/index.js +21 -0
- package/dist/document-models/builder-account/src/reducers/members.d.ts +2 -0
- package/dist/document-models/builder-account/src/reducers/members.js +11 -0
- package/dist/document-models/builder-account/src/reducers/packages.d.ts +2 -0
- package/dist/document-models/builder-account/src/reducers/packages.js +79 -0
- package/dist/document-models/builder-account/src/reducers/profile.d.ts +2 -0
- package/dist/document-models/builder-account/src/reducers/profile.js +26 -0
- package/dist/document-models/builder-account/src/reducers/spaces.d.ts +2 -0
- package/dist/document-models/builder-account/src/reducers/spaces.js +46 -0
- package/dist/document-models/builder-account/src/tests/document-model.test.d.ts +5 -0
- package/dist/document-models/builder-account/src/tests/document-model.test.js +18 -0
- package/dist/document-models/builder-account/src/tests/members.test.d.ts +5 -0
- package/dist/document-models/builder-account/src/tests/members.test.js +32 -0
- package/dist/document-models/builder-account/src/tests/packages.test.d.ts +5 -0
- package/dist/document-models/builder-account/src/tests/packages.test.js +56 -0
- package/dist/document-models/builder-account/src/tests/profile.test.d.ts +5 -0
- package/dist/document-models/builder-account/src/tests/profile.test.js +56 -0
- package/dist/document-models/builder-account/src/tests/spaces.test.d.ts +5 -0
- package/dist/document-models/builder-account/src/tests/spaces.test.js +56 -0
- package/dist/document-models/builder-account/src/utils.d.ts +1 -0
- package/dist/document-models/builder-account/src/utils.js +1 -0
- package/dist/document-models/index.d.ts +3 -0
- package/dist/document-models/index.js +2 -0
- package/dist/document-models/vetra-package/gen/actions.d.ts +3 -0
- package/dist/document-models/vetra-package/gen/actions.js +1 -0
- package/dist/document-models/vetra-package/gen/creators.d.ts +1 -0
- package/dist/document-models/vetra-package/gen/creators.js +1 -0
- package/dist/document-models/vetra-package/gen/document-model.d.ts +2 -0
- package/dist/document-models/vetra-package/gen/document-model.js +125 -0
- package/dist/document-models/vetra-package/gen/index.d.ts +7 -0
- package/dist/document-models/vetra-package/gen/index.js +6 -0
- package/dist/document-models/vetra-package/gen/meta/actions.d.ts +35 -0
- package/dist/document-models/vetra-package/gen/meta/actions.js +1 -0
- package/dist/document-models/vetra-package/gen/meta/creators.d.ts +10 -0
- package/dist/document-models/vetra-package/gen/meta/creators.js +10 -0
- package/dist/document-models/vetra-package/gen/meta/error.d.ts +1 -0
- package/dist/document-models/vetra-package/gen/meta/error.js +1 -0
- package/dist/document-models/vetra-package/gen/meta/object.d.ts +13 -0
- package/dist/document-models/vetra-package/gen/meta/object.js +28 -0
- package/dist/document-models/vetra-package/gen/meta/operations.d.ts +13 -0
- package/dist/document-models/vetra-package/gen/meta/operations.js +1 -0
- package/dist/document-models/vetra-package/gen/object.d.ts +14 -0
- package/dist/document-models/vetra-package/gen/object.js +25 -0
- package/dist/document-models/vetra-package/gen/ph-factories.d.ts +26 -0
- package/dist/document-models/vetra-package/gen/ph-factories.js +59 -0
- package/dist/document-models/vetra-package/gen/reducer.d.ts +4 -0
- package/dist/document-models/vetra-package/gen/reducer.js +48 -0
- package/dist/document-models/vetra-package/gen/schema/index.d.ts +2 -0
- package/dist/document-models/vetra-package/gen/schema/index.js +2 -0
- package/dist/document-models/vetra-package/gen/schema/types.d.ts +187 -0
- package/dist/document-models/vetra-package/gen/schema/types.js +1 -0
- package/dist/document-models/vetra-package/gen/schema/zod.d.ts +20 -0
- package/dist/document-models/vetra-package/gen/schema/zod.js +73 -0
- package/dist/document-models/vetra-package/gen/types.d.ts +9 -0
- package/dist/document-models/vetra-package/gen/types.js +1 -0
- package/dist/document-models/vetra-package/gen/utils.d.ts +21 -0
- package/dist/document-models/vetra-package/gen/utils.js +51 -0
- package/dist/document-models/vetra-package/index.d.ts +31 -0
- package/dist/document-models/vetra-package/index.js +21 -0
- package/dist/document-models/vetra-package/src/reducers/meta.d.ts +2 -0
- package/dist/document-models/vetra-package/src/reducers/meta.js +34 -0
- package/dist/document-models/vetra-package/src/tests/document-model.test.d.ts +5 -0
- package/dist/document-models/vetra-package/src/tests/document-model.test.js +18 -0
- package/dist/document-models/vetra-package/src/tests/meta.test.d.ts +5 -0
- package/dist/document-models/vetra-package/src/tests/meta.test.js +80 -0
- package/dist/document-models/vetra-package/src/utils.d.ts +1 -0
- package/dist/document-models/vetra-package/src/utils.js +1 -0
- package/dist/editors/builder-account-editor/editor.d.ts +3 -0
- package/dist/editors/builder-account-editor/editor.js +202 -0
- package/dist/editors/builder-account-editor/index.d.ts +3 -0
- package/dist/editors/builder-account-editor/index.js +12 -0
- package/dist/editors/index.d.ts +2 -0
- package/dist/editors/index.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +6 -0
- package/dist/powerhouse.manifest.json +29 -0
- package/dist/processors/factory.d.ts +7 -0
- package/dist/processors/factory.js +22 -0
- package/dist/processors/index.d.ts +2 -0
- package/dist/processors/index.js +1 -0
- package/dist/processors/vetra-read-model/factory.d.ts +3 -0
- package/dist/processors/vetra-read-model/factory.js +22 -0
- package/dist/processors/vetra-read-model/index.d.ts +28 -0
- package/dist/processors/vetra-read-model/index.js +349 -0
- package/dist/processors/vetra-read-model/migrations.d.ts +3 -0
- package/dist/processors/vetra-read-model/migrations.js +127 -0
- package/dist/processors/vetra-read-model/schema.d.ts +56 -0
- package/dist/processors/vetra-read-model/schema.js +1 -0
- package/dist/style.css +10598 -0
- package/dist/subgraphs/builder-account/index.d.ts +10 -0
- package/dist/subgraphs/builder-account/index.js +11 -0
- package/dist/subgraphs/builder-account/resolvers.d.ts +2 -0
- package/dist/subgraphs/builder-account/resolvers.js +276 -0
- package/dist/subgraphs/builder-account/schema.d.ts +2 -0
- package/dist/subgraphs/builder-account/schema.js +267 -0
- package/dist/subgraphs/index.d.ts +4 -0
- package/dist/subgraphs/index.js +3 -0
- package/dist/subgraphs/vetra/index.d.ts +10 -0
- package/dist/subgraphs/vetra/index.js +11 -0
- package/dist/subgraphs/vetra/resolvers.d.ts +2 -0
- package/dist/subgraphs/vetra/resolvers.js +10 -0
- package/dist/subgraphs/vetra/schema.d.ts +2 -0
- package/dist/subgraphs/vetra/schema.js +9 -0
- package/dist/subgraphs/vetra-package/index.d.ts +10 -0
- package/dist/subgraphs/vetra-package/index.js +11 -0
- package/dist/subgraphs/vetra-package/resolvers.d.ts +2 -0
- package/dist/subgraphs/vetra-package/resolvers.js +168 -0
- package/dist/subgraphs/vetra-package/schema.d.ts +2 -0
- package/dist/subgraphs/vetra-package/schema.js +123 -0
- package/dist/subgraphs/vetra-read-model/index.d.ts +10 -0
- package/dist/subgraphs/vetra-read-model/index.js +11 -0
- package/dist/subgraphs/vetra-read-model/resolvers.d.ts +2 -0
- package/dist/subgraphs/vetra-read-model/resolvers.js +134 -0
- package/dist/subgraphs/vetra-read-model/schema.d.ts +2 -0
- package/dist/subgraphs/vetra-read-model/schema.js +69 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +8 -0
- package/package.json +131 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is a scaffold file meant for customization:
|
|
3
|
+
* - change it by adding new tests or modifying the existing ones
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
6
|
+
import { generateMock } from '@powerhousedao/codegen';
|
|
7
|
+
import utils from '../../gen/utils.js';
|
|
8
|
+
import { z, } from '../../gen/schema/index.js';
|
|
9
|
+
import { reducer } from '../../gen/reducer.js';
|
|
10
|
+
import * as creators from '../../gen/meta/creators.js';
|
|
11
|
+
describe('Meta Operations', () => {
|
|
12
|
+
let document;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
document = utils.createDocument();
|
|
15
|
+
});
|
|
16
|
+
it('should handle setPackageName operation', () => {
|
|
17
|
+
const input = generateMock(z.SetPackageNameInputSchema());
|
|
18
|
+
const updatedDocument = reducer(document, creators.setPackageName(input));
|
|
19
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
20
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('SET_PACKAGE_NAME');
|
|
21
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
22
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
23
|
+
});
|
|
24
|
+
it('should handle setPackageDescription operation', () => {
|
|
25
|
+
const input = generateMock(z.SetPackageDescriptionInputSchema());
|
|
26
|
+
const updatedDocument = reducer(document, creators.setPackageDescription(input));
|
|
27
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
28
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('SET_PACKAGE_DESCRIPTION');
|
|
29
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
30
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
31
|
+
});
|
|
32
|
+
it('should handle setPackageCategory operation', () => {
|
|
33
|
+
const input = generateMock(z.SetPackageCategoryInputSchema());
|
|
34
|
+
const updatedDocument = reducer(document, creators.setPackageCategory(input));
|
|
35
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
36
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('SET_PACKAGE_CATEGORY');
|
|
37
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
38
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
39
|
+
});
|
|
40
|
+
it('should handle setPackageGithub operation', () => {
|
|
41
|
+
const input = generateMock(z.SetPackageGithubInputSchema());
|
|
42
|
+
const updatedDocument = reducer(document, creators.setPackageGithub(input));
|
|
43
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
44
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('SET_PACKAGE_GITHUB');
|
|
45
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
46
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
47
|
+
});
|
|
48
|
+
it('should handle setPackageNpm operation', () => {
|
|
49
|
+
const input = generateMock(z.SetPackageNpmInputSchema());
|
|
50
|
+
const updatedDocument = reducer(document, creators.setPackageNpm(input));
|
|
51
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
52
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('SET_PACKAGE_NPM');
|
|
53
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
54
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
55
|
+
});
|
|
56
|
+
it('should handle setAuthor operation', () => {
|
|
57
|
+
const input = generateMock(z.SetAuthorInputSchema());
|
|
58
|
+
const updatedDocument = reducer(document, creators.setAuthor(input));
|
|
59
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
60
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('SET_AUTHOR');
|
|
61
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
62
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
63
|
+
});
|
|
64
|
+
it('should handle addKeywords operation', () => {
|
|
65
|
+
const input = generateMock(z.AddKeywordsInputSchema());
|
|
66
|
+
const updatedDocument = reducer(document, creators.addKeywords(input));
|
|
67
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
68
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('ADD_KEYWORDS');
|
|
69
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
70
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
71
|
+
});
|
|
72
|
+
it('should handle removeKeywords operation', () => {
|
|
73
|
+
const input = generateMock(z.RemoveKeywordsInputSchema());
|
|
74
|
+
const updatedDocument = reducer(document, creators.removeKeywords(input));
|
|
75
|
+
expect(updatedDocument.operations.global).toHaveLength(1);
|
|
76
|
+
expect(updatedDocument.operations.global[0].action.type).toBe('REMOVE_KEYWORDS');
|
|
77
|
+
expect(updatedDocument.operations.global[0].action.input).toStrictEqual(input);
|
|
78
|
+
expect(updatedDocument.operations.global[0].index).toEqual(0);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from "@powerhousedao/design-system";
|
|
3
|
+
import { useDocumentById } from "@powerhousedao/reactor-browser";
|
|
4
|
+
import { useCallback, useState } from "react";
|
|
5
|
+
import { actions, } from "../../document-models/builder-account/index.js";
|
|
6
|
+
import { Form, StringField, UrlField } from "@powerhousedao/document-engineering";
|
|
7
|
+
export default function Editor(props) {
|
|
8
|
+
const { document: initialDocument } = props;
|
|
9
|
+
const [document, dispatch] = useDocumentById(initialDocument.header.id);
|
|
10
|
+
const typedDocument = document;
|
|
11
|
+
// Local form state
|
|
12
|
+
const [isEditingProfile, setIsEditingProfile] = useState(false);
|
|
13
|
+
const [isAddingSpace, setIsAddingSpace] = useState(false);
|
|
14
|
+
const [isAddingPackage, setIsAddingPackage] = useState(false);
|
|
15
|
+
const [editingSpaceId, setEditingSpaceId] = useState(null);
|
|
16
|
+
const [editingPackageId, setEditingPackageId] = useState(null);
|
|
17
|
+
// Form states
|
|
18
|
+
const [newSpaceTitle, setNewSpaceTitle] = useState("");
|
|
19
|
+
const [newSpaceDescription, setNewSpaceDescription] = useState("");
|
|
20
|
+
const [newPackageName, setNewPackageName] = useState("");
|
|
21
|
+
const [newPackageDescription, setNewPackageDescription] = useState("");
|
|
22
|
+
const [newPackageCategory, setNewPackageCategory] = useState("");
|
|
23
|
+
const [newPackageGithub, setNewPackageGithub] = useState("");
|
|
24
|
+
const [newPackageNpm, setNewPackageNpm] = useState("");
|
|
25
|
+
const [newMemberAddress, setNewMemberAddress] = useState("");
|
|
26
|
+
const [selectedSpaceForPackage, setSelectedSpaceForPackage] = useState("");
|
|
27
|
+
// Editing form states
|
|
28
|
+
const [editingSpaceTitle, setEditingSpaceTitle] = useState("");
|
|
29
|
+
const [editingSpaceDescription, setEditingSpaceDescription] = useState("");
|
|
30
|
+
const [editingPackageName, setEditingPackageName] = useState("");
|
|
31
|
+
const [editingPackageDescription, setEditingPackageDescription] = useState("");
|
|
32
|
+
const [editingPackageCategory, setEditingPackageCategory] = useState("");
|
|
33
|
+
const [editingPackageGithub, setEditingPackageGithub] = useState("");
|
|
34
|
+
const [editingPackageNpm, setEditingPackageNpm] = useState("");
|
|
35
|
+
const { state: { global } } = typedDocument;
|
|
36
|
+
const { profile, spaces, members } = global;
|
|
37
|
+
// Profile handlers
|
|
38
|
+
const handleSetProfileName = useCallback((name) => {
|
|
39
|
+
if (name.trim() && name !== profile.name) {
|
|
40
|
+
dispatch(actions.setProfileName({ name: name.trim() }));
|
|
41
|
+
}
|
|
42
|
+
}, [profile.name, dispatch]);
|
|
43
|
+
const handleSetSlug = useCallback((slug) => {
|
|
44
|
+
if (slug.trim() && slug !== profile.slug) {
|
|
45
|
+
dispatch(actions.setSlug({ slug: slug.trim() }));
|
|
46
|
+
}
|
|
47
|
+
}, [profile.slug, dispatch]);
|
|
48
|
+
const handleSetProfileDescription = useCallback((description) => {
|
|
49
|
+
if (description !== profile.description) {
|
|
50
|
+
dispatch(actions.setProfileDescription({ description: description.trim() || null }));
|
|
51
|
+
}
|
|
52
|
+
}, [profile.description, dispatch]);
|
|
53
|
+
const handleSetLogo = useCallback((logoUrl) => {
|
|
54
|
+
if (logoUrl.trim() && logoUrl !== profile.logo) {
|
|
55
|
+
dispatch(actions.setLogo({ logoUrl: logoUrl.trim() }));
|
|
56
|
+
}
|
|
57
|
+
}, [profile.logo, dispatch]);
|
|
58
|
+
const handleUpdateSocials = useCallback((socials) => {
|
|
59
|
+
dispatch(actions.updateSocials({
|
|
60
|
+
github: socials.github?.trim() || null,
|
|
61
|
+
website: socials.website?.trim() || null,
|
|
62
|
+
x: socials.x?.trim() || null,
|
|
63
|
+
}));
|
|
64
|
+
}, [dispatch]);
|
|
65
|
+
// Space handlers
|
|
66
|
+
const handleAddSpace = useCallback(() => {
|
|
67
|
+
if (newSpaceTitle.trim()) {
|
|
68
|
+
dispatch(actions.addSpace({
|
|
69
|
+
title: newSpaceTitle.trim(),
|
|
70
|
+
description: newSpaceDescription.trim() || null,
|
|
71
|
+
}));
|
|
72
|
+
setNewSpaceTitle("");
|
|
73
|
+
setNewSpaceDescription("");
|
|
74
|
+
setIsAddingSpace(false);
|
|
75
|
+
}
|
|
76
|
+
}, [newSpaceTitle, newSpaceDescription, dispatch]);
|
|
77
|
+
const handleDeleteSpace = useCallback((spaceId) => {
|
|
78
|
+
dispatch(actions.deleteSpace({ id: spaceId }));
|
|
79
|
+
}, [dispatch]);
|
|
80
|
+
const handleSetSpaceTitle = useCallback((spaceId, newTitle) => {
|
|
81
|
+
if (newTitle.trim()) {
|
|
82
|
+
dispatch(actions.setSpaceTitle({ id: spaceId, newTitle: newTitle.trim() }));
|
|
83
|
+
}
|
|
84
|
+
}, [dispatch]);
|
|
85
|
+
const handleSetSpaceDescription = useCallback((spaceId, description) => {
|
|
86
|
+
dispatch(actions.setSpaceDescription({ id: spaceId, description: description.trim() }));
|
|
87
|
+
}, [dispatch]);
|
|
88
|
+
const handleStartEditingSpace = useCallback((spaceId) => {
|
|
89
|
+
const space = spaces.find(s => s.id === spaceId);
|
|
90
|
+
if (space) {
|
|
91
|
+
setEditingSpaceId(spaceId);
|
|
92
|
+
setEditingSpaceTitle(space.title);
|
|
93
|
+
setEditingSpaceDescription(space.description || "");
|
|
94
|
+
}
|
|
95
|
+
}, [spaces]);
|
|
96
|
+
const handleSaveSpaceEdit = useCallback(() => {
|
|
97
|
+
if (editingSpaceId && editingSpaceTitle.trim()) {
|
|
98
|
+
handleSetSpaceTitle(editingSpaceId, editingSpaceTitle);
|
|
99
|
+
handleSetSpaceDescription(editingSpaceId, editingSpaceDescription);
|
|
100
|
+
setEditingSpaceId(null);
|
|
101
|
+
setEditingSpaceTitle("");
|
|
102
|
+
setEditingSpaceDescription("");
|
|
103
|
+
}
|
|
104
|
+
}, [editingSpaceId, editingSpaceTitle, editingSpaceDescription, handleSetSpaceTitle, handleSetSpaceDescription]);
|
|
105
|
+
const handleCancelSpaceEdit = useCallback(() => {
|
|
106
|
+
setEditingSpaceId(null);
|
|
107
|
+
setEditingSpaceTitle("");
|
|
108
|
+
setEditingSpaceDescription("");
|
|
109
|
+
}, []);
|
|
110
|
+
// Package handlers
|
|
111
|
+
const handleAddPackage = useCallback(() => {
|
|
112
|
+
if (newPackageName.trim() && selectedSpaceForPackage) {
|
|
113
|
+
dispatch(actions.addPackage({
|
|
114
|
+
name: newPackageName.trim(),
|
|
115
|
+
description: newPackageDescription.trim() || null,
|
|
116
|
+
category: newPackageCategory.trim() || null,
|
|
117
|
+
github: newPackageGithub.trim() || null,
|
|
118
|
+
npm: newPackageNpm.trim() || null,
|
|
119
|
+
spaceId: selectedSpaceForPackage,
|
|
120
|
+
author: {
|
|
121
|
+
name: profile.name,
|
|
122
|
+
website: profile.socials.website || null,
|
|
123
|
+
},
|
|
124
|
+
}));
|
|
125
|
+
setNewPackageName("");
|
|
126
|
+
setNewPackageDescription("");
|
|
127
|
+
setNewPackageCategory("");
|
|
128
|
+
setNewPackageGithub("");
|
|
129
|
+
setNewPackageNpm("");
|
|
130
|
+
setSelectedSpaceForPackage("");
|
|
131
|
+
setIsAddingPackage(false);
|
|
132
|
+
}
|
|
133
|
+
}, [newPackageName, newPackageDescription, newPackageCategory, newPackageGithub, newPackageNpm, selectedSpaceForPackage, profile, dispatch]);
|
|
134
|
+
const handleDeletePackage = useCallback((packageId) => {
|
|
135
|
+
dispatch(actions.deletePackage({ id: packageId }));
|
|
136
|
+
}, [dispatch]);
|
|
137
|
+
const handleStartEditingPackage = useCallback((packageId) => {
|
|
138
|
+
// Find the package across all spaces
|
|
139
|
+
for (const space of spaces) {
|
|
140
|
+
const pkg = space.packages.find(p => p.id === packageId);
|
|
141
|
+
if (pkg) {
|
|
142
|
+
setEditingPackageId(packageId);
|
|
143
|
+
setEditingPackageName(pkg.name);
|
|
144
|
+
setEditingPackageDescription(pkg.description || "");
|
|
145
|
+
setEditingPackageCategory(pkg.category || "");
|
|
146
|
+
setEditingPackageGithub(pkg.github || "");
|
|
147
|
+
setEditingPackageNpm(pkg.npm || "");
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}, [spaces]);
|
|
152
|
+
const handleSavePackageEdit = useCallback(() => {
|
|
153
|
+
if (editingPackageId && editingPackageName.trim()) {
|
|
154
|
+
// Note: We'll need to add updatePackage action to the document model
|
|
155
|
+
// For now, we'll delete and recreate the package
|
|
156
|
+
const space = spaces.find(s => s.packages.some(p => p.id === editingPackageId));
|
|
157
|
+
if (space) {
|
|
158
|
+
const originalPackage = space.packages.find(p => p.id === editingPackageId);
|
|
159
|
+
if (originalPackage) {
|
|
160
|
+
dispatch(actions.deletePackage({ id: editingPackageId }));
|
|
161
|
+
dispatch(actions.addPackage({
|
|
162
|
+
name: editingPackageName.trim(),
|
|
163
|
+
description: editingPackageDescription.trim() || null,
|
|
164
|
+
category: editingPackageCategory.trim() || null,
|
|
165
|
+
github: editingPackageGithub.trim() || null,
|
|
166
|
+
npm: editingPackageNpm.trim() || null,
|
|
167
|
+
spaceId: space.id,
|
|
168
|
+
author: originalPackage.author,
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
setEditingPackageId(null);
|
|
173
|
+
setEditingPackageName("");
|
|
174
|
+
setEditingPackageDescription("");
|
|
175
|
+
setEditingPackageCategory("");
|
|
176
|
+
setEditingPackageGithub("");
|
|
177
|
+
setEditingPackageNpm("");
|
|
178
|
+
}
|
|
179
|
+
}, [editingPackageId, editingPackageName, editingPackageDescription, editingPackageCategory, editingPackageGithub, editingPackageNpm, spaces, dispatch]);
|
|
180
|
+
const handleCancelPackageEdit = useCallback(() => {
|
|
181
|
+
setEditingPackageId(null);
|
|
182
|
+
setEditingPackageName("");
|
|
183
|
+
setEditingPackageDescription("");
|
|
184
|
+
setEditingPackageCategory("");
|
|
185
|
+
setEditingPackageGithub("");
|
|
186
|
+
setEditingPackageNpm("");
|
|
187
|
+
}, []);
|
|
188
|
+
// Member handlers
|
|
189
|
+
const handleAddMember = useCallback(() => {
|
|
190
|
+
if (newMemberAddress.trim()) {
|
|
191
|
+
dispatch(actions.addMember({ ethAddress: newMemberAddress.trim() }));
|
|
192
|
+
setNewMemberAddress("");
|
|
193
|
+
}
|
|
194
|
+
}, [newMemberAddress, dispatch]);
|
|
195
|
+
const handleRemoveMember = useCallback((ethAddress) => {
|
|
196
|
+
dispatch(actions.removeMember({ ethAddress }));
|
|
197
|
+
}, [dispatch]);
|
|
198
|
+
return (_jsxs("div", { className: "html-defaults-container min-h-screen bg-gray-50", children: [_jsx("div", { className: "bg-white shadow-sm border-b", children: _jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: _jsx("div", { className: "py-6", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center space-x-4", children: [_jsx("div", { className: "flex-shrink-0", children: profile.logo ? (_jsx("img", { className: "w-12 h-12 rounded-lg object-cover", src: profile.logo, alt: "Logo" })) : (_jsx("div", { className: "w-12 h-12 bg-blue-600 rounded-lg flex items-center justify-center", children: _jsx("svg", { className: "w-6 h-6 text-white", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }) })) }), _jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold text-gray-900", children: profile.name || "Builder Account" }), _jsx("p", { className: "text-sm text-gray-500", children: profile.slug ? `@${profile.slug}` : "Manage your builder profile and packages" })] })] }), _jsx("div", { className: "flex items-center space-x-3", children: _jsx(Button, { color: "light", onClick: () => setIsEditingProfile(!isEditingProfile), children: isEditingProfile ? "Cancel" : "Edit Profile" }) })] }) }) }) }), _jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-8", children: [_jsxs("div", { className: "lg:col-span-2 space-y-8", children: [_jsxs("div", { className: "bg-white rounded-lg shadow-sm border", children: [_jsxs("div", { className: "px-6 py-4 border-b border-gray-200", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "Profile Information" }), _jsx("p", { className: "text-sm text-gray-500", children: "Manage your builder profile details" })] }), _jsx("div", { className: "p-6", children: isEditingProfile ? (_jsx(Form, { onSubmit: (e) => e.preventDefault(), children: _jsxs("div", { className: "space-y-6", children: [_jsx(StringField, { name: "profileName", label: "Profile Name", value: profile.name, onChange: (e) => handleSetProfileName(e.target.value), placeholder: "Enter your profile name", description: "Your public display name" }), _jsx(StringField, { name: "slug", label: "Slug", value: profile.slug, onChange: (e) => handleSetSlug(e.target.value), placeholder: "your-slug", description: "Unique identifier for your profile (used in URLs)" }), _jsx(StringField, { name: "description", label: "Description", value: profile.description || "", onChange: (e) => handleSetProfileDescription(e.target.value), placeholder: "Tell us about yourself and your work", description: "Brief description of your work and interests" }), _jsx(UrlField, { name: "logo", label: "Logo URL", value: profile.logo || "", onChange: (e) => handleSetLogo(e.target.value), placeholder: "https://example.com/logo.png", description: "URL to your profile logo image" }), _jsxs("div", { className: "space-y-4", children: [_jsx("h3", { className: "text-md font-medium text-gray-900", children: "Social Links" }), _jsx(UrlField, { name: "github", label: "GitHub", value: profile.socials.github || "", onChange: (e) => handleUpdateSocials({ ...profile.socials, github: e.target.value }), placeholder: "https://github.com/username" }), _jsx(UrlField, { name: "website", label: "Website", value: profile.socials.website || "", onChange: (e) => handleUpdateSocials({ ...profile.socials, website: e.target.value }), placeholder: "https://your-website.com" }), _jsx(UrlField, { name: "x", label: "X (Twitter)", value: profile.socials.xProfile || "", onChange: (e) => handleUpdateSocials({ ...profile.socials, x: e.target.value }), placeholder: "https://x.com/username" })] }), _jsxs("div", { className: "flex justify-end space-x-3", children: [_jsx(Button, { color: "light", onClick: () => setIsEditingProfile(false), children: "Cancel" }), _jsx(Button, { onClick: () => setIsEditingProfile(false), children: "Save Changes" })] })] }) })) : (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700", children: "Name" }), _jsx("p", { className: "mt-1 text-sm text-gray-900", children: profile.name || "Not set" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700", children: "Slug" }), _jsx("p", { className: "mt-1 text-sm text-gray-900", children: profile.slug ? `@${profile.slug}` : "Not set" })] })] }), profile.description && (_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700", children: "Description" }), _jsx("p", { className: "mt-1 text-sm text-gray-900", children: profile.description })] })), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700", children: "Social Links" }), _jsxs("div", { className: "mt-2 flex space-x-4", children: [profile.socials.github && (_jsx("a", { href: profile.socials.github, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800", children: "GitHub" })), profile.socials.website && (_jsx("a", { href: profile.socials.website, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800", children: "Website" })), profile.socials.xProfile && (_jsx("a", { href: profile.socials.xProfile, target: "_blank", rel: "noopener noreferrer", className: "text-blue-600 hover:text-blue-800", children: "X (Twitter)" })), !profile.socials.github && !profile.socials.website && !profile.socials.xProfile && (_jsx("span", { className: "text-gray-500 text-sm", children: "No social links added" }))] })] })] })) })] }), _jsxs("div", { className: "bg-white rounded-lg shadow-sm border", children: [_jsx("div", { className: "px-6 py-4 border-b border-gray-200", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "Spaces" }), _jsx("p", { className: "text-sm text-gray-500", children: "Organize your packages into spaces" })] }), _jsx(Button, { onClick: () => setIsAddingSpace(true), children: "Add Space" })] }) }), _jsxs("div", { className: "p-6", children: [isAddingSpace ? (_jsx("div", { className: "p-4 bg-gray-50 rounded-lg", children: _jsx(Form, { onSubmit: (e) => e.preventDefault(), children: _jsxs("div", { className: "space-y-4", children: [_jsx(StringField, { name: "spaceTitle", label: "Space Title", value: newSpaceTitle, onChange: (e) => setNewSpaceTitle(e.target.value), placeholder: "Enter space title" }), _jsx(StringField, { name: "spaceDescription", label: "Description (optional)", value: newSpaceDescription, onChange: (e) => setNewSpaceDescription(e.target.value), placeholder: "Enter space description" }), _jsxs("div", { className: "flex justify-end space-x-3", children: [_jsx(Button, { color: "light", onClick: () => setIsAddingSpace(false), children: "Cancel" }), _jsx(Button, { onClick: handleAddSpace, disabled: !newSpaceTitle.trim(), children: "Add Space" })] })] }) }) })) : null, _jsx("div", { className: "space-y-4", children: spaces.length > 0 ? (spaces.map((space) => (_jsxs("div", { className: "border border-gray-200 rounded-lg p-4", children: [editingSpaceId === space.id ? (_jsx(Form, { onSubmit: (e) => e.preventDefault(), children: _jsxs("div", { className: "space-y-4", children: [_jsx(StringField, { name: "editingSpaceTitle", label: "Space Title", value: editingSpaceTitle, onChange: (e) => setEditingSpaceTitle(e.target.value), placeholder: "Enter space title" }), _jsx(StringField, { name: "editingSpaceDescription", label: "Description (optional)", value: editingSpaceDescription, onChange: (e) => setEditingSpaceDescription(e.target.value), placeholder: "Enter space description" }), _jsxs("div", { className: "flex justify-end space-x-3", children: [_jsx(Button, { color: "light", onClick: handleCancelSpaceEdit, children: "Cancel" }), _jsx(Button, { onClick: handleSaveSpaceEdit, disabled: !editingSpaceTitle.trim(), children: "Save Changes" })] })] }) })) : (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-md font-medium text-gray-900", children: space.title }), space.description && (_jsx("p", { className: "text-sm text-gray-500 mt-1", children: space.description })), _jsxs("p", { className: "text-xs text-gray-400 mt-1", children: [space.packages.length, " package", space.packages.length !== 1 ? 's' : ''] })] }), _jsxs("div", { className: "flex space-x-2", children: [_jsx(Button, { color: "light", size: "small", onClick: () => handleStartEditingSpace(space.id), children: "Edit" }), _jsx(Button, { color: "light", size: "small", onClick: () => {
|
|
199
|
+
setSelectedSpaceForPackage(space.id);
|
|
200
|
+
setIsAddingPackage(true);
|
|
201
|
+
}, children: "Add Package" }), _jsx(Button, { color: "red", size: "small", onClick: () => handleDeleteSpace(space.id), children: "Delete" })] })] })), space.packages.length > 0 && (_jsx("div", { className: "mt-4 space-y-2", children: space.packages.map((pkg) => (_jsx("div", { className: "p-3 bg-gray-50 rounded border", children: editingPackageId === pkg.id ? (_jsx(Form, { onSubmit: (e) => e.preventDefault(), children: _jsxs("div", { className: "space-y-3", children: [_jsx(StringField, { name: "editingPackageName", label: "Package Name", value: editingPackageName, onChange: (e) => setEditingPackageName(e.target.value), placeholder: "Enter package name" }), _jsx(StringField, { name: "editingPackageDescription", label: "Description", value: editingPackageDescription, onChange: (e) => setEditingPackageDescription(e.target.value), placeholder: "Enter package description" }), _jsx(StringField, { name: "editingPackageCategory", label: "Category", value: editingPackageCategory, onChange: (e) => setEditingPackageCategory(e.target.value), placeholder: "Enter package category" }), _jsx(UrlField, { name: "editingPackageGithub", label: "GitHub URL", value: editingPackageGithub, onChange: (e) => setEditingPackageGithub(e.target.value), placeholder: "https://github.com/username/repo" }), _jsx(UrlField, { name: "editingPackageNpm", label: "NPM URL", value: editingPackageNpm, onChange: (e) => setEditingPackageNpm(e.target.value), placeholder: "https://www.npmjs.com/package/package-name" }), _jsxs("div", { className: "flex justify-end space-x-3", children: [_jsx(Button, { color: "light", onClick: handleCancelPackageEdit, children: "Cancel" }), _jsx(Button, { onClick: handleSavePackageEdit, disabled: !editingPackageName.trim(), children: "Save Changes" })] })] }) })) : (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("span", { className: "font-medium text-gray-900", children: pkg.name }), pkg.description && (_jsx("p", { className: "text-sm text-gray-500", children: pkg.description })), pkg.category && (_jsxs("p", { className: "text-xs text-gray-400", children: ["Category: ", pkg.category] }))] }), _jsxs("div", { className: "flex space-x-2", children: [_jsx(Button, { color: "light", size: "small", onClick: () => handleStartEditingPackage(pkg.id), children: "Edit" }), _jsx(Button, { color: "red", size: "small", onClick: () => handleDeletePackage(pkg.id), children: "Remove" })] })] })) }, pkg.id))) }))] }, space.id)))) : (_jsx("div", { className: "text-center py-8 text-gray-500", children: _jsx("p", { children: "No spaces created yet. Create a space to organize your packages." }) })) })] })] }), isAddingPackage && (_jsxs("div", { className: "bg-white rounded-lg shadow-sm border", children: [_jsx("div", { className: "px-6 py-4 border-b border-gray-200", children: _jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "Add Package" }) }), _jsx("div", { className: "p-6", children: _jsx(Form, { onSubmit: (e) => e.preventDefault(), children: _jsxs("div", { className: "space-y-4", children: [_jsx(StringField, { name: "packageName", label: "Package Name", value: newPackageName, onChange: (e) => setNewPackageName(e.target.value), placeholder: "Enter package name" }), _jsx(StringField, { name: "packageDescription", label: "Description", value: newPackageDescription, onChange: (e) => setNewPackageDescription(e.target.value), placeholder: "Enter package description" }), _jsx(StringField, { name: "packageCategory", label: "Category", value: newPackageCategory, onChange: (e) => setNewPackageCategory(e.target.value), placeholder: "Enter package category" }), _jsx(UrlField, { name: "packageGithub", label: "GitHub URL", value: newPackageGithub, onChange: (e) => setNewPackageGithub(e.target.value), placeholder: "https://github.com/username/repo" }), _jsx(UrlField, { name: "packageNpm", label: "NPM URL", value: newPackageNpm, onChange: (e) => setNewPackageNpm(e.target.value), placeholder: "https://www.npmjs.com/package/package-name" }), _jsxs("div", { className: "flex justify-end space-x-3", children: [_jsx(Button, { color: "light", onClick: () => setIsAddingPackage(false), children: "Cancel" }), _jsx(Button, { onClick: handleAddPackage, disabled: !newPackageName.trim() || !selectedSpaceForPackage, children: "Add Package" })] })] }) }) })] }))] }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "bg-white rounded-lg shadow-sm border", children: [_jsxs("div", { className: "px-6 py-4 border-b border-gray-200", children: [_jsx("h3", { className: "text-lg font-semibold text-gray-900", children: "Team Members" }), _jsx("p", { className: "text-sm text-gray-500", children: "Manage team access" })] }), _jsx("div", { className: "p-6", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex space-x-2", children: [_jsx("input", { type: "text", value: newMemberAddress, onChange: (e) => setNewMemberAddress(e.target.value), placeholder: "0x...", className: "flex-1 px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500" }), _jsx(Button, { onClick: handleAddMember, disabled: !newMemberAddress.trim(), children: "Add" })] }), _jsx("div", { className: "space-y-2", children: members.length > 0 ? (members.map((address, index) => (_jsxs("div", { className: "flex items-center justify-between p-2 bg-gray-50 rounded border", children: [_jsx("span", { className: "text-sm font-mono text-gray-700 truncate", children: address }), _jsx(Button, { color: "red", size: "small", onClick: () => handleRemoveMember(address), children: "Remove" })] }, index)))) : (_jsx("p", { className: "text-sm text-gray-500", children: "No team members added yet" })) })] }) })] }), _jsxs("div", { className: "bg-white rounded-lg shadow-sm border", children: [_jsx("div", { className: "px-6 py-4 border-b border-gray-200", children: _jsx("h3", { className: "text-lg font-semibold text-gray-900", children: "Quick Stats" }) }), _jsx("div", { className: "p-6", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-gray-500", children: "Spaces" }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: spaces.length })] }), _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-gray-500", children: "Total Packages" }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: spaces.reduce((total, space) => total + space.packages.length, 0) })] }), _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm text-gray-500", children: "Team Members" }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: members.length })] })] }) })] })] })] }) })] }));
|
|
202
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Editor from "./editor.js";
|
|
2
|
+
export const module = {
|
|
3
|
+
Component: Editor,
|
|
4
|
+
documentTypes: ["powerhouse/vetra/builder-account"],
|
|
5
|
+
config: {
|
|
6
|
+
id: "editor-id",
|
|
7
|
+
disableExternalControls: true,
|
|
8
|
+
documentToolbarEnabled: true,
|
|
9
|
+
showSwitchboardLink: true,
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
export default module;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { module as BuilderAccountEditor } from "./builder-account-editor/index.js";
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Manifest } from "document-model";
|
|
2
|
+
export declare const manifest: Manifest;
|
|
3
|
+
export declare const documentModels: (import("document-model").DocumentModelModule<import("./document-models/builder-account/gen").BuilderAccountPHState> | import("document-model").DocumentModelModule<import("./document-models/vetra-package/gen").VetraPackagePHState>)[];
|
|
4
|
+
export declare const editors: import("document-model").EditorModule[];
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import manifestJson from "./powerhouse.manifest.json" with { type: "json" };
|
|
2
|
+
import * as documentModelsExports from './document-models/index.js';
|
|
3
|
+
import * as editorsExports from './editors/index.js';
|
|
4
|
+
export const manifest = manifestJson;
|
|
5
|
+
export const documentModels = Object.values(documentModelsExports);
|
|
6
|
+
export const editors = Object.values(editorsExports);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Vetra Builder Package",
|
|
3
|
+
"description": "",
|
|
4
|
+
"category": "Engineering",
|
|
5
|
+
"publisher": {
|
|
6
|
+
"name": "Powerhouse Inc.",
|
|
7
|
+
"url": "https://www.powerhouse.inc"
|
|
8
|
+
},
|
|
9
|
+
"documentModels": [
|
|
10
|
+
{
|
|
11
|
+
"id": "powerhouse/vetra/builder-account",
|
|
12
|
+
"name": "BuilderAccount"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "powerhouse/vetra/package",
|
|
16
|
+
"name": "VetraPackage"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"editors": [],
|
|
20
|
+
"apps": [],
|
|
21
|
+
"subgraphs": [
|
|
22
|
+
{
|
|
23
|
+
"id": "vetra",
|
|
24
|
+
"name": "vetra",
|
|
25
|
+
"documentTypes": []
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"importScripts": []
|
|
29
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file aggregates all processor factories
|
|
3
|
+
* Auto-generated by codegen - DO NOT EDIT MANUALLY
|
|
4
|
+
*/
|
|
5
|
+
import { type IProcessorHostModule, type ProcessorRecord } from "document-drive/processors/types";
|
|
6
|
+
import { type PHDocumentHeader } from "document-model";
|
|
7
|
+
export declare const processorFactory: (module: IProcessorHostModule) => (driveHeader: PHDocumentHeader) => Promise<ProcessorRecord[]>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file aggregates all processor factories
|
|
3
|
+
* Auto-generated by codegen - DO NOT EDIT MANUALLY
|
|
4
|
+
*/
|
|
5
|
+
// Import processor factories here as they are generated
|
|
6
|
+
import { vetraReadModelProcessorFactory } from "./vetra-read-model/factory.js";
|
|
7
|
+
export const processorFactory = (module) => {
|
|
8
|
+
// Initialize all processor factories once with the module
|
|
9
|
+
const factories = [];
|
|
10
|
+
// Add processors here as they are generated
|
|
11
|
+
factories.push(vetraReadModelProcessorFactory(module));
|
|
12
|
+
// Return the inner function that will be called for each drive
|
|
13
|
+
return async (driveHeader) => {
|
|
14
|
+
const processors = [];
|
|
15
|
+
// Call each cached factory with the driveHeader
|
|
16
|
+
for (const factory of factories) {
|
|
17
|
+
const factoryProcessors = await factory(driveHeader);
|
|
18
|
+
processors.push(...factoryProcessors);
|
|
19
|
+
}
|
|
20
|
+
return processors;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { VetraReadModelProcessor } from "./vetra-read-model/index.js";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type IProcessorHostModule, type ProcessorRecord } from "document-drive/processors/types";
|
|
2
|
+
import { type PHDocumentHeader } from "document-model";
|
|
3
|
+
export declare const vetraReadModelProcessorFactory: (module: IProcessorHostModule) => (driveHeader: PHDocumentHeader) => Promise<ProcessorRecord[]>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { VetraReadModelProcessor } from "./index.js";
|
|
2
|
+
export const vetraReadModelProcessorFactory = (module) => async (driveHeader) => {
|
|
3
|
+
// Create a namespace for the processor and the provided drive id
|
|
4
|
+
const namespace = VetraReadModelProcessor.getNamespace(driveHeader.id);
|
|
5
|
+
// Create a namespaced db for the processor
|
|
6
|
+
const store = await module.relationalDb.createNamespace(namespace);
|
|
7
|
+
// Create a filter for the processor
|
|
8
|
+
const filter = {
|
|
9
|
+
branch: ["main"],
|
|
10
|
+
documentId: ["*"],
|
|
11
|
+
documentType: ["powerhouse/vetra/builder-account"],
|
|
12
|
+
scope: ["global"],
|
|
13
|
+
};
|
|
14
|
+
// Create the processor
|
|
15
|
+
const processor = new VetraReadModelProcessor(namespace, filter, store);
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
processor,
|
|
19
|
+
filter,
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { RelationalDbProcessor } from "document-drive/processors/relational";
|
|
2
|
+
import { type InternalTransmitterUpdate } from "document-drive/server/listener/transmitter/internal";
|
|
3
|
+
import { type DB } from "./schema.js";
|
|
4
|
+
export declare class VetraReadModelProcessor extends RelationalDbProcessor<DB> {
|
|
5
|
+
static getNamespace(driveId: string): string;
|
|
6
|
+
initAndUpgrade(): Promise<void>;
|
|
7
|
+
onStrands(strands: InternalTransmitterUpdate[]): Promise<void>;
|
|
8
|
+
private handleOperation;
|
|
9
|
+
private handleSetLogo;
|
|
10
|
+
private handleSetProfileName;
|
|
11
|
+
private handleSetSlug;
|
|
12
|
+
private handleSetProfileDescription;
|
|
13
|
+
private handleUpdateSocials;
|
|
14
|
+
private handleAddMember;
|
|
15
|
+
private handleRemoveMember;
|
|
16
|
+
private handleAddSpace;
|
|
17
|
+
private handleDeleteSpace;
|
|
18
|
+
private handleSetSpaceTitle;
|
|
19
|
+
private handleSetSpaceDescription;
|
|
20
|
+
private handleReorderSpaces;
|
|
21
|
+
private handleAddPackage;
|
|
22
|
+
private handleSetPackageDriveId;
|
|
23
|
+
private handleUpdatePackage;
|
|
24
|
+
private handleReorderPackages;
|
|
25
|
+
private handleDeletePackage;
|
|
26
|
+
private ensureBuilderAccount;
|
|
27
|
+
onDisconnect(): Promise<void>;
|
|
28
|
+
}
|