mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	feat(call_to_action): allow dismissal
This commit is contained in:
		| @@ -2,7 +2,7 @@ import { useState } from "preact/hooks"; | ||||
| import Button from "../react/Button"; | ||||
| import Modal from "../react/Modal"; | ||||
| import ReactBasicWidget from "../react/ReactBasicWidget"; | ||||
| import { CallToAction, getCallToActions } from "./call_to_action_definitions"; | ||||
| import { CallToAction, dismissCallToAction, getCallToActions } from "./call_to_action_definitions"; | ||||
|  | ||||
| function CallToActionDialogComponent({ activeCallToActions }: { activeCallToActions: CallToAction[] }) { | ||||
|     const [ activeIndex, setActiveIndex ] = useState(0); | ||||
| @@ -30,9 +30,13 @@ function CallToActionDialogComponent({ activeCallToActions }: { activeCallToActi | ||||
|             onHidden={() => setShown(false)} | ||||
|             footerAlignment="between" | ||||
|             footer={<> | ||||
|                 <Button text="Dismiss" onClick={goToNext} /> | ||||
|                 <Button text="Dismiss" onClick={async () => { | ||||
|                     await dismissCallToAction(activeItem.id); | ||||
|                     goToNext(); | ||||
|                 }} /> | ||||
|                 {activeItem.buttons.map((button) => | ||||
|                     <Button text={button.text} onClick={async () => { | ||||
|                         await dismissCallToAction(activeItem.id); | ||||
|                         await button.onClick(); | ||||
|                         goToNext(); | ||||
|                     }}/>    | ||||
|   | ||||
| @@ -52,5 +52,26 @@ const CALL_TO_ACTIONS: CallToAction[] = [ | ||||
| ]; | ||||
|  | ||||
| export function getCallToActions() { | ||||
|     return CALL_TO_ACTIONS.filter((callToAction) => callToAction.enabled()); | ||||
|     const seenCallToActions = new Set(getSeenCallToActions()); | ||||
|  | ||||
|     return CALL_TO_ACTIONS.filter((callToAction) => | ||||
|         !seenCallToActions.has(callToAction.id) && callToAction.enabled()); | ||||
| } | ||||
|  | ||||
| export async function dismissCallToAction(id: string) { | ||||
|     const seenCallToActions = getSeenCallToActions(); | ||||
|     if (seenCallToActions.find(seenId => seenId === id)) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     seenCallToActions.push(id); | ||||
|     await options.save("seenCallToActions", JSON.stringify(seenCallToActions)); | ||||
| } | ||||
|  | ||||
| function getSeenCallToActions() { | ||||
|     try { | ||||
|         return JSON.parse(options.get("seenCallToActions")) as string[]; | ||||
|     } catch (e) { | ||||
|         return []; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -93,6 +93,7 @@ const ALLOWED_OPTIONS = new Set<OptionNames>([ | ||||
|     "redirectBareDomain", | ||||
|     "showLoginInShareTheme", | ||||
|     "splitEditorOrientation", | ||||
|     "seenCallToActions", | ||||
|  | ||||
|     // AI/LLM integration options | ||||
|     "aiEnabled", | ||||
|   | ||||
| @@ -206,11 +206,11 @@ const defaultOptions: DefaultOption[] = [ | ||||
|     { name: "ollamaEnabled", value: "false", isSynced: true }, | ||||
|     { name: "ollamaDefaultModel", value: "", isSynced: true }, | ||||
|     { name: "ollamaBaseUrl", value: "http://localhost:11434", isSynced: true }, | ||||
|  | ||||
|     // Adding missing AI options | ||||
|     { name: "aiTemperature", value: "0.7", isSynced: true }, | ||||
|     { name: "aiSystemPrompt", value: "", isSynced: true }, | ||||
|     { name: "aiSelectedProvider", value: "openai", isSynced: true }, | ||||
|  | ||||
|     { name: "seenCallToActions", value: "[]", isSynced: true } | ||||
| ]; | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -145,7 +145,7 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions<KeyboardActi | ||||
|     ollamaDefaultModel: string; | ||||
|     codeOpenAiModel: string; | ||||
|     aiSelectedProvider: string; | ||||
|  | ||||
|     seenCallToActions: string; | ||||
| } | ||||
|  | ||||
| export type OptionNames = keyof OptionDefinitions; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user