useIcons.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use client";
  2. import * as React from 'react';
  3. import CheckOutlined from "@ant-design/icons/es/icons/CheckOutlined";
  4. import CloseCircleFilled from "@ant-design/icons/es/icons/CloseCircleFilled";
  5. import CloseOutlined from "@ant-design/icons/es/icons/CloseOutlined";
  6. import DownOutlined from "@ant-design/icons/es/icons/DownOutlined";
  7. import LoadingOutlined from "@ant-design/icons/es/icons/LoadingOutlined";
  8. import SearchOutlined from "@ant-design/icons/es/icons/SearchOutlined";
  9. import { devUseWarning } from '../_util/warning';
  10. export default function useIcons({
  11. suffixIcon,
  12. clearIcon,
  13. menuItemSelectedIcon,
  14. removeIcon,
  15. loading,
  16. multiple,
  17. hasFeedback,
  18. prefixCls,
  19. showSuffixIcon,
  20. feedbackIcon,
  21. showArrow,
  22. componentName
  23. }) {
  24. if (process.env.NODE_ENV !== 'production') {
  25. const warning = devUseWarning(componentName);
  26. warning.deprecated(!clearIcon, 'clearIcon', 'allowClear={{ clearIcon: React.ReactNode }}');
  27. }
  28. // Clear Icon
  29. const mergedClearIcon = clearIcon !== null && clearIcon !== void 0 ? clearIcon : /*#__PURE__*/React.createElement(CloseCircleFilled, null);
  30. // Validation Feedback Icon
  31. const getSuffixIconNode = arrowIcon => {
  32. if (suffixIcon === null && !hasFeedback && !showArrow) {
  33. return null;
  34. }
  35. return /*#__PURE__*/React.createElement(React.Fragment, null, showSuffixIcon !== false && arrowIcon, hasFeedback && feedbackIcon);
  36. };
  37. // Arrow item icon
  38. let mergedSuffixIcon = null;
  39. if (suffixIcon !== undefined) {
  40. mergedSuffixIcon = getSuffixIconNode(suffixIcon);
  41. } else if (loading) {
  42. mergedSuffixIcon = getSuffixIconNode(/*#__PURE__*/React.createElement(LoadingOutlined, {
  43. spin: true
  44. }));
  45. } else {
  46. const iconCls = `${prefixCls}-suffix`;
  47. mergedSuffixIcon = ({
  48. open,
  49. showSearch
  50. }) => {
  51. if (open && showSearch) {
  52. return getSuffixIconNode(/*#__PURE__*/React.createElement(SearchOutlined, {
  53. className: iconCls
  54. }));
  55. }
  56. return getSuffixIconNode(/*#__PURE__*/React.createElement(DownOutlined, {
  57. className: iconCls
  58. }));
  59. };
  60. }
  61. // Checked item icon
  62. let mergedItemIcon = null;
  63. if (menuItemSelectedIcon !== undefined) {
  64. mergedItemIcon = menuItemSelectedIcon;
  65. } else if (multiple) {
  66. mergedItemIcon = /*#__PURE__*/React.createElement(CheckOutlined, null);
  67. } else {
  68. mergedItemIcon = null;
  69. }
  70. let mergedRemoveIcon = null;
  71. if (removeIcon !== undefined) {
  72. mergedRemoveIcon = removeIcon;
  73. } else {
  74. mergedRemoveIcon = /*#__PURE__*/React.createElement(CloseOutlined, null);
  75. }
  76. return {
  77. clearIcon: mergedClearIcon,
  78. suffixIcon: mergedSuffixIcon,
  79. itemIcon: mergedItemIcon,
  80. removeIcon: mergedRemoveIcon
  81. };
  82. }