"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");

var _typeof = require("@babel/runtime/helpers/typeof");

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));

require("maycur-antd/lib/date-picker/style/css");

var _datePicker = _interopRequireDefault(require("maycur-antd/lib/date-picker"));

var _react = _interopRequireWildcard(require("react"));

var _utils = _interopRequireDefault(require("../../utils/utils"));

var _moment = _interopRequireDefault(require("moment"));

var _reactI18next = require("react-i18next");

function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

var prefix = _utils.default.prefixCls;
var cmName = "".concat(prefix, "-date-field");
var MonthPicker = _datePicker.default.MonthPicker;

function dateFormat(v, valueFormat) {
  var changedValue = {
    currentTime: null,
    timeRange: null
  };

  if (v) {
    changedValue.currentTime = valueFormat === 'YYYY-MM' ? v.startOf('month').valueOf() : v.valueOf();
  }

  return changedValue;
}
/**
 * The only true button.
 *
 * @visibleName     🍳-DateField  
 */


function DateField(props) {
  var fieldProperties = props.fieldProperties,
      readOnly = props.readOnly,
      extraProps = props.extraProps,
      onChange = props.onChange,
      value = props.value;
  var placeholder = fieldProperties.placeholder,
      required = fieldProperties.required,
      valueFormat = fieldProperties.valueFormat,
      Ismodify = fieldProperties.Ismodify,
      valueDefault = fieldProperties.valueDefault;
  var disabledDate = extraProps.disabledDate,
      shouldShowNow = extraProps.shouldShowNow,
      registerEvent = extraProps.registerEvent,
      fieldStyleCategory = extraProps.fieldStyleCategory,
      tableRef = extraProps.tableRef;

  var _useState = (0, _react.useState)(false),
      _useState2 = (0, _slicedToArray2.default)(_useState, 2),
      open = _useState2[0],
      setOpen = _useState2[1];

  var containerRef = (0, _react.useRef)(null);

  var _useTranslation = (0, _reactI18next.useTranslation)('MK_FormFields'),
      t = _useTranslation.t;

  var Picker = (0, _react.useMemo)(function () {
    return valueFormat === 'YYYY-MM' ? MonthPicker : _datePicker.default;
  }, [valueFormat]);
  var dateValue = (0, _react.useMemo)(function () {
    var result = value && value.currentTime;

    if (result) {
      return valueFormat === 'YYYY-MM' ? (0, _moment.default)(result).startOf('month') : (0, _moment.default)(result);
    }
  }, [value, valueFormat]);
  var showTime = (0, _react.useMemo)(function () {
    var result = false;

    if (valueFormat && (valueFormat.includes('HH:mm') || valueFormat.includes('A'))) {
      result = true;

      if (valueFormat.search(/HH:mm$/ig) > 0) {
        result = {
          format: 'HH:mm'
        };
      }
    }

    return result;
  }, [valueFormat]);
  var handleChange = (0, _react.useCallback)(function (v) {
    var nextValue = dateFormat(v, valueFormat);

    if (typeof onChange === 'function') {
      onChange(nextValue);
    }
  }, [onChange, valueFormat]);
  var handleOpen = (0, _react.useCallback)(function (v) {
    setOpen(v);
  }, []);
  (0, _react.useEffect)(function () {
    /* 注册外部事件 */
    if (typeof registerEvent === 'function') {
      registerEvent(function () {
        return setOpen(false);
      });
    }
    /* 设置默认值 */


    if (valueDefault === 'NOW' && shouldShowNow) {
      var initialValue = value && value.currentTime;

      if (!initialValue) {
        var defaultValue = dateFormat((0, _moment.default)(), valueFormat);
        if (typeof onChange === 'function') onChange(defaultValue);
      }
    } // eslint-disable-next-line react-hooks/exhaustive-deps

  }, []);
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
    className: cmName,
    ref: containerRef
  }, /*#__PURE__*/_react.default.createElement(Picker, {
    open: open,
    value: dateValue,
    onChange: handleChange,
    format: valueFormat || 'YYYY-MM-DD',
    disabledDate: disabledDate,
    placeholder: readOnly ? t('empty') : placeholder,
    onOpenChange: handleOpen,
    showTime: showTime,
    allowClear: !required,
    className: fieldStyleCategory === 'origin' ? "".concat(cmName, "_table-cell") : "".concat(cmName, "_normal"),
    disabled: readOnly,
    getCalendarContainer: function getCalendarContainer() {
      return tableRef || containerRef.current;
    }
  })), Ismodify ? /*#__PURE__*/_react.default.createElement("span", {
    className: "fm fm-revised"
  }) : null);
}

var _default = DateField;
exports.default = _default;