@@ -1,25 +1,31 @@
1import { GroupUpdateInitial, MetadataUpdateInitial } from "@urbit/api";
1import { GroupUpdateInitial, MetadataUpdateInitial } from "@urbit/api";
2−import { useQuery, useQueryClient } from "react-query"
2+import { useQuery } from "react-query"
3import api from "../api"
3import api from "../api"
4−import { PostOption } from "../types/sphinx";
4+import { PostOption, PostType, Search } from "../types/sphinx";
8export const useGroups = (): PostOption[] => {
8export const useGroups = (): PostOption[] => {
9 const { data } = useQuery('metadata', () => api.subscribeOnce<{ 'metadata-update': MetadataUpdateInitial }>('metadata-store', '/all'));
9 const { data } = useQuery('metadata', () => api.subscribeOnce<{ 'metadata-update': MetadataUpdateInitial }>('metadata-store', '/all'));
10 const { data: groupData } = useQuery('groups', () => api.subscribeOnce<{ groupUpdate: GroupUpdateInitial }>('group-store', '/groups'));
10 const { data: groupData } = useQuery('groups', () => api.subscribeOnce<{ groupUpdate: GroupUpdateInitial }>('group-store', '/groups'));
11+ const { data: d } = useQuery('group-listings', () => api.scry<Search>({
13+ path: '/lookup/group/0/999'
12− //web+urbitgraph://group/~nocsyx-lassul/celestial-systems
13− console.log(data, groupData)
16+ if (!data || !groupData || !d) {
15− return data && groupData ? Object.entries(data['metadata-update'].associations)
20+ return Object.entries(data['metadata-update'].associations)
16 .filter(([k,v]) => v['app-name'] === 'groups' && 'open' in (groupData.groupUpdate.initial[v.resource]?.policy || {}))
21 .filter(([k,v]) => v['app-name'] === 'groups' && 'open' in (groupData.groupUpdate.initial[v.resource]?.policy || {}))
17 .map(([k,v]) => ({ key: k, post: {
22 .map(([k,v]) => ({ key: k, post: {
18− type: 'group',
23+ type: 'group' as PostType,
19 title: v.metadata.title,
24 title: v.metadata.title,
20 link: v.group.replace('/ship/', 'web+urbitgraph://group/'),
25 link: v.group.replace('/ship/', 'web+urbitgraph://group/'),
21 image: v.metadata.picture,
26 image: v.metadata.picture,
22 description: v.metadata.description,
27 description: v.metadata.description,
23 tags: ['group']
28 tags: ['group']
30+ .filter(({ post }) => !d.listings.some(l => l.post.link === post.link || l.post.title === post.title));