From f555ebb030b0ffc64fdd2b0c4b8c06c3fd342a96 Mon Sep 17 00:00:00 2001
From: chenjiahan <chenjiahan@youzan.com>
Date: Thu, 25 Jun 2020 17:13:18 +0800
Subject: [PATCH] refactor(Sku): simplify SkuRow props

---
 src/sku/Sku.js               |  8 ++----
 src/sku/components/SkuRow.js | 53 ++++++++++++++++++------------------
 2 files changed, 29 insertions(+), 32 deletions(-)

diff --git a/src/sku/Sku.js b/src/sku/Sku.js
index 65f149bca..15e22eea0 100644
--- a/src/sku/Sku.js
+++ b/src/sku/Sku.js
@@ -678,11 +678,7 @@ export default createComponent({
       (this.hasSkuOrAttr && (
         <div class={this.skuGroupClass}>
           {this.skuTree.map((skuTreeItem) => (
-            <SkuRow
-              skuRow={skuTreeItem}
-              largeImageMode={skuTreeItem.largeImageMode}
-              hasScrollTab={skuTreeItem.v.length > 6}
-            >
+            <SkuRow item={skuTreeItem}>
               {skuTreeItem.v.map((skuValue, itemIndex) => (
                 <template
                   slot={
@@ -707,7 +703,7 @@ export default createComponent({
             </SkuRow>
           ))}
           {this.propList.map((skuTreeItem) => (
-            <SkuRow skuRow={skuTreeItem}>
+            <SkuRow item={skuTreeItem}>
               {skuTreeItem.v.map((skuValue) => (
                 <SkuRowPropItem
                   skuValue={skuValue}
diff --git a/src/sku/components/SkuRow.js b/src/sku/components/SkuRow.js
index c4f1be592..c1843a305 100644
--- a/src/sku/components/SkuRow.js
+++ b/src/sku/components/SkuRow.js
@@ -8,28 +8,20 @@ const [createComponent, bem, t] = createNamespace('sku-row');
 export default createComponent({
   mixins: [
     BindEventMixin(function (bind) {
-      if (!(this.largeImageMode && this.hasScrollTab)) {
-        return false;
-      }
+      if (this.scrollable) {
+        if (!this.scrollCon) {
+          this.scrollCon = this.$refs.skuContent;
+        }
 
-      if (!this.scrollCon) {
-        this.scrollCon = this.$refs.skuContent;
+        bind(this.scrollCon, 'scroll', this.onScroll);
       }
-
-      bind(this.scrollCon, 'scroll', this.onScroll);
     }),
   ],
+
   props: {
-    skuRow: Object,
-    largeImageMode: {
-      type: Boolean,
-      default: false,
-    },
-    hasScrollTab: {
-      type: Boolean,
-      default: false,
-    },
+    item: Object,
   },
+
   data() {
     return {
       present: 0,
@@ -38,17 +30,21 @@ export default createComponent({
       scrollLeft: 0,
     };
   },
+
   computed: {
+    scrollable() {
+      return this.item.largeImageMode && this.item.v.length > 6;
+    },
+
     scrollStyle() {
-      if (!(this.largeImageMode && this.hasScrollTab)) {
-        return false;
+      if (this.scrollable) {
+        return {
+          transform: `translate3d(${this.present * 20}px, 0, 0)`,
+        };
       }
-      this.tranX = this.present * 20;
-      return {
-        transform: `translate3d(${this.tranX}px, 0, 0)`,
-      };
     },
   },
+
   methods: {
     onScroll() {
       this.$nextTick(() => {
@@ -59,11 +55,15 @@ export default createComponent({
       });
     },
   },
+
   render() {
-    const { skuRow, largeImageMode, hasScrollTab } = this;
-    const multipleNode = skuRow.is_multiple && (
+    const { item, scrollable } = this;
+    const { largeImageMode } = item;
+
+    const multipleNode = item.is_multiple && (
       <span class={bem('title-multiple')}>({t('multiple')})</span>
     );
+
     const SkuScroll = (
       <div class={bem('scroll')}>
         <div class={bem('scroll__content')} ref="skuScroll">
@@ -85,14 +85,15 @@ export default createComponent({
         </div>
       </div>
     );
+
     return (
       <div class={[bem(), BORDER_BOTTOM, largeImageMode && bem('picture')]}>
         <div class={bem('title')}>
-          {skuRow.k}
+          {item.k}
           {multipleNode}
         </div>
         {largeImageMode ? SkuContent : this.slots()}
-        {largeImageMode && hasScrollTab && SkuScroll}
+        {largeImageMode && scrollable && SkuScroll}
       </div>
     );
   },