forked from platypush/platypush
Added TimeInterval
component.
This commit is contained in:
parent
6edb8c8318
commit
bac06e9e7b
1 changed files with 131 additions and 0 deletions
|
@ -0,0 +1,131 @@
|
|||
<template>
|
||||
<div class="time-interval-container">
|
||||
<div class="row">
|
||||
<div class="value-container">
|
||||
<input type="number" v-model="duration" :step="step" />
|
||||
</div>
|
||||
|
||||
<div class="unit-container">
|
||||
<select v-model="selectedUnit">
|
||||
<option v-for="u in units" :key="u.value" :value="u.value">
|
||||
{{ u.label }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
emits: ['input'],
|
||||
props: {
|
||||
// The value of the time interval, in seconds.
|
||||
value: {
|
||||
type: Number,
|
||||
},
|
||||
|
||||
// The increment to use when changing the value.
|
||||
step: {
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
duration: null,
|
||||
selectedUnit: 'second',
|
||||
units: {
|
||||
'second': {
|
||||
label: 'Seconds',
|
||||
value: 'second',
|
||||
multiplier: 1,
|
||||
},
|
||||
|
||||
'minute': {
|
||||
label: 'Minutes',
|
||||
value: 'minute',
|
||||
multiplier: 60,
|
||||
},
|
||||
|
||||
'hour': {
|
||||
label: 'Hours',
|
||||
value: 'hour',
|
||||
multiplier: 3600,
|
||||
},
|
||||
|
||||
'day': {
|
||||
label: 'Days',
|
||||
value: 'day',
|
||||
multiplier: 86400,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
unit() {
|
||||
return this.units[this.selectedUnit]
|
||||
},
|
||||
|
||||
multiplier() {
|
||||
return this.unit.multiplier
|
||||
},
|
||||
|
||||
seconds() {
|
||||
if (this.duration == null)
|
||||
return null
|
||||
|
||||
return this.toSeconds(this.duration)
|
||||
},
|
||||
},
|
||||
|
||||
watch: {
|
||||
seconds(value) {
|
||||
if (value === null)
|
||||
return
|
||||
|
||||
this.duration = this.toUnit(value)
|
||||
this.$emit('input', value)
|
||||
},
|
||||
|
||||
value(value) {
|
||||
this.duration = this.toUnit(value)
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
toSeconds(value) {
|
||||
return value == null ? null : value * this.multiplier
|
||||
},
|
||||
|
||||
toUnit(value) {
|
||||
return value == null ? null : value / this.multiplier
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.time-interval-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.value-container {
|
||||
input {
|
||||
width: 7.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.unit-container {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
}
|
||||
</style>
|
Loading…
Reference in a new issue