{props.data.color && (
(
{props.data.text}
);
-export default AppointmentMenuTemplate;
+export default ItemTemplate;
diff --git a/apps/demos/Demos/Scheduler/ContextMenu/ReactJs/styles.css b/apps/demos/Demos/Scheduler/ContextMenu/ReactJs/styles.css
index 7d52d89364e2..41fb881541dd 100644
--- a/apps/demos/Demos/Scheduler/ContextMenu/ReactJs/styles.css
+++ b/apps/demos/Demos/Scheduler/ContextMenu/ReactJs/styles.css
@@ -1,13 +1,3 @@
-.dx-menu-item-content span {
- margin-right: 5px;
-}
-
-.dx-menu-item-has-submenu .dx-icon-spinright {
- position: absolute;
- top: 7px;
- right: 2px;
-}
-
.item-badge {
text-align: center;
float: left;
diff --git a/apps/demos/Demos/Scheduler/ContextMenu/Vue/App.vue b/apps/demos/Demos/Scheduler/ContextMenu/Vue/App.vue
index ed78632e61ec..144de8b2a47e 100644
--- a/apps/demos/Demos/Scheduler/ContextMenu/Vue/App.vue
+++ b/apps/demos/Demos/Scheduler/ContextMenu/Vue/App.vue
@@ -1,7 +1,6 @@
+
@@ -46,85 +46,106 @@ import { resourcesData, data } from './data.ts';
import type { ContextMenuItem } from './types';
const views = ['day', 'month'];
-const appointmentClassName = '.dx-scheduler-appointment';
-const cellClassName = '.dx-scheduler-date-table-cell';
const currentDate = ref(new Date(2020, 10, 25));
const dataSource = data;
-const groups = ref();
+const groups = ref([]);
const crossScrollingEnabled = ref(false);
-const disabled = ref(true);
const contextMenuItems = ref([]);
-const target = ref(appointmentClassName);
-const schedulerRef = ref();
-function onAppointmentContextMenu(
- { appointmentData, targetedAppointmentData }: DxSchedulerTypes.AppointmentContextMenuEvent,
-) {
- const scheduler = schedulerRef.value!.instance!;
- const resourceItems = resourcesData.map((item) => ({
- ...item,
- onItemClick: (
- { itemData }: DxContextMenuTypes.ItemClickEvent,
- ) => scheduler?.updateAppointment(appointmentData, {
- ...appointmentData,
- ...{ roomId: [itemData?.id] },
- }),
- }));
- target.value = appointmentClassName;
- disabled.value = false;
- contextMenuItems.value = [
+const onAppointmentContextMenu = (e: DxSchedulerTypes.AppointmentContextMenuEvent) => {
+ const items = getAppointmentContextMenuItems(e);
+ contextMenuItems.value = items;
+};
+
+const onCellContextMenu = (e: DxSchedulerTypes.CellContextMenuEvent) => {
+ const items = getCellContextMenuItems(e);
+ contextMenuItems.value = items;
+};
+
+const onContextMenuItemClick = (e: DxContextMenuTypes.ItemClickEvent) => {
+ e.itemData?.onItemClick?.(e);
+};
+
+const onContextMenuHiding = () => {
+ contextMenuItems.value = [];
+};
+
+const getAppointmentContextMenuItems = (
+ e: DxSchedulerTypes.AppointmentContextMenuEvent,
+): ContextMenuItem[] => {
+ const scheduler = e.component;
+ const { appointmentData: appointment, targetedAppointmentData: targetedAppointment } = e;
+
+ return [
{
text: 'Open',
- onItemClick: () => scheduler.showAppointmentPopup(appointmentData),
+ onItemClick: () => { scheduler.showAppointmentPopup(appointment); },
},
{
text: 'Delete',
- onItemClick: () => scheduler.deleteAppointment(appointmentData),
+ onItemClick: () => { scheduler.deleteAppointment(appointment); },
},
{
text: 'Repeat Weekly',
beginGroup: true,
- onItemClick: () => scheduler.updateAppointment(appointmentData, {
- startDate: targetedAppointmentData?.startDate,
- recurrenceRule: 'FREQ=WEEKLY',
- }),
+ onItemClick: () => {
+ scheduler.updateAppointment(appointment, {
+ ...appointment,
+ startDate: targetedAppointment?.startDate,
+ recurrenceRule: 'FREQ=WEEKLY',
+ });
+ },
+ },
+ {
+ text: 'Set Room',
+ beginGroup: true,
+ disabled: true,
},
- { text: 'Set Room', beginGroup: true, disabled: true },
- ...resourceItems,
+ ...resourcesData.map((item) => ({
+ ...item,
+ onItemClick: (clickEvent: DxContextMenuTypes.ItemClickEvent) => {
+ scheduler.updateAppointment(appointment, {
+ ...appointment,
+ roomId: [clickEvent.itemData?.id],
+ });
+ },
+ })),
];
-}
-function onCellContextMenu({ cellData }: DxSchedulerTypes.CellContextMenuEvent) {
- const scheduler = schedulerRef.value!.instance!;
- target.value = cellClassName;
- disabled.value = false;
- contextMenuItems.value = [
+};
+
+const getCellContextMenuItems = (
+ e: DxSchedulerTypes.CellContextMenuEvent,
+): ContextMenuItem[] => {
+ const scheduler = e.component;
+
+ return [
{
text: 'New Appointment',
- onItemClick: () => scheduler.showAppointmentPopup(
- { startDate: cellData.startDateUTC },
- true,
- ),
+ onItemClick: () => {
+ scheduler.showAppointmentPopup({
+ startDate: e.cellData.startDateUTC,
+ }, true);
+ },
},
{
text: 'New Recurring Appointment',
- onItemClick: () => scheduler.showAppointmentPopup(
- {
- startDate: cellData.startDateUTC,
+ onItemClick: () => {
+ scheduler.showAppointmentPopup({
+ startDate: e.cellData.startDateUTC,
recurrenceRule: 'FREQ=DAILY',
- },
- true,
- ),
+ }, true);
+ },
},
{
text: 'Group by Room/Ungroup',
beginGroup: true,
onItemClick: () => {
- if (groups.value) {
+ if (groups.value.length) {
+ groups.value = [];
crossScrollingEnabled.value = false;
- groups.value = undefined;
} else {
- crossScrollingEnabled.value = true;
groups.value = ['roomId'];
+ crossScrollingEnabled.value = true;
}
},
},
@@ -135,20 +156,6 @@ function onCellContextMenu({ cellData }: DxSchedulerTypes.CellContextMenuEvent)
},
},
];
-}
-function onContextMenuItemClick(e: DxContextMenuTypes.ItemClickEvent) {
- e.itemData?.onItemClick?.(e);
-}
-
-
-
+
diff --git a/apps/demos/Demos/Scheduler/ContextMenu/Vue/ItemTemplate.vue b/apps/demos/Demos/Scheduler/ContextMenu/Vue/ItemTemplate.vue
index c7ab935c8e3d..73d53e97738f 100644
--- a/apps/demos/Demos/Scheduler/ContextMenu/Vue/ItemTemplate.vue
+++ b/apps/demos/Demos/Scheduler/ContextMenu/Vue/ItemTemplate.vue
@@ -1,11 +1,13 @@
-
- {{ itemData.text }}
+
+
+ {{ itemData.text }}
+
diff --git a/apps/demos/Demos/Scheduler/ContextMenu/jQuery/index.html b/apps/demos/Demos/Scheduler/ContextMenu/jQuery/index.html
index 1a7ce213cb28..0aedfa1614b6 100644
--- a/apps/demos/Demos/Scheduler/ContextMenu/jQuery/index.html
+++ b/apps/demos/Demos/Scheduler/ContextMenu/jQuery/index.html
@@ -7,6 +7,7 @@
+
@@ -14,8 +15,8 @@