diff --git a/src/components/shared/forms/Time.vue b/src/components/shared/forms/Time.vue new file mode 100644 index 0000000..5be933e --- /dev/null +++ b/src/components/shared/forms/Time.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/components/shared/forms/croud-time.md b/src/components/shared/forms/croud-time.md new file mode 100644 index 0000000..00fd6c1 --- /dev/null +++ b/src/components/shared/forms/croud-time.md @@ -0,0 +1,3 @@ +### Basic usage + + diff --git a/src/components/shared/schedule/Editor.vue b/src/components/shared/schedule/Editor.vue new file mode 100644 index 0000000..8c50216 --- /dev/null +++ b/src/components/shared/schedule/Editor.vue @@ -0,0 +1,171 @@ + + + diff --git a/src/components/shared/schedule/MonthView.vue b/src/components/shared/schedule/MonthView.vue new file mode 100644 index 0000000..e1fc9a4 --- /dev/null +++ b/src/components/shared/schedule/MonthView.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/components/shared/schedule/SummaryView.vue b/src/components/shared/schedule/SummaryView.vue new file mode 100644 index 0000000..bbb7321 --- /dev/null +++ b/src/components/shared/schedule/SummaryView.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/components/shared/schedule/croud-schedule-editor.md b/src/components/shared/schedule/croud-schedule-editor.md new file mode 100644 index 0000000..8e5ee5b --- /dev/null +++ b/src/components/shared/schedule/croud-schedule-editor.md @@ -0,0 +1,18 @@ +### Basic usage + + + +### Slots +You can replace the buttons by using the **actions** slot + + + + + +### Events +This component emit's (.sync compatible) **update:schedule** and **cancelled** events + + diff --git a/src/components/shared/schedule/month-view.md b/src/components/shared/schedule/month-view.md new file mode 100644 index 0000000..063b4c1 --- /dev/null +++ b/src/components/shared/schedule/month-view.md @@ -0,0 +1,5 @@ +### Basic usage + +
+ +
diff --git a/src/components/shared/schedule/summary-view.md b/src/components/shared/schedule/summary-view.md new file mode 100644 index 0000000..b93a7e4 --- /dev/null +++ b/src/components/shared/schedule/summary-view.md @@ -0,0 +1,6 @@ +### Basic usage + + diff --git a/src/components/shared/schedule/views/Daily.vue b/src/components/shared/schedule/views/Daily.vue new file mode 100644 index 0000000..6bdaf4f --- /dev/null +++ b/src/components/shared/schedule/views/Daily.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/components/shared/schedule/views/EditorViews.js b/src/components/shared/schedule/views/EditorViews.js new file mode 100644 index 0000000..ffc6135 --- /dev/null +++ b/src/components/shared/schedule/views/EditorViews.js @@ -0,0 +1,133 @@ +import moment from 'moment' +import { zipWith } from 'lodash' + +export default { + props: { + schedule: { + type: Object, + required: true, + }, + }, + + data() { + return { + resets: {}, + + periods: [ + 'First', + 'Second', + 'Third', + 'Fourth', + 'Last', + ], + } + }, + + computed: { + interval: { + get() { + return this.schedule.interval + }, + set(val) { + this.$emit('update:schedule', { + ...this.schedule, + interval: val, + }) + }, + }, + + dayOfMonth: { + get() { + return this.schedule.day_of_month + }, + set(val) { + this.$emit('update:schedule', { + ...this.schedule, + day_of_month: val, + }) + }, + }, + + weekOfMonth: { + get() { + return this.schedule.week_of_month + }, + set(val) { + this.$emit('update:schedule', { + ...this.schedule, + week_of_month: val, + }) + }, + }, + + days: { + get() { + return Object.keys(this.schedule.days).filter(day => this.schedule.days[day]).join(',') + }, + set(val) { + const days = {} + + val.split(',').forEach((day) => { + days[day.toLowerCase()] = true + }) + + this.$emit('update:schedule', { + ...this.schedule, + days, + }) + }, + }, + + months: { + get() { + return Object.keys(this.schedule.months).filter(month => this.schedule.months[month]).join(',') + }, + set(val) { + const months = {} + + val.split(',').forEach((month) => { + months[month] = true + }) + + this.$emit('update:schedule', { + ...this.schedule, + months, + }) + }, + }, + + periodOptions() { + const periods = [] + this.periods.forEach((period) => { + periods.push({ id: period.toLowerCase(), name: period }) + }) + return periods + }, + + dayOptions() { + return zipWith(moment.weekdaysShort().map(day => day.toLowerCase()), moment.weekdays(), (id, name) => ({ id, name })) + }, + + monthOptions() { + return zipWith(moment.monthsShort().map(month => month.toLowerCase()), moment.months(), (id, name) => ({ id, name })) + }, + + ordinal() { + return moment.localeData().ordinal(this.dayOfMonth).slice(-2) + }, + }, + + methods: { + load() { + this.$emit('reset-schedule', this.resets) + }, + }, + + ready() { + this.load() + }, + + mounted() { + this.load() + }, +} diff --git a/src/components/shared/schedule/views/SameDayEachMonth.vue b/src/components/shared/schedule/views/SameDayEachMonth.vue new file mode 100644 index 0000000..62a5a40 --- /dev/null +++ b/src/components/shared/schedule/views/SameDayEachMonth.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/components/shared/schedule/views/SameDayEachYear.vue b/src/components/shared/schedule/views/SameDayEachYear.vue new file mode 100644 index 0000000..4fea7cf --- /dev/null +++ b/src/components/shared/schedule/views/SameDayEachYear.vue @@ -0,0 +1,36 @@ + + + diff --git a/src/components/shared/schedule/views/SameWeekEachMonth.vue b/src/components/shared/schedule/views/SameWeekEachMonth.vue new file mode 100644 index 0000000..e742498 --- /dev/null +++ b/src/components/shared/schedule/views/SameWeekEachMonth.vue @@ -0,0 +1,45 @@ + + + diff --git a/src/components/shared/schedule/views/SameWeekEachYear.vue b/src/components/shared/schedule/views/SameWeekEachYear.vue new file mode 100644 index 0000000..8d6b246 --- /dev/null +++ b/src/components/shared/schedule/views/SameWeekEachYear.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/shared/schedule/views/Weekly.vue b/src/components/shared/schedule/views/Weekly.vue new file mode 100644 index 0000000..9fb9426 --- /dev/null +++ b/src/components/shared/schedule/views/Weekly.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/mixins/styleguidist.js b/src/mixins/styleguidist.js index d58165f..6a4c8d1 100644 --- a/src/mixins/styleguidist.js +++ b/src/mixins/styleguidist.js @@ -46,6 +46,7 @@ export default { radio: 1, cleave: '123456789012345', telephone: '01743211176', + time: '09:00', showSchema: false, formSchema: [ diff --git a/styleguide.config.js b/styleguide.config.js index e877c24..6570006 100644 --- a/styleguide.config.js +++ b/styleguide.config.js @@ -23,6 +23,10 @@ module.exports = { name: 'Datatable', components: 'src/components/shared/Datatable.vue', }, + { + name: 'Schedule', + components: 'src/components/shared/schedule/**/*.vue', + }, { name: 'Modal', content: 'src/components/shared/semantic/semantic-modal.md',