Compare commits

...

5 Commits

Author SHA1 Message Date
victorAnumudu cd7e6fdf75 calendar fixing contd 2025-01-20 06:15:11 +01:00
victorAnumudu d1d6c6a9fc calendar fix contd 2025-01-19 07:14:46 +01:00
CHIEFSOFT\ameye e8123bc898 node_modules 2025-01-18 11:22:33 -05:00
victor.ebuka 4bcbdc5a12 Merge branch 'calendar-fix-start' of MERMS/MermsPanelReactJS into master-bootstrap 2025-01-17 23:05:00 +00:00
victor.ebuka 5c68c5a51b Merge branch 'calendar-fix-start' of MERMS/MermsPanelReactJS into master-bootstrap 2025-01-17 22:26:00 +00:00
5 changed files with 68 additions and 31 deletions
+1
View File
@@ -16,6 +16,7 @@ services:
- ./:/usr/src/app - ./:/usr/src/app
- ./src/:/usr/src/app/src - ./src/:/usr/src/app/src
- ./run.sh:/usr/src/app/run.sh - ./run.sh:/usr/src/app/run.sh
- ./node_modules/:/usr/src/app/node_modules
extra_hosts: extra_hosts:
- api.mermsemr.com:10.10.33.15 - api.mermsemr.com:10.10.33.15
- devapi.mermsemr.com:10.10.33.15 - devapi.mermsemr.com:10.10.33.15
+33 -11
View File
@@ -11,13 +11,34 @@ export default function Calendar(){
// setDraggedEvent(event) // setDraggedEvent(event)
// } // }
const dummyEvents = [ const events = [
{id: '1111', title: 'Family Vacation', color: 'fc-event-primary', start: new Date('2025-01-18')}, {id: '1111', title: 'Family Vacation', color: 'fc-event-primary', start: new Date('2025-01-18')},
{id: '2222', title: 'Meeting In Office', color: 'fc-event-warning', start: new Date('2025-01-19')}, {id: '2222', title: 'Meeting In Office', color: 'fc-event-warning', start: new Date('2025-01-19')},
{id: '3333', title: 'Client Call', color: 'fc-event-danger', start: new Date('2025-01-22')}, {id: '3333', title: 'Client Call', color: 'fc-event-danger', start: new Date('2025-01-22')},
{id: '4444', title: 'Interview', color: 'fc-event-success', start: new Date('2025-01-1')} {id: '4444', title: 'Interview', color: 'fc-event-success', start: new Date('2025-01-1')}
] ]
const [dummyEvents, setDummyEvents] = useState(events)
const [removeAfterDrop, setRemoveAfterDrop] = useState(false)
const [newEvent, setNewEvent] = useState({
title: '', color: ''
})
const handleEditEvent = ({target:{name,value}}) => {
setNewEvent(prev => ({...prev, [name]:value}))
}
const handleAddNewEvent = () => {
if(newEvent.title && newEvent.color){
const eventToAdd = {...newEvent}
setDummyEvents(prev => ([...prev, eventToAdd]))
setNewEvent({title: '', color: ''})
}
}
return( return(
<> <>
<BreadcrumbComBS title='Calendar' paths={['Dashboard', 'Calendar']} /> <BreadcrumbComBS title='Calendar' paths={['Dashboard', 'Calendar']} />
@@ -51,8 +72,8 @@ export default function Calendar(){
))} */} ))} */}
<ExternalDraggable dummyEvents={dummyEvents} /> <ExternalDraggable dummyEvents={dummyEvents} />
<div className="form-check"> <div className="form-check">
<input className="form-check-input" type="checkbox" value="" <input className="form-check-input" type="checkbox" value={removeAfterDrop}
id="defaultCheck1" /> id="defaultCheck1" onChange={() => setRemoveAfterDrop(prev => !prev)} />
<label className="form-check-label" htmlFor="defaultCheck1"> <label className="form-check-label" htmlFor="defaultCheck1">
Remove After Drop Remove After Drop
</label> </label>
@@ -62,7 +83,7 @@ export default function Calendar(){
<div className="col-xl-9"> <div className="col-xl-9">
<div className="event-calendar"> <div className="event-calendar">
{/* <EventCalendar draggedEvent={draggedEvent} setDraggedEvent={setDraggedEvent} /> */} {/* <EventCalendar draggedEvent={draggedEvent} setDraggedEvent={setDraggedEvent} /> */}
<EventCalendar /> <EventCalendar removeAfterDrop={removeAfterDrop} setDummyEvents={setDummyEvents} />
</div> </div>
</div> </div>
</div> </div>
@@ -86,15 +107,16 @@ export default function Calendar(){
<form> <form>
<div className="form-group"> <div className="form-group">
<label>Event Name</label> <label>Event Name</label>
<input type="email" className="form-control" id="eventname" /> <input type="email" className="form-control" id="eventname" name='title' value={newEvent.title} onChange={handleEditEvent} />
</div> </div>
<div className="form-group"> <div className="form-group">
<label>Choose Event Color</label> <label>Choose Event Color</label>
<select className="form-control"> <select className="form-control" name='color' value={newEvent.color} onChange={handleEditEvent}>
<option>Primary</option> <option value={''}>Select</option>
<option>Warning</option> <option value={'fc-event-primary'}>Primary</option>
<option>Success</option> <option value={'fc-event-warning'}>Warning</option>
<option>Danger</option> <option value={'fc-event-success'}>Success</option>
<option value={'fc-event-danger'}>Danger</option>
</select> </select>
</div> </div>
@@ -102,7 +124,7 @@ export default function Calendar(){
</div> </div>
<div className="modal-footer"> <div className="modal-footer">
<button type="button" className="btn btn-danger" data-bs-dismiss="modal">Close</button> <button type="button" className="btn btn-danger" data-bs-dismiss="modal">Close</button>
<button type="button" className="btn btn-success">Save changes</button> <button type="button" className="btn btn-success" onClick={handleAddNewEvent}>Save changes</button>
</div> </div>
</div> </div>
</div> </div>
+15 -6
View File
@@ -6,7 +6,7 @@ import timeGridPlugin from '@fullcalendar/timegrid';
import interactionPlugin from '@fullcalendar/interaction'; import interactionPlugin from '@fullcalendar/interaction';
import { INITIAL_EVENTS, createEventId } from './event-utils'; import { INITIAL_EVENTS, createEventId } from './event-utils';
export default function EventCalendar({draggedEvent, setDraggedEvent}) { export default function EventCalendar({draggedEvent, setDraggedEvent, removeAfterDrop, setDummyEvents}) {
const [weekendsVisible, setWeekendsVisible] = useState(true); const [weekendsVisible, setWeekendsVisible] = useState(true);
const [currentEvents, setCurrentEvents] = useState(INITIAL_EVENTS); const [currentEvents, setCurrentEvents] = useState(INITIAL_EVENTS);
@@ -40,20 +40,29 @@ export default function EventCalendar({draggedEvent, setDraggedEvent}) {
} }
const onDrop = (event) => { const onDrop = (event) => {
console.log('event', event) // console.log('event', event)
if(event){ if(event){
let newEvent = { let newEvent = {
id: createEventId(), id: createEventId(),
title: event.draggedEl.innerText, title: event.draggedEl.innerText,
start: event.startStr, start: event.startStr,
end: event.endStr, // end: event.endStr,
allDay: event.allDay, allDay: event.allDay,
...event ...event
} }
setCurrentEvents(prev => ([...prev, newEvent])) setCurrentEvents(prev => ([...prev, newEvent]))
if(removeAfterDrop){
setDummyEvents(prev => prev.filter(item => item.title != newEvent.title))
}
} }
} }
const removeEvent = (event) => {
let eventToRemove = event?.event?._def?.publicId
let remainingEvent = currentEvents.filter(item => item.id != eventToRemove)
setCurrentEvents(remainingEvent)
}
function handleEventClick(clickInfo) { function handleEventClick(clickInfo) {
if ( if (
@@ -87,9 +96,9 @@ export default function EventCalendar({draggedEvent, setDraggedEvent}) {
weekends={weekendsVisible} weekends={weekendsVisible}
// initialEvents={INITIAL_EVENTS} // alternatively, use the `events` setting to fetch from a feed // initialEvents={INITIAL_EVENTS} // alternatively, use the `events` setting to fetch from a feed
events={currentEvents} events={currentEvents}
// select={handleDateSelect} select={handleDateSelect}
eventContent={renderEventContent} // custom render function eventContent={renderEventContent} // custom render function
// eventClick={handleEventClick} eventClick={handleEventClick}
eventsSet={handleEvents} // called after events are initialized/added/changed/removed eventsSet={handleEvents} // called after events are initialized/added/changed/removed
/* you can update a remote database when these fire: /* you can update a remote database when these fire:
eventAdd={function(){}} eventAdd={function(){}}
@@ -97,7 +106,7 @@ export default function EventCalendar({draggedEvent, setDraggedEvent}) {
eventRemove={function(){}} eventRemove={function(){}}
*/ */
eventRemove={removeEvent}
droppable= {true} // this allows things to be dropped onto the calendar droppable= {true} // this allows things to be dropped onto the calendar
drop={onDrop} drop={onDrop}
/> />
+6 -1
View File
@@ -6,12 +6,17 @@ const ExternalDraggable = ({dummyEvents}) => {
useEffect(() => { useEffect(() => {
// Make the external events draggable // Make the external events draggable
new Draggable(eventContainerRef.current, { const draggable = new Draggable(eventContainerRef.current, {
itemSelector: ".fc-event", itemSelector: ".fc-event",
eventData: (eventEl) => ({ eventData: (eventEl) => ({
title: eventEl.innerText.trim(), title: eventEl.innerText.trim(),
}), }),
}); });
// Cleanup the Draggable instance on unmount
return () => {
draggable.destroy();
};
}, []); }, []);
return ( return (
+13 -13
View File
@@ -2,19 +2,19 @@ let eventGuid = 0;
let todayStr = new Date().toISOString().replace(/T.*$/, ''); // YYYY-MM-DD of today let todayStr = new Date().toISOString().replace(/T.*$/, ''); // YYYY-MM-DD of today
export const INITIAL_EVENTS = [ export const INITIAL_EVENTS = [
{ // {
id: createEventId(), // id: createEventId(),
title: 'All-day event', // title: 'All-day event',
start: new Date('2025-01-19'), // start: new Date('2025-01-19'),
end: new Date('2025-01-20'), // end: new Date('2025-01-20'),
// color: 'blue' // // color: 'blue'
}, // },
{ // {
id: createEventId(), // id: createEventId(),
title: 'Timed event', // title: 'Timed event',
start: todayStr + 'T12:00:00', // start: todayStr + 'T12:00:00',
// color: 'red' // // color: 'red'
}, // },
]; ];
export function createEventId() { export function createEventId() {