Skip to content

Commit 9b435d4

Browse files
committed
Add editorIds and memberIds arrays to the PublicSpace type returned by Space.findManyPublic() and `usePublicSpaces()
1 parent 53b6612 commit 9b435d4

3 files changed

Lines changed: 67 additions & 0 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@graphprotocol/hypergraph": minor
3+
---
4+
5+
Add `editorIds` and `memberIds` arrays to the `PublicSpace` type returned by `Space.findManyPublic()` and `usePublicSpaces()`.

packages/hypergraph/src/space/find-many-public.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ const spaceFields = `
2121
}
2222
}
2323
}
24+
editorsList {
25+
memberSpaceId
26+
}
27+
membersList {
28+
memberSpaceId
29+
}
2430
`;
2531

2632
const spacesQueryDocument = `
@@ -51,6 +57,8 @@ export const PublicSpaceSchema = EffectSchema.Struct({
5157
id: EffectSchema.String,
5258
name: EffectSchema.String,
5359
avatar: EffectSchema.optional(EffectSchema.String),
60+
editorIds: EffectSchema.Array(EffectSchema.String),
61+
memberIds: EffectSchema.Array(EffectSchema.String),
5462
});
5563

5664
export type PublicSpace = typeof PublicSpaceSchema.Type;
@@ -69,6 +77,12 @@ type SpacesQueryResult = {
6977
} | null;
7078
}[];
7179
} | null;
80+
editorsList?: {
81+
memberSpaceId: string;
82+
}[];
83+
membersList?: {
84+
memberSpaceId: string;
85+
}[];
7286
}[];
7387
};
7488

@@ -90,6 +104,18 @@ const getAvatarFromSpace = (space: SpaceQueryEntry) => {
90104
return undefined;
91105
};
92106

107+
const getEditorIdsFromSpace = (space: SpaceQueryEntry): string[] => {
108+
return (space.editorsList ?? [])
109+
.map((e) => e.memberSpaceId)
110+
.filter((id): id is string => typeof id === 'string');
111+
};
112+
113+
const getMemberIdsFromSpace = (space: SpaceQueryEntry): string[] => {
114+
return (space.membersList ?? [])
115+
.map((m) => m.memberSpaceId)
116+
.filter((id): id is string => typeof id === 'string');
117+
};
118+
93119
export const parseSpacesQueryResult = (queryResult: SpacesQueryResult) => {
94120
const data: PublicSpace[] = [];
95121
const invalidSpaces: Record<string, unknown>[] = [];
@@ -100,6 +126,8 @@ export const parseSpacesQueryResult = (queryResult: SpacesQueryResult) => {
100126
id: space.id,
101127
name: space.page?.name ?? undefined,
102128
avatar: getAvatarFromSpace(space),
129+
editorIds: getEditorIdsFromSpace(space),
130+
memberIds: getMemberIdsFromSpace(space),
103131
};
104132

105133
const decodedSpace = decodeSpace(rawSpace);

packages/hypergraph/test/space/find-many-public.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ const buildQuerySpace = ({
55
id = 'space-id',
66
name = 'Space name',
77
avatar,
8+
editorsList = [],
9+
membersList = [],
810
}: {
911
id?: string;
1012
name?: string | null;
1113
avatar?: string | null;
14+
editorsList?: { memberSpaceId: string }[];
15+
membersList?: { memberSpaceId: string }[];
1216
} = {}) => {
1317
return {
1418
id,
@@ -33,6 +37,8 @@ const buildQuerySpace = ({
3337
},
3438
],
3539
},
40+
editorsList,
41+
membersList,
3642
};
3743
};
3844

@@ -47,6 +53,8 @@ describe('parseSpacesQueryResult', () => {
4753
id: 'space-1',
4854
name: 'Space 1',
4955
avatar: 'https://example.com/avatar.png',
56+
editorIds: [],
57+
memberIds: [],
5058
},
5159
]);
5260
expect(invalidSpaces).toHaveLength(0);
@@ -61,6 +69,8 @@ describe('parseSpacesQueryResult', () => {
6169
{
6270
id: 'space-2',
6371
name: 'Space 2',
72+
editorIds: [],
73+
memberIds: [],
6474
},
6575
]);
6676
});
@@ -78,9 +88,33 @@ describe('parseSpacesQueryResult', () => {
7888
id: 'space-valid',
7989
name: 'Space valid',
8090
avatar: 'https://example.com/a.png',
91+
editorIds: [],
92+
memberIds: [],
8193
},
8294
]);
8395
expect(invalidSpaces).toHaveLength(1);
8496
expect(invalidSpaces[0]).toMatchObject({ id: 'space-invalid' });
8597
});
98+
99+
it('parses editorIds and memberIds', () => {
100+
const { data } = parseSpacesQueryResult({
101+
spaces: [
102+
buildQuerySpace({
103+
id: 'space-with-members',
104+
name: 'Space with members',
105+
editorsList: [{ memberSpaceId: 'editor-1' }, { memberSpaceId: 'editor-2' }],
106+
membersList: [{ memberSpaceId: 'member-1' }],
107+
}),
108+
],
109+
});
110+
111+
expect(data).toEqual([
112+
{
113+
id: 'space-with-members',
114+
name: 'Space with members',
115+
editorIds: ['editor-1', 'editor-2'],
116+
memberIds: ['member-1'],
117+
},
118+
]);
119+
});
86120
});

0 commit comments

Comments
 (0)