| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import {Component, forwardRef} from '@angular/core'; |
| import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; |
| import {Moment} from 'moment-timezone'; |
| import {LogsContainerService} from '@app/services/logs-container.service'; |
| import {ListItem} from '@app/classes/list-item'; |
| import {TimeUnitListItem} from '@app/classes/filtering'; |
| import {LogsFilteringUtilsService} from '@app/services/logs-filtering-utils.service'; |
| |
| @Component({ |
| selector: 'time-range-picker', |
| templateUrl: './time-range-picker.component.html', |
| styleUrls: ['./time-range-picker.component.less'], |
| providers: [ |
| { |
| provide: NG_VALUE_ACCESSOR, |
| useExisting: forwardRef(() => TimeRangePickerComponent), |
| multi: true |
| } |
| ] |
| }) |
| export class TimeRangePickerComponent implements ControlValueAccessor { |
| |
| startTime: Moment; |
| |
| endTime: Moment; |
| |
| private onChange: (fn: any) => void; |
| |
| private timeRange?: TimeUnitListItem; |
| |
| constructor( |
| private logsContainer: LogsContainerService, |
| private logsFilteringUtilsService: LogsFilteringUtilsService |
| ) {} |
| |
| get quickRanges(): (ListItem | TimeUnitListItem[])[] { |
| return this.logsContainer.filters.timeRange.options; |
| } |
| |
| get selection(): TimeUnitListItem { |
| return this.timeRange; |
| } |
| |
| set selection(newValue: TimeUnitListItem) { |
| this.timeRange = newValue; |
| if (this.onChange) { |
| this.onChange(newValue); |
| } |
| this.setEndTime(this.logsFilteringUtilsService.getEndTimeMomentFromTimeUnitListItem(newValue, this.logsContainer.timeZone)); |
| this.setStartTime(this.logsFilteringUtilsService.getStartTimeMomentFromTimeUnitListItem( |
| newValue, this.endTime, this.logsContainer.timeZone |
| )); |
| } |
| |
| setStartTime(timeObject: Moment): void { |
| this.startTime = timeObject; |
| } |
| |
| setEndTime(timeObject: Moment): void { |
| this.endTime = timeObject; |
| } |
| |
| setTimeRange(value: any, label: string): void { |
| this.selection = {label, value}; |
| } |
| |
| setCustomTimeRange(): void { |
| this.selection = { |
| label: this.logsContainer.customTimeRangeKey, |
| value: { |
| type: 'CUSTOM', |
| start: this.startTime, |
| end: this.endTime |
| } |
| }; |
| } |
| |
| writeValue(selection: TimeUnitListItem): void { |
| this.selection = selection; |
| } |
| |
| registerOnChange(callback: any): void { |
| this.onChange = callback; |
| } |
| |
| registerOnTouched(): void { |
| } |
| |
| } |