aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/assistant/PresetsModule.qml
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/assistant/PresetsModule.qml')
-rw-r--r--desktop/modules/assistant/PresetsModule.qml30
1 files changed, 27 insertions, 3 deletions
diff --git a/desktop/modules/assistant/PresetsModule.qml b/desktop/modules/assistant/PresetsModule.qml
index 8617b02..1c62f73 100644
--- a/desktop/modules/assistant/PresetsModule.qml
+++ b/desktop/modules/assistant/PresetsModule.qml
@@ -15,8 +15,10 @@ import "../../assistant/Presets.js" as Presets
// The assistant canvas's Ask row: the canned questions offered for the
// staged files. They live in Prefs and the canvas reads them live, so
-// unlike the daemon's settings these need no restart.
+// unlike the daemon's settings these need no restart. The page edits a
+// draft here; Save hands it to Prefs.
Module {
+ id: pm
name: "presets"
label: "Ask presets"
// nf-fa-lightbulb_o, present in Inconsolata Nerd Font.
@@ -24,12 +26,34 @@ Module {
settings: true
group: "Assistant"
keywords: ["assistant", "canvas", "ask", "question", "prompt", "summarize", "files"]
- searchItems: Presets.list(Prefs.presets).map((p, i) => ({ text: p.label + ": " + p.prompt, key: "preset:" + i }))
+ searchItems: pm.shown.map((p, i) => ({ text: p.label + ": " + p.prompt, key: "preset:" + i }))
+
+ // null while there are no edits: the page then shows Prefs' list.
+ property var draft: null
+ // Reset to defaults was pressed: Save drops the saved list rather than
+ // saving a copy of the defaults, so later default changes still arrive.
+ property bool resetting: false
+ readonly property var shown: pm.draft ?? Presets.list(Prefs.presets)
+ // Presets with an empty label or question, by index; Save waits.
+ readonly property bool valid: pm.shown.every(p => p.label.trim() !== "" && p.prompt.trim() !== "")
+ dirty: pm.draft !== null
+
+ function edit(list) { pm.draft = list; pm.resetting = false; }
+ function reset() { pm.draft = Presets.list(null).map(p => Object.assign({}, p, { kinds: p.kinds.slice() })); pm.resetting = true; }
+ function save() {
+ if (pm.resetting) Prefs.resetPresets(); else Prefs.setPresets(pm.draft);
+ pm.discard();
+ }
+ function discard() { pm.draft = null; pm.resetting = false; }
page: Component {
Page {
title: "Ask presets"
- PresetsPage { width: parent.width }
+ actions: Component {
+ SaveBar { dirty: pm.dirty; valid: pm.valid; note: "every preset needs a label and a question"
+ onSave: pm.save(); onDiscard: pm.discard() }
+ }
+ PresetsPage { width: parent.width; owner: pm }
}
}
}