@lancom/shared 0.0.280 → 0.0.281

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/assets/js/api/admin.js +3 -0
  2. package/assets/js/api/index.js +5 -2
  3. package/assets/js/models/print-area.js +5 -3
  4. package/assets/js/utils/colors.js +1 -1
  5. package/assets/js/utils/fabric-helper.js +1 -1
  6. package/assets/js/utils/filters.js +2 -2
  7. package/assets/scss/_common.scss +10 -0
  8. package/components/asides/contact_us/contact-us.vue +9 -2
  9. package/components/asides/menu/menu.vue +1 -25
  10. package/components/checkout/cart/cart.mixin.js +3 -3
  11. package/components/checkout/cart/cart.scss +8 -109
  12. package/components/checkout/cart/cart.vue +84 -46
  13. package/components/checkout/cart/cart_entity/cart_entity_color_simple_products/cart_entity_color_simple_product/cart-entity-color-simple-product.vue +7 -4
  14. package/components/checkout/cart/cart_price_info/cart-price-info.vue +4 -5
  15. package/components/checkout/cart/cart_pricing/cart-pricing.scss +34 -0
  16. package/components/checkout/cart/cart_pricing/cart-pricing.vue +112 -0
  17. package/components/checkout/cart/cart_shipments_pricing/cart-shipments-pricing.vue +2 -2
  18. package/components/checkout/order/address-form/address-form.scss +16 -0
  19. package/components/checkout/order/address-form/address-form.vue +199 -91
  20. package/components/checkout/order/order-billing-information/order-billing-information.scss +1 -1
  21. package/components/checkout/order/order-payment-information/order-payment-information.vue +15 -5
  22. package/components/checkout/order/order.vue +2 -1
  23. package/components/common/client_settings/client-settings.scss +6 -0
  24. package/components/common/client_settings/client-settings.vue +9 -1
  25. package/components/common/payment/payment_card/stripe/stripe.vue +1 -0
  26. package/components/common/payment/payment_success/payment-success.vue +8 -1
  27. package/components/common/postcode_select/postcode-select.vue +22 -12
  28. package/components/common/price.vue +1 -1
  29. package/components/common/pricing_table/pricing-table.vue +3 -2
  30. package/components/common/tabs.vue +17 -8
  31. package/components/editor/editor.scss +6 -0
  32. package/components/editor/editor.vue +22 -19
  33. package/components/editor/editor_layers/editor-layers.vue +3 -2
  34. package/components/editor/editor_print_area_options/editor-print-area-options.vue +2 -0
  35. package/components/editor/editor_product_details/editor-product-details.scss +8 -2
  36. package/components/editor/editor_product_details/editor-product-details.vue +22 -25
  37. package/components/editor/editor_wizard/editor-wizard.vue +2 -1
  38. package/components/editor/editor_workspace/editor-workspace.vue +3 -2
  39. package/components/modals/cart_modal/cart-modal.vue +1 -1
  40. package/components/modals/order_modal/order-modal.vue +6 -0
  41. package/components/modals/payment_modal/payment-modal.vue +4 -3
  42. package/components/order/order_payment/order-payment.vue +6 -6
  43. package/components/product/editor_pricing/editor-pricing.scss +75 -0
  44. package/components/product/editor_pricing/editor-pricing.vue +228 -0
  45. package/components/product/editor_pricing/editor_pricing_details/editor-pricing-details.scss +0 -0
  46. package/components/product/editor_pricing/editor_pricing_details/editor-pricing-details.vue +29 -0
  47. package/components/product/editor_pricing/editor_pricing_details/editor_pricing_details_prints/editor-pricing-details-prints.scss +41 -0
  48. package/components/product/editor_pricing/editor_pricing_details/editor_pricing_details_prints/editor-pricing-details-prints.vue +118 -0
  49. package/components/product/editor_pricing/editor_pricing_details/editor_pricing_details_products/editor-pricing-details-products.scss +41 -0
  50. package/components/product/editor_pricing/editor_pricing_details/editor_pricing_details_products/editor-pricing-details-products.vue +102 -0
  51. package/components/product/product.vue +1 -1
  52. package/components/product/product_colors_selector/product-colors-selector.scss +117 -0
  53. package/components/product/product_colors_selector/product-colors-selector.vue +188 -0
  54. package/components/product/product_multipacks_carousel/product-multipacks-carousel.vue +3 -1
  55. package/components/product/product_size_selector/product_size_selector_color/product_size_selector_color_cell/product-size-selector-color-cell.vue +4 -5
  56. package/components/product/products_size_selector_color/product_size_selector_color/product-size-selector-color.scss +58 -0
  57. package/components/product/products_size_selector_color/product_size_selector_color/product-size-selector-color.vue +128 -0
  58. package/components/product/products_size_selector_color/products-size-selector-color.scss +12 -0
  59. package/components/product/products_size_selector_color/products-size-selector-color.vue +43 -0
  60. package/components/product/wizard/wizard_print_layers/wizard_print_layer/wizard-print-layer.vue +2 -1
  61. package/components/product/wizard/wizard_print_size/wizard_print_area_print_size/wizard-print-area-print-size.vue +2 -1
  62. package/components/product/wizard/wizard_print_type/wizard_print_area_print_type/wizard-print-area-print-type.vue +2 -1
  63. package/components/products/product_list/product-list.scss +2 -2
  64. package/components/products/product_list_product/product-list-product.scss +7 -11
  65. package/components/products/product_list_product/product-list-product.vue +7 -15
  66. package/components/the_aside/the-aside.vue +1 -0
  67. package/feeds/google-shopping.js +4 -4
  68. package/layouts/error.vue +39 -0
  69. package/layouts/products.vue +386 -0
  70. package/mixins/payment.js +2 -1
  71. package/mixins/product-preview.js +1 -1
  72. package/mixins/product-view.js +313 -0
  73. package/nuxt.config.js +0 -5
  74. package/package.json +1 -1
  75. package/pages/checkout/cart.vue +40 -0
  76. package/pages/checkout/order.vue +72 -0
  77. package/pages/customer/create.vue +33 -0
  78. package/pages/customer/password/_token.vue +79 -0
  79. package/pages/customer/recovery.vue +33 -0
  80. package/pages/customer/settings.vue +33 -0
  81. package/pages/customer/signin.vue +33 -0
  82. package/routes/index.js +35 -0
  83. package/store/cart.js +11 -6
  84. package/store/order.js +2 -2
  85. package/store/product.js +0 -6
