From 2961384530ea04bb06d71bf43f1bde0e3ccab706 Mon Sep 17 00:00:00 2001
From: neverland <chenjiahan@youzan.com>
Date: Sun, 14 Mar 2021 11:24:48 +0800
Subject: [PATCH] feat(ShareSheet): add cancel slot (#8335)

---
 src/share-sheet/README.md                           |  9 +++++----
 src/share-sheet/README.zh-CN.md                     |  9 +++++----
 src/share-sheet/ShareSheet.tsx                      | 10 +++++-----
 .../test/__snapshots__/index.spec.ts.snap           |  8 ++++++++
 src/share-sheet/test/index.spec.ts                  | 13 +++++++++++++
 5 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/share-sheet/README.md b/src/share-sheet/README.md
index f835b5ba8..7493e8ac9 100644
--- a/src/share-sheet/README.md
+++ b/src/share-sheet/README.md
@@ -197,10 +197,11 @@ export default {
 
 ### Slots
 
-| Name        | Description        |
-| ----------- | ------------------ |
-| title       | Custom title       |
-| description | Custom description |
+| Name             | Description                         |
+| ---------------- | ----------------------------------- |
+| title            | Custom title                        |
+| description      | Custom description                  |
+| cancel `v3.0.10` | Custom the content of cancel button |
 
 ### Less Variables
 
diff --git a/src/share-sheet/README.zh-CN.md b/src/share-sheet/README.zh-CN.md
index cbf29ccb8..e5ac96a17 100644
--- a/src/share-sheet/README.zh-CN.md
+++ b/src/share-sheet/README.zh-CN.md
@@ -215,10 +215,11 @@ export default {
 
 ### Slots
 
-| 名称        | 说明           |
-| ----------- | -------------- |
-| title       | 自定义顶部标题 |
-| description | 自定义描述文字 |
+| 名称             | 说明               |
+| ---------------- | ------------------ |
+| title            | 自定义顶部标题     |
+| description      | 自定义描述文字     |
+| cancel `v3.0.10` | 自定义取消按钮内容 |
 
 ### 样式变量
 
diff --git a/src/share-sheet/ShareSheet.tsx b/src/share-sheet/ShareSheet.tsx
index 110d4a601..c4f578e9b 100644
--- a/src/share-sheet/ShareSheet.tsx
+++ b/src/share-sheet/ShareSheet.tsx
@@ -127,12 +127,12 @@ export default defineComponent({
       return renderOptions(options as ShareSheetOption[]);
     };
 
-    const renderCancelText = () => {
-      const text = props.cancelText ?? t('cancel');
-      if (text) {
+    const renderCancelButton = () => {
+      const cancelText = props.cancelText ?? t('cancel');
+      if (slots.cancel || cancelText) {
         return (
           <button type="button" class={bem('cancel')} onClick={onCancel}>
-            {text}
+            {slots.cancel ? slots.cancel() : cancelText}
           </button>
         );
       }
@@ -150,7 +150,7 @@ export default defineComponent({
       >
         {renderHeader()}
         {renderRows()}
-        {renderCancelText()}
+        {renderCancelButton()}
       </Popup>
     );
   },
diff --git a/src/share-sheet/test/__snapshots__/index.spec.ts.snap b/src/share-sheet/test/__snapshots__/index.spec.ts.snap
index 405b3a012..6321350f5 100644
--- a/src/share-sheet/test/__snapshots__/index.spec.ts.snap
+++ b/src/share-sheet/test/__snapshots__/index.spec.ts.snap
@@ -1,5 +1,13 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`should render cancel slot correctly 1`] = `
+<button type="button"
+        class="van-share-sheet__cancel"
+>
+  Custom Cancel
+</button>
+`;
+
 exports[`should render cancel text when using cancel-text prop 1`] = `
 <button type="button"
         class="van-share-sheet__cancel"
diff --git a/src/share-sheet/test/index.spec.ts b/src/share-sheet/test/index.spec.ts
index 457b1ea14..5e38dd805 100644
--- a/src/share-sheet/test/index.spec.ts
+++ b/src/share-sheet/test/index.spec.ts
@@ -104,3 +104,16 @@ test('should emit click-overlay event when overlay is clicked', async () => {
   expect(onClickOverlay).toHaveBeenCalledTimes(1);
   expect(wrapper.emitted('update:show')![0]).toEqual([false]);
 });
+
+test('should render cancel slot correctly', async () => {
+  const wrapper = mount(ShareSheet, {
+    props: {
+      show: true,
+    },
+    slots: {
+      cancel: () => 'Custom Cancel',
+    },
+  });
+
+  expect(wrapper.find('.van-share-sheet__cancel').html()).toMatchSnapshot();
+});