@powerhousedao/vetra-builder-package 0.0.25 → 0.0.26
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/dist/editors/builder-team-editor/components/MembersSection.d.ts +2 -1
- package/dist/editors/builder-team-editor/components/MembersSection.js +3 -4
- package/dist/editors/builder-team-editor/editor.js +1 -1
- package/dist/editors/builder-team-editor/hooks/useMemberHandlers.d.ts +1 -0
- package/dist/editors/builder-team-editor/hooks/useMemberHandlers.js +10 -0
- package/dist/processors/vetra-builder-relational-db-processor/builder-team-handlers.d.ts +3 -2
- package/dist/processors/vetra-builder-relational-db-processor/builder-team-handlers.js +57 -12
- package/package.json +1 -1
|
@@ -4,6 +4,7 @@ interface MembersSectionProps {
|
|
|
4
4
|
members: BuilderTeamDocument["state"]["global"]["members"];
|
|
5
5
|
onAddMember: (profileData: MemberProfileData) => boolean;
|
|
6
6
|
onRemoveMember: (id: string) => void;
|
|
7
|
+
onUpdateMember: (id: string, profileData: Partial<MemberProfileData>) => void;
|
|
7
8
|
}
|
|
8
|
-
export declare function MembersSection({ members, onAddMember, onRemoveMember, }: MembersSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function MembersSection({ members, onAddMember, onRemoveMember, onUpdateMember, }: MembersSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
9
10
|
export {};
|
|
@@ -4,7 +4,7 @@ import { useState } from "react";
|
|
|
4
4
|
import { config } from "../config.js";
|
|
5
5
|
import { getProfile, searchProfileOptions, getProfileOption, } from "../services/renown-api.js";
|
|
6
6
|
import { truncateAddress } from "../utils/format.js";
|
|
7
|
-
export function MembersSection({ members, onAddMember, onRemoveMember, }) {
|
|
7
|
+
export function MembersSection({ members, onAddMember, onRemoveMember, onUpdateMember, }) {
|
|
8
8
|
const [selectedProfile, setSelectedProfile] = useState(null);
|
|
9
9
|
const handleAddMember = () => {
|
|
10
10
|
if (selectedProfile) {
|
|
@@ -25,9 +25,8 @@ export function MembersSection({ members, onAddMember, onRemoveMember, }) {
|
|
|
25
25
|
: null;
|
|
26
26
|
const handleUpdateMember = () => {
|
|
27
27
|
if (selectedProfile && existingMember) {
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
onAddMember({
|
|
28
|
+
// Update the member with new profile data
|
|
29
|
+
onUpdateMember(existingMember.id, {
|
|
31
30
|
phid: selectedProfile.documentId,
|
|
32
31
|
ethAddress: selectedProfile.ethAddress,
|
|
33
32
|
name: selectedProfile.username,
|
|
@@ -75,5 +75,5 @@ export function Editor(props) {
|
|
|
75
75
|
vetraDriveUrl: packageInfo.vetraDriveUrl,
|
|
76
76
|
}));
|
|
77
77
|
packageHandlers.handleCancelPackageEdit();
|
|
78
|
-
}, onCancelPackageEdit: packageHandlers.handleCancelPackageEdit, onReorderSpaces: handleReorderSpaces, onReorderPackages: handleReorderPackages }), isAddingPackage && (_jsx(PackageForm, { spaceId: selectedSpaceForPackage, onSave: handleSavePackage, onCancel: handleCancelAddPackage }))] }), _jsxs("div", { className: "space-y-6", children: [_jsx(MembersSection, { members: members, onAddMember: memberHandlers.handleAddMember, onRemoveMember: memberHandlers.handleRemoveMember }), _jsx(QuickStats, { spaces: spaces, members: members })] })] }) })] }));
|
|
78
|
+
}, onCancelPackageEdit: packageHandlers.handleCancelPackageEdit, onReorderSpaces: handleReorderSpaces, onReorderPackages: handleReorderPackages }), isAddingPackage && (_jsx(PackageForm, { spaceId: selectedSpaceForPackage, onSave: handleSavePackage, onCancel: handleCancelAddPackage }))] }), _jsxs("div", { className: "space-y-6", children: [_jsx(MembersSection, { members: members, onAddMember: memberHandlers.handleAddMember, onRemoveMember: memberHandlers.handleRemoveMember, onUpdateMember: memberHandlers.handleUpdateMember }), _jsx(QuickStats, { spaces: spaces, members: members })] })] }) })] }));
|
|
79
79
|
}
|
|
@@ -9,4 +9,5 @@ export interface MemberProfileData {
|
|
|
9
9
|
export declare function useMemberHandlers(dispatch: DocumentDispatch<Action>): {
|
|
10
10
|
handleAddMember: (profileData: MemberProfileData) => boolean;
|
|
11
11
|
handleRemoveMember: (id: string) => void;
|
|
12
|
+
handleUpdateMember: (id: string, profileData: Partial<MemberProfileData>) => void;
|
|
12
13
|
};
|
|
@@ -20,8 +20,18 @@ export function useMemberHandlers(dispatch) {
|
|
|
20
20
|
const handleRemoveMember = useCallback((id) => {
|
|
21
21
|
dispatch(actions.removeMember({ id }));
|
|
22
22
|
}, [dispatch]);
|
|
23
|
+
const handleUpdateMember = useCallback((id, profileData) => {
|
|
24
|
+
dispatch(actions.updateMemberInfo({
|
|
25
|
+
id,
|
|
26
|
+
...(profileData.phid !== undefined && { phid: profileData.phid }),
|
|
27
|
+
...(profileData.ethAddress !== undefined && { ethAddress: profileData.ethAddress.trim() }),
|
|
28
|
+
...(profileData.name !== undefined && { name: profileData.name }),
|
|
29
|
+
...(profileData.profileImage !== undefined && { profileImage: profileData.profileImage }),
|
|
30
|
+
}));
|
|
31
|
+
}, [dispatch]);
|
|
23
32
|
return {
|
|
24
33
|
handleAddMember,
|
|
25
34
|
handleRemoveMember,
|
|
35
|
+
handleUpdateMember,
|
|
26
36
|
};
|
|
27
37
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { DB } from "./schema.js";
|
|
2
1
|
import type { IRelationalDb } from "document-drive";
|
|
3
|
-
import { type
|
|
2
|
+
import { type BuilderTeamAction, type BuilderTeamState } from "document-models/builder-team/index.js";
|
|
3
|
+
import type { DB } from "./schema.js";
|
|
4
4
|
export declare class BuilderTeamHandlers {
|
|
5
5
|
private db;
|
|
6
6
|
private dbHelpers;
|
|
@@ -13,6 +13,7 @@ export declare class BuilderTeamHandlers {
|
|
|
13
13
|
private handleUpdateSocials;
|
|
14
14
|
private handleAddMember;
|
|
15
15
|
private handleRemoveMember;
|
|
16
|
+
private handleUpdateMemberInfo;
|
|
16
17
|
private handleAddSpace;
|
|
17
18
|
private handleDeleteSpace;
|
|
18
19
|
private handleUpdateSpaceInfo;
|
|
@@ -31,6 +31,9 @@ export class BuilderTeamHandlers {
|
|
|
31
31
|
case "REMOVE_MEMBER":
|
|
32
32
|
await this.handleRemoveMember(documentId, action, state);
|
|
33
33
|
break;
|
|
34
|
+
case "UPDATE_MEMBER_INFO":
|
|
35
|
+
await this.handleUpdateMemberInfo(documentId, action, state);
|
|
36
|
+
break;
|
|
34
37
|
// Spaces operations
|
|
35
38
|
case "ADD_SPACE":
|
|
36
39
|
await this.handleAddSpace(documentId, action, state);
|
|
@@ -99,6 +102,11 @@ export class BuilderTeamHandlers {
|
|
|
99
102
|
return;
|
|
100
103
|
// Find member in state to get full details
|
|
101
104
|
const member = state.members.find((m) => m.id === action.input.id);
|
|
105
|
+
// If member not found in state, skip
|
|
106
|
+
if (!member) {
|
|
107
|
+
console.warn(`Member ${action.input.id} not found in state`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
102
110
|
const memberExists = await this.dbHelpers.memberExists(documentId, action.input.id);
|
|
103
111
|
if (!memberExists) {
|
|
104
112
|
await this.db
|
|
@@ -106,10 +114,10 @@ export class BuilderTeamHandlers {
|
|
|
106
114
|
.values({
|
|
107
115
|
id: action.input.id,
|
|
108
116
|
builder_team_id: documentId,
|
|
109
|
-
eth_address: member
|
|
110
|
-
phid: member
|
|
111
|
-
name: member
|
|
112
|
-
profile_image: member
|
|
117
|
+
eth_address: member.ethAddress || "",
|
|
118
|
+
phid: member.phid || null,
|
|
119
|
+
name: member.name || null,
|
|
120
|
+
profile_image: member.profileImage || null,
|
|
113
121
|
created_at: new Date(),
|
|
114
122
|
})
|
|
115
123
|
.execute();
|
|
@@ -119,10 +127,10 @@ export class BuilderTeamHandlers {
|
|
|
119
127
|
await this.db
|
|
120
128
|
.updateTable("builder_team_members")
|
|
121
129
|
.set({
|
|
122
|
-
eth_address: member
|
|
123
|
-
phid: member
|
|
124
|
-
name: member
|
|
125
|
-
profile_image: member
|
|
130
|
+
eth_address: member.ethAddress || "",
|
|
131
|
+
phid: member.phid || null,
|
|
132
|
+
name: member.name || null,
|
|
133
|
+
profile_image: member.profileImage || null,
|
|
126
134
|
})
|
|
127
135
|
.where("id", "=", action.input.id)
|
|
128
136
|
.where("builder_team_id", "=", documentId)
|
|
@@ -135,9 +143,43 @@ export class BuilderTeamHandlers {
|
|
|
135
143
|
await this.db
|
|
136
144
|
.deleteFrom("builder_team_members")
|
|
137
145
|
.where("builder_team_id", "=", documentId)
|
|
138
|
-
.where("
|
|
146
|
+
.where("id", "=", action.input.id)
|
|
139
147
|
.execute();
|
|
140
148
|
}
|
|
149
|
+
async handleUpdateMemberInfo(documentId, action, state) {
|
|
150
|
+
if (!action.input.id)
|
|
151
|
+
return;
|
|
152
|
+
// Find member in state to get full details
|
|
153
|
+
const member = state.members.find((m) => m.id === action.input.id);
|
|
154
|
+
// If member not found in state, skip
|
|
155
|
+
if (!member) {
|
|
156
|
+
console.warn(`Member ${action.input.id} not found in state for update`);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const updates = {};
|
|
160
|
+
// Update fields from state
|
|
161
|
+
if (member.ethAddress !== undefined) {
|
|
162
|
+
updates.eth_address = member.ethAddress || "";
|
|
163
|
+
}
|
|
164
|
+
if (member.phid !== undefined) {
|
|
165
|
+
updates.phid = member.phid;
|
|
166
|
+
}
|
|
167
|
+
if (member.name !== undefined) {
|
|
168
|
+
updates.name = member.name;
|
|
169
|
+
}
|
|
170
|
+
if (member.profileImage !== undefined) {
|
|
171
|
+
updates.profile_image = member.profileImage;
|
|
172
|
+
}
|
|
173
|
+
// Only update if there are actual changes
|
|
174
|
+
if (Object.keys(updates).length > 0) {
|
|
175
|
+
await this.db
|
|
176
|
+
.updateTable("builder_team_members")
|
|
177
|
+
.set(updates)
|
|
178
|
+
.where("id", "=", action.input.id)
|
|
179
|
+
.where("builder_team_id", "=", documentId)
|
|
180
|
+
.execute();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
141
183
|
// Spaces operations
|
|
142
184
|
async handleAddSpace(documentId, action, state) {
|
|
143
185
|
await this.dbHelpers.ensureBuilderAccountExistsAndIsNotdeleted(documentId);
|
|
@@ -171,7 +213,8 @@ export class BuilderTeamHandlers {
|
|
|
171
213
|
if (action.input.title !== undefined && action.input.title !== null) {
|
|
172
214
|
updates.title = action.input.title;
|
|
173
215
|
}
|
|
174
|
-
if (action.input.description !== undefined &&
|
|
216
|
+
if (action.input.description !== undefined &&
|
|
217
|
+
action.input.description !== null) {
|
|
175
218
|
updates.description = action.input.description;
|
|
176
219
|
}
|
|
177
220
|
// Only update if there are actual changes
|
|
@@ -248,7 +291,8 @@ export class BuilderTeamHandlers {
|
|
|
248
291
|
if (action.input.title !== undefined && action.input.title !== null) {
|
|
249
292
|
updates.title = action.input.title;
|
|
250
293
|
}
|
|
251
|
-
if (action.input.description !== undefined &&
|
|
294
|
+
if (action.input.description !== undefined &&
|
|
295
|
+
action.input.description !== null) {
|
|
252
296
|
updates.description = action.input.description;
|
|
253
297
|
}
|
|
254
298
|
if (action.input.github !== undefined && action.input.github !== null) {
|
|
@@ -257,7 +301,8 @@ export class BuilderTeamHandlers {
|
|
|
257
301
|
if (action.input.npm !== undefined && action.input.npm !== null) {
|
|
258
302
|
updates.npm_url = action.input.npm;
|
|
259
303
|
}
|
|
260
|
-
if (action.input.vetraDriveUrl !== undefined &&
|
|
304
|
+
if (action.input.vetraDriveUrl !== undefined &&
|
|
305
|
+
action.input.vetraDriveUrl !== null) {
|
|
261
306
|
updates.vetra_drive_url = action.input.vetraDriveUrl;
|
|
262
307
|
}
|
|
263
308
|
if (action.input.spaceId !== undefined && action.input.spaceId !== null) {
|