byrdr
byrdr

Reputation: 5467

Adding/Removing eventSources FullCalendar

I'd like to be able to filter events based on adding and removing eventSources. I can't find a good example of this being done.

.fullCalendar( 'addEventSource', source )
.fullCalendar( 'removeEventSource', source )

I'd like to have check boxes that toggle the execution of those functions. I can't seem to get the functionality working though.

$( "#target" ).click(function() { 
  $('#calendar').fullCalendar( 'removeEventSource', 'Event1' );
});

Here is my full code:

    $('#calendar').fullCalendar({
      header: {
    left: 'title',
    center: 'prev,next',
    right: 'month,agendaWeek,agendaDay,today'
},
       eventLimit: {
    'agenda': 4, // adjust to 6 only for agendaWeek/agendaDay
    'default': true // give the default value to other views
        },
          eventSources: [
            {
               title: 'Event1',
                url: "http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic"
            },

            {

                url: 'https://www.google.com/calendar/feeds/vineyardcincinnati.com_o6jncckm5ka55fpragnbp4mk9c%40group.calendar.google.com/public/basic'
            },
        {
        url: "https://www.google.com/calendar/feeds/ht3jlfaac5lfd6263ulfh4tql8%40group.calendar.google.com/public/basic"
            }
        ],

        eventClick: function(event) {
            // opens events in a popup window
            window.open(event.url, 'gcalevent', 'width=700,height=600');
            return false;
        },

        loading: function(bool) {
            if (bool) {
                $('#loading').show();
            }else{
                $('#loading').hide();
            }
        }

    });

Upvotes: 1

Views: 8466

Answers (3)

Rushi Chudasama
Rushi Chudasama

Reputation: 19

The code provided initializes a FullCalendar instance using jQuery syntax but I have converted it to React Js

import React, { useEffect, useRef } from 'react';
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
import googleCalendarPlugin from '@fullcalendar/google-calendar';

const YourCalendarComponent = () => {
  const calendarRef = useRef(null);

  useEffect(() => {
    const calendarApi = calendarRef.current.getApi();

    const eventSources = [
      {
        googleCalendarId: "[email protected]",
        className: 'event1'
      },
      {
        googleCalendarId: "vineyardcincinnati.com_o6jncckm5ka55fpragnbp4mk9c@group.calendar.google.com",
        className: 'event2'
      },
      {
        googleCalendarId: "[email protected]",
        className: 'event3'
      }
    ];

    const calendarOptions = {
      plugins: [dayGridPlugin, googleCalendarPlugin],
      headerToolbar: {
        left: 'title',
        center: 'prev,next',
        right: 'month,agendaWeek,agendaDay,today'
      },
      eventLimit: {
        agenda: 4,
        default: true
      },
      eventSources: eventSources,
      eventClick: function (event) {
        window.open(event.event.url, 'gcalevent', 'width=700,height=600');
        return false;
      },
      loading: function (bool) {
        if (bool) {
          // Handle loading indicator if needed
        } else {
          // Hide loading indicator
        }
      }
    };

    if (calendarApi) {
      calendarApi.setOption('googleCalendarApiKey', 'YOUR_GOOGLE_CALENDAR_API_KEY');
      calendarApi.setOption('eventSources', eventSources);
    }
  }, []);

  return (
    <div>
      <FullCalendar
        ref={calendarRef}
        plugins={[dayGridPlugin, googleCalendarPlugin]}
        initialView="dayGridMonth"
        headerToolbar={{
          left: 'title',
          center: 'prev,next',
          right: 'month,agendaWeek,agendaDay,today'
        }}
        eventLimit={{ agenda: 4, default: true }}
        eventSources={[
          {
            googleCalendarId: "[email protected]",
            className: 'event1'
          },
          {
            googleCalendarId: "vineyardcincinnati.com_o6jncckm5ka55fpragnbp4mk9c@group.calendar.google.com",
            className: 'event2'
          },
          {
            googleCalendarId: "[email protected]",
            className: 'event3'
          }
        ]}
        eventClick={(event) => {
          window.open(event.event.url, 'gcalevent', 'width=700,height=600');
          return false;
        }}
        loading={(bool) => {
          if (bool) {
            // Handle loading indicator if needed
          } else {
            // Hide loading indicator
          }
        }}
      />
    </div>
  );
};

