59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
|
|
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
|
import { StorageService } from '@app/services/storage.service';
|
|
import { StateService } from '@app/services/state.service';
|
|
import { timezones } from '@app/app.constants';
|
|
|
|
|
|
@Component({
|
|
selector: 'app-timezone-selector',
|
|
templateUrl: './timezone-selector.component.html',
|
|
styleUrls: ['./timezone-selector.component.scss'],
|
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
})
|
|
export class TimezoneSelectorComponent implements OnInit {
|
|
timezoneForm: UntypedFormGroup;
|
|
timezones = timezones;
|
|
localTimezoneOffset: string = '';
|
|
localTimezoneName: string;
|
|
|
|
constructor(
|
|
private formBuilder: UntypedFormBuilder,
|
|
private stateService: StateService,
|
|
private storageService: StorageService,
|
|
) { }
|
|
|
|
ngOnInit() {
|
|
this.setLocalTimezone();
|
|
this.timezoneForm = this.formBuilder.group({
|
|
mode: ['local'],
|
|
});
|
|
this.stateService.timezone$.subscribe((mode) => {
|
|
this.timezoneForm.get('mode')?.setValue(mode);
|
|
});
|
|
}
|
|
|
|
changeMode() {
|
|
const newMode = this.timezoneForm.get('mode')?.value;
|
|
this.storageService.setValue('timezone-preference', newMode);
|
|
this.stateService.timezone$.next(newMode);
|
|
}
|
|
|
|
setLocalTimezone() {
|
|
const offset = new Date().getTimezoneOffset();
|
|
const sign = offset <= 0 ? "+" : "-";
|
|
const absOffset = Math.abs(offset);
|
|
const hours = String(Math.floor(absOffset / 60));
|
|
const minutes = String(absOffset % 60).padStart(2, '0');
|
|
if (minutes === '00') {
|
|
this.localTimezoneOffset = `${sign}${hours}`;
|
|
} else {
|
|
this.localTimezoneOffset = `${sign}${hours.padStart(2, '0')}:${minutes}`;
|
|
}
|
|
|
|
const timezone = this.timezones.find(tz => tz.offset === this.localTimezoneOffset);
|
|
this.timezones = this.timezones.filter(tz => tz.offset !== this.localTimezoneOffset && tz.offset !== '+0');
|
|
this.localTimezoneName = timezone ? timezone.name : '';
|
|
}
|
|
}
|