@eclipse-scout/core
Version:
Eclipse Scout runtime
92 lines (76 loc) • 2.96 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 {CalendarSidebarLayout, CalendarSidebarModel, CalendarSidebarSplitter, Event, HtmlComponent, InitModelOf, ResourcePanel, scout, SplitterPositionChangeEvent, Widget, YearPanel} from '../index';
export class CalendarSidebar extends Widget implements CalendarSidebarModel {
declare model: CalendarSidebarModel;
yearPanel: YearPanel;
splitter: CalendarSidebarSplitter;
resoucePanel: ResourcePanel;
resourcePanelDisplayable: boolean;
/**
* Indicates, if the layout process is animated or not
*/
protected _animationEnabled: boolean;
constructor() {
super();
this.yearPanel = null;
this.splitter = null;
this.resoucePanel = null;
this.resourcePanelDisplayable = false;
this._animationEnabled = false;
this._addWidgetProperties(['yearPanel', 'resourcePanel']);
}
override init(model: InitModelOf<this>) {
super.init(model);
this.yearPanel = scout.create(YearPanel, {
parent: this
});
this.splitter = scout.create(CalendarSidebarSplitter, {
parent: this,
splitHorizontal: false,
collapsedLabel: this.session.text('ui.CalendarSelection')
});
this.resoucePanel = scout.create(ResourcePanel, {
parent: this,
checkable: true
});
this.splitter.on('positionChange', this._onSplitterPositionChange.bind(this));
this.splitter.on('splitterClick', this._onSplitterClick.bind(this));
}
protected override _render() {
this.$container = this.$parent.appendDiv('calendar-sidebar');
this.htmlComp = HtmlComponent.install(this.$container, this.session);
this.htmlComp.setLayout(new CalendarSidebarLayout(this));
this.yearPanel.render();
this.splitter.render();
this.resoucePanel.render();
}
protected _onSplitterPositionChange(event: SplitterPositionChangeEvent) {
this.invalidateLayoutTree(false);
}
protected _onSplitterClick(event: Event<CalendarSidebarSplitter>) {
this.setResourcePanelExpanded(this.splitter.collapsed, true);
}
setResourcePanelExpanded(expanded: boolean, animate = false) {
if (this.splitter.collapsed !== undefined && this.splitter.collapsed !== expanded) {
return;
}
// 62 is the golden ratio
(this.htmlComp.layout as CalendarSidebarLayout).setNewSplitterPositionPercentage(expanded ? 62 : 100, animate);
this.invalidateLayoutTree(false);
}
setResourcePanelDisplayable(displayable: boolean) {
this.setProperty('resourcePanelDisplayable', displayable);
}
protected _setResourcePanelDisplayable(displayable: boolean) {
this._setProperty('resourcePanelDisplayable', displayable);
this.invalidateLayoutTree(false);
}
}