@eclipse-scout/core
Version:
Eclipse Scout runtime
121 lines (104 loc) • 3.79 kB
text/typescript
/*
* Copyright (c) 2010, 2024 BSI Business Systems Integration AG
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*/
import {Calendar, CalendarComponentMoveEvent, dates, Event, JsonDateRange, ModelAdapter, ResourceVisibilityChangeEvent, SelectedResourceChangeEvent} from '../index';
export class CalendarAdapter extends ModelAdapter {
declare widget: Calendar;
constructor() {
super();
this._addRemoteProperties(['showCalendarSidebar', 'showResourcePanel', 'showListPanel']);
}
/**
* We must send the view-range to the client-model on the server. The view-range is determined by the UI.
* Thus, the calendar cannot be completely initialized without the view-range from the UI.
* @internal
*/
override _postCreateWidget() {
this._sendViewRangeChange();
}
protected override _onWidgetEvent(event: Event<Calendar>) {
if (event.type === 'viewRangeChange') {
this._sendViewRangeChange();
} else if (event.type === 'modelChange') {
this._sendModelChange();
} else if (event.type === 'selectionChange') {
this._sendSelectionChange();
} else if (event.type === 'componentMove') {
this._sendComponentMove(event as CalendarComponentMoveEvent);
} else if (event.type === 'selectedRangeChange') {
this._sendSelectedRangeChange();
} else if (event.type === 'resourceVisibilityChange') {
this._sendResourceVisibilityChange(event as ResourceVisibilityChangeEvent);
} else if (event.type === 'selectedResourceChange') {
this._sendSelectedResourceChange(event as SelectedResourceChangeEvent);
} else {
super._onWidgetEvent(event);
}
}
protected _jsonViewRange(): JsonDateRange {
return dates.toJsonDateRange(this.widget.viewRange);
}
protected _jsonSelectedRange(): JsonDateRange {
if (!this.widget.selectedRange) {
return null;
}
return dates.toJsonDateRange(this.widget.selectedRange);
}
protected _jsonSelectedDate(): string {
return dates.toJsonDate(this.widget.selectedDate);
}
protected _sendViewRangeChange() {
this._send('viewRangeChange', {
viewRange: this._jsonViewRange()
});
}
_sendSelectedRangeChange() {
this._send('selectedRangeChange', {
selectedRange: this._jsonSelectedRange()
});
}
protected _sendModelChange() {
let data = {
viewRange: this._jsonViewRange(),
selectedDate: this._jsonSelectedDate(),
displayMode: this.widget.displayMode
};
this._send('modelChange', data);
}
protected _sendSelectionChange() {
let selectedComponentId = this.widget.selectedComponent ? this.widget.selectedComponent.id : null;
this._send('selectionChange', {
date: this._jsonSelectedDate(),
componentId: selectedComponentId
});
}
protected _sendComponentMove(event: CalendarComponentMoveEvent) {
this._send('componentMove', {
componentId: event.component.id,
fromDate: event.component.fromDate,
toDate: event.component.toDate
});
}
protected _sendResourceVisibilityChange(event: ResourceVisibilityChangeEvent) {
this._send('resourceVisibilityChange', {
resourceId: event.resourceId,
visible: event.visible
});
}
protected _sendSelectedResourceChange(event: SelectedResourceChangeEvent) {
let resourceId = event.resourceId;
// Do not send the default resource to java, because it's not known there
if (event.resourceId === this.widget.defaultResource.resourceId) {
resourceId = null;
}
this._send('selectedResourceChange', {
resourceId: resourceId
});
}
}