type UseServerStoreProps<Data> = {
name: string;
itemId: string;
getFn: () => Promise<Data>;
demoData: Data;
};
export function useServerStore<Data>(props: UseServerStoreProps<Data>) {
const { name, itemId, getFn, demoData } = props;
const demo = useDemo();
const user = useUser();
const userId = useMemo(() => {
if (demo.isDemo) return 'demo';
if (!user.data.user) throw new Error('useServerStore called without user');
return user.data.user.id;
}, [demo.isDemo, user.data.user]);
const queryKey = ['store', name, userId, itemId, 'server'];
const query = useQuery({
queryKey,
async queryFn() {
if (demo.isDemo) return demoData;
return getFn();
},
suspense: true,
meta: storeMeta,
networkMode: 'offlineFirst',
staleTime: isDev ? ms('1 minute') : ms('1 day'),
cacheTime: ms('30 days'),
// enabled: false,
});
// ...
if (!query.data) throw new Error('suspense not triggered');
return {
data: query.data,
query,
};
}
type UseServerStoreProps<Data> = {
name: string;
itemId: string;
getFn: () => Promise<Data>;
demoData: Data;
};
export function useServerStore<Data>(props: UseServerStoreProps<Data>) {
const { name, itemId, getFn, demoData } = props;
const demo = useDemo();
const user = useUser();
const userId = useMemo(() => {
if (demo.isDemo) return 'demo';
if (!user.data.user) throw new Error('useServerStore called without user');
return user.data.user.id;
}, [demo.isDemo, user.data.user]);
const queryKey = ['store', name, userId, itemId, 'server'];
const query = useQuery({
queryKey,
async queryFn() {
if (demo.isDemo) return demoData;
return getFn();
},
suspense: true,
meta: storeMeta,
networkMode: 'offlineFirst',
staleTime: isDev ? ms('1 minute') : ms('1 day'),
cacheTime: ms('30 days'),
// enabled: false,
});
// ...
if (!query.data) throw new Error('suspense not triggered');
return {
data: query.data,
query,
};
}