$(function() {
var BASE_PATH = "https://js.devexpress.com/Demos/NetCore/";
var url = BASE_PATH + "api/SchedulerSignalR";
var createScheduler = function(index) {
$("#scheduler" + index).dxScheduler({
timeZone: "America/Los_Angeles",
dataSource: DevExpress.data.AspNet.createStore({
key: "AppointmentId",
loadUrl: url,
insertUrl: url,
updateUrl: url,
deleteUrl: url,
onBeforeSend: function(method, ajaxOptions) {
ajaxOptions.xhrFields = { withCredentials: true };
}
}),
remoteFiltering: true,
views: ["day", "workWeek"],
currentView: "day",
currentDate: new Date(2021, 4, 25),
startDayHour: 9,
endDayHour: 19,
height: 600,
dateSerializationFormat: "yyyy-MM-ddTHH:mm:ssZ",
textExpr: "Text",
descriptionExpr: "Description",
startDateExpr: "StartDate",
endDateExpr: "EndDate",
allDayExpr: "AllDay"
});
};
createScheduler(1);
createScheduler(2);
var store1 = $("#scheduler1").dxScheduler("getDataSource").store();
var store2 = $("#scheduler2").dxScheduler("getDataSource").store();
var connection = new signalR.HubConnectionBuilder()
.withUrl(BASE_PATH + "schedulerSignalRHub", {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
})
.configureLogging(signalR.LogLevel.Information)
.build();
connection.start()
.then(function () {
connection.on("update", function (key, data) {
store1.push([{ type: "update", key: key, data: data }]);
store2.push([{ type: "update", key: key, data: data }]);
});
connection.on("insert", function (data) {
store1.push([{ type: "insert", data: data }]);
store2.push([{ type: "insert", data: data }]);
});
connection.on("remove", function (key) {
store1.push([{ type: "remove", key: key }]);
store2.push([{ type: "remove", key: key }]);
});
});
});
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>DevExtreme Demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script>
<script src="../signalr-session-id.js"></script>
<script src="js/signalr.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.4/css/dx.common.css" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.4/css/dx.light.css" />
<script src="https://cdn3.devexpress.com/jslib/20.2.4/js/dx.all.js"></script>
<script src="https://unpkg.com/devextreme-aspnet-data@2.7.1/js/dx.aspnet.data.js"></script>
<script src="index.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body class="dx-viewport">
<div class="demo-container">
<div class="schedulers">
<div class="column-1">
<div id="scheduler1"></div>
</div>
<div class="column-2">
<div id="scheduler2"></div>
</div>
</div>
</div>
</body>
</html>
.schedulers {
display: flex;
}
.column-1 {
padding-right: 5px;
}
.column-2 {
padding-left: 5px;
}
.dx-scheduler-small .dx-scheduler-view-switcher.dx-tabs {
display: table;
}