Compare commits

...

17 Commits

Author SHA1 Message Date
s8613 5fe96a7697 Merge remote-tracking branch 'origin/main' into deploy_exxeta
# Conflicts:
#	project/frontend/src/main.tsx
#	project/frontend/src/socket.ts
2025-07-01 20:53:02 +02:00
EC2 Default User 7534eaa2e4 Fix socket connection URL path handling 2025-06-29 21:43:13 +00:00
s8613 4c3325b0ef socket.io fix 2025-06-29 22:13:24 +02:00
s8613 cda1baf7c0 socket.io fix 2025-06-29 21:52:32 +02:00
s8613 ac7f3ef790 / routing 2025-06-29 21:43:51 +02:00
s8613 4c05334283 routing ff 2025-06-29 21:29:39 +02:00
s8613 43d39a7caa fixed problems 2025-06-29 20:17:49 +02:00
s8613 bcb844b7ba Merge remote-tracking branch 'origin/main' into deploy_exxeta
# Conflicts:
#	project/docker-compose.yml
#	project/frontend/Dockerfile
2025-06-29 18:26:47 +02:00
s8613 01f866a8db fixed problems 2025-06-29 16:32:11 +02:00
s8613 cc49ec0063 fixed problems 2025-06-29 16:18:08 +02:00
s8613 047e204b82 fixed problems 2025-06-29 16:16:18 +02:00
s8613 c721140003 fixed problems 2025-06-29 16:07:09 +02:00
s8613 2a469eed6a fixed problems 2025-06-29 16:05:54 +02:00
s8613 0380edeb2a fixed problems 2025-06-29 16:04:20 +02:00
s8613 06a517af53 fixed problems 2025-06-29 15:33:52 +02:00
s8613 d5234ac2e7 fixed typo 2025-06-29 15:16:29 +02:00
s8613 c4fcfef4f0 Traefik configuration 2025-06-29 15:07:09 +02:00
15 changed files with 241 additions and 213 deletions

View File

@ -2,22 +2,32 @@ services:
frontend:
build:
context: frontend
ports:
- 8080:80
environment:
- API_HOST=http://localhost:5050
- API_HOST=http://ec2-18-193-8-169.eu-central-1.compute.amazonaws.com/ff-api
labels:
- "traefik.enable=true"
- "traefik.http.routers.ff-frontend.rule=PathPrefix(`/ff`)"
- "traefik.http.routers.ff-frontend.entrypoints=web"
- "traefik.http.services.ff-frontend.loadbalancer.server.port=80"
- "traefik.http.middlewares.ff-frontend-stripprefix.stripprefix.prefixes=/ff"
- "traefik.http.routers.ff-frontend.middlewares=ff-frontend-stripprefix"
networks:
- proxy
- app-network
db:
image: postgres:17-alpine
env_file:
- .env
# ports:
# - "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- db_data:/var/lib/postgresql/data
networks:
- app-network
coordinator:
build:
@ -31,12 +41,20 @@ services:
db:
condition: service_healthy
healthcheck:
test: wget --spider --no-verbose http://127.0.0.1:5000/health || exit 1
test: wget --spider --no-verbose http://127.0.0.1:5000/health || exit 1
interval: 20s
timeout: 10s
retries: 10
ports:
- 5050:5000
labels:
- "traefik.enable=true"
- "traefik.http.routers.ff-api.rule=PathPrefix(`/ff-api`)"
- "traefik.http.routers.ff-api.entrypoints=web"
- "traefik.http.services.ff-api.loadbalancer.server.port=5000"
- "traefik.http.middlewares.ff-api-stripprefix.stripprefix.prefixes=/ff-api"
- "traefik.http.routers.ff-api.middlewares=ff-api-stripprefix"
networks:
- proxy
- app-network
ocr:
build:
@ -48,18 +66,18 @@ services:
- EXXETA_SERVICE_URL=http://exxeta:5000/extract
- SPACY_SERVICE_URL=http://spacy:5052/extract
- COORDINATOR_URL=http://coordinator:5000
ports:
- 5051:5000
networks:
- app-network
spacy:
build:
context: backend/spacy-service
environment:
- VALIDATE_SERVICE_URL=http://validate:5000/validate
ports:
- 5052:5052
volumes:
- ./backend/spacy-service/spacy_training:/app/spacy_training
networks:
- app-network
exxeta:
build:
@ -70,8 +88,8 @@ services:
environment:
- VALIDATE_SERVICE_URL=http://validate:5000/validate
- COORDINATOR_URL=http://coordinator:5000
ports:
- 5053:5000
networks:
- app-network
validate:
build:
@ -81,5 +99,14 @@ services:
- .env
environment:
- COORDINATOR_URL=http://coordinator:5000
ports:
- 5054:5000
networks:
- app-network
networks:
proxy:
external: true
app-network:
driver: bridge
volumes:
db_data:

