diff --git a/src/lib/ae_journals/ae_journals_stores.ts b/src/lib/ae_journals/ae_journals_stores.ts
index f18dc073..c032188f 100644
--- a/src/lib/ae_journals/ae_journals_stores.ts
+++ b/src/lib/ae_journals/ae_journals_stores.ts
@@ -81,6 +81,7 @@ const journals_local_data_struct: key_val = {
llm__frequency_penalty: 0.0,
llm__presence_penalty: 0.0,
+ auto_save: false,
edit: false,
edit_kv: {}
}
diff --git a/src/routes/journals/JournalEntry_Header.svelte b/src/routes/journals/JournalEntry_Header.svelte
index 31297ef3..138bf099 100644
--- a/src/routes/journals/JournalEntry_Header.svelte
+++ b/src/routes/journals/JournalEntry_Header.svelte
@@ -8,7 +8,8 @@
Save, Eye, Pencil, Tags, Shapes,
Siren, MessageSquareWarning, Skull,
Fingerprint, LockKeyhole, LockKeyholeOpen, Menu,
- Globe, BookHeart, BriefcaseBusiness
+ Globe, BookHeart, BriefcaseBusiness,
+ CircleCheck, CircleX, Loader2, RefreshCw
} from '@lucide/svelte';
import { ae_util } from '$lib/ae_utils/ae_utils';
import { ae_loc } from '$lib/stores/ae_stores';
@@ -28,6 +29,7 @@
onChangeJournal: () => void;
onAppend?: () => void;
onPrepend?: () => void;
+ save_status?: 'saved' | 'unsaved' | 'saving';
log_lvl?: number;
}
@@ -43,6 +45,7 @@
onChangeJournal,
onAppend,
onPrepend,
+ save_status = 'saved',
log_lvl = 0
}: Props = $props();
@@ -96,6 +99,34 @@ p-2 md:p-3 rounded-lg shadow-md
{/if}
+
+ {#if $journals_loc.entry.edit_kv[entry.journal_entry_id] === 'current'}
+
+
+
+ {#if $journals_loc.entry.auto_save}
+
+ {#if save_status === 'saving'}
+
+ {:else if save_status === 'saved'}
+
+ {:else}
+
+ {/if}
+
+ {/if}
+
+ {/if}
+
{#if $journals_loc.entry.edit_kv[entry.journal_entry_id] == 'current'}
;
+
+ $effect(() => {
+ if (tmp_entry_obj_changed) {
+ if (save_status !== 'saving') save_status = 'unsaved';
+
+ if ($journals_loc.entry.auto_save) {
+ clearTimeout(auto_save_timer);
+ auto_save_timer = setTimeout(() => {
+ if (tmp_entry_obj_changed) { // Double check
+ update_journal_entry();
+ }
+ }, 2000); // 2 seconds debounce
+ }
+ } else {
+ clearTimeout(auto_save_timer);
+ if (save_status !== 'saving') {
+ save_status = 'saved';
+ }
+ }
+ });
+
let decrypted_history: string = $state('');
if (!$journals_loc?.entry?.decrypt_kv) {
@@ -266,6 +290,8 @@
return;
}
+ save_status = 'saving';
+
let data_kv: key_val = {
alert: tmp_entry_obj?.alert,
personal: tmp_entry_obj?.personal,
@@ -388,8 +414,10 @@
});
if (log_lvl) console.log('Journal entry updated successfully:', response);
updated_obj = true;
+ save_status = 'saved';
} catch (error) {
console.error('Error updating journal entry:', error);
+ save_status = 'unsaved';
alert('Failed to update journal entry.');
}
}
@@ -527,6 +555,7 @@
onChangeJournal={change_journal_id}
onAppend={handle_append_start}
onPrepend={handle_prepend_start}
+ {save_status}
{log_lvl}
/>