From adcb37f9cce4fc62eb3e0d7b1191acc680884ac0 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Thu, 24 Apr 2025 11:41:06 -0700 Subject: [PATCH] added mok mission --- .prettierrc | 3 +- apps/dispatch/app/_components/Select.tsx | 1 - apps/dispatch/app/_store/missionsStore.ts | 36 ++++++++- apps/dispatch/app/_store/pannelStore.ts | 5 ++ .../dispatch/_components/map/ContextMenu.tsx | 17 +++- .../_components/pannel/MissionForm.tsx | 41 ++++++---- .../(app)/admin/keyword/_components/Form.tsx | 8 +- grafana/grafana.db | Bin 1122304 -> 1122304 bytes packages/database/package.json | 3 + .../database/prisma/schema/mission.prisma | 76 ++++++++++-------- .../database/prisma/schema/station.prisma | 3 +- packages/database/prisma/schema/user.prisma | 46 ++++++----- 12 files changed, 156 insertions(+), 83 deletions(-) diff --git a/.prettierrc b/.prettierrc index eacc3428..09d5c700 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,6 @@ { "tabWidth": 2, "useTabs": true, - "printWidth": 80 + "printWidth": 80, + "singleQuote": false } diff --git a/apps/dispatch/app/_components/Select.tsx b/apps/dispatch/app/_components/Select.tsx index 6752abb8..25311197 100644 --- a/apps/dispatch/app/_components/Select.tsx +++ b/apps/dispatch/app/_components/Select.tsx @@ -19,7 +19,6 @@ interface SelectProps name: Path; form: UseFormReturn | any; formOptions?: RegisterOptions; - // eslint-disable-next-line @typescript-eslint/no-explicit-any } const customStyles: StylesConfig = { diff --git a/apps/dispatch/app/_store/missionsStore.ts b/apps/dispatch/app/_store/missionsStore.ts index 0e07a46a..03d368d7 100644 --- a/apps/dispatch/app/_store/missionsStore.ts +++ b/apps/dispatch/app/_store/missionsStore.ts @@ -3,15 +3,43 @@ import { MissionOptionalDefaults } from "@repo/db/zod"; import { create } from "zustand"; interface MissionStore { - missions: MissionOptionalDefaults[]; - setMissions: (missions: MissionOptionalDefaults[]) => void; + missions: Mission[]; + setMissions: (missions: Mission[]) => void; getMissions: () => Promise; createMission: (mission: MissionOptionalDefaults) => Promise; - setMission: (mission: MissionOptionalDefaults) => void; + setMission: (mission: Mission) => void; } export const useMissionsStore = create((set) => ({ - missions: [], + missions: [ + { + id: 1, + type: "primär", + state: "draft", + addressCity: "Berlin", + addressStreet: "Alexanderplatz", + addressZip: "10178", + addressOSMways: [], + missionAdditionalInfo: "", + addressLat: 52.520008, + addressLng: 13.404954, + missionKeywordName: "Test", + missionKeywordCategory: "Test", + missionKeywordAbbreviation: "Test", + missionPatientInfo: "Test", + missionStationIds: [], + createdUserId: "1", + missionLog: [], + missionStationUserIds: [], + hpgLocationLat: 52.520008, + hpgLocationLng: 13.404954, + hpgAmbulanceState: null, + hpgFireEngineState: null, + hpgPoliceState: null, + createdAt: new Date(), + updatedAt: new Date(), + }, + ], setMissions: (missions) => set({ missions }), createMission: async (mission) => { const res = await fetch("/api/mission", { diff --git a/apps/dispatch/app/_store/pannelStore.ts b/apps/dispatch/app/_store/pannelStore.ts index 615ffbbf..8a6e742b 100644 --- a/apps/dispatch/app/_store/pannelStore.ts +++ b/apps/dispatch/app/_store/pannelStore.ts @@ -1,12 +1,17 @@ "use client"; +import { MissionOptionalDefaults } from "@repo/db/zod"; import { create } from "zustand"; interface PannelStore { isOpen: boolean; setOpen: (isOpen: boolean) => void; + missionFormValues?: Partial; + setMissionFormValues: (values: Partial) => void; } export const usePannelStore = create((set) => ({ isOpen: true, // DEBUG, REMOVE LATER FOR PROD setOpen: (isOpen) => set({ isOpen }), + missionFormValues: undefined, + setMissionFormValues: (values) => set({ missionFormValues: values }), })); diff --git a/apps/dispatch/app/dispatch/_components/map/ContextMenu.tsx b/apps/dispatch/app/dispatch/_components/map/ContextMenu.tsx index 831e5408..e71fe9a1 100644 --- a/apps/dispatch/app/dispatch/_components/map/ContextMenu.tsx +++ b/apps/dispatch/app/dispatch/_components/map/ContextMenu.tsx @@ -1,4 +1,5 @@ import { useMapStore } from "_store/mapStore"; +import { usePannelStore } from "_store/pannelStore"; import { MapPinned, Search } from "lucide-react"; import { useEffect } from "react"; import { Popup, useMap } from "react-leaflet"; @@ -7,7 +8,9 @@ export const ContextMenu = () => { const map = useMap(); const { contextMenu, setContextMenu, setSearchElements, setSearchPopup } = useMapStore(); - + const setMissionFormValues = usePannelStore( + (state) => state.setMissionFormValues, + ); useEffect(() => { const handleContextMenu = (e: any) => { setContextMenu({ lat: e.latlng.lat, lng: e.latlng.lng }); @@ -49,12 +52,12 @@ export const ContextMenu = () => { country: string; country_code: string; county: string; - hamlet: string; + house_number: string; municipality: string; postcode: string; road: string; state: string; - town: string; + city: string; }; display_name: string; importance: number; @@ -68,6 +71,14 @@ export const ContextMenu = () => { place_rank: number; type: string; }; + setMissionFormValues({ + addressLat: contextMenu.lat, + addressLng: contextMenu.lng, + addressCity: data.address.city, + addressStreet: `${data.address.road}, ${data.address.house_number}`, + addressZip: data.address.postcode, + state: "draft", + }); }} > diff --git a/apps/dispatch/app/dispatch/_components/pannel/MissionForm.tsx b/apps/dispatch/app/dispatch/_components/pannel/MissionForm.tsx index c333b3a4..55e8a558 100644 --- a/apps/dispatch/app/dispatch/_components/pannel/MissionForm.tsx +++ b/apps/dispatch/app/dispatch/_components/pannel/MissionForm.tsx @@ -1,8 +1,7 @@ "use client"; -import React, { useEffect, useState } from "react"; -import { useForm, Controller } from "react-hook-form"; +import React, { use, useEffect, useState } from "react"; +import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; -import { z } from "zod"; import { BellRing, BookmarkPlus, Trash2 } from "lucide-react"; import { Select } from "_components/Select"; import { Keyword, Station } from "@repo/db"; @@ -11,26 +10,34 @@ import { MissionOptionalDefaults, MissionOptionalDefaultsSchema, } from "@repo/db/zod"; - -const clearBtn = () => { - return ( - - ); -}; +import { usePannelStore } from "_store/pannelStore"; export const MissionForm = () => { const form = useForm({ resolver: zodResolver(MissionOptionalDefaultsSchema), defaultValues: {}, }); + const { missionFormValues, setMissionFormValues } = usePannelStore( + (state) => state, + ); + + /* const formValues = form.watch(); + useEffect(() => { + if (formValues) { + setMissionFormValues(formValues); + } + }, [formValues, setMissionFormValues]); */ + + useEffect(() => { + if (missionFormValues) { + form.reset(missionFormValues); + } + }, [missionFormValues, form]); const [stations, setStations] = useState([]); const [keywords, setKeywords] = useState([]); useEffect(() => { - console.log("useEffect"); getKeywords().then((data) => { setKeywords(data); }); @@ -48,7 +55,7 @@ export const MissionForm = () => { console.log(form.formState.errors); return ( -
+ {/* Koorinaten Section */}

