From f35ea01c71d076a1ed868d72d8e2401b48a1824a Mon Sep 17 00:00:00 2001 From: Jose Henrique Date: Fri, 3 Jul 2026 14:59:43 -0300 Subject: [PATCH] fixing issue with website ordering --- App.tsx | 20 ++++++-------------- project-context.md | 4 ++-- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/App.tsx b/App.tsx index a464048..1e9d84f 100644 --- a/App.tsx +++ b/App.tsx @@ -177,23 +177,15 @@ const App: React.FC = () => { const websiteIndex = category.websites.findIndex(w => w.id === website.id); if (websiteIndex === -1) return; - const newCategories = [...categories]; + const targetIndex = direction === 'left' ? websiteIndex - 1 : websiteIndex + 1; + if (targetIndex < 0 || targetIndex >= category.websites.length) return; + const newWebsites = [...category.websites]; const [movedWebsite] = newWebsites.splice(websiteIndex, 1); + newWebsites.splice(targetIndex, 0, movedWebsite); - if (direction === 'left') { - const newCategoryIndex = (categoryIndex - 1 + categories.length) % categories.length; - newCategories[categoryIndex] = { ...category, websites: newWebsites }; - const destCategory = newCategories[newCategoryIndex]; - const destWebsites = [...destCategory.websites, { ...movedWebsite, categoryId: destCategory.id }]; - newCategories[newCategoryIndex] = { ...destCategory, websites: destWebsites }; - } else { - const newCategoryIndex = (categoryIndex + 1) % categories.length; - newCategories[categoryIndex] = { ...category, websites: newWebsites }; - const destCategory = newCategories[newCategoryIndex]; - const destWebsites = [...destCategory.websites, { ...movedWebsite, categoryId: destCategory.id }]; - newCategories[newCategoryIndex] = { ...destCategory, websites: destWebsites }; - } + const newCategories = [...categories]; + newCategories[categoryIndex] = { ...category, websites: newWebsites }; setCategories(newCategories); }, [categories]); diff --git a/project-context.md b/project-context.md index 7773c3a..a4817d5 100644 --- a/project-context.md +++ b/project-context.md @@ -49,7 +49,7 @@ Entry points: `index.html` → `index.tsx` → `App.tsx`. The startpage is composed of widgets and a configuration panel: -- **Website Tiles** — Bookmarks organized into categories. Each tile shows an icon + name and opens the configured URL. Tiles can be added, edited, deleted, and moved left/right across categories while in edit mode. +- **Website Tiles** — Bookmarks organized into categories. Each tile shows an icon + name and opens the configured URL. Tiles can be added, edited, deleted, and moved left/right within their own category (reordering) while in edit mode. - **Categories** — Groupings of website tiles (e.g. "Search"). Add/edit/delete/name. - **Clock** — Optional header clock with selectable size, font, and 12h/24h format. - **Title** — Optional big header title (text + size configurable). @@ -221,7 +221,7 @@ External assets fetched at build time by `scripts/prepare_release.sh`: ## 8. Notable Behaviors & Quirks - **`EditModal.tsx` has been removed.** It was a legacy drag-and-drop editor that imported non-existent `lucide-react` and `./IconPicker`; it was never wired into `App.tsx`. Use `WebsiteEditModal.tsx` / `CategoryEditModal.tsx` instead. -- **`@hello-pangea/dnd`** is used only in `ServerWidgetTab.tsx` (server reorder), which itself is imported by the lazy-loaded `ConfigurationModal`, so it lives in a separate chunk and is absent from the initial page load. `WebsiteTile` moves tiles via simple left/right buttons, not drag-and-drop. +- **`@hello-pangea/dnd`** is used only in `ServerWidgetTab.tsx` (server reorder), which itself is imported by the lazy-loaded `ConfigurationModal`, so it lives in a separate chunk and is absent from the initial page load. `WebsiteTile` moves tiles within their own category via simple left/right buttons (no cross-category movement), not drag-and-drop. - **Chrome storage is optional.** `StorageLocalManager` checks availability once (`checkChromeStorageLocalAvailable`) and caches it. When unavailable (e.g., running as a plain web page), wallpaper upload/delete flows are gated off and `addWallpaperToChromeStorageLocal` throws. - **Wallpaper rotation** is time-based, evaluated on render/mount rather than via a timer. It reads `wallpaperState` from `localStorage`, advances the index if the frequency window has elapsed, and writes it back. The renderer clamps `currentIndex` to the valid range of the current selection and walks the list forward to find a wallpaper whose data actually resolves (so deleting the currently-displayed wallpaper, or shrinking the selection, never leaves the background blank); if no wallpaper resolves, the background layer is hidden. When the selection becomes empty, `wallpaperState` is reset and the background is hidden. A manual "Next Wallpaper" button in the Theme tab advances `currentIndex` (with wraparound) and bumps a `wallpaperVersion` nonce in `App.tsx` that retriggers the renderer. - **Icon picker** in `WebsiteEditModal` loads `/icon-metadata.json` at runtime and expands each icon's `colors` into duplicate-name entries so color variants are searchable.