@teddy-dev/frontend 1.0.1

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 (112) hide show
  1. package/algolia/algolia-loader.js +56 -0
  2. package/algolia/algolia-search.js +222 -0
  3. package/auth/teddy-auth-login.js +29 -0
  4. package/auth/teddy-auth-profile.js +58 -0
  5. package/auth/teddy-auth-register.js +52 -0
  6. package/auth/teddy-auth-reset.js +39 -0
  7. package/auth/teddy-auth.js +92 -0
  8. package/bantoa/bantoa-product.js +64 -0
  9. package/bantoa/bantoa-search.js +46 -0
  10. package/bantoa/bantoa-stylemix.js +43 -0
  11. package/bantoa/bantoa.js +21 -0
  12. package/cart/teddy-cart-controller.js +163 -0
  13. package/cart/teddy-cart-customer.js +86 -0
  14. package/cart/teddy-cart-discounts.js +55 -0
  15. package/cart/teddy-cart-promo-apply.js +24 -0
  16. package/cart/teddy-cart-promo-error.js +38 -0
  17. package/cart/teddy-cart-promo-loading.js +20 -0
  18. package/cart/teddy-cart-promo.js +96 -0
  19. package/components/mc-btn.js +38 -0
  20. package/components/mc-card-render.js +33 -0
  21. package/components/mc-cart-counter.js +14 -0
  22. package/components/mc-cart-error.js +35 -0
  23. package/components/mc-cart-quantity.js +43 -0
  24. package/components/mc-cart-remove.js +32 -0
  25. package/components/mc-copy.js +33 -0
  26. package/components/mc-element.js +84 -0
  27. package/components/mc-form-errors.js +35 -0
  28. package/components/mc-form-success.js +31 -0
  29. package/components/mc-form.js +223 -0
  30. package/components/mc-input-area.js +13 -0
  31. package/components/mc-input-checkbox-group.js +52 -0
  32. package/components/mc-input-checkbox.js +12 -0
  33. package/components/mc-input-password.js +39 -0
  34. package/components/mc-input-places.js +43 -0
  35. package/components/mc-input-quantity.js +43 -0
  36. package/components/mc-input-select.js +14 -0
  37. package/components/mc-input-text.js +12 -0
  38. package/components/mc-input.js +137 -0
  39. package/components/mc-loader.js +21 -0
  40. package/components/mc-modal.js +69 -0
  41. package/components/mc-password-eye.js +24 -0
  42. package/components/mc-password-tips.js +60 -0
  43. package/components/mc-qrcode.js +41 -0
  44. package/components/mc-range.js +108 -0
  45. package/components/mc-read-more.js +56 -0
  46. package/components/mc-recommended.js +50 -0
  47. package/components/mc-referrer.js +20 -0
  48. package/components/mc-splash-controller.js +32 -0
  49. package/components/mc-splash-link.js +65 -0
  50. package/components/mc-stoq.js +30 -0
  51. package/components/mc-swiper.js +333 -0
  52. package/components/mc-video.js +61 -0
  53. package/css/bootstrap-lg.css +2762 -0
  54. package/css/bootstrap-lg.min.css +1 -0
  55. package/css/bootstrap-md.css +2762 -0
  56. package/css/bootstrap-md.min.css +1 -0
  57. package/css/bootstrap-sm.css +2762 -0
  58. package/css/bootstrap-sm.min.css +1 -0
  59. package/css/bootstrap-xl.css +2790 -0
  60. package/css/bootstrap-xl.min.css +1 -0
  61. package/css/bootstrap-xxl.css +2762 -0
  62. package/css/bootstrap-xxl.min.css +1 -0
  63. package/css/bootstrap.css +9824 -0
  64. package/css/bootstrap.min.css +5 -0
  65. package/css/mc-form-errors.css +3 -0
  66. package/css/mc-loader.css +6 -0
  67. package/css/mc-password-eye.css +6 -0
  68. package/css/mc-password-tips.css +6 -0
  69. package/css/mc-read-more.css +14 -0
  70. package/css/mc-video.css +4 -0
  71. package/css/mc-wishlist-hero-btn.css +7 -0
  72. package/loader.js +110 -0
  73. package/loyalty/teddy-loyalty-create.js +40 -0
  74. package/loyalty/teddy-loyalty-redeem.js +38 -0
  75. package/loyalty/teddy-loyalty.js +214 -0
  76. package/package.json +20 -0
  77. package/res/mc-events.js +43 -0
  78. package/res/mc-shopify.js +439 -0
  79. package/res/mc-utils.js +119 -0
  80. package/res/mc-vue.js +9350 -0
  81. package/returns/teddy-return-iban.js +115 -0
  82. package/returns/teddy-return-list.js +165 -0
  83. package/returns/teddy-return-request.js +353 -0
  84. package/scripts/publish-store.js +62 -0
  85. package/test/auth-login-error.json +4 -0
  86. package/test/auth-login-success.json +13 -0
  87. package/test/auth-password-change-error.json +4 -0
  88. package/test/auth-password-change-success.json +3 -0
  89. package/test/auth-register-error.json +4 -0
  90. package/test/auth-register-success.json +12 -0
  91. package/test/auth-reset-error.json +4 -0
  92. package/test/auth-reset-success.json +3 -0
  93. package/test/loyalty-error.json +4 -0
  94. package/test/loyalty-noinfo.json +18 -0
  95. package/test/loyalty-redeem-error.json +4 -0
  96. package/test/loyalty-redeem-success.json +11 -0
  97. package/test/loyalty-success.json +143 -0
  98. package/test/returns-create-success.json +1 -0
  99. package/test/returns-get-success.json +35 -0
  100. package/test/returns-get-tracking.json +30 -0
  101. package/test/returns-list-empty.json +4 -0
  102. package/test/returns-list-success.json +59 -0
  103. package/test/returns-search-manual.json +67 -0
  104. package/test/returns-search-success.json +76 -0
  105. package/test/wishlist-error.json +4 -0
  106. package/test/wishlist-success.json +3 -0
  107. package/wishlist/teddy-wishlist-btn.js +55 -0
  108. package/wishlist/teddy-wishlist-clear.js +18 -0
  109. package/wishlist/teddy-wishlist-counter.js +35 -0
  110. package/wishlist/teddy-wishlist-item.js +46 -0
  111. package/wishlist/teddy-wishlist-page.js +59 -0
  112. package/wishlist/teddy-wishlist.js +131 -0
@@ -0,0 +1,46 @@
1
+ await loadComponent('./components/mc-element.js', false);
2
+ await loadComponent('./wishlist/teddy-wishlist.js', false);
3
+
4
+ class TeddyWIshlistItem extends McElement {
5
+
6
+ connectedCallback() {
7
+ if (!this.dataset.handle) {
8
+ console.error('TeddyWIshlistItem: missing data-handle');
9
+ return;
10
+ }
11
+ this.observe();
12
+ }
13
+
14
+ observe = () => {
15
+ const observer = new IntersectionObserver((entries, observer) => {
16
+ entries.forEach(entry => {
17
+ if (!entry.isIntersecting) return; // Only proceed if the item is in the viewport
18
+ this.render();
19
+ observer.disconnect(); // Stop observing after the item is rendered
20
+ });
21
+ }, {
22
+ root: null, // viewport
23
+ rootMargin: '0px',
24
+ threshold: 0.1
25
+ });
26
+ observer.observe(this);
27
+ }
28
+
29
+ render = () => {
30
+ McShopify.section({
31
+ path: `${Shopify.routes.root}products/${this.dataset.handle}`,
32
+ section_id: 'helper-wishlist-card',
33
+ onSuccess: (data) => {
34
+ this.innerHTML = data;
35
+ },
36
+ onError: (error) => {
37
+ console.error('TeddyWIshlistItem: error fetching item', error);
38
+ }
39
+ });
40
+ }
41
+
42
+ }
43
+ if (!window.customElements.get('teddy-wishlist-item')) {
44
+ window.customElements.define('teddy-wishlist-item', TeddyWIshlistItem);
45
+ }
46
+ window.TeddyWIshlistItem = TeddyWIshlistItem;
@@ -0,0 +1,59 @@
1
+ await loadComponent('./components/mc-element.js', false);
2
+ await loadComponent('./wishlist/teddy-wishlist.js', false);
3
+
4
+ class TeddyWishlistPage extends McElement {
5
+ emptyTemplate; listTemplate; itemTemplate;
6
+
7
+ connectedCallback() {
8
+ this.emptyTemplate = this.querySelector('#empty-template');
9
+ this.listTemplate = this.querySelector('#list-template');
10
+ this.itemTemplate = this.querySelector('#item-template');
11
+
12
+ if (!this.emptyTemplate || !this.listTemplate || !this.itemTemplate) { console.error('TeddyWishlistPage: missing templates'); return; }
13
+
14
+ this.render();
15
+ }
16
+
17
+ render = () => {
18
+ if (TeddyWishlist.isEmpty()) {
19
+ this.renderEmpty();
20
+ } else {
21
+ this.renderList();
22
+ }
23
+ }
24
+
25
+ renderEmpty = () => {
26
+ this.innerHTML = '';
27
+ this.appendChild(this.emptyTemplate.content.cloneNode(true));
28
+ }
29
+
30
+ renderItem = (item) => {
31
+ const itemElement = this.itemTemplate.content.cloneNode(true);
32
+ const itemContainer = itemElement.querySelector('teddy-wishlist-item');
33
+ if (!itemContainer) { console.error('TeddyWishlistPage: missing item container'); return; }
34
+
35
+ itemContainer.dataset.variant = item.variant;
36
+ itemContainer.dataset.handle = item.handle;
37
+
38
+ return itemElement;
39
+ }
40
+
41
+ renderList = () => {
42
+ this.innerHTML = '';
43
+ const listElement = this.listTemplate.content.cloneNode(true);
44
+ const itemsContainer = listElement.querySelector('[data-list]');
45
+ if (!itemsContainer) { console.error('TeddyWishlistPage: missing items container'); return; }
46
+
47
+ TeddyWishlist.getItems().forEach(item => {
48
+ itemsContainer.appendChild(this.renderItem(item));
49
+ });
50
+
51
+ this.appendChild(listElement);
52
+ this.innerHTML = this.innerHTML.replace('${count}', TeddyWishlist.getItemCount());
53
+ }
54
+
55
+ }
56
+ if (!window.customElements.get('teddy-wishlist-page')) {
57
+ window.customElements.define('teddy-wishlist-page', TeddyWishlistPage);
58
+ }
59
+ window.TeddyWishlistPage = TeddyWishlistPage;
@@ -0,0 +1,131 @@
1
+ import '../res/mc-events.js';
2
+
3
+ class TeddyWishlist {
4
+
5
+ static addItem(item) {
6
+ // aggiunge l'item alla wishlist
7
+ // se c'è il customer salva nel metafield
8
+ if(item == undefined || item == null) { console.error('TeddyWishlist: addItem - item is undefined or null'); return; }
9
+ if(TeddyWishlist.isInWishlist(item)) { console.error('TeddyWishlist: addItem - item is already in wishlist'); return; }
10
+
11
+ const wishlist = this.getItems();
12
+ wishlist.push(item);
13
+ localStorage.setItem('wishlist', JSON.stringify(wishlist));
14
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_ADDED, { detail: item }));
15
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_CHANGED, { detail: TeddyWishlist.getItems() }));
16
+ TeddyWishlist.save();
17
+ }
18
+
19
+ static removeItem(item) {
20
+ // rimuove l'item dalla wishlist
21
+ // se c'è il customer salva nel metafield
22
+ if(item == undefined || item == null) { console.error('TeddyWishlist: removeItem - item is undefined or null'); return; }
23
+ if(!TeddyWishlist.isInWishlist(item)) { console.error('TeddyWishlist: removeItem - item is not in wishlist'); return; }
24
+
25
+ const wishlist = TeddyWishlist.getItems();
26
+ const index = wishlist.findIndex(i => i.variant == item.variant && i.handle == item.handle);
27
+ wishlist.splice(index, 1);
28
+ localStorage.setItem('wishlist', JSON.stringify(wishlist));
29
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_REMOVED, { detail: item }));
30
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_CHANGED, { detail: TeddyWishlist.getItems() }));
31
+ TeddyWishlist.save();
32
+ }
33
+
34
+ static getItems() {
35
+ // ritorna gli item della wishlist
36
+ return localStorage.getItem('wishlist') ? JSON.parse(localStorage.getItem('wishlist')) : [];
37
+ }
38
+
39
+ static clearWishlist() {
40
+ // svuota la wishlist
41
+ // se c'è il customer salva nel metafield
42
+ localStorage.removeItem('wishlist');
43
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_CLEARED));
44
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_CHANGED, { detail: TeddyWishlist.getItems() }));
45
+ TeddyWishlist.save();
46
+ }
47
+
48
+ static getItemCount() {
49
+ // ritorna il numero di item nella wishlist
50
+ return TeddyWishlist.getItems().length;
51
+ }
52
+
53
+ static isEmpty() {
54
+ // ritorna true se la wishlist è vuota
55
+ return TeddyWishlist.getItems().length == 0;
56
+ }
57
+
58
+ static isInWishlist(item) {
59
+ // ritorna true se l'item è nella wishlist
60
+ const found = TeddyWishlist.getItems().find(i => i.variant == item.variant && i.handle == item.handle);
61
+ return found !== undefined;
62
+ }
63
+
64
+ static merge(list){
65
+ // unisce la wishlist con un'altra wishlist
66
+ if(!Array.isArray(list)) { console.error('TeddyWishlist: merge - list is not an array'); return; }
67
+
68
+ const wishlist = [];
69
+ TeddyWishlist.getItems().forEach(item => {
70
+ if(wishlist.find(i => i.variant == item.variant && i.handle == item.handle) == undefined) {
71
+ wishlist.push(item);
72
+ }
73
+ });
74
+ list.forEach(item => {
75
+ if(wishlist.find(i => i.variant == item.variant && i.handle == item.handle) == undefined) {
76
+ wishlist.push(item);
77
+ }
78
+ });
79
+ localStorage.setItem('wishlist', JSON.stringify(wishlist));
80
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_CHANGED, { detail: TeddyWishlist.getItems() }));
81
+ TeddyWishlist.save();
82
+ }
83
+
84
+ static save() {
85
+ // salva la wishlist chiamando simone+
86
+ if(window.theme.wishlist == undefined) { return; }
87
+
88
+ axios({
89
+ method: 'post',
90
+ url: theme.apis.wishlist.save,
91
+ data: TeddyWishlist.getItems().map(item => item.variant.toString()),
92
+ }).then(response => {
93
+ if(response.data.success) {
94
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_SAVED, { detail: TeddyWishlist.getItems() }));
95
+ } else {
96
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_ERROR, { detail: TeddyWishlist.getItems() }));
97
+ console.error('TeddyWishlist: save - error saving wishlist', response.data);
98
+ }
99
+ }).catch(error => {
100
+ window.dispatchEvent(new CustomEvent(MCEVENTS.WISHLIST_ERROR, { detail: TeddyWishlist.getItems() }));
101
+ console.error('TeddyWishlist: save - error saving wishlist', error);
102
+ });
103
+ }
104
+
105
+ static isSameWishlist = (list) => {
106
+ const items = TeddyWishlist.getItems();
107
+ if (list.length !== items.length) return false;
108
+
109
+ const serialize = obj => `${obj.handle}-${obj.variant}`;
110
+
111
+ const sorted1 = list.map(serialize).sort();
112
+ const sorted2 = items.map(serialize).sort();
113
+
114
+ const isEquals = sorted1.every((val, i) => val == sorted2[i]);
115
+ return isEquals;
116
+ }
117
+
118
+ static checkCustomer = () => {
119
+ // controlla se bisogna fare il merge della wishlist con quella del metafield
120
+ if(window.theme.wishlist == undefined) { return; }
121
+
122
+ // controlla se gli elementi in TeddyWishlist.getItems() sono già presenti in window.theme.wishlist
123
+ if(!TeddyWishlist.isSameWishlist(window.theme.wishlist)) {
124
+ TeddyWishlist.merge(window.theme.wishlist);
125
+ }
126
+ }
127
+
128
+
129
+ }
130
+ window.TeddyWishlist = TeddyWishlist;
131
+ export default TeddyWishlist;