a homebrewed DnD campaign based in the Honkai: Star Rail universe
hsr honkaistarrail dnd
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

migrate spells to use remote functions

+63 -35
-16
app/src/routes/(app)/abilities/+page.server.ts
··· 1 - import { db } from '$server/db' 2 - import { SpellRepository } from '$server/db/repos/spell' 3 - import { definePageMeta } from '$ui/page-meta' 4 - import type { PageServerLoad } from './$types' 5 - 6 - export const load: PageServerLoad = async () => { 7 - const spells = new SpellRepository(db) 8 - const querySpells = await spells.getSpellsBy() 9 - 10 - return { 11 - meta: definePageMeta({ 12 - title: 'Abilities', 13 - }), 14 - spells: querySpells, 15 - } 16 - }
+5 -6
app/src/routes/(app)/abilities/+page.svelte app/src/routes/(app)/spells/+page.svelte
··· 4 4 import { Breadcrumb } from '$ui/layout/breadcrumb' 5 5 import { PageLayout } from '$ui/layout/page-layout' 6 6 import NoEntriesFound from '../NoEntriesFound.svelte' 7 - import type { PageProps } from './$types' 7 + import { getPageMeta, queryBreadcrumb, querySpells } from './page.remote' 8 8 9 - let { data }: PageProps = $props() 10 - const { meta, spells } = $derived(data) 9 + const meta = await getPageMeta() 10 + const spells = await querySpells() 11 + const paths = await queryBreadcrumb() 11 12 </script> 12 13 13 14 <svelte:head> 14 15 <PageMeta {...meta} /> 15 16 </svelte:head> 16 17 17 - <Breadcrumb links={[ 18 - { path: '/abilities', text: 'Abilities' } 19 - ]} /> 18 + <Breadcrumb links={paths.root} /> 20 19 21 20 <PageLayout 22 21 display="grid"
-10
app/src/routes/(app)/abilities/new/+page.server.ts
··· 1 - import { definePageMeta } from '$ui/page-meta' 2 - import type { PageServerLoad } from './$types' 3 - 4 - export const load: PageServerLoad = async () => { 5 - return { 6 - meta: definePageMeta({ 7 - title: 'Create a new ability entry', 8 - }), 9 - } 10 - }
+7 -3
app/src/routes/(app)/abilities/new/+page.svelte app/src/routes/(app)/spells/new/+page.svelte
··· 4 4 import { Heading, HeadingGroup } from '$ui/components/heading' 5 5 import { Field } from '$ui/form/field' 6 6 import { TextAreaInput, TextInput } from '$ui/form/text-input' 7 + import { Breadcrumb } from '$ui/layout/breadcrumb' 7 8 import { PageLayout } from '$ui/layout/page-layout' 8 - import type { PageProps } from './$types' 9 + import { getPageMeta } from './page.remote' 10 + import { queryBreadcrumb } from '../page.remote' 9 11 10 - let { data }: PageProps = $props() 11 - const { meta } = $derived(data) 12 + const meta = await getPageMeta() 13 + const paths = await queryBreadcrumb() 12 14 </script> 13 15 14 16 <svelte:head> 15 17 <PageMeta {...meta} /> 16 18 </svelte:head> 19 + 20 + <Breadcrumb links={paths.newEntry} /> 17 21 18 22 <PageLayout display="flex" direction="col" class="gap-8 mx-auto" items="stretch"> 19 23 <HeadingGroup>
+23
app/src/routes/(app)/spells/new/page.remote.ts
··· 1 + import { form, prerender } from '$app/server' 2 + import { db } from '$server/db' 3 + import { SpellRepository, zSpellSchema } from '$server/db/repos/spell' 4 + import { definePageMeta } from '$ui/page-meta' 5 + 6 + export const getPageMeta = prerender(() => 7 + definePageMeta({ 8 + title: 'Create a new spell entry', 9 + }), 10 + ) 11 + 12 + const schema = zSpellSchema.toInsert.omit({ 13 + updatedAt: true, 14 + createdAt: true, 15 + duration: true, 16 + damageId: true, 17 + damageValue: true, 18 + materialComponents: true, 19 + }) 20 + export const createSpell = form(schema, async (model) => { 21 + const spellRepo = new SpellRepository(db) 22 + // return await spellRepo.createSpell(model) 23 + })
+28
app/src/routes/(app)/spells/page.remote.ts
··· 1 + import { prerender, query } from '$app/server' 2 + import { db } from '$server/db' 3 + import { SpellRepository } from '$server/db/repos/spell' 4 + import { definePaths } from '$ui/layout/breadcrumb' 5 + import { definePageMeta } from '$ui/page-meta' 6 + 7 + export const getPageMeta = prerender(() => 8 + definePageMeta({ 9 + title: 'Spells', 10 + }), 11 + ) 12 + 13 + export const querySpells = query(async () => { 14 + const spellRepo = new SpellRepository(db) 15 + const querySpells = await spellRepo.getSpellsBy() 16 + 17 + return querySpells 18 + }) 19 + 20 + export const queryBreadcrumb = query(async () => { 21 + const root = { path: '/spells', text: 'Spells' } 22 + const newEntry = { path: '/spells/new', text: 'Create a new spell entry' } 23 + 24 + return definePaths({ 25 + root: [root], 26 + newEntry: [root, newEntry], 27 + }) 28 + })