UNPKG

@gitlab/ui

Version:
171 lines (163 loc) 5.39 kB
import readme from './daterange_picker.md'; import GlDaterangePicker from './daterange_picker.vue'; const currentYear = 2021; const defaultStartDateVal = new Date(currentYear, 9, 4); const defaultEndDateVal = new Date(currentYear, 9, 24); const defaultMinDateVal = new Date(currentYear, 9, 1); const defaultMaxDateVal = new Date(currentYear, 11, 30); const defaultValue = (prop) => GlDaterangePicker.props[prop].default; const generateProps = ({ fromLabel = defaultValue('fromLabel'), toLabel = defaultValue('toLabel'), defaultMinDate = defaultMinDateVal, defaultMaxDate = defaultMaxDateVal, defaultStartDate = defaultStartDateVal, defaultEndDate = defaultEndDateVal, maxDateRange = 0, sameDaySelection = false, tooltip = '', startPickerClass = 'gl-text-blue-500', endPickerClass = 'gl-text-red-500', labelClass = 'gl-font-style-italic', theme = defaultValue('theme'), } = {}) => ({ defaultMinDate: new Date(defaultMinDate), defaultMaxDate: new Date(defaultMaxDate), defaultStartDate: new Date(defaultStartDate), defaultEndDate: new Date(defaultEndDate), maxDateRange, sameDaySelection, tooltip, fromLabel, toLabel, startPickerClass, endPickerClass, labelClass, theme, }); const Template = (template, props) => ({ components: { GlDaterangePicker }, props: Object.keys(props), data() { return { defaultMinDateVal: this.defaultMinDate, defaultMaxDateVal: this.defaultMaxDate, defaultStartDateVal: this.defaultStartDate, defaultEndDateVal: this.defaultEndDate, }; }, watch: { defaultMinDate(val) { this.defaultMinDateVal = new Date(val); }, defaultMaxDate(val) { this.defaultMaxDateVal = new Date(val); }, }, template, }); const defaultTemplate = ` <gl-daterange-picker class="gl-display-flex" :default-min-date="defaultMinDateVal" :default-max-date="defaultMaxDateVal" :default-start-date="defaultStartDate" :default-end-date="defaultEndDate" :max-date-range="maxDateRange" :same-day-selection="sameDaySelection" :tooltip="tooltip" :from-label="fromLabel" :to-label="toLabel" :start-picker-class="startPickerClass" :end-picker-class="endPickerClass" :label-class="labelClass" :theme="theme" /> `; export const Default = Template.bind({}, defaultTemplate); Default.args = generateProps(); const withDatesSelectedAndTooltipTemplate = `<gl-daterange-picker class="gl-display-flex" :default-min-date="defaultMinDateVal" :default-max-date="defaultMaxDateVal" :default-start-date="defaultStartDate" :default-end-date="defaultEndDate" :max-date-range="maxDateRange" :same-day-selection="sameDaySelection" :tooltip="tooltip" :from-label="fromLabel" :to-label="toLabel" :start-picker-class="startPickerClass" :end-picker-class="endPickerClass" :label-class="labelClass" :theme="theme"> <template #default="{ daysSelected }"> <span v-if="daysSelected === 1">{{ daysSelected }} day selected</span> <span v-else-if="daysSelected > -1">{{ daysSelected }} days selected</span> <span v-else>No days selected</span> </template> </gl-daterange-picker>`; export const WithDatesSelectedAndTooltip = Template.bind({}, withDatesSelectedAndTooltipTemplate); WithDatesSelectedAndTooltip.args = generateProps({ tooltip: 'Date range limited to 31 days', maxDateRange: 31, }); export default { followsDesignSystem: true, title: 'base/daterange-picker', component: GlDaterangePicker, parameters: { knobs: { disable: true }, docs: { description: { component: readme, }, }, }, argTypes: { i18n: { control: { disable: true, }, }, startPickerTarget: { control: { disable: true, }, }, startPickerContainer: { control: { disable: true, }, }, endPickerTarget: { control: { disable: true, }, }, endPickerContainer: { control: { disable: true, }, }, defaultMinDate: { control: { type: 'date', }, }, defaultMaxDate: { control: { type: 'date', }, }, defaultStartDate: { control: { disable: true, }, }, defaultEndDate: { control: { disable: true, }, }, }, };