on master help sign in
reconfiguring lookup scry to filter already indexed listings from add apps/groups
commit95653ff2d486f78c1fd18387f898575c740837e3 authorHunter Miller <hunter@hmiller.dev> dateSun 17 Jul 2022, 23:37 (4 years ago) parent55e85fe
8 files changed+67−35
desk/app/sphinx.hoon+12−4 desk/desk.docket-0+1−1 ui/src/components/PostOptions.tsx+1−1 ui/src/manage-listings/Apps.tsx+12−9 ui/src/manage-listings/Groups.tsx+12−8 ui/src/pages/Search.tsx+3−3 ui/src/state/apps.ts+13−2 ui/src/state/groups.ts+13−7
desk/app/sphinx.hoon+12−4
@@ -178,17 +178,25 @@
178178 [%x %published ~]
179179 ``directory+!>(published)
180180 ::
181− [%x %lookup @ @ @ @ ~]
181+ [%x %lookup @ @ @ $@(~ [@ ~])]
182182 =- ``search+!>(-)
183183 ^- search:s
184184 =/ filter
185185 %+ rash i.t.t.path
186186 (perk [%app %group %content %other %all ~])
187− =/ term `@t`(slav %t i.t.t.t.path)
188− =/ start (slav %ud i.t.t.t.t.path)
189− =/ limit (slav %ud i.t.t.t.t.t.path)
187+ =/ start (slav %ud i.t.t.t.path)
188+ =/ limit (slav %ud i.t.t.t.t.path)
189+ =/ term
190+ ?^ t.t.t.t.t.path
191+ `@t`(slav %t i.t.t.t.t.t.path)
192+ ~
190193 :: expects encoded @t values)
191194 =/ all
195+ ?~ term
196+ %+ skim
197+ ~(val by directory)
198+ |= =listing:s
199+ |(=(filter %all) =(filter type.post.listing))
192200 %+ skim
193201 %- get-listings
194202 %- get-hashes
desk/desk.docket-0+1−1
@@ -4,7 +4,7 @@
44 image+'https://nyc3.digitaloceanspaces.com/hmillerdev/nocsyx-lassul/2022.7.16..04.35.22-sphinx-web-shifted.svg'
55 glob-http+['https://nyc3.digitaloceanspaces.com/hmillerdev/sphinx/glob-0vb8b8l.rmk5k.kmfli.fbeuf.c82vn.glob' 0vb8b8l.rmk5k.kmfli.fbeuf.c82vn]
66 base+'sphinx'
7− version+[0 0 2]
7+ version+[0 1 0]
88 website+'https://github.com'
99 license+'MIT'
1010==
ui/src/components/PostOptions.tsx+1−1
@@ -16,7 +16,7 @@ export const PostOptions = ({ options, emptyMessage, className }: PostOptionsPro
1616 if (options.length === 0) {
1717 return (
1818 <div>
19− <h2 className='text-xl font-semibold'>{emptyMessage}</h2>
19+ <h2 className='text-lavender'>{emptyMessage}</h2>
2020 </div>
2121 )
2222 }
ui/src/manage-listings/Apps.tsx+12−9
@@ -29,7 +29,6 @@ export const Apps = () => {
2929 }, [apps, options, setValue]);
3030
3131 const onSubmit = useCallback((values: PostOptionsForm) => {
32− debugger;
3332 api.poke<Declare[]>({
3433 app: 'sphinx',
3534 mark: 'declarations',
@@ -46,21 +45,25 @@ export const Apps = () => {
4645 <>
4746 <header className='flex items-center'>
4847 <h1 className='text-2xl font-semibold'>Add Apps</h1>
49− <button className='p-2 ml-auto text-sm underline font-semibold' onClick={toggleAll}>
50− {options.length !== apps.length && 'select all'}
51− {options.length === apps.length && 'deselect all'}
52− </button>
48+ {apps.length > 0 && (
49+ <button className='p-2 ml-auto text-sm underline font-semibold' onClick={toggleAll}>
50+ {options.length !== apps.length && 'select all'}
51+ {options.length === apps.length && 'deselect all'}
52+ </button>
53+ )}
5354 </header>
5455 <FormProvider {...form}>
5556 <form onSubmit={handleSubmit(onSubmit)}>
56− <PostOptions options={apps} emptyMessage="No apps found" />
57+ <PostOptions options={apps} emptyMessage="All apps already indexed" />
5758 <div className='flex justify-between border-t border-zinc-300 py-3 mt-6'>
5859 <Link to="/search" className='flex items-center rounded-lg text-base font-semibold text-rosy bg-rosy/30 border-2 border-transparent hover:border-rosy leading-none py-2 px-3 transition-colors'>
5960 Back to Search
6061 </Link>
61− <button type="submit" className='flex items-center rounded-lg text-base font-semibold text-linen bg-rosy disabled:bg-zinc-200 disabled:text-zinc-400 disabled:border-transparent border-2 border-transparent hover:border-linen/60 leading-none py-2 px-3 transition-colors' disabled={options.length === 0}>
62− Publish
63− </button>
62+ {apps.length > 0 && (
63+ <button type="submit" className='flex items-center rounded-lg text-base font-semibold text-linen bg-rosy disabled:bg-zinc-200 disabled:text-zinc-400 disabled:border-transparent border-2 border-transparent hover:border-linen/60 leading-none py-2 px-3 transition-colors' disabled={options.length === 0}>
64+ Publish
65+ </button>
66+ )}
6467 </div>
6568 </form>
6669 </FormProvider>
ui/src/manage-listings/Groups.tsx+12−8
@@ -52,21 +52,25 @@ export const Groups = () => {
5252 <>
5353 <header className='flex items-center'>
5454 <h1 className='text-2xl font-semibold'>Add Groups</h1>
55− <button className='p-2 ml-auto text-sm underline font-semibold' onClick={toggleAll}>
56− {options.length !== groups.length && 'select all'}
57− {options.length === groups.length && 'deselect all'}
58− </button>
55+ {groups.length > 0 && (
56+ <button className='p-2 ml-auto text-sm underline font-semibold' onClick={toggleAll}>
57+ {options.length !== groups.length && 'select all'}
58+ {options.length === groups.length && 'deselect all'}
59+ </button>
60+ )}
5961 </header>
6062 <FormProvider {...form}>
6163 <form onSubmit={handleSubmit(onSubmit)}>
62− <PostOptions options={groups} emptyMessage="No groups found" />
64+ <PostOptions options={groups} emptyMessage="All groups already indexed" />
6365 <div className='flex justify-between border-t border-zinc-300 py-3 mt-6'>
6466 <Link to="/search" className='flex items-center rounded-lg text-base font-semibold text-rosy bg-rosy/30 border-2 border-transparent hover:border-rosy leading-none py-2 px-3 transition-colors'>
6567 Back to Search
6668 </Link>
67− <button type="submit" className='flex items-center rounded-lg text-base font-semibold text-linen bg-rosy disabled:bg-zinc-200 disabled:text-zinc-400 disabled:border-transparent border-2 border-transparent hover:border-linen/60 leading-none py-2 px-3 transition-colors' disabled={options.length === 0}>
68− Publish
69− </button>
69+ {groups.length > 0 && (
70+ <button type="submit" className='flex items-center rounded-lg text-base font-semibold text-linen bg-rosy disabled:bg-zinc-200 disabled:text-zinc-400 disabled:border-transparent border-2 border-transparent hover:border-linen/60 leading-none py-2 px-3 transition-colors' disabled={options.length === 0}>
71+ Publish
72+ </button>
73+ )}
7074 </div>
7175 </form>
7276 </FormProvider>
ui/src/pages/Search.tsx+3−3
@@ -40,9 +40,9 @@ export const Search = () => {
4040 const size = parseInt(limit || '10', 10);
4141 const pageInt = parseInt(page || '1', 10) - 1;
4242 const start = pageInt * size;
43− const { data } = useQuery<unknown, unknown, SearchType>(`lookup-${selected}-${lookup}-${size}-${start}`, () => api.scry<SearchType>({
43+ const { data } = useQuery<unknown, unknown, SearchType>(`lookup-${selected}-${size}-${start}-${lookup}`, () => api.scry<SearchType>({
4444 app: 'sphinx',
45− path: `/lookup/${selected}/${encodeLookup(lookup)}/${start}/${size}`
45+ path: `/lookup/${selected}/${start}/${size}/${encodeLookup(lookup)}`
4646 }), {
4747 enabled: !!lookup,
4848 keepPreviousData: true
@@ -56,7 +56,7 @@ export const Search = () => {
5656 })
5757 }, {
5858 onSuccess: () => {
59− queryClient.invalidateQueries(`lookup-${selected}-${lookup}-${size}-${start}`)
59+ queryClient.invalidateQueries(`lookup-${selected}-${size}-${start}-${lookup}`)
6060 }
6161 });
6262
ui/src/state/apps.ts+13−2
@@ -1,7 +1,7 @@
11import { Charge, ChargeUpdateInitial, getVats, scryCharges, Vat, Vats } from "@urbit/api";
22import { useQuery } from "react-query"
33import api from "../api";
4−import { Post } from "../types/sphinx";
4+import { Post, Search } from "../types/sphinx";
55
66function getAppPost(app: string, vat: Vat, charge: Charge): Post {
77 const ship = vat.arak.rail?.publisher || vat.arak.rail?.ship || `~${window.ship}`;
@@ -19,6 +19,17 @@ function getAppPost(app: string, vat: Vat, charge: Charge): Post {
1919export const useApps = () => {
2020 const { data: vats } = useQuery('vats', () => api.scry<Vats>(getVats));
2121 const { data: charges } = useQuery('charges', () => api.scry<ChargeUpdateInitial>(scryCharges));
22+ const { data } = useQuery('app-listings', () => api.scry<Search>({
23+ app: 'sphinx',
24+ path: '/lookup/app/0/999'
25+ }));
2226
23− return vats && charges ? Object.entries(charges.initial).filter(([k]) => k in vats).map(([k,v]) => ({ key: k, post: getAppPost(k, vats[k], v) })) : [];
27+ if (!vats || !charges || !data) {
28+ return [];
29+ }
30+
31+ return Object.entries(charges.initial)
32+ .filter(([k]) => k in vats)
33+ .map(([k,v]) => ({ key: k, post: getAppPost(k, vats[k], v) }))
34+ .filter(({ post }) => !data.listings.some(l => l.post.link === post.link || l.post.title === post.title));
2435}
ui/src/state/groups.ts+13−7
@@ -1,25 +1,31 @@
11import { GroupUpdateInitial, MetadataUpdateInitial } from "@urbit/api";
2−import { useQuery, useQueryClient } from "react-query"
2+import { useQuery } from "react-query"
33import api from "../api"
4−import { PostOption } from "../types/sphinx";
4+import { PostOption, PostType, Search } from "../types/sphinx";
55
66
77
88export const useGroups = (): PostOption[] => {
99 const { data } = useQuery('metadata', () => api.subscribeOnce<{ 'metadata-update': MetadataUpdateInitial }>('metadata-store', '/all'));
1010 const { data: groupData } = useQuery('groups', () => api.subscribeOnce<{ groupUpdate: GroupUpdateInitial }>('group-store', '/groups'));
11+ const { data: d } = useQuery('group-listings', () => api.scry<Search>({
12+ app: 'sphinx',
13+ path: '/lookup/group/0/999'
14+ }));
1115
12− //web+urbitgraph://group/~nocsyx-lassul/celestial-systems
13− console.log(data, groupData)
16+ if (!data || !groupData || !d) {
17+ return [];
18+ }
1419
15− return data && groupData ? Object.entries(data['metadata-update'].associations)
20+ return Object.entries(data['metadata-update'].associations)
1621 .filter(([k,v]) => v['app-name'] === 'groups' && 'open' in (groupData.groupUpdate.initial[v.resource]?.policy || {}))
1722 .map(([k,v]) => ({ key: k, post: {
18− type: 'group',
23+ type: 'group' as PostType,
1924 title: v.metadata.title,
2025 link: v.group.replace('/ship/', 'web+urbitgraph://group/'),
2126 image: v.metadata.picture,
2227 description: v.metadata.description,
2328 tags: ['group']
24− }})) : [];
29+ }}))
30+ .filter(({ post }) => !d.listings.some(l => l.post.link === post.link || l.post.title === post.title));
2531}