diff --git a/components/ui-elements/notes-writer/NotesWriter.tsx b/components/ui-elements/notes-writer/NotesWriter.tsx index 11faa1e4c..68a6762d4 100644 --- a/components/ui-elements/notes-writer/NotesWriter.tsx +++ b/components/ui-elements/notes-writer/NotesWriter.tsx @@ -4,7 +4,6 @@ import Link from "@tiptap/extension-link"; import Placeholder from "@tiptap/extension-placeholder"; import { EditorContent, useEditor } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; -import { isEqual } from "lodash"; import { FC, useEffect } from "react"; import styles from "./NotesWriter.module.css"; @@ -19,6 +18,40 @@ type TransformNotesVersionType = { notesJson?: any; }; +type GenericObject = { [key: string]: any }; + +const compareNotes = (obj1: GenericObject, obj2: GenericObject): boolean => { + for (const key in obj1) { + const val1 = obj1[key]; + if (!(key in obj2) && !!val1) return false; + else { + const val2 = obj2[key]; + if ( + typeof val1 === "object" && + val1 !== null && + typeof val2 === "object" && + val2 !== null + ) { + if (!compareNotes(val1, val2)) return false; + } else { + if (val1 !== val2) return false; + } + } + } + for (const key in obj2) if (!(key in obj1) && !!obj2[key]) return false; + return true; +}; + +const isUpToDate = ( + notes: EditorJsonContent | string | undefined, + editorJson: EditorJsonContent | undefined +) => { + if (!notes) return false; + if (!editorJson) return false; + if (typeof notes === "string") return false; + return compareNotes(notes, editorJson); +}; + export const transformNotesVersion = ({ version, notes, @@ -88,7 +121,7 @@ const NotesWriter: FC = ({ editorProps: { attributes: { class: `${styles.editor} ${ - isEqual(notes, editor.getJSON()) ? "" : styles.unsaved + isUpToDate(notes, editor.getJSON()) ? "" : styles.unsaved }`, }, }, diff --git a/docs/releases/next.md b/docs/releases/next.md index e4a0256d1..22f07065e 100644 --- a/docs/releases/next.md +++ b/docs/releases/next.md @@ -1,9 +1,3 @@ -# Inbox Workflow optimieren und Editieren verlässlicher machen (Version :VERSION) +# UI Optimierung für Notizen Editor (Version :VERSION) -## Inbox Workflow optimiert - -Die UI ist optimiert. Der aktuelle Kontext wird berücksichtigt oder kann angepasst werden. - -## Editieren zuverlässiger - -Beim Speichern in der Datenbank gingen immer wieder die letzte Eingaben verloren. Der Prozess ist nun entkoppelt und der Editor wird nicht mehr aktualisiert, wenn die gespeicherten Einträge an die Komponente übergeben werden. Der Editor vergleicht ständig, was ihm als gespeichert übergeben wird mit dem, was er gerade für einen Inhalt hat und somit weiß der Anwender ständig, ob seine letzten Daten gespeichert sind oder nicht. +Der Notizen Editor hat nicht korrekt angezeigt, ob eine Notiz in der Datenbank gespeichert ist. Das ist nun behoben. diff --git a/helpers/functional.ts b/helpers/functional.ts index a4547cb88..454b59045 100644 --- a/helpers/functional.ts +++ b/helpers/functional.ts @@ -21,10 +21,10 @@ export const toLocaleDateString = (date?: Date) => year: "numeric", }); export const toISODateString = (date: Date) => { - var year = date.getFullYear(); + const year = date.getFullYear(); // Months are zero-based, so we add 1 to get the correct month - var month = (date.getMonth() + 1).toString().padStart(2, "0"); - var day = date.getDate().toString().padStart(2, "0"); + const month = (date.getMonth() + 1).toString().padStart(2, "0"); + const day = date.getDate().toString().padStart(2, "0"); return year + "-" + month + "-" + day; };