commonUtils.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { filterEmpty } from '../../_util/props-util';
  2. const isValid = value => {
  3. return value !== undefined && value !== null && (Array.isArray(value) ? filterEmpty(value).length : true);
  4. };
  5. export function hasPrefixSuffix(propsAndSlots) {
  6. return isValid(propsAndSlots.prefix) || isValid(propsAndSlots.suffix) || isValid(propsAndSlots.allowClear);
  7. }
  8. export function hasAddon(propsAndSlots) {
  9. return isValid(propsAndSlots.addonBefore) || isValid(propsAndSlots.addonAfter);
  10. }
  11. export function fixControlledValue(value) {
  12. if (typeof value === 'undefined' || value === null) {
  13. return '';
  14. }
  15. return String(value);
  16. }
  17. export function resolveOnChange(target, e, onChange, targetValue) {
  18. if (!onChange) {
  19. return;
  20. }
  21. const event = e;
  22. if (e.type === 'click') {
  23. Object.defineProperty(event, 'target', {
  24. writable: true
  25. });
  26. Object.defineProperty(event, 'currentTarget', {
  27. writable: true
  28. });
  29. // click clear icon
  30. //event = Object.create(e);
  31. const currentTarget = target.cloneNode(true);
  32. event.target = currentTarget;
  33. event.currentTarget = currentTarget;
  34. // change target ref value cause e.target.value should be '' when clear input
  35. currentTarget.value = '';
  36. onChange(event);
  37. return;
  38. }
  39. // Trigger by composition event, this means we need force change the input value
  40. if (targetValue !== undefined) {
  41. Object.defineProperty(event, 'target', {
  42. writable: true
  43. });
  44. Object.defineProperty(event, 'currentTarget', {
  45. writable: true
  46. });
  47. event.target = target;
  48. event.currentTarget = target;
  49. target.value = targetValue;
  50. onChange(event);
  51. return;
  52. }
  53. onChange(event);
  54. }
  55. export function triggerFocus(element, option) {
  56. if (!element) return;
  57. element.focus(option);
  58. // Selection content
  59. const {
  60. cursor
  61. } = option || {};
  62. if (cursor) {
  63. const len = element.value.length;
  64. switch (cursor) {
  65. case 'start':
  66. element.setSelectionRange(0, 0);
  67. break;
  68. case 'end':
  69. element.setSelectionRange(len, len);
  70. break;
  71. default:
  72. element.setSelectionRange(0, len);
  73. }
  74. }
  75. }