123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- import { strings } from './constants';
- import BaseFoundation, { DefaultAdapter } from '../base/foundation';
- import { isValidDate } from '../datePicker/_utils/index';
- import isNullOrUndefined from '../utils/isNullOrUndefined';
- const HOUR = 1000 * 60 * 60;
- const DAY = 24 * HOUR;
- // TODO: move to utils
- export const formatOption = (option: number, disabledOptions: number[]) => {
- let value = `${option}`;
- if (option < 10) {
- value = `0${option}`;
- }
- let disabled = false;
- if (disabledOptions && disabledOptions.indexOf(option) >= 0) {
- disabled = true;
- }
- return {
- value,
- disabled,
- };
- };
- function generateOptions(length: number, disabledOptions: number[], hideDisabledOptions: boolean, step = 1) {
- const arr = [];
- for (let value = 0; value < length; value += step) {
- if (!disabledOptions || disabledOptions.indexOf(value) < 0 || !hideDisabledOptions) {
- arr.push(value);
- }
- }
- return arr;
- }
- class ComboboxFoundation extends BaseFoundation<DefaultAdapter> {
- constructor(adapter: DefaultAdapter) {
- super({ ...adapter });
- }
- isAM() {
- return this.getProp('isAM');
- }
- initData() {
- const {
- timeStampValue,
- hourStep,
- disabledMinutes,
- disabledSeconds,
- hideDisabledOptions,
- minuteStep,
- secondStep,
- } = this.getProps();
- const format = this.getValidFormat();
- const dateTime = this.getDisplayDateFromTimeStamp(timeStampValue);
- const disabledHourOptions = this.disabledHours();
- const disabledMinuteOptions = disabledMinutes(dateTime ? dateTime.getHours() : null);
- const disabledSecondOptions = disabledSeconds(
- dateTime ? dateTime.getHours() : null,
- dateTime ? dateTime.getMinutes() : null
- );
- const hourOptions = generateOptions(24, disabledHourOptions, hideDisabledOptions, hourStep);
- const minuteOptions = generateOptions(60, disabledMinuteOptions, hideDisabledOptions, minuteStep);
- const secondOptions = generateOptions(60, disabledSecondOptions, hideDisabledOptions, secondStep);
- return {
- showHour: Boolean(format.match(/HH|hh|H|h/g)),
- showMinute: Boolean(format.match(/mm/g)),
- showSecond: Boolean(format.match(/ss/g)),
- hourOptions,
- minuteOptions,
- secondOptions,
- };
- }
- getPosition() {
- const position = this.getProp('position');
- const type = this.getProp('type') || strings.DEFAULT_TYPE;
- return position || strings.DEFAULT_POSITION[type];
- }
- getDefaultFormatIfNeed() {
- if (this._isInProps('format')) {
- return this.getProp('format');
- } else if (this.getProp('use12Hours')) {
- return strings.DEFAULT_FROMAT_A;
- } else {
- return strings.DEFAULT_FORMAT;
- }
- }
- disabledHours(): number[] {
- const { use12Hours, disabledHours } = this.getProps();
- let disabledOptions = disabledHours && disabledHours();
- if (use12Hours && Array.isArray(disabledOptions)) {
- if (this.isAM()) {
- disabledOptions = disabledOptions.filter(h => h < 12).map(h => (h === 0 ? 12 : h));
- } else {
- disabledOptions = disabledOptions.map(h => (h === 12 ? 12 : h - 12));
- }
- }
- return disabledOptions;
- }
- getValidFormat(format?: string): string {
- let _format = isNullOrUndefined(format) ? this.getProp('format') : format;
- _format = this.getDefaultFormatIfNeed();
- _format = typeof _format === 'string' ? _format : strings.DEFAULT_FORMAT;
- // if (use12Hours) {
- // format = format.replace(/H/g, 'h');
- // if (!/(\s+)a/i.test(format)) {
- // format += ' a';
- // } else {
- // format = format.replace(/(\s+)A/i, '$1a');
- // }
- // }
- return _format;
- }
- /**
- * from 13-bit timestamp -> get display date
- * by combobox use
- */
- getDisplayDateFromTimeStamp(timeStamp: Date | string) {
- let date;
- if (timeStamp) {
- date = new Date(timeStamp);
- }
- if (!timeStamp || !isValidDate(date)) {
- return this.createDateDefault();
- }
- return date;
- }
- /**
- * create a date at 00:00:00
- */
- createDateDefault() {
- return new Date(parseInt(String(Date.now() / DAY), 10) * DAY - 8 * HOUR);
- }
- }
- export default ComboboxFoundation;
|