Using Full Calendar js To apply custom Filters, color coding, Responsive and attaching calendar event to the Mail box

$(document).ready(function () {
    bindRecursiveEvents();
});
function bindRecursiveEvents() {
    var todayDate = new Date();
    var isoDate = todayDate.toISOString();
    var viewfiled = "<ViewFields>" +
                    "<FieldRef Name='Title' />" +
                    "<FieldRef Name='EventDate' />" +
                    "<FieldRef Name='EndDate' />" +
                    "<FieldRef Name='Location' />" +
                    "<FieldRef Name='Description' />" +
                    "<FieldRef Name='PublishingPageContent' />" +
                    "<FieldRef Name='Category' />" +
                    "<FieldRef Name='fRecurrence' />" +
                    "<FieldRef Name='RecurrenceData' />" +
                    "<FieldRef Name='fAllDayEvent' />" +
                "</ViewFields>";
    var CAMLQuery = '<Query><Where>' +
                      '<Or>' +
                          '<DateRangesOverlap>' +
                              '<FieldRef Name="EventDate" />' +
                              '<FieldRef Name="EndDate" />' +
                              '<FieldRef Name="RecurrenceID" />' +
                              '<Value IncludeTimeValue="TRUE" Type="DateTime">' +
                                  '<Week/>' +
                              '</Value>' +
                          '</DateRangesOverlap>' +
                          '<Gt>' +
                              '<FieldRef Name="EventDate" />' +
                              '<Value IncludeTimeValue="TRUE" Type="DateTime">' +
                                      '<Today/>' +
                              '</Value>' +
                          '</Gt>' +
                      '</Or>' +
                      '</Where>' +
                      '<OrderBy>' +
                          '<FieldRef Name="EventDate" />' +
                      '</OrderBy></Query>';

    var CAMLQueryOptions = '<QueryOptions>' +
               '<CalendarDate><Today/></CalendarDate>' +
               '<RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion>' +
               '<ExpandRecurrence>TRUE</ExpandRecurrence>' +
           '</QueryOptions>';

    //*** getting count of Events from Configuration List **/
    try {
        var itemcount;
        var url = "/_api/web/lists/GetByTitle('Configuration List')/items?$select=Title,ItemsCount &$filter=Title eq 'Events' ";
        getItems(url, function (data) {
            var listData = data.d.results;
            var itemcount;
            if (listData.length > 0) {
                itemcount = listData[0].ItemsCount;
            }
            else {
                itemcount = 3;
            }
            itemcount = 20;
            var RowLimit = '<RowLimit>' + itemcount + '</RowLimit>'
            var siteUrl = _spPageContextInfo.siteAbsoluteUrl;
            var url = "/_api/web/lists/GetByTitle('Events')/getItems";
            var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
            $.ajax({
                url: siteUrl + url,
                type: "POST",
                headers: {
                    "Accept": "application/json;odata=verbose",
                    "Content-Type": "application/json;odata=verbose",
                    "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                },
                data: JSON.stringify({
                    'query': {
                        '__metadata': {
                            'type': 'SP.CamlQuery'
                        },
                        'ViewXml': '<View>' + RowLimit + viewfiled + CAMLQuery + CAMLQueryOptions + '</View>'
                    }
                }),
                success: function (data) {
                    var dataObj = data.d.results;
                    var eventData = []
                    $.each(dataObj, function (index, item) {
                        eventData.push({
                            title: item.Title,
                            start: item.EventDate.split('T')[0],
                            end: item.EndDate.split('T')[0],
                            url: "/sites/test/Lists/Events/DispForm.aspx?ID=" + item.Id,
                            color: "#257e4a"
                        });
                    });
                    bindEventJson(eventData)
                },
                error: function (data) {
                    alert(data)
                }
            });

        });

    }
    catch (e) {
        console.log(e.message);
        alert('Unable to generate content in this page, please try again!');
    }
}

function bindEventJson(eventsJson) {
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'year,month,agendaWeek,agendaDay,listWeek,listYear'
        },
        navLinks: true, // can click day/week names to navigate views
        editable: true,
        eventLimit: true, // allow "more" link when too many events
        events: eventsJson
    });
}

HTML:
<div id="calendar"></div>

Below are the Necessary Plugins
Basic J-query plugin which you have already if not download from Google.
Full Calendar Plugin
Full Calendar CSS

Below is the Preview


Comments

Popular posts from this blog

My Interview Experience

React Checkbox Control SPFx