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.
105 lines
2.4 KiB
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);
|
|
}
|
|
}
|
|
}
|