Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 4 additions & 3 deletions src/app/api/workspaces/[slug]/stakgraph/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ const encryptionService: EncryptionService = EncryptionService.getInstance();
// Validation schema for stakgraph settings
const stakgraphSettingsSchema = z.object({
name: z.string().min(1, "Name is required"),
repositoryUrl: z.string().url("Invalid repository URL"),
swarmUrl: z.string().url("Invalid swarm URL"),
swarmSecretAlias: z.string().min(1, "Swarm API key is required"),
repositoryUrl: z.union([z.literal(""), z.string().url("Invalid repository URL")]),
defaultBranch: z.string().optional().default("main"),
swarmUrl: z.union([z.literal(""), z.string().url("Invalid swarm URL")]),
swarmSecretAlias: z.union([z.literal(""), z.string().min(1, "Swarm API key is required")]),
swarmApiKey: z.string().optional(),
poolName: z.string().min(1, "Pool name is required"),
poolCpu: z.string().optional(),
Expand Down
126 changes: 4 additions & 122 deletions src/app/w/[slug]/stakgraph/page.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
"use client";

import { EnvironmentForm, ProjectInfoForm, RepositoryForm, ServicesForm, SwarmForm } from "@/components/stakgraph";
import { EnvironmentForm, ServicesForm } from "@/components/stakgraph";
import { FileTabs } from "@/components/stakgraph/forms/EditFilesForm";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { useToast } from "@/components/ui/use-toast";
import { PageHeader } from "@/components/ui/page-header";
import { useWorkspace } from "@/hooks/useWorkspace";
import { useStakgraphStore } from "@/stores/useStakgraphStore";
import { useGitVisualizer } from "@/hooks/useGitVisualizer";
import { Webhook, Loader2, Save, ArrowLeft } from "lucide-react";
import { Loader2, Save, ArrowLeft } from "lucide-react";
import { useEffect } from "react";
import { useRouter } from "next/navigation";

export default function StakgraphPage() {
const { slug, id, refreshCurrentWorkspace } = useWorkspace();
const { slug, refreshCurrentWorkspace } = useWorkspace();
const router = useRouter();

const {
Expand All @@ -25,9 +24,6 @@ export default function StakgraphPage() {
saved,
loadSettings,
saveSettings,
handleProjectInfoChange,
handleRepositoryChange,
handleSwarmChange,
handleEnvironmentChange,
handleEnvVarsChange,
handleServicesChange,
Expand All @@ -36,13 +32,6 @@ export default function StakgraphPage() {

const { toast } = useToast();

// Initialize GitVisualizer
useGitVisualizer({
workspaceId: id,
repositoryUrl: formData.repositoryUrl,
swarmUrl: formData.swarmUrl,
});

// Load existing settings on component mount
useEffect(() => {
if (slug) {
Expand All @@ -59,70 +48,6 @@ export default function StakgraphPage() {
refreshCurrentWorkspace();
};

const handleEnsureWebhooks = async () => {
try {
if (!id) {
toast({
title: "Error",
description: "Workspace not ready",
variant: "destructive",
});
return;
}
const res = await fetch("/api/github/webhook/ensure", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
workspaceId: id,
repositoryUrl: formData.repositoryUrl,
}),
});

const data = await res.json();

if (!res.ok) {
if (data.error === "INSUFFICIENT_PERMISSIONS") {
toast({
title: "Permission Required",
description: data.message || "Admin access required to manage webhooks on this repository",
variant: "destructive",
});
} else {
toast({
title: "Error",
description: data.message || "Failed to add webhooks",
variant: "destructive",
});
}
return;
}

toast({
title: "Webhooks added",
description: "GitHub webhooks have been ensured",
});
await loadSettings(slug!);
} catch (error) {
console.error("Failed to ensure webhooks", error);
toast({
title: "Error",
description: "Failed to add webhooks",
variant: "destructive",
});
}
};

// const allFieldsFilled =
// formData.name &&
// formData.repositoryUrl &&
// formData.swarmUrl &&
// formData.swarmSecretAlias &&
// formData.poolName
// ? true
// : false;

// console.log("allFieldsFilled", allFieldsFilled);

if (initialLoading) {
return (
<div className="space-y-6">
Expand Down Expand Up @@ -158,16 +83,8 @@ export default function StakgraphPage() {
/>

<Card className="max-w-2xl">
<CardHeader className="flex flex-row items-center justify-between">
<CardHeader>
<CardTitle>Pool Settings</CardTitle>
<div className="flex gap-2">
{!formData.webhookEnsured && formData.repositoryUrl ? (
<Button type="button" variant="default" onClick={handleEnsureWebhooks}>
<Webhook className="mr-2 h-4 w-4" />
Add Github Webhooks
</Button>
) : null}
</div>
</CardHeader>
<CardContent>
<form onSubmit={handleSubmit} className="space-y-6">
Expand All @@ -184,34 +101,6 @@ export default function StakgraphPage() {
)}

<div className="space-y-6">
<ProjectInfoForm
data={{
name: formData.name,
description: formData.description,
}}
errors={errors}
loading={loading}
onChange={handleProjectInfoChange}
/>

<RepositoryForm
data={{ repositoryUrl: formData.repositoryUrl }}
errors={errors}
loading={loading}
onChange={handleRepositoryChange}
/>

<SwarmForm
data={{
swarmUrl: formData.swarmUrl,
swarmApiKey: formData.swarmApiKey || "",
swarmSecretAlias: formData.swarmSecretAlias,
}}
errors={errors}
loading={loading}
onChange={handleSwarmChange}
/>

<EnvironmentForm
data={{
poolName: formData.poolName,
Expand Down Expand Up @@ -250,13 +139,6 @@ export default function StakgraphPage() {
</form>
</CardContent>
</Card>

{/* Gitsee section */}
<Card className="max-w-2xl">
<CardContent>
<svg width="500" height="500" id="vizzy" style={{ width: "100%", height: "100%" }}></svg>
</CardContent>
</Card>
</div>
);
}
Loading