Koordinaten

@@ -185,7 +192,13 @@ export const MissionForm = () => {
-
diff --git a/grafana/grafana.db b/grafana/grafana.db index 2736cec7d00d82c61323bf44fcc6b8a20923909c..4bc765bbcab7528a6ce6fb235a1671b7699e564f 100644 GIT binary patch delta 158 zcmZoT;L>owWr8&0{)sZqjQckxeA8uowWr8&0)`>FCj9WJ*eA8u8JPvzSr%{sF*gwN05LBR^8qpcc9sPKf9e5|e=*bm diff --git a/packages/database/package.json b/packages/database/package.json index 81feac72..7ebd241b 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -4,6 +4,9 @@ "description": "VAR Databse package", "main": "generated/client/index.js", "types": "generated/client/index.d.ts", + "prisma": { + "schema": "prisma/schema" + }, "scripts": { "generate": "npx prisma generate && npx prisma generate zod", "migrate": "npx prisma migrate dev", diff --git a/packages/database/prisma/schema/mission.prisma b/packages/database/prisma/schema/mission.prisma index 9c8e563d..cd173555 100644 --- a/packages/database/prisma/schema/mission.prisma +++ b/packages/database/prisma/schema/mission.prisma @@ -1,39 +1,49 @@ model Mission { - id Int @id @default(autoincrement()) - type missionType @default(primär) - state MissionState @default(draft) - addressLat Float - addressLng Float - addressStreet String? - addressCity String? - addressZip String? - addressOSMways Json[] @default([]) - missionCategory String? - missionKeyword String? - missionSummary String? - missionPatientInfo String - missionAdditionalInfo String - missionStationIds String[] - missionLog Json[] @default([]) - hpgAmbulanceState HpgState? @default(ready) - hpgFireEngineState HpgState? @default(ready) - hpgPoliceState HpgState? @default(ready) - hpgLocationLat Float? @default(0) - hpgLocationLng Float? @default(0) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - createdUserId String + id Int @id @default(autoincrement()) + type missionType @default(primär) + state MissionState @default(draft) + addressLat Float + addressLng Float + addressStreet String? + addressCity String? + addressZip String? + addressOSMways Json[] @default([]) + missionKeywordCategory String? + missionKeywordName String? + missionKeywordAbbreviation String? + missionPatientInfo String + missionAdditionalInfo String + missionStationIds String[] @default([]) + missionStationUserIds String[] @default([]) + missionLog Json[] @default([]) + hpgAmbulanceState HpgState? + hpgFireEngineState HpgState? + hpgPoliceState HpgState? + hpgLocationLat Float? @default(0) + hpgLocationLng Float? @default(0) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + createdUserId String // relations: - /** - * /** - * /** - * /** - * /** - * /** - * createdUser User @relation(fields: [createdUserId], references: [id]) - */ - MissionsOnStations MissionsOnStations[] + + CreatedUser User @relation(fields: [createdUserId], references: [id]) + + MissionsOnStations MissionsOnStations[] + MissionOnStationUsers MissionOnStationUsers[] +} + +model MissionOnStationUsers { + userId String + missionId Int + stationId Int + + // relations: + User User @relation(fields: [userId], references: [id]) + Mission Mission @relation(fields: [missionId], references: [id]) + Station Station @relation(fields: [stationId], references: [id]) + + @@unique([userId, missionId, stationId]) } model MissionsOnStations { diff --git a/packages/database/prisma/schema/station.prisma b/packages/database/prisma/schema/station.prisma index ea7dad7f..c3f0712d 100644 --- a/packages/database/prisma/schema/station.prisma +++ b/packages/database/prisma/schema/station.prisma @@ -33,5 +33,6 @@ model Station { atcCallsign String hideRangeRings Boolean - MissionsOnStations MissionsOnStations[] + MissionsOnStations MissionsOnStations[] + MissionOnStationUsers MissionOnStationUsers[] } diff --git a/packages/database/prisma/schema/user.prisma b/packages/database/prisma/schema/user.prisma index 390e9b15..f22633fd 100644 --- a/packages/database/prisma/schema/user.prisma +++ b/packages/database/prisma/schema/user.prisma @@ -20,32 +20,34 @@ enum PERMISSION { } model User { - id String @id @default(uuid()) - publicId String @unique - firstname String - lastname String - email String @unique - password String - vatsimCid Int? @map(name: "vatsim_cid") - moodleId Int? @map(name: "moodle_id") - emailVerified DateTime? @map(name: "email_verified") - image String? - badges BADGES[] @default([]) - permissions PERMISSION[] @default([]) - createdAt DateTime @default(now()) @map(name: "created_at") - updatedAt DateTime @default(now()) @map(name: "updated_at") - isBanned Boolean @default(false) @map(name: "is_banned") + id String @id @default(uuid()) + publicId String @unique + firstname String + lastname String + email String @unique + password String + vatsimCid Int? @map(name: "vatsim_cid") + moodleId Int? @map(name: "moodle_id") + emailVerified DateTime? @map(name: "email_verified") + image String? + badges BADGES[] @default([]) + permissions PERMISSION[] @default([]) + createdAt DateTime @default(now()) @map(name: "created_at") + updatedAt DateTime @default(now()) @map(name: "updated_at") + isBanned Boolean @default(false) @map(name: "is_banned") // relations: - oauthTokens OAuthToken[] - discordAccounts DiscordAccount[] - participants Participant[] - EventAppointmentUser EventAppointment[] @relation("EventAppointmentUser") - EventAppointment EventAppointment[] - SentMessages ChatMessage[] @relation("SentMessages") - ReceivedMessages ChatMessage[] @relation("ReceivedMessages") + oauthTokens OAuthToken[] + discordAccounts DiscordAccount[] + participants Participant[] + EventAppointmentUser EventAppointment[] @relation("EventAppointmentUser") + EventAppointment EventAppointment[] + SentMessages ChatMessage[] @relation("SentMessages") + ReceivedMessages ChatMessage[] @relation("ReceivedMessages") /** * Missions Mission[] */ + Mission Mission[] + MissionOnStationUsers MissionOnStationUsers[] @@map(name: "users") }