@@ -10,40 +10,31 @@ import {Dayjs} from 'dayjs';
1010import dayjs from 'dayjs' ;
1111import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs' ;
1212import { deDE } from "@mui/x-date-pickers/locales" ;
13- import { createMeeting } from "../api/MeetingApi" ;
14- import { useForm } from "@pankod/refine-react-hook-form" ;
15- import { defaultMeetingDto , MeetingDto } from "../dtos/MeetingDto" ;
16- import { HttpError } from "@refinedev/core" ;
13+ import { createMeeting , deleteMeeting , updateMeeting } from "../api/MeetingApi" ;
14+ import { CreateMeetingDto , MeetingDto } from "../dtos/MeetingDto" ;
1715import axiosInstance from "../AxiosConfig" ;
1816
1917interface MeetingFormProps {
2018 open : boolean ;
2119 onClose : ( ) => void ;
20+ meeting ?: MeetingDto ;
2221}
2322
2423dayjs . locale ( 'de' ) ;
2524
26- export function MeetingForm ( { open, onClose} : MeetingFormProps ) {
25+ export function MeetingForm ( { open, onClose, meeting} : MeetingFormProps ) {
26+ const dateFrom = dayjs ( meeting ?. date_from , "D.M.YYYY, H:mm:ss" ) ;
27+ const dateUntil = dayjs ( meeting ?. date_until , "D.M.YYYY, H:mm:ss" ) ;
2728
28- const [ meetingTitle , setMeetingTitle ] = useState ( '' ) ;
29- const [ repeatable , setRepeatable ] = useState ( ' never' ) ;
30- const [ meetingDescription , setMeetingDescription ] = useState ( '' ) ;
31- const [ meetingRoom , setMeetingRoom ] = useState ( '' ) ;
32- const [ date1 , setDate1 ] = useState < Dayjs > ( dayjs ( ) ) ;
33- const [ time1 , setTime1 ] = useState < Dayjs > ( dayjs ( ) . hour ( 12 ) . minute ( 0 ) . second ( 0 ) ) ;
34- const [ date2 , setDate2 ] = useState < Dayjs > ( dayjs ( ) ) ;
35- const [ time2 , setTime2 ] = useState < Dayjs > ( dayjs ( ) . hour ( 12 ) . minute ( 0 ) . second ( 0 ) ) ;
29+ const [ meetingTitle , setMeetingTitle ] = useState ( meeting ? meeting . title : "" ) ;
30+ const [ repeatable , setRepeatable ] = useState ( meeting ? meeting . repeatable : " never" ) ;
31+ const [ meetingDescription , setMeetingDescription ] = useState ( meeting ? meeting . description : '' ) ;
32+ const [ meetingRoom , setMeetingRoom ] = useState ( meeting ? meeting . place : '' ) ;
33+ const [ date1 , setDate1 ] = useState < Dayjs > ( meeting ? dateFrom : dayjs ( ) ) ;
34+ const [ time1 , setTime1 ] = useState < Dayjs > ( meeting ? dateFrom : dayjs ( ) . hour ( 12 ) . minute ( 0 ) . second ( 0 ) ) ;
35+ const [ date2 , setDate2 ] = useState < Dayjs > ( meeting ? dateUntil : dayjs ( ) ) ;
36+ const [ time2 , setTime2 ] = useState < Dayjs > ( meeting ? dateUntil : dayjs ( ) . hour ( 13 ) . minute ( 0 ) . second ( 0 ) ) ;
3637
37- const methods = useForm < MeetingDto , HttpError > ( {
38- refineCoreProps : {
39- redirect : "show" ,
40- } ,
41- defaultValues : defaultMeetingDto
42- } ) ;
43- const {
44- handleSubmit,
45- refineCore : { onFinish} ,
46- } = methods ;
4738
4839 const handleDate1Change = ( newDate : Dayjs | null ) => {
4940 if ( newDate ) {
@@ -60,7 +51,7 @@ export function MeetingForm({open, onClose}: MeetingFormProps) {
6051 const handleTime1Change = ( newTime : Dayjs | null ) => {
6152 if ( newTime ) {
6253 setTime1 ( newTime ) ;
63- setTime2 ( newTime ) ;
54+ setTime2 ( newTime . add ( 1 , 'hour' ) ) ;
6455 }
6556 } ;
6657
@@ -74,14 +65,18 @@ export function MeetingForm({open, onClose}: MeetingFormProps) {
7465 setRepeatable ( event . target . value ) ;
7566 } ;
7667
77- const handleClick = async ( ) => {
78- await handleSubmit ( async ( values ) => {
79- await onFinish ( {
80- ...values ,
81- } ) ;
82- } ) ( ) ;
68+ const handleDelete = async ( ) => {
69+ try {
70+ await deleteMeeting ( axiosInstance , meeting ! ! . id ) ;
71+ onClose ( ) ;
72+ } catch ( error ) {
73+ console . error ( 'Fehler:' , error ) ;
74+ alert ( 'Es gab einen Fehler beim Löschen des Meetings.' ) ;
75+ }
76+ }
8377
84- const meetingData : MeetingDto = {
78+ const handleSave = async ( ) => {
79+ const meetingData : CreateMeetingDto = {
8580 title : meetingTitle ,
8681 description : meetingDescription ,
8782 place : meetingRoom ,
@@ -91,7 +86,11 @@ export function MeetingForm({open, onClose}: MeetingFormProps) {
9186 } ;
9287
9388 try {
94- await createMeeting ( axiosInstance , meetingData ) ;
89+ if ( meeting ) {
90+ await updateMeeting ( axiosInstance , meeting . id , meetingData ) ;
91+ } else {
92+ await createMeeting ( axiosInstance , meetingData ) ;
93+ }
9594 onClose ( ) ;
9695 } catch ( error ) {
9796 console . error ( 'Fehler:' , error ) ;
@@ -133,8 +132,9 @@ export function MeetingForm({open, onClose}: MeetingFormProps) {
133132 className = "font-semibold block text-lg text-white" > Beschreibung</ label >
134133 < textarea
135134 id = "meeting-description"
135+ rows = { 3 }
136136 placeholder = "Hier könnte Ihre Beschreibung stehen"
137- className = "ml-5 mt-1 text-gray-300 block bg-[#333C4F] w-11/12 px-10 mb-4 border rounded-full shadow-sm border-[#333C4F] placeholder-gray-400 placeholder:text-xs placeholder:py-1 py-2"
137+ className = "ml-5 resize-none mt-1 text-gray-300 block bg-[#333C4F] w-11/12 px-10 mb-4 border rounded-full shadow-sm border-[#333C4F] placeholder-gray-400 placeholder:text-xs placeholder:py-1 py-2"
138138 value = { meetingDescription }
139139 onChange = { ( e ) => setMeetingDescription ( e . target . value ) }
140140 />
@@ -281,10 +281,19 @@ export function MeetingForm({open, onClose}: MeetingFormProps) {
281281 </ form >
282282 </ DialogContent >
283283 < DialogActions >
284- < CuteButton onClick = { onClose } text = { "Abbrechen" } textColor = { "#CAE8FF" } bgColor = { "#425E74" }
285- classname = { "text-base" } />
286- < CuteButton onClick = { handleClick } text = { "Speichern" } textColor = { "#e3f1ef" } bgColor = { "#506D69" }
287- classname = { "text-2xl" } />
284+ < div className = { "flex flex-row gap-4 w-full items-center" } >
285+ { meeting && (
286+ < CuteButton onClick = { handleDelete } text = { "Meeting Löschen" } textColor = { "#f2f2f2" }
287+ bgColor = { "#974242" }
288+ classname = { "text-xl" } />
289+ ) }
290+ < div className = { "gap-2 ml-auto flex items-center" } >
291+ < CuteButton onClick = { onClose } text = { "Abbrechen" } textColor = { "#CAE8FF" } bgColor = { "#425E74" }
292+ classname = { "text-base" } />
293+ < CuteButton onClick = { handleSave } text = { "Speichern" } textColor = { "#e3f1ef" } bgColor = { "#506D69" }
294+ classname = { "text-2xl" } />
295+ </ div >
296+ </ div >
288297 </ DialogActions >
289298 </ Dialog >
290299}
0 commit comments