Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
f627a3b
refactor: update Tailwind CSS configuration and styles
Aloento Feb 4, 2026
81f0a1a
feat: add @telekom-ods/react-ui-kit dependency and update .gitignore
Aloento Feb 4, 2026
01ef793
feat: move @telekom-ods/react-ui-kit to optionalDependencies in packa…
Aloento Feb 4, 2026
31fdd96
refactor: remove optionalDependencies for @telekom-ods/react-ui-kit a…
Aloento Feb 4, 2026
b6aa94f
feat: add @telekom-ods/react-ui-kit dependency to package.json and pn…
Aloento Feb 4, 2026
8e10ba0
feat: update branding references and improve metadata across multiple…
Aloento Feb 4, 2026
f63fdcf
feat: add Reviews page and mock data for reviews history
Aloento Feb 4, 2026
f9b1afe
feat: update reviews history mock data with correct region values
Aloento Feb 4, 2026
f3c3f31
feat: update reviews history mock data with additional entries for Lo…
Aloento Feb 4, 2026
b7a7ae8
Merge branch 'main' into role
Aloento Feb 5, 2026
fbaff61
fix: update ScaleTable class for proper overflow handling
Aloento Feb 5, 2026
9dde440
refactor: simplify titles in Availability, History, and Home components
Aloento Feb 5, 2026
d57d5f8
Merge branch 'main' into role
Aloento Feb 5, 2026
2ac02cf
Merge branch 'main' into role
Aloento Feb 6, 2026
6534d05
Merge branch 'main' into role
Aloento Feb 6, 2026
d2abd3a
feat: add contact email functionality to event management
Aloento Feb 12, 2026
6cd9d68
feat: refactor ProfileMenu component structure and enhance notificati…
Aloento Feb 12, 2026
6486e1a
feat: add contact email field for maintenance events and update valid…
Aloento Feb 13, 2026
d849c5c
feat: add informational notification for maintenance events in Home c…
Aloento Feb 13, 2026
8595098
feat: refactor Reviews component to use ScaleDataGrid and improve pag…
Aloento Feb 25, 2026
6c76d75
feat: add new service URLs for T Cloud and MyWorkplace in serviceSlugMap
Aloento Feb 25, 2026
0fc0031
feat: update footer content to reflect T-Systems International GmbH a…
Aloento Feb 25, 2026
c23c643
Merge branch 'main' into role
Aloento Mar 24, 2026
117dc8f
Refactor code structure for improved readability and maintainability
Aloento Mar 24, 2026
692957a
fix: update proxy target in farm.config.ts and improve signinCallback…
Aloento Mar 24, 2026
73a3e65
Merge branch 'rbac' into role
Aloento Mar 24, 2026
0e55bc7
refactor: remove unused CSS and update layout components for improved…
Aloento Mar 24, 2026
9ca404c
feat: update MobileMenu and ProfileMenu to display user group informa…
Aloento Mar 24, 2026
1517ab6
feat: enhance Authorized component to accept role prop for group-base…
Aloento Mar 24, 2026
8d962a0
feat: update Authorized component to use rules for group-based access…
Aloento Mar 24, 2026
a2c60e6
feat: add approval and extraction buttons to EventCard and EventExtra…
Aloento Mar 24, 2026
7999cc1
feat: update StatusEnum to include new status values and adjust Trans…
Aloento Mar 25, 2026
751a465
feat: update EventStatus enum to include PendingReview and adjust Tra…
Aloento Mar 25, 2026
9cb4fe4
feat: add pending review count to MobileMenu, TopNavBar, and Home com…
Aloento Mar 25, 2026
5139e36
feat: update page size menu styling in History and Reviews components…
Aloento Mar 25, 2026
1f91a46
feat: filter events by PendingReview status in History and Reviews co…
Aloento Mar 25, 2026
b634791
feat: add EventApprove component and integrate it into EventCard for …
Aloento Mar 25, 2026
dffa023
fix: update serviceSlugMap.json to correct T Cloud Public entry name
Aloento Mar 26, 2026
eaf5b14
Merge branch 'main' into role
Aloento Mar 31, 2026
48549e6
fix: improve loading logic in useStatus hook and update version to 0.2.0
Aloento Mar 31, 2026
32ac3ad
feat: enhance App component with loading spinner and update StatusCon…
Aloento Mar 31, 2026
69b0534
feat: update event handling with new status and edit form functionality
Aloento Mar 31, 2026
0881867
feat: enhance toast notifications with titles for event approval and …
Aloento Mar 31, 2026
0b0373a
refactor: simplify button layout in EventEditor component
Aloento Apr 8, 2026
7484d3e
feat: add validation for maintenance start time in useNewForm hook
Aloento Apr 8, 2026
3482e08
feat: update event versioning logic and enhance data models for event…
Aloento Apr 8, 2026
21cbfff
Merge branch 'main' into role
Aloento Apr 9, 2026
fd9d342
feat: update Toast component to include ToastBody for improved messag…
Aloento Apr 13, 2026
1b63167
feat: update event status handling and improve incident entity structure
Aloento Apr 14, 2026
54690e4
feat: enhance authorization logic in EventCard for PendingReview status
Aloento Apr 15, 2026
68d8a19
feat: enhance start date validation and add warning for maintenance e…
Aloento Apr 15, 2026
6021727
feat: add confirmation for maintenance start time and enhance form st…
Aloento Apr 26, 2026
8b4f8d1
feat: simplify start time validation and improve warning handling in …
Aloento Apr 26, 2026
3261c79
feat: update time picker format in Dic to exclude seconds
Aloento Apr 26, 2026
80a4505
feat: enhance event approval logic and update event status management
Aloento Apr 26, 2026
aae033c
feat: refactor event status resolution logic and streamline update ha…
Aloento Apr 29, 2026
cfb0fc3
feat: enhance GetStatusList function to include status and groups par…
Aloento May 2, 2026
2fb09f5
Merge branch 'main' into role
Aloento May 13, 2026
e672a92
Roles.Operators
Aloento Jun 10, 2026
17c9811
Split services
Aloento Jun 10, 2026
d090846
36-hour
Aloento Jun 10, 2026
1317637
EventExtract
Aloento Jun 10, 2026
20df18e
Description is required for maintenance.
Aloento Jun 11, 2026
59c6d09
Merge branch 'main' into role
Aloento Jun 29, 2026
4c1f7d4
update dependencies to latest versions
Aloento Jun 29, 2026
88ec72e
fix
Aloento Jun 29, 2026
2a6f984
Merge branch 'main' into role
Aloento Jun 29, 2026
a53081a
Merge branch 'main' into role
Aloento Jun 29, 2026
0b2ecac
Suspense
Aloento Jun 29, 2026
4fe1983
ContactEmail
Aloento Jun 29, 2026
6a8ef37
access_token
Aloento Jun 29, 2026
b4be999
ContactEmail
Aloento Jun 29, 2026
0e9f18b
Merge branch 'main' into email
Aloento Jun 30, 2026
9621b70
Merge branch 'email' into role
Aloento Jun 30, 2026
e5582a4
1
Aloento Jun 30, 2026
5f6a967
isLoading
Aloento Jun 30, 2026
4c00313
Merge branch 'main' into role
Aloento Jul 1, 2026
907057e
setTimeout
Aloento Jul 1, 2026
f7ac349
throwIfAborted
Aloento Jul 1, 2026
ef3ba52
1
Aloento Jul 3, 2026
69e3080
1
Aloento Jul 3, 2026
44e5888
Merge branch 'main' into role
Aloento Jul 3, 2026
43239fa
Merge branch 'main' into role
Aloento Jul 6, 2026
b2d3c17
[Feat] Integrate authorization for pending event notifications in Hom…
Aloento Jul 6, 2026
fafe795
[Feat] Refactor role management by introducing Groups for better read…
Aloento Jul 6, 2026
fff7dd0
[Fix] Update EventEditor component to conditionally render Type dropd…
Aloento Jul 6, 2026
14c193a
[Feat] Enhance NewForm component to conditionally render event types …
Aloento Jul 6, 2026
08f94b4
[Feat] Add authorization to EventEditor rendering based on event stat…
Aloento Jul 6, 2026
9455558
[Refactor] Simplify authorization logic in EventCard component for be…
Aloento Jul 6, 2026
89b1efd
[Refactor] Remove Groups constant from Auth module and clean up Mobil…
Aloento Jul 7, 2026
f375e37
[Refactor] Update EventApprove and EventCard components to enhance us…
Aloento Jul 7, 2026
bbb0729
[Refactor] Update EventCard and EventGrid components to improve autho…
Aloento Jul 7, 2026
0f35d80
[Refactor] Enhance authorization logic by adding GitHub role to vario…
Aloento Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 39 additions & 39 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions src/Components/Auth/With.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import { useAuth } from "react-oidc-context";
/**
* @author Aloento
* @since 1.5.0
* @version 0.1.0
* @version 0.1.1
*/
export const enum Roles {
Readers = "/sd_readers",
Creators = "/sd_creators",
Operators = "/sd_operators",
Admins = "/sd_admins"
Admins = "/sd_admins",
GitHub = "/status-dashboard"
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Components/Event/Enums.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ export function GetStatusList(type: EventType, status?: EventStatus, groups?: st
if (groups.some(g => g === Roles.Creators)) {
return [EventStatus.PendingReview, EventStatus.Cancelled];
}
if (groups.some(g => g === Roles.Operators || g === Roles.Admins)) {
if (groups.some(g => g === Roles.Operators || g === Roles.Admins || g === Roles.GitHub)) {
return [EventStatus.PendingReview, ...Object.values(EventStatus).slice(5, 10)];
}
}
Expand Down
75 changes: 75 additions & 0 deletions src/Components/Event/EventApprove.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { Toast, ToastBody, ToastTitle, useToastController } from "@fluentui/react-components";
import { ScaleButton, ScaleIconActionCheckmark } from "@telekom/scale-components-react";
import { useRequest } from "ahooks";
import { useAuth } from "react-oidc-context";
import { useStatus } from "~/Services/Status";
import { StatusEnum } from "~/Services/Status.Entities";
import { Models } from "~/Services/Status.Models";
import { useAccessToken } from "../Auth/useAccessToken";
import { EventStatus } from "./Enums";

/**
* @author Aloento
* @since 1.5.0
* @version 0.2.3
*/
export function EventApprove({ Event }: { Event: Models.IEvent }) {
const { Update } = useStatus();

const getToken = useAccessToken();
const { user } = useAuth();
const { dispatchToast } = useToastController();

const { runAsync, loading } = useRequest(async () => {
const url = process.env.SD_BACKEND_URL!;
const raw = await fetch(`${url}/v2/events/${Event.Id}`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${getToken()}`,
},
body: JSON.stringify({
status: StatusEnum.Reviewed,
version: Event.Version ?? Event.Histories.size + 1,
message: `Approved by ${user?.profile.name || user?.profile.preferred_username}`,
update_date: new Date().toISOString(),
}),
});

if (!raw.ok) {
const message = await raw.text();
dispatchToast(
<Toast>
<ToastTitle>Failed to approve event</ToastTitle>
<ToastBody>{message}</ToastBody>
</Toast>,
{ intent: "warning" }
);
throw new Error("Failed to approve event: " + message);
}

Event.Status = EventStatus.Reviewed;
Event.Histories.add({
Id: Event.Histories.size + 1,
Created: new Date(),
Event,
Message: `Approved by ${user?.profile.name || user?.profile.preferred_username}`,
Status: EventStatus.Reviewed,
});
Update();
}, {
manual: true,
});

return (
<ScaleButton
size="small"
variant="secondary"
disabled={loading}
onClick={() => runAsync()}
>
<ScaleIconActionCheckmark />
&nbsp;Approve
</ScaleButton>
);
}
33 changes: 23 additions & 10 deletions src/Components/Event/EventCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import remarkGfm from 'remark-gfm';
import remarkIns from 'remark-ins';
import { Dic } from "~/Helpers/Entities";
import { Models } from "~/Services/Status.Models";
import { Authorized } from "../Auth/With";
import { Authorized, Roles } from "../Auth/With";
import { Indicator } from "../Home/Indicator";
import { EventStatus, EventType, IsIncident } from "./Enums";
import { EventAffected } from "./EventAffected";
import { EventApprove } from "./EventApprove";
import { EventEditor } from "./EventEditor";
import { EventExtract } from "./EventExtract";

Expand All @@ -26,7 +27,7 @@ import { EventExtract } from "./EventExtract";
*
* @author Aloento
* @since 1.0.0
* @version 0.2.0
* @version 0.3.1
*/
export function EventCard({ Event }: { Event: Models.IEvent }) {
return (
Expand All @@ -40,15 +41,27 @@ export function EventCard({ Event }: { Event: Models.IEvent }) {
</h3>
</div>

<Authorized>
<div className="flex gap-x-3">
{
Event.RegionServices.size > 1 &&
<EventExtract Event={Event} />
}
<div className="flex gap-x-3">
<Authorized rules={(groups) =>
Event.Status === EventStatus.PendingReview &&
groups.some(g => g === Roles.Operators || g === Roles.Admins || g === Roles.GitHub)}>
<EventApprove Event={Event} />
</Authorized>

<Authorized rules={(groups) =>
Event.RegionServices.size > 1 &&
groups.some(g => g === Roles.Operators || g === Roles.Admins || g === Roles.GitHub)}>
<EventExtract Event={Event} />
</Authorized>

<Authorized rules={(groups) => (
Event.Status === EventStatus.PendingReview &&
groups.some(g => g === Roles.Creators)
) ||
groups.some(g => g === Roles.Operators || g === Roles.Admins || g === Roles.GitHub)}>
<EventEditor Event={Event} />
</div>
</Authorized>
</Authorized>
</div>
</div>

<div className="flex gap-x-2.5">
Expand Down
Loading