export default YourCalendarComponent;

Adjustments might be necessary based on specific requirements for event handling and loading indicators.

Upvotes: -1

Manish Kumar Gurjar
Manish Kumar Gurjar

Reputation: 655

Load FullCalendar : Use following given code to load FullCalendar. create a jquery function like LoadCalendar and put below code in this function and call this function on document.ready function in jquery.

 $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        locale: '@companyCulture',
        defaultDate: Date.now(),
        defaultView: 'month',
        navLinks: true, // can click day/week names to navigate views
        editable: false,
        eventLimit: true, // allow "more" link when too many events
        dayClick: function (date, allDay, jsEvent, view) {
            //$("#lblDate").html('' + moment(date).format("MMMM DD,YYYY hh:mm") + '');
            $("#lblDate").html('' + moment(date).format("MMMM DD,YYYY hh:mm A") + '');
            $("#hdRDate").val(moment(date).format());
            emptyEventDetails(date);
            // $("#AddEventModel").modal();
        },
        eventClick: function (calEvent, jsEvent, view) {
            $.ajax({
                type: "GET",
                async: false,
                cache: false,
                url: "@Url.Action("GetEventById", "Events")",
                data: {
                    Eventid: calEvent.id
                },
                success: function (data) {
                    emptyEventDetails();
                    //$.each(data.data, function () {
                    //    alert(this["Title"]);
                    //    var color = 'orange';
                    //    var Title = this["Title"];
                    //    //addCalanderEvent(this["EventID"], this["EventDate"], Title, color);
                    //});

                }

            });

            //$("#lblDate").html('' + calEvent.EventDate + '');
            //$("#hdRDate").val(calEvent.EventDate);
            //$("#AddEventModel").modal();
        }
    });

Add a Event: Use the below code to add a event in FullCalendar

 var eventObject = {
        title: title,
        start: moment(start).format("MMMM DD,YYYY hh:mm A"),
        end: moment(end).format("MMMM DD,YYYY hh:mm A"),
        id: id,
        color: colour
    };

    $('#calendar').fullCalendar('renderEvent', eventObject, true);

OR

$('#calendar').fullCalendar( 'addEventSource', newSource); //Add a new source 

Remove all Events: I'm trying to remove all the event sources in the fullcalendar plugin. I'm currently using a combination of

 $('#calendar').fullCalendar('removeEvents') //Hide all events
 $('#calendar').fullCalendar('removeEventSource', $('.Source').val()) //remove eventSource from stored hidden input

OR

$('#Calendar').fullCalendar( 'removeEvents').fullCalendar('removeEventSources');  //Removes all event sources

Upvotes: 2

byrdr
byrdr

Reputation: 5467

Here is the full code I used to get this functionality:

HTML:

<form id="#calendar_list">
<input class="checkbox" type="checkbox"  checked>Event Group 1<br> 
<input class="checkbox1" type="checkbox"  checked>Event Group 2<br> 
<input class="checkbox2" type="checkbox"  checked>Event Group 3<br> 
</form>

Javascript:

    $(".checkbox").change(function() {
    if(this.checked) {
      $('#calendar').fullCalendar( 'addEventSource',  'https://www.google.com/calendar/feeds/vineyardcincinnati.com_o6jncckm5ka55fpragnbp4mk9c%40group.calendar.google.com/public/basic' );
    }
    else{
    $('#calendar').fullCalendar( 'removeEventSource',  'https://www.google.com/calendar/feeds/vineyardcincinnati.com_o6jncckm5ka55fpragnbp4mk9c%40group.calendar.google.com/public/basic' );
    }
});

Upvotes: 2

Related Questions