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