@@ -0,0 +1,188 @@
1
+ <template>
2
+ <product-colors-selector class="ProductColorsSelector__wrapper">
3
+ <div>
4
+ <div class="ProductColorsSelector__controls">
5
+ <div
6
+ class="ProductColorsSelector__head"
7
+ :class="{
8
+ 'ProductColorsSelector__head--opened': opened
9
+ }">
10
+ <multiselect
11
+ v-model="selectedColor"
12
+ value="_id"
13
+ label="name"
14
+ track-by="_id"
15
+ placeholder="Select colour"
16
+ :options="availableColors"
17
+ :allow-empty="false"
18
+ :searchable="false"
19
+ :option-height="60">
20
+ <div
21
+ slot="option"
22
+ slot-scope="{ option }"
23
+ class="ProductColorsSelector__option">
24
+ <span
25
+ class="ProductColorsSelector__option-name">
26
+ {{ option.name }}
27
+ </span>
28
+ <product-color-image
29
+ class="ProductColorsSelector__option-preview"
30
+ :color="option" />
31
+ </div>
32
+ <div
33
+ slot="singleLabel"
34
+ slot-scope="{ option }"
35
+ class="ProductColorsSelector__option">
36
+ {{ option.name }}
37
+ </div>
38
+ </multiselect>
39
+ <i class="icon-angle-down"></i>
40
+ </div>
41
+ <div
42
+ v-if="hasAnotherPrintBtn && hasLayers && isPrintPricing"
43
+ class="ProductColorsSelector__add-btn">
44
+ <btn
45
+ btn-class="green"
46
+ btn-label="Add Another Print"
47
+ @onclick="addAnotherPrint()">
48
+ <i
49
+ slot="icon-before"
50
+ class="icon-plus"></i>
51
+ </btn>
52
+ </div>
53
+ </div>
54
+ <transition
55
+ name="fade"
56
+ appear>
57
+ <div
58
+ v-if="opened"
59
+ class="view-transition">
60
+ <div class="ProductColorsSelector__options">
61
+ <product-colors-selector-options
62
+ ref="colorsSelectorOptions"
63
+ :display-products-count="true"
64
+ class="ProductColorsSelector__section" />
65
+ <div class="ProductColorsSelector__toggle-gst">
66
+ <checkbox
67
+ v-model="inclGST"
68
+ :dark="true"
69
+ @change="onChangeInclGST">
70
+ <div class="ml-5">Inc. {{ taxName }}</div>
71
+ </checkbox>
72
+ </div>
73
+ </div>
74
+ <products-size-selector-color
75
+ :with-gst="inclGSTFinal"
76
+ class="ProductColorsSelector__section"
77
+ :class="{
78
+ 'ProductColorsSelector__section--hidden': inclGSTSpinner
79
+ }" />
80
+ </div>
81
+ </transition>
82
+ </div>
83
+ </product-colors-selector>
84
+ </template>
85
+
86
+ <script>
87
+ import Multiselect from 'vue-multiselect';
88
+ import { mapGetters, mapMutations } from 'vuex';
89
+ import ProductColorsSelector from '@lancom/shared/components/product/layouts/product_colors_selector/product-colors-selector';
90
+ import ProductColorsSelectorOptions from '@lancom/shared/components/product/layouts/product_colors_selector/product_colors_selector_options/product-colors-selector-options';
91
+ import ProductColorImage from '@lancom/shared/components/product/product_color_image/product-color-image';
92
+ import ProductsSizeSelectorColor from '@lancom/shared/components/product/products_size_selector_color/products-size-selector-color';
93
+
94
+ export default {
95
+ name: 'WorkdepotProductColorsSelector',
96
+ components: {
97
+ ProductColorsSelector,
98
+ ProductColorsSelectorOptions,
99
+ ProductsSizeSelectorColor,
100
+ ProductColorImage,
101
+ Multiselect
102
+ },
103
+ data() {
104
+ return {
105
+ inclGSTFinal: false,
106
+ inclGSTSpinner: false,
107
+ inclGSTSpinnerTimer: null,
108
+ opened: true
109
+ };
110
+ },
111
+ props: {
112
+ hasAnotherPrintBtn: {
113
+ type: Boolean,
114
+ default: true
115
+ }
116
+ },
117
+ computed: {
118
+ ...mapGetters(['taxName']),
119
+ ...mapGetters('product', ['editableColor', 'availableColors', 'visibleSteps', 'hasLayers', 'isPrintPricing', 'priceIncludeGST']),
120
+ selectedColor: {
121
+ get() {
122
+ return this.editableColor;
123
+ },
124
+ set(color) {
125
+ this.$refs.colorsSelectorOptions.toggleSelection(color);
126
+ }
127
+ },
128
+ inclGST: {
129
+ get() {
130
+ return this.priceIncludeGST;
131
+ },
132
+ set(value) {
133
+ this.setPriceIncludeGST(value);
134
+ }
135
+ }
136
+ },
137
+ watch: {
138
+ inclGST() {
139
+ this.onChangeInclGST();
140
+ }
141
+ },
142
+ created() {
143
+ if (this.priceIncludeGST) {
144
+ this.inclGSTFinal = true;
145
+ }
146
+ },
147
+ destroyed() {
148
+ clearTimeout(this.inclGSTSpinnerTimer);
149
+ },
150
+ methods: {
151
+ ...mapMutations('product', [
152
+ 'setVisibleSteps',
153
+ 'setEditableLayer',
154
+ 'setEditablePrintArea',
155
+ 'setSelectedPrintArea',
156
+ 'setSelectedPrintType',
157
+ 'setEditableColor',
158
+ 'setPriceIncludeGST'
159
+ ]),
160
+ ...mapMutations('layers', [
161
+ 'setEditableLayer'
162
+ ]),
163
+ toggleContent() {
164
+ this.opened = !this.opened;
165
+ },
166
+ addAnotherPrint() {
167
+ this.setVisibleSteps(false);
168
+ this.$nextTick(() => {
169
+ this.setEditableLayer(null);
170
+ this.setEditablePrintArea(null);
171
+ this.setVisibleSteps(true);
172
+ });
173
+ },
174
+ onChangeInclGST() {
175
+ clearTimeout(this.inclGSTSpinnerTimer);
176
+ this.inclGSTSpinner = true;
177
+ this.inclGSTSpinnerTimer = setTimeout(() => {
178
+ this.inclGSTSpinner = false;
179
+ this.inclGSTFinal = this.inclGST;
180
+ }, 500);
181
+ }
182
+ }
183
+ };
184
+ </script>
185
+
186
+ <style lang="scss" scoped>
187
+ @import 'product-colors-selector.scss';
188
+ </style>
@@ -74,6 +74,7 @@ export default {
74
74
  console.log('LancomProductMultipacks...')
75
75
  },
