@gitlab/ui
Version:
GitLab UI Components
171 lines (163 loc) • 5.39 kB
JavaScript
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
<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,
},
},
},
};