From d3088018d71ebb2308a22c74d4d14816bbeb7490 Mon Sep 17 00:00:00 2001 From: Lewis England Date: Thu, 18 May 2023 08:41:59 +0000 Subject: [PATCH] Update container.jsx --- src/components/services/widget/container.jsx | 2 +- src/components/tasklist/group.jsx | 13 +++++++++++ src/components/tasklist/item.jsx | 14 ++++++++++++ src/components/tasklist/list.jsx | 11 ++++++++++ src/pages/api/tasklist.js | 5 +++++ src/pages/index.jsx | 10 +++++++++ src/utils/config/api-response.js | 23 ++++++++++++++++++++ 7 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/components/tasklist/group.jsx create mode 100644 src/components/tasklist/item.jsx create mode 100644 src/components/tasklist/list.jsx create mode 100644 src/pages/api/tasklist.js diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index f4d8c13e..c89047c9 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -33,5 +33,5 @@ export default function Container({ error = false, children, service }) { })); } - return
{visibleChildren}
; + return
{visibleChildren.slice(0, 4)}
; } diff --git a/src/components/tasklist/group.jsx b/src/components/tasklist/group.jsx new file mode 100644 index 00000000..3f56b85c --- /dev/null +++ b/src/components/tasklist/group.jsx @@ -0,0 +1,13 @@ +import ErrorBoundary from "components/errorboundry"; +import List from "components/tasklist/list"; + +export default function TaskListGroup({ group }) { + return ( +
+

{group.name}

+ + + +
+ ); +} diff --git a/src/components/tasklist/item.jsx b/src/components/tasklist/item.jsx new file mode 100644 index 00000000..bf748af6 --- /dev/null +++ b/src/components/tasklist/item.jsx @@ -0,0 +1,14 @@ +export default function Item({ task }) { + return ( +
  • +
    +
    + +
    +
    +
    {task.title}
    +
    +
    +
  • + ); +} diff --git a/src/components/tasklist/list.jsx b/src/components/tasklist/list.jsx new file mode 100644 index 00000000..e5eb97f4 --- /dev/null +++ b/src/components/tasklist/list.jsx @@ -0,0 +1,11 @@ +import Item from "components/tasklist/item"; + +export default function List({ tasklist }) { + return ( + + ); +} diff --git a/src/pages/api/tasklist.js b/src/pages/api/tasklist.js new file mode 100644 index 00000000..8237e3f4 --- /dev/null +++ b/src/pages/api/tasklist.js @@ -0,0 +1,5 @@ +import { tasklistResponse } from "utils/config/api-response"; + +export default async function handler(req, res) { + res.send(await tasklistResponse()); +} diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 025ace6d..13ccbd28 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -10,6 +10,7 @@ import { serverSideTranslations } from "next-i18next/serverSideTranslations"; import ServicesGroup from "components/services/group"; import BookmarksGroup from "components/bookmarks/group"; +import TasklistGroup from "components/tasklist/group"; import Widget from "components/widgets/widget"; import Revalidate from "components/toggles/revalidate"; import createLogger from "utils/logger"; @@ -174,6 +175,7 @@ function Home({ initialSettings }) { const { data: services } = useSWR("/api/services"); const { data: bookmarks } = useSWR("/api/bookmarks"); + const { data: tasklist } = useSWR("/api/tasklist"); const { data: widgets } = useSWR("/api/widgets"); const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()] @@ -294,6 +296,14 @@ function Home({ initialSettings }) { )} + {tasklist?.length > 0 && ( +
    + {tasklist.map((group) => ( + + ))} +
    + )} + {bookmarks?.length > 0 && (
    {bookmarks.map((group) => ( diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index fad3022d..c9689b5d 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -46,6 +46,29 @@ export async function bookmarksResponse() { return bookmarksArray; } +export async function tasklistResponse() { + checkAndCopyConfig("tasklist.yaml"); + + const tasklistYaml = path.join(process.cwd(), "config", "tasklist.yaml"); + const rawFileContents = await fs.readFile(tasklistYaml, "utf8"); + const fileContents = substituteEnvironmentVars(rawFileContents); + const tasklist = yaml.load(fileContents); + + if (!tasklist) return []; + + // map easy to write YAML objects into easy to consume JS arrays + const tasklistArray = tasklist.map((group) => ({ + name: Object.keys(group)[0], + tasklist: group[Object.keys(group)[0]].map((entries) => ({ + // id: Object.values(entries)[0].replaceAll(" ", "_"), + title: Object.values(entries)[0], + checked: Object.values(entries)[1], + })), + })); + + return tasklistArray; +} + export async function widgetsResponse() { let configuredWidgets;