diff --git a/dist/js/calendar-widget.js b/dist/js/calendar-widget.js index 3e36d78..2f1e1cc 100644 --- a/dist/js/calendar-widget.js +++ b/dist/js/calendar-widget.js @@ -1 +1 @@ -function g({view:o="dayGridMonth",locale:w="en",firstDay:E=1,events:b=[],eventContent:l=null,resourceLabelContent:s=null,selectable:j=!1,eventClickEnabled:h=!1,eventDragEnabled:i=!1,eventResizeEnabled:c=!1,noEventsClickEnabled:p=!1,dateSelectEnabled:u=!1,dateClickEnabled:y=!1,viewDidMountEnabled:m=!1,dayMaxEvents:f=!1,moreLinkContent:v=null,resources:C=[],hasDateClickContextMenu:D=!1,hasDateSelectContextMenu:S=!1,hasEventClickContextMenu:x=!1,hasNoEventsClickContextMenu:k=!1,options:$={}}){return{calendarEl:null,init:async function(){this.calendarEl=this.$el;let t=this,n={view:o,resources:C,eventSources:[{events:(e,r,a)=>this.$wire.getEventsJs(e)}],locale:w,firstDay:E,dayMaxEvents:f,selectable:u,eventStartEditable:i,eventDurationEditable:c};y&&(n.dateClick=e=>{D?t.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{date:e.date,dateStr:e.dateStr,allDay:e.allDay,view:e.view,resource:e.resource},jsEvent:e.jsEvent,dayEl:e.dayEl,context:"dateClick"}})):this.$wire.onDateClick({date:e.date,dateStr:e.dateStr,allDay:e.allDay,view:e.view,resource:e.resource})}),u&&(n.select=e=>{S?t.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{start:e.start,startStr:e.startStr,end:e.end,endStr:e.endStr,allDay:e.allDay,view:e.view,resource:e.resource},jsEvent:e.jsEvent,context:"dateSelect"}})):this.$wire.onDateSelect({start:e.start,startStr:e.startStr,end:e.end,endStr:e.endStr,allDay:e.allDay,view:e.view,resource:e.resource})}),l!==null&&(n.eventContent=e=>{let r=t.getEventContent(e);if(r!==void 0)return{html:r}}),v!==null&&(n.moreLinkContent=e=>({html:t.getMoreLinkContent(e)})),s!==null&&(n.resourceLabelContent=e=>{let r=t.getResourceLabelContent(e);if(r!==void 0)return{html:r}}),h&&(n.eventClick=e=>{if(e.event.extendedProps.url){let r=e.event.extendedProps.url_target??"_blank";window.open(e.event.extendedProps.url,r)}else x?t.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{event:e.event,view:e.view},jsEvent:e.jsEvent,context:"eventClick"}})):this.$wire.onEventClick({event:e.event,view:e.view})}),p&&(n.noEventsClick=e=>{k?t.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{view:e.view},jsEvent:e.jsEvent,context:"noEventsClick"}})):this.$wire.onNoEventsClick({view:e.view})}),n.eventResize=async e=>{let r=e.event.durationEditable,a=c;r!==void 0&&(a=r),a&&await this.$wire.onEventResize({event:e.event,oldEvent:e.oldEvent,endDelta:e.endDelta,view:e.view}).then(d=>{d===!1&&e.revert()})},n.eventDrop=async e=>{let r=e.event.startEditable,a=i;r!==void 0&&(a=r),a&&await this.$wire.onEventDrop({event:e.event,oldEvent:e.oldEvent,oldResource:e.oldResource,newResource:e.newResource,delta:e.delta,view:e.view}).then(d=>{d===!1&&e.revert()})},m&&(n.viewDidMount=e=>{this.$wire.onViewDidMount({view:e})}),this.ec=new EventCalendar(this.$el.querySelector("div"),{...n,...$}),window.addEventListener("calendar--refresh",()=>{this.ec.refetchEvents()}),this.$wire.on("calendar--set",e=>{this.ec.setOption(e.key,e.value)})},getEventContent:function(t){if(typeof l=="string")return this.wrapContent(l,t);if(typeof l=="object"){let n=t.event.extendedProps.model,e=l[n];return e===void 0?void 0:this.wrapContent(e,t)}},getResourceLabelContent:function(t){if(typeof s=="string")return this.wrapContent(s,t);if(typeof s=="object"){let n=t.event.extendedProps.model,e=s[n];return e===void 0?void 0:this.wrapContent(e,t)}},getMoreLinkContent:function(t){return this.wrapContent(v,t)},wrapContent:function(t,n){let e=document.createElement("div");return e.innerHTML=t,e.setAttribute("x-data",JSON.stringify(n)),e.classList.add("w-full"),e.outerHTML}}}export{g as default}; +function M({view:E="dayGridMonth",locale:h="en",firstDay:p=1,events:R=[],eventContent:a=null,resourceLabelContent:s=null,selectable:q=!1,eventClickEnabled:f=!1,eventDragEnabled:i=!1,eventResizeEnabled:u=!1,noEventsClickEnabled:y=!1,dateSelectEnabled:c=!1,dateClickEnabled:m=!1,viewDidMountEnabled:C=!1,eventAllUpdatedEnabled:D=!1,dayMaxEvents:S=!1,moreLinkContent:v=null,resources:x=[],hasDateClickContextMenu:$=!1,hasDateSelectContextMenu:k=!1,hasEventClickContextMenu:g=!1,hasNoEventsClickContextMenu:b=!1,options:j={},dayHeaderFormat:o=null,slotLabelFormat:w=null}){return{calendarEl:null,init:async function(){this.calendarEl=this.$el;let n=this,t={view:E,resources:x,eventSources:[{events:(e,r,l)=>this.$wire.getEventsJs(e)}],locale:h,firstDay:p,dayMaxEvents:S,selectable:c,eventStartEditable:i,eventDurationEditable:u};o&&(t.dayHeaderFormat=o),w&&(t.slotLabelFormat=w),m&&(t.dateClick=e=>{$?n.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{date:e.date,dateStr:e.dateStr,allDay:e.allDay,view:e.view,resource:e.resource},jsEvent:e.jsEvent,dayEl:e.dayEl,context:"dateClick"}})):this.$wire.onDateClick({date:e.date,dateStr:e.dateStr,allDay:e.allDay,view:e.view,resource:e.resource})}),c&&(t.select=e=>{k?n.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{start:e.start,startStr:e.startStr,end:e.end,endStr:e.endStr,allDay:e.allDay,view:e.view,resource:e.resource},jsEvent:e.jsEvent,context:"dateSelect"}})):this.$wire.onDateSelect({start:e.start,startStr:e.startStr,end:e.end,endStr:e.endStr,allDay:e.allDay,view:e.view,resource:e.resource})}),a!==null&&(t.eventContent=e=>{let r=n.getEventContent(e);if(r!==void 0)return{html:r}}),v!==null&&(t.moreLinkContent=e=>({html:n.getMoreLinkContent(e)})),s!==null&&(t.resourceLabelContent=e=>{let r=n.getResourceLabelContent(e);if(r!==void 0)return{html:r}}),f&&(t.eventClick=e=>{if(e.event.extendedProps.url){let r=e.event.extendedProps.url_target??"_blank";window.open(e.event.extendedProps.url,r)}else g?n.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{event:e.event,view:e.view},jsEvent:e.jsEvent,context:"eventClick"}})):this.$wire.onEventClick({event:e.event,view:e.view})}),y&&(t.noEventsClick=e=>{b?n.$el.querySelector("[calendar-context-menu]").dispatchEvent(new CustomEvent("calendar--open-menu",{detail:{mountData:{view:e.view},jsEvent:e.jsEvent,context:"noEventsClick"}})):this.$wire.onNoEventsClick({view:e.view})}),t.eventResize=async e=>{let r=e.event.durationEditable,l=u;r!==void 0&&(l=r),l&&await this.$wire.onEventResize({event:e.event,oldEvent:e.oldEvent,endDelta:e.endDelta,view:e.view}).then(d=>{d===!1&&e.revert()})},t.eventDrop=async e=>{let r=e.event.startEditable,l=i;r!==void 0&&(l=r),l&&await this.$wire.onEventDrop({event:e.event,oldEvent:e.oldEvent,oldResource:e.oldResource,newResource:e.newResource,delta:e.delta,view:e.view}).then(d=>{d===!1&&e.revert()})},C&&(t.viewDidMount=e=>{this.$wire.onViewDidMount({view:e})}),D&&(t.eventAllUpdated=e=>{this.$wire.onEventAllUpdated({info:e})}),this.ec=new EventCalendar(this.$el.querySelector("div"),{...t,...j}),window.addEventListener("calendar--refresh",()=>{this.ec.refetchEvents()}),this.$wire.on("calendar--set",e=>{this.ec.setOption(e.key,e.value)})},getEventContent:function(n){if(typeof a=="string")return this.wrapContent(a,n);if(typeof a=="object"){let t=n.event.extendedProps.model,e=a[t];return e===void 0?void 0:this.wrapContent(e,n)}},getResourceLabelContent:function(n){if(typeof s=="string")return this.wrapContent(s,n);if(typeof s=="object"){let t=n.event.extendedProps.model,e=s[t];return e===void 0?void 0:this.wrapContent(e,n)}},getMoreLinkContent:function(n){return this.wrapContent(v,n)},wrapContent:function(n,t){let e=document.createElement("div");return e.innerHTML=n,e.setAttribute("x-data",JSON.stringify(t)),e.classList.add("w-full"),e.outerHTML}}}export{M as default}; diff --git a/resources/js/calendar-widget.js b/resources/js/calendar-widget.js index 51cc11f..5572ea3 100644 --- a/resources/js/calendar-widget.js +++ b/resources/js/calendar-widget.js @@ -13,6 +13,7 @@ export default function calendarWidget({ dateSelectEnabled = false, dateClickEnabled = false, viewDidMountEnabled = false, + eventAllUpdatedEnabled = false, dayMaxEvents = false, moreLinkContent = null, resources = [], @@ -21,6 +22,8 @@ export default function calendarWidget({ hasEventClickContextMenu = false, hasNoEventsClickContextMenu = false, options = {}, + dayHeaderFormat = null, + slotLabelFormat = null, }) { return { @@ -47,6 +50,14 @@ export default function calendarWidget({ eventDurationEditable: eventResizeEnabled, }; + if (dayHeaderFormat) { + settings.dayHeaderFormat = dayHeaderFormat; + } + + if (slotLabelFormat) { + settings.slotLabelFormat = slotLabelFormat; + } + if (dateClickEnabled) { settings.dateClick = (info) => { if (hasDateClickContextMenu) { @@ -245,6 +256,14 @@ export default function calendarWidget({ }; } + if (eventAllUpdatedEnabled) { + settings.eventAllUpdated = (info) => { + this.$wire.onEventAllUpdated({ + info: info, + }); + }; + } + this.ec = new EventCalendar(this.$el.querySelector('div'), { ...settings, ...options @@ -278,7 +297,7 @@ export default function calendarWidget({ return undefined; }, - getResourceLabelContent: function(info) { + getResourceLabelContent: function (info) { if (typeof resourceLabelContent === 'string') { return this.wrapContent(resourceLabelContent, info); } diff --git a/resources/views/widgets/calendar.blade.php b/resources/views/widgets/calendar.blade.php index bab9e48..32256fd 100644 --- a/resources/views/widgets/calendar.blade.php +++ b/resources/views/widgets/calendar.blade.php @@ -6,12 +6,16 @@ $dateClickEnabled = $this->isDateClickEnabled(); $dateSelectEnabled = $this->isDateSelectEnabled(); $viewDidMountEnabled = $this->isViewDidMountEnabled(); + $eventAllUpdatedEnabled = $this->isEventAllUpdatedEnabled(); $onEventResizeStart = method_exists($this, 'onEventResizeStart'); $onEventResizeStop = method_exists($this, 'onEventResizeStop'); $hasDateClickContextMenu = !empty($this->getCachedDateClickContextMenuActions()); $hasDateSelectContextMenu = !empty($this->getCachedDateSelectContextMenuActions()); $hasEventClickContextMenu = !empty($this->getCachedEventClickContextMenuActions()); $hasNoEventsClickContextMenu = !empty($this->getCachedNoEventsClickContextMenuActions()); + + $dayHeaderFormatJs = $this->getDayHeaderFormatJs(); + $slotLabelFormatJs = $this->getSlotLabelFormatJs(); @endphp @@ -76,6 +80,7 @@ dateClickEnabled: @js($dateClickEnabled), dateSelectEnabled: @js($dateSelectEnabled), viewDidMountEnabled: @js($viewDidMountEnabled), + eventAllUpdatedEnabled: @js($eventAllUpdatedEnabled), onEventResizeStart: @js($onEventResizeStart), onEventResizeStop: @js($onEventResizeStop), dayMaxEvents: @js($this->dayMaxEvents()), @@ -86,6 +91,8 @@ hasEventClickContextMenu: @js($hasEventClickContextMenu), hasNoEventsClickContextMenu: @js($hasNoEventsClickContextMenu), options: @js($this->getOptions()), + dayHeaderFormat: {{$dayHeaderFormatJs}}, + slotLabelFormat: {{$slotLabelFormatJs}}, })" >
diff --git a/src/Concerns/HandlesEventAllUpdated.php b/src/Concerns/HandlesEventAllUpdated.php new file mode 100644 index 0000000..7f9b4a1 --- /dev/null +++ b/src/Concerns/HandlesEventAllUpdated.php @@ -0,0 +1,22 @@ +eventAllUpdatedEnabled = $enabled; + + return $this; + } + + public function isEventAllUpdatedEnabled(): bool + { + return $this->eventAllUpdatedEnabled; + } +} diff --git a/src/Concerns/HasDayHeaderFormat.php b/src/Concerns/HasDayHeaderFormat.php new file mode 100644 index 0000000..93f8d9a --- /dev/null +++ b/src/Concerns/HasDayHeaderFormat.php @@ -0,0 +1,16 @@ +