/** * A single opening hours range, shown on top of the OH-picker table */ import Svg from "../../Svg"; import {Utils} from "../../Utils"; import Combine from "../Base/Combine"; import {OH, OpeningHour} from "./OpeningHours"; import BaseUIElement from "../BaseUIElement"; import {FixedUiElement} from "../Base/FixedUiElement"; export default class OpeningHoursRange extends BaseUIElement { private _oh: OpeningHour; private readonly _onDelete: () => void; constructor(oh: OpeningHour, onDelete: () => void) { super(); this._oh = oh; this._onDelete = onDelete; this.SetClass("oh-timerange"); } InnerConstructElement(): HTMLElement { const height = this.getHeight(); const oh = this._oh; const startTime = new FixedUiElement(Utils.TwoDigits(oh.startHour) + ":" + Utils.TwoDigits(oh.startMinutes)) const endTime = new FixedUiElement(Utils.TwoDigits(oh.endHour) + ":" + Utils.TwoDigits(oh.endMinutes)) const deleteRange = Svg.delete_icon_ui() .SetClass("rounded-full w-6 h-6 block bg-black") .onClick(() => { this._onDelete() }); let content: BaseUIElement; if (height > 2) { content = new Combine([startTime, deleteRange, endTime]).SetClass("flex flex-col h-full justify-between"); } else { content = new Combine([deleteRange]).SetClass("flex flex-col h-full").SetStyle("flex-content: center; overflow-x: unset;") } const el = new Combine([content]).ConstructElement(); el.style.top = `${100 * OH.startTime(oh) / 24}%` el.style.height = `${100 * this.getHeight() / 24}%` return el; } private getHeight(): number { const oh = this._oh; let endhour = oh.endHour; if (oh.endHour == 0 && oh.endMinutes == 0) { endhour = 24; } return (endhour - oh.startHour + ((oh.endMinutes - oh.startMinutes) / 60)); } }