From 75967374dea6a7f4eb786c74f821fa43cbb43968 Mon Sep 17 00:00:00 2001 From: praveensf4999 Date: Tue, 7 Oct 2025 16:23:49 +0530 Subject: [PATCH] 984382: Updated the UG document for the Scheduler Component --- blazor/scheduler/images/dynamic-object.png | Bin 0 -> 25693 bytes .../scheduler/images/editing-recurrence.png | Bin 0 -> 38931 bytes .../scheduler/images/hide-nonworkingdays.png | Bin 0 -> 37651 bytes .../scheduler/images/recurrence-exception.png | Bin 0 -> 27383 bytes blazor/scheduler/images/recurring-event.png | Bin 0 -> 29284 bytes .../scheduler/images/scheduler-timezone.png | Bin 0 -> 24286 bytes blazor/scheduler/recurring-events.md | 42 ++-- blazor/scheduler/resources.md | 193 ++++++------------ blazor/scheduler/row-auto-height.md | 11 +- blazor/scheduler/scheduler-interactions.md | 6 +- blazor/scheduler/scheduler-styling.md | 132 +++--------- blazor/scheduler/state-persistence.md | 4 +- blazor/scheduler/timescale.md | 23 ++- blazor/scheduler/timezone.md | 30 +-- blazor/scheduler/views.md | 63 ++++-- blazor/scheduler/virtual-scrolling.md | 19 +- blazor/scheduler/webassembly-performance.md | 14 +- blazor/scheduler/working-hours.md | 61 ++++-- 18 files changed, 267 insertions(+), 331 deletions(-) create mode 100644 blazor/scheduler/images/dynamic-object.png create mode 100644 blazor/scheduler/images/editing-recurrence.png create mode 100644 blazor/scheduler/images/hide-nonworkingdays.png create mode 100644 blazor/scheduler/images/recurrence-exception.png create mode 100644 blazor/scheduler/images/recurring-event.png create mode 100644 blazor/scheduler/images/scheduler-timezone.png diff --git a/blazor/scheduler/images/dynamic-object.png b/blazor/scheduler/images/dynamic-object.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd970736ff4fb10181cb595ee1605ea1ba94a68 GIT binary patch literal 25693 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 literal 0 HcmV?d00001 diff --git a/blazor/scheduler/images/hide-nonworkingdays.png b/blazor/scheduler/images/hide-nonworkingdays.png new file mode 100644 index 0000000000000000000000000000000000000000..dadbecfb503d1c71a1c2722cc72a5c5bea38c64f GIT binary patch literal 37651 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 E2a^!5*#H0l literal 0 HcmV?d00001 diff --git a/blazor/scheduler/images/recurrence-exception.png b/blazor/scheduler/images/recurrence-exception.png new file mode 100644 index 0000000000000000000000000000000000000000..4db049f50beb4a7b5cd31aed31acd7f6bbc2f765 GIT binary patch literal 27383 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 Yx%2tOZ3j<+m)>S|#O5&B-1FRj0gxxys{jB1 literal 0 HcmV?d00001 diff --git a/blazor/scheduler/recurring-events.md b/blazor/scheduler/recurring-events.md index 637bd3b139..ce971a9592 100644 --- a/blazor/scheduler/recurring-events.md +++ b/blazor/scheduler/recurring-events.md @@ -7,18 +7,18 @@ control: Scheduler documentation: ug --- -# Recurring events in Blazor Scheduler Component +# Recurring Events in Blazor Scheduler Component -It represents an appointment that is created for a certain time interval and occurring repeatedly on a daily, weekly, monthly or yearly basis at the same time interval based on the provided recurrence rule. Usually, the recurring events are indicated by a repeat marker added at the bottom-right position. +It represents an appointment that is created for a certain time interval and occurring repeatedly on a daily, weekly, monthly or yearly basis at the same time interval based on the provided recurrence rule. Usually, the recurring events are indicated by a repeat marker at the bottom-right position. N>Set [`RecurrenceRule`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldRecurrenceRule.html) property to create recurring events. -## Recurrence options and rules +## Recurrence Options and Rules Events can be repeated on a daily, weekly, monthly or yearly basis based on the recurrence rule which accepts the string value. The following details should be assigned to the [`RecurrenceRule`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldRecurrenceRule.html) property to generate the recurring instances. * Repeat type - daily/weekly/monthly/yearly. -* How many times it needs to be repeated? +* The number of times it needs to be repeated. * The interval duration. * The time period to render the appointment, etc. @@ -29,7 +29,7 @@ There are four repeat types available namely, * **Monthly** - Creates the recurring instances on monthly basis for the selected months and other provided recurrence criteria. * **Yearly** - Creates the recurring instances on yearly basis. -## Recurrence properties +## Recurrence Properties The properties based on which the recurrence appointments are created with its respective time period are depicted in the following table. Also, the valid rule string can be referred from [iCalendar](https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10) specifications. @@ -46,9 +46,9 @@ There are four repeat types available namely, | BYMONTH | This property is used to store the index value of the selected Month while creating the yearly appointments. When the yearly appointment is created on June month, the index value of June month 6 will get stored in the BYMONTH field. The appointment is created on every 6th month of a year. | FREQ=YEARLY;BYMONTHDAY=16;BYMONTH=6;INTERVAL=1;COUNT=10| | BYSETPOS | This property is used to store the index value of the week. When the monthly appointment is created in second week of a month, the index value of the second week (2) is stored in BYSETPOS. | FREQ=MONTHLY;BYDAY=MO;BYSETPOS=2;COUNT=10| -N> The default recurrence related validation has been included for recurrence appointments similar to the one available in Outlook. The validation usually occurs during the recurrence appointment creation, editing, drag and drop or resizing of the recurrence appointments and also if any single occurrence changes. +N> Default recurrence-related validation has been included for recurring appointments, similar to that available in Outlook. Validation typically occurs during the creation, editing, dragging, dropping, or resizing of recurring appointments, and also if any single occurrence changes. -## Creating a recurring event +## Creating a Recurring Event The following example depicts how to create a recurring event on Scheduler with the specific recurrence rule. In the following example, an event is made to repeat on daily mode and ends after 5 occurrences. @@ -86,8 +86,11 @@ The following example depicts how to create a recurring event on Scheduler with } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BNhSsjNGVOpvJlRM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Adding exceptions +![Recurring Event in Blazor Scheduler](images/recurring-event.png) + +## Adding Exceptions A few instance of the recurrence series can be excluded on specific dates, by adding those exceptional dates to the [`RecurrenceException`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldRecurrenceException.html) field. These date values should be given in the ISO date time format with no hyphens(-) separating the date elements. @@ -127,8 +130,11 @@ For example, 7th January 2020 can be represented as 20200107. Also, the time par } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rjLSsZNQVYHzQVve?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +![Recurrence Exceptions in Blazor Scheduler](images/recurrence-exception.png) -## Editing an occurrence from a series +## Editing an Occurrence from a Series To dynamically edit a particular occurrence from an event series and display it on the initial load of Scheduler, the edited occurrence needs to be added as a new event to the dataSource collection, with an additional [`RecurrenceID`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldRecurrenceId.html) field defined to it. The [`RecurrenceID`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldRecurrenceId.html) field of edited occurrence usually maps the ID value of the parent event. @@ -169,10 +175,13 @@ In this example, a recurring instance that displays on the date 30th January 202 } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hZBysNXwBkaVfXNS?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +![Editing an Occurrence from a Series in Blazor Scheduler](images/editing-recurrence.png) -## Edit/Delete following recurrence events +## Edit/Delete Following Recurrence Events -The Scheduler allows the user to edit the following recurrence events by setting true value to [AllowEditFollowingEvents](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleEventSettings-1.html#Syncfusion_Blazor_Schedule_ScheduleEventSettings_1_AllowEditFollowingEvents) within the [`ScheduleEventSettings`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleEventSettings-1.html) tag. Once the recurrence events are edited/ deleted as following events, then the following recurrence events will be considered as separate series, the changes will not reflect to parent series. In the following code example, if any of the recurrence event is edited or deleted with the following events option, then the edit or delete action is applied to further recurrence events. +The Scheduler allows editing of subsequent recurrence events by setting the [`AllowEditFollowingEvents`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleEventSettings-1.html#Syncfusion_Blazor_Schedule_ScheduleEventSettings_1_AllowEditFollowingEvents) property to `true` within the [`ScheduleEventSettings`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleEventSettings-1.html) tag. Once subsequent recurrence events are edited or deleted, they will be considered as a separate series, and changes will not reflect in the parent series. In the following code example, if any recurrence event is edited or deleted using the "following events" option, the edit or delete action is applied to further recurrence events in the series. N>To edit/delete following recurrence events into the scheduler, set [`AllowEditFollowingEvents`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleEventSettings-1.html#Syncfusion_Blazor_Schedule_ScheduleEventSettings_1_AllowEditFollowingEvents) field to **true** in [`ScheduleEventSettings`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleEventSettings-1.html). @@ -211,6 +220,7 @@ N>To edit/delete following recurrence events into the scheduler, set [`AllowEdit } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BtLIWjZGszsobUfY?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Editing Events in Blazor Scheduler](images/blazor-scheduler-editing-events.png) @@ -260,8 +270,8 @@ The built-in validation support has been added by default for recurring appointm | Validation messages | Description | |-------|---------| -| The recurrence pattern is not valid. | This alert will raise, when the selected recurrence rule value is not a valid one. For example, when you try to select the end date value (using `Until` option) for a recurring event, which occurs before the start date, an alert will popup out saying that the chosen pattern is invalid. | -| The changes made to specific instances of this series will be canceled and those events will match the series again. | This alert will raise, when you try to edit the whole series, whose occurrence might have been already edited. For example, If there are five occurrences and one of the occurrence is already edited. Now, when you try to edit the entire series, you will get this validation alert. | -| The duration of the event must be shorter than how frequently it occurs. Shorten the duration, or change the recurrence pattern in the recurrence event editor. | This validation will occur, if the event duration is longer than the selected frequency. For example, if you create a recurring appointment with two days duration in `Daily` frequency with no intervals set to it, you may get this alert. | -| Some months have fewer than the selected date. For these months, the occurrence will fall on the last date of the month. | When you try to create a recurring appointment on 31st of every month, where few months won’t have 31 days and in this scenario, you will get this alert. | -| Two occurrences of the same event cannot occur on the same day. | This validation will occur, when you try to edit or move any single occurrence to some other date, where another occurrence of the same event is already present. | \ No newline at end of file +| The recurrence pattern is not valid. | This alert will be raised when the selected recurrence rule value is not valid. For example, when selecting an end date value (using the `Until` option) for a recurring event that occurs before its start date, an alert will pop up indicating that the chosen pattern is invalid. | +| The changes made to specific instances of this series will be canceled and those events will match the series again. | This alert will be raised when attempting to edit the entire series after one of its occurrences has already been edited. For example, if there are five occurrences and one of them is already edited, attempting to edit the entire series will trigger this validation alert. | +| The duration of the event must be shorter than how frequently it occurs. Shorten the duration, or change the recurrence pattern in the recurrence event editor. | This validation will occur if the event duration is longer than its selected frequency. For example, if a recurring appointment is created with a two-day duration in `Daily` frequency with no intervals set, this alert may appear. | +| Some months have fewer than the selected date. For these months, the occurrence will fall on the last date of the month. | When attempting to create a recurring appointment for the 31st of every month, an alert will be issued for months that do not have 31 days. | +| Two occurrences of the same event cannot occur on the same day. | This validation will occur when attempting to edit or move a single occurrence to a date where another occurrence of the same event is already present. | \ No newline at end of file diff --git a/blazor/scheduler/resources.md b/blazor/scheduler/resources.md index 2ecc212584..a2f1578106 100644 --- a/blazor/scheduler/resources.md +++ b/blazor/scheduler/resources.md @@ -13,9 +13,9 @@ documentation: ug It is also possible to assign one or more resources to the same appointment, by allowing multiple selection of resource options available in the event editor window. -The Scheduler groups the resources based on different criteria. It includes grouping appointments based on resources, grouping resources based on dates, and timeline scheduling. Also, the data for resources bind with Scheduler either as a local JSON collection or URL, retrieving data from remote data services. +The Scheduler groups the resources based on different criteria. It includes grouping appointments based on resources, grouping resources based on dates, and timeline scheduling. Additionally, resource data can bind with the Scheduler either as a local JSON collection or via a URL, retrieving data from remote data services. -## Resource fields +## Resource Fields The default options available within the [`Resources`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html) collection are as follows, @@ -37,11 +37,11 @@ The default options available within the [`Resources`](https://help.syncfusion.c | [`WorkDaysField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_WorkDaysField) | string | Binds the work days field name from the resources `DataSource`. It allows to provide different working days collection for the resources. | | [`CssClassField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_CssClassField) | string | Binds the custom CSS class field name from the resources `DataSource`. It maps the CSS class written for the specific resources and applies it to the events of those resources. | -## Resource data binding +## Resource Data Binding -The data for resources can bind with Scheduler either as list of object collection or a service URL, retrieving resource data from remote data services. The `TItem` in the [`ScheduleResource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html) holds the generic class model of resource DataSource and `TValue` holds the generic type of resource id which need to be in array when [`AllowMultiple`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_AllowMultiple) is set to true. +Resource data can bind with the Scheduler either as a list of object collections or a service URL, retrieving resource data from remote data services. The `TItem` in the [`ScheduleResource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html) holds the generic class model of resource DataSource and `TValue` holds the generic type of resource id which need to be in array when [`AllowMultiple`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_AllowMultiple) is set to true. -The following code example depicts how to bind the list of object collection to the [`DataSource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_DataSource) of Resource collection. +The following code example demonstrates how to bind the list of object collection to the [`DataSource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_DataSource) of Resource collection. ```cshtml @using Syncfusion.Blazor.Schedule @@ -91,7 +91,7 @@ The following code example depicts how to bind the list of object collection to ### Binding ExpandoObject -Scheduler is a generic component which is strongly bound to a model type. There are cases when the model type is unknown during compile type. In such cases data can be bound to the scheduler as list of [**ExpandoObject**](https://learn.microsoft.com/en-us/dotnet/api/system.dynamic.expandoobject?view=net-6.0). +Scheduler is a generic component strongly bound to a model type. There are cases when the model type is unknown during compile-time. In such cases data can be bound to the scheduler as list of [**ExpandoObject**](https://learn.microsoft.com/en-us/dotnet/api/system.dynamic.expandoobject?view=net-6.0). **ExpandoObject** can be bound to the [`DataSource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_DataSource) option of the scheduler within the [`ScheduleResource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleResource-2.html) tag. Scheduler can also perform all kind of supported data operations and editing in ExpandoObject. @@ -151,10 +151,11 @@ Scheduler is a generic component which is strongly bound to a model type. There } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BZrIWXZmAzAxczIM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ## Binding DynamicObject -Scheduler is a generic component which is strongly bound to a model type. There are cases when the model type is unknown during compile type. In such cases data can be bound to the scheduler as list of [**DynamicObject**](https://learn.microsoft.com/en-us/dotnet/api/system.dynamic.dynamicobject?view=net-6.0). +Scheduler is a generic component strongly bound to a model type. There are cases when the model type is unknown during compile-time. In such cases data can be bound to the scheduler as list of [**DynamicObject**](https://learn.microsoft.com/en-us/dotnet/api/system.dynamic.dynamicobject?view=net-6.0). **DynamicObject** can be bound to the [`DataSource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_DataSource) option of the scheduler within the [`ScheduleResource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html) tag. Scheduler can also perform all kinds of supported data operations and editing in DynamicObject. @@ -232,6 +233,9 @@ N> The [`GetDynamicMemberNames`](https://learn.microsoft.com/en-us/dotnet/api/sy } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VjVyWjDGKTJKtbfy?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +![Editor Window with Custom Label in Blazor Scheduler](images/dynamic-object.png) ## Binding ObservableCollection @@ -380,14 +384,15 @@ Here, ResourceData class implements the interface of **INotifyPropertyChanged** } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LDLSMtjGAJIPghjg?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Scheduler with multiple resources +## Scheduler With Multiple Resources It is possible to display the Scheduler in default mode without visually showcasing all the resources in it, but allowing to assign the required resources to the appointments through the event editor resource options. -The appointments belonging to the different resources will be displayed altogether on the default Scheduler, which will be differentiated based on the resource color assigned in the **Resources** (depicting to which resource that particular appointment belongs) collection. +The appointments belonging to different resources will be displayed together on the default Scheduler, differentiated by the resource color assigned in the **Resources** collection (depicting to which resource that particular appointment belongs). -To get start quickly about multiple resource on scheduler, you can check on this video: +For a quick start regarding multiple resources in the Scheduler, refer to this video: {% youtube "youtube:https://www.youtube.com/watch?v=ZJU73bqeoC0"%} @@ -446,24 +451,26 @@ To get start quickly about multiple resource on scheduler, you can check on this } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BDhoijNcgpxpsMBd?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + The following image shows the appointment rendering on the multiple resource Scheduler. ![Multiple Resources in Blazor Scheduler](images/blazor-scheduler-multipleresources.png) N> Setting [`AllowMultiple`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_AllowMultiple) to `true` in the above code example allows to select multiple resources from the event editor and also creates multiple copies of the same appointment in the Scheduler for each resources while rendering. -## Resource grouping +## Resource Grouping Resource grouping support allows the Scheduler to group the resources in a hierarchical structure both as an expandable groups (Timeline views) and as vertical hierarchy displaying resources one after the other (Resources view). -To get start quickly about grouping multiple resource on scheduler, you can check on this video: +For a quick start regarding grouping multiple resources in the Scheduler, refer to this video: {% youtube "youtube:https://www.youtube.com/watch?v=70qD6wycxAk"%} Scheduler supports both single and multiple levels of resource grouping that can be customized both in timeline and vertical Scheduler views. -### Vertical resource view +### Vertical Resource View The following code example displays how the multiple resources are grouped and its events are portrayed in the default calendar views. @@ -529,12 +536,13 @@ The following code example displays how the multiple resources are grouped and i } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rtByWNNcKfQfCZuY?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Vertical Resource View in Blazor Scheduler](images/blazor-scheduler-resources-verticalview.png) -### Timeline resource view +### Timeline Resource View -The following code example depicts how to group the multiple resources on Timeline Scheduler views and its relevant events are displayed accordingly under those resources. +The following code example depicts how to group multiple resources on Timeline Scheduler views, with relevant events displayed accordingly under those resources. ```cshtml @using Syncfusion.Blazor.Schedule @@ -596,11 +604,13 @@ The following code example depicts how to group the multiple resources on Timeli } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BXLysNDwgJvjkkVL?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + The following image shows the multiple resources rendering on the Timeline view Scheduler. ![Timeline Resource view in Blazor Scheduler](images/blazor-scheduler-resource-timeline.png) -### Grouping single-level resources +### Grouping Single-Level Resources This kind of grouping allows the Scheduler to display all the resources at a single level simultaneously. The appointments mapped under resources will be displayed with the colors as per the [`ColorField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_ColorField) defined on the resources collection. @@ -660,13 +670,15 @@ This kind of grouping allows the Scheduler to display all the resources at a sin } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BNBoCNDQKzPlSXsm?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + The following image display the Scheduler with single level resource grouping. ![Grouping single-level resources in Blazor Scheduler](images/blazor-scheduler-singlelevel.png) N> The `Name` field defined in the **Resources** collection namely `Owners` will be mapped within the [`Group`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html) property, in order to enable the grouping option with those resource levels on the Scheduler. -### Grouping multi-level resources +### Grouping Multi-Level Resources It is possible to group the resources of Scheduler in multiple levels, by mapping the child resources to each parent resource. In the following example, there are 2 levels of resources, on which the second level resources are defined with [`GroupIDField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_GroupIDField) mapping to the first level resource's ID so as to establish the parent-child relationship between them. @@ -744,11 +756,13 @@ It is possible to group the resources of Scheduler in multiple levels, by mappin } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LNLSsZjmgfkxESqH?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + The following image displays the resources of Scheduler in multi levels. ![Grouping multi-level resources in Blazor Scheduler](images/blazor-scheduler-multiplelevel.png) -### One-to-One grouping +### One-to-One Grouping In multi-level grouping, Scheduler usually groups the resources on the child level based on the [`GroupIDField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_GroupIDField) that maps with the [`IdField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_IdField) field of parent level resources (as [`ByGroupID`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_ByGroupID) set to true by default). There are also option which allows to group all the child resource(s) against each of its parent resource(s). To enable this kind of grouping, set `false` to the [`ByGroupID`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_ByGroupID) option within the [`Group`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html) property. In the following code example, there are two levels of resources, on which all the resources at the child level is mapped one to one with each resource on the first level. @@ -813,12 +827,13 @@ In multi-level grouping, Scheduler usually groups the resources on the child lev } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VDLSiDDmgeXJBpcl?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} The following image depicts how the scheduler will render when [`ByGroupID`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_ByGroupID) sets as false. ![Grouping in Blazor Scheduler](images/blazor-scheduler-grouping.png) -### Grouping resources by date +### Grouping Resources By Date It groups the number of resources under each date and is applicable only on the calendar views such as Day, Week, Work Week, Month, Agenda and Month-Agenda. To enable such grouping, set [`ByDate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_ByDate) option to `true` within the [`Group`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html) property. @@ -877,12 +892,13 @@ It groups the number of resources under each date and is applicable only on the } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LDLSWZtcUIMjEwJx?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Grouping Resources by Date in Blazor Scheduler](images/blazor-scheduler-resource-by-date.png) N> This kind of grouping by date is not applicable on any of the **timeline views**. -## Working with shared events +## Working with Shared Events Multiple resources can share the same events, thus allowing the CRUD action made on it to reflect on all other shared instances simultaneously. To enable such option, set [`AllowGroupEdit`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_AllowGroupEdit) option to `true` within the [`Group`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html) property. With this property enabled, a single appointment will be maintained within the appointment collection, even if it is shared by more than one resource – whereas the resource fields of such appointment will be in array which hold the IDs of the multiple resources. @@ -944,10 +960,11 @@ N> Any actions such as create, edit or delete held on any one of the shared even } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LjheiNtcKoWdKiXV?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Grouping Resources as shared events in Blazor Scheduler](images/blazor-scheduler-sharedevents.png) -## Simple resource header customization +## Simple Resource Header Customization It is possible to customize the resource header cells using built-in template option and change the look and appearance of it in both the vertical and timeline view modes. All the resource related fields and other information can be accessed within the resource header template option. @@ -1054,6 +1071,7 @@ It is possible to customize the resource header cells using built-in template op } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rZLyMjtQgoVWKBKq?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Customizing Resources Header in Desktop of Blazor Scheduler](images/blazor-scheduler-custom-resource-header.png) @@ -1061,7 +1079,7 @@ N> To customize the resource header in compact mode properly make use of the cla ![Resource Header Template in Compact Mode of Blazor Scheduler](images/blazor-scheduler-header-template.png) -## Customizing resource header with multiple columns +## Customizing Resource Header with Multiple Columns It is possible to customize the resource headers to display with multiple columns such as Room, Type and Capacity. The following code example depicts the way to achieve it and is applicable only on timeline views. @@ -1278,10 +1296,10 @@ It is possible to customize the resource headers to display with multiple column } ``` - +{% previewsample "https://blazorplayground.syncfusion.com/embed/rjVoWNjQqIVPNMqU?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Blazor Scheduler with Multiple columns](images/blazor-scheduler-multiple-columns.png) -## Expand and collapse resource fields +## Expand and Collapse Resource Fields It is possible to expand and collapse the resource field. By default, resource fields are expanded with their child fields. This behavior can be customized using the [`ExpandedField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_ExpandedField) property. When [`ExpandedField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_ExpandedField) property in resources dataSource is set to `false`, it restricts the resource fields from expanding. By default, [`ExpandedField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_ExpandedField) value set to `true`. @@ -1346,11 +1364,13 @@ It is possible to expand and collapse the resource field. By default, resource f } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VNVystDwqIKVcpEl?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Blazor Scheduler expand and collapse resources](images/blazor-schedule-expand-collapse.png) -## Displaying tooltip for resource headers +## Displaying Tooltip for Resource Headers -It is possible to display tooltip over the resource headers showing the resource information. By default, there won't be any tooltip displayed on the resource headers, and to enable it, you need to assign the customized template design to the [`HeaderTooltipTemplate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HeaderTooltipTemplate) option within the [`ScheduleGroup`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html). +It is possible to display tooltips over resource headers showing resource information. By default, no tooltip is displayed on resource headers. To enable it, assign the customized template design to the [`HeaderTooltipTemplate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HeaderTooltipTemplate) option within the [`ScheduleGroup`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html). ```cshtml @using Syncfusion.Blazor.Schedule @@ -1419,12 +1439,13 @@ It is possible to display tooltip over the resource headers showing the resource } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rNLesNZcAIzLVgKV?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Blazor Scheduler tooltip for resource headers](images/blazor-schedule-tooltip.png) -## Choosing between resource colors for appointments +## Choosing Between Resource Colors For Appointments -By default, the colors defined on the top level resources collection will be applied for the events. In case, if you want to apply specific resource color to events irrespective of its top-level parent resource color, it can be achieved by defining [`ResourceColorField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html#Syncfusion_Blazor_Schedule_IScheduleEventSettings_ResourceColorField) option within the [`EventSettings`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html) property. +By default, the colors defined on the top-level resources collection will be applied to the events. If a specific resource color needs to be applied to events irrespective of their top-level parent resource color, this can be achieved by defining the [`ResourceColorField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html#Syncfusion_Blazor_Schedule_IScheduleEventSettings_ResourceColorField) option within the [`EventSettings`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html) property. ```cshtml @using Syncfusion.Blazor.Schedule @@ -1508,19 +1529,20 @@ By default, the colors defined on the top level resources collection will be app } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rtroMNjcAyTYFrqI?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -![Blazor Scheduler tooltip for resource headers](images/blazor-schedule-resource-color.png) +![Blazor Scheduler](images/blazor-schedule-resource-color.png) N> The value of the [`ResourceColorField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html#Syncfusion_Blazor_Schedule_IScheduleEventSettings_ResourceColorField) field should be mapped with the `Name` value given within the [`ScheduleResource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html). -## Setting different working days and hours for resources +## Setting Different Working Days and Hours For Resources Each resource in the Scheduler can have different working hours as well as different working days set to it. There are default options available within the [`ScheduleResource`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html) collection, to customize the default working hours and days of the Scheduler. * [Using the work day field for different work days](#Set-different-work-days) * [Using the start hour and end hour fields for different work hours](#Set-different-work-hours) -### Set different work days +### Set Different Work Days Different working days can be set for the resources of Scheduler using the [`WorkDaysField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_WorkDaysField) property which maps the working days field from the resource dataSource. This field accepts the collection of day indexes (from 0 to 6) of a week. By default, it is set to [1, 2, 3, 4, 5] and in the following example, each resource has been set with different values and therefore each of them will render only those working days. This option is applicable only on the calendar views and is not applicable on timeline views. @@ -1575,10 +1597,11 @@ Different working days can be set for the resources of Scheduler using the [`Wor } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hZryiDtwqyeYlLqW?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Resources with Different Workdays in Blazor Scheduler](images/blazor-scheduler-resource-workdays.png) -### Set different work hours +### Set Different Work Hours Different `working Hours` can be set for the resources of Scheduler using the [`StartHourField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_StartHourField) and [`EndHourField`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.Resource.html#Syncfusion_Blazor_Schedule_Resource_EndHourField) property which maps the `startHourField` and `endHourField` field from the resource dataSource. @@ -1638,102 +1661,17 @@ Working hours indicates the work hour duration of a day, which is highlighted vi } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VNVSCjZQAoxIyHsJ?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} In this example, a resource named `Will Smith` is depicted with working hours ranging from 7.00 AM to 1.00 PM and is visually illustrated with active colors, whereas the other two resources have different working hours set. ![Resources with Different Workhours in Blazor Scheduler](images/blazor-schedule-different-workhour.png) -### Hide non-working days when grouped by date - -In Scheduler, you can set custom work days for each resource and group the Scheduler by date to display these work days. By default, the Scheduler will show all days when it is grouped by date, even if they are not included in the custom work days for the resources. However, you can use the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property to only display the custom work days in the Scheduler. -To use the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property, you need to include it in the configuration options for your Scheduler component. Set the value of[HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) to `true` to enable this feature. -**Example:** To display the Scheduler with resources grouped by date for custom working days, - -```cshtml -@using Syncfusion.Blazor.Schedule - - - - - - - -@code{ - private bool HideNonWorkingDays { get; set; } = true; - private string[] groupData = new string[] { "Owners" }; - private List OwnersData { get; set; } = new List { - new ResourceData { Text = "Alice", Id= 1, Color = "#df5286", WorkDays = new int[] { 1, 2, 3, 4} }, - new ResourceData { Text = "Smith", Id= 2, Color = "#5978ee", WorkDays = new int[] { 2, 3, 5 } } - }; - private List dataSource = new List() - { - new ResourceData - { - Id = 1, - Subject = "Workflow Analysis", - StartTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 9, 30, 0).AddDays(1), - EndTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month,DateTime.Today.Day, 12, 0, 0).AddDays(1), - IsAllDay = false, - ProjectId = 1, - TaskId = 2 - }, - new ResourceData - { - Id = 2, - Subject = "Requirement planning", - StartTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 12, 30, 0), - EndTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 14, 45, 0), - IsAllDay = false, - ProjectId = 1, - TaskId = 1 - }, - new ResourceData - { - Id = 1, - Subject = "Quality Analysis", - StartTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 10, 0, 0).AddDays(1), - EndTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 12, 30, 0).AddDays(1), - IsAllDay = false, - ProjectId = 1, - TaskId = 1 - }, - new ResourceData - { - Id = 1, - Subject = "Release planing", - StartTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 10, 0, 0).AddDays(-1), - EndTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 12, 30, 0).AddDays(-1), - IsAllDay = false, - ProjectId = 1, - TaskId = 1 - } - }; - public class ResourceData - { - public string Text { get; set; } - public int Id { get; set; } - public string Color { get; set; } - public int[] WorkDays { get; set; } - public string Subject { get; set; } - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public Nullable IsAllDay { get; set; } - public int ProjectId { get; set; } - public int TaskId { get; set; } - } -} -``` - -![Hide non-working days when grouped by date in Blazor Scheduler](images/blazor-scheduler-hide-non-working-days.png) - -N> The [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property only applies, -when the Scheduler is grouped by [ByDate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_ByDate) - -### Hide non-working days when grouped by date +### Hide Non-Working Days When Grouped By Date -In Scheduler, you can set custom work days for each resource and group the Scheduler by date to display these work days. By default, the Scheduler will show all days when it is grouped by date, even if they are not included in the custom work days for the resources. However, you can use the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property to only display the custom work days in the Scheduler. +In the Scheduler, custom workdays can be set for each resource, and the Scheduler can be grouped by date to display these workdays. By default, the Scheduler will show all days when grouped by date, even if they are not included in the custom workdays for the resources. However, the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property can be used to display only the custom workdays in the Scheduler. -To use the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property, you need to include it in the configuration options for your Scheduler component. Set the value of [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) to `true` to enable this feature. +To use the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property, it needs to be included in the configuration options for the Scheduler component. Set the value of [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) to `true` to enable this feature. **Example:** To display the Scheduler with resources grouped by date for custom working days, @@ -1812,19 +1750,21 @@ To use the [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hDVoWXXGUSFIkgor?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} +![Hide Non-working Days in Blazor Scheduler](images/blazor-schedule-different-workhour.png) N> The [HideNonWorkingDays](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_HideNonWorkingDays) property only applies, when the Scheduler is grouped by [ByDate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_ByDate) -## Compact view in mobile +## Compact View in Mobile -Although the Scheduler views are designed keeping in mind the responsiveness of the control in mobile devices, however when using Scheduler with multiple resources - it is difficult to view all the resources and its relevant events at once on the mobile. Therefore, a new compact mode has been introduced specially for displaying multiple resources of Scheduler on mobile devices. By default, this mode is enabled while using Scheduler with multiple resources on the mobile devices. If in case, you need to disable this compact mode, set `false` to the [`EnableCompactView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_EnableCompactView) option within the [`ScheduleGroup`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html). Disabling this option will display the exact desktop mode of Scheduler view on mobile devices. +Although the Scheduler views are designed with responsiveness for mobile devices in mind, when using the Scheduler with multiple resources, it can be challenging to view all resources and their relevant events simultaneously on mobile screens. Therefore, a new compact mode has been specifically introduced for displaying multiple resources of the Scheduler on mobile devices. By default, this mode is enabled when using the Scheduler with multiple resources on mobile devices. If this compact mode needs to be disabled, set `false` to the [`EnableCompactView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html#Syncfusion_Blazor_Schedule_ScheduleGroup_EnableCompactView) option within the [`ScheduleGroup`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleGroup.html). Disabling this option will display the exact desktop mode of the Scheduler view on mobile devices. -With this compact view enabled on mobile, you can view only single resource at a time and to switch to other resources, there is a TreeView at the left listing out all other available resources - clicking on which will display that particular resource and its related appointments. +With this compact view enabled on mobile, only a single resource can be viewed at a time. To switch to other resources, a TreeView on the left lists all other available resources; clicking on an item will display that particular resource and its related appointments. ![Blazor Scheduler Resources in Compact Mode](images/blazor-scheduler-resource-in-compact-mode.png) -## Adaptive UI in desktop +## Adaptive UI in Desktop By default, the Scheduler layout adapts automatically in the desktop and mobile devices with appropriate UI changes. In case, if the user wants to display the Adaptive scheduler in desktop mode with adaptive enhancements, then the property [`EnableAdaptiveUI`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EnableAdaptiveUI) can be set to true. Enabling this option will display the exact mobile mode of Scheduler view on desktop devices. @@ -1901,10 +1841,11 @@ To get start quickly about adaptive UI in our Scheduler, you can check on this v } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BXVIiNZQASOELXtw?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Blazor Scheduler Resources in Adaptive UI](images/blazor-schedule-adaptiveui.png) -## See also +## See Also [How to use blazor Scheduler to create an Airfare Calendar] (https://www.youtube.com/watch?v=QlzdcZTmOrU-0) [How to expand or collapse a resource programmatically](./how-to/expand-collapse-resource-dynamically) \ No newline at end of file diff --git a/blazor/scheduler/row-auto-height.md b/blazor/scheduler/row-auto-height.md index b3d1cb13d0..1088cb41c9 100644 --- a/blazor/scheduler/row-auto-height.md +++ b/blazor/scheduler/row-auto-height.md @@ -9,7 +9,7 @@ documentation: ug # Row Auto Height in Blazor Scheduler Component -By default, the height of the Scheduler rows in Timeline views are static and therefore, when the same time range holds multiple overlapping appointments, a `+n more` text indicator will be displayed. With this feature enabled, you can now view all the overlapping appointments present in those specific time range by auto-adjusting the row height based on the presence of the appointments count, instead of displaying the `+n more` text indicators. +By default, row heights in Scheduler Timeline views are static. This means that when multiple overlapping appointments occupy the same time range, a `+n more` text indicator is displayed. With this feature enabled, all overlapping appointments present in those specific time ranges can be viewed by auto-adjusting the row height based on the appointment count, instead of displaying `+n more` text indicators. To enable auto row height adjustments on Scheduler Timeline views and Month view, set `true` to the [`EnableAutoRowHeight`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EnableAutoRowHeight) property whose default value is `false`. @@ -19,7 +19,7 @@ Now, let's see how it works on those applicable views with examples. When the feature [`EnableAutoRowHeight`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EnableAutoRowHeight) is enabled, the row height gets auto-adjusted based on the number of overlapping events occupied on the same time range, which is demonstrated in the following example. -To get start quickly about row auto height in our Scheduler, you can check on this video: +For a quick start on row auto height in the Scheduler, refer to this video: {% youtube "youtube:https://www.youtube.com/watch?v=qFQvbFQbxPk-0"%} @@ -59,12 +59,13 @@ To get start quickly about row auto height in our Scheduler, you can check on th } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hDByiZjcUHXdjoBn?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Row Auto Height in Blazor Scheduler](images/blazor-scheduler-row-auto-height.png) ![Blazor Scheduler in Timeleine Month View](images/blazor-scheduler-timeline-month.png) -## Timeline views with multiple resources +## Timeline Views with Multiple Resources ```cshtml @using Syncfusion.Blazor.Schedule @@ -118,10 +119,11 @@ To get start quickly about row auto height in our Scheduler, you can check on th } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rjryijjwAxLbngKv?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Timeline Views with Multiple Resources in Blazor Scheduler](images/blazor-scheduler-timeline-resource.png) -## Appointments occupying entire cell +## Appointments Occupying Entire Cell By default, with the feature [`EnableAutoRowHeight`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EnableAutoRowHeight), there will be a space in the bottom of the cell when appointment is rendered. To avoid this space, set true to the property [`IgnoreWhitespace`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html#Syncfusion_Blazor_Schedule_IScheduleEventSettings_IgnoreWhitespace) with [`ScheduleEventSettings`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.IScheduleEventSettings.html) tag helper whereas its default property value is false. @@ -180,6 +182,7 @@ By default, with the feature [`EnableAutoRowHeight`](https://help.syncfusion.com } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BZVSsjZmARUhxfRr?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Ignoring Whitespace in Blazor Scheduler](images/blazor-scheduler-ignore-whitespace.png) diff --git a/blazor/scheduler/scheduler-interactions.md b/blazor/scheduler/scheduler-interactions.md index 35bfa30123..f92af8cf15 100644 --- a/blazor/scheduler/scheduler-interactions.md +++ b/blazor/scheduler/scheduler-interactions.md @@ -9,7 +9,7 @@ documentation: ug # Scheduler Interactions in Blazor Scheduler Component -The following table describes the Scheduler actions and also illustrates how those actions are carried out through mouse and touch interactions on Scheduler. +This section describes user interactions with the Syncfusion Blazor Scheduler component via mouse and touch gestures. | Actions | Mouse interaction | Touch interaction | |-------|---------| --------------- | @@ -17,8 +17,8 @@ The following table describes the Scheduler actions and also illustrates how tho | Multiple cell selection | Single click on a cell and drag the selection to other cells to enable multiple cell selection. | No multiple cell selection is allowed using touch gestures. | | Event selection | Single click on an event to select it. | Tap holding on events, select an event and opens a small popup at the top holding the options to edit or delete. The popup also displays the selected event's subject. | | Multiple event selection and deletion | Pressing `Ctrl` key and altogether single clicking on multiple events one after the other will enable multiple event selection. Pressing `Delete` key after event selection will delete all the selected events. | Tap hold an event to select it, which opens a small popup at the top holding the options to edit or delete. As a continuation of this action, keep on single tapping on other events, to enable multiple event selection. Also, the popup displayed at the top remains in opened state, showing the count of the number of selected events. Pressing `Delete` option from the popup will delete all the selected events. | -| Date navigation | Clicking on the previous or next date navigation icons in the header bar allows to navigate between dates. | Swiping the scheduler view port to the left or right will allow to navigate between the dates on touch devices. NOTE: Swiping does not work when horizontal scroller present in the Scheduler. You can also make use of the previous and next navigation icons at the header bar to navigate. | -| View navigation | Click on an event and try moving it over the Scheduler to enable drag and drop action. | The view options are available within the popup options at the top right extreme end of the header bar and you can choose the view from it. | +| Date navigation | Clicking on the previous or next date navigation icons in the header bar allows to navigate between dates. | Swiping the scheduler view port to the left or right will allow to navigate between the dates on touch devices. NOTE: Swiping does not work when a horizontal scrollbar is present in the Scheduler. The previous and next navigation icons in the header bar can also be used for navigation. | +| View navigation | Click on an event and try moving it over the Scheduler to enable drag and drop action. | The view options are available within the popup at the top right of the header bar, from which the desired view can be selected. | | Drag and drop | Click on an event and try moving it over the Scheduler to enable drag and drop action. | Tap hold the event and try moving it over the Scheduler to enable drag and drop action. | | Event resizing | Hover the mouse across the extremities or edges of the Scheduler events and when the mouse pointer changes into resize handler, now click and start resizing an event to the desired time range. | Touch the event extremities and start resizing the events directly. | | Tooltip | Hover the mouse pointer over the events or resource header and the tooltip will be displayed. | Tap holding the events will open the tooltip on events. | diff --git a/blazor/scheduler/scheduler-styling.md b/blazor/scheduler/scheduler-styling.md index 53fb815c5d..faa90b4711 100644 --- a/blazor/scheduler/scheduler-styling.md +++ b/blazor/scheduler/scheduler-styling.md @@ -9,7 +9,7 @@ documentation: ug # Style And Appearance in Blazor Scheduler Component -To modify the Scheduler appearance, you need to override the default CSS of Scheduler. Also, there is an option to create our own custom theme using [Theme Studio](https://blazor.syncfusion.com/themestudio/?theme=material). Find the list of CSS classes in Scheduler. +To modify the Scheduler appearance, override the default CSS. A custom theme can also be created using [Theme Studio](https://blazor.syncfusion.com/themestudio/?theme=material). The following table lists the CSS classes available in the Scheduler. | CSS class | Purpose | |-------|---------| @@ -43,7 +43,7 @@ To modify the Scheduler appearance, you need to override the default CSS of Sche | .e-schedule .e-read-only | Read only appointment in scheduler. | | e-appointment-border | Appointment which are currently selected, use the appointment class hierarchical based on your views. | | e-selected-cells | Work cells which are currently selected, use the work cell class hierarchical based on your views. | -| e-header-cells | Header cells of scheduler, use the work cells hierarchical based on your views. | +| e-header-cells | Header cells of the Scheduler; used hierarchically based on views. | | .e-schedule .e-vertical-view .e-resource-cells| Resource cells in vertical views of scheduler. | | .e-schedule .e-month-view .e-resource-cells| Resource cells in month view of scheduler. | | .e-schedule .e-timeline-view .e-resource-cells | Resource cells in timeline views of scheduler. | @@ -51,7 +51,7 @@ To modify the Scheduler appearance, you need to override the default CSS of Sche | e-parent-node | Parent resource cells in timeline views of scheduler. | | e-child-node | Child resource cells in timeline views of scheduler. | -### Work cells in vertical views of scheduler +### Work Cells In Vertical Views Of Scheduler This CSS selector targets the work cells in the vertical views (Day, Week, and WorkWeek) of the Syncfusion® Scheduler component. These cells represent the individual time slots arranged vertically where appointments are displayed and can be scheduled. @@ -98,7 +98,7 @@ This CSS selector targets the work cells in the vertical views (Day, Week, and W {% previewsample "https://blazorplayground.syncfusion.com/embed/BDLSjzXQfGnvGHlh?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in vertical views](images/blazor-scheduler-verticalview-workcells.png)" %} -### Work cells in month view of scheduler +### Work Cells In Month View Of Scheduler This CSS selector targets the work cells (day cells) that belong to the current month in the month view of the Syncfusion® Scheduler. These cells represent the individual days of the displayed month where users can schedule and view appointments. @@ -141,7 +141,7 @@ This CSS selector targets the work cells (day cells) that belong to the current {% previewsample "https://blazorplayground.syncfusion.com/embed/LXBSXpMdpcPUpdLW?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in month view](images/blazor-scheduler-monthview-workcells.png)" %} -### Work cells of other month in month view of scheduler +### Work Cells Of Other Month In Month View Of Scheduler This CSS selector targets the work cells that represent days from adjacent months (previous or next month) that are visible in the current month view of the scheduler. These cells typically appear at the beginning and end of a month view to complete the week rows. @@ -185,7 +185,7 @@ This CSS selector targets the work cells that represent days from adjacent month {% previewsample "https://blazorplayground.syncfusion.com/embed/LDVoDfinplIYBcIi?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Other month work cells in month view](images/blazor-scheduler-othermonth-workcells.png)" %} -### Work cells in timeline views of scheduler +### Work Cells In Timeline Views Of Scheduler This CSS selector targets the work cells in the standard timeline views of the Syncfusion® Scheduler. These cells represent time slots arranged horizontally across the scheduler. @@ -230,7 +230,7 @@ This CSS selector targets the work cells in the standard timeline views of the S {% previewsample "https://blazorplayground.syncfusion.com/embed/LtVetzsdeXJJNgsX?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in timeline views](images/blazor-scheduler-timelineview-workcells.png)" %} -### Work cells in timeline month view of scheduler +### Work Cells In Timeline Month View Of Scheduler This CSS selector targets the work cells in the timeline month view of the Syncfusion® Scheduler component. @@ -273,7 +273,7 @@ This CSS selector targets the work cells in the timeline month view of the Syncf {% previewsample "https://blazorplayground.syncfusion.com/embed/hZhSXIXUeKvJllyA?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in timeline month views](images/blazor-scheduler-timelinemonth-workcells.png)" %} -### Work cells in timeline year view of scheduler +### Work Cells In Timeline Year View Of Scheduler This CSS selector targets the work cells in the timeline year view of the Syncfusion® Scheduler component. These cells represent time slots across the entire year, arranged in a timeline format that provides an overview of appointments throughout the entire year. @@ -316,7 +316,7 @@ This CSS selector targets the work cells in the timeline year view of the Syncfu {% previewsample "https://blazorplayground.syncfusion.com/embed/rZBIZSXKozTrvbOf?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in timeline year views](images/blazor-scheduler-timelineyear-workcells.png)" %} -### Work cells of other month in timeline year view of scheduler +### Work Cells Of Other Month In Timeline Year View Of Scheduler This CSS selector targets the work cells representing days from adjacent months (previous or next month) that are visible in the timeline year view. @@ -359,7 +359,7 @@ This CSS selector targets the work cells representing days from adjacent months {% previewsample "https://blazorplayground.syncfusion.com/embed/VNLIteDUymCFDFFp?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in timeline other month views](images/blazor-scheduler-timeline-othermonth-workcells.png)" %} -### Work cells in month agenda view of scheduler +### Work Cells In Month Agenda View Of Scheduler This CSS selector targets the work cells that represent the days in the month agenda view of the Syncfusion® Scheduler. These cells are areas where appointments can be placed. @@ -401,7 +401,7 @@ This CSS selector targets the work cells that represent the days in the month ag {% previewsample "https://blazorplayground.syncfusion.com/embed/hjBItIMpzmNyLBhW?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work cells in month agenda view](images/blazor-scheduler-monthagenda-workcells.png)" %} -### Work cells of other month in month agenda view of scheduler +### Work Cells of Other Month in Month Agenda View of Scheduler This CSS selector targets the work cells representing days that belong to adjacent months within the month agenda view. These cells often show up to provide context for appointments that may extend beyond the current month. @@ -802,7 +802,7 @@ This CSS selector targets the work day cells in the timeline year view of the Sy {% previewsample "https://blazorplayground.syncfusion.com/embed/VtLytSsaTviyMXFM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Work day cells in timeline year view](images/blazor-scheduler-work-day-cells-timeline-yearview.png)" %} -### Appointment in vertical views of scheduler +### Appointment in Vertical Views of Scheduler This CSS selector targets the regular appointments that appear in these vertical views. Customizing this selector can significantly improving appointment visibility, readability, and overall visual appearance. @@ -857,7 +857,7 @@ This CSS selector targets the regular appointments that appear in these vertical {% previewsample "https://blazorplayground.syncfusion.com/embed/BXLSXlXiqeOnoBFt?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in vertical view](images/blazor-scheduler-appointments-vertical-view.png)" %} -### All day Appointment in vertical views of scheduler +### All Day Appointment in Vertical views of Scheduler This CSS selector targets the all-day appointments that appear in the vertical views (Day, Week, and WorkWeek) of the Syncfusion® Blazor Scheduler component. All-day appointments are events that span an entire day or multiple days without specific start and end times within those days. @@ -913,7 +913,7 @@ This CSS selector targets the all-day appointments that appear in the vertical v {% previewsample "https://blazorplayground.syncfusion.com/embed/rjhINvDCqxEWFfUp?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[All day appointments in vertical view](images/blazor-scheduler-allday-appointments-vertical-view.png)" %} -### Appointment in month view of scheduler +### Appointment in Month View of Scheduler This CSS selector targets appointment elements in the month view of the Syncfusion® Blazor Scheduler component. This selector is crucial for customizing how appointments appear in the calendar-style month view, which presents unique visualization challenges due to the compact nature of displaying an entire month at once. @@ -966,7 +966,7 @@ This CSS selector targets appointment elements in the month view of the Syncfusi {% previewsample "https://blazorplayground.syncfusion.com/embed/BNVyjbDigwxldZQH?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in month view](images/blazor-scheduler-appointments-month-view.png)" %} -### Appointment in timeline views of scheduler +### Appointment in Timeline Views of Scheduler This CSS selector targets appointment elements in the timeline views of the Syncfusion® Blazor Scheduler component. Timeline views (TimelineDay, TimelineWeek, TimelineWorkWeek) present a unique horizontal orientation of appointments that differs significantly from the traditional vertical or month views. @@ -1018,7 +1018,7 @@ This CSS selector targets appointment elements in the timeline views of the Sync {% previewsample "https://blazorplayground.syncfusion.com/embed/VDrSNbjiqlpgpavw?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in timeline view](images/blazor-scheduler-appointments-Timeline-view.png)" %} -### Appointment in timeline month view of scheduler +### Appointment in Timeline Month View of Scheduler This CSS selector targets appointment elements specifically in the timeline month view of the Syncfusion® Blazor Scheduler component. This specialized view combines the horizontal time-based layout of timeline views with the monthly calendar perspective, creating a unique visualization for planning and scheduling. @@ -1071,7 +1071,7 @@ This CSS selector targets appointment elements specifically in the timeline mont {% previewsample "https://blazorplayground.syncfusion.com/embed/VtrSDFZMJTeCySrl?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in timeline Month view](images/blazor-scheduler-appointments-TimelineMonth-view.png)" %} -### Appointment in timeline year view of scheduler +### Appointment in Timeline Year View of Scheduler This CSS selector targets appointment elements specifically in the timeline year view of the Syncfusion® Blazor Scheduler component. The Timeline Year view in Syncfusion® Scheduler is designed to display events across an entire year in a horizontal, scrollable layout. @@ -1123,7 +1123,7 @@ This CSS selector targets appointment elements specifically in the timeline year {% previewsample "https://blazorplayground.syncfusion.com/embed/hZBIDvNfqjpWspUW?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in timeline year view](images/blazor-scheduler-appointments-TimelineYear-view.png)" %} -### Appointment in year view of scheduler +### Appointment in Year View of Scheduler This CSS selector targets appointment elements specifically in the year view of the Syncfusion® Blazor Scheduler component. In a year view of a scheduler, appointments are displayed across all 12 months of the year, offering a high-level overview of scheduled events. @@ -1171,7 +1171,7 @@ This CSS selector targets appointment elements specifically in the year view of {% previewsample "https://blazorplayground.syncfusion.com/embed/LDrSjbXpKSaxvJSU?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments indicator in year view](images/blazor-scheduler-appointments-Year-view.png)" %} -### Appointment in agenda view of scheduler +### Appointment in Agenda View of Scheduler This CSS selector targets appointment elements specifically in the agenda view of the Syncfusion® Blazor Scheduler component. An appointment in the agenda view of a scheduler is shown as a simple list of events sorted by date and time. @@ -1222,7 +1222,7 @@ This CSS selector targets appointment elements specifically in the agenda view o {% previewsample "https://blazorplayground.syncfusion.com/embed/hZLyNlZJAnFDusMl?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in agenda view](images/blazor-scheduler-appointments-agenda-view.png)" %} -### Appointment in month agenda view of scheduler +### Appointment in Month Agenda View of Scheduler This CSS selector targets appointment elements specifically in the month agenda view of the Syncfusion® Blazor Scheduler component. An appointment in the month agenda view of a scheduler is shown as a list of events organized by day within a selected month. @@ -1276,7 +1276,7 @@ This CSS selector targets appointment elements specifically in the month agenda {% previewsample "https://blazorplayground.syncfusion.com/embed/LNBotPNTAGcpjRvV?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Appointments in month agenda view](images/blazor-scheduler-appointments-monthAgenda-view.png)" %} -### Block appointment in scheduler +### Block Appointment in Scheduler This CSS selector targets appointment elements specifically designated as blocked appointments in the Syncfusion® Blazor Scheduler component. A blocked appointment refers to a reserved time slot during which no other appointments or events can be scheduled. @@ -1332,7 +1332,7 @@ This CSS selector targets appointment elements specifically designated as blocke {% previewsample "https://blazorplayground.syncfusion.com/embed/LZVytvNTTzoPWdKC?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Blocked Appointment in schedule](images/blazor-scheduler-blocked-appointments.png)" %} -### Read only appointment in scheduler. +### Read Only Appointment in Scheduler. This CSS selector targets appointment elements that are specifically marked as read-only in the Syncfusion® Blazor Scheduler component. A read-only appointment in a scheduler refers to an event or time slot that is visible to users but cannot be modified, deleted, or rescheduled through the user interface. @@ -1386,7 +1386,7 @@ This CSS selector targets appointment elements that are specifically marked as r {% previewsample "https://blazorplayground.syncfusion.com/embed/VDBojvXpJoKirsVN?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[ReadOnly Appointment in schedule](images/blazor-scheduler-readonly-appointments.png)" %} -### Selected Appointments in scheduler. +### Selected Appointments in Scheduler This CSS selector targets appointment elements that are specifically marked as selected in the Syncfusion® Blazor Scheduler component. A selected appointment in a scheduler refers to an event that a user has actively clicked on or interacted with. @@ -1441,7 +1441,7 @@ This CSS selector targets appointment elements that are specifically marked as s {% previewsample "https://blazorplayground.syncfusion.com/embed/htLoDlZJfSbnzyVC?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Selected Appointment in schedule](images/blazor-scheduler-selected-appointments.png)" %} -### Selected Cells in scheduler. +### Selected Cells in Scheduler This CSS selector targets the cells that are specifically marked as selected in the Syncfusion® Blazor Scheduler component. A selected cell in a scheduler refers to a time slot that a user has actively clicked on or interacted with. @@ -1495,7 +1495,7 @@ This CSS selector targets the cells that are specifically marked as selected in {% previewsample "https://blazorplayground.syncfusion.com/embed/rDrStPtfpRsutkic?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Selected cells in schedule](images/blazor-scheduler-selected-cells.png)" %} -### Header Cells in scheduler. +### Header Cells in Scheduler This CSS selector targets the cells that are specifically marked as header cells in the Syncfusion® Blazor Scheduler component. Header cells in a scheduler refer to the top row that display contextual information such as dates and day labels. @@ -1546,7 +1546,7 @@ This CSS selector targets the cells that are specifically marked as header cells {% previewsample "https://blazorplayground.syncfusion.com/embed/LZVSNPNpfmXnWpnA?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Header cells in schedule](images/blazor-scheduler-header-cells.png)" %} -### Resource cells in vertical views of scheduler. +### Resource Cells in Vertical Views of Scheduler This CSS selector targets the cells that are specifically marked as resource cells in the Syncfusion® Blazor Scheduler component. Resource cells in the vertical views of a scheduler are the sections that display the names or labels of resources such as people, rooms, equipment, or services. These cells are usually shown on the top of the scheduler and help organize appointments by resource. @@ -1618,7 +1618,7 @@ This CSS selector targets the cells that are specifically marked as resource cel {% previewsample "https://blazorplayground.syncfusion.com/embed/LtLeNvjJTccyxmoh?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Resource cells in schedule](images/blazor-scheduler-resource-cells.png)" %} -### Resource cells in month views of scheduler. +### Resource Cells in Month Views of Scheduler This CSS selector targets the resource cells in the Syncfusion® Blazor Scheduler Month view. These cells show names of resources in month view. @@ -1691,7 +1691,7 @@ This CSS selector targets the resource cells in the Syncfusion® Blazor Scheduler component. Resource cells in the timeline views of a scheduler are usually shown on the left side of the scheduler. @@ -1765,7 +1765,7 @@ This CSS selector targets the cells that are specifically marked as resource cel {% previewsample "https://blazorplayground.syncfusion.com/embed/BZBINbjTfvuqAUlm?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Resource cells in timeline view](images/blazor-scheduler-resource-cells-timeline-view.png)" %} -### Resource cells in timeline month views of scheduler. +### Resource Cells in Timeline Month Views of Scheduler This CSS selector targets the cells that are specifically marked as resource cells in timeline month views of the Syncfusion® Blazor Scheduler component. @@ -1837,79 +1837,7 @@ This CSS selector targets the cells that are specifically marked as resource cel {% previewsample "https://blazorplayground.syncfusion.com/embed/rDhoNbXzpaIzpSch?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Resource cells in timeline month view](images/blazor-scheduler-resource-cells-timeline-month-view.png)" %} -### Resource cells in timeline month views of scheduler. - -This CSS selector targets the cells that are specifically marked as resource cells in timeline month views of the Syncfusion® Blazor Scheduler component. - -```cshtml - -@using Syncfusion.Blazor.Schedule - - - - - - - - - - -@code{ - DateTime CurrentDate = new DateTime(2023, 6, 1); - public string[] Resources { get; set; } = { "Owners" }; - List DataSource = new List - { - new AppointmentData { Id = 1, Subject = "Meeting", StartTime = new DateTime(2023, 6, 1, 9, 30, 0) , EndTime = new DateTime(2023, 6, 1, 11, 0, 0), OwnerId = 1 }, - new AppointmentData { Id = 2, Subject = "Swimming", StartTime = new DateTime(2023, 6, 2, 10, 30, 0) , EndTime = new DateTime(2023, 6, 2, 12, 30, 0), OwnerId = 2 }, - new AppointmentData { Id = 3, Subject = "Movie", StartTime = new DateTime(2023, 6, 3, 10, 0, 0) , EndTime = new DateTime(2023,6 , 3, 12, 0, 0), OwnerId = 3 } - }; - public List OwnersData { get; set; } = new List - { - new ResourceData{ OwnerText = "Nancy", Id = 1, OwnerColor = "#ffaa00" }, - new ResourceData{ OwnerText = "Steven", Id = 2, OwnerColor = "#f8a398" }, - new ResourceData{ OwnerText = "Michael", Id = 3, OwnerColor = "#7499e1" } - }; - public class AppointmentData - { - public int Id { get; set; } - public string Subject { get; set; } - public string Location { get; set; } - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public string Description { get; set; } - public bool IsAllDay { get; set; } - public string RecurrenceRule { get; set; } - public string RecurrenceException { get; set; } - public Nullable RecurrenceID { get; set; } - public int OwnerId { get; set; } - } - public class ResourceData - { - public int Id { get; set; } - public string OwnerText { get; set; } - public string OwnerColor { get; set; } - } -} - - - -``` - -{% previewsample "https://blazorplayground.syncfusion.com/embed/rDhoNbXzpaIzpSch?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" backgroundimage "[Resource cells in timeline month view](images/blazor-scheduler-resource-cells-timeline-month-view.png)" %} - -### Parent and child resource cells in timeline views of scheduler. +### Parent and Child Resource Cells in Timeline Views of Scheduler This CSS selector targets the parent and child resource cells in the timeline views of the Syncfusion® Blazor Scheduler component. These cells display both parent and child resources (like rooms and individuals) and help organize appointments based on resource hierarchy. diff --git a/blazor/scheduler/state-persistence.md b/blazor/scheduler/state-persistence.md index 2e627a6f7f..558c27df53 100644 --- a/blazor/scheduler/state-persistence.md +++ b/blazor/scheduler/state-persistence.md @@ -9,10 +9,12 @@ documentation: ug # State Persistence in Blazor Scheduler Component -State persistence allowed Scheduler to retain the [CurrentView](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_CurrentView), [SelectedDate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_SelectedDate) and Scroll position values in the [localStorage](https://www.w3schools.com/html/html5_webstorage.asp) for state maintenance even if the browser is refreshed or if you move to the next page within the browser. This action is handled through the [EnablePersistence](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EnablePersistence) property which is set to false by default. When it is set to true, `CurrentView`, `SelectedDate` and Scroll position values of the scheduler component will be retained even after refreshing the page. +State persistence enables the Scheduler to retain the [CurrentView](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_CurrentView), [SelectedDate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_SelectedDate), and scroll position values in the [localStorage](https://www.w3schools.com/html/html5_webstorage.asp) for state maintenance, even if the browser is refreshed or navigation occurs to another page within the browser. This behavior is controlled by the [EnablePersistence](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EnablePersistence) property, which is set to `false` by default. When set to `true`, `CurrentView`, `SelectedDate`, and scroll position values of the Scheduler component are retained even after refreshing the page. N> Scheduler ID is essential to set state persistence. +The following example demonstrates how to enable state persistence in the Scheduler. + ```cshtml @using Syncfusion.Blazor.Schedule diff --git a/blazor/scheduler/timescale.md b/blazor/scheduler/timescale.md index f7fb0c42af..7847607daa 100644 --- a/blazor/scheduler/timescale.md +++ b/blazor/scheduler/timescale.md @@ -9,7 +9,7 @@ documentation: ug # Timescale Customization in Blazor Scheduler Component -The time slots are usually the time cells that are displayed on the Day, Week and Work Week views of both the calendar (to the left most position) and timeline views (at the top position). The [`ScheduleTimeScale`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html) allows to control and set the required time slot duration for the work cells displayed on Scheduler. It includes the following sub-options such as, +Time slots are the time cells displayed in the Day, Week, and Work Week views of both the calendar (leftmost position) and timeline views (top position). The [`ScheduleTimeScale`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html) allows control and setting of the required time slot duration for the work cells displayed on the Scheduler. It includes the following sub-options: * [`Enable`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_Enable) - When set to `true`, allows the Scheduler to display the appointments accurately against the exact time duration. If set to `false`, all the appointments of a day will be displayed one below the other with no grid lines displayed. Its default value is `true`. * [`Interval`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_Interval) – Defines the time duration on which the time axis to be displayed either in 1 hour or 30 minutes interval and so on. It accepts the values in minutes and defaults to 60. @@ -49,12 +49,13 @@ The [`Interval`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedul } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LjVoMZXcqRvObwhx?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Time Slot Duration in Blazor Scheduler](images/blazor-scheduler-timeslot.png) -## Adjusting the time slot duration for various views +## Adjusting the Time Slot Duration for Various Views -By using the [Interval](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViewTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleViewTimeScale_Interval) and [SlotCount](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViewTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleViewTimeScale_SlotCount) properties, within the [ScheduleViewTimescale](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViewTimeScale.html) as a child element of [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViews.html) you can customize the duration of time slots for views. Take a look at the code snippet to see how it's done. In this example, the `Day` view has six-time slots per hour while the `Week` and `WorkWeek` views have two-time slots per hour. +By using the [Interval](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViewTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleViewTimeScale_Interval) and [SlotCount](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViewTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleViewTimeScale_SlotCount) properties, within the [ScheduleViewTimescale](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViewTimeScale.html) as a child element of [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViews.html), the duration of time slots for views can be customized. The following code snippet demonstrates this customization. In this example, the `Day` view has six-time slots per hour while the `Week` and `WorkWeek` views have two-time slots per hour. ```cshtml @using Syncfusion.Blazor.Schedule @@ -91,14 +92,17 @@ By using the [Interval](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor. ``` ![Time Slot Duration for Day View in Blazor Scheduler](images/blazor-scheduler-timeslot-day-view.png) + +{% previewsample "https://blazorplayground.syncfusion.com/embed/hjBoiNZwUxYozVoN?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Time Slot Duration for Week and WorkWeek View in Blazor Scheduler](images/blazor-scheduler-timeslot-week-view.png) -## Customizing time cells using template +## Customizing Time Cells using Template The template option is available to allow customization of time slots which are as follows, -* [`MajorSlotTemplate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_MajorSlotTemplate) - The template option to be applied for major time slots. Here, the template accepts HTMLElement as template design and then the parsed design is displayed onto the time cells. The time details can be accessed within this template. -* [`MinorSlotTemplate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_MinorSlotTemplate) - The template option to be applied for minor time slots. Here, the template accepts HTMLElement as template design and then the parsed design is displayed onto the time cells. The time details can be accessed within this template. +* [`MajorSlotTemplate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_MajorSlotTemplate) - This template option is applied to major time slots. It accepts a render fragment that displays a custom design onto the time cells. Time details can be accessed within this template via the `TemplateContext`. +* [`MinorSlotTemplate`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_MinorSlotTemplate) - This template option is applied to minor time slots. It accepts a render fragment that displays a custom design onto the time cells. Time details can be accessed within this template via the `TemplateContext`. ```cshtml @using Syncfusion.Blazor.Schedule @@ -144,10 +148,11 @@ The template option is available to allow customization of time slots which are } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VtBoiXNmAQDKzkVv?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Customizing Time Cells in Blazor Scheduler](images/blazor-scheduler-custom-timecell.png) -## Hide the timescale +## Hide the Timescale The grid lines which indicates the exact time duration can be enabled or disabled on the Scheduler, by setting `true` or `false` to the [`Enable`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html#Syncfusion_Blazor_Schedule_ScheduleTimeScale_Enable) option within the [`ScheduleTimeScale`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleTimeScale.html) property. It's default value is `true`. @@ -178,10 +183,11 @@ The grid lines which indicates the exact time duration can be enabled or disable } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hXBSitDGqGXmdijx?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Hide Time Scale in Blazor Scheduler](images/blazor-scheduler-hide-timecell.png) -## Highlighting current date and time +## Highlighting Current Date and Time By default, Scheduler indicates current date with a highlighted date header on all views, as well as marks accurately the system's current time on specific views such as Day, Week, Work Week, Timeline Day, Timeline Week and Timeline Work Week views. To stop highlighting the current time indicator on Scheduler views, set `false` to the [`ShowTimeIndicator`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_ShowTimeIndicator) property which defaults to `true`. @@ -211,5 +217,6 @@ By default, Scheduler indicates current date with a highlighted date header on a } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rNVeWZDGKQisFFhO?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Highlight current Time in Blazor Scheduler](images/blazor-scheduler-highlight.png) diff --git a/blazor/scheduler/timezone.md b/blazor/scheduler/timezone.md index 58c6c30f2c..ec12b6332f 100644 --- a/blazor/scheduler/timezone.md +++ b/blazor/scheduler/timezone.md @@ -11,19 +11,19 @@ documentation: ug The Scheduler renders events based on current system time zone of server in server side application and in WASM application the events are rendered based on UTC timezone by default. -* You can change the timezone of the scheduler by setting [Timezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property. For more information, refer to the [section](#display-appointments-based-on-scheduler-time-zone). +* Change the time zone of the Scheduler by setting the [`TimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property. For more information, refer to the [section](#display-appointments-based-on-scheduler-time-zone). -* You can also set timezone for each appointment (events) through [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties which can be defined as separate fields within the event fields collection. For more information, refer to the [section](#create-appointments-in-different-time-zones). +* Set the time zone for each appointment (event) through the [`StartTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [`EndTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties, which can be defined as separate fields within the event fields collection. For more information, refer to the [section](#create-appointments-in-different-time-zones). -* You can also set the timezone for both the scheduler [Timezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property and as well as the event's [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties. For more information, refer to the [section](#display-appointments-based-on-clients-time-zone). +* Set the time zone for both the Scheduler's [`TimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property and the event's [`StartTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [`EndTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties. For more information, refer to the [section](#display-appointments-based-on-clients-time-zone). N>* The given value for the Timezone property for both the Scheduler and the appointments should be in the [IANA](https://www.iana.org/time-zones) format(Windows time zone IDs is not compatible).
* The WASM application has supported the limited [time zones](https://github.com/dotnet/runtime/issues/44840#issuecomment-764991667) in .Net5. But in .Net6, it supported all the [time zones](https://github.com/dotnet/runtime/pull/50650). -## Create appointments in different time zones +## Create Appointments in Different Time Zones -You can create appointments at different time zones using the [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties. An appointment’s start time and end time are calculated based on the given time zone information. +Appointments can be created in different time zones using the [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties. An appointment’s start time and end time are calculated based on the given time zone information. In the following code example, the appointments time zone is Europe Time (UTC+03:00), and the application is running in UTC time zone (here the Blazor Server application is hosted in UTC time zone and the Blazor WASM application's default time zone is UTC). In this scenario, the appointment will be displayed at 6 AM. @@ -78,7 +78,7 @@ N>* If the recurring appointment is converted to another time zone, then the who
* The time zone support is applicable for custom appointments too, so map the corresponding property.
* Use [TimeZone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) for custom appointments by mapping the [StartTimeZone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimeZone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) custom properties. -## Display appointments based on Scheduler time zone +## Display Appointments Based on Scheduler Time Zone Set the specific time zone to schedule using the [Timezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property of scheduler. On this scenario, the appointments will be displayed in UTC time when the [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties are set to null. The appointments will be displayed in UTC time based on the given scheduler time zone. @@ -121,12 +121,15 @@ In the following code example, the Scheduler time zone is Europe Time (UTC+03:00 } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hXBSiXtcqwBKbwYj?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Display Appointments based on client’s time zone +![Blazor Scheduler](images/scheduler-timezone.png) + +## Display Appointments Based on Client’s Time Zone Display the appointments based on the client’s local time zone in scheduler. It can be achieved by getting browser's timezone and set it's value to the scheduler time zone and appointment’s time zone. -For example, consider a scenario that you are in North Carolina (America/New_York) and you want to set up a meeting at 10 A.M. on North Carolina time. You have colleagues in London and Chennai, and they also need to participate. The time for this meeting will be 3 P.M. (15:00) in London and 8.30 P.M. in Chennai. When each view your Scheduler, you need to see the appointment displayed relative to your local time zones. +For example, consider a scenario where a user is in North Carolina (America/New_York) and wants to set up a meeting at 10:00 AM North Carolina time. Colleagues in London and Chennai also need to participate. The meeting time will be 3:00 PM (15:00) in London and 8:30 PM in Chennai. When each user views the Scheduler, the appointment displays relative to their local time zones. ```csharp @using Syncfusion.Blazor.Schedule @@ -176,17 +179,18 @@ For example, consider a scenario that you are in North Carolina (America/New_Yor } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VZhIsNtGUcHYgiFx?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Display appointments at same time everywhere regardless of client’s time zone +## Display Appointments at Same Time Everywhere Regardless of Client’s Time Zone -Display the appointments at the same time everywhere without considering the time zone while setting the [Timezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property of the scheduler, the [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties to null. The appointments will be displayed based on the given [StartTime](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTime.html) and [EndTime](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTime.html) of appointment everywhere without considering the time zone. +Appointments can be displayed at the same time everywhere without considering the time zone. This is achieved by not setting the [`TimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) property of the Scheduler and by setting the [`StartTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [`EndTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) properties to `null`. Appointments will then be displayed based on their specified [`StartTime`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTime.html) and [`EndTime`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTime.html) values everywhere, irrespective of any time zone. -## Updating StartTime and EndTime after drag and drop appointment based on time zone +## Updating StartTime and EndTime after Drag and Drop Appointment Based on Time Zone After rescheduling an appointment using drag and drop, appointment’s start and end time value will be updated based on scheduler time zone and appointment’s time zone. For an example, consider the local time zone is India Standard Time, if you drag an appointment from 9 AM and drop this on 1 PM and the scheduler’s [Timezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) is not set and the appointment’s [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) has set as AUS Central Standard Time (Australia/Darwin) then appointment’s start time and end time value will be converted from Local time zone to appointment time zone and the appointment’s start time will be saved at 5 PM. -If you set scheduler’s [Timezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) as AUS Central Standard Time (Australia/Darwin) and the appointment’s [StartTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [EndTimezone](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) has set as AUS Central Standard Time (Australia/Darwin) as Central Standard Time (America/Mexico_City) then the appointment’s start time and end time value will be converted from scheduler’s time zone to appointment time zone and the appointment’s start time will be saved at 8.30 PM. +If the Scheduler’s [`TimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) is set as "Australia/Darwin" (AUS Central Standard Time) and the appointment’s [`StartTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldStartTimezone.html) and [`EndTimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.FieldEndTimezone.html) are set as "America/Mexico_City" (Central Standard Time), then the appointment’s start and end time values will be converted from the Scheduler’s time zone to the appointment’s time zone. The appointment’s start time will be saved at 8:30 PM. -If you set scheduler’s TimeZone as AUS Central Standard Time (Australia/Darwin) and appointment’s time zone is not set then the appointment’s start time and end time value will be converted from scheduler time zone to UTC time zone and the appointment’s start time will be saved at 9 AM. +If the Scheduler’s [`TimeZone`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_Timezone) is set as "Australia/Darwin" (AUS Central Standard Time) and the appointment’s time zone is not set, then the appointment’s start and end time values will be converted from the Scheduler's time zone to the UTC time zone. The appointment’s start time will be saved at 9:00 AM. diff --git a/blazor/scheduler/views.md b/blazor/scheduler/views.md index 5195bbb729..365689b2d9 100644 --- a/blazor/scheduler/views.md +++ b/blazor/scheduler/views.md @@ -15,7 +15,7 @@ To navigate between different views and dates, the navigation options are availa N> By default, Scheduler displays the calendar views such as day, week, work week, month and agenda. -## Setting specific view on scheduler +## Setting Specific View on Scheduler As the Scheduler displays `Week` view by default, therefore to change the active view, set [`CurrentView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_CurrentView) property with the desired view name. The applicable view names that the Scheduler accepts are as follows, @@ -34,7 +34,7 @@ As the Scheduler displays `Week` view by default, therefore to change the active It is possible to display only the desired views on the Scheduler using the [`Views`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) property. -To get start quickly on customizing individual views of scheduler, you can check on this video: +To get started quickly on customizing individual views of the Scheduler, refer to this video: {% youtube "youtube:https://www.youtube.com/watch?v=bBhn7YHje8k"%} @@ -67,6 +67,7 @@ In the following example, the Scheduler displays 2 views namely, Week and Timeli } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LDVIiXtcAwwQOKRG?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} To configure Scheduler with different configurations on each view, refer the following code example. Here, the Week view displays the dates in `dd-MM-yyyy` format whereas the Month view hides the weekend days and also displays it in readonly mode. @@ -96,10 +97,11 @@ To configure Scheduler with different configurations on each view, refer the fol } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LjheijDGKQvrVWBS?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## View specific configuration +## View Specific Configuration -There are scenarios where each view may need to have different configurations. For such cases, you can define the applicable scheduler properties within the `Views` Property for each view option as depicted in the following examples. The fields available to be used within each view options are as follows. +Each view may require different configurations. For such cases, define the applicable Scheduler properties within the `Views` property for each view option, as depicted in the following examples. The fields available to be used within each view option are as follows: | Property | Type | Description | Applicable views | |----------|------|-------------|------------------| @@ -123,9 +125,9 @@ There are scenarios where each view may need to have different configurations. F | [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) | bool | It is used to enable or disable the virtual scrolling functionality. | Applicable on Agenda and Timeline views. | | [`HeaderRows`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_HeaderRows) | `HeaderRowsModel` | Allows defining the custom header rows on timeline views of the Scheduler to display the year, month, week, date and hour label as an individual row. | Applicable only on all timeline views. | -### Day view +### Day Diew -Usually a day view displays a single day with all its related appointments. It is possible to customize the day view to display more number of days by extending the [`Views`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) property with [`Interval`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_Interval) option. You can also define any of the above defined properties within the [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) tag helper as depicted in the following code example. +Usually a day view displays a single day with all its related appointments. It is possible to customize the day view to display more number of days by extending the [`Views`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) property with [`Interval`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_Interval) option. Any of the properties defined above can also be configured within the [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) tag helper, as depicted in the following code example. ```cshtml @using Syncfusion.Blazor.Schedule @@ -161,10 +163,11 @@ Usually a day view displays a single day with all its related appointments. It i ``` N> All the above defined properties can be accessed within Day view except [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) and [`HeaderRows`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_HeaderRows). +{% previewsample "https://blazorplayground.syncfusion.com/embed/VjVeWZDwKQbldkdG?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Displaying Day View in Blazor Scheduler](images/blazor-scheduler-views-day.png) -### Week view +### Week View The Week view displays a count of 7 days (from Sunday to Saturday) with all its related appointments. The first day of the week can be changed using the [`FirstDayOfWeek`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_FirstDayOfWeek) which accepts the integer (Sunday=0, Monday=1, Tuesday=2 and so on) value. You can navigate to a particular date in day view from the week view by clicking on the appropriate dates on the date header bar. @@ -204,9 +207,11 @@ The Week view displays a count of 7 days (from Sunday to Saturday) with all its N> All the above defined properties in the table can be accessed within Week and Work week views except [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) and [`HeaderRows`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_HeaderRows). +{% previewsample "https://blazorplayground.syncfusion.com/embed/BDBoCttcqGOrFqLR?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Week View in Blazor Scheduler](images/blazor-scheduler-views-week.png) -### Work Week view +### Work Week View The Work week view displays only the working days of a week (count of 5 days) and its associated appointments. It is possible to customize the working days on the work week view by using the [`WorkDays`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_WorkDays) property which accepts an array of integer values (such as Sunday=0, Monday=1, Tuesday=2 and so on). By default, it displays from Monday to Friday (5 days). You can also navigate to a particular date in the day view from the work week view by clicking on the appropriate dates in the date header bar. @@ -247,15 +252,17 @@ The following code example depicts how to change the start and end hours only on N> The Week, Work week and Day views can display the all-day row appointments in a separate all-day row with an expand or collapse option to view it. +{% previewsample "https://blazorplayground.syncfusion.com/embed/hDVSiNZGqcuvqBiN?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Work week View in Blazor Scheduler](images/blazor-scheduler-views-workweek.png) ### Month view A Month view displays the entire days of a particular month and all its related appointments. You can navigate to a particular date in the day view by clicking on the appropriate date text on the month cells. -By default, when you try to create an appointment through Month view, it is considered to be created for an entire day. You can explicitly change this behavior by unchecking the `All-day` option from editor window, so that it defaults to the start time duration as 9.00 AM and end time as 9.30 AM. +By default, appointments created in the Month View are set as all-day events. This behavior can be explicitly changed by unchecking the `All-day` option from the editor window, which defaults the start time duration to 9:00 AM and end time to 9:30 AM. -By default, in month view, you can view single appointment on each day cell. If you have more than one appointment in a day, the `+ more` text indicator will be available on that cell, clicking on which will allows you to view the hidden appointments of a day. You can decide how many appointments can render on a day based on your Scheduler and Month cell height using [`MaxEventsPerRow`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_MaxEventsPerRow) property within [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViews.html) whereas its default value is 1. The following code example depicts how to change the working days only on the `Month` view of the Scheduler. +By default, in Month View, a single appointment can be viewed on each day cell. If there is more than one appointment for a day, the `+ more` text indicator will be available on that cell; clicking on it allows viewing the hidden appointments for that day. The number of appointments that can render on a day can be controlled using the [`MaxEventsPerRow`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_MaxEventsPerRow) property within [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleViews.html), which has a default value of 1. This is determined by the Scheduler and Month cell height. The following code example depicts how to change the working days only on the `Month` view of the Scheduler. ```cshtml @using Syncfusion.Blazor.Schedule @@ -291,11 +298,13 @@ By default, in month view, you can view single appointment on each day cell. If } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BtVeWXDGKFXVRbuZ?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Month View in Blazor Scheduler](images/blazor-scheduler-views-month.png) -### Agenda view +### Agenda View -The Agenda view lists out the appointments in a grid-like view for the next 7 days by default from the current date. The count of the days can be changed using the API [`AgendaDaysCount`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_AgendaDaysCount). It allows virtual scrolling of dates by enabling the [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property. Also, you can enable or disable the display of days on Scheduler that has no appointments by setting true or false to the [`HideEmptyAgendaDays`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_HideEmptyAgendaDays) property. +The Agenda view lists out the appointments in a grid-like view for the next 7 days by default from the current date. The count of the days can be changed using the API [`AgendaDaysCount`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_AgendaDaysCount). It allows virtual scrolling of dates by enabling the [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property. The display of days without appointments in the Scheduler can also be enabled or disabled by setting `true` or `false` to the [`HideEmptyAgendaDays`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_HideEmptyAgendaDays) property. The following code example depicts how to display events of four days in Agenda view. @@ -330,10 +339,11 @@ The following code example depicts how to display events of four days in Agenda } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hXByWZNGqbNnyBNe?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Displaying Agenda View in Blazor Scheduler](images/blazor-scheduler-views-agenda.png) -### Month Agenda view +### Month Agenda View A Month-Agenda view shows a month calendar, where clicking on a particular day will display the appointments present on that date below the calendar. The day with appointments are differentiated with a circular dot below the date of the calendar. @@ -374,11 +384,13 @@ The following code example shows how to hide the weekend days on `MonthAgenda` v } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/htBIitDGKvstoOjc?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Month agenda View in Blazor Scheduler](images/blazor-scheduler-views-monthagenda.png) -### Timeline views – Day, Week, Work Week +### Timeline Views – Day, Week, Work Week -Similar to the vertical day, week and work week views, the respective view shows all its appointments where the time slots are displayed horizontally. By default, the cell height adjusts as per the height set to Scheduler and you can view single appointment on each cell. If you have more than one appointment, the `+ more` text indicator will be available on the bottom of that cell, clicking on which allows you to view the hidden appointments of a day. You can decide how many appointments can render on a cell based on your Scheduler and work cell height using [`MaxEventsPerRow`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_MaxEventsPerRow) property within [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) whereas its default value is `1`. +Similar to the vertical Day, Week, and Work Week views, the respective view shows all its appointments where the time slots are displayed horizontally. By default, the cell height adjusts as per the height set to the Scheduler, and only a single appointment is displayed on each cell. If there is more than one appointment, the `+ more` text indicator will be available at the bottom of that cell; clicking on it allows viewing the hidden appointments for that day. The number of appointments that can render on a cell can be controlled using the [`MaxEventsPerRow`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_MaxEventsPerRow) property within [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html), which has a default value of `1`. This is determined by the Scheduler and work cell height. ```cshtml @using Syncfusion.Blazor.Schedule @@ -418,9 +430,11 @@ Similar to the vertical day, week and work week views, the respective view shows N> Clicking on the dates in the date header bar of Timeline day, Timeline week and Timeline work week will allow to navigate to the Agenda view. +{% previewsample "https://blazorplayground.syncfusion.com/embed/hXreiXDQAbMzoepy?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Timeline Week View in Blazor Scheduler](images/blazor-scheduler-views-timelineweek.png) -### Timeline Month view +### Timeline Month View A Timeline Month view displays the current month days along with its appointments. @@ -460,9 +474,10 @@ A Timeline Month view displays the current month days along with its appointment N> Clicking on the dates in the date header bar of Timeline month allows to navigate to the Timeline day view. +{% previewsample "https://blazorplayground.syncfusion.com/embed/VDBIMZDQgbslOAlH?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Displaying Timeline Month View in Blazor Scheduler](images/blazor-scheduler-views-timelinemonth.png) -### Timeline Year view +### Timeline Year View A Timeline Year view displays the complete year along with its appointments. @@ -501,10 +516,11 @@ By default, the timeline year view orientation is set to Horizontal view. In thi } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LthIWjDmAFrBHjnv?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Displaying Timeline Year View in Blazor Scheduler](images/blazor-scheduler-views-timelineyear.png) -#### Setting the first month of timeline year +#### Setting the First Month of Timeline Year By default, months in timeline year view displayed from January to December. User can customize this default behavior with the help of scheduler [FirstMonthOfYear](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_FirstMonthOfYear) property. This property allows user to set the first month of the timeline year on Scheduler. User can set first month of timeline year by passing integer value to the [FirstMonthOfYear](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_FirstMonthOfYear) property, whereby 1 is always denoted as January, 2 as February and so on. This property applicable only in timeline year views. @@ -540,10 +556,11 @@ By default, months in timeline year view displayed from January to December. Use } } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/hZryWNDGgPrniKBv?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Displaying Timeline Year with First Month in Blazor Scheduler](images/blazor-scheduler-views-timelineyear-firstmonth.png) -### Year view +### Year View The Year view shows a year calendar, where clicking on a particular day will display the appointments present on that date below the calendar. The day with appointments are differentiated with a circular dot below the date of the calendar. @@ -581,13 +598,15 @@ The Year view shows a year calendar, where clicking on a particular day will dis } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rZBIMjNQgvVOlvVy?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Year View in Blazor Scheduler](images/blazor-scheduler-year-view.png) -## Extending view intervals +## Extending View Intervals It is possible to customize the display of default number of days on different Scheduler view modes. For example, a day view can be extended to display 4 days by setting the `Interval` option as 4 for the `Day` option within the [`ScheduleView`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html) as depicted in the following code example. In the same way, you can also display 3 weeks by setting interval 3 for the `Week` option. -You can provide the alternative display name for such customized views on the Scheduler header bar, by setting the appropriate [`DisplayName`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_DisplayName) property. +An alternative display name can be provided for such customized views on the Scheduler header bar by setting the appropriate [`DisplayName`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_DisplayName) property. ```cshtml @using Syncfusion.Blazor.Schedule @@ -623,6 +642,8 @@ You can provide the alternative display name for such customized views on the Sc } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VNVyiDZGKlgziNny?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Extending Intervals in Blazor Scheduler](images/blazor-scheduler-views-interval.png) N> The view intervals can be extended on all the Scheduler view modes except Agenda and Month-Agenda views. diff --git a/blazor/scheduler/virtual-scrolling.md b/blazor/scheduler/virtual-scrolling.md index 213ffc2c53..447daf9217 100644 --- a/blazor/scheduler/virtual-scrolling.md +++ b/blazor/scheduler/virtual-scrolling.md @@ -9,9 +9,9 @@ documentation: ug # Virtual Scrolling in Blazor Scheduler Component -To achieve better performance in the Scheduler when loading a large number of resources and events, virtual scrolling support has been added in the timeline views to load a large set of resources and events instantly as you scroll. You can dynamically load large number of resources and events in timeline view of the Scheduler by setting `true` to the [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property within the view specific settings. The virtual loading of events is possible in Agenda view, by setting [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property to `true` within the agenda view specific settings. +To optimize performance in the Scheduler when loading numerous resources and events, virtual scrolling support has been implemented in timeline views. This feature allows for dynamically loading a large set of resources and events instantly as a user scrolls. Enable this functionality in the timeline view of the Scheduler by setting the [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property within the view specific settings. The virtual loading of events is possible in Agenda view, by setting [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property to `true` within the agenda view specific settings. -To get start quickly about virtual scrolling in our Scheduler, you can check on this video: +To get started quickly with virtual scrolling in the Scheduler, refer to this video: {% youtube "youtube:https://www.youtube.com/watch?v=yAtUHA2CieI-0"%} @@ -112,11 +112,12 @@ To get start quickly about virtual scrolling in our Scheduler, you can check on } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LDroiDXcqFUEFMys?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ![Displaying Virtual Scrolling in Blazor Scheduler](images/blazor-scheduler-virtualscrolling.gif) -## Virtual scrolling with templates +## Virtual Scrolling with Templates -In Blazor Scheduler, templates can be applied when [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property is enabled. In the following code, templates were applied to resources and appointments. +In Blazor Scheduler, templates can be applied when [`AllowVirtualScrolling`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_AllowVirtualScrolling) property is enabled. In the following code, templates are applied to resources and appointments. ```cshtml @using Syncfusion.Blazor.Schedule @@ -235,18 +236,20 @@ In Blazor Scheduler, templates can be applied when [`AllowVirtualScrolling`](htt } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VDrSWjNGUFJdqUOm?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + N> For now, the virtual loading of resources and events is not supported in `Month Agenda`, `Year` and `TimelineYear` (Horizontal Orientation) views. By default Virtual scrolling displays only 30 resources. You can increase or decrease the number of resources by using [VirtualResourceCount](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_VirtualResourceCount) property. -## Enabling lazy loading for appointments +## Enabling Lazy Loading for Appointments -The lazy loading feature provides a convenient way to efficiently load resource appointments into the Scheduler using an on-demand approach. With this feature, you can seamlessly load a large volume of appointment data into the Scheduler without experiencing any performance degradation. +The lazy loading feature efficiently loads resource appointments into the Scheduler using an on-demand approach. This feature enables seamless loading of large volumes of appointment data without performance degradation. By default, the Scheduler fetches all the relevant appointments from the server with in the current date range. However, enabling this feature will trigger query requests to the server for appointment retrieval whenever new resources are rendered due to scroll actions. These queries contain the resource IDs of currently displayed resources along with current date range, which can be passed as a comma-separated string. In the server controller, these resource IDs are parsed to filter the necessary appointments to render in the scheduler. -When you enable this feature, the Scheduler becomes capable of fetching events from remote services only for the current view port alone to optimize the data retrieval. The remaining appointment data is fetched form the server on-demand based on currently rendered view port resources as you scroll's through the scheduler content. +When this feature is enabled, the Scheduler becomes capable of fetching events from remote services only for the current viewport to optimize data retrieval. The remaining appointment data is fetched from the server on-demand based on the currently rendered viewport resources as one scrolls through the Scheduler content. -To enable this feature, you have to set the [`EnableLazyLoading`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_Enablelazyloading) property to `true` within the view specific settings. +To enable this feature, set the [`EnableLazyLoading`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleView.html#Syncfusion_Blazor_Schedule_ScheduleView_Enablelazyloading) property to `true` within the view-specific settings. ```cshtml @using Syncfusion.Blazor diff --git a/blazor/scheduler/webassembly-performance.md b/blazor/scheduler/webassembly-performance.md index b792d0e6c5..5b7c408732 100644 --- a/blazor/scheduler/webassembly-performance.md +++ b/blazor/scheduler/webassembly-performance.md @@ -1,7 +1,7 @@ --- layout: post title: WebAssembly Performance in Blazor Scheduler Component | Syncfusion -description: This topic helps you to improve the performance of Web Assembly Application when using Syncfusion Blazor Scheduler components with some tips. +description: This topic helps to improve the performance of Web Assembly applications when using Syncfusion Blazor Scheduler components with some tips. platform: Blazor control: Scheduler documentation: ug @@ -11,13 +11,13 @@ documentation: ug This section provides performance guidelines for using Syncfusion® Scheduler component efficiently in Blazor WebAssembly application. The best practice or guidelines for general framework Blazor WebAssembly performance can be found [here](https://learn.microsoft.com/en-us/aspnet/core/blazor/performance?view=aspnetcore-7.0). -N> You can refer to our Getting Started with [Blazor Server-Side Scheduler](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-visual-studio) and [Blazor WebAssembly Scheduler](./how-to/blazor-web-assembly-scheduler) documentation pages for configuration specifications. +N> Refer to the Getting Started with [Blazor Server-Side Scheduler](https://blazor.syncfusion.com/documentation/getting-started/blazor-server-side-visual-studio) and [Blazor WebAssembly Scheduler](./how-to/blazor-web-assembly-scheduler) documentation pages for configuration specifications. -## Avoid unnecessary component renders +## Avoid Unnecessary Component Renders During Blazor Diffing Algorithm, every views of the Scheduler component and its child component will be checked for re-rendering. For instance, having **EventCallBack** on the application or Scheduler will check every child component, once event callback is completed. -You can have fine-grained control over Scheduler component rendering. **PreventRender** method helps to avoid unnecessary re-rendering of the Scheduler component. This method internally overrides the **ShouldRender** method of the Scheduler to prevent rendering. +Fine-grained control over Scheduler component rendering is achievable. The [`PreventRender`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_PreventRender) method helps to avoid unnecessary re-rendering of the Scheduler component. Internally, this method overrides the `ShouldRender` method of the Scheduler to prevent rendering. In the following example: @@ -67,11 +67,11 @@ In the following example: N> * **PreventRender** method accepts boolean argument that accepts true or false to disable or enable rendering respectively.
* **PreventRender** method can be used only after Scheduler component completed initial rendering. Calling this method during initial rendering will not have any effect. -## Avoid unnecessary component renders after Scheduler events +## Avoid Unnecessary Component Renders after Scheduler Events When a callback method is assigned to the Scheduler events, then the **StateHasChanged** will be called in parent component of the Scheduler automatically once the event is completed. -You can prevent this re-rendering of the Scheduler component by calling the **PreventRender** method. +This re-rendering of the Scheduler component can be prevented by calling the `PreventRender` method. In the following example: @@ -131,4 +131,4 @@ In the following example: N> * **PreventRender** method internally overrides the **ShouldRender** method of the Scheduler to prevent rendering.
* It is recommended to use **PreventRender** method for user interactive events such as OnCellClick, OnEventClick etc. for better performance. -
* For events without any argument such as **DataBound**, you can use **PreventRender** method of the Scheduler to disable rendering. \ No newline at end of file +
* For events without arguments, such as `DataBound`, the `PreventRender` method of the Scheduler can be used to disable rendering. \ No newline at end of file diff --git a/blazor/scheduler/working-hours.md b/blazor/scheduler/working-hours.md index dcb5861574..6817b2e376 100644 --- a/blazor/scheduler/working-hours.md +++ b/blazor/scheduler/working-hours.md @@ -9,21 +9,21 @@ documentation: ug # Working Days and Hours in Blazor Scheduler Component -The Scheduler can be customized on various aspects as well as it inherits almost all the calendar-specific features such as options, +The Scheduler offers extensive customization for various aspects, inheriting almost all calendar-specific features, such as options for: -- To set custom time range display on Scheduler -- To set different working hours -- To set different working days -- To set different first day of week -- To show/hide weekend days -- To show the week number +* Customizing the time range display on the Scheduler. +* Setting different working hours. +* Setting different working days. +* Setting a different first day of the week. +* Showing/hiding weekend days. +* Showing the week number. -To get start quickly about customize the working days and hours in our Scheduler, you can check on this video: +To get started quickly with customizing the working days and hours in the Scheduler, refer to this video: {% youtube "youtube:https://www.youtube.com/watch?v=PcFr6bc_yhE-0"%} -## Set working days +## Set Working Days By default, Scheduler considers the week days from Monday to Friday as `WorkDays` and therefore defaults to [1,2,3,4,5] - where 1 represents Monday, 2 represents Tuesday and so on. The days which are not defined in this working days collection are considered as non-working days. Therefore, when the weekend days are set to hide from Scheduler, all those non-working days too get hidden from the layout. @@ -63,15 +63,17 @@ The following example code depicts how to set the Scheduler to display Monday, W } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/htheCNZQAFHpczJK?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Set Working Days in Blazor Scheduler](images/blazor-scheduler-workdays.png) -## Dynamically setting work days +## Dynamically Setting Work Days The `SetWorkDaysAsync` and `ResetWorkDaysAsync` methods can be used to dynamically set and reset work days in the Scheduler. The `SetWorkDaysAsync` method accepts a list of dates to be set as working days, whereas `ResetWorkDaysAsync` resets specified work days when dates are passed and resets all the days in the current view to non-working days when called without passing any dates. -Before setting up custom working days, you need to reset the default work days using the `ResetWorkDaysAsync` method. Note that both methods do not accept dates with an unspecified kind. +Before setting up custom working days, reset the default work days using the `ResetWorkDaysAsync` method. Note that both methods do not accept dates with an unspecified `DateTimeKind`. -In this example, we retrieve the current view dates during initial rendering, date and view navigations and reset all days to non-working days using `ResetWorkDaysAsync`. Then we remove common holiday dates from the current view dates. Then we loop through each resource and for each resource we exclude resource specific leave dates from the working dates and set their available days as working days using `SetWorkDaysAsync` method. +In this example, the code first retrieves the current view dates during initial rendering, date, and view navigations. Then, it resets all days to non-working days using `ResetWorkDaysAsync`. Next, it removes common holiday dates from the current view dates. Finally, it loops through each resource, excludes resource-specific leave dates from the working dates, and sets the available days for each resource as working days using the `SetWorkDaysAsync` method. ```cshtml @using Syncfusion.Blazor.Schedule @@ -174,9 +176,12 @@ In this example, we retrieve the current view dates during initial rendering, da } } ``` + +{% previewsample "https://blazorplayground.syncfusion.com/embed/LDryCNXQgFcDQbms?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Set dynamic work Days in Blazor Scheduler](images/blazor-scheduler-setWorkDays-resetWorkDays.png) -## Hiding weekend days +## Hiding Weekend Days The [`ShowWeekend`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_ShowWeekend) property is used to either show or hide the weekend days of a week and it is not applicable on Work week view (as non-working days are usually not displayed on work week view). By default, it is set to `true`. The days which are not a part of the working days collection of a Scheduler are usually considered as non-working or weekend days. @@ -212,9 +217,11 @@ Here, the working days are defined as [1, 3, 4, 5] on Scheduler and therefore th } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/VXrIsNZmKbwvTnyr?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Hiding Weekend Days in Blazor Scheduler](images/blazor-scheduler-hide-weekend.png) -## Show week numbers +## Show Week Numbers It is possible to show the week number count of a week in the header bar of the Scheduler by setting true to the [`ShowWeekNumber`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_ShowWeekNumber) property. By default, its default value is `false`. In Month view, the week numbers are displayed as a first column. @@ -247,9 +254,11 @@ N> The [`ShowWeekNumber`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazo } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rNroMjtQgFvUlIFu?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Week Numbers in Blazor Scheduler](images/blazor-scheduler-weeknumber.png) -### Different options in showing week numbers +### Different Options in Showing Week Numbers By default, week numbers are shown in the Scheduler based on the first day of the year. However, the week numbers can be determined based on the following criteria by setting the `WeekRule` property with `CalendarWeekRule` enumeration. @@ -289,7 +298,7 @@ For more details refer to [this link](https://learn.microsoft.com/en-us/dotnet/a } ``` -## Set working hours +## Set Working Hours Working hours indicates the work hour limit within the Scheduler, which is visually highlighted with an active color on work cells. The working hours can be set on Scheduler using the [`ScheduleWorkhours`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.ScheduleWorkHours.html) which includes the following sub-options, @@ -324,11 +333,13 @@ Working hours indicates the work hour limit within the Scheduler, which is visua } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/BNrIWZZwqFuILIyZ?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Set Working Hours in Blazor Scheduler](images/blazor-scheduler-workhours.png) -## Scheduler displaying custom hours +## Scheduler Displaying Custom Hours -It is possible to display the event Scheduler layout with specific time durations by hiding the unwanted hours. To do so, set the start and end hour for the Scheduler using the [`StartHour`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_StartHour) and [`EndHour`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EndHour) properties respectively. +The Scheduler layout can display specific time durations by hiding unwanted hours. To do so, set the start and end hour for the Scheduler using the [`StartHour`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_StartHour) and [`EndHour`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_EndHour) properties respectively. The following code example displays the Scheduler starting from the time range 7.00 AM to 6.00 PM and the remaining hours are hidden on the UI. @@ -358,9 +369,11 @@ The following code example displays the Scheduler starting from the time range 7 } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/rNroMNDmKutBWZxP?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Displaying Custom Hours in Blazor Scheduler](images/blazor-scheduler-displayhours.png) -## Setting start day of the week +## Setting Start Day of the Week By default, Scheduler defaults to `Sunday` as its first day of a week. To change the Scheduler's start day of a week with different day, set the [`FirstDayOfWeek`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_FirstDayOfWeek) property with the values ranging from 0 to 6. @@ -393,11 +406,13 @@ N> Here, Sunday is always denoted as 0, Monday as 1 and so on. } ``` +{% previewsample "https://blazorplayground.syncfusion.com/embed/LtLyCDtwAaXFKHPc?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ![Start Day of Week in Blazor Scheduler](images/blazor-scheduler-week-firstday.png) -## Scroll to specific time and date +## Scroll to Specific Time and Date -You can manually scroll to a specific time on Scheduler by making use of the [`ScrollToAsync`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_ScrollToAsync_System_String_System_Nullable_System_DateTime__) method as depicted in the following code example. +Manually scroll to a specific time on the Scheduler by using the [`ScrollToAsync`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Schedule.SfSchedule-1.html#Syncfusion_Blazor_Schedule_SfSchedule_1_ScrollToAsync_System_String_System_Nullable_System_DateTime__) method as depicted in the following code example. ```cshtml @using Syncfusion.Blazor.Schedule @@ -448,7 +463,9 @@ You can manually scroll to a specific time on Scheduler by making use of the [`S } ``` -## See also +{% previewsample "https://blazorplayground.syncfusion.com/embed/BNroCXtQAYioVhwr?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## See Also - [To display the current time indicator](./timescale#highlighting-current-date-and-time) - [To set different working hours for each resources](./resources#set-different-work-hours)