Skip to content

Commit 9cb4fe4

Browse files
committed
feat: add pending review count to MobileMenu, TopNavBar, and Home components; update notification messages accordingly
1 parent 751a465 commit 9cb4fe4

3 files changed

Lines changed: 45 additions & 13 deletions

File tree

src/Components/Layout/MobileMenu.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
import { ScaleIconActionMenu, ScaleTelekomMobileFlyoutCanvas, ScaleTelekomMobileMenu, ScaleTelekomMobileMenuItem, ScaleTelekomNavFlyout, ScaleTelekomNavItem } from "@telekom/scale-components-react";
2+
import { chain } from "lodash";
3+
import { useMemo } from "react";
24
import { useAuth } from "react-oidc-context";
5+
import { EventStatus } from "~/Components/Event/Enums";
6+
import { useStatus } from "~/Services/Status";
37
import { Authorized } from "../Auth/With";
48

59
/**
610
* @author Aloento
711
* @since 1.0.0
8-
* @version 0.2.0
12+
* @version 0.3.0
913
*/
1014
export function MobileMenu() {
1115
const auth = useAuth();
16+
const { DB } = useStatus();
17+
18+
const pendingCount = useMemo(() => chain(DB.Events)
19+
.filter(e => e.Status === EventStatus.PendingReview)
20+
.value().length, [DB]);
1221

1322
return (
1423
<ScaleTelekomNavItem hideOnDesktop>
@@ -39,9 +48,11 @@ export function MobileMenu() {
3948
<a href="/NewEvent">New Event</a>
4049
</ScaleTelekomMobileMenuItem>
4150

42-
<ScaleTelekomMobileMenuItem>
43-
<a href="/Reviews">Reviews: 6</a>
44-
</ScaleTelekomMobileMenuItem>
51+
{pendingCount > 0 && (
52+
<ScaleTelekomMobileMenuItem>
53+
<a href="/Reviews">Reviews: {pendingCount}</a>
54+
</ScaleTelekomMobileMenuItem>
55+
)}
4556

4657
<ScaleTelekomMobileMenuItem>
4758
You're {((auth.user?.profile as any)?.groups as string[])?.filter(x => x.includes("sd"))}

src/Components/Layout/TopNavBar.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { ScaleTelekomHeader, ScaleTelekomNavItem, ScaleTelekomNavList } from "@telekom/scale-components-react";
2+
import { chain } from "lodash";
3+
import { useMemo } from "react";
4+
import { EventStatus } from "~/Components/Event/Enums";
25
import { Dic } from "~/Helpers/Entities";
6+
import { useStatus } from "~/Services/Status";
37
import { Authorized } from "../Auth/With";
48
import { MobileMenu } from "./MobileMenu";
59
import { NavItem } from "./NavItem";
@@ -8,9 +12,15 @@ import { ProfileMenu } from "./ProfileMenu";
812
/**
913
* @author Aloento
1014
* @since 1.0.0
11-
* @version 0.2.0
15+
* @version 0.3.0
1216
*/
1317
export function TopNavBar() {
18+
const { DB } = useStatus();
19+
20+
const pendingCount = useMemo(() => chain(DB.Events)
21+
.filter(e => e.Status === EventStatus.PendingReview)
22+
.value().length, [DB]);
23+
1424
return (
1525
<ScaleTelekomHeader
1626
appName={Dic.Name}
@@ -33,7 +43,7 @@ export function TopNavBar() {
3343
<Authorized>
3444
<NavItem Href="/NewEvent" Label="New Event" />
3545

36-
<NavItem Href="/Reviews" Label="Reviews" />
46+
{pendingCount > 0 && <NavItem Href="/Reviews" Label={`Reviews: ${pendingCount}`} />}
3747
</Authorized>
3848
</ScaleTelekomNavList>
3949

src/Pages/Home.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { chain } from "lodash";
66
import { useEffect, useMemo, useState } from "react";
77
import { Helmet } from "react-helmet";
88
import { BehaviorSubject, Subject } from "rxjs";
9-
import { EventType, IsIncident, IsOpenStatus } from "~/Components/Event/Enums";
9+
import { EventStatus, EventType, IsIncident, IsOpenStatus } from "~/Components/Event/Enums";
1010
import { EventGrid } from "~/Components/Home/EventGrid";
1111
import "~/Components/Home/Home.css";
1212
import { Indicator } from "~/Components/Home/Indicator";
@@ -34,7 +34,7 @@ const log = new Logger("Home");
3434
* @component
3535
* @author Aloento
3636
* @since 1.0.0
37-
* @version 0.2.0
37+
* @version 0.3.0
3838
*/
3939
export function Home() {
4040
const { DB } = useStatus();
@@ -90,17 +90,28 @@ export function Home() {
9090
: `${abnormalCount} components have issues, but don't worry, we are working on it.`
9191
: "All Systems Operational";
9292

93+
const pendingCount = useMemo(() => {
94+
const events = chain(DB.Events)
95+
.filter(e => e.Status === EventStatus.PendingReview)
96+
.value();
97+
98+
log.debug("Pending Maintenance", events);
99+
return events.length;
100+
}, [DB]);
101+
93102
return (
94103
<>
95104
<Helmet>
96105
<title>{Dic.Name} {Dic.Prod}</title>
97106
</Helmet>
98107

99-
<ScaleNotification
100-
heading="You have 6 maintenance events for the review."
101-
opened
102-
variant="informational"
103-
/>
108+
{pendingCount > 0 && (
109+
<ScaleNotification
110+
heading={`You have ${pendingCount} maintenance events pending for review.`}
111+
opened
112+
variant="informational"
113+
/>
114+
)}
104115

105116
<ScaleNotification
106117
heading={heading}

0 commit comments

Comments
 (0)