diff --git a/web/pages/Memory/EditMemory.tsx b/web/pages/Memory/EditMemory.tsx index e4b75e283..fc3ab883f 100644 --- a/web/pages/Memory/EditMemory.tsx +++ b/web/pages/Memory/EditMemory.tsx @@ -1,5 +1,5 @@ import { Plus, X } from 'lucide-solid' -import { Component, createEffect, createMemo, createSignal, Index, on } from 'solid-js' +import { Component, createEffect, createMemo, createSignal, Index, on, Show } from 'solid-js' import { AppSchema } from '../../../common/types/schema' import Accordian from '../../shared/Accordian' import Button from '../../shared/Button' @@ -11,6 +11,7 @@ import { Toggle } from '../../shared/Toggle' import { alphaCaseInsensitiveSort } from '../../shared/util' import { Card } from '/web/shared/Card' import { SetStoreFunction } from 'solid-js/store' +import { memoryStore } from '/web/store' const missingFieldsInEntry = (entry: AppSchema.MemoryEntry): (keyof AppSchema.MemoryEntry)[] => [ ...(entry.keywords.length === 0 ? ['keywords' as const] : []), @@ -32,8 +33,30 @@ const EditMemoryForm: Component<{ state: AppSchema.MemoryBook setter: SetStoreFunction + + splitView: boolean }> = (props) => { const [search, setSearch] = createSignal('') + const [selectedSourceBookId, setSelectedSourceBookId] = createSignal() + + const books = memoryStore() + const otherBooks = createMemo(() => + books.books.list.filter((book) => book._id !== props.state._id) + ) + const sourceBook = createMemo(() => + otherBooks().find((book) => book._id === selectedSourceBookId()) + ) + + createEffect(() => { + if (props.splitView && otherBooks().length > 0 && !selectedSourceBookId()) { + setSelectedSourceBookId(otherBooks()[0]._id) + } + }) + + const addEntryFromSource = (sourceEntry: AppSchema.MemoryEntry) => { + const newEntry = JSON.parse(JSON.stringify(sourceEntry)) + props.setter('entries', (prev) => [...prev, newEntry]) + } const addEntry = () => { const entry = { @@ -105,37 +128,92 @@ const EditMemoryForm: Component<{ -
-
- setSearch(ev.currentTarget.value)} - /> +
+
+
+
+ setSearch(ev.currentTarget.value)} + /> +
+ ({ label: book.name, value: book._id }))} + onChange={(opt) => setSelectedSourceBookId(opt.value)} + value={selectedSourceBookId()} + /> +
-