From d1c9c88ab5b22ce5fb256520cd8dc731ef13030a Mon Sep 17 00:00:00 2001 From: Frederic Cabassut Date: Mon, 9 Mar 2026 21:49:53 +0100 Subject: [PATCH] refactor: replace sort selector with hybrid sort order Remove the sort mode selector UI. Notes now sort by custom order first (drag to reorder), falling back to most-recently-updated for ties. Drag handles are always available. Co-Authored-By: Claude Opus 4.6 --- src/lib/components/NotesView.svelte | 19 +++++------------ src/lib/components/SortSelector.svelte | 29 -------------------------- src/lib/stores/notes.ts | 20 +++++++----------- src/lib/stores/sort.ts | 24 --------------------- 4 files changed, 12 insertions(+), 80 deletions(-) delete mode 100644 src/lib/components/SortSelector.svelte delete mode 100644 src/lib/stores/sort.ts diff --git a/src/lib/components/NotesView.svelte b/src/lib/components/NotesView.svelte index c2fb90c..76b5b89 100644 --- a/src/lib/components/NotesView.svelte +++ b/src/lib/components/NotesView.svelte @@ -2,9 +2,7 @@ import NoteGrid from '$lib/components/NoteGrid.svelte'; import NoteEditor from '$lib/components/NoteEditor.svelte'; import TagFilter from '$lib/components/TagFilter.svelte'; - import SortSelector from '$lib/components/SortSelector.svelte'; import { pinnedNotes, unpinnedNotes, selectedTag, currentFilter, notes, notesLoaded, loadNotes, updateSortOrders } from '$lib/stores/notes.js'; - import { sortMode } from '$lib/stores/sort.js'; import { onMount } from 'svelte'; import type { Note, NoteFilter } from '$lib/types/index.js'; import Plus from 'lucide-svelte/icons/plus'; @@ -76,16 +74,9 @@ {/if} -{#if filter === 'all'} -
- - -
-{:else} -
- -
-{/if} +
+ +
{#if filter === 'archived'}

Archive

@@ -97,7 +88,7 @@ {#if $pinnedNotes.length > 0}
- +
{/if} @@ -105,7 +96,7 @@ notes={$unpinnedNotes} label={$pinnedNotes.length > 0 ? 'Others' : ''} onEdit={openEditor} - draggable={$sortMode === 'custom'} + draggable dndType="unpinned-notes" onReorder={handleReorder} /> diff --git a/src/lib/components/SortSelector.svelte b/src/lib/components/SortSelector.svelte deleted file mode 100644 index 94c3433..0000000 --- a/src/lib/components/SortSelector.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - -
- {#each modes as mode} - - {/each} -
diff --git a/src/lib/stores/notes.ts b/src/lib/stores/notes.ts index 7cece38..6975c7f 100644 --- a/src/lib/stores/notes.ts +++ b/src/lib/stores/notes.ts @@ -3,7 +3,6 @@ import type { Note, NoteFilter, NoteCreate, NoteUpdate } from '$lib/types/index. import { addToSyncQueue, putNote, deleteNoteFromIdb, getAllNotes, clearNotes as clearIdbNotes } from '$lib/sync/idb.js'; import { showToast } from '$lib/stores/toast.js'; import { extractTags } from '$lib/utils/tags.js'; -import { sortMode, type SortMode } from '$lib/stores/sort.js'; export const notes = writable([]); export const currentFilter = writable('all'); @@ -28,25 +27,20 @@ export const filteredNotes = derived( } ); -function sortNotes(list: Note[], mode: SortMode): Note[] { +function sortNotes(list: Note[]): Note[] { return [...list].sort((a, b) => { - if (mode === 'created') { - return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(); - } - if (mode === 'custom') { - return a.sortOrder - b.sortOrder; - } - // default: updated + const orderDiff = a.sortOrder - b.sortOrder; + if (orderDiff !== 0) return orderDiff; return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(); }); } -export const pinnedNotes = derived([filteredNotes, sortMode], ([$notes, $sortMode]) => - sortNotes($notes.filter((n) => n.pinned), $sortMode) +export const pinnedNotes = derived(filteredNotes, ($notes) => + sortNotes($notes.filter((n) => n.pinned)) ); -export const unpinnedNotes = derived([filteredNotes, sortMode], ([$notes, $sortMode]) => - sortNotes($notes.filter((n) => !n.pinned), $sortMode) +export const unpinnedNotes = derived(filteredNotes, ($notes) => + sortNotes($notes.filter((n) => !n.pinned)) ); export const allTags = derived(notes, ($notes) => { diff --git a/src/lib/stores/sort.ts b/src/lib/stores/sort.ts deleted file mode 100644 index d037410..0000000 --- a/src/lib/stores/sort.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { writable } from 'svelte/store'; -import { browser } from '$app/environment'; - -export type SortMode = 'updated' | 'created' | 'custom'; - -const STORAGE_KEY = 'crumbs-sort-mode'; - -function getInitial(): SortMode { - if (browser) { - const stored = localStorage.getItem(STORAGE_KEY); - if (stored === 'updated' || stored === 'created' || stored === 'custom') { - return stored; - } - } - return 'updated'; -} - -export const sortMode = writable(getInitial()); - -if (browser) { - sortMode.subscribe((value) => { - localStorage.setItem(STORAGE_KEY, value); - }); -}