From a741d769bcfc7060d4513d1cc4faedb21500847a Mon Sep 17 00:00:00 2001 From: KartoffelChips <104089082+KartoffelChipss@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:03:15 +0200 Subject: [PATCH] Added create site page --- frontend/src/api/sites.api.ts | 24 +- frontend/src/api/types/site.ts | 11 + frontend/src/components/nav-menu.tsx | 11 +- frontend/src/components/navbar.tsx | 5 +- frontend/src/components/ui/field.tsx | 236 +++++++++++++++++ frontend/src/components/ui/label.tsx | 22 ++ frontend/src/components/ui/radio-group.tsx | 42 +++ frontend/src/components/ui/select.tsx | 190 ++++++++++++++ frontend/src/components/ui/switch.tsx | 31 +++ frontend/src/hooks/api/useCreateSite.ts | 11 + frontend/src/index.css | 3 + frontend/src/main.tsx | 2 + frontend/src/pages/Main/Main.tsx | 18 +- frontend/src/pages/NewSite/NewSite.tsx | 283 +++++++++++++++++++++ 14 files changed, 870 insertions(+), 19 deletions(-) create mode 100644 frontend/src/components/ui/field.tsx create mode 100644 frontend/src/components/ui/label.tsx create mode 100644 frontend/src/components/ui/radio-group.tsx create mode 100644 frontend/src/components/ui/select.tsx create mode 100644 frontend/src/components/ui/switch.tsx create mode 100644 frontend/src/hooks/api/useCreateSite.ts create mode 100644 frontend/src/pages/NewSite/NewSite.tsx diff --git a/frontend/src/api/sites.api.ts b/frontend/src/api/sites.api.ts index f60089a..86fee0c 100644 --- a/frontend/src/api/sites.api.ts +++ b/frontend/src/api/sites.api.ts @@ -1,6 +1,12 @@ import { makeApiUrl } from '.'; +import type { + CreateSiteRequest, + CreateSiteResponse, + GetAllSitesResponse, + Site, +} from './types/site'; -export const getSites = async () => { +export const getSites = async (): Promise => { const response = await fetch(makeApiUrl('/sites'), { method: 'GET', }); @@ -13,7 +19,7 @@ export const getSites = async () => { return response.json(); }; -export const getSite = async (id: string) => { +export const getSite = async (id: string): Promise => { const response = await fetch(makeApiUrl(`/sites/${id}`), { method: 'GET', }); @@ -22,3 +28,17 @@ export const getSite = async (id: string) => { } return response.json(); }; + +export const createSite = async (data: CreateSiteRequest): Promise => { + const response = await fetch(makeApiUrl('/sites'), { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); + if (!response.ok) { + throw new Error('Failed to create site'); + } + return response.json(); +}; diff --git a/frontend/src/api/types/site.ts b/frontend/src/api/types/site.ts index a9d4248..46750ac 100644 --- a/frontend/src/api/types/site.ts +++ b/frontend/src/api/types/site.ts @@ -35,6 +35,17 @@ export interface Site { custom_headers: CustomHeaders[]; } +export interface CreateSiteRequest { + name: string; + git_server: string; + owner: string; + repository: string; + branch: string; + domain: string; + enabled: boolean; + spa: boolean; +} + export interface GetAllSitesResponse { sites: Site[]; total: number; diff --git a/frontend/src/components/nav-menu.tsx b/frontend/src/components/nav-menu.tsx index e2f5f93..167f38e 100644 --- a/frontend/src/components/nav-menu.tsx +++ b/frontend/src/components/nav-menu.tsx @@ -13,22 +13,17 @@ export const NavMenu = (props: ComponentProps) => ( - Home + Home - Blog + Analytics - About - - - - - Contact Us + Settings diff --git a/frontend/src/components/navbar.tsx b/frontend/src/components/navbar.tsx index 73a8f0e..85612d3 100644 --- a/frontend/src/components/navbar.tsx +++ b/frontend/src/components/navbar.tsx @@ -2,6 +2,7 @@ import { Logo } from '@/components/logo'; import { NavMenu } from '@/components/nav-menu'; import { NavigationSheet } from '@/components/navigation-sheet'; import { Avatar, AvatarFallback, AvatarImage } from './ui/avatar'; +import { Link } from 'react-router'; interface NavbarProps { userName?: string; @@ -12,7 +13,9 @@ const Navbar = ({ userName, profilePictureUrl }: NavbarProps) => { return (