From 328e42a9be8aa2dbafd7f7ec1db4490f3e58f345 Mon Sep 17 00:00:00 2001
From: tangjinzhou <415800467@qq.com>
Date: Fri, 17 Feb 2023 22:02:23 +0800
Subject: [PATCH] feat: tree add leafIcon

---
 components/calendar/generateCalendar.tsx |  3 +--
 components/tree-select/index.tsx         |  8 +++++++-
 components/tree/Tree.tsx                 |  2 +-
 components/tree/utils/dictUtil.ts        |  6 +-----
 components/tree/utils/iconUtil.tsx       | 19 ++++++++++++-------
 5 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/components/calendar/generateCalendar.tsx b/components/calendar/generateCalendar.tsx
index baf3b141c..a49f5d473 100644
--- a/components/calendar/generateCalendar.tsx
+++ b/components/calendar/generateCalendar.tsx
@@ -1,5 +1,4 @@
 import useMergedState from '../_util/hooks/useMergedState';
-import padStart from 'lodash-es/padStart';
 import { PickerPanel } from '../vc-picker';
 import type { Locale } from '../vc-picker/interface';
 import type { GenerateConfig } from '../vc-picker/generate';
@@ -245,7 +244,7 @@ function generateCalendar<
               )}
             >
               <div class={`${calendarPrefixCls.value}-date-value`}>
-                {padStart(String(generateConfig.getDate(date)), 2, '0')}
+                {String(generateConfig.getDate(date)).padStart(2, '0')}
               </div>
               <div class={`${calendarPrefixCls.value}-date-content`}>
                 {dateCellRender && dateCellRender({ current: date })}
diff --git a/components/tree-select/index.tsx b/components/tree-select/index.tsx
index 2675412b8..680492f65 100644
--- a/components/tree-select/index.tsx
+++ b/components/tree-select/index.tsx
@@ -273,7 +273,13 @@ const TreeSelect = defineComponent({
           removeIcon={removeIcon}
           clearIcon={clearIcon}
           switcherIcon={(nodeProps: SwitcherIconProps) =>
-            renderSwitcherIcon(treePrefixCls.value, switcherIcon, treeLine, nodeProps)
+            renderSwitcherIcon(
+              treePrefixCls.value,
+              switcherIcon,
+              nodeProps,
+              slots.leafIcon,
+              treeLine,
+            )
           }
           showTreeIcon={treeIcon as any}
           notFoundContent={mergedNotFound}
diff --git a/components/tree/Tree.tsx b/components/tree/Tree.tsx
index 7baf7a84a..6ffecafca 100644
--- a/components/tree/Tree.tsx
+++ b/components/tree/Tree.tsx
@@ -260,7 +260,7 @@ export default defineComponent({
           checkable={checkable}
           selectable={selectable}
           switcherIcon={(nodeProps: SwitcherIconProps) =>
-            renderSwitcherIcon(prefixCls.value, switcherIcon, showLine, nodeProps)
+            renderSwitcherIcon(prefixCls.value, switcherIcon, nodeProps, slots.leafIcon, showLine)
           }
           onCheck={handleCheck}
           onExpand={handleExpand}
diff --git a/components/tree/utils/dictUtil.ts b/components/tree/utils/dictUtil.ts
index 82eee747b..ea2f79a92 100644
--- a/components/tree/utils/dictUtil.ts
+++ b/components/tree/utils/dictUtil.ts
@@ -74,11 +74,7 @@ export function calcRangeKeys({
       keys.push(key);
     }
 
-    if (expandedKeys.indexOf(key) === -1) {
-      return false;
-    }
-
-    return true;
+    return expandedKeys.includes(key);
   });
 
   return keys;
diff --git a/components/tree/utils/iconUtil.tsx b/components/tree/utils/iconUtil.tsx
index d134968c1..9593bbc5b 100644
--- a/components/tree/utils/iconUtil.tsx
+++ b/components/tree/utils/iconUtil.tsx
@@ -14,8 +14,9 @@ export interface SwitcherIconProps extends AntTreeNodeProps {
 export default function renderSwitcherIcon(
   prefixCls: string,
   switcherIcon: any,
-  showLine: boolean | { showLeafIcon: boolean } | undefined,
   props: SwitcherIconProps,
+  leafIcon?: (props: SwitcherIconProps) => any,
+  showLine?: boolean | { showLeafIcon: boolean } | undefined,
 ) {
   const { isLeaf, expanded, loading } = props;
   let icon = switcherIcon;
@@ -29,12 +30,16 @@ export default function renderSwitcherIcon(
   let defaultIcon = null;
   const switcherCls = `${prefixCls}-switcher-icon`;
   if (isLeaf) {
-    if (showLine) {
-      if (typeof showLine === 'object' && !showLeafIcon) {
-        defaultIcon = <span class={`${prefixCls}-switcher-leaf-line`} />;
-      } else {
-        defaultIcon = <FileOutlined class={`${prefixCls}-switcher-line-icon`} />;
-      }
+    if (!showLine) {
+      return null;
+    }
+    if (showLeafIcon && leafIcon) {
+      return leafIcon(props);
+    }
+    if (typeof showLine === 'object' && !showLeafIcon) {
+      defaultIcon = <span class={`${prefixCls}-switcher-leaf-line`} />;
+    } else {
+      defaultIcon = <FileOutlined class={`${prefixCls}-switcher-line-icon`} />;
     }
     return defaultIcon;
   } else {