decide.nolog.cz/app/controllers/poll.ts

69 lines
1.7 KiB
TypeScript
Raw Normal View History

2018-12-29 01:27:37 +01:00
import Controller from '@ember/controller';
2023-10-15 17:32:11 +02:00
import { inject as service } from '@ember/service';
2018-12-29 01:27:37 +01:00
import { isPresent, isEmpty } from '@ember/utils';
2023-10-15 17:32:11 +02:00
import { action } from '@ember/object';
import { DateTime } from 'luxon';
2023-10-15 17:32:11 +02:00
import { tracked } from '@glimmer/tracking';
import type IntlService from 'ember-intl/services/intl';
import type RouterService from '@ember/routing/router-service';
import type { PollRouteModel } from 'croodle/routes/poll';
2014-10-30 21:44:22 +01:00
export default class PollController extends Controller {
@service declare intl: IntlService;
@service declare router: RouterService;
declare model: PollRouteModel;
queryParams = ['encryptionKey'];
encryptionKey = '';
2023-10-15 17:32:11 +02:00
@tracked timezoneChoosen = false;
@tracked shouldUseLocalTimezone = false;
get showExpirationWarning() {
2023-10-15 17:32:11 +02:00
const { model: poll } = this;
const { expirationDate } = poll;
if (isEmpty(expirationDate)) {
return false;
}
return (
DateTime.local().plus({ weeks: 2 }) >= DateTime.fromISO(expirationDate)
);
}
2015-07-07 11:52:46 +02:00
/*
* return true if current timezone differs from timezone poll got created with
*/
get timezoneDiffers() {
2023-10-15 17:32:11 +02:00
const { model: poll } = this;
const { timezone: pollTimezone } = poll;
return (
isPresent(pollTimezone) &&
Intl.DateTimeFormat().resolvedOptions().timeZone !== pollTimezone
);
}
get mustChooseTimezone() {
2018-12-29 20:35:04 +01:00
return this.timezoneDiffers && !this.timezoneChoosen;
}
get timezone() {
2023-10-15 17:32:11 +02:00
const { model: poll, shouldUseLocalTimezone } = this;
return shouldUseLocalTimezone || !poll.timezone ? undefined : poll.timezone;
}
@action
useLocalTimezone() {
2023-10-15 17:32:11 +02:00
this.shouldUseLocalTimezone = true;
this.timezoneChoosen = true;
}
@action
usePollTimezone() {
this.timezoneChoosen = true;
}
}