upend/webui/src/lib/entity.ts

54 lines
1.2 KiB
TypeScript

// import { useSWR } from "sswr";
import { derived, type Readable } from 'svelte/store';
import { UpListing, UpObject } from '@upnd/upend';
import type { EntityInfo, EntityListing, ListingResult } from '@upnd/upend/types';
import { useSWR } from '$lib/util/fetch';
import api from './api';
import debug from 'debug';
const dbg = debug('kestrel:lib');
export function useEntity(address: string) {
const { data, error, revalidate } = useSWR<EntityListing, unknown>(
`${api.apiUrl}/obj/${address}`
);
const entity: Readable<UpObject | undefined> = derived(data, ($listing) => {
if ($listing) {
const listing = new UpListing($listing.entries);
return listing.getObject(address);
}
});
const entityInfo: Readable<EntityInfo | undefined> = derived(data, ($listing) => {
if ($listing) {
return $listing.entity;
}
});
return {
entity,
entityInfo,
error,
revalidate
};
}
export function query(query: string) {
dbg(`Querying: ${query}`);
const { data, error, revalidate } = useSWR<ListingResult, unknown>(`${api.apiUrl}/query`, {
method: 'POST',
body: query
});
const result = derived(data, ($values) => {
return $values ? new UpListing($values) : undefined;
});
return {
result,
error,
revalidate
};
}