Skip to content

Commit a806b76

Browse files
committed
Merge branch 's-lee-kwong-timepicker' into v1.x
* s-lee-kwong-timepicker: Tweak time picker fix specs and dupe headers time only spec tweaks time support
2 parents 3f5f5ea + 3068f46 commit a806b76

File tree

6 files changed

+137
-3
lines changed

6 files changed

+137
-3
lines changed

demo/index.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,21 @@ <h2>12h datetime</h2>
6666
</div>
6767
</div>
6868

69+
<h2>Time</h2>
70+
<div class="example">
71+
<div class="example-inputs">
72+
<datetime type="time" v-model="time"></datetime>
73+
<div class="values">
74+
<p>
75+
<strong>Value:</strong> {{ time }}
76+
</p>
77+
</div>
78+
</div>
79+
<div class="example-code">
80+
<pre><code>&#x3C;datetime v-model=&#x22;time&#x22;&#x3E;&#x3C;/datetime&#x3E;</code></pre>
81+
</div>
82+
</div>
83+
6984
<h2>Macro tokens</h2>
7085
<div class="example">
7186
<div class="example-inputs">

demo/src/app.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ new Vue({
1111

1212
data () {
1313
return {
14+
time: '19:06',
1415
date: '2018-05-12T00:00:00.000Z',
1516
datetime: '2018-05-12T17:19:06.151Z',
1617
datetime12: '2018-05-12T17:19:06.151Z',

src/Datetime.vue

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,22 @@ export default {
134134
135135
computed: {
136136
inputValue () {
137-
const format = this.format || (this.type === 'date' ? DateTime.DATE_MED : DateTime.DATETIME_MED)
137+
let format = this.format
138+
139+
if (!format) {
140+
switch (this.type) {
141+
case 'date':
142+
format = DateTime.DATE_MED
143+
break
144+
case 'time':
145+
format = DateTime.TIME_24_SIMPLE
146+
break
147+
case 'datetime':
148+
case 'default':
149+
format = DateTime.DATETIME_MED
150+
break
151+
}
152+
}
138153
139154
if (typeof format === 'string') {
140155
return this.datetime ? DateTime.fromISO(this.datetime).setZone(this.zone).toFormat(format) : ''

src/DatetimePopup.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template>
22
<div class="vdatetime-popup">
33
<div class="vdatetime-popup__header">
4-
<div class="vdatetime-popup__year" @click="showYear">{{ year }}</div>
5-
<div class="vdatetime-popup__date">{{ dateFormatted }}</div>
4+
<div class="vdatetime-popup__year" @click="showYear" v-if="type !== 'time'">{{ year }}</div>
5+
<div class="vdatetime-popup__date" v-if="type !== 'time'">{{ dateFormatted }}</div>
66
</div>
77
<div class="vdatetime-popup__body">
88
<datetime-year-picker

src/util.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ export function createFlowManagerFromType (type) {
8888
case 'datetime':
8989
flow = ['date', 'time']
9090
break
91+
case 'time':
92+
flow = ['time']
93+
break
9194
default:
9295
flow = ['date']
9396
}

test/specs/Datetime.spec.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,21 @@ describe('Datetime.vue', function () {
281281
})
282282
})
283283
})
284+
285+
it('should be a time type', function (done) {
286+
const vm = createVM(this,
287+
`<Datetime type="time"></Datetime>`,
288+
{
289+
components: { Datetime }
290+
})
291+
292+
vm.$('.vdatetime-input').click()
293+
294+
vm.$nextTick(() => {
295+
expect(vm.$('.vdatetime-time-picker')).to.exist
296+
done()
297+
})
298+
})
284299
})
285300

286301
describe('value', function () {
@@ -373,6 +388,59 @@ describe('Datetime.vue', function () {
373388

374389
expect(vm.datetime).to.be.equal('2017-12-08T00:00:00.000+03:00')
375390
})
391+
392+
it('should be a time with the specified time zone', function (done) {
393+
const vm = createVM(this,
394+
`<Datetime v-model="datetime" type='time' zone='UTC-03:00'></Datetime>`,
395+
{
396+
components: { Datetime },
397+
data () {
398+
return {
399+
datetime: '2017-12-07T09:00:00.000Z'
400+
}
401+
}
402+
})
403+
404+
vm.$nextTick(() => {
405+
expect(vm.$('.vdatetime-input').value).to.be.equal('06:00')
406+
done()
407+
})
408+
})
409+
410+
it('should be a time in the local time zone on default', function (done) {
411+
const vm = createVM(this,
412+
`<Datetime v-model="datetime" type='time'></Datetime>`,
413+
{
414+
components: { Datetime },
415+
data () {
416+
return {
417+
datetime: '2017-12-07T09:00:00.000Z'
418+
}
419+
}
420+
})
421+
422+
vm.$nextTick(() => {
423+
const time = LuxonDateTime.fromISO('2017-12-07T09:00:00.000Z').toUTC().setZone('local').toLocaleString(LuxonDateTime.TIME_24_SIMPLE)
424+
425+
expect(vm.$('.vdatetime-input').value).to.be.equal(time)
426+
done()
427+
})
428+
})
429+
430+
it('should be a time converted to utc', function () {
431+
const vm = createVM(this,
432+
`<Datetime v-model="datetime" type='time' value-zone="UTC-05:00"></Datetime>`,
433+
{
434+
components: { Datetime },
435+
data () {
436+
return {
437+
datetime: '2017-12-05T00:00:00.000Z'
438+
}
439+
}
440+
})
441+
442+
expect(vm.datetime).to.be.equal('2017-12-04T19:00:00.000-05:00')
443+
})
376444
})
377445

378446
describe('input value', function () {
@@ -471,6 +539,38 @@ describe('Datetime.vue', function () {
471539
expect(vm.$('.vdatetime-input').value).to.be.equal('2017-12-07 19:34:54')
472540
})
473541

542+
it('should be formatted in the specified format (time)', function () {
543+
const vm = createVM(this,
544+
`<Datetime v-model="datetime" type="time" :format="format" zone="UTC+03:00"></Datetime>`,
545+
{
546+
components: { Datetime },
547+
data () {
548+
return {
549+
datetime: '2017-12-07T19:34:54.078+03:00',
550+
format: LuxonDateTime.TIME_24_WITH_SECONDS
551+
}
552+
}
553+
})
554+
555+
expect(vm.$('.vdatetime-input').value).to.be.equal('19:34:54')
556+
})
557+
558+
it('should be formatted in the specified macro format (time)', function () {
559+
const vm = createVM(this,
560+
`<Datetime v-model="datetime" type="time" :format="format" zone="UTC+03:00"></Datetime>`,
561+
{
562+
components: { Datetime },
563+
data () {
564+
return {
565+
datetime: '2017-12-07T19:34:54.078+03:00',
566+
format: 'HH:mm:ss'
567+
}
568+
}
569+
})
570+
571+
expect(vm.$('.vdatetime-input').value).to.be.equal('19:34:54')
572+
})
573+
474574
it('should be updated if value is updated', function (done) {
475575
const vm = createVM(this,
476576
`<Datetime v-model="datetime"></Datetime>`,

0 commit comments

Comments
 (0)