全日历删除外部事件恢复功能

问题描述 投票:0回答:3

我正在尝试使用

fullcalendar
库创建一个事件日历并遵循演示
external-dragging
,我理解这个概念只是想知道如何执行恢复功能,如果我按取消,放置事件将返回到其原始位置。

我正在使用

sweetalert2
库替换默认的 javascript 警报,下面是我的代码。

$('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month'
            },
            editable: true,
            eventConstraint: {
            start: moment().format('YYYY-MM-DD'),
            end: '2100-01-01' // hard coded goodness unfortunately
            },
            droppable: true, // this allows things to be dropped onto the calendar
            drop: function() {
                // is the "remove after drop" checkbox checked?

                if ($('#drop-remove').is(':checked')) {
                    // if so, remove the element from the "Draggable Events" list
                    $(this).remove();

                }

                swal({
                    title: 'Are you sure?',
                    text: "You want to change this event schedule?",
                    type: 'warning',
                    showCancelButton: true,
                    confirmButtonColor: '#3085d6',
                    cancelButtonColor: '#d33',
                    confirmButtonText: 'Yes, proceed'
                  }).then(function (result) {
                    if (result.value) {


                      swal(
                        'Success!',
                        'The event schedule was successfully changed to ',
                        'success'
                      )



                    }else{

                      revertFunc();

                    }
                  })
                 //end of drop  

            },

revertFunc();
仅在
eventDrop
上可用,但我不知道如何在
drop
活动上实现它,任何建议都会很棒

javascript jquery fullcalendar
3个回答
3
投票

“drop”回调中没有“revertFunc()”。它根本不存在。

我的解决方法(FullCalendar v4)是管理

EventLeave
EventReceive
:在第一个中保存原始事件,在第二个中删除新事件并恢复原始事件。

这里有一个简化版本:

// to map original events (event.id => event)
_oldEventsInfo = new Map();

eventLeaveHandler(info) {
    _oldEventsInfo.set(info.event.id, info);
}

eventReceiveHandler(info) {
    if (/* for any reason cannot be moved */) {
        this.revert(info);
    } else {
        _oldEventsInfo.delete(info.event.id);
    }
}

revert(info) {
    var oldInfo = _oldEventsInfo.get(info.event.id);
    if (oldInfo) {
        // build a new event to restore in the original calendar
        var oldCalendar = oldInfo.event._calendar;
        var restoredEvent = {
            id: oldInfo.event.id,
            // etc
        };
        oldCal.addEvent(restoredEvent);
        // delete the destination (dragged) event from dest calendar
        info.event._calendar.getEventById(info.event.id).remove();
        // remove the old event from my saved
        _oldEventsInfo.delete(info.event.id);
    }
}

0
投票

在 v5 中,eventDrop 上有一个“恢复”功能。

在 React 中你可以将此回调存储为引用变量

  const revertDropEvent = useRef<() => void>();

  const handleDropEvent = ({ event, revert }: EventDropArg) => {
      revertDropEvent.current = revert;
  }
  
  const handleCancelDrop = () => {
      if (revertDropEvent.current) revertDropEvent.current();
  }

  return (
  <div>
    <FullCalendar
       eventDrop={handleDropEvent}
       /* ... */
    />
    <ConfirmationModal onClose={handleCancelDrop}/>
  </div>

0
投票

带有 React 的 Fullcalendar v6.1.10

如果您想恢复位置,可以使用恢复功能,如文档所述:https://fullcalendar.io/docs/eventDrop

例如。 ...

    const handleDropEvent = async (e) => {
        try {
            const result = await someFunction(e.event);
            if (!result) {
                e.revert()
            }
        } catch (error) {
            e.revert()
        }
    }

...

<FullCalendar
..
eventDrop={handleDropEvent}
...
/>
© www.soinside.com 2019 - 2024. All rights reserved.