;
}) {
const data = usePreloadedQuery(FrameworkListPageQuery, queryRef);
+ const { organizationId } = useParams();
const frameworks =
data.organization.frameworks?.edges.map((edge) => edge?.node) ?? [];
@@ -101,12 +101,15 @@ function FrameworkListPageContent({
{frameworks.map((framework) => {
const validatedControls = framework.controls.edges.filter(
- (edge) => edge?.node?.state === "IMPLEMENTED",
+ (edge) => edge?.node?.state === "IMPLEMENTED"
).length;
const totalControls = framework.controls.edges.length;
return (
-
+
(
- FrameworkListPageQuery,
+ FrameworkListPageQuery
);
- const { currentOrganization } = useOrganization();
+ const { organizationId } = useParams();
useEffect(() => {
- loadQuery({ organizationId: currentOrganization!.id });
- }, [loadQuery, currentOrganization]);
+ loadQuery({ organizationId: organizationId! });
+ }, [loadQuery, organizationId]);
return (
<>
diff --git a/apps/console/src/pages/FrameworkOverviewPage.tsx b/apps/console/src/pages/FrameworkOverviewPage.tsx
index 996aed162..e19140b1a 100644
--- a/apps/console/src/pages/FrameworkOverviewPage.tsx
+++ b/apps/console/src/pages/FrameworkOverviewPage.tsx
@@ -54,19 +54,17 @@ function FrameworkOverviewPageContent({
} | null>(null);
const [isTooltipHovered, setIsTooltipHovered] = useState(false);
const navigate = useNavigate();
+ const { organizationId } = useParams();
// Group controls by their category
- const controlsByCategory = controls.reduce(
- (acc, control) => {
- if (!control?.category) return acc;
- if (!acc[control.category]) {
- acc[control.category] = [];
- }
- acc[control.category].push(control);
- return acc;
- },
- {} as Record,
- );
+ const controlsByCategory = controls.reduce((acc, control) => {
+ if (!control?.category) return acc;
+ if (!acc[control.category]) {
+ acc[control.category] = [];
+ }
+ acc[control.category].push(control);
+ return acc;
+ }, {} as Record);
const controlCards = Object.entries(controlsByCategory).map(
([category, controls]) => ({
@@ -74,11 +72,11 @@ function FrameworkOverviewPageContent({
controls,
completed: controls.filter((c) => c?.state === "IMPLEMENTED").length,
total: controls.length,
- }),
+ })
);
const totalImplemented = controls.filter(
- (c) => c?.state === "IMPLEMENTED",
+ (c) => c?.state === "IMPLEMENTED"
).length;
return (
@@ -190,7 +188,7 @@ function FrameworkOverviewPageContent({
onClick={() => {
if (control?.id) {
navigate(
- `/frameworks/${framework.id}/controls/${control.id}`,
+ `/organizations/${organizationId}/frameworks/${framework.id}/controls/${control.id}`
);
}
}}
@@ -274,7 +272,7 @@ function FrameworkOverviewPageContent({
,
- document.body,
+ document.body
)}
);
@@ -308,7 +306,7 @@ function FrameworkOverviewPageFallback() {
export default function FrameworkOverviewPage() {
const { frameworkId } = useParams();
const [queryRef, loadQuery] = useQueryLoader(
- FrameworkOverviewPageQuery,
+ FrameworkOverviewPageQuery
);
useEffect(() => {
diff --git a/apps/console/src/pages/HomePage.tsx b/apps/console/src/pages/HomePage.tsx
index 9e0854493..d6bfecf0c 100644
--- a/apps/console/src/pages/HomePage.tsx
+++ b/apps/console/src/pages/HomePage.tsx
@@ -5,116 +5,112 @@ import {
usePreloadedQuery,
useQueryLoader,
} from "react-relay";
-import { Link } from "react-router";
+import { Link, useParams } from "react-router";
import type { HomePageQuery as HomePageQueryType } from "./__generated__/HomePageQuery.graphql";
export const HomePageQuery = graphql`
- query HomePageQuery {
- viewer {
- id
- organizations {
- edges {
- node {
- name
- createdAt
- updatedAt
- vendors {
- edges {
- node {
- id
- name
- createdAt
- updatedAt
- }
- }
+ query HomePageQuery($organizationId: ID!) {
+ organization: node(id: $organizationId) {
+ ... on Organization {
+ id
+ name
+ createdAt
+ updatedAt
+ vendors {
+ edges {
+ node {
+ id
+ name
+ createdAt
+ updatedAt
}
- peoples {
- edges {
- node {
- id
- fullName
- primaryEmailAddress
- additionalEmailAddresses
- createdAt
- updatedAt
- }
- }
+ }
+ }
+ peoples {
+ edges {
+ node {
+ id
+ fullName
+ primaryEmailAddress
+ additionalEmailAddresses
+ createdAt
+ updatedAt
}
- frameworks {
- pageInfo {
- hasNextPage
- hasPreviousPage
- startCursor
- endCursor
- }
- edges {
- cursor
- node {
- id
- name
- description
- controls {
- edges {
- node {
- id
- name
- state
- stateTransisions {
- edges {
- node {
- id
- toState
- fromState
- createdAt
- updatedAt
- }
- }
+ }
+ }
+ frameworks {
+ pageInfo {
+ hasNextPage
+ hasPreviousPage
+ startCursor
+ endCursor
+ }
+ edges {
+ cursor
+ node {
+ id
+ name
+ description
+ controls {
+ edges {
+ node {
+ id
+ name
+ state
+ stateTransisions {
+ edges {
+ node {
+ id
+ toState
+ fromState
+ createdAt
+ updatedAt
}
- tasks {
- edges {
- node {
- id
- name
- state
- evidences {
- edges {
- node {
- id
- state
- fileUrl
- stateTransisions {
- edges {
- node {
- id
- fromState
- toState
- reason
- createdAt
- updatedAt
- }
- }
+ }
+ }
+ tasks {
+ edges {
+ node {
+ id
+ name
+ state
+ evidences {
+ edges {
+ node {
+ id
+ state
+ fileUrl
+ stateTransisions {
+ edges {
+ node {
+ id
+ fromState
+ toState
+ reason
+ createdAt
+ updatedAt
}
- createdAt
- updatedAt
}
}
+ createdAt
+ updatedAt
}
- stateTransisions {
- edges {
- node {
- id
- toState
- fromState
- reason
- createdAt
- updatedAt
- }
- }
- }
- createdAt
- updatedAt
}
}
+ stateTransisions {
+ edges {
+ node {
+ id
+ toState
+ fromState
+ reason
+ createdAt
+ updatedAt
+ }
+ }
+ }
+ createdAt
+ updatedAt
}
}
}
@@ -130,10 +126,15 @@ export const HomePageQuery = graphql`
`;
export default function HomePage() {
+ const { organizationId } = useParams();
const [queryRef, loadQuery] =
useQueryLoader(HomePageQuery);
- useEffect(() => loadQuery({}), [loadQuery]);
+ useEffect(() => {
+ if (organizationId) {
+ loadQuery({ organizationId });
+ }
+ }, [organizationId, loadQuery]);
if (!queryRef) {
return ;
@@ -155,6 +156,7 @@ function HomePageContent({
}: {
queryRef: PreloadedQuery;
}) {
+ const { organizationId } = useParams();
const data = usePreloadedQuery(HomePageQuery, queryRef);
return (
@@ -166,7 +168,9 @@ function HomePageContent({
{JSON.stringify(data, null, 2)}
-
Go to FooPage
+
+ Go to Frameworks
+
);
diff --git a/apps/console/src/pages/LoginPage.tsx b/apps/console/src/pages/LoginPage.tsx
index e23ff9fcb..323ea9965 100644
--- a/apps/console/src/pages/LoginPage.tsx
+++ b/apps/console/src/pages/LoginPage.tsx
@@ -22,16 +22,6 @@ export default function LoginPage() {
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
-
- if (!email || !password) {
- toast({
- title: "Error",
- description: "Email and password are required",
- variant: "destructive",
- });
- return;
- }
-
setIsLoading(true);
try {
@@ -40,24 +30,30 @@ export default function LoginPage() {
headers: {
"Content-Type": "application/json",
},
- credentials: "include",
body: JSON.stringify({ email, password }),
+ credentials: "include",
});
if (!response.ok) {
- const errorData = await response.json().catch(() => ({}));
- throw new Error(errorData.message || "Login failed");
+ const error = await response.json();
+ throw new Error(error.message || "Failed to login");
}
- // Check authentication status after login
- await checkAuth();
-
- // Redirect to the original page or home after successful login
- navigate(from, { replace: true });
- } catch (error) {
+ const authenticated = await checkAuth();
+ if (authenticated) {
+ toast({
+ title: "Success",
+ description: "Logged in successfully",
+ variant: "default",
+ });
+ navigate("/");
+ } else {
+ throw new Error("Authentication failed");
+ }
+ } catch (error: any) {
toast({
title: "Error",
- description: error instanceof Error ? error.message : "Login failed",
+ description: error.message || "Failed to login",
variant: "destructive",
});
} finally {
@@ -66,58 +62,86 @@ export default function LoginPage() {
};
return (
- <>
-
- Log in - Probo
-
-
-
-
-
Log in
-
- Enter your credentials to access your account
-
-
-
-