You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ant-design-vue/components/vc-input/utils/commonUtils.ts

105 lines
2.4 KiB

import { filterEmpty } from '../../_util/props-util';
const isValid = (value: any) => {
return (
value !== undefined &&
value !== null &&
(Array.isArray(value) ? filterEmpty(value).length : true)
);
};
export function hasPrefixSuffix(propsAndSlots: any) {
return (
isValid(propsAndSlots.prefix) ||
isValid(propsAndSlots.suffix) ||
isValid(propsAndSlots.allowClear)
);
}
export function hasAddon(propsAndSlots: any) {
return isValid(propsAndSlots.addonBefore) || isValid(propsAndSlots.addonAfter);
}
export function fixControlledValue(value: string | number) {
if (typeof value === 'undefined' || value === null) {
return '';
}
return String(value);
}
export function resolveOnChange(
target: HTMLInputElement,
e: Event,
onChange: Function,
targetValue?: string,
) {
if (!onChange) {
return;
}
const event: any = e;
if (e.type === 'click') {
Object.defineProperty(event, 'target', {
writable: true,
});
Object.defineProperty(event, 'currentTarget', {
writable: true,
});
// click clear icon
//event = Object.create(e);
const currentTarget = target.cloneNode(true);
event.target = currentTarget;
event.currentTarget = currentTarget;
// change target ref value cause e.target.value should be '' when clear input
(currentTarget as any).value = '';
onChange(event);
return;
}
// Trigger by composition event, this means we need force change the input value
if (targetValue !== undefined) {
Object.defineProperty(event, 'target', {
writable: true,
});
Object.defineProperty(event, 'currentTarget', {
writable: true,
});
event.target = target;
event.currentTarget = target;
target.value = targetValue;
onChange(event);
return;
}
onChange(event);
}
export interface InputFocusOptions extends FocusOptions {
cursor?: 'start' | 'end' | 'all';
}
export function triggerFocus(
element?: HTMLInputElement | HTMLTextAreaElement,
option?: InputFocusOptions,
) {
if (!element) return;
element.focus(option);
// Selection content
const { cursor } = option || {};
if (cursor) {
const 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);
}
}
}