import _extends from 'babel-runtime/helpers/extends';
import _defineProperty from 'babel-runtime/helpers/defineProperty';
import _slicedToArray from 'babel-runtime/helpers/slicedToArray';
var __rest = this && this.__rest || function (s, e) {
    var t = {};
    for (var p in s) {
        if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
    }if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
        if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
    }
    return t;
};
import * as React from 'react';
import classNames from 'classnames';
import Icon from '../../icon';
import Col from '../../col';
import { FormContext } from './context';
import { useLocaleReceiver } from './useLocalReceiver';
import defaultLocale from '../../locale/default';
import Tooltip from '../../tooltip';
function toTooltipProps(tooltip) {
    if (!tooltip) {
        return null;
    }
    if (typeof tooltip === 'object' && !React.isValidElement(tooltip)) {
        return tooltip;
    }
    return {
        title: tooltip
    };
}
var FormItemLabel = function FormItemLabel(_ref) {
    var prefixCls = _ref.prefixCls,
        label = _ref.label,
        htmlFor = _ref.htmlFor,
        labelCol = _ref.labelCol,
        labelAlign = _ref.labelAlign,
        colon = _ref.colon,
        required = _ref.required,
        requiredMark = _ref.requiredMark,
        tooltip = _ref.tooltip;

    var _useLocaleReceiver = useLocaleReceiver('Form'),
        _useLocaleReceiver2 = _slicedToArray(_useLocaleReceiver, 1),
        formLocale = _useLocaleReceiver2[0];

    if (!label) return null;
    return React.createElement(
        FormContext.Consumer,
        { key: 'label' },
        function (_ref2) {
            var _classNames;

            var vertical = _ref2.vertical,
                contextLabelAlign = _ref2.labelAlign,
                contextLabelCol = _ref2.labelCol,
                contextColon = _ref2.colon;

            var _a;
            var mergedLabelCol = labelCol || contextLabelCol || {};
            var mergedLabelAlign = labelAlign || contextLabelAlign;
            var labelClsBasic = prefixCls + '-item-label';
            var labelColClassName = classNames(labelClsBasic, mergedLabelAlign === 'left' && labelClsBasic + '-left', mergedLabelCol.className);
            var labelChildren = label;
            // Keep label is original where there should have no colon
            var computedColon = colon === true || contextColon !== false && colon !== false;
            var haveColon = computedColon && !vertical;
            // Remove duplicated user input colon
            if (haveColon && typeof label === 'string' && label.trim() !== '') {
                labelChildren = label.replace(/[:|：]\s*$/, '');
            }
            // Tooltip
            var tooltipProps = toTooltipProps(tooltip);
            if (tooltipProps) {
                var _tooltipProps$icon = tooltipProps.icon,
                    icon = _tooltipProps$icon === undefined ? React.createElement(Icon, { type: 'question-circle', theme: 'filled' }) : _tooltipProps$icon,
                    restTooltipProps = __rest(tooltipProps, ["icon"]);

                var tooltipNode = React.createElement(
                    Tooltip,
                    restTooltipProps,
                    React.cloneElement(icon, { className: prefixCls + '-item-tooltip' })
                );
                labelChildren = React.createElement(
                    React.Fragment,
                    null,
                    labelChildren,
                    tooltipNode
                );
            }
            // Add required mark if optional
            if (requiredMark === 'optional' && !required) {
                labelChildren = React.createElement(
                    React.Fragment,
                    null,
                    labelChildren,
                    React.createElement(
                        'span',
                        { className: prefixCls + '-item-optional' },
                        (formLocale === null || formLocale === void 0 ? void 0 : formLocale.optional) || ((_a = defaultLocale.Form) === null || _a === void 0 ? void 0 : _a.optional)
                    )
                );
            }
            var labelClassName = classNames((_classNames = {}, _defineProperty(_classNames, prefixCls + '-item-required', required), _defineProperty(_classNames, prefixCls + '-item-required-mark-optional', requiredMark === 'optional'), _defineProperty(_classNames, prefixCls + '-item-no-colon', !computedColon), _classNames));
            return React.createElement(
                Col,
                _extends({}, mergedLabelCol, { className: labelColClassName }),
                React.createElement(
                    'label',
                    { htmlFor: htmlFor, className: labelClassName, title: typeof label === 'string' ? label : '' },
                    labelChildren
                )
            );
        }
    );
};
export default FormItemLabel;