View File

@ -4,10 +4,8 @@ WORKDIR /usr/src/app
# install dependencies into temp directory
# this will cache them and speed up future builds
COPY package.json bun.lockb ./
#RUN bun install --frozen-lockfile
RUN bun install
COPY . .
# dummy environment variable for build - DONT CHANGE!!!

View File

@ -181,7 +181,7 @@ export function ConfigTable({ from, trainingRunning }: ConfigTableProps) {
}
navigate({
to: `/config-detail/$kpiId`,
to: `/ff/config-detail/$kpiId`,
params: { kpiId: kennzahl.id.toString() },
search: from ? { from } : undefined,
});

View File

@ -170,7 +170,7 @@ export default function KennzahlenTable({
const handleNavigateToDetail = (settingName: string) => {
navigate({
to: "/extractedResult/$pitchBook/$kpi",
to: "/ff/extractedResult/$pitchBook/$kpi",
params: {
pitchBook: pdfId,
kpi: settingName,

View File

@ -59,7 +59,7 @@ export function PitchBooksTable() {
const handleRowClick = (pitchBookId: number) => {
navigate({
to: "/extractedResult/$pitchBook",
to: "/ff/extractedResult/$pitchBook",
params: { pitchBook: pitchBookId.toString() },
search: { from: "overview" },
});

View File

@ -19,7 +19,7 @@ export default function UploadPage() {
const uploadFile = useCallback(async () => {
const formData = new FormData();
formData.append("file", files[0]);
const response = await fetch(`${API_HOST}/api/pitch_book`, {
const response = await fetch(`${API_HOST}/api/pitch_book/`, {
method: "POST",
body: formData,
});
@ -47,7 +47,7 @@ export default function UploadPage() {
setPageId(null);
setLoadingState(null);
navigate({
to: "/extractedResult/$pitchBook",
to: "/ff/extractedResult/$pitchBook",
params: { pitchBook: progress.id.toString() },
});
}
@ -109,7 +109,7 @@ export default function UploadPage() {
/>
</Box>
<IconButton onClick={() => navigate({ to: "/config" })}>
<IconButton onClick={() => navigate({ to: "/ff/config" })}>
<SettingsIcon fontSize="large" />
</IconButton>
</Box>
@ -204,8 +204,8 @@ export default function UploadPage() {
backgroundColor: "#383838",
"&:hover": { backgroundColor: "#2e2e2e" },
}}
onMouseEnter={() => router.preloadRoute({ to: "/pitchbooks" })}
onClick={() => navigate({ to: "/pitchbooks" })}
onMouseEnter={() => router.preloadRoute({ to: "/ff/pitchbooks" })}
onClick={() => navigate({ to: "/ff/pitchbooks" })}
>
Alle Pitchbooks anzeigen
</Button>

View File

@ -11,56 +11,58 @@
// Import Routes
import { Route as rootRoute } from './routes/__root'
import { Route as PitchbooksImport } from './routes/pitchbooks'
import { Route as ConfigAddImport } from './routes/config-add'
import { Route as ConfigImport } from './routes/config'
import { Route as IndexImport } from './routes/index'
import { Route as ExtractedResultPitchBookImport } from './routes/extractedResult.$pitchBook'
import { Route as ConfigDetailKpiIdImport } from './routes/config-detail.$kpiId'
import { Route as ExtractedResultPitchBookKpiImport } from './routes/extractedResult_.$pitchBook.$kpi'
import { Route as FfIndexImport } from './routes/ff/index'
import { Route as FfPitchbooksImport } from './routes/ff/pitchbooks'
import { Route as FfConfigAddImport } from './routes/ff/config-add'
import { Route as FfConfigImport } from './routes/ff/config'
import { Route as FfExtractedResultPitchBookImport } from './routes/ff/extractedResult.$pitchBook'
import { Route as FfConfigDetailKpiIdImport } from './routes/ff/config-detail.$kpiId'
import { Route as FfExtractedResultPitchBookKpiImport } from './routes/ff/extractedResult_.$pitchBook.$kpi'
// Create/Update Routes
const PitchbooksRoute = PitchbooksImport.update({
id: '/pitchbooks',
path: '/pitchbooks',
const FfIndexRoute = FfIndexImport.update({
id: '/ff/',
path: '/ff/',
getParentRoute: () => rootRoute,
} as any)
const ConfigAddRoute = ConfigAddImport.update({
id: '/config-add',
path: '/config-add',
const FfPitchbooksRoute = FfPitchbooksImport.update({
id: '/ff/pitchbooks',
path: '/ff/pitchbooks',
getParentRoute: () => rootRoute,
} as any)
const ConfigRoute = ConfigImport.update({
id: '/config',
path: '/config',
const FfConfigAddRoute = FfConfigAddImport.update({
id: '/ff/config-add',
path: '/ff/config-add',
getParentRoute: () => rootRoute,
} as any)
const IndexRoute = IndexImport.update({
id: '/',
path: '/',
const FfConfigRoute = FfConfigImport.update({
id: '/ff/config',
path: '/ff/config',
getParentRoute: () => rootRoute,
} as any)
const ExtractedResultPitchBookRoute = ExtractedResultPitchBookImport.update({
id: '/extractedResult/$pitchBook',
path: '/extractedResult/$pitchBook',
const FfExtractedResultPitchBookRoute = FfExtractedResultPitchBookImport.update(
{
id: '/ff/extractedResult/$pitchBook',
path: '/ff/extractedResult/$pitchBook',
getParentRoute: () => rootRoute,
} as any,
)
const FfConfigDetailKpiIdRoute = FfConfigDetailKpiIdImport.update({
id: '/ff/config-detail/$kpiId',
path: '/ff/config-detail/$kpiId',
getParentRoute: () => rootRoute,
} as any)
const ConfigDetailKpiIdRoute = ConfigDetailKpiIdImport.update({
id: '/config-detail/$kpiId',
path: '/config-detail/$kpiId',
getParentRoute: () => rootRoute,
} as any)
const ExtractedResultPitchBookKpiRoute =
ExtractedResultPitchBookKpiImport.update({
id: '/extractedResult_/$pitchBook/$kpi',
path: '/extractedResult/$pitchBook/$kpi',
const FfExtractedResultPitchBookKpiRoute =
FfExtractedResultPitchBookKpiImport.update({
id: '/ff/extractedResult_/$pitchBook/$kpi',
path: '/ff/extractedResult/$pitchBook/$kpi',
getParentRoute: () => rootRoute,
} as any)
@ -68,53 +70,53 @@ const ExtractedResultPitchBookKpiRoute =
declare module '@tanstack/react-router' {
interface FileRoutesByPath {
'/': {
id: '/'
path: '/'
fullPath: '/'
preLoaderRoute: typeof IndexImport
'/ff/config': {
id: '/ff/config'
path: '/ff/config'
fullPath: '/ff/config'
preLoaderRoute: typeof FfConfigImport
parentRoute: typeof rootRoute
}
'/config': {
id: '/config'
path: '/config'
fullPath: '/config'
preLoaderRoute: typeof ConfigImport
'/ff/config-add': {
id: '/ff/config-add'
path: '/ff/config-add'
fullPath: '/ff/config-add'
preLoaderRoute: typeof FfConfigAddImport
parentRoute: typeof rootRoute
}
'/config-add': {
id: '/config-add'
path: '/config-add'
fullPath: '/config-add'
preLoaderRoute: typeof ConfigAddImport
'/ff/pitchbooks': {
id: '/ff/pitchbooks'
path: '/ff/pitchbooks'
fullPath: '/ff/pitchbooks'
preLoaderRoute: typeof FfPitchbooksImport
parentRoute: typeof rootRoute
}
'/pitchbooks': {
id: '/pitchbooks'
path: '/pitchbooks'
fullPath: '/pitchbooks'
preLoaderRoute: typeof PitchbooksImport
'/ff/': {
id: '/ff/'
path: '/ff'
fullPath: '/ff'
preLoaderRoute: typeof FfIndexImport
parentRoute: typeof rootRoute
}
'/config-detail/$kpiId': {
id: '/config-detail/$kpiId'
path: '/config-detail/$kpiId'
fullPath: '/config-detail/$kpiId'
preLoaderRoute: typeof ConfigDetailKpiIdImport
'/ff/config-detail/$kpiId': {
id: '/ff/config-detail/$kpiId'
path: '/ff/config-detail/$kpiId'
fullPath: '/ff/config-detail/$kpiId'
preLoaderRoute: typeof FfConfigDetailKpiIdImport
parentRoute: typeof rootRoute
}
'/extractedResult/$pitchBook': {
id: '/extractedResult/$pitchBook'
path: '/extractedResult/$pitchBook'
fullPath: '/extractedResult/$pitchBook'
preLoaderRoute: typeof ExtractedResultPitchBookImport
'/ff/extractedResult/$pitchBook': {
id: '/ff/extractedResult/$pitchBook'
path: '/ff/extractedResult/$pitchBook'
fullPath: '/ff/extractedResult/$pitchBook'
preLoaderRoute: typeof FfExtractedResultPitchBookImport
parentRoute: typeof rootRoute
}
'/extractedResult_/$pitchBook/$kpi': {
id: '/extractedResult_/$pitchBook/$kpi'
path: '/extractedResult/$pitchBook/$kpi'
fullPath: '/extractedResult/$pitchBook/$kpi'
preLoaderRoute: typeof ExtractedResultPitchBookKpiImport
'/ff/extractedResult_/$pitchBook/$kpi': {
id: '/ff/extractedResult_/$pitchBook/$kpi'
path: '/ff/extractedResult/$pitchBook/$kpi'
fullPath: '/ff/extractedResult/$pitchBook/$kpi'
preLoaderRoute: typeof FfExtractedResultPitchBookKpiImport
parentRoute: typeof rootRoute
}
}
@ -123,85 +125,85 @@ declare module '@tanstack/react-router' {
// Create and export the route tree
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/config': typeof ConfigRoute
'/config-add': typeof ConfigAddRoute
'/pitchbooks': typeof PitchbooksRoute
'/config-detail/$kpiId': typeof ConfigDetailKpiIdRoute
'/extractedResult/$pitchBook': typeof ExtractedResultPitchBookRoute
'/extractedResult/$pitchBook/$kpi': typeof ExtractedResultPitchBookKpiRoute
'/ff/config': typeof FfConfigRoute
'/ff/config-add': typeof FfConfigAddRoute
'/ff/pitchbooks': typeof FfPitchbooksRoute
'/ff': typeof FfIndexRoute
'/ff/config-detail/$kpiId': typeof FfConfigDetailKpiIdRoute
'/ff/extractedResult/$pitchBook': typeof FfExtractedResultPitchBookRoute
'/ff/extractedResult/$pitchBook/$kpi': typeof FfExtractedResultPitchBookKpiRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
'/config': typeof ConfigRoute
'/config-add': typeof ConfigAddRoute
'/pitchbooks': typeof PitchbooksRoute
'/config-detail/$kpiId': typeof ConfigDetailKpiIdRoute
'/extractedResult/$pitchBook': typeof ExtractedResultPitchBookRoute
'/extractedResult/$pitchBook/$kpi': typeof ExtractedResultPitchBookKpiRoute
'/ff/config': typeof FfConfigRoute
'/ff/config-add': typeof FfConfigAddRoute
'/ff/pitchbooks': typeof FfPitchbooksRoute
'/ff': typeof FfIndexRoute
'/ff/config-detail/$kpiId': typeof FfConfigDetailKpiIdRoute
'/ff/extractedResult/$pitchBook': typeof FfExtractedResultPitchBookRoute
'/ff/extractedResult/$pitchBook/$kpi': typeof FfExtractedResultPitchBookKpiRoute
}
export interface FileRoutesById {
__root__: typeof rootRoute
'/': typeof IndexRoute
'/config': typeof ConfigRoute
'/config-add': typeof ConfigAddRoute
'/pitchbooks': typeof PitchbooksRoute
'/config-detail/$kpiId': typeof ConfigDetailKpiIdRoute
'/extractedResult/$pitchBook': typeof ExtractedResultPitchBookRoute
'/extractedResult_/$pitchBook/$kpi': typeof ExtractedResultPitchBookKpiRoute
'/ff/config': typeof FfConfigRoute
'/ff/config-add': typeof FfConfigAddRoute
'/ff/pitchbooks': typeof FfPitchbooksRoute
'/ff/': typeof FfIndexRoute
'/ff/config-detail/$kpiId': typeof FfConfigDetailKpiIdRoute
'/ff/extractedResult/$pitchBook': typeof FfExtractedResultPitchBookRoute
'/ff/extractedResult_/$pitchBook/$kpi': typeof FfExtractedResultPitchBookKpiRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
fullPaths:
| '/'
| '/config'
| '/config-add'
| '/pitchbooks'
| '/config-detail/$kpiId'
| '/extractedResult/$pitchBook'
| '/extractedResult/$pitchBook/$kpi'
| '/ff/config'
| '/ff/config-add'
| '/ff/pitchbooks'
| '/ff'
| '/ff/config-detail/$kpiId'
| '/ff/extractedResult/$pitchBook'
| '/ff/extractedResult/$pitchBook/$kpi'
fileRoutesByTo: FileRoutesByTo
to:
| '/'
| '/config'
| '/config-add'
| '/pitchbooks'
| '/config-detail/$kpiId'
| '/extractedResult/$pitchBook'
| '/extractedResult/$pitchBook/$kpi'
| '/ff/config'
| '/ff/config-add'
| '/ff/pitchbooks'
| '/ff'
| '/ff/config-detail/$kpiId'
| '/ff/extractedResult/$pitchBook'
| '/ff/extractedResult/$pitchBook/$kpi'
id:
| '__root__'
| '/'
| '/config'
| '/config-add'
| '/pitchbooks'
| '/config-detail/$kpiId'
| '/extractedResult/$pitchBook'
| '/extractedResult_/$pitchBook/$kpi'
| '/ff/config'
| '/ff/config-add'
| '/ff/pitchbooks'
| '/ff/'
| '/ff/config-detail/$kpiId'
| '/ff/extractedResult/$pitchBook'
| '/ff/extractedResult_/$pitchBook/$kpi'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
ConfigRoute: typeof ConfigRoute
ConfigAddRoute: typeof ConfigAddRoute
PitchbooksRoute: typeof PitchbooksRoute
ConfigDetailKpiIdRoute: typeof ConfigDetailKpiIdRoute
ExtractedResultPitchBookRoute: typeof ExtractedResultPitchBookRoute
ExtractedResultPitchBookKpiRoute: typeof ExtractedResultPitchBookKpiRoute
FfConfigRoute: typeof FfConfigRoute
FfConfigAddRoute: typeof FfConfigAddRoute
FfPitchbooksRoute: typeof FfPitchbooksRoute
FfIndexRoute: typeof FfIndexRoute
FfConfigDetailKpiIdRoute: typeof FfConfigDetailKpiIdRoute
FfExtractedResultPitchBookRoute: typeof FfExtractedResultPitchBookRoute
FfExtractedResultPitchBookKpiRoute: typeof FfExtractedResultPitchBookKpiRoute
}
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
ConfigRoute: ConfigRoute,
ConfigAddRoute: ConfigAddRoute,
PitchbooksRoute: PitchbooksRoute,
ConfigDetailKpiIdRoute: ConfigDetailKpiIdRoute,
ExtractedResultPitchBookRoute: ExtractedResultPitchBookRoute,
ExtractedResultPitchBookKpiRoute: ExtractedResultPitchBookKpiRoute,
FfConfigRoute: FfConfigRoute,
FfConfigAddRoute: FfConfigAddRoute,
FfPitchbooksRoute: FfPitchbooksRoute,
FfIndexRoute: FfIndexRoute,
FfConfigDetailKpiIdRoute: FfConfigDetailKpiIdRoute,
FfExtractedResultPitchBookRoute: FfExtractedResultPitchBookRoute,
FfExtractedResultPitchBookKpiRoute: FfExtractedResultPitchBookKpiRoute,
}
export const routeTree = rootRoute
@ -214,35 +216,35 @@ export const routeTree = rootRoute
"__root__": {
"filePath": "__root.tsx",
"children": [
"/",
"/config",
"/config-add",
"/pitchbooks",
"/config-detail/$kpiId",
"/extractedResult/$pitchBook",
"/extractedResult_/$pitchBook/$kpi"
"/ff/config",
"/ff/config-add",
"/ff/pitchbooks",
"/ff/",
"/ff/config-detail/$kpiId",
"/ff/extractedResult/$pitchBook",
"/ff/extractedResult_/$pitchBook/$kpi"
]
},
"/": {
"filePath": "index.tsx"
"/ff/config": {
"filePath": "ff/config.tsx"
},
"/config": {
"filePath": "config.tsx"
"/ff/config-add": {
"filePath": "ff/config-add.tsx"
},
"/config-add": {
"filePath": "config-add.tsx"
"/ff/pitchbooks": {
"filePath": "ff/pitchbooks.tsx"
},
"/pitchbooks": {
"filePath": "pitchbooks.tsx"
"/ff/": {
"filePath": "ff/index.tsx"
},
"/config-detail/$kpiId": {
"filePath": "config-detail.$kpiId.tsx"
"/ff/config-detail/$kpiId": {
"filePath": "ff/config-detail.$kpiId.tsx"
},
"/extractedResult/$pitchBook": {
"filePath": "extractedResult.$pitchBook.tsx"
"/ff/extractedResult/$pitchBook": {
"filePath": "ff/extractedResult.$pitchBook.tsx"
},
"/extractedResult_/$pitchBook/$kpi": {
"filePath": "extractedResult_.$pitchBook.$kpi.tsx"
"/ff/extractedResult_/$pitchBook/$kpi": {
"filePath": "ff/extractedResult_.$pitchBook.$kpi.tsx"
}
}
}

View File

@ -1,12 +1,12 @@
import { createFileRoute, useNavigate } from "@tanstack/react-router";
import { Box, Typography, IconButton } from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { KPIForm } from "../components/KPIForm";
import type { Kennzahl } from "../types/kpi";
import { API_HOST } from "../util/api";
import { KPIForm } from "../../components/KPIForm";
import type { Kennzahl } from "../../types/kpi";
import { API_HOST } from "../../util/api";
export const Route = createFileRoute("/config-add")({
export const Route = createFileRoute("/ff/config-add")({
component: ConfigAddPage,
validateSearch: (search: Record<string, unknown>): { from?: string } => {
return {
@ -21,7 +21,7 @@ function ConfigAddPage() {
const handleBack = () => {
navigate({
to: "/config",
to: "/ff/config",
search: from ? { from } : undefined,
});
};
@ -54,7 +54,7 @@ function ConfigAddPage() {
}
navigate({
to: "/config",
to: "/ff/config",
search: { success: "true", ...(from ? { from } : {}) },
});
@ -67,7 +67,7 @@ function ConfigAddPage() {
const handleCancel = () => {
navigate({
to: "/config",
to: "/ff/config",
search: from ? { from } : undefined,
});
};

View File

@ -4,12 +4,12 @@ import {
} from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { useEffect, useState } from "react";
import type { Kennzahl } from "../types/kpi";
import { KPIForm } from "../components/KPIForm";
import { typeDisplayMapping } from "../types/kpi";
import { API_HOST } from "../util/api";
import type { Kennzahl } from "../../types/kpi";
import { KPIForm } from "../../components/KPIForm";
import { typeDisplayMapping } from "../../types/kpi";
import { API_HOST } from "../../util/api";
export const Route = createFileRoute("/config-detail/$kpiId")({
export const Route = createFileRoute("/ff/config-detail/$kpiId")({
component: KPIDetailPage,
validateSearch: (search: Record<string, unknown>): { from?: string } => {
return {
@ -29,7 +29,7 @@ function KPIDetailPage() {
const handleBack = () => {
navigate({
to: "/config",
to: "/ff/config",
search: from ? { from } : undefined
});
};
@ -121,7 +121,7 @@ function KPIDetailPage() {
</Typography>
<Button
variant="contained"
onClick={() => navigate({ to: "/config" })}
onClick={() => navigate({ to: "/ff/config" })}
sx={{
backgroundColor: "#383838",
"&:hover": { backgroundColor: "#2e2e2e" },

View File

@ -2,8 +2,8 @@ import { createFileRoute } from "@tanstack/react-router";
import { Box, Button, IconButton, Typography } from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { useNavigate } from "@tanstack/react-router";
import { ConfigTable } from "../components/ConfigTable";
import { API_HOST } from "../util/api";
import { ConfigTable } from "../../components/ConfigTable";
import { API_HOST } from "../../util/api";
import Snackbar from "@mui/material/Snackbar";
import MuiAlert from "@mui/material/Alert";
import { useState, useEffect } from "react";
@ -14,7 +14,7 @@ import Tooltip from "@mui/material/Tooltip";
export const Route = createFileRoute("/config")({
export const Route = createFileRoute("/ff/config")({
component: ConfigPage,
validateSearch: (search: Record<string, unknown>): { from?: string; success?: string } => {
return {
@ -58,7 +58,7 @@ function ConfigPage() {
if (success === "true") {
setTimeout(() => {
navigate({
to: "/config",
to: "/ff/config",
search: from ? { from } : undefined,
replace: true
});
@ -87,16 +87,16 @@ function ConfigPage() {
const handleAddNewKPI = () => {
navigate({
to: "/config-add",
to: "/ff/config-add",
search: from ? { from } : undefined
});
};
const handleBack = () => {
if (from === "pitchbooks") {
navigate({ to: "/pitchbooks" });
navigate({ to: "/ff/pitchbooks" });
} else {
navigate({ to: "/" });
navigate({ to: "/ff" });
}
};

View File

@ -4,12 +4,12 @@ import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { useSuspenseQuery } from "@tanstack/react-query";
import { createFileRoute, useNavigate } from "@tanstack/react-router";
import { useCallback, useState, useMemo } from "react";
import KennzahlenTable from "../components/KennzahlenTable";
import PDFViewer from "../components/pdfViewer";
import { kpiQueryOptions, settingsQueryOptions } from "../util/query";
import KennzahlenTable from "../../components/KennzahlenTable";
import PDFViewer from "../../components/pdfViewer";
import { kpiQueryOptions, settingsQueryOptions } from "../../util/query";
import { redirect } from "@tanstack/react-router";
export const Route = createFileRoute("/extractedResult/$pitchBook")({
export const Route = createFileRoute("/ff/extractedResult/$pitchBook")({
component: ExtractedResultsPage,
validateSearch: (search: Record<string, unknown>): { from?: string } => {
return {
@ -23,7 +23,7 @@ export const Route = createFileRoute("/extractedResult/$pitchBook")({
]);
if (results[0].status === "rejected") {
throw redirect({
to: "/"
to: "/ff"
});
}
return results;
@ -143,7 +143,7 @@ function ExtractedResultsPage() {
<Box display="flex" alignItems="center" gap={3}>
{from === "overview" && (
<IconButton
onClick={() => navigate({ to: "/pitchbooks" })}
onClick={() => navigate({ to: "/ff/pitchbooks" })}
sx={{ ml: -1 }}
>
<ArrowBackIcon fontSize="large" sx={{ color: '#383838' }}/>
@ -259,7 +259,7 @@ function ExtractedResultsPage() {
<Button
variant="contained"
sx={{ backgroundColor: "#383838" }}
onClick={() => navigate({ to: "/" })}
onClick={() => navigate({ to: "/ff" })}
>
Neues Pitchbook hochladen
</Button>

View File

@ -28,12 +28,12 @@ import {
} from "@tanstack/react-query";
import { createFileRoute, useNavigate } from "@tanstack/react-router";
import { useEffect, useState, type KeyboardEvent } from "react";
import PDFViewer from "../components/pdfViewer";
import { fetchPutKPI } from "../util/api";
import { kpiQueryOptions } from "../util/query";
import PDFViewer from "../../components/pdfViewer";
import { fetchPutKPI } from "../../util/api";
import { kpiQueryOptions } from "../../util/query";
import { redirect } from "@tanstack/react-router";
export const Route = createFileRoute("/extractedResult_/$pitchBook/$kpi")({
export const Route = createFileRoute("/ff/extractedResult_/$pitchBook/$kpi")({
component: ExtractedResultsPage,
validateSearch: (search: Record<string, unknown>) => {
return {
@ -45,7 +45,7 @@ export const Route = createFileRoute("/extractedResult_/$pitchBook/$kpi")({
return await queryClient.ensureQueryData(kpiQueryOptions(pitchBook));
} catch (err) {
throw redirect({
to: "/"
to: "/ff"
});
}
},
@ -151,7 +151,7 @@ function ExtractedResultsPage() {
queryKey: ["pitchBookKPI", pitchBook],
});
navigate({
to: "/extractedResult/$pitchBook",
to: "/ff/extractedResult/$pitchBook",
params: { pitchBook },
search: from ? { from } : undefined
});
@ -216,7 +216,7 @@ function ExtractedResultsPage() {
setShowConfirmDialog(true);
} else {
navigate({
to: "/extractedResult/$pitchBook",
to: "/ff/extractedResult/$pitchBook",
params: { pitchBook },
search: from ? { from } : undefined
});
@ -226,7 +226,7 @@ function ExtractedResultsPage() {
const handleConfirmDiscard = () => {
setShowConfirmDialog(false);
navigate({
to: "/extractedResult/$pitchBook",
to: "/ff/extractedResult/$pitchBook",
params: { pitchBook },
search: from ? { from } : undefined
});

View File

@ -1,8 +1,8 @@
import { createFileRoute } from "@tanstack/react-router";
import UploadPage from "../components/UploadPage";
import UploadPage from "../../components/UploadPage";
export const Route = createFileRoute("/")({
export const Route = createFileRoute("/ff/")({
component: App,
});

View File

@ -3,10 +3,10 @@ import { Box, Typography, IconButton } from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import SettingsIcon from "@mui/icons-material/Settings";
import { useNavigate } from "@tanstack/react-router";
import { PitchBooksTable } from "../components/PitchBooksTable";
import { pitchBooksQueryOptions } from "../util/query";
import { PitchBooksTable } from "../../components/PitchBooksTable";
import { pitchBooksQueryOptions } from "../../util/query";
export const Route = createFileRoute("/pitchbooks")({
export const Route = createFileRoute("/ff/pitchbooks")({
component: PitchBooksPage,
loader: ({ context: { queryClient } }) =>
queryClient.ensureQueryData(pitchBooksQueryOptions()),
@ -35,7 +35,7 @@ function PitchBooksPage() {
mb={4}
>
<Box display="flex" alignItems="center">
<IconButton onClick={() => navigate({ to: "/" })}>
<IconButton onClick={() => navigate({ to: "/ff" })}>
<ArrowBackIcon fontSize="large" sx={{ color: '#383838' }}/>
</IconButton>
<Typography variant="h5" fontWeight="bold" ml={3}>
@ -44,7 +44,7 @@ function PitchBooksPage() {
</Box>
<IconButton
onClick={() => navigate({
to: "/config",
to: "/ff/config",
search: { from: "pitchbooks" }
})}
>

View File

@ -4,6 +4,7 @@ import { defineConfig } from "vite";
// https://vitejs.dev/config/
export default defineConfig({
base: "/ff/",
plugins: [TanStackRouterVite({ autoCodeSplitting: true }), viteReact()],
build: {
chunkSizeWarningLimit: 1000, // default ist 500