valda förkortningslistor i dashboard med genväg

lägg till knapp för dashboard i menyn
This commit is contained in:
botvid johansson 2025-04-24 09:11:04 +02:00
parent 0912ef544f
commit 705caa3cfa
3 changed files with 74 additions and 13 deletions

View File

@ -1,5 +1,6 @@
<script> <script>
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { db } from '../db/main';
import { importState } from '$lib/stores.svelte'; import { importState } from '$lib/stores.svelte';
import * as Accordion from '$lib/components/ui/accordion'; import * as Accordion from '$lib/components/ui/accordion';
import AccordionItem from '$lib/components/ui/accordion/accordion-item.svelte'; import AccordionItem from '$lib/components/ui/accordion/accordion-item.svelte';
@ -12,9 +13,15 @@
import { Badge } from '$lib/components/ui/badge'; import { Badge } from '$lib/components/ui/badge';
import { Separator } from '$lib/components/ui/separator'; import { Separator } from '$lib/components/ui/separator';
import Import from './import/import.svelte'; import Import from './import/import.svelte';
let {open} = $props(); let { open } = $props();
import { appState, shortforms } from '$lib/stores.svelte';
import default_shortforms from '../db/shortforms.se.json'; import default_shortforms from '../db/shortforms.se.json';
import { onMount } from 'svelte';
const openListSelection = () => {
appState.open = 'selectLists';
};
const importDefaultList = () => { const importDefaultList = () => {
importState.data = ''; importState.data = '';
importState.errors = []; importState.errors = [];
@ -24,6 +31,35 @@
console.log('goto import'); console.log('goto import');
goto('/import'); goto('/import');
}; };
const exampleShortformImport = `förk=förkortning
förkr=förkortningar
förka=förkorta
förkar=förkortar`;
let standardList = $state(0);
var subjectList = $state(0);
onMount(() => {
db.lists
.toArray()
.then((lists) => {
console.log(lists);
standardList = lists.filter((l) => {
return l.id == shortforms.standardList;
})[0];
if (standardList == undefined) {
standardList = { name: 'Ingen vald' };
}
subjectList = lists.filter((l) => {
return l.id == shortforms.subjectList;
})[0];
if (subjectList == undefined) {
subjectList = { name: 'Ingen vald' };
}
console.log($state.snapshot(subjectList));
})
.catch((err) => {
console.error(err);
});
});
</script> </script>
<Dialog.Root closeFocus="textarea#doc.textarea" bind:open closeOnOutsideClick={false}> <Dialog.Root closeFocus="textarea#doc.textarea" bind:open closeOnOutsideClick={false}>
@ -37,30 +73,37 @@
sätt.</Dialog.Description sätt.</Dialog.Description
> >
</Dialog.Header> </Dialog.Header>
<div class="grid grid-cols-3 gap-6">
<div class="text-sm">Standardlista: {standardList.name}</div>
<div class="text-sm">Ämneslista: {subjectList.name}</div>
<div class="text-sm">
<a href="#" on:click={openListSelection}><Badge>Välj förkortningslistor</Badge></a>
</div>
</div>
<Accordion.Root class="w-full"> <Accordion.Root class="w-full">
<Accordion.Item value="import"> <Accordion.Item value="import">
<Accordion.Trigger>Importera förkortningar</Accordion.Trigger> <Accordion.Trigger>Importera förkortningar</Accordion.Trigger>
<Accordion.Content> <Accordion.Content>
<p class="leading-7 [&:not(:first-child)]:mt-6"> <p class="leading-7 [&:not(:first-child)]:mt-6">
Skrivert kan bara importera och exportera förkortningslistor i läsbart textformat.<br /> Skrivert kan importera förkortningslistor i läsbart textformat.<br />
Det finns ett verktyg för att konvertera listor och export-filer mellan olika format här: </p>
<pre>{exampleShortformImport}</pre>
<!-- Det finns ett verktyg för att konvertera listor och export-filer mellan olika format här:
<br /> <br />
<a href="https://qwertyist.se/tools/shortforms/" target="_blank" <a href="https://qwertyist.se/tools/shortforms/" target="_blank"
><Badge variant="secondary">qwertyist.se/förkortingar/</Badge></a ><Badge variant="secondary">qwertyist.se/förkortingar/</Badge></a
> >
</p> -->
<Separator class="my-4" />
<p class="leading-7 [&:not(:first-child)]:mt-6"> <p class="leading-7 [&:not(:first-child)]:mt-6">
Vill du inte importera en egen lista så kan du använda programmets baslista som i den <a href="/import"><Badge>Importera förkortningar</Badge></a>
här versionen av programmet har {default_shortforms.shortforms.length} förkortningar.<br </p>
/> <p class="leading-7 [&:not(:first-child)]:mt-6">
Du kan också använda programmets baslista som i den här versionen av programmet har {default_shortforms
.shortforms.length} förkortningar.<br />
<a href="/import" on:click={importDefaultList} <a href="/import" on:click={importDefaultList}
><Badge variant="secondary">Importera baslista</Badge></a ><Badge variant="secondary">Importera baslista</Badge></a
> >
</p> </p>
<p class="leading-7 [&:not(:first-child)]:mt-6">
<a href="/import"><Badge>Importera förkortningar</Badge></a>
</p>
</Accordion.Content> </Accordion.Content>
</Accordion.Item> </Accordion.Item>
<Accordion.Item value="settings"> <Accordion.Item value="settings">

View File

@ -21,6 +21,14 @@
</DropdownMenu.Trigger> </DropdownMenu.Trigger>
<DropdownMenu.Content class="w-56"> <DropdownMenu.Content class="w-56">
<DropdownMenu.Label>Inställningar</DropdownMenu.Label> <DropdownMenu.Label>Inställningar</DropdownMenu.Label>
<DropdownMenu.Item
on:click={() => {
appState.open = 'dashboard';
}}
>
Dashboard
<DropdownMenu.Shortcut>F10</DropdownMenu.Shortcut>
</DropdownMenu.Item>
<DropdownMenu.Separator /> <DropdownMenu.Separator />
<DropdownMenu.Group> <DropdownMenu.Group>
<DropdownMenu.Item <DropdownMenu.Item

View File

@ -10,11 +10,17 @@
import { appState } from '$lib/stores.svelte'; import { appState } from '$lib/stores.svelte';
let loaded = false; let loaded = false;
$effect(() => { $effect(() => {
console.log(appState.open);
appState.open; appState.open;
if (loaded) { if (loaded) {
if (appState.open == '') { if (appState.open == '') {
textarea.focus(); textarea.focus();
} }
if (appState.open == 'selectLists') {
console.log('should close dashboard');
showDashboard = false;
return;
}
if (appState.open == 'dashboard') { if (appState.open == 'dashboard') {
console.log('should open dashboard'); console.log('should open dashboard');
showDashboard = true; showDashboard = true;
@ -23,12 +29,16 @@
loaded = true; loaded = true;
}); });
import { hotkeys } from '../modules/keyboard'; import { hotkeys } from '../modules/keyboard';
let showDashboard: boolean = true; var showDashboard = $state(0);
import { Toaster } from '$lib/components/ui/sonner'; import { Toaster } from '$lib/components/ui/sonner';
import { onMount } from 'svelte';
const handleHotkeys = (e: KeyboardEvent) => { const handleHotkeys = (e: KeyboardEvent) => {
hotkeys.get(e.key)?.action(e); hotkeys.get(e.key)?.action(e);
}; };
let textarea = null; let textarea = null;
onMount(() => {
appState.open = 'dashboard';
});
</script> </script>
<svelte:head> <svelte:head>
@ -55,7 +65,7 @@
<div class="h-full"> <div class="h-full">
<Textarea bind:ref={textarea} /> <Textarea bind:ref={textarea} />
<!-- <Button variant="destructive" on:click={deleteDefaultShortforms}>Ta bort standardlista</Button>--> <!-- <Button variant="destructive" on:click={deleteDefaultShortforms}>Ta bort standardlista</Button>-->
<!-- <Dashboard open={showDashboard} />--> <Dashboard open={showDashboard} />
</div> </div>
</div> </div>