Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
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
6 changes: 5 additions & 1 deletion apps/app/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,8 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts

.trigger
.trigger

# temp files
*/locales/translations.json
*/locales/converter.ts
46 changes: 46 additions & 0 deletions apps/app/languine.lock
Original file line number Diff line number Diff line change
Expand Up @@ -677,6 +677,9 @@ files:
frameworks.controls.statuses.in_progress: c9413dd7682a45da9ecc9efa8cea47d7
frameworks.controls.statuses.not_started: 10db56f8b10dc989c43fbe33202e5339
errors.unexpected: 325a357f60b95f37fec18b15cb39fbb0
errors.unauthorized.title: 2a5277746841d80f9489dd85fabc769d
errors.unauthorized.description: 118ce881f1bd6df5785ce15698255334
errors.unauthorized.back: 56cf8b33ab527ab81b4f6b3ceac090dd
editor.ai.thinking: aba464039b337eb2e75c2520039de58f
editor.ai.thinking_spinner: aba464039b337eb2e75c2520039de58f
editor.ai.edit_or_generate: 7d46fd8c65c35acb13973849b035cc53
Expand Down Expand Up @@ -718,6 +721,49 @@ files:
vendors.dashboard.title: 3b878279a04dc47d60932cb294d96259
vendors.register.title: 122b14e8fa33bc9d4f389700439dfc71
vendors.register.create_new: ef1c7d5e555d7fe288bf0bf16b88723d
vendors.create: ef1c7d5e555d7fe288bf0bf16b88723d
vendors.form.vendor_details: c594485dedf99a5bbae0ce0b1e08c57a
vendors.form.vendor_name: 49ee3087348e8d44e1feda1917443987
vendors.form.vendor_name_placeholder: 76d22a64aa21a6f1fe356624bb42487e
vendors.form.vendor_website: 15bbb9d0bbf25e8d2978de1168c749dc
vendors.form.vendor_website_placeholder: 0edbf3ae0d36cb35fdae8df56396e8f0
vendors.form.vendor_description: b5a7adde1af5c87d7fd797b6245c2a39
vendors.form.vendor_description_placeholder: edd59fcb97919e8a914f29d1b8c94a84
vendors.form.vendor_category: 3adbdb3ac060038aa0e6e6c138ef9873
vendors.form.vendor_category_placeholder: 03368e3c1eb4d2a9048775874301b19f
vendors.form.vendor_status: ec53a8c4f07baed5d8825072c89799be
vendors.form.vendor_status_placeholder: 9aadb017cc5b335be77ba090d5029259
vendors.form.create_vendor_success: 86783216c2055e4b01d9a6d920e418c7
vendors.form.create_vendor_error: ca4cedd93fdb023d6f9748dd3b66b456
vendors.form.update_vendor: 13002cf3244d871685ebac44761efa0f
vendors.form.update_vendor_success: eaedfa5b3ca431e1ca8900a8f0d5c924
vendors.form.update_vendor_error: 92b965a71c44a134e2eae6d71493e4d9
vendors.form.add_comment: a508cd6ee07b35ea8efdf98d6520ce83
vendors.table.name: 49ee3087348e8d44e1feda1917443987
vendors.table.category: 3adbdb3ac060038aa0e6e6c138ef9873
vendors.table.status: ec53a8c4f07baed5d8825072c89799be
vendors.table.owner: b6f4a2ec6356bbd56d49f2096bf9d3d3
vendors.filters.search_placeholder: f40df41fdaa46e2d0503adf12a9304fe
vendors.filters.status_placeholder: 5dd5cd6670a0fc8e47a47aa94d27b8b2
vendors.filters.category_placeholder: 42d00bc24fd43cfe3e2e30d01f39ee95
vendors.filters.owner_placeholder: 2cf13cb9c60a98dee6767692b12e9c2e
vendors.empty_states.no_vendors.title: 69c843f9cf71049dacacff0c48edb7b2
vendors.empty_states.no_vendors.description: 955707a384c1cfc46fafbdebc508f9e0
vendors.empty_states.no_results.title: e576c23d915755d83e2d1f47bd9f6c22
vendors.empty_states.no_results.description: d7fd5c52726c5016a59fb01e74069441
vendors.empty_states.no_results.description_with_filters: 2b70f835ed5a08e817ec9388ce25b41a
vendors.actions.create: ef1c7d5e555d7fe288bf0bf16b88723d
vendors.status.not_assessed: 1a261b378451a287de3a8fbbb6f2a376
vendors.status.in_progress: c9413dd7682a45da9ecc9efa8cea47d7
vendors.status.assessed: 2c051fa737a0d6c7274f4508448b7f8a
vendors.category.cloud: c8e2277ecfb1427838c488c217f99466
vendors.category.infrastructure: cba4f4cee5c6a3e6d8be8da68fa1234e
vendors.category.software_as_a_service: 68c0c53c6a8ab47f4b611dbf1c347a26
vendors.category.finance: c482980d384a9d0e7bc39e1140270870
vendors.category.marketing: 7cb15e416d62919b1b40298324fbe30b
vendors.category.sales: 11ff9f68afb6b8b5b8eda218d7c83a65
vendors.category.hr: fd4c638da5f85d025963f99fe90b1b1a
vendors.category.other: 6311ae17c1ee52b36e68aaf4ad066387
dashboard.risk_status: 6ce5e6fa832289748023cb773a4e89ac
dashboard.risks_by_department: 0ef508d7e840bc5f85547c3b25e5d87b
dashboard.vendor_status: 17029fbe5ad4d2af5feaf37bb4604225
Expand Down
69 changes: 36 additions & 33 deletions apps/app/next.config.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,42 @@
import "./src/env.mjs";