76
76
  computed: {
77
+ ...mapGetters(['currency']),
77
78
  ...mapGetters('product', ['multipack']),
78
79
  selectedMultipack: {
79
80
  get() {
@@ -142,7 +143,8 @@ export default {
142
143
  this.setSimpleProductAmount({
143
144
  colorId: simpleProduct.color._id,
144
145
  sizeId: simpleProduct.size._id,
145
- amount
146
+ amount,
147
+ currency: this.currency
146
148
  });
147
149
  }
148
150
  });
@@ -40,12 +40,10 @@
40
40
  </template>
41
41
 
42
42
  <script>
43
- import { createNamespacedHelpers } from 'vuex';
43
+ import { mapGetters, mapMutations } from 'vuex';
44
44
  import confirm from '@lancom/shared/mixins/confirm';
45
45
  import { inRange } from '@lancom/shared/assets/js/utils/filters';
46
46
 
47
- const { mapGetters, mapMutations } = createNamespacedHelpers('product');
48
-
49
47
  export default {
50
48
  name: 'ProductSizeSelectorColorCell',
51
49
  mixins: [
@@ -88,7 +86,8 @@ export default {
88
86
  };
89
87
  },
90
88
  computed: {
91
- ...mapGetters(['usedSimpleProducts', 'product']),
89
+ ...mapGetters(['currency']),
90
+ ...mapGetters('product', ['usedSimpleProducts', 'product']),
92
91
  disabled() {
93
92
  const sizeWithoutColor = this.color.sizes && !this.color.sizes.find(({ alias }) => alias === this.size.alias);
94
93
  return sizeWithoutColor || this.outStock;
@@ -117,7 +116,7 @@ export default {
117
116
  }
118
117
  },
119
118
  methods: {
120
- ...mapMutations(['setSimpleProductAmount']),
119
+ ...mapMutations('product', ['setSimpleProductAmount']),
121
120
  onFocus() {
122
121
  this.defaultValue = '';
123
122
  },
@@ -0,0 +1,58 @@
1
+ @import '@/assets/scss/variables';
2
+
3
+ .ProductSizeSelectorColor {
4
+ &__wrapper td {
5
+ border: 1px solid $gray !important;
6
+ font-weight: 800;
7
+ font-size: 18px;
8
+ line-height: 25px;
9
+ text-transform: uppercase;
10
+ color: $black;
11
+ &.disabled {
12
+ color: $gray_main;
13
+ pointer-events: none !important;
14
+ }
15
+ }
16
+ &__color-name {
17
+ width: 70px;
18
+ span {
19
+ writing-mode: vertical-lr;
20
+ transform: rotate(180deg);
21
+ width: 100%;
22
+ display: block;
23
+ margin-left: -20px;
24
+ }
25
+ @media (max-width: $bp-extra-small-max) {
26
+ width: 40px;
27
+ span {
28
+ margin-left: -6px;
29
+ }
30
+ }
31
+ }
32
+ &__size {
33
+ width: 70px;
34
+ }
35
+ &__in-stock,
36
+ &__out-stock {
37
+ font-weight: 600;
38
+ text-transform: none;
39
+ }
40
+ &__out-stock {
41
+ color: $gray_main;
42
+ }
43
+ }
44
+
45
+ ::v-deep .ProductSizeSelectorColorCell {
46
+ &__field {
47
+ line-height: 20px;
48
+ input {
49
+ height: 30px;
50
+ padding: 5px !important;
51
+ background-color: $gray;
52
+ }
53
+ }
54
+ &__side-control {
55
+ background: $green;
56
+ width: 26px;
57
+ }
58
+ }
@@ -0,0 +1,128 @@
1
+ <template>
2
+ <tr class="ProductSizeSelectorColor__wrapper">
3
+ <td
4
+ v-if="rowspan"
5
+ :rowspan="rowspan"
6
+ class="ProductSizeSelectorColor__color-name">
7
+ <span>
8
+ {{ product.color.name }}
9
+ </span>
10
+ </td>
11
+ <td
12
+ class="ProductSizeSelectorColor__size hidden-sm-and-down"
13
+ :class="{ disabled }">
14
+ {{ product.size.shortName }}
15
+ </td>
16
+ <td
17
+ :class="{ disabled }">
18
+ <div class="lc_regular14 hidden-md-and-up">
19
+ {{ product.size.shortName }}
20
+ </div>
21
+ <v-popover
22
+ trigger="hover"
23
+ :delay="{ show: 200, hide: 400 }"
24
+ popover-class="tooltip popover white"
25
+ class="ProductSizeSelectorColor__price">
26
+ <span>
27
+ {{ productPrice | price(currency) }}
28
+ </span>
29
+ <template slot="popover">
30
+ <div>
31
+ <pricing-discounts-table
32
+ :with-gst="withGst"
33
+ :prices="pricing"
34
+ :amount="usedSimpleProductsQuantity" />
35
+ </div>
36
+ </template>
37
+ </v-popover>
38
+ <div class="hidden-md-and-up">
39
+ <div
40
+ v-if="product.quantityStock"
41
+ class="ProductSizeSelectorColor__in-stock">
42
+ {{ currentQuantityStock }} in stock
43
+ </div>
44
+ <div
45
+ v-else
46
+ class="ProductSizeSelectorColor__out-stock">
47
+ out of stock
48
+ </div>
49
+ </div>
50
+ </td>
51
+ <td class="ProductSizeSelectorColor__stock hidden-sm-and-down">
52
+ <div
53
+ v-if="product.quantityStock"
54
+ class="ProductSizeSelectorColor__in-stock">
55
+ {{ currentQuantityStock }} in stock
56
+ </div>
57
+ <div
58
+ v-else
59
+ class="ProductSizeSelectorColor__out-stock">
60
+ out of stock
61
+ </div>
62
+ </td>
63
+ <td class="ProductSizeSelectorColor__cell">
64
+ <product-size-selector-color-cell
65
+ :side-controls="true"
66
+ :show-max-modal="false"
67
+ :out-stock="disabled"
68
+ :color="product.color"
69
+ :size="product.size" />
70
+ </td>
71
+ </tr>
72
+ </template>
73
+
74
+ <script>
75
+ import { mapGetters } from 'vuex';
76
+ import PricingDiscountsTable from '@lancom/shared/components/common/pricing_discounts_table/pricing-discounts-table';
77
+ import { price } from '@lancom/shared/assets/js/utils/filters';
78
+ import ProductSizeSelectorColorCell from '@lancom/shared/components/product/product_size_selector/product_size_selector_color/product_size_selector_color_cell/product-size-selector-color-cell';
79
+ import { tax } from '@lancom/shared/assets/js/utils/filters';
80
+
81
+ export default {
82
+ name: 'ProductSizeSelectorColor',
83
+ filters: {
84
+ price
85
+ },
86
+ components: {
87
+ PricingDiscountsTable,
88
+ ProductSizeSelectorColorCell
89
+ },
90
+ props: {
91
+ product: {
92
+ type: Object,
93
+ required: true
94
+ },
95
+ rowspan: {
96
+ type: Number,
97
+ default: 0
98
+ },
99
+ withGst: {
100
+ type: Boolean,
101
+ default: false
102
+ }
103
+ },
104
+ computed: {
105
+ ...mapGetters('product', ['isPrintPricing', 'usedSimpleProductsQuantity']),
106
+ ...mapGetters(['gstTax', 'currency']),
107
+ pricing() {
108
+ return (this.isPrintPricing ? this.product.pricing : this.product.unprintedPricing) || [];
109
+ },
110
+ productPrice() {
111
+ const amount = this.usedSimpleProductsQuantity;
112
+ const pricing = this.pricing;
113
+ const price = (pricing.find(({ min, max }) => (!min || min <= amount) && (!max || max >= amount)) || pricing[0] || {}).price || 0;
114
+ return this.withGst ? tax(price, this.gstTax) : price;
115
+ },
116
+ disabled() {
117
+ return !this.product.quantityStock || !this.productPrice;
118
+ },
119
+ currentQuantityStock() {
120
+ return (this.product.quantityStock || 0) - (this.product.amount || 0);
121
+ }
122
+ }
123
+ };
124
+ </script>
125
+
126
+ <style lang="scss" scoped>
127
+ @import 'product-size-selector-color.scss';
128
+ </style>
@@ -0,0 +1,12 @@
1
+ @import '@/assets/scss/variables';
2
+
3
+ .ProductsSizeSelectorColor {
4
+ &__table {
5
+ border: 1px solid $gray;
6
+ font-weight: 800;
7
+ font-size: 18px;
8
+ line-height: 25px;
9
+ text-transform: uppercase;
10
+ color: $black;
11
+ }
12
+ }
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <div>
3
+ <table class="ProductsSizeSelectorColor__table lc_table bordered">
4
+ <tbody class="centered">
5
+ <product-size-selector-color
6
+ v-for="(product, index) in products"
7
+ :key="`${editableColor._id}_${product._id}`"
8
+ :rowspan="index === 0 ? products.length : 0"
9
+ :with-gst="withGst"
10
+ :product="product" />
11
+ </tbody>
12
+ </table>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import { mapGetters } from 'vuex';
18
+ import { sortBySize } from '@lancom/shared/assets/js/utils/sizes';
19
+ import ProductSizeSelectorColor from './product_size_selector_color/product-size-selector-color';
20
+
21
+ export default {
22
+ name: 'ProductsSizeSelectorColor',
23
+ components: {
24
+ ProductSizeSelectorColor
25
+ },
26
+ props: {
27
+ withGst: {
28
+ type: Boolean,
29
+ default: false
30
+ }
31
+ },
32
+ computed: {
33
+ ...mapGetters('product', ['editableColor', 'editableColorSimpleProducts']),
34
+ products() {
35
+ return sortBySize(this.editableColorSimpleProducts);
36
+ }
37
+ }
38
+ };
39
+ </script>
40
+
41
+ <style lang="scss" scoped>
42
+ @import 'products-size-selector-color.scss';
43
+ </style>
@@ -106,7 +106,7 @@
106
106
  Price
107
107
  </div>
108
108
  <div>
109
- {{ layerPrintPricing | pricingRange }}
109
+ {{ layerPrintPricing | pricingRange(currency) }}
110
110
  </div>
111
111
  <v-popover
112
112
  ref="popover"
@@ -172,6 +172,7 @@ export default {
172
172
  }
173
173
  },
174
174
  computed: {
175
+ ...mapGetters(['currency']),
175
176
  ...mapGetters('product', ['product']),
176
177
  type() {
177
178
  return this.layer.type;
@@ -14,7 +14,7 @@
14
14
  </div>
15
15
  <div class="WizardPrintAreaPrintSize__type-price mt-3">
16
16
  <span>
17
- {{ getSizePricing(size) | pricingRange }}
17
+ {{ getSizePricing(size) | pricingRange(currency) }}
18
18
  </span>
19
19
  </div>
20
20
  <v-popover
@@ -56,6 +56,7 @@ export default {
56
56
  }
57
57
  },
58
58
  computed: {
59
+ ...mapGetters(['currency']),
59
60
  ...mapGetters('product', ['product', 'selectedPrintAreas', 'availablePrintTypes']),
60
61
  selectedPrintArea() {
61
62
  return this.selectedPrintAreas[this.editablePrintArea._id];
@@ -25,7 +25,7 @@
25
25
  </div>
26
26
  <div class="WizardPrintAreaPrintType__type-price mt-7">
27
27
  <span>
28
- {{ getPrinTypePricing(type) | pricingRange }}
28
+ {{ getPrinTypePricing(type) | pricingRange(currency) }}
29
29
  </span>
30
30
  </div>
31
31
  <v-popover
@@ -65,6 +65,7 @@ export default {
65
65
  }
66
66
  },
67
67
  computed: {
68
+ ...mapGetters(['currency']),
68
69
  ...mapGetters('product', ['selectedPrintAreas', 'selectedPrintTypes', 'product', 'availablePrintTypes', 'selectedPrintUnderbases']),
69
70
  selectedPrintArea() {
70
71
  return this.selectedPrintAreas[this.editablePrintArea._id];
@@ -10,9 +10,9 @@
10
10
  }
11
11
  }
12
12
  &__item-wrapper {
13
- width: 330px;
13
+ width: 270px;
14
14
  height: 450px;
15
- margin: 0 0 25px 25px;
15
+ margin: 0 0 15px 15px;
16
16
  position: relative;
17
17
  z-index: 1;
18
18
  &--active {
@@ -17,7 +17,7 @@
17
17
  &__colors {
18
18
  display: flex;
19
19
  flex-wrap: wrap;
20
- margin: 14px 25px 20px 25px;
20
+ margin: 2px 25px 20px 25px;
21
21
  }
22
22
  &__color {
23
23
  margin: 0px;
@@ -53,8 +53,8 @@
53
53
  position: relative;
54
54
  transition: background-color 0.5s ease;
55
55
  background-color: white;
56
- height: 330px;
57
- width: 340px;
56
+ height: 300px;
57
+ width: 270px;
58
58
  display: flex;
59
59
  align-items: center;
60
60
  justify-content: center;
@@ -71,9 +71,10 @@
71
71
  }
72
72
  }
73
73
  &__brand {
74
- width: 54px;
74
+ max-width: 54px;
75
+ max-height: 44px;
75
76
  top: 10px;
76
- left: 5px;
77
+ left: 10px;
77
78
  position: absolute;
78
79
  z-index: 10;
79
80
  opacity: 0.7;
@@ -133,16 +134,11 @@
133
134
  flex-direction: column;
134
135
  align-items: center;
135
136
  &-item {
136
- margin-top: 4px;
137
137
  padding: 0 20px;
138
138
  }
139
139
  &-name {
140
- text-overflow: ellipsis;
141
- white-space: nowrap;
142
- overflow: hidden;
143
- max-width: 180px;
144
- margin-right: 5px;
145
140
  display: block;
141
+ text-align: center;
146
142
  }
147
143
  }
148
144
  }
@@ -35,25 +35,17 @@
35
35
  v-if="product.isTearAwayTag"
36
36
  class="ProductListProduct__tear-away-tag"
37
37
  src="~static/images/tear-away-tag.svg" />
38
- <div class="ProductListProduct__gender">
38
+ <!-- <div class="ProductListProduct__gender">
39
39
  <span>{{ product.gender }}</span>
40
- </div>
40
+ </div> -->
41
41
  </a>
42
42
  <div class="ProductListProduct__info">
43
43
  <div class="ProductListProduct__info-item">
44
44
  <a :href="productLink" class="lc_h4 row">
45
45
  <div>
46
- <v-popover trigger="hover">
47
- <span class="ProductListProduct__info-name">
48
- {{ product.name }}
49
- </span>
50
- <template slot="popover">
51
- {{ product.name }}
52
- </template>
53
- </v-popover>
54
- </div>
55
- <div>
56
- | {{ product.SKU }}
46
+ <span class="ProductListProduct__info-name">
47
+ {{ product.name }} | {{ product.SKU }}
48
+ </span>
57
49
  </div>
58
50
  </a>
59
51
  </div>
@@ -67,12 +59,12 @@
67
59
  class="ProductListProduct__info-item lc_h4">
68
60
  {{ product.minPrice | price(currency) }} - {{ product.maxPrice | price(currency) }}
69
61
  </div>
70
- <div class="ProductListProduct__info-item mt-9 lc_caption">
62
+ <div class="ProductListProduct__info-item mt-2 lc_caption">
71
63
  {{ product.colors.length }} {{ product.colors.length === 1 ? 'Colour' : 'Colours' }} | Size: {{ product.sizes | sizesRange }}
72
64
  </div>
73
65
  <div
74
66
  v-if="full"
75
- class="ProductListProduct__info-item mt-9 lc_caption visible-full">
67
+ class="ProductListProduct__info-item mt-2 lc_caption visible-full">
76
68
  {{ product.fabricInfoShort }} | {{ product.materialWeight }} gsm
77
69
  </div>
78
70
  <div
@@ -67,6 +67,7 @@ export default {
67
67
  render: h => h(
68
68
  component,
69
69
  {
70
+ props: params?.props,
70
71
  on: { close: this.hide, ...events }
71
72
  }
72
73
  )
@@ -1,5 +1,5 @@
1
- async function googleLocalShoppingFeed(axios, config, availableStores) {
2
- const result = await googleShoppingFeed(axios, config, availableStores);
1
+ async function googleLocalShoppingFeed(axios, config, availableStores, country) {
2
+ const result = await googleShoppingFeed(axios, config, availableStores, country);
3
3
 
4
4
  const fields = [
5
5
  'g:availability',
@@ -14,8 +14,8 @@ async function googleLocalShoppingFeed(axios, config, availableStores) {
14
14
  .map(i => fields.reduce((item, field) => ({ ...item, [field]: i[field] }), {}));
15
15
  return result;
16
16
  }
17
- async function googleShoppingFeed(axios, config, availableStores) {
18
- const { data } = await axios.get(`${config.LOCAL_API_URL}/feed/products?host=${config.HOST_NAME}`);
17
+ async function googleShoppingFeed(axios, config, availableStores, country) {
18
+ const { data } = await axios.get(`${config.LOCAL_API_URL}/feed/products?host=${config.HOST_NAME}&country=${country || ''}`);
19
19
  const spliceFirstImage = images => (images || []).splice(0, 1)[0];
20
20
  const getImages = images => (images || []).length > 0 ? images : null;
21
21
  const channel = {