👽️ Updated legacy svelte components to runes
All checks were successful
Build and deploy website / build (push) Successful in 1m7s
All checks were successful
Build and deploy website / build (push) Successful in 1m7s
This commit is contained in:
parent
7c5b228e59
commit
04f279dab3
@ -8,6 +8,7 @@
|
||||
"myLinks": "My links",
|
||||
"myProjects": "My projects",
|
||||
"uses": "Uses",
|
||||
"hardware": "Hardware",
|
||||
"accessories": "Accessories",
|
||||
"sourceCode": "Source code",
|
||||
"createdAt": "Created at",
|
||||
|
@ -8,6 +8,7 @@
|
||||
"myLinks": "Mine lenker",
|
||||
"myProjects": "Mine prosjekter",
|
||||
"uses": "Uses",
|
||||
"hardware": "Maskinvare",
|
||||
"accessories": "Tilbehør",
|
||||
"sourceCode": "Kildekode",
|
||||
"createdAt": "Opprettet",
|
||||
|
@ -8,6 +8,7 @@
|
||||
"build": "paraglide-js compile --project ./project.inlang --outdir ./src/paraglide && astro check && astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro",
|
||||
"type-check": "astro check",
|
||||
"postinstall": "paraglide-js compile --project ./project.inlang --outdir ./src/paraglide",
|
||||
"format": "prettier --write \"./src/**/*.{js,mjs,ts,astro,svelte,css,md,json}\"",
|
||||
"watch-messages": "paraglide-js compile --watch --project ./project.inlang --outdir ./src/paraglide"
|
||||
|
@ -1,20 +1,23 @@
|
||||
<script lang="ts">
|
||||
import { createEventDispatcher } from "svelte"
|
||||
|
||||
// TODO move to types?
|
||||
interface Option {
|
||||
key: string
|
||||
interface Option<Key> {
|
||||
key: Key
|
||||
value: string
|
||||
}
|
||||
|
||||
export let options: Option[] = []
|
||||
// TODO bind data instead of dispatching events
|
||||
const dispatch = createEventDispatcher<{ change: string }>()
|
||||
interface Props<Key = string> {
|
||||
selected: Key
|
||||
options?: Option<Key>[]
|
||||
class?: string
|
||||
}
|
||||
|
||||
let { selected = $bindable(), options = [], class: clazz }: Props = $props()
|
||||
</script>
|
||||
|
||||
<select
|
||||
class="select select-bordered w-full max-w-xs ${$$restProps.class}"
|
||||
on:change={(value) => dispatch("change", value.currentTarget.value)}
|
||||
bind:value={selected}
|
||||
class="select select-bordered w-full max-w-xs ${clazz}"
|
||||
>
|
||||
{#each options as { key, value }}
|
||||
<option value={key}>{value}</option>
|
||||
|
@ -2,32 +2,32 @@
|
||||
import Select from "./Select.svelte"
|
||||
import * as m from "@/paraglide/messages"
|
||||
import CollapseList from "@/components/collapse/CollapseList.svelte"
|
||||
import type { CollectionEntry } from "astro:content"
|
||||
|
||||
export let uses: any[] = []
|
||||
interface Props {
|
||||
uses: CollectionEntry<'uses'>[]
|
||||
}
|
||||
|
||||
const { uses }: Props = $props()
|
||||
|
||||
const hardwareOptions = uses.map((item) => ({
|
||||
key: item.id,
|
||||
value: item.data.title
|
||||
}))
|
||||
|
||||
let selectedHardwareKey: string = uses[0].id
|
||||
$: selectedHardware = uses.find((item) => item.id === selectedHardwareKey)!
|
||||
|
||||
// TODO bind to component
|
||||
// TODO onChange not called
|
||||
function onChange({ detail }: CustomEvent<string>) {
|
||||
selectedHardwareKey = detail
|
||||
}
|
||||
let selectedHardwareKey = $state(uses[0].id)
|
||||
let selectedHardware = $derived(uses.find((item) => item.id === selectedHardwareKey)!)
|
||||
|
||||
</script>
|
||||
|
||||
<div class="px-2 max-w-[750px] sm:min-w-[750px] w-screen">
|
||||
<h1 class="text-center">{m.uses()}</h1>
|
||||
<div>
|
||||
<Select options={hardwareOptions} on:change={onChange} class="mx-auto w-max" />
|
||||
<Select options={hardwareOptions} bind:selected={selectedHardwareKey} class="mx-auto w-max" />
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<CollapseList items={selectedHardware.data.hardware} title={m.uses()} />
|
||||
<CollapseList items={selectedHardware.data.hardware} title={m.hardware()} />
|
||||
<div class="my-2"></div>
|
||||
{#if (selectedHardware.data.accessories)}
|
||||
<CollapseList items={selectedHardware.data.accessories} title={m.accessories()} />
|
||||
|
@ -1,10 +1,16 @@
|
||||
<script lang="ts">
|
||||
export let title: string = ""
|
||||
|
||||
interface Props {
|
||||
title?: string
|
||||
children: any
|
||||
}
|
||||
|
||||
const { title = "", children }: Props = $props()
|
||||
</script>
|
||||
|
||||
<details class="collapse collapse-arrow bg-base-200">
|
||||
<summary class="collapse-title text-xl font-medium">{title}</summary>
|
||||
<div class="collapse-content">
|
||||
<slot />
|
||||
{@render children()}
|
||||
</div>
|
||||
</details>
|
@ -1,9 +1,12 @@
|
||||
<script lang="ts">
|
||||
import Collapse from "@/components/collapse/Collapse.svelte"
|
||||
|
||||
export let items: string[] = []
|
||||
export let title: string = ""
|
||||
interface Props {
|
||||
items?: string[]
|
||||
title?: string
|
||||
}
|
||||
|
||||
const { items = [], title = "" }: Props = $props()
|
||||
</script>
|
||||
|
||||
<Collapse title={title}>
|
||||
|
@ -8,5 +8,5 @@ const uses = await getCollection("uses")
|
||||
---
|
||||
|
||||
<Layout title="Hardware" class="mx-auto max-w-[750px]">
|
||||
<UsesPage server:defer uses={uses} />
|
||||
<UsesPage client:load uses={uses} />
|
||||
</Layout>
|
||||
|
Loading…
x
Reference in New Issue
Block a user