const config = {
poweredByHeader: false,
reactStrictMode: true,
images: {
remotePatterns: [
{
protocol: "https",
hostname: "**",
},
],
},
transpilePackages: ["@bubba/ui"],
logging: {
fetches: {
fullUrl: process.env.LOG_FETCHES === "true",
},
},
async rewrites() {
return [
{
source: "/ingest/static/:path*",
destination: "https://us-assets.i.posthog.com/static/:path*",
},
{
source: "/ingest/:path*",
destination: "https://us.i.posthog.com/:path*",
},
{
source: "/ingest/decide",
destination: "https://us.i.posthog.com/decide",
},
];
},
skipTrailingSlashRedirect: true,
poweredByHeader: false,
reactStrictMode: true,
images: {
remotePatterns: [
{
protocol: "https",
hostname: "**",
},
],
},
transpilePackages: ["@bubba/ui"],
logging: {
fetches: {
fullUrl: process.env.LOG_FETCHES === "true",
},
},
experimental: {
authInterrupts: true,
},
async rewrites() {
return [
{
source: "/ingest/static/:path*",
destination: "https://us-assets.i.posthog.com/static/:path*",
},
{
source: "/ingest/:path*",
destination: "https://us.i.posthog.com/:path*",
},
{
source: "/ingest/decide",
destination: "https://us.i.posthog.com/decide",
},
];
},
skipTrailingSlashRedirect: true,
};

export default config;
1 change: 1 addition & 0 deletions apps/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"apply-migrations": "cd ../../packages/db && bunx prisma migrate dev && cd ../../apps/app",
"clean-react": "rm -rf node_modules/react; rm -rf node_modules/react-dom",
"deploy:trigger-prod": "npx trigger.dev@latest deploy",
"analyze-locale-usage": "bunx tsx src/locales/analyze-locale-usage.ts",
"typecheck": "tsc --noEmit"
},
"dependencies": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.people.employee_details"),
title: t("people.employee_details"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.policies.policy_details"),
title: t("policies.policy_details"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.policies.policy_details"),
title: t("policies.policy_details"),
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.risk.risk_comments"),
title: t("risk.risk_comments"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.risk.risk_overview"),
title: t("risk.risk_overview"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.risk.tasks.task_overview"),
title: t("risk.tasks.task_overview"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.risk.register"),
title: t("risk.register"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ export async function generateMetadata({
const t = await getI18n();

return {
title: t("sub_pages.settings.members"),
title: t("settings.members"),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ export async function generateMetadata({
setStaticParamsLocale(locale);
const t = await getI18n();

return {
title: t("sub_pages.tests.test_details"),
};
return {
title: t("tests.test_details"),
};
}

const getUsers = async (organizationId: string) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { auth } from "@/auth";
import { getI18n } from "@/locales/server";
import { db } from "@bubba/db";
import { Button } from "@bubba/ui/button";
import { Card } from "@bubba/ui/card";
import type { Metadata } from "next";
import { setStaticParamsLocale } from "next-international/server";
import Link from "next/link";
import { redirect } from "next/navigation";

export default async function RiskManagement({
export default async function VendorManagement({
params,
}: {
params: Promise<{ locale: string }>;
Expand All @@ -19,10 +22,31 @@ export default async function RiskManagement({
redirect("/onboarding");
}

const overview = await getRiskOverview(session.user.organizationId);
const overview = await getVendorOverview(session.user.organizationId);

if (overview?.risks === 0) {
redirect(`/${session.user.organizationId}/risk/register`);
if (overview?.vendors === 0) {
return (
<div className="min-h-[400px] flex items-center justify-center">
<Card className="w-full max-w-lg p-8 space-y-6">
<div className="space-y-2 text-center">
<h1 className="text-2xl font-semibold tracking-tight">
No vendors found
</h1>
<p className="text-muted-foreground">
Get started by adding your first vendor
</p>
</div>

<div className="flex justify-center">
<Button asChild>
<Link href={`/${session.user.organizationId}/vendors/register`}>
Add vendor
</Link>
</Button>
</div>
</Card>
</div>
);
}

return (
Expand All @@ -39,19 +63,19 @@ export default async function RiskManagement({
);
}

const getRiskOverview = async (organizationId: string) => {
async function getVendorOverview(organizationId: string) {
return await db.$transaction(async (tx) => {
const [risks] = await Promise.all([
tx.risk.count({
const [vendors] = await Promise.all([
tx.vendor.count({
where: { organizationId },
}),
]);

return {
risks,
vendors,
};
});
};
}

export async function generateMetadata({
params,
Expand Down

This file was deleted.

Loading