From 9fa92a1dceb1df196a975b20223d7539208d01a8 Mon Sep 17 00:00:00 2001 From: Lixian Zhou Date: Mon, 9 Feb 2026 15:06:55 -0500 Subject: [PATCH] fix --- .DS_Store | Bin 14340 -> 14340 bytes .gitignore | 2 +- app/.DS_Store | Bin 20484 -> 20484 bytes client/src/App.css | 27 +++- .../src/components/events/EventsCalendar.js | 115 +++++++++++++----- client/src/components/events/EventsList.js | 1 + .../src/components/info-screen/InfoScreen.js | 14 +-- 7 files changed, 115 insertions(+), 44 deletions(-) diff --git a/.DS_Store b/.DS_Store index a742d8b53f340e04d1b5edc98c624bf180c0294b..35b687b6d30dc5f5e512c93fe303d582e61a9ba8 100644 GIT binary patch delta 54 zcmZoEXerp>uE4lsvWG$;w?uWdxrwokf|04gWO+ep#;(Z^733MaH!~{UU}wzVd{aY( KXY)T5c4h$M#}Q5d delta 40 wcmZoEXerp>t}uC_Kq;q@shNR}f{}&EWO+gR&CH5d**D+RP~qA9M}?gk023t)?*IS* diff --git a/.gitignore b/.gitignore index 1abc760..50a2c02 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ # misc -.DS_Store +**/.DS_Store .env.local .env.development.local .env.test.local diff --git a/app/.DS_Store b/app/.DS_Store index 6dbe7dc914c4d4a7b38417b30f62b95ee671b5fc..a005b59ef95ef58bf7323d35687cb0fe7d98c948 100644 GIT binary patch delta 698 zcmajbTS(Jk9LDkA^RDv$?=5|8o71UnK{}O{OPz-zOWi$W5aHu(z4ulnU zV+Vp4j83$Ri0Fi679B3^Lc$v_%uXQTRnXz4Fbaw2ZF*go&-c0e^hMDZ#bB$DKRn%9 zQ9-`jndkM$=UHV#S&2z3jW4wa>UT8k+|?vRcf_bO!ojXkkKqe;84=lN-Y=(Da4GZ5 z(B-t*YT_0yf10bnWx2((jl1mGx(I54Na(OJnIICEaW`MBi-;a*4YjqzihT{w*F=k6 z9}YGf;ki`Ei#1WLH}n{tkx+ZvTwKTHh~>WgRjKz1kVfg`p$hWT9_pY&bczP(Dm|cK zdPt)*POoW-KG0YCMlBvDo3gAUK{HVrO)L=Uru^Ua;3j=Lv z#{qQWAdce%`fw6wFo5&8h)XEChC8^6LEOU##_$r8c!l@)h)?*88McVUF^wg%l`Mm0 zG8gl(5>~-Bv0CX#s!^bhs?GlDE#CitT6O(h{9iJ&#hPSuX5{1+6tAz4=Q8RQZoh4n z;101+xoMNhDfZM%7nd(=%S*U0DQ`X2ylw{(r;ITs6*{M=VsrY4Dr`B~|cY023! z+keWA(FDDvY5JmMe=AcBHaL+9HwsaT4XA_<8Xc?6rWr&t_93i9J7S_oa1^~b zrd<1RTB)8@suz^%Wn95^q~5?y+`?@P;}IU?37+B^Mlp^zn37SSV@OLe#SJZX&gT9B D$C$3P delta 749 zcmajcO-PhM90u@tM$>(B)KOR6U9ES`bTzl!HC?q2Ew$7XmvT4l(8sE8u()ZuCY8~r zby53ZprShLC8Pu^HOqoPhz>#oWrb8or=X8Zp%5Kv+_hsgr+J?L%;op*4WKuGyR94( z!pA$9v8N}mz+tnR^NRAtWL66L#6`P`{?V0jMyjxAlgqucf$b8P@{D4(pvke9^Fw}Z zhvxHidAqd=PnYIz^ftG*)q9U>9LjJ^a%x(}s@(kIlJd$L=X5NOi)VT!<`b&GM5*59 zWENAl!aX{dU;YTqt!$0L{fevA+tw0nOm?3EIO(5-d)z3pwG zay=7I^dn1^^i4JrJYq6E@x%}rBje-&c}8B4x8wu)M81}UkFDuV!;sy6H>4Y z%aMb86u^Np)Swo1aKeS%*n@rWU_aV%5S{Sj2u|Y+&f*--;|i|gI&R=5hH(e?FoH=; zVH&UT2DA8V#ut3W9F3$ps?d0vK{Kg^W>Gs`N6TpytrodSb&^)Ctg7C|YX8#O|3f*;xldDjIkE5(ATf7z(GseT^Nbi&R7QztE@1D>6eql5Z0I zx8zn}KpHGqjY5=SGb*qJTP5;#)Jtf05V{G?Xu$!A-4Vn-hT}MiQzr%YGs8B~EjbV|aQRbhye*mCUyL|uv diff --git a/client/src/App.css b/client/src/App.css index c936391..4966630 100644 --- a/client/src/App.css +++ b/client/src/App.css @@ -692,10 +692,29 @@ input[type="number"] { /* box-sizing: border-box; */ } -/* Exclude react-time-picker inputs from the padding rules above */ -.react-time-picker__inputGroup__input { - padding-left: initial; - padding-right: initial; +/* Exclude react-time-picker inputs from the global input styles above */ +.react-time-picker .react-time-picker__inputGroup__input { + height: auto !important; + padding-left: 1px !important; + padding-right: 1px !important; + border: none !important; + border-radius: 0 !important; + box-sizing: content-box !important; + min-width: 0; + font-variant-numeric: tabular-nums; + letter-spacing: normal; + text-align: center; +} + +/* Add spacing between the ":" divider and the minute input */ +.react-time-picker .react-time-picker__inputGroup__divider { + padding: 0 3px; +} + +/* Ensure the leading zero and minute digit inputs have no extra spacing */ +.react-time-picker .react-time-picker__inputGroup__leadingZero { + padding: 0; + margin: 0; } input[type="email"] { diff --git a/client/src/components/events/EventsCalendar.js b/client/src/components/events/EventsCalendar.js index 138f2b7..5a50b26 100644 --- a/client/src/components/events/EventsCalendar.js +++ b/client/src/components/events/EventsCalendar.js @@ -1,4 +1,4 @@ -import React, {useState, useEffect} from "react"; +import React, {useState, useEffect, useRef} from "react"; import { useNavigate } from "react-router-dom"; import { AuthService, EventsService, CustomerService, ResourceService } from "../../services"; import moment from 'moment'; @@ -24,6 +24,8 @@ import { Archive, PencilSquare, Filter } from "react-bootstrap-icons"; const EventsCalendar = () => { const navigate = useNavigate(); const [events, setEvents] = useState([]); + const calendarColumnRef = useRef(null); + const [listHeight, setListHeight] = useState(null); const [customers, setCustomers] = useState([]); const [resources, setResources] = useState([]); const [fromDate, setFromDate] = useState(new Date(new Date().getFullYear(), new Date().getMonth(), 1)); @@ -212,6 +214,27 @@ const EventsCalendar = () => { } }, [events, currentRangeStart, currentRangeEnd]); + // Sync list column height with calendar column height + useEffect(() => { + const updateListHeight = () => { + if (calendarColumnRef.current) { + const calendarHeight = calendarColumnRef.current.offsetHeight; + setListHeight(calendarHeight); + } + }; + + // Initial measurement after render + const timer = setTimeout(updateListHeight, 100); + + // Update on window resize + window.addEventListener('resize', updateListHeight); + + return () => { + clearTimeout(timer); + window.removeEventListener('resize', updateListHeight); + }; + }, [events]); + const redirectToAdmin = () => { @@ -357,38 +380,68 @@ const EventsCalendar = () => {
-
-
- {calendar && } -
-
-
-
List
- { - Array.from(groupedEvents?.keys())?.map((key) => { - return
-
{key}
- { - groupedEvents.get(key).map(eventItem =>
goToView(eventItem.id)} - style={{ cursor: 'pointer' }} - > -
-
{`${moment(eventItem?.start_time).format('hh:mm A')}: ${formatFullName(eventItem.customer)}`}
-
-
{`provider: ${eventItem?.doctor}`}
-
) - } -
- }) - } -
-
-
+
+
+
+ {calendar && } + {/* Legend */} +
+
Legend:
+
+ {EventsService.labelOptions?.map((item) => ( +
+ + {item.label} +
+ ))} +
+
+
+
+
+
List
+
+ {(!groupedEvents || groupedEvents.size === 0) && ( +
+ No events for this period +
+ )} + { + Array.from(groupedEvents?.keys())?.map((key) => { + return
+
{key}
+ { + groupedEvents.get(key).map(eventItem =>
goToView(eventItem.id)} + style={{ cursor: 'pointer', padding: '8px 12px', borderRadius: '4px' }} + > +
+ {formatFullName(eventItem.customer)} + {moment(eventItem?.start_time).format('HH:mm')} - {moment(eventItem?.stop_time || eventItem?.start_time).format('HH:mm')} +
+
Provider: {eventItem?.doctor || '-'}
+
) + } +
+ }) + } +
+
+
+
{ diff --git a/client/src/components/info-screen/InfoScreen.js b/client/src/components/info-screen/InfoScreen.js index db3c998..7b2fb66 100644 --- a/client/src/components/info-screen/InfoScreen.js +++ b/client/src/components/info-screen/InfoScreen.js @@ -521,10 +521,8 @@ const InfoScreen = () => { (customers.find(c => c.id === item?.data?.customer)?.name || item?.data?.client_name || '') : (item?.data?.client_name || ''); - // Add location/address - item.location = item?.data?.resource ? - (resources.find(r => r.id === item?.data?.resource)?.address || item?.data?.resource_address || '') : - (item?.data?.resource_address || ''); + // Add driver info (from linked transportation event) + item.driverInfo = item?.link_event_name || ''; // Format start time item.startTime = item?.start_time ? @@ -647,7 +645,7 @@ const InfoScreen = () => { Time Customer - Location + Driver @@ -656,7 +654,7 @@ const InfoScreen = () => { {medicalEvent.startTime} {medicalEvent.customer} - {medicalEvent.location} + {medicalEvent.driverInfo} )) ) : ( @@ -934,7 +932,7 @@ const InfoScreen = () => { Time Customer - Location + Driver @@ -943,7 +941,7 @@ const InfoScreen = () => { {medicalEvent.startTime} {medicalEvent.customer} - {medicalEvent.location} + {medicalEvent.driverInfo} )) ) : (