@gitlab/ui
Version:
GitLab UI Components
142 lines (133 loc) • 3.88 kB
JavaScript
import GlFormGroup from '../form/form_group/form_group.vue';
import { datepickerWidthOptionsMap } from '../../../utils/constants';
import { disableControls } from '../../../utils/stories_utils';
import { useFakeDate } from '../../../utils/use_fake_date';
import { makeContainer } from '../../../utils/story_decorators/container';
import GlDatepicker from './datepicker.vue';
import readme from './datepicker.md';
const defaults = {
components: { GlFormGroup, GlDatepicker },
mixins: [useFakeDate()],
};
const currentYear = 2020;
const defaultDate = new Date(currentYear, 0, 15);
const defaultMinDate = new Date(currentYear, 0, 1);
const defaultMaxDate = new Date(currentYear, 2, 31);
const generateProps = ({ minDate = defaultMinDate, maxDate = defaultMaxDate } = {}) => ({
minDate,
maxDate,
});
export const Default = (_args, { argTypes }) => ({
...defaults,
props: Object.keys(argTypes),
data() {
return {
pickerValue: defaultDate,
};
},
template: `<gl-datepicker :max-date="maxDate" :min-date="minDate" :start-opened="true" v-model="pickerValue" />`,
});
Default.args = generateProps();
export const CustomTrigger = (_args, { argTypes }) => ({
...defaults,
props: Object.keys(argTypes),
data() {
return {
pickerValue: null,
};
},
template: `
<div>
<div class="dropdown">
<button type="button" class="dropdown-menu-toggle">
<span class="dropdown-toggle-text"> Start date: {{value}} </span>
</button>
</div>
<gl-datepicker v-model="pickerValue" target=".dropdown-menu-toggle" :container="null" />
</div>`,
});
CustomTrigger.args = generateProps();
export const WithClearButton = (_args, { argTypes }) => ({
...defaults,
props: Object.keys(argTypes),
data() {
return {
pickerValue: defaultDate,
};
},
template: `<gl-datepicker showClearButton :max-date="maxDate" :min-date="minDate" v-model="pickerValue" />`,
});
WithClearButton.args = generateProps();
export const Widths = (_args, { argTypes }) => ({
...defaults,
props: Object.keys(argTypes),
data() {
return {
datepickerWidthOptionsMap,
pickerValue: defaultDate,
};
},
template: `
<div class="gl-display-flex gl-flex-direction-column gl-gap-3">
<gl-form-group label="Width: sm">
<gl-datepicker showClearButton :max-date="maxDate" :min-date="minDate" v-model="pickerValue" width="sm" />
</gl-form-group>
<gl-form-group label="Width: md (default)">
<gl-datepicker showClearButton :max-date="maxDate" :min-date="minDate" v-model="pickerValue" width="md" />
</gl-form-group>
<gl-form-group label="Width: lg">
<gl-datepicker showClearButton :max-date="maxDate" :min-date="minDate" v-model="pickerValue" width="lg" />
</gl-form-group>
<gl-form-group label="Width: xl">
<gl-datepicker showClearButton :max-date="maxDate" :min-date="minDate" v-model="pickerValue" width="xl" />
</gl-form-group>
</div>
`,
});
Widths.args = generateProps();
export default {
title: 'base/datepicker',
component: GlDatepicker,
decorators: [makeContainer({ height: '280px' })],
parameters: {
docs: {
description: {
component: readme,
},
},
},
argTypes: {
...disableControls([
'target',
'container',
'value',
'startRange',
'endRange',
'disableDayFn',
'firstDay',
'ariaLabel',
'placeholder',
'autocomplete',
'disabled',
'displayField',
'startOpened',
'defaultDate',
'i18n',
'theme',
'showClearButton',
'inputId',
'inputLabel',
'inputName',
]),
minDate: {
control: 'date',
},
maxDate: {
control: 'date',
},
width: {
options: datepickerWidthOptionsMap,
control: 'select',
},
},
};