4b8f2a63d8
11. Continue statt Review Dataset (im Step 3) 12. keywords auf default 'uncontrolled' einfrieren 14. Lizenzen mit Links versehen 19. Timezone: 'timezone' => 'Europe/Vienna' 20. angefangen mit RDR -> TETHYS Unbenennungen 21. translated validation ausgebessert 22. dataset als Typescript Instanz
118 lines
2.8 KiB
TypeScript
118 lines
2.8 KiB
TypeScript
import EasyTimer from 'easytimer';
|
|
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
|
|
|
|
@Component
|
|
export default class VueCountdown extends Vue {
|
|
// props: {
|
|
// seconds: Number,
|
|
// countdown: Boolean,
|
|
// message: String,
|
|
// date: String,
|
|
// units: Array,
|
|
// start: {
|
|
// type: Boolean,
|
|
// default: true
|
|
// }
|
|
// },
|
|
|
|
@Prop(Number)
|
|
seconds;
|
|
@Prop(Boolean)
|
|
countdown;
|
|
@Prop([String])
|
|
message;
|
|
@Prop([String])
|
|
date;
|
|
@Prop([Array])
|
|
units;
|
|
@Prop({ default: true, type: Boolean })
|
|
start: boolean;
|
|
|
|
|
|
// data () {
|
|
// return {
|
|
// timer: null,
|
|
// time: '',
|
|
// label: this.message ? this.message : 'Time\'s up!',
|
|
// timerUnits: this.units ? this.units : ['hours', 'minutes', 'seconds'],
|
|
// timerOptions: {}
|
|
// };
|
|
// },
|
|
|
|
warningSeconds: Number = this.seconds;
|
|
timer: EasyTimer = null;
|
|
time: string = '';
|
|
label: string = this.message ? this.message : 'Time\'s up!';
|
|
timerUnits = this.units ? this.units : ['hours', 'minutes', 'seconds'];
|
|
timerOptions = {
|
|
startValues: {},
|
|
// target: {},
|
|
countdown: true,
|
|
current_page: 0,
|
|
data: []
|
|
};
|
|
|
|
get parsedDate(): number {
|
|
if (!this.date) {
|
|
return 0;
|
|
}
|
|
return Date.parse(this.date);
|
|
}
|
|
|
|
created() {
|
|
this.timer = new EasyTimer();
|
|
|
|
const parsedDate = this.parsedDate;
|
|
const now = Date.now();
|
|
|
|
let seconds = this.seconds;
|
|
this.timerOptions.countdown = true;
|
|
|
|
// = {
|
|
// countdown: true
|
|
// };
|
|
|
|
if (!parsedDate && this.date) {
|
|
throw new Error('Please provide valid date');
|
|
}
|
|
|
|
if (now < parsedDate) {
|
|
seconds = (parsedDate - now) / 1000;
|
|
}
|
|
|
|
this.timerOptions.startValues = {
|
|
seconds: seconds
|
|
};
|
|
|
|
if (this.start) {
|
|
this.timer.start(this.timerOptions);
|
|
}
|
|
|
|
this.time = this.timer.getTimeValues().toString(this.timerUnits);
|
|
|
|
this.timer.addEventListener('secondsUpdated', this.onTimeChange.bind(this));
|
|
this.timer.addEventListener('targetAchieved', this.onTimeExpire.bind(this));
|
|
}
|
|
|
|
|
|
onTimeChange() {
|
|
this.warningSeconds = this.timer.getTotalTimeValues().seconds;
|
|
this.time = this.timer.getTimeValues().toString(this.timerUnits);
|
|
}
|
|
|
|
onTimeExpire() {
|
|
this.$emit('time-expire');
|
|
this.time = this.label;
|
|
}
|
|
|
|
|
|
@Watch('start')
|
|
onStartChanged(newValue) {
|
|
if (newValue) {
|
|
this.timer.start(this.timerOptions);
|
|
} else {
|
|
this.timer.stop();
|
|
}
|
|
}
|
|
|
|
} |