UNPKG

ember-date-components

Version:

An Ember add-on which provides pure Ember-based date picker components.

167 lines (134 loc) 4.4 kB
import { click, find } from '@ember/test-helpers'; import moment from 'moment'; import { assert } from '@ember/debug'; import { deprecate } from '@ember/application/deprecations'; import { selectTime } from './time-picker'; export function getDatePicker(element) { if (typeof element === 'string') { element = find(element); } assert( 'getDatePicker is passed a DOM node or a matching selector string', !!element ); assert( 'getDatePicker does not support jQuery elements, only plain DOM nodes or a text selector', typeof element.length === 'undefined' ); let [button, buttonTo] = element.querySelectorAll( '[data-test-date-picker-toggle-button]' ); return { buttonText() { return button.innerText.trim(); }, buttonToText() { return buttonTo.innerText.trim(); }, toggle() { assert('button for getDatePicker exists', !!button); return click(button); }, toggleTo() { assert('buttonTo for getDatePicker exists', !!buttonTo); return click(buttonTo); }, currentMonth() { let month = find('[data-test-date-picker-month]').getAttribute( 'data-test-date-picker-month' ); let year = find('[data-test-date-picker-year]').getAttribute( 'data-test-date-picker-year' ); return moment(`${year}-${month}-01`); }, async selectDate(date) { // Auto-open if not open if (!this.isOpen()) { await this.toggle(); } let selector = `[data-test-date-picker-day="${date.year()}-${date.month()}-${date.date()}"]`; if (!find(selector)) { let dateMonth = date.clone().startOf('month'); // Try to auto-move towards the given date while (this.currentMonth().isBefore(dateMonth, 'month')) { await this.nextMonth(); } while (this.currentMonth().isAfter(dateMonth, 'month')) { await this.previousMonth(); } } return click(selector); }, async selectDateRange(dateFrom, dateTo) { // Auto-open if not open if (!this.isOpen()) { await this.toggle(); } await this.selectDate(dateFrom); await this.selectDate(dateTo); }, nextMonth() { return click('[data-test-date-picker-goto-next-month]'); }, previousMonth() { return click('[data-test-date-picker-goto-previous-month]'); }, isOpen() { return !!find('[data-test-date-picker-days]'); }, element, buttonElement: button, buttonToElement: buttonTo, }; } export async function setTimePickerValue() { deprecate( '`setTimePickerValue` test helper has been deprecated in favor of `import { selectTime } from "ember-date-components/test-support/helpers/time-picker"`, please use it instead.', false, { id: 'ember-date-components.test-support.helpers.date-picker', until: '3.0.0', } ); return selectTime(...arguments); } export async function selectDate(element, date) { assert('date must be moment.js object', moment.isMoment(date)); let datePicker = await getDatePicker(element); await datePicker.selectDate(date); } export async function selectDateRange(element, dateFrom, dateTo) { assert('dateFrom must be moment.js object', moment.isMoment(dateFrom)); assert('dateTo must be moment.js object', moment.isMoment(dateTo)); let datePicker = await getDatePicker(element); await datePicker.selectDateRange(dateFrom, dateTo); } export async function getSelectedDate(element) { let datePicker = await getDatePicker(element); let button = datePicker.buttonElement; let buttonTo = datePicker.buttonToElement; let format = button.getAttribute( 'data-test-date-picker-toggle-button-format' ); let value = button.innerText.trim(); let dateFrom = value ? moment(value, format) : null; if (dateFrom && !dateFrom.isValid()) { dateFrom = null; } if (buttonTo) { let valueTo = buttonTo.innerText.trim(); let dateTo = valueTo ? moment(valueTo, format) : null; if (dateTo && !dateTo.isValid()) { dateTo = null; } return [dateFrom, dateTo]; } return dateFrom; } export async function selectDateTime(element, date) { assert('date must be moment.js object', moment.isMoment(date)); await selectDate(element, date); await selectTime(element, date); } export default getDatePicker;