Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
4 changes: 4 additions & 0 deletions crates/web/src/assets/css/components.css
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,10 @@
-webkit-mask-image: url("../icons/masks/mask-2f9b873ab7f9e17f.svg");
mask-image: url("../icons/masks/mask-2f9b873ab7f9e17f.svg");
}
.settings-nav-item[data-section="projects"]::before {
-webkit-mask-image: url("../icons/masks/mask-9efc91f08692af1a.svg");
mask-image: url("../icons/masks/mask-9efc91f08692af1a.svg");
}
.settings-nav-item[data-section="environment"]::before,
.settings-nav-item[data-section="terminal"]::before {
-webkit-mask-image: url("../icons/masks/mask-2920334234a725b2.svg");
Expand Down
29 changes: 15 additions & 14 deletions crates/web/src/assets/js/page-projects.js
Original file line number Diff line number Diff line change
Expand Up @@ -316,17 +316,18 @@ function ProjectsPage() {
`;
}

registerPage(
routes.projects,
function initProjects(container) {
container.style.cssText = "flex-direction:column;padding:0;overflow:hidden;";
editingProject.value = null;
completions.value = [];
detecting.value = false;
render(html`<${ProjectsPage} />`, container);
},
function teardownProjects() {
var container = S.$("pageContent");
if (container) render(null, container);
},
);
export function initProjects(container) {
container.style.cssText = "flex-direction:column;padding:0;overflow:hidden;";
editingProject.value = null;
completions.value = [];
detecting.value = false;
clearing.value = false;
render(html`<${ProjectsPage} />`, container);
}

export function teardownProjects() {
var container = S.$("pageContent");
if (container) render(null, container);
}

registerPage(routes.projects, initProjects, teardownProjects);
8 changes: 8 additions & 0 deletions crates/web/src/assets/js/page-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { initMcp, teardownMcp } from "./page-mcp.js";
import { initMonitoring, teardownMonitoring } from "./page-metrics.js";
import { initNetworkAudit, teardownNetworkAudit } from "./page-network-audit.js";
import { initNodes, teardownNodes } from "./page-nodes.js";
import { initProjects, teardownProjects } from "./page-projects.js";
import { initProviders, teardownProviders } from "./page-providers.js";
import { initSkills, teardownSkills } from "./page-skills.js";
import { initTerminal, teardownTerminal } from "./page-terminal.js";
Expand Down Expand Up @@ -119,6 +120,12 @@ var sections = [
icon: html`<span class="icon icon-nodes"></span>`,
page: true,
},
{
id: "projects",
label: "Projects",
icon: html`<span class="icon icon-folder"></span>`,
page: true,
},
{
id: "environment",
label: "Environment",
Expand Down Expand Up @@ -5333,6 +5340,7 @@ var pageSectionHandlers = {
channels: { init: initChannels, teardown: teardownChannels },
mcp: { init: initMcp, teardown: teardownMcp },
nodes: { init: initNodes, teardown: teardownNodes },
projects: { init: initProjects, teardown: teardownProjects },
hooks: { init: initHooks, teardown: teardownHooks },
skills: { init: initSkills, teardown: teardownSkills },
agents: { init: initAgents, teardown: teardownAgents },
Expand Down
2 changes: 2 additions & 0 deletions crates/web/src/templates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub(crate) struct SpaRoutes {
nodes: &'static str,
onboarding: &'static str,
projects: &'static str,
settings_projects: &'static str,
skills: &'static str,
crons: &'static str,
monitoring: &'static str,
Expand All @@ -43,6 +44,7 @@ pub(crate) static SPA_ROUTES: SpaRoutes = SpaRoutes {
nodes: "/settings/nodes",
onboarding: "/onboarding",
projects: "/projects",
settings_projects: "/settings/projects",
skills: "/skills",
crons: "/settings/crons",
monitoring: "/monitoring",
Expand Down
8 changes: 8 additions & 0 deletions crates/web/ui/e2e/specs/projects.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@ test.describe("Projects page", () => {
await expect(page.locator('a.nav-link[href="/projects"]')).toHaveCount(0);
});

test("projects accessible from settings sidebar", async ({ page }) => {
const pageErrors = watchPageErrors(page);
await navigateAndWait(page, "/settings/projects");

await expect(page.getByRole("heading", { name: "Repositories", exact: true })).toBeVisible();
expect(pageErrors).toEqual([]);
});

test("page has no JS errors", async ({ page }) => {
const pageErrors = watchPageErrors(page);
await navigateAndWait(page, "/projects");
Expand Down
1 change: 1 addition & 0 deletions crates/web/ui/e2e/specs/settings-nav.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ test.describe("Settings navigation", () => {
{ id: "mcp", heading: "MCP" },
{ id: "hooks", heading: "Hooks" },
{ id: "skills", heading: "Skills" },
{ id: "projects", heading: "Repositories" },
{ id: "sandboxes", heading: "Sandboxes" },
{ id: "monitoring", heading: "Monitoring" },
{ id: "logs", heading: "Logs" },
Expand Down