your personal website on atproto - mirror
blento.app
1import { getRecord, listRecords, parseUri } from '$lib/atproto';
2import type { CardDefinition } from '../types';
3import StandardSiteDocumentListCard from './StandardSiteDocumentListCard.svelte';
4
5export const StandardSiteDocumentListCardDefinition = {
6 type: 'publicationList',
7 contentComponent: StandardSiteDocumentListCard,
8 createNew: (card) => {
9 card.w = 4;
10 card.mobileW = 8;
11 card.mobileH = 6;
12 },
13
14 loadData: async (items, { did }) => {
15 const records = await listRecords({ did, collection: 'site.standard.document' });
16
17 const publications: Record<string, string> = {};
18 for (const record of records) {
19 const site = record.value.site as string;
20
21 if (site.startsWith('at://')) {
22 if (!publications[site]) {
23 const siteParts = parseUri(site);
24
25 if (!siteParts) continue;
26
27 const publicationRecord = await getRecord({
28 did: siteParts.repo as `did:${string}:${string}`,
29 collection: siteParts.collection!,
30 rkey: siteParts.rkey
31 });
32
33 publications[site] = publicationRecord.value.url as string;
34 }
35
36 record.value.href = publications[site] + record.value.path;
37 } else {
38 record.value.href = site + record.value.path;
39 }
40 }
41
42 return records;
43 },
44
45 sidebarButtonText: 'site.standard.document list'
46} as CardDefinition & { type: 'site.standard.document list' };