diff --git a/.gitignore b/.gitignore index 8807004..c9019a2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ node_modules/ npm-debug.log test/coverage -dist yarn-error.log reports demo/dist +.idea +dist diff --git a/README.md b/README.md index 7505e2a..cf51bc5 100644 --- a/README.md +++ b/README.md @@ -113,12 +113,15 @@ phrases | `Object` | `{ok: 'Ok', cancel: 'Cancel'}` | Phrases. use12-hour | `Boolean` | `false` | Display 12 hour (AM/PM) mode hour-step | `Number` | `1` | Hour step. minute-step | `Number` | `1` | Minute step. -min-datetime | ISO 8601 `String` | `null` | Minimum datetime. -max-datetime | ISO 8601 `String` | `null` | Maximum datetime. +min-datetime | ISO 8601 `String` | `null` | Minimum datetime. NOTE: Has no effect when allowed-date-time-ranges is provided +max-datetime | ISO 8601 `String` | `null` | Maximum datetime. NOTE: Has no effect when allowed-date-time-ranges is provided auto | `Boolean` | `false` | Auto continue/close on select. week-start | `Number` | auto from locale if _weekstart_ is available or `1` | First day of the week. 1 is Monday and 7 is Sunday. flow | `Array` | Depends of *type* | Customize steps flow, steps available: time, date, month, year. Example: ['year', 'date', 'time'] title | `String` | `''` | Popup title. +hide-backdrop | `Boolean` | `false` | Show/Hide backdrop. +backdrop-click | `Boolean` | `true` | Enable/Disable backdrop click to cancel (outside click). +allowed-date-time-ranges | `Array` of `Array`'s of 2 `Datetime` | `[]` | Array of Arrays containing Allowed DateTime ranges i.e `[[DateTime.fromISO('2017-05-15T17:36'),DateTime.fromISO('2017-05-17T17:36')]]` (Allowed datetime ranges are the only selectable ranges) Input inherits all props not defined above but `style` and `class` will be inherited by root element. [See inheritAttrs option](https://vuejs.org/v2/api/#inheritAttrs) diff --git a/demo/index.html b/demo/index.html index 8876b66..67f393c 100644 --- a/demo/index.html +++ b/demo/index.html @@ -97,12 +97,11 @@

Macro tokens

-

Complete demo

+

Complete demo min-max

-
-
- +
+ Complete demo :max-datetime="maxDatetime" :week-start="7" use12-hour - auto - > - -
-

- Value: {{ datetimeEmpty }} -

+ auto> + + +
+

+ Value: {{ datetimeEmpty }} +

+
-
-
-
<datetime
+      
+
<datetime
   type="datetime"
   v-model="datetimeEmpty"
   input-class="my-class"
@@ -143,19 +142,48 @@ 

Complete demo

use12-hour auto ></datetime>
+
-
-

Theming

+

Complete demo ranges

-
-
- - -
-

- Value: {{ datetimeTheming }} -

+
+
+ + + +
+

+ Value: {{ datetimeEmpty }} +

+
+
+
+
<datetime
+  type="datetime"
+  v-model="datetimeEmpty"
+  input-class="my-class"
+  value-zone="America/New_York"
+  zone="Asia/Shanghai"
+  :format="{ year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: '2-digit', timeZoneName: 'short' }"
+  :phrases="{ok: 'Continue', cancel: 'Exit'}"
+  :allowed-date-time-ranges="allowedDateTimeRanges"
+  :week-start="7"
+  use12-hour
+  auto
+  ></datetime>
diff --git a/demo/src/app.js b/demo/src/app.js index 639a044..15e3375 100644 --- a/demo/src/app.js +++ b/demo/src/app.js @@ -1,5 +1,7 @@ import Vue from 'vue' -import { DateTime as LuxonDateTime } from 'luxon' +import { + DateTime as LuxonDateTime +} from 'luxon' import Datetime from '../../dist/vue-datetime' import '../../dist/vue-datetime.css' import './app.css' @@ -17,10 +19,32 @@ new Vue({ datetime12: '2018-05-12T17:19:06.151Z', datetime13: '2018-05-12T17:19:06.151Z', datetimeEmpty: '', - minDatetime: LuxonDateTime.local().minus({ month: 1, days: 3 }).toISO(), - maxDatetime: LuxonDateTime.local().plus({ days: 3 }).toISO(), + allowedDateTimeRanges: [ + [ + LuxonDateTime.local().minus({ + days: 5 + }), + LuxonDateTime.local().minus({ + days: 2 + }) + ], + [ + LuxonDateTime.local().plus({ + days: 3 + }), + LuxonDateTime.local().plus({ + days: 5 + }) + ] + ], + minDatetime: LuxonDateTime.local().minus({ + month: 1, + days: 3 + }).toISO(), + maxDatetime: LuxonDateTime.local().plus({ + days: 3 + }).toISO(), datetimeTheming: LuxonDateTime.local().toISO() } } }) - diff --git a/src/Datetime.vue b/src/Datetime.vue index 20c605e..e64f23d 100644 --- a/src/Datetime.vue +++ b/src/Datetime.vue @@ -14,7 +14,7 @@ -
+
import { DateTime } from 'luxon' import DatetimePopup from './DatetimePopup' -import { datetimeFromISO, startOfDay, weekStart } from './util' +import { datetimeFromISO, getAllowedDateTimeRanges, startOfDay, weekStart } from './util' export default { components: { DatetimePopup }, - inheritAttrs: false, - props: { value: { type: String @@ -119,6 +116,10 @@ export default { type: String, default: null }, + allowedDateTimeRanges: { + type: Array, + default: () => [] + }, auto: { type: Boolean, default: false @@ -134,6 +135,14 @@ export default { }, title: { type: String + }, + hideBackdrop: { + type: Boolean, + default: false + }, + backdropClick: { + type: Boolean, + default: true } }, @@ -182,6 +191,9 @@ export default { popupDate () { return this.datetime ? this.datetime.setZone(this.zone) : this.newPopupDatetime() }, + allowedDateTimeRangesFormatted () { + return getAllowedDateTimeRanges(this.allowedDateTimeRanges, this.popupMinDatetime, this.popupMaxDatetime) + }, popupMinDatetime () { return this.minDatetime ? DateTime.fromISO(this.minDatetime).setZone(this.zone) : null }, @@ -217,6 +229,9 @@ export default { cancel () { this.close() }, + clickOutside () { + if (this.backdropClick === true) { this.cancel() } + }, newPopupDatetime () { let datetime = DateTime.utc().setZone(this.zone).set({ seconds: 0, milliseconds: 0 }) diff --git a/src/DatetimeCalendar.vue b/src/DatetimeCalendar.vue index b34bb40..cca2ebd 100644 --- a/src/DatetimeCalendar.vue +++ b/src/DatetimeCalendar.vue @@ -24,7 +24,7 @@ @@ -143,7 +233,7 @@ export default { box-sizing: border-box; &::after { - content: ''; + content: ""; display: table; clear: both; } @@ -182,7 +272,7 @@ export default { font-size: 20px; text-align: center; cursor: pointer; - transition: font-size .3s; + transition: font-size 0.3s; } .vdatetime-time-picker__item:hover { diff --git a/src/DatetimeYearPicker.vue b/src/DatetimeYearPicker.vue index a817543..ee1405e 100644 --- a/src/DatetimeYearPicker.vue +++ b/src/DatetimeYearPicker.vue @@ -8,8 +8,8 @@