// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import * as Backbone from 'backbone'; import * as moment from 'moment'; import { LocalizerType } from '../types/Util'; type ExpirationTime = [ number, ( | 'second' | 'seconds' | 'minute' | 'minutes' | 'hour' | 'hours' | 'day' | 'week' ) ]; const EXPIRATION_TIMES: Array = [ [0, 'seconds'], [5, 'seconds'], [10, 'seconds'], [30, 'seconds'], [1, 'minute'], [5, 'minutes'], [30, 'minutes'], [1, 'hour'], [6, 'hours'], [12, 'hours'], [1, 'day'], [1, 'week'], ]; export const TimerOption = Backbone.Model.extend({ getName(i18n: LocalizerType) { return ( i18n(['timerOption', this.get('time'), this.get('unit')].join('_')) || moment.duration(this.get('time'), this.get('unit')).humanize() ); }, getAbbreviated(i18n: LocalizerType) { return i18n( ['timerOption', this.get('time'), this.get('unit'), 'abbreviated'].join( '_' ) ); }, }); export const ExpirationTimerOptions = new (Backbone.Collection.extend({ model: TimerOption, getName(i18n: LocalizerType, seconds = 0) { const o = this.findWhere({ seconds }); if (o) { return o.getName(i18n); } return [seconds, 'seconds'].join(' '); }, getAbbreviated(i18n: LocalizerType, seconds = 0) { const o = this.findWhere({ seconds }); if (o) { return o.getAbbreviated(i18n); } return [seconds, 's'].join(''); }, }))( EXPIRATION_TIMES.map(o => { const duration = moment.duration(o[0], o[1]); // 5, 'seconds' return { time: o[0], unit: o[1], seconds: duration.asSeconds(), }; }) );