This commit is contained in:
2026-02-18 12:50:04 -05:00
17 changed files with 115 additions and 62 deletions

View File

@@ -1,16 +1,16 @@
{
"files": {
"main.css": "/static/css/main.3cda7e3a.css",
"main.js": "/static/js/main.35b6c411.js",
"main.css": "/static/css/main.c8010b77.css",
"main.js": "/static/js/main.6680716c.js",
"static/js/787.c4e7f8f9.chunk.js": "/static/js/787.c4e7f8f9.chunk.js",
"static/media/landing.png": "/static/media/landing.d4c6072db7a67dff6a78.png",
"index.html": "/index.html",
"main.3cda7e3a.css.map": "/static/css/main.3cda7e3a.css.map",
"main.35b6c411.js.map": "/static/js/main.35b6c411.js.map",
"main.c8010b77.css.map": "/static/css/main.c8010b77.css.map",
"main.6680716c.js.map": "/static/js/main.6680716c.js.map",
"787.c4e7f8f9.chunk.js.map": "/static/js/787.c4e7f8f9.chunk.js.map"
},
"entrypoints": [
"static/css/main.3cda7e3a.css",
"static/js/main.35b6c411.js"
"static/css/main.c8010b77.css",
"static/js/main.6680716c.js"
]
}

View File

@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"><link rel="manifest" href="/manifest.json"/><title>Worldshine Transportation</title><script defer="defer" src="/static/js/main.35b6c411.js"></script><link href="/static/css/main.3cda7e3a.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"><link rel="manifest" href="/manifest.json"/><title>Worldshine Transportation</title><script defer="defer" src="/static/js/main.6680716c.js"></script><link href="/static/css/main.c8010b77.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -3,13 +3,41 @@ body {
}
.btn-primary {
background-color: #0066B1;
background-color: #0066B1 !important;
border-color: #0066B1 !important;
color: white;
height: 35px;
font-size: 13px;
white-space: nowrap;
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active,
.btn-primary:active:focus, .show > .btn-primary.dropdown-toggle {
background-color: #005294 !important;
border-color: #005294 !important;
}
.personnel-info-table th {
background-color: #0066B1 !important;
color: #fff !important;
}
.btn-outline-primary {
color: #0066B1 !important;
border-color: #0066B1 !important;
}
.btn-outline-primary:hover, .btn-outline-primary:active, .btn-outline-primary.active {
background-color: #0066B1 !important;
border-color: #0066B1 !important;
color: #fff !important;
}
.page-item.active .page-link {
background-color: #0066B1 !important;
border-color: #0066B1 !important;
}
.btn-warning {
height: 35px;
font-size: 13px;
@@ -855,6 +883,10 @@ input[type="checkbox"] {
min-height: 150px;
}
.sx-react-calendar-wrapper {
--sx-color-primary: #0066B1 !important;
}
.sx__event-modal {
box-shadow: 1px -1px 20px rgba(0, 0, 0, 0.3);
border-radius: 8px;
@@ -1177,6 +1209,17 @@ input[type="checkbox"] {
transform: translate(-50%, -50%);
}
.clock-sm {
width: 50px !important;
height: 50px !important;
border-width: 2px !important;
}
.clock-sm .center-dot {
width: 5px;
height: 5px;
}
.weather-icon {
display: flex;
justify-content: center;

View File

@@ -1,8 +1,6 @@
import React, { useState, useEffect } from 'react';
import { Breadcrumb, BreadcrumbItem, Card, Row, Col } from 'react-bootstrap';
import { AuthService, CustomerService, TransRoutesService } from '../../services';
import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';
import moment from 'moment';
import { CUSTOMER_TYPE, PERSONAL_ROUTE_STATUS, CUSTOMER_JOIN_REASON, CUSTOMER_JOIN_REASON_TEXT, CUSTOMER_DISCHARGE_REASON, CUSTOMER_DISCHARGE_REASON_TEXT } from '../../shared';
import {
@@ -33,7 +31,6 @@ ChartJS.register(
const AdminView = () => {
const [isLoading, setIsLoading] = useState(true);
const [reportDate, setReportDate] = useState(new Date());
const [customers, setCustomers] = useState([]);
const [selectedWeek, setSelectedWeek] = useState('this-week');
const [selectedMonth, setSelectedMonth] = useState('this-month');
@@ -659,8 +656,8 @@ const AdminView = () => {
{/* First Section - No border */}
<div className="mb-4 admin-view-container">
<Row>
{/* Left Side - 9 columns */}
<Col md={9}>
{/* Main Content - Full Width */}
<Col md={12}>
{/* First Row - Stats Card */}
<Row className="mb-4">
<Col md={12}>
@@ -830,22 +827,6 @@ const AdminView = () => {
</Row>
</Col>
{/* Right Side - 3 columns */}
<Col md={3}>
<Card className="admin-view-reports-card">
<Card.Body>
<div className="admin-view-chart-header">
<h6 className="admin-view-chart-title">Reports</h6>
<DatePicker
selected={reportDate}
onChange={(date) => setReportDate(date)}
dateFormat="MM/dd/yyyy"
className="form-control form-select-sm ms-2"
/>
</div>
</Card.Body>
</Card>
</Col>
</Row>
</div>

View File

@@ -14,7 +14,7 @@ import { createEventsServicePlugin } from '@schedule-x/events-service';
import { createEventModalPlugin} from '@schedule-x/event-modal';
import { createEventRecurrencePlugin } from "@schedule-x/event-recurrence";
import '@schedule-x/theme-default/dist/calendar.css';
import { Archive, PencilSquare, Filter } from "react-bootstrap-icons";
import { Archive, PencilSquare, Filter, Plus } from "react-bootstrap-icons";
import DatePicker from "react-datepicker";
import { vehicleSlice } from "../../store";
import Select from 'react-select';
@@ -29,6 +29,7 @@ const EventsCalendar = () => {
const [allEvents, setAllEvents] = useState([]);
const [targetedEventType, setTargetedEventType] = useState('medical');
const [currentTab, setCurrentTab] = useState('medicalCalendar');
const currentTabRef = useRef('medicalCalendar');
const [customers, setCustomers] = useState([]);
const [resources, setResources] = useState([]);
const [fromDate, setFromDate] = useState(new Date(new Date().getFullYear(), new Date().getMonth(), 1));
@@ -243,12 +244,12 @@ const EventsCalendar = () => {
setToDate(new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0));
},
onClickDate(date) {
if (currentTab === 'medicalCalendar') return;
if (currentTabRef.current === 'medicalCalendar') return;
// Parse as local date to avoid UTC timezone offset shifting the day
const [y, m, d] = date.split('-').map(Number);
const localDate = new Date(y, m - 1, d);
// Default to 10:00 AM for Activities tab
if (currentTab === 'activitiesCalendar') {
if (currentTabRef.current === 'activitiesCalendar') {
localDate.setHours(10, 0, 0, 0);
}
setNewEventStartDateTime(localDate);
@@ -256,7 +257,7 @@ const EventsCalendar = () => {
setShowCreationModal(true);
},
onClickDateTime(dateTime) {
if (currentTab === 'medicalCalendar') return;
if (currentTabRef.current === 'medicalCalendar') return;
setNewEventStartDateTime(new Date(dateTime.replace(' ', 'T')));
setNewEventEndDateTime(new Date(dateTime.replace(' ', 'T')));
setShowCreationModal(true);
@@ -799,6 +800,7 @@ const EventsCalendar = () => {
const goToTab = (value) => {
setTargetedEventType(eventTypeMap[value]);
setCurrentTab(value);
currentTabRef.current = value;
setSelectedColorFilters([]);
// Dismiss any open calendar event tile popup via plugin API
try {
@@ -1299,6 +1301,15 @@ const getReminderTitleLabel = (value) => {
</Tabs>
{ calendarView}
<div className="list-func-panel">
{currentTab !== 'medicalCalendar' && (
<button className="btn btn-primary me-2" onClick={() => {
setNewEventStartDateTime(new Date());
setNewEventEndDateTime(new Date());
setShowCreationModal(true);
}}>
<Plus size={18} className="me-1" />Add Event
</button>
)}
<Dropdown
key={'event-calendar-filter'}
id="event-calendar-filter"

View File

@@ -161,7 +161,7 @@ const UpdateCustomer = () => {
}
const redirectToView = () => {
navigate(`/customers/${urlParams.id}`);
navigate(`/customers/${urlParams.id}?tab=${activeTab}`);
}
// Phone number formatting function
@@ -1273,7 +1273,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>
@@ -1358,7 +1358,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>
@@ -1495,7 +1495,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>
@@ -1525,7 +1525,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>
@@ -1579,7 +1579,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>
@@ -1684,7 +1684,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>
@@ -1716,7 +1716,7 @@ const UpdateCustomer = () => {
<div className="list row mb-5">
<div className="col-md-12 col-sm-12 col-xs-12">
<button className="btn btn-default btn-sm float-right" onClick={() => redirectTo()}> Cancel </button>
<button className="btn btn-default btn-sm float-right" onClick={() => redirectToView()}> Cancel </button>
{/* <button className="btn btn-danger btn-sm me-2 mb-2" onClick={() => triggerShowDeleteModal()}> Delete </button> */}
<button className="btn btn-primary btn-sm float-right" onClick={() => saveCustomer()}> Save </button>
</div>

View File

@@ -23,7 +23,7 @@ const Dashboard = () => {
const eventTypes = [
{ value: 'medical', label: 'Medical Appointments' },
{ value: 'activity', label: 'Activities' },
{ value: 'incident', label: 'Important Notes And Incidents' },
{ value: 'incident', label: 'Attendance' },
{ value: 'meal_plan', label: 'Meal Plan' },
{ value: 'reminder', label: 'Important Dates' }
];

View File

@@ -675,22 +675,22 @@ const InfoScreen = () => {
{/* Time Card */}
<div>
<div className="card h-100" style={{borderRadius: '8px', minWidth: '200px'}}>
<div className="card-body text-center">
<div className="mb-3">
<div className="card-body text-center" style={{ padding: '10px 16px' }}>
<div className="mb-1">
<div className="text-black" style={{ fontSize: '12px' }}>
{moment(currentTime).format('dddd')}
</div>
<div className="text-black">
{moment(currentTime).format('MMM Do, YYYY')}
</div>
<h5 className="text-primary mt-2" style={{ fontSize: '20px', fontWeight: '600' }}>
<h5 className="text-primary mt-1 mb-0" style={{ fontSize: '20px', fontWeight: '600' }}>
{moment(currentTime).format('HH:mm')}
</h5>
</div>
{/* CSS Clock */}
<div className="clock-container">
<div className="clock">
<div className="clock-container" style={{ marginTop: '6px' }}>
<div className="clock clock-sm">
<div className="clock-face">
<div className="hand hour-hand" style={{
transform: `rotate(${(moment(currentTime).hour() % 12) * 30 + moment(currentTime).minute() * 0.5}deg)`
@@ -712,22 +712,22 @@ const InfoScreen = () => {
{/* Weather Card */}
<div>
<div className="card h-100" style={{borderRadius: '8px', minWidth: '200px'}}>
<div className="card-body text-center">
<div className="mb-3">
<div className="card-body text-center" style={{ padding: '10px 16px' }}>
<div className="mb-1">
<div className="text-black" style={{ fontSize: '12px' }}>
New York, NY
</div>
<div className="text-black">
Partly Cloudy
</div>
<h5 className="text-primary mt-2" style={{ fontSize: '20px', fontWeight: '600' }}>
<h5 className="text-primary mt-1 mb-0" style={{ fontSize: '20px', fontWeight: '600' }}>
22°C
</h5>
</div>
{/* Weather Icon */}
<div className="weather-icon">
<i className="fas fa-cloud-sun" style={{ fontSize: '48px', color: '#ffc107' }}></i>
<div className="weather-icon" style={{ marginTop: '6px' }}>
<i className="fas fa-cloud-sun" style={{ fontSize: '28px', color: '#ffc107' }}></i>
</div>
</div>
</div>

View File

@@ -943,7 +943,7 @@ const PersonnelInfoTable = ({transRoutes, showCompletedInfo,
</div>
<Modal show={show} onHide={() => closeModal()}>
<Modal.Header closeButton>
<Modal.Title>Special Edit Participant</Modal.Title>
<Modal.Title>Special Edit Customer</Modal.Title>
</Modal.Header>
<Modal.Body>
<>
@@ -984,7 +984,7 @@ const PersonnelInfoTable = ({transRoutes, showCompletedInfo,
<div className="app-main-content-fields-section">
<div className="me-4">
<div className="field-label">Special Set User Route Status
<div className="field-label">Special Set Customer Route Status
</div>
<select value={customerStatusInRoute} onChange={(e)=>{setCustomerStatusInRoute(e.currentTarget.value)}}>
<option value=""></option>
@@ -996,7 +996,7 @@ const PersonnelInfoTable = ({transRoutes, showCompletedInfo,
</select>
</div>
<div className="me-4">
<div className="field-label"> Special Set User Pickup Status
<div className="field-label"> Special Set Customer Pickup Status
</div>
<select value={customerPickupStatusInRoute} onChange={(e)=>{setCustomerPickupStatusInRoute(e.currentTarget.value)}}>
<option value=""></option>

View File

@@ -252,6 +252,24 @@ const UpdateDailyTemplateRoute = () => {
setNewCustomerList={setNewCustomerList}
/>
</div>
<div className="app-main-content-fields-section">
<div className="mt-4">
<button
className="btn btn-primary me-2"
onClick={updateCurrentRoute}
disabled={saving}
>
{saving ? <><Spinner size="sm" className="me-2" />Saving...</> : 'Save Changes'}
</button>
<button
className="btn btn-secondary me-2"
onClick={goBack}
disabled={saving}
>
Cancel
</button>
</div>
</div>
</Tab>
</Tabs>
</div>