@lancom/shared 0.0.278 → 0.0.280

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 (41) hide show
  1. package/assets/js/api/admin.js +3 -0
  2. package/assets/js/utils/order.js +1 -1
  3. package/assets/js/utils/quote.js +6 -1
  4. package/components/common/progress_steps/progress-steps.scss +3 -1
  5. package/components/common/progress_steps/progress-steps.vue +9 -1
  6. package/components/editor/editor.vue +18 -1
  7. package/components/editor/editor_wizard/editor-wizard.scss +22 -0
  8. package/components/editor/editor_wizard/editor-wizard.vue +66 -0
  9. package/components/editor/editor_workspace/editor_workspace_side/editor-workspace-side.vue +1 -1
  10. package/components/product/related_products/related-products.vue +1 -1
  11. package/components/product/wizard/wizard.scss +222 -0
  12. package/components/product/wizard/wizard.vue +274 -0
  13. package/components/product/wizard/wizard_print/wizard-print.scss +94 -0
  14. package/components/product/wizard/wizard_print/wizard-print.vue +130 -0
  15. package/components/product/wizard/wizard_print_area/wizard-print-area.scss +101 -0
  16. package/components/product/wizard/wizard_print_area/wizard-print-area.vue +86 -0
  17. package/components/product/wizard/wizard_print_layers/wizard-print-layers.scss +60 -0
  18. package/components/product/wizard/wizard_print_layers/wizard-print-layers.vue +67 -0
  19. package/components/product/wizard/wizard_print_layers/wizard_print_layer/wizard-print-layer.scss +47 -0
  20. package/components/product/wizard/wizard_print_layers/wizard_print_layer/wizard-print-layer.vue +210 -0
  21. package/components/product/wizard/wizard_print_review/wizard-print-review.scss +0 -0
  22. package/components/product/wizard/wizard_print_review/wizard-print-review.vue +71 -0
  23. package/components/product/wizard/wizard_print_size/wizard-print-size.scss +68 -0
  24. package/components/product/wizard/wizard_print_size/wizard-print-size.vue +49 -0
  25. package/components/product/wizard/wizard_print_size/wizard_print_area_print_size/wizard-print-area-print-size.scss +65 -0
  26. package/components/product/wizard/wizard_print_size/wizard_print_area_print_size/wizard-print-area-print-size.vue +106 -0
  27. package/components/product/wizard/wizard_print_text_or_logo/wizard-print-text-or-logo.scss +65 -0
  28. package/components/product/wizard/wizard_print_text_or_logo/wizard-print-text-or-logo.vue +116 -0
  29. package/components/product/wizard/wizard_print_text_or_logo/wizard_text_or_logo_form/wizard-text-or-logo-form.scss +138 -0
  30. package/components/product/wizard/wizard_print_text_or_logo/wizard_text_or_logo_form/wizard-text-or-logo-form.vue +157 -0
  31. package/components/product/wizard/wizard_print_type/wizard-print-type.scss +65 -0
  32. package/components/product/wizard/wizard_print_type/wizard-print-type.vue +49 -0
  33. package/components/product/wizard/wizard_print_type/wizard_print_area_print_type/wizard-print-area-print-type.scss +87 -0
  34. package/components/product/wizard/wizard_print_type/wizard_print_area_print_type/wizard-print-area-print-type.vue +114 -0
  35. package/components/product/wizard/wizard_print_underbase/wizard-print-underbase.scss +65 -0
  36. package/components/product/wizard/wizard_print_underbase/wizard-print-underbase.vue +49 -0
  37. package/components/product/wizard/wizard_print_underbase/wizard_print_area_print_underbase/wizard-print-area-print-underbase.scss +87 -0
  38. package/components/product/wizard/wizard_print_underbase/wizard_print_area_print_underbase/wizard-print-area-print-underbase.vue +90 -0
  39. package/package.json +1 -1
  40. package/store/layers.js +6 -1
  41. package/store/product.js +42 -0
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <div class="WizardPrintAreaPrintSize__wrapper">
3
+ <div class="WizardPrintAreaPrintSize__sizes">
4
+ <div
5
+ v-for="(size, index) in sizes"
6
+ :key="index"
7
+ class="WizardPrintAreaPrintSize__size"
8
+ :class="{
9
+ 'WizardPrintAreaPrintSize__size--selected': isSelectedSize(size)
10
+ }"
11
+ @click="selectPrintAreaSize(size)">
12
+ <div class="WizardPrintAreaPrintSize__size-name">
13
+ {{ size.name }}
14
+ </div>
15
+ <div class="WizardPrintAreaPrintSize__type-price mt-3">
16
+ <span>
17
+ {{ getSizePricing(size) | pricingRange }}
18
+ </span>
19
+ </div>
20
+ <v-popover
21
+ ref="popover"
22
+ trigger="hover"
23
+ :delay="{ show: 200, hide: 400 }"
24
+ popover-class="tooltip popover white"
25
+ class="WizardPrintAreaPrintSize__see-price">
26
+ see prices
27
+ <template slot="popover">
28
+ <pricing-table
29
+ :items="getSizePrintTypes(size)"
30
+ pricing-attr="sizePrintArea.printCost" />
31
+ </template>
32
+ </v-popover>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </template>
37
+
38
+ <script>
39
+ import { mapGetters, mapMutations } from 'vuex';
40
+ import { pricingRange } from '@lancom/shared/assets/js/utils/filters';
41
+ import { getPrintAreaSizes } from '@lancom/shared/assets/js/utils/prints';
42
+ import PricingTable from '@lancom/shared/components/common/pricing_table/pricing-table';
43
+
44
+ export default {
45
+ name: 'WizardPrintAreaPrintSize',
46
+ components: {
47
+ PricingTable
48
+ },
49
+ filters: {
50
+ pricingRange
51
+ },
52
+ props: {
53
+ editablePrintArea: {
54
+ type: Object,
55
+ required: true
56
+ }
57
+ },
58
+ computed: {
59
+ ...mapGetters('product', ['product', 'selectedPrintAreas', 'availablePrintTypes']),
60
+ selectedPrintArea() {
61
+ return this.selectedPrintAreas[this.editablePrintArea._id];
62
+ },
63
+ sizes() {
64
+ return getPrintAreaSizes(this.editablePrintArea);
65
+ }
66
+ },
67
+ mounted() {
68
+ if (!this.selectedPrintArea) {
69
+ const first = this.sizes[0];
70
+ if (first) {
71
+ this.selectPrintAreaSize(first);
72
+ }
73
+ }
74
+ },
75
+ methods: {
76
+ ...mapMutations('product', ['setSelectedPrintArea']),
77
+ isSelectedSize(printArea) {
78
+ return this.selectedPrintArea?._id === printArea._id;
79
+ },
80
+ selectPrintAreaSize(size) {
81
+ this.setSelectedPrintArea({ printArea: this.editablePrintArea._id, size });
82
+ },
83
+ getSizePrintTypes({ _id }) {
84
+ return this.product.printTypes
85
+ .map(type => ({
86
+ ...type,
87
+ sizePrintArea: type.printAreas.find(({ printSizes }) => printSizes.map(({ _id }) => _id).includes(_id))
88
+ }))
89
+ .filter(printType => this?.availablePrintTypes.includes(printType.type) && !!printType.sizePrintArea);
90
+ },
91
+ getSizePricing(size) {
92
+ const sizePrintTypes = this.getSizePrintTypes(size);
93
+ return sizePrintTypes.reduce((pricing, { sizePrintArea }) => {
94
+ return [
95
+ ...pricing,
96
+ ...sizePrintArea.printCost
97
+ ];
98
+ }, []);
99
+ }
100
+ }
101
+ };
102
+ </script>
103
+
104
+ <style lang="scss">
105
+ @import 'wizard-print-area-print-size';
106
+ </style>
@@ -0,0 +1,65 @@
1
+ @import "@/assets/scss/variables";
2
+
3
+ .WizardPrintTextOrLogo {
4
+ &__title {
5
+ font-weight: 800;
6
+ font-size: 28px;
7
+ line-height: 38px;
8
+ color: $black;
9
+ margin-bottom: 26px;
10
+ }
11
+ &__sizes {
12
+ display: flex;
13
+ justify-content: space-around;
14
+ flex-wrap: wrap;
15
+ margin: -10px 0 0 -10px;
16
+ width: calc(100% + 10px);
17
+ }
18
+ &__size {
19
+ width: 140px;
20
+ height: 122px;
21
+ margin: 10px 0 0 10px;
22
+ border: 1px solid $grey_3;
23
+ display: flex;
24
+ flex-direction: column;
25
+ align-items: center;
26
+ justify-content: center;
27
+ cursor: pointer;
28
+ position: relative;
29
+ &::after {
30
+ content: ' ';
31
+ position: absolute;
32
+ top: 10px;
33
+ right: 10px;
34
+ width: 20px;
35
+ height: 20px;
36
+ background: $gray;
37
+ border: 1px solid $grey_2;
38
+ border-radius: 10px;
39
+ }
40
+ &:hover {
41
+ border: 1px solid $green;
42
+ }
43
+ &--selected {
44
+ border: 1px solid $green;
45
+ &::after {
46
+ background-color: $green;
47
+ border: 1px solid $green;
48
+ background-image: url(/static/icons/checked.svg);
49
+ background-repeat: no-repeat;
50
+ background-position: center center;
51
+ }
52
+ }
53
+ &-name {
54
+ font-size: 16px;
55
+ line-height: 22px;
56
+ margin-top: 10px;
57
+ font-weight: bold;
58
+ }
59
+ }
60
+ &__see-price {
61
+ margin-top: 5px;
62
+ font-size: 12px;
63
+ color: $gray_main;
64
+ }
65
+ }
@@ -0,0 +1,116 @@
1
+ <template>
2
+ <div class="WizardPrintTextOrLogo__wrapper">
3
+ <div class="WizardPrintTextOrLogo__areas">
4
+ <div
5
+ v-for="(layer, index) in layers"
6
+ :key="index"
7
+ class="WizardPrintTextOrLogo__area">
8
+ <div class="WizardPrintTextOrLogo__title">
9
+ {{ layer.printArea.name }}
10
+ </div>
11
+ <wizard-text-or-logo-form :layer="layer" />
12
+ </div>
13
+ </div>
14
+ <div class="ProgressSteps__controls">
15
+ <btn
16
+ btn-class="white"
17
+ btn-label="BACK"
18
+ @onclick="$emit('prev')">
19
+ </btn>
20
+ <btn
21
+ btn-class="green"
22
+ btn-label="NEXT"
23
+ :btn-disabled="!isValidLayers"
24
+ @onclick="goNext">
25
+ <i
26
+ slot="icon-after"
27
+ class="icon-arrow-right"></i>
28
+ </btn>
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ import { mapGetters, mapMutations } from 'vuex';
35
+ import { getLayerModel } from '@lancom/shared/assets/js/models/product-layers';
36
+ import WizardTextOrLogoForm from './wizard_text_or_logo_form/wizard-text-or-logo-form';
37
+
38
+ const DEFAULT_LAYER = {
39
+ type: 'text',
40
+ notes: null,
41
+ copy: null,
42
+ url: null,
43
+ file: null
44
+ };
45
+
46
+ export default {
47
+ name: 'WizardPrintType',
48
+ components: {
49
+ WizardTextOrLogoForm
50
+ },
51
+ data() {
52
+ return {
53
+ layers: []
54
+ };
55
+ },
56
+ computed: {
57
+ ...mapGetters('layers', ['editableLayers']),
58
+ ...mapGetters('product', ['editableColor', 'selectedPrintAreas', 'selectedPrintTypes', 'editablePrintAreas']),
59
+ isValidLayers() {
60
+ return !this.layers.some(l => !l.copy && !l.file);
61
+ }
62
+ },
63
+ mounted() {
64
+
65
+ if (!this.editableLayers.length) {
66
+ this.layers = this.editablePrintAreas
67
+ .reduce((printAreas, printArea) => [...printAreas, { ...DEFAULT_LAYER, printArea }], []);
68
+ } else {
69
+ this.layers = this.editableLayers;
70
+ }
71
+ },
72
+ methods: {
73
+ ...mapMutations('layers', ['setEditableLayers']),
74
+ async goNext() {
75
+ const layers = await Promise.all(
76
+ this.layers.map(async layer => {
77
+ const printAreaId = layer.printArea?._id || layer.printArea;
78
+ const editablePrintArea = this.editablePrintAreas.find(pa => pa._id === printAreaId);
79
+ const selectedPrintArea = this.selectedPrintAreas[printAreaId];
80
+ const selectedPrintType = this.selectedPrintTypes[printAreaId];
81
+ const data = {
82
+ type: layer.type,
83
+ colorId: this.editableColor?._id,
84
+ properties: {
85
+ notes: layer.notes,
86
+ printArea: editablePrintArea._id,
87
+ printSize: selectedPrintArea?._id,
88
+ side: editablePrintArea.side,
89
+ printType: selectedPrintType._id
90
+ }
91
+ };
92
+ if (layer.type === 'text') {
93
+ data.properties.copy = layer.copy;
94
+ } else {
95
+ data.properties.file = layer.file;
96
+ data.url = layer.url;
97
+ }
98
+
99
+ if (layer.guid) {
100
+ data.properties.guid = layer.guid;
101
+ }
102
+ return await getLayerModel(data);
103
+ })
104
+ );
105
+
106
+ this.setEditableLayers(layers);
107
+
108
+ this.$emit('next');
109
+ }
110
+ }
111
+ };
112
+ </script>
113
+
114
+ <style lang="scss">
115
+ @import 'wizard-print-text-or-logo';
116
+ </style>
@@ -0,0 +1,138 @@
1
+ @import "@/assets/scss/variables";
2
+ .WizardTextOrLogoForm {
3
+ &__title {
4
+ font-weight: 800;
5
+ font-size: 28px;
6
+ line-height: 38px;
7
+ color: $black;
8
+ margin-bottom: 26px;
9
+ }
10
+ &__types {
11
+ display: flex;
12
+ align-content: space-between;
13
+ justify-content: space-between;
14
+ @media (max-width: $bp-extra-small-max) {
15
+ flex-wrap: wrap;
16
+ }
17
+ }
18
+ &__type {
19
+ flex-grow: 1;
20
+ height: 167px;
21
+ border: 1px solid $grey_3;
22
+ display: flex;
23
+ flex-direction: column;
24
+ justify-content: center;
25
+ cursor: pointer;
26
+ position: relative;
27
+ padding: 10px;
28
+ opacity: 0.6;
29
+ @media (max-width: $bp-extra-small-max) {
30
+ margin: 10px 0;
31
+ }
32
+ &::after {
33
+ content: ' ';
34
+ position: absolute;
35
+ top: 10px;
36
+ left: 10px;
37
+ width: 20px;
38
+ height: 20px;
39
+ border: 1px solid $grey_2;
40
+ border-radius: 10px;
41
+ }
42
+ &:hover {
43
+ border: 1px solid $green;
44
+ opacity: 1;
45
+ }
46
+ &--selected {
47
+ border: 1px solid $green;
48
+ opacity: 1;
49
+ &::after {
50
+ background-color: $green;
51
+ border: 1px solid $green;
52
+ background-image: url(/static/icons/checked.svg);
53
+ background-repeat: no-repeat;
54
+ background-position: center center;
55
+ }
56
+ }
57
+ &-name {
58
+ font-weight: bold;
59
+ font-size: 20px;
60
+ line-height: 27px;
61
+ color: $black;
62
+ }
63
+ &-input {
64
+ margin-top: 14px;
65
+ display: flex;
66
+ input {
67
+ flex-grow: 1;
68
+ border: 1px solid $gray;
69
+ font-family: Open Sans;
70
+ font-size: 13px;
71
+ line-height: 18px;
72
+ padding: 11px;
73
+ outline: none;
74
+ }
75
+ }
76
+ &-upload {
77
+ display: flex;
78
+ &--uploading {
79
+ pointer-events: none;
80
+ opacity: 0.7;
81
+ }
82
+ &-btn {
83
+ font-weight: bold;
84
+ font-size: 16px;
85
+ line-height: 22px;
86
+ text-transform: uppercase;
87
+ background-color: $green;
88
+ padding: 8px 14px;
89
+ &--disabled {
90
+ background-color: $gray;
91
+ }
92
+ &--uploaded {
93
+ opacity: 0.5;
94
+ }
95
+ }
96
+ &-info {
97
+ font-size: 12px;
98
+ line-height: 16px;
99
+ color: $black;
100
+ margin-left: 12px;
101
+ }
102
+ &-progress {
103
+ position: absolute;
104
+ left: 0;
105
+ top: 0;
106
+ right: 0;
107
+ bottom: 0;
108
+ }
109
+ &-file {
110
+ margin-top: 5px;
111
+ font-size: 12px;
112
+ a {
113
+ text-decoration: none;
114
+ color: $black;
115
+ }
116
+ }
117
+ }
118
+ &-error {
119
+ margin-top: 5px;
120
+ font-size: 12px;
121
+ color: $error;
122
+ }
123
+ }
124
+ &__description {
125
+ margin-top: 22px;
126
+ textarea {
127
+ height: 60px;
128
+ width: 100%;
129
+ border: 1px solid $gray;
130
+ padding: 11px;
131
+ font-size: 14px;
132
+ line-height: 18px;
133
+ font-family: Open Sans;
134
+ font-style: normal;
135
+ outline: none;
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,157 @@
1
+ <template>
2
+ <div class="WizardTextOrLogoForm__wrapper">
3
+ <div class="WizardTextOrLogoForm__types">
4
+ <div
5
+ class="WizardTextOrLogoForm__type"
6
+ :class="{
7
+ 'WizardTextOrLogoForm__type--selected': layerType === 'text'
8
+ }"
9
+ @click="selectLayerType('text')">
10
+ <div class="WizardTextOrLogoForm__type-name">
11
+ Add text
12
+ </div>
13
+ <div class="WizardTextOrLogoForm__type-input">
14
+ <input
15
+ v-model="layer.copy"
16
+ placeholder="Enter your text"
17
+ type="text"
18
+ name="layer-copy" />
19
+ </div>
20
+ </div>
21
+ <div
22
+ class="WizardTextOrLogoForm__type"
23
+ :class="{
24
+ 'WizardTextOrLogoForm__type--selected': layerType === 'art'
25
+ }"
26
+ @click="selectLayerType('art')">
27
+ <div class="WizardTextOrLogoForm__type-name">
28
+ Add logo
29
+ </div>
30
+ <div class="WizardTextOrLogoForm__type-input">
31
+ <file-uploader
32
+ :multiple="false"
33
+ :url="`image/editor/${shop._id}/${product._id}`"
34
+ :has-conversion-error-modal="false"
35
+ :show-error-message="false"
36
+ @onchange="handleUploadChange"
37
+ @onerror="handleUploadError"
38
+ @onuploaded="handleUploaded">
39
+ <template v-slot:toggle="{ uploading }">
40
+ <div
41
+ class="WizardTextOrLogoForm__type-upload"
42
+ :class="{
43
+ 'WizardTextOrLogoForm__type-upload--uploading': uploading
44
+ }">
45
+ <div
46
+ class="WizardTextOrLogoForm__type-upload-btn"
47
+ :class="{
48
+ 'WizardTextOrLogoForm__type-upload-btn--disabled': uploading,
49
+ 'WizardTextOrLogoForm__type-upload-btn--uploaded': layer.file
50
+ }">
51
+ Upload
52
+ </div>
53
+ <div class="WizardTextOrLogoForm__type-upload-info">
54
+ <div>Note: accepted file types:</div>
55
+ <div><b>JPEG / PNG / AI / EPS / PDF</b></div>
56
+ </div>
57
+ </div>
58
+ </template>
59
+ <template v-slot:progress="{ progress }">
60
+ <div
61
+ v-if="progress"
62
+ class="WizardTextOrLogoForm__type-upload-progress">
63
+ <spinner background="black" />
64
+ </div>
65
+ </template>
66
+ </file-uploader>
67
+ </div>
68
+ <div
69
+ v-if="uploadError"
70
+ class="WizardTextOrLogoForm__type-error">
71
+ {{ uploadError }}
72
+ </div>
73
+ <div
74
+ v-if="layer.file"
75
+ class="WizardTextOrLogoForm__type-upload-file">
76
+ <span @click="layer.file = null">x</span>
77
+ Logo:
78
+ <a
79
+ :href="layer.file.origin"
80
+ target="_blank">
81
+ {{ layer.file.fileName }}
82
+ </a>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ <div class="WizardTextOrLogoForm__description">
87
+ <textarea
88
+ v-model="layer.notes"
89
+ name="layer-notes"
90
+ placeholder="Add notes for us">
91
+ </textarea>
92
+ </div>
93
+ </div>
94
+ </template>
95
+
96
+ <script>
97
+ import { mapGetters } from 'vuex';
98
+ import FileUploader from '@lancom/shared/components/common/file_uploader';
99
+
100
+ export default {
101
+ name: 'WizardTextOrLogoForm',
102
+ components: {
103
+ FileUploader
104
+ },
105
+ props: {
106
+ layer: {
107
+ type: Object,
108
+ required: true
109
+ }
110
+ },
111
+ data() {
112
+ return {
113
+ layerType: 'text',
114
+ uploadError: null
115
+ };
116
+ },
117
+ computed: {
118
+ ...mapGetters(['shop']),
119
+ ...mapGetters('product', ['product'])
120
+ },
121
+ methods: {
122
+ selectLayerType(type) {
123
+ if (this.layerType !== type) {
124
+ this.layerType = type;
125
+ this.$set(this.layer, 'copy', null);
126
+ this.$set(this.layer, 'url', null);
127
+ this.$set(this.layer, 'file', null);
128
+ this.$set(this.layer, 'type', type);
129
+ }
130
+ },
131
+ handleUploaded(file) {
132
+ const { url } = file;
133
+ this.$set(this.layer, 'url', url);
134
+ this.$set(this.layer, 'file', file);
135
+ },
136
+ handleUploadError(e) {
137
+ const { error, data } = e?.response?.data || {};
138
+ if (data) {
139
+ this.$set(this.layer, 'file', {
140
+ fileName: data.fileName,
141
+ origin: data.source
142
+ });
143
+ } else {
144
+ this.uploadError = error;
145
+ }
146
+ },
147
+ handleUploadChange() {
148
+ this.uploadError = null;
149
+ this.$set(this.layer, 'file', null);
150
+ }
151
+ }
152
+ };
153
+ </script>
154
+
155
+ <style lang="scss">
156
+ @import 'wizard-text-or-logo-form';
157
+ </style>
@@ -0,0 +1,65 @@
1
+ @import "@/assets/scss/variables";
2
+
3
+ .WizardPrintSize {
4
+ &__title {
5
+ font-weight: 800;
6
+ font-size: 28px;
7
+ line-height: 38px;
8
+ color: $black;
9
+ margin-bottom: 26px;
10
+ }
11
+ &__sizes {
12
+ display: flex;
13
+ justify-content: space-around;
14
+ flex-wrap: wrap;
15
+ margin: -10px 0 0 -10px;
16
+ width: calc(100% + 10px);
17
+ }
18
+ &__size {
19
+ width: 140px;
20
+ height: 122px;
21
+ margin: 10px 0 0 10px;
22
+ border: 1px solid $grey_3;
23
+ display: flex;
24
+ flex-direction: column;
25
+ align-items: center;
26
+ justify-content: center;
27
+ cursor: pointer;
28
+ position: relative;
29
+ &::after {
30
+ content: ' ';
31
+ position: absolute;
32
+ top: 10px;
33
+ right: 10px;
34
+ width: 20px;
35
+ height: 20px;
36
+ background: $gray;
37
+ border: 1px solid $grey_2;
38
+ border-radius: 10px;
39
+ }
40
+ &:hover {
41
+ border: 1px solid $green;
42
+ }
43
+ &--selected {
44
+ border: 1px solid $green;
45
+ &::after {
46
+ background-color: $green;
47
+ border: 1px solid $green;
48
+ background-image: url(/static/icons/checked.svg);
49
+ background-repeat: no-repeat;
50
+ background-position: center center;
51
+ }
52
+ }
53
+ &-name {
54
+ font-size: 16px;
55
+ line-height: 22px;
56
+ margin-top: 10px;
57
+ font-weight: bold;
58
+ }
59
+ }
60
+ &__see-price {
61
+ margin-top: 5px;
62
+ font-size: 12px;
63
+ color: $gray_main;
64
+ }
65
+ }
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <div class="WizardPrintSize__wrapper">
3
+ <div class="WizardPrintSize__areas">
4
+ <div
5
+ v-for="(editablePrintArea, index) in editablePrintAreas"
6
+ :key="index"
7
+ class="WizardPrintSize__area">
8
+ <div class="WizardPrintSize__title">
9
+ {{ editablePrintArea.name }}
10
+ </div>
11
+ <wizard-print-area-print-type :editable-print-area="editablePrintArea" />
12
+ </div>
13
+ </div>
14
+ <div class="ProgressSteps__controls">
15
+ <btn
16
+ btn-class="white"
17
+ btn-label="BACK"
18
+ @onclick="$emit('prev')">
19
+ </btn>
20
+ <btn
21
+ btn-class="green"
22
+ btn-label="NEXT"
23
+ @onclick="$emit('next')">
24
+ <i
25
+ slot="icon-after"
26
+ class="icon-arrow-right"></i>
27
+ </btn>
28
+ </div>
29
+ </div>
30
+ </template>
31
+
32
+ <script>
33
+ import { mapGetters } from 'vuex';
34
+ import WizardPrintAreaPrintType from './wizard_print_area_print_type/wizard-print-area-print-type';
35
+
36
+ export default {
37
+ name: 'WizardPrintType',
38
+ components: {
39
+ WizardPrintAreaPrintType
40
+ },
41
+ computed: {
42
+ ...mapGetters('product', ['editablePrintAreas'])
43
+ }
44
+ };
45
+ </script>
46
+
47
+ <style lang="scss">
48
+ @import 'wizard-print-type';
49
+ </style>