From 4517409dbd14b6df0777e80f7db77194f44cadd2 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 3 Sep 2023 07:22:00 -0700 Subject: [PATCH] Support mixing services & bookmarks layout --- src/pages/index.jsx | 90 +++++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index dc794a155..e4cde99d2 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -4,7 +4,7 @@ import Head from "next/head"; import dynamic from "next/dynamic"; import classNames from "classnames"; import { useTranslation } from "next-i18next"; -import { useEffect, useContext, useState } from "react"; +import { useEffect, useContext, useState, useMemo } from "react"; import { BiError } from "react-icons/bi"; import { serverSideTranslations } from "next-i18next/serverSideTranslations"; @@ -230,6 +230,66 @@ function Home({ initialSettings }) { } }) + const servicesAndBookmarksGroups = useMemo(() => { + const layoutGroups = settings.layout ? Object.keys(settings.layout).map( + (groupName) => services?.find(g => g.name === groupName) ?? bookmarks?.find(b => b.name === groupName) + ).filter(g => g) : []; + + const serviceGroups = services?.filter(group => settings.layout?.[group.name] === undefined); + const bookmarkGroups = bookmarks.filter(group => settings.layout?.[group.name] === undefined); + + return <> + {layoutGroups.length > 0 &&
+ {layoutGroups.map((group) => ( + group.services ? + () : + () + ) + )} +
} + {serviceGroups?.length > 0 &&
+ {serviceGroups.map((group) => ( + + ))} +
} + {bookmarkGroups?.length > 0 &&
+ {bookmarkGroups.map((group) => ( + + ))} +
} + + }, [ + services, + bookmarks, + settings.layout, + settings.fiveColumns, + settings.disableCollapse + ]); + return ( <> @@ -289,33 +349,7 @@ function Home({ initialSettings }) { )} - {services?.length > 0 && ( -
- {services.map((group) => ( - - ))} -
- )} - - {bookmarks?.length > 0 && ( -
- {bookmarks.map((group) => ( - - ))} -
- )} + {servicesAndBookmarksGroups}