mirror of
https://github.com/ankitects/anki.git
synced 2025-11-09 06:07:11 -05:00
Pass selected notetype/deck to editor
This commit is contained in:
parent
d054e0f078
commit
b17bfb2658
5 changed files with 40 additions and 12 deletions
|
|
@ -9,8 +9,12 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
import type { DeckNameId } from "@generated/anki/decks_pb";
|
import type { DeckNameId } from "@generated/anki/decks_pb";
|
||||||
import * as tr from "@generated/ftl";
|
import * as tr from "@generated/ftl";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
selectedDeck: DeckNameId | null;
|
||||||
|
onChange?: (deck: DeckNameId) => void;
|
||||||
|
}
|
||||||
|
let {selectedDeck = $bindable(null), onChange}: Props = $props();
|
||||||
let decks: DeckNameId[] = $state([]);
|
let decks: DeckNameId[] = $state([]);
|
||||||
let selectedDeck: DeckNameId | null = $state(null);
|
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
getDeckNames({ skipEmptyDefault: true, includeFiltered: false }).then(
|
getDeckNames({ skipEmptyDefault: true, includeFiltered: false }).then(
|
||||||
|
|
@ -24,6 +28,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
<ItemChooser
|
<ItemChooser
|
||||||
title={tr.qtMiscChooseDeck()}
|
title={tr.qtMiscChooseDeck()}
|
||||||
bind:selectedItem={selectedDeck}
|
bind:selectedItem={selectedDeck}
|
||||||
|
{onChange}
|
||||||
items={decks}
|
items={decks}
|
||||||
icon={mdiBookOutline}
|
icon={mdiBookOutline}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
Copyright: Ankitects Pty Ltd and contributors
|
Copyright: Ankitects Pty Ltd and contributors
|
||||||
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
-->
|
-->
|
||||||
<script lang="ts">
|
<script lang="ts" generics="Item extends { id: bigint, name: string }">
|
||||||
import { magnifyIcon, mdiClose } from "./icons";
|
import { magnifyIcon, mdiClose } from "./icons";
|
||||||
import Icon from "./Icon.svelte";
|
import Icon from "./Icon.svelte";
|
||||||
import IconConstrain from "./IconConstrain.svelte";
|
import IconConstrain from "./IconConstrain.svelte";
|
||||||
|
|
@ -10,10 +10,6 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
import Modal from "./Modal.svelte";
|
import Modal from "./Modal.svelte";
|
||||||
import type { IconData } from "./types";
|
import type { IconData } from "./types";
|
||||||
import * as tr from "@generated/ftl";
|
import * as tr from "@generated/ftl";
|
||||||
interface Item {
|
|
||||||
id: bigint;
|
|
||||||
name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,12 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
import ItemChooser from "./ItemChooser.svelte";
|
import ItemChooser from "./ItemChooser.svelte";
|
||||||
import * as tr from "@generated/ftl";
|
import * as tr from "@generated/ftl";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
selectedNotetype: NotetypeNameId | null;
|
||||||
|
onChange?: (notetype: NotetypeNameId) => void;
|
||||||
|
}
|
||||||
|
let {selectedNotetype = $bindable(null), onChange}: Props = $props();
|
||||||
let notetypes: NotetypeNameId[] = $state([]);
|
let notetypes: NotetypeNameId[] = $state([]);
|
||||||
let selectedNotetype: NotetypeNameId | null = $state(null);
|
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
getNotetypeNames({}).then((response) => {
|
getNotetypeNames({}).then((response) => {
|
||||||
|
|
@ -23,6 +27,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
<ItemChooser
|
<ItemChooser
|
||||||
title={tr.qtMiscChooseNoteType()}
|
title={tr.qtMiscChooseNoteType()}
|
||||||
bind:selectedItem={selectedNotetype}
|
bind:selectedItem={selectedNotetype}
|
||||||
|
{onChange}
|
||||||
items={notetypes}
|
items={notetypes}
|
||||||
icon={mdiNewspaper}
|
icon={mdiNewspaper}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
import LabelName from "./LabelName.svelte";
|
import LabelName from "./LabelName.svelte";
|
||||||
import { EditorState, type EditorMode } from "./types";
|
import { EditorState, type EditorMode } from "./types";
|
||||||
import { ContextMenu, Item } from "$lib/context-menu";
|
import { ContextMenu, Item } from "$lib/context-menu";
|
||||||
|
import type { NotetypeNameId } from "@generated/anki/notetypes_pb";
|
||||||
|
import type { DeckNameId } from "@generated/anki/decks_pb";
|
||||||
|
|
||||||
export interface NoteEditorAPI {
|
export interface NoteEditorAPI {
|
||||||
fields: EditorFieldAPI[];
|
fields: EditorFieldAPI[];
|
||||||
|
|
@ -295,6 +297,17 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
clearCodeMirrorHistory();
|
clearCodeMirrorHistory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export let selectedNotetype: NotetypeNameId | null = null;
|
||||||
|
export let selectedDeck: DeckNameId | null = null;
|
||||||
|
|
||||||
|
|
||||||
|
function onNotetypeChange(notetype: NotetypeNameId) {
|
||||||
|
loadNote(0n, notetype.id, 0, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDeckChange(deck: DeckNameId) {
|
||||||
|
selectedDeck = deck;
|
||||||
|
}
|
||||||
let notetypeMeta: NotetypeIdAndModTime;
|
let notetypeMeta: NotetypeIdAndModTime;
|
||||||
function setNotetypeMeta(notetype: Notetype): void {
|
function setNotetypeMeta(notetype: Notetype): void {
|
||||||
notetypeMeta = { id: notetype.id, modTime: notetype.mtimeSecs };
|
notetypeMeta = { id: notetype.id, modTime: notetype.mtimeSecs };
|
||||||
|
|
@ -444,8 +457,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onAdd() {
|
async function onAdd() {
|
||||||
// TODO get selected deck
|
await addCurrentNote(selectedDeck!.id);
|
||||||
await addCurrentNote(1n);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let historyModal: Modal;
|
let historyModal: Modal;
|
||||||
|
|
@ -1196,7 +1208,7 @@ components and functionality for general note editing.
|
||||||
on:dragover={preventDefaultIfNonLegacy}
|
on:dragover={preventDefaultIfNonLegacy}
|
||||||
on:drop={checkNonLegacy(handlePickerDrop)}
|
on:drop={checkNonLegacy(handlePickerDrop)}
|
||||||
>
|
>
|
||||||
<EditorChoosers />
|
<EditorChoosers bind:selectedNotetype bind:selectedDeck onNotetypeChange={onNotetypeChange} />
|
||||||
|
|
||||||
<EditorToolbar {size} {wrap} api={toolbar}>
|
<EditorToolbar {size} {wrap} api={toolbar}>
|
||||||
<svelte:fragment slot="notetypeButtons">
|
<svelte:fragment slot="notetypeButtons">
|
||||||
|
|
|
||||||
|
|
@ -6,18 +6,28 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import NotetypeChooser from "$lib/components/NotetypeChooser.svelte";
|
import NotetypeChooser from "$lib/components/NotetypeChooser.svelte";
|
||||||
import DeckChooser from "$lib/components/DeckChooser.svelte";
|
import DeckChooser from "$lib/components/DeckChooser.svelte";
|
||||||
|
import type { NotetypeNameId } from "@generated/anki/notetypes_pb";
|
||||||
|
import type { DeckNameId } from "@generated/anki/decks_pb";
|
||||||
import * as tr from "@generated/ftl";
|
import * as tr from "@generated/ftl";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
selectedNotetype: NotetypeNameId | null;
|
||||||
|
selectedDeck: DeckNameId | null;
|
||||||
|
onNotetypeChange?: (notetype: NotetypeNameId) => void;
|
||||||
|
onDeckChange?: (deck: DeckNameId) => void;
|
||||||
|
}
|
||||||
|
let {selectedNotetype = $bindable(null), selectedDeck = $bindable(null), onNotetypeChange, onDeckChange}: Props = $props();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="top-bar">
|
<div class="top-bar">
|
||||||
<p>{tr.notetypesType()}</p>
|
<p>{tr.notetypesType()}</p>
|
||||||
<div class="notetype-chooser">
|
<div class="notetype-chooser">
|
||||||
<NotetypeChooser/>
|
<NotetypeChooser bind:selectedNotetype onChange={onNotetypeChange} />
|
||||||
</div>
|
</div>
|
||||||
<p>{tr.decksDeck()}</p>
|
<p>{tr.decksDeck()}</p>
|
||||||
<div class="deck-chooser">
|
<div class="deck-chooser">
|
||||||
<DeckChooser/>
|
<DeckChooser bind:selectedDeck onChange={onDeckChange} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue