123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.hasAddon = hasAddon;
- exports.hasPrefixSuffix = hasPrefixSuffix;
- exports.resolveOnChange = resolveOnChange;
- exports.triggerFocus = triggerFocus;
- function hasAddon(props) {
- return !!(props.addonBefore || props.addonAfter);
- }
- function hasPrefixSuffix(props) {
- return !!(props.prefix || props.suffix || props.allowClear);
- }
- // TODO: It's better to use `Proxy` replace the `element.value`. But we still need support IE11.
- function cloneEvent(event, target, value) {
- // A bug report filed on WebKit's Bugzilla tracker, dating back to 2009, specifically addresses the issue of cloneNode() not copying files of <input type="file"> elements.
- // As of the last update, this bug was still marked as "NEW," indicating that it might not have been resolved yet.
- // https://bugs.webkit.org/show_bug.cgi?id=28123
- var currentTarget = target.cloneNode(true);
- // click clear icon
- var newEvent = Object.create(event, {
- target: {
- value: currentTarget
- },
- currentTarget: {
- value: currentTarget
- }
- });
- // Fill data
- currentTarget.value = value;
- // Fill selection. Some type like `email` not support selection
- // https://github.com/ant-design/ant-design/issues/47833
- if (typeof target.selectionStart === 'number' && typeof target.selectionEnd === 'number') {
- currentTarget.selectionStart = target.selectionStart;
- currentTarget.selectionEnd = target.selectionEnd;
- }
- currentTarget.setSelectionRange = function () {
- target.setSelectionRange.apply(target, arguments);
- };
- return newEvent;
- }
- function resolveOnChange(target, e, onChange, targetValue) {
- if (!onChange) {
- return;
- }
- var event = e;
- if (e.type === 'click') {
- // Clone a new target for event.
- // Avoid the following usage, the setQuery method gets the original value.
- //
- // const [query, setQuery] = React.useState('');
- // <Input
- // allowClear
- // value={query}
- // onChange={(e)=> {
- // setQuery((prevStatus) => e.target.value);
- // }}
- // />
- event = cloneEvent(e, target, '');
- onChange(event);
- return;
- }
- // Trigger by composition event, this means we need force change the input value
- // https://github.com/ant-design/ant-design/issues/45737
- // https://github.com/ant-design/ant-design/issues/46598
- if (target.type !== 'file' && targetValue !== undefined) {
- event = cloneEvent(e, target, targetValue);
- onChange(event);
- return;
- }
- onChange(event);
- }
- function triggerFocus(element, option) {
- if (!element) return;
- element.focus(option);
- // Selection content
- var _ref = option || {},
- cursor = _ref.cursor;
- if (cursor) {
- var len = element.value.length;
- switch (cursor) {
- case 'start':
- element.setSelectionRange(0, 0);
- break;
- case 'end':
- element.setSelectionRange(len, len);
- break;
- default:
- element.setSelectionRange(0, len);
- }
- }
- }
|