From 766bc44a852152e9c553be8e2d02b12577d31f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Sat, 16 Dec 2023 15:20:44 +0100 Subject: [PATCH] feat: do not use empty phrase for deleted chords --- src/lib/undo-redo.ts | 17 ++++++++++++++--- src/routes/EditActions.svelte | 8 +++----- src/routes/config/chords/ChordActionEdit.svelte | 2 +- src/routes/config/chords/ChordEdit.svelte | 12 +++++++++--- src/routes/config/chords/ChordPhraseEdit.svelte | 2 +- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/lib/undo-redo.ts b/src/lib/undo-redo.ts index b727e06b..8280172b 100644 --- a/src/lib/undo-redo.ts +++ b/src/lib/undo-redo.ts @@ -19,6 +19,7 @@ export interface LayoutChange { export interface ChordChange { type: ChangeType.Chord + deleted?: true id: number[] actions: number[] phrase: number[] @@ -41,7 +42,7 @@ export const changes = persistentWritable("changes", []) export interface Overlay { layout: [Map, Map, Map] - chords: Map + chords: Map settings: Map } @@ -58,7 +59,11 @@ export const overlay = derived(changes, changes => { overlay.layout[change.layer].set(change.id, change.action) break case ChangeType.Chord: - overlay.chords.set(JSON.stringify(change.id), {actions: change.actions, phrase: change.phrase}) + overlay.chords.set(JSON.stringify(change.id), { + actions: change.actions, + phrase: change.phrase, + deleted: change.deleted ?? false, + }) break case ChangeType.Setting: overlay.settings.set(change.id, change.setting) @@ -88,7 +93,10 @@ export const layout = derived([overlay, deviceLayout], ([overlay, layout]) => ) export type ChordInfo = Chord & - ChangeInfo & {phraseChanged: boolean; actionsChanged: boolean; sortBy: string} & {id: number[]} + ChangeInfo & {phraseChanged: boolean; actionsChanged: boolean; sortBy: string} & { + id: number[] + deleted: boolean + } export const chords = derived([overlay, deviceChords], ([overlay, chords]) => { const newChords = new Set(overlay.chords.keys()) @@ -106,6 +114,7 @@ export const chords = derived([overlay, deviceChords], ([overlay, chords]) => { actionsChanged: id !== JSON.stringify(changedChord.actions), phraseChanged: JSON.stringify(chord.phrase) !== JSON.stringify(changedChord.phrase), isApplied: false, + deleted: changedChord.deleted, } } else { return { @@ -116,6 +125,7 @@ export const chords = derived([overlay, deviceChords], ([overlay, chords]) => { phraseChanged: false, actionsChanged: false, isApplied: true, + deleted: false, } } }) @@ -126,6 +136,7 @@ export const chords = derived([overlay, deviceChords], ([overlay, chords]) => { isApplied: false, actionsChanged: true, phraseChanged: false, + deleted: chord.deleted, id: JSON.parse(id), phrase: chord.phrase, actions: chord.actions, diff --git a/src/routes/EditActions.svelte b/src/routes/EditActions.svelte index 03cdfc85..d381905b 100644 --- a/src/routes/EditActions.svelte +++ b/src/routes/EditActions.svelte @@ -39,8 +39,8 @@ if (!port) return $syncStatus = "uploading" - for (const [id, {actions, phrase}] of $overlay.chords) { - if (phrase.length > 0) { + for (const [id, {actions, phrase, deleted}] of $overlay.chords) { + if (!deleted) { if (id !== JSON.stringify(actions)) { const existingChord = await port.getChordPhrase(actions) if ( @@ -109,9 +109,7 @@ number[], number[], ] - $deviceChords = $chords - .map(({actions, phrase}) => ({actions, phrase})) - .filter(({phrase}) => phrase.length > 1) + $deviceChords = $chords.filter(({deleted}) => !deleted).map(({actions, phrase}) => ({actions, phrase})) $deviceSettings = $settings.map(({value}) => value) $changes = [] $syncStatus = "done" diff --git a/src/routes/config/chords/ChordActionEdit.svelte b/src/routes/config/chords/ChordActionEdit.svelte index 40d0b32e..b5755534 100644 --- a/src/routes/config/chords/ChordActionEdit.svelte +++ b/src/routes/config/chords/ChordActionEdit.svelte @@ -47,7 +47,7 @@ - {:else if chord.phraseChanged} + {:else} {/if} diff --git a/src/routes/config/chords/ChordPhraseEdit.svelte b/src/routes/config/chords/ChordPhraseEdit.svelte index 3c40a370..eff2bf75 100644 --- a/src/routes/config/chords/ChordPhraseEdit.svelte +++ b/src/routes/config/chords/ChordPhraseEdit.svelte @@ -136,7 +136,7 @@ role="textbox" tabindex="0" bind:this={box} - class:edited={chord.phrase.length !== 0 && chord.phraseChanged} + class:edited={!chord.deleted && chord.phraseChanged} on:focusin={() => (hasFocus = true)} on:focusout={event => { if (event.relatedTarget !== button) hasFocus = false