favesalon-embed 0.0.4 → 0.0.5

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 (270) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/chat-button.cjs.entry.js +118 -0
  3. package/dist/cjs/colors-38421769.js +69 -0
  4. package/dist/cjs/favesalon-embed.cjs.js +24 -0
  5. package/dist/cjs/google-map_5.cjs.entry.js +310 -0
  6. package/{cjs/index-d5de0b9d.js → dist/cjs/index-47c2a5f6.js} +513 -199
  7. package/{cjs/index-48ac68d0.js → dist/cjs/index-7f190886.js} +1924 -0
  8. package/dist/cjs/loader.cjs.js +23 -0
  9. package/dist/cjs/relativeTime-3721080d.js +9 -0
  10. package/{cjs → dist/cjs}/salon-booking-modal.cjs.entry.js +7 -6
  11. package/{cjs → dist/cjs}/salon-booking.cjs.entry.js +8 -8
  12. package/dist/cjs/salon-gift-card-modal.cjs.entry.js +29 -0
  13. package/{cjs → dist/cjs}/salon-gift-card.cjs.entry.js +9 -8
  14. package/dist/cjs/salon-latest-reviews.cjs.entry.js +97 -0
  15. package/{cjs/salon-lookbook_2.cjs.entry.js → dist/cjs/salon-lookbook.cjs.entry.js} +28 -58
  16. package/{cjs → dist/cjs}/salon-ranking.cjs.entry.js +9 -8
  17. package/dist/cjs/salon-reviews.cjs.entry.js +193 -0
  18. package/dist/cjs/salon-services.cjs.entry.js +81 -0
  19. package/dist/cjs/salon-stylists.cjs.entry.js +118 -0
  20. package/dist/cjs/services-125c82d8.js +21492 -0
  21. package/dist/cjs/style-detail.cjs.entry.js +312 -0
  22. package/dist/cjs/user-avatar.cjs.entry.js +45 -0
  23. package/{collection → dist/collection}/collection-manifest.json +5 -5
  24. package/dist/collection/components/chat-button/index.css +122 -0
  25. package/dist/collection/components/chat-button/index.js +218 -0
  26. package/dist/collection/components/chat-conversation/index.js +103 -0
  27. package/dist/collection/components/google-map/assets/map--placeholder.jpeg +0 -0
  28. package/{collection → dist/collection}/components/google-map/index.css +0 -1
  29. package/dist/collection/components/google-map/index.js +90 -0
  30. package/{collection → dist/collection}/components/salon-booking/index.css +11 -20
  31. package/dist/collection/components/salon-booking/index.js +126 -0
  32. package/dist/collection/components/salon-booking/salon-booking-modal.js +92 -0
  33. package/dist/collection/components/salon-gift-card/index.css +30 -0
  34. package/dist/collection/components/salon-gift-card/index.js +126 -0
  35. package/dist/collection/components/salon-gift-card/salon-gift-card-modal.js +73 -0
  36. package/dist/collection/components/salon-info/index.js +77 -0
  37. package/dist/collection/components/salon-latest-reviews/index.js +163 -0
  38. package/dist/collection/components/salon-latest-styles/index.css +12 -0
  39. package/dist/collection/components/salon-latest-styles/index.js +183 -0
  40. package/{collection/components/salon-contact → dist/collection/components/salon-locations}/index.css +7 -4
  41. package/dist/collection/components/salon-locations/index.js +143 -0
  42. package/{collection → dist/collection}/components/salon-lookbook/index.css +3 -9
  43. package/dist/collection/components/salon-lookbook/index.js +368 -0
  44. package/dist/collection/components/salon-ranking/index.js +117 -0
  45. package/{collection → dist/collection}/components/salon-reviews/index.css +3 -0
  46. package/dist/collection/components/salon-reviews/index.js +249 -0
  47. package/dist/collection/components/salon-schedules/index.css +18 -0
  48. package/dist/collection/components/salon-schedules/index.js +167 -0
  49. package/dist/collection/components/salon-services/index.css +1 -0
  50. package/dist/collection/components/salon-services/index.js +146 -0
  51. package/dist/collection/components/salon-stylists/index.js +184 -0
  52. package/dist/collection/components/style-detail/index.css +76 -0
  53. package/dist/collection/components/style-detail/index.js +386 -0
  54. package/dist/collection/components/user-avatar/index.js +134 -0
  55. package/dist/collection/constants/colors.js +65 -0
  56. package/dist/collection/mocks/users.js +10 -0
  57. package/dist/collection/services/services.js +295 -0
  58. package/dist/collection/types/chat.js +23 -0
  59. package/dist/collection/types/common.js +11 -0
  60. package/{collection → dist/collection}/types/review.js +9 -5
  61. package/dist/collection/types/salon.js +58 -0
  62. package/dist/collection/types/style.js +128 -0
  63. package/{collection → dist/collection}/types/stylist.js +12 -9
  64. package/dist/collection/types/user.js +10 -0
  65. package/{custom-elements → dist/custom-elements}/index.d.ts +18 -18
  66. package/dist/custom-elements/index.js +28340 -0
  67. package/dist/esm/chat-button.entry.js +114 -0
  68. package/dist/esm/colors-ea36347a.js +67 -0
  69. package/dist/esm/favesalon-embed.js +19 -0
  70. package/dist/esm/google-map_5.entry.js +302 -0
  71. package/{esm/index-0f8eed73.js → dist/esm/index-3fae868e.js} +512 -200
  72. package/{esm/index-67d677ba.js → dist/esm/index-80523fec.js} +1924 -1
  73. package/dist/esm/index.js +1 -0
  74. package/dist/esm/loader.js +19 -0
  75. package/dist/esm/polyfills/css-shim.js +1 -0
  76. package/dist/esm/relativeTime-cd452e6d.js +7 -0
  77. package/{esm → dist/esm}/salon-booking-modal.entry.js +7 -6
  78. package/{esm → dist/esm}/salon-booking.entry.js +7 -7
  79. package/dist/esm/salon-gift-card-modal.entry.js +25 -0
  80. package/{esm → dist/esm}/salon-gift-card.entry.js +8 -7
  81. package/dist/esm/salon-latest-reviews.entry.js +93 -0
  82. package/{esm/salon-lookbook_2.entry.js → dist/esm/salon-lookbook.entry.js} +29 -58
  83. package/{esm → dist/esm}/salon-ranking.entry.js +9 -8
  84. package/dist/esm/salon-reviews.entry.js +189 -0
  85. package/dist/esm/salon-services.entry.js +77 -0
  86. package/dist/esm/salon-stylists.entry.js +114 -0
  87. package/dist/esm/services-40a3e622.js +21485 -0
  88. package/dist/esm/style-detail.entry.js +308 -0
  89. package/dist/esm/user-avatar.entry.js +41 -0
  90. package/dist/favesalon-embed/assets/map--placeholder.jpeg +0 -0
  91. package/{favesalon-embed → dist/favesalon-embed}/favesalon-embed.css +1 -1
  92. package/dist/favesalon-embed/favesalon-embed.esm.js +1 -0
  93. package/dist/favesalon-embed/p-019c5ccd.entry.js +1 -0
  94. package/dist/favesalon-embed/p-083a8821.entry.js +1 -0
  95. package/dist/favesalon-embed/p-0d0ed9ea.entry.js +1 -0
  96. package/dist/favesalon-embed/p-119db8de.entry.js +1 -0
  97. package/dist/favesalon-embed/p-1432c51b.entry.js +1 -0
  98. package/dist/favesalon-embed/p-22093506.entry.js +1 -0
  99. package/dist/favesalon-embed/p-32b314e9.js +2 -0
  100. package/dist/favesalon-embed/p-4a5eca9a.js +6 -0
  101. package/dist/favesalon-embed/p-58d2e9be.js +1 -0
  102. package/dist/favesalon-embed/p-71404b6a.entry.js +1 -0
  103. package/dist/favesalon-embed/p-857c3a61.entry.js +1 -0
  104. package/dist/favesalon-embed/p-99ec77f7.entry.js +1 -0
  105. package/dist/favesalon-embed/p-a33331cc.js +1 -0
  106. package/dist/favesalon-embed/p-b0c3673a.entry.js +1 -0
  107. package/dist/favesalon-embed/p-b287b1ea.entry.js +1 -0
  108. package/dist/favesalon-embed/p-b3af7842.entry.js +1 -0
  109. package/dist/favesalon-embed/p-b630ae68.js +1580 -0
  110. package/dist/favesalon-embed/p-ce2c1c9a.entry.js +1 -0
  111. package/dist/favesalon-embed/p-d9b7ad58.entry.js +1 -0
  112. package/dist/favesalon-embed/p-fc9a5551.js +6 -0
  113. package/dist/types/components/chat-button/index.d.ts +24 -0
  114. package/dist/types/components/google-map/index.d.ts +5 -0
  115. package/{types → dist/types}/components/salon-gift-card/salon-gift-card-modal.d.ts +1 -0
  116. package/{types → dist/types}/components/salon-info/index.d.ts +0 -1
  117. package/{types → dist/types}/components/salon-latest-reviews/index.d.ts +2 -0
  118. package/dist/types/components/salon-latest-styles/index.d.ts +12 -0
  119. package/{types → dist/types}/components/salon-locations/index.d.ts +2 -0
  120. package/{types → dist/types}/components/salon-lookbook/index.d.ts +3 -3
  121. package/dist/types/components/salon-reviews/index.d.ts +24 -0
  122. package/{types → dist/types}/components/salon-schedules/index.d.ts +2 -0
  123. package/{types → dist/types}/components/salon-services/index.d.ts +1 -0
  124. package/{types → dist/types}/components/salon-stylists/index.d.ts +6 -0
  125. package/dist/types/components/style-detail/index.d.ts +24 -0
  126. package/{types → dist/types}/components.d.ts +76 -59
  127. package/dist/types/constants/colors.d.ts +65 -0
  128. package/dist/types/mocks/users.d.ts +10 -0
  129. package/dist/types/services/services.d.ts +75 -0
  130. package/{types → dist/types}/stencil-public-runtime.d.ts +85 -11
  131. package/dist/types/types/chat.d.ts +17 -0
  132. package/dist/types/types/common.d.ts +11 -0
  133. package/{types → dist/types}/types/review.d.ts +4 -0
  134. package/{types → dist/types}/types/salon.d.ts +3 -1
  135. package/dist/types/types/style.d.ts +88 -0
  136. package/{types → dist/types}/types/stylist.d.ts +1 -1
  137. package/{types → dist/types}/types/user.d.ts +2 -2
  138. package/loader/cdn.js +3 -0
  139. package/loader/index.cjs.js +3 -0
  140. package/loader/index.d.ts +21 -0
  141. package/loader/index.es2017.js +3 -0
  142. package/loader/index.js +4 -0
  143. package/loader/package.json +11 -0
  144. package/package.json +19 -14
  145. package/readme.md +24 -7
  146. package/cjs/colors-7f354880.js +0 -95
  147. package/cjs/favesalon-embed.cjs.js +0 -20
  148. package/cjs/google-map.cjs.entry.js +0 -47
  149. package/cjs/index-95daad08.js +0 -1928
  150. package/cjs/loader.cjs.js +0 -22
  151. package/cjs/salon-contact_4.cjs.entry.js +0 -155
  152. package/cjs/salon-gift-card-modal.cjs.entry.js +0 -25
  153. package/cjs/salon-info.cjs.entry.js +0 -35
  154. package/cjs/salon-latest-reviews.cjs.entry.js +0 -58
  155. package/cjs/salon-lookbook-modal.cjs.entry.js +0 -141
  156. package/cjs/salon-reviews.cjs.entry.js +0 -205
  157. package/cjs/salon-services.cjs.entry.js +0 -47
  158. package/cjs/salon-stylists.cjs.entry.js +0 -54
  159. package/cjs/services-f1102d4a.js +0 -5762
  160. package/collection/components/google-map/index.js +0 -97
  161. package/collection/components/salon-booking/index.js +0 -121
  162. package/collection/components/salon-booking/salon-booking-modal.js +0 -88
  163. package/collection/components/salon-contact/index.js +0 -88
  164. package/collection/components/salon-gift-card/index.css +0 -25
  165. package/collection/components/salon-gift-card/index.js +0 -120
  166. package/collection/components/salon-gift-card/salon-gift-card-modal.js +0 -48
  167. package/collection/components/salon-info/index.css +0 -3
  168. package/collection/components/salon-info/index.js +0 -97
  169. package/collection/components/salon-latest-reviews/index.js +0 -108
  170. package/collection/components/salon-locations/index.js +0 -80
  171. package/collection/components/salon-lookbook/index.js +0 -376
  172. package/collection/components/salon-lookbook/lookbook-modal.css +0 -72
  173. package/collection/components/salon-lookbook/salon-lookbook-modal.js +0 -248
  174. package/collection/components/salon-ranking/index.js +0 -114
  175. package/collection/components/salon-reviews/index.js +0 -317
  176. package/collection/components/salon-schedules/index.css +0 -14
  177. package/collection/components/salon-schedules/index.js +0 -103
  178. package/collection/components/salon-services/index.js +0 -113
  179. package/collection/components/salon-styles/index.css +0 -23
  180. package/collection/components/salon-styles/index.js +0 -100
  181. package/collection/components/salon-stylists/index.js +0 -96
  182. package/collection/components/user-avatar/index.css +0 -0
  183. package/collection/components/user-avatar/index.js +0 -127
  184. package/collection/constants/colors.js +0 -91
  185. package/collection/services/services.js +0 -225
  186. package/collection/types/common.js +0 -2
  187. package/collection/types/salon.js +0 -52
  188. package/collection/types/style.js +0 -103
  189. package/collection/types/user.js +0 -10
  190. package/custom-elements/index.js +0 -12125
  191. package/esm/colors-1ec90c5f.js +0 -93
  192. package/esm/favesalon-embed.js +0 -18
  193. package/esm/google-map.entry.js +0 -43
  194. package/esm/index-09d43e3e.js +0 -1926
  195. package/esm/loader.js +0 -18
  196. package/esm/polyfills/css-shim.js +0 -1
  197. package/esm/salon-contact_4.entry.js +0 -148
  198. package/esm/salon-gift-card-modal.entry.js +0 -21
  199. package/esm/salon-info.entry.js +0 -31
  200. package/esm/salon-latest-reviews.entry.js +0 -54
  201. package/esm/salon-lookbook-modal.entry.js +0 -137
  202. package/esm/salon-reviews.entry.js +0 -201
  203. package/esm/salon-services.entry.js +0 -43
  204. package/esm/salon-stylists.entry.js +0 -50
  205. package/esm/services-74d84ca9.js +0 -5756
  206. package/favesalon-embed/favesalon-embed.esm.js +0 -1
  207. package/favesalon-embed/p-0188d4dc.entry.js +0 -1
  208. package/favesalon-embed/p-0318501e.js +0 -1
  209. package/favesalon-embed/p-078f242d.entry.js +0 -1
  210. package/favesalon-embed/p-13e23c61.entry.js +0 -1
  211. package/favesalon-embed/p-17df13ad.js +0 -1
  212. package/favesalon-embed/p-1a3179c8.entry.js +0 -1
  213. package/favesalon-embed/p-20aa75de.js +0 -6
  214. package/favesalon-embed/p-2901a6d6.entry.js +0 -1
  215. package/favesalon-embed/p-2b861430.entry.js +0 -1
  216. package/favesalon-embed/p-44d810a0.js +0 -1
  217. package/favesalon-embed/p-4a5eca9a.js +0 -6
  218. package/favesalon-embed/p-4c68700f.entry.js +0 -1
  219. package/favesalon-embed/p-4e2d7b29.js +0 -1
  220. package/favesalon-embed/p-6b845bf1.entry.js +0 -1
  221. package/favesalon-embed/p-7350f6b5.entry.js +0 -1
  222. package/favesalon-embed/p-897c2b1c.entry.js +0 -1
  223. package/favesalon-embed/p-8e60f56f.entry.js +0 -1
  224. package/favesalon-embed/p-a49afdc1.entry.js +0 -1
  225. package/favesalon-embed/p-c93867c4.entry.js +0 -1
  226. package/favesalon-embed/p-ea6a097f.entry.js +0 -1
  227. package/types/components/google-map/index.d.ts +0 -10
  228. package/types/components/salon-contact/index.d.ts +0 -9
  229. package/types/components/salon-lookbook/salon-lookbook-modal.d.ts +0 -13
  230. package/types/components/salon-reviews/index.d.ts +0 -24
  231. package/types/components/salon-styles/index.d.ts +0 -9
  232. package/types/constants/colors.d.ts +0 -88
  233. package/types/services/services.d.ts +0 -26
  234. package/types/types/common.d.ts +0 -2
  235. package/types/types/style.d.ts +0 -59
  236. /package/{cjs → dist/cjs}/_commonjsHelpers-5cfcba41.js +0 -0
  237. /package/{cjs → dist/cjs}/global-9073d10e.js +0 -0
  238. /package/{cjs → dist/cjs}/index.cjs.js +0 -0
  239. /package/{cjs → dist/cjs}/utils-c5a33b3c.js +0 -0
  240. /package/{esm/index.js → dist/collection/components/salon-info/index.css} +0 -0
  241. /package/{collection → dist/collection}/components/salon-latest-reviews/index.css +0 -0
  242. /package/{collection → dist/collection}/components/salon-ranking/index.css +0 -0
  243. /package/{collection → dist/collection}/components/salon-stylists/index.css +0 -0
  244. /package/{collection/components/salon-locations → dist/collection/components/user-avatar}/index.css +0 -0
  245. /package/{collection → dist/collection}/global/global.js +0 -0
  246. /package/{collection → dist/collection}/index.js +0 -0
  247. /package/{collection → dist/collection}/types/service.js +0 -0
  248. /package/{collection → dist/collection}/utils/utils.js +0 -0
  249. /package/{esm → dist/esm}/_commonjsHelpers-098d5b27.js +0 -0
  250. /package/{esm → dist/esm}/global-e1089ffd.js +0 -0
  251. /package/{esm → dist/esm}/polyfills/core-js.js +0 -0
  252. /package/{esm → dist/esm}/polyfills/dom.js +0 -0
  253. /package/{esm → dist/esm}/polyfills/es5-html-element.js +0 -0
  254. /package/{esm → dist/esm}/polyfills/index.js +0 -0
  255. /package/{esm → dist/esm}/polyfills/system.js +0 -0
  256. /package/{esm → dist/esm}/utils-e97485e0.js +0 -0
  257. /package/{favesalon-embed → dist/favesalon-embed}/index.esm.js +0 -0
  258. /package/{favesalon-embed → dist/favesalon-embed}/p-47e646f8.js +0 -0
  259. /package/{favesalon-embed → dist/favesalon-embed}/p-d6083940.js +0 -0
  260. /package/{index.cjs.js → dist/index.cjs.js} +0 -0
  261. /package/{index.js → dist/index.js} +0 -0
  262. /package/{collection/components/salon-services/index.css → dist/types/components/chat-conversation/index.d.ts} +0 -0
  263. /package/{types → dist/types}/components/salon-booking/index.d.ts +0 -0
  264. /package/{types → dist/types}/components/salon-booking/salon-booking-modal.d.ts +0 -0
  265. /package/{types → dist/types}/components/salon-gift-card/index.d.ts +0 -0
  266. /package/{types → dist/types}/components/salon-ranking/index.d.ts +0 -0
  267. /package/{types → dist/types}/components/user-avatar/index.d.ts +0 -0
  268. /package/{types → dist/types}/index.d.ts +0 -0
  269. /package/{types → dist/types}/types/service.d.ts +0 -0
  270. /package/{types → dist/types}/utils/utils.d.ts +0 -0
@@ -1,10 +1,10 @@
1
1
  @media (min-width: 768px) {
2
- .salon-contact--links {
2
+ salon-locations .salon-contact--links {
3
3
  overflow: hidden;
4
4
  margin-left: -32px;
5
5
  }
6
6
 
7
- .salon-contact--links .salon-contact--links-item {
7
+ salon-locations .salon-contact--links-item {
8
8
  float: left;
9
9
  display: flex;
10
10
  flex-direction: row;
@@ -12,10 +12,13 @@
12
12
  font-size: 16px;
13
13
  min-width: 300px;
14
14
  padding-left: 32px;
15
- margin-top: 8px;
16
15
  }
17
16
 
18
- .salon-contact--links .salon-contact--links-item:nth-child(2n + 1) {
17
+ salon-locations .salon-contact--links-item:nth-child(2n + 1) {
19
18
  clear: left;
20
19
  }
20
+
21
+ salon-locations .salon-contact--links-item + .salon-contact--links-item {
22
+ margin-top: 8px;
23
+ }
21
24
  }
@@ -0,0 +1,143 @@
1
+ import { h } from '@stencil/core';
2
+ import { formatFullAddress, formatWebsiteUrl } from '../../utils/utils';
3
+ import { Colors } from '../../constants/colors';
4
+ import HttpService from '../../services/services';
5
+ export class SalonLocations {
6
+ constructor() {
7
+ this.salonId = undefined;
8
+ this.salonInfo = undefined;
9
+ this.isLoading = undefined;
10
+ this.withBorder = undefined;
11
+ this.salonInfoState = undefined;
12
+ }
13
+ componentWillLoad() {
14
+ if (this.salonInfo) {
15
+ this.salonInfoState = JSON.parse(this.salonInfo);
16
+ }
17
+ else {
18
+ this.fetchData();
19
+ }
20
+ }
21
+ fetchData() {
22
+ try {
23
+ HttpService().fetchSalonInfo(this.salonId)
24
+ .then(salonInfo => this.salonInfoState = salonInfo);
25
+ }
26
+ catch (e) { }
27
+ }
28
+ render() {
29
+ if (this.isLoading) {
30
+ return (h("div", { class: "view view--salon-locations" }, h("div", { class: "view-content", style: this.withBorder ? { border: `1px solid ${Colors.Gray02}`, borderRadius: '4px' } : { padding: '0px' } }, h("div", { style: {
31
+ backgroundColor: Colors.Gray02,
32
+ height: '20px',
33
+ width: '120px',
34
+ } }), h("div", { style: { marginTop: '24px' } }, h("div", { style: {
35
+ backgroundColor: Colors.Gray01,
36
+ height: '16px',
37
+ width: '50%',
38
+ } }), h("div", { style: {
39
+ backgroundColor: Colors.Gray01,
40
+ height: '16px',
41
+ width: '50%',
42
+ marginTop: '8px',
43
+ } }), h("div", { style: {
44
+ backgroundColor: Colors.Gray01,
45
+ height: '192px',
46
+ width: '100%',
47
+ marginTop: '24px',
48
+ } })))));
49
+ }
50
+ const { businessPhone, businessName, website, email, } = this.salonInfoState || {};
51
+ const websiteUrl = formatWebsiteUrl(website);
52
+ const fullAddress = formatFullAddress(this.salonInfoState);
53
+ return (h("div", { class: "view view--salon-locations" }, h("div", { class: "view-content", style: this.withBorder ? { border: `1px solid ${Colors.Gray02}`, borderRadius: '4px' } : { padding: '0px' } }, h("div", { style: { fontSize: '18px', fontWeight: 'bold' } }, "Contact"), h("div", { class: "salon-contact--links", style: { marginTop: '16px' } }, businessPhone && (h("div", { class: "salon-contact--links-item" }, h("i", { class: "ri-phone-line", style: { color: Colors.Gray04, fontSize: '18px', marginRight: '6px' } }), " ", h("a", { href: `tel:${businessPhone}`, style: { color: Colors.TextColor, textDecoration: 'none' } }, businessPhone))), websiteUrl && (h("div", { class: "salon-contact--links-item" }, h("i", { class: "ri-links-line", style: { color: Colors.Gray04, fontSize: '18px', marginRight: '6px' } }), " ", h("a", { target: websiteUrl && websiteUrl.indexOf(window.location.hostname) === -1 ? '_blank' : undefined, href: websiteUrl, style: { color: Colors.TextColor, textDecoration: 'none' } }, websiteUrl))), email && (h("div", { class: "salon-contact--links-item" }, h("i", { class: "ri-mail-line", style: { color: Colors.Gray04, fontSize: '18px', marginRight: '6px' } }), " ", h("a", { href: `mailto:${email}`, style: { color: Colors.TextColor, textDecoration: 'none' } }, email)))), h("div", { class: "view--salon-info--map", style: { marginTop: '24px' } }, h("google-map", { "location-name": businessName, "location-address": fullAddress })))));
54
+ }
55
+ static get is() { return "salon-locations"; }
56
+ static get originalStyleUrls() {
57
+ return {
58
+ "$": ["index.css"]
59
+ };
60
+ }
61
+ static get styleUrls() {
62
+ return {
63
+ "$": ["index.css"]
64
+ };
65
+ }
66
+ static get properties() {
67
+ return {
68
+ "salonId": {
69
+ "type": "number",
70
+ "mutable": false,
71
+ "complexType": {
72
+ "original": "number",
73
+ "resolved": "number",
74
+ "references": {}
75
+ },
76
+ "required": false,
77
+ "optional": false,
78
+ "docs": {
79
+ "tags": [],
80
+ "text": ""
81
+ },
82
+ "attribute": "salon-id",
83
+ "reflect": false
84
+ },
85
+ "salonInfo": {
86
+ "type": "string",
87
+ "mutable": false,
88
+ "complexType": {
89
+ "original": "string",
90
+ "resolved": "string",
91
+ "references": {}
92
+ },
93
+ "required": false,
94
+ "optional": true,
95
+ "docs": {
96
+ "tags": [],
97
+ "text": ""
98
+ },
99
+ "attribute": "salon-info",
100
+ "reflect": false
101
+ },
102
+ "isLoading": {
103
+ "type": "boolean",
104
+ "mutable": false,
105
+ "complexType": {
106
+ "original": "boolean",
107
+ "resolved": "boolean",
108
+ "references": {}
109
+ },
110
+ "required": false,
111
+ "optional": true,
112
+ "docs": {
113
+ "tags": [],
114
+ "text": ""
115
+ },
116
+ "attribute": "is-loading",
117
+ "reflect": false
118
+ },
119
+ "withBorder": {
120
+ "type": "boolean",
121
+ "mutable": false,
122
+ "complexType": {
123
+ "original": "boolean",
124
+ "resolved": "boolean",
125
+ "references": {}
126
+ },
127
+ "required": false,
128
+ "optional": true,
129
+ "docs": {
130
+ "tags": [],
131
+ "text": ""
132
+ },
133
+ "attribute": "with-border",
134
+ "reflect": false
135
+ }
136
+ };
137
+ }
138
+ static get states() {
139
+ return {
140
+ "salonInfoState": {}
141
+ };
142
+ }
143
+ }
@@ -1,21 +1,15 @@
1
- .salon-loobooks--grid-item {
2
- float: left;
3
- max-width: 150px;
4
- }
5
1
  @media (max-width: 768px) {
6
2
  salon-lookbook .view-header {
7
3
  display: block !important;
8
4
  }
5
+
9
6
  salon-lookbook .salon-loobook--serch-result {
10
7
  margin-bottom: 16px;
11
8
  }
9
+
12
10
  salon-lookbook .salon-loobook--filter-wrapper > label,
13
11
  salon-lookbook .salon-loobook--sort-wrapper > label {
14
12
  display: none !important;
15
13
  }
16
14
  }
17
- @media (min-width: 768px) {
18
- .salon-loobooks--grid-item {
19
- max-width: 200px;
20
- }
21
- }
15
+
@@ -0,0 +1,368 @@
1
+ import { h } from '@stencil/core';
2
+ import { Colors } from '../../constants/colors';
3
+ import HttpService from '../../services/services';
4
+ const lookbookSortOptions = [{
5
+ value: 'like',
6
+ label: 'Most popular',
7
+ }, {
8
+ value: 'newest',
9
+ label: 'Newest first',
10
+ }, {
11
+ value: 'oldest',
12
+ label: 'Oldest first',
13
+ }];
14
+ const lookbookFilterOptions = [{
15
+ value: 'all',
16
+ label: 'All Category',
17
+ }];
18
+ export class SalonLookbook {
19
+ constructor() {
20
+ this.salonId = undefined;
21
+ this.isLoading = true;
22
+ this.isLoadingMore = undefined;
23
+ this.hideLoadMore = undefined;
24
+ this.currentPage = 1;
25
+ this.totalLookbooks = 0;
26
+ this.salonCategories = [];
27
+ this.salonLookbooks = [];
28
+ this.sortBy = lookbookSortOptions[1].value;
29
+ this.filterBy = lookbookFilterOptions[0].value;
30
+ this.isLayoutSetup = undefined;
31
+ }
32
+ componentWillLoad() {
33
+ this.fetchData();
34
+ this.injectSDK();
35
+ }
36
+ componentDidRender() {
37
+ this.setupGridLayout();
38
+ }
39
+ injectSDK() {
40
+ return new Promise((resolve) => {
41
+ const script = document.createElement('script');
42
+ script.type = 'text/javascript';
43
+ script.src = 'https://cdn.jsdelivr.net/npm/macy@2';
44
+ document.body.appendChild(script);
45
+ return resolve(true);
46
+ });
47
+ }
48
+ setupGridLayout() {
49
+ if (!this.isLayoutSetup && document.querySelector('#salon-loobooks--grid')) {
50
+ const script = document.createElement('script');
51
+ script.type = 'text/javascript';
52
+ script.innerHTML = `
53
+ var masonry = new Macy({
54
+ container: '#salon-loobooks--grid',
55
+ useContainerForBreakpoints: true,
56
+ margin: 16,
57
+ columns: 5,
58
+ breakAt: {
59
+ 1024: {
60
+ columns: 4,
61
+ },
62
+ 768: {
63
+ columns: 3,
64
+ },
65
+ 576: {
66
+ margin: 16,
67
+ columns: 2,
68
+ },
69
+ },
70
+ });
71
+ `;
72
+ document.body.appendChild(script);
73
+ this.isLayoutSetup = true;
74
+ }
75
+ }
76
+ async fetchData() {
77
+ try {
78
+ const promises = [
79
+ this.fetchLookbooks(Object.assign({ page: 1, sort: this.sortBy }, this.filterBy !== 'all' ? { services: [this.filterBy] } : {})),
80
+ this.fetchCategories(),
81
+ ];
82
+ return Promise.all(promises);
83
+ }
84
+ catch (e) { }
85
+ }
86
+ async fetchLookbooks(options, isLoadingMore) {
87
+ if (isLoadingMore) {
88
+ this.isLoadingMore = true;
89
+ }
90
+ else {
91
+ this.isLoading = true;
92
+ }
93
+ try {
94
+ const { total, allLookbooks } = await HttpService().fetchSalonLookbooks(this.salonId, options);
95
+ this.totalLookbooks = total;
96
+ this.salonLookbooks = this.salonLookbooks.concat(allLookbooks);
97
+ this.hideLoadMore = allLookbooks.length < 20;
98
+ }
99
+ catch (error) { }
100
+ if (isLoadingMore) {
101
+ this.isLoadingMore = false;
102
+ }
103
+ else {
104
+ this.isLoading = false;
105
+ }
106
+ }
107
+ async onChangeFiltering(filterBy) {
108
+ try {
109
+ this.currentPage = 1;
110
+ this.totalLookbooks = 0;
111
+ this.salonLookbooks = [];
112
+ this.hideLoadMore = true;
113
+ this.filterBy = filterBy;
114
+ await this.fetchLookbooks(Object.assign({ page: this.currentPage, sort: this.sortBy }, this.filterBy !== 'all' ? { services: [Number(this.filterBy)] } : {}));
115
+ if (window.masonry) {
116
+ this.isLayoutSetup = false;
117
+ }
118
+ }
119
+ catch (error) { }
120
+ }
121
+ async onChangeSorting(sortBy) {
122
+ try {
123
+ this.currentPage = 1;
124
+ this.totalLookbooks = 0;
125
+ this.salonLookbooks = [];
126
+ this.hideLoadMore = true;
127
+ this.sortBy = sortBy;
128
+ await this.fetchLookbooks(Object.assign({ page: this.currentPage, sort: this.sortBy }, this.filterBy !== 'all' ? { services: [this.filterBy] } : {}));
129
+ if (window.masonry) {
130
+ this.isLayoutSetup = false;
131
+ }
132
+ }
133
+ catch (error) { }
134
+ }
135
+ async onLoadMore() {
136
+ try {
137
+ this.currentPage += 1;
138
+ await this.fetchLookbooks({ page: this.currentPage }, true);
139
+ if (window.masonry) {
140
+ this.isLayoutSetup = false;
141
+ }
142
+ }
143
+ catch (error) { }
144
+ }
145
+ async fetchCategories() {
146
+ try {
147
+ this.salonCategories = await HttpService().fetchSalonCategories();
148
+ }
149
+ catch (error) { }
150
+ }
151
+ onClickLookbook(style) {
152
+ const elLookbookModal = document.createElement('div');
153
+ elLookbookModal.innerHTML = `
154
+ <style-detail
155
+ salon-id=${this.salonId}
156
+ salon-lookbook='${JSON.stringify(style)}'
157
+ ></style-detail>
158
+ `;
159
+ document.body.appendChild(elLookbookModal);
160
+ }
161
+ renderHeader() {
162
+ const allFilterOptions = lookbookFilterOptions.concat(([...this.salonCategories]).map(category => {
163
+ return {
164
+ value: category.id,
165
+ label: category.name,
166
+ };
167
+ }));
168
+ return (h("div", { class: "view-header", style: {
169
+ display: 'flex',
170
+ flexDirection: 'row',
171
+ justifyContent: 'space-between',
172
+ alignItems: 'center',
173
+ marginBottom: '24px',
174
+ } }, h("div", { class: "salon-loobook--serch-result" }, this.totalLookbooks, " ", this.totalLookbooks === 1 ? 'result' : 'results'), h("div", { style: {
175
+ display: 'flex',
176
+ flexDirection: 'row',
177
+ alignItems: 'center',
178
+ } }, h("div", { class: "salon-loobook--filter-wrapper", style: {
179
+ display: 'flex',
180
+ flexDirection: 'row',
181
+ alignItems: 'center',
182
+ marginRight: '16px',
183
+ } }, h("label", { style: { marginRight: '8px', marginBottom: '0' } }, "Filter by"), h("select", { class: "form-select", style: { width: '160px' }, onChange: (evt) => this.onChangeFiltering(evt.target.value) }, allFilterOptions.map(filterOption => (h("option", { value: filterOption.value, selected: String(filterOption.value) === String(this.filterBy) }, filterOption.label))))), h("div", { class: "salon-loobook--sort-wrapper", style: {
184
+ display: 'flex',
185
+ flexDirection: 'row',
186
+ alignItems: 'center',
187
+ } }, h("label", { style: { marginRight: '8px', marginBottom: '0' } }, "Sort by"), h("select", { class: "form-select", style: { width: '160px' }, onChange: (evt) => this.onChangeSorting(evt.target.value) }, lookbookSortOptions.map(sortOption => (h("option", { value: sortOption.value, selected: sortOption.value === this.sortBy }, sortOption.label))))))));
188
+ }
189
+ render() {
190
+ return (h("div", { class: "salon-loobooks" }, h("div", null, h("div", { class: "view-content" }, this.renderHeader(), this.salonLookbooks.length > 0 && (h("div", { class: "salon-loobooks--grid", id: "salon-loobooks--grid" }, this.salonLookbooks.map(style => {
191
+ const { caption, imageThumbMedium, owner } = style;
192
+ return (h("div", { class: "salon-lookbook salon-loobooks--grid-item", onClick: () => this.onClickLookbook(style) }, h("div", { class: "card", style: {
193
+ background: 'none',
194
+ border: 'none',
195
+ // maxWidth: '200px',
196
+ } }, h("div", { class: "salon-lookbook--image", style: {
197
+ borderRadius: '8px',
198
+ overflow: 'hidden',
199
+ minHeight: '80px',
200
+ background: Colors.Gray01,
201
+ } }, h("img", { src: imageThumbMedium, alt: caption, style: { maxWidth: '100%' } })), owner && (h("div", { class: "card-body", style: { paddingLeft: '0' } }, h("user-avatar", { name: owner.fullName, shortName: `${(owner.firstName || '').charAt(0)}${(owner.lastName || '').charAt(0)}`, avatar: owner.avatar }))))));
202
+ })))), this.salonLookbooks.length > 0 && !this.hideLoadMore && (h("div", { class: "view-footer", style: { paddingTop: '16px', textAlign: 'center' } }, h("button", { type: "button", class: "btn btn-light btn-lg", onClick: () => this.onLoadMore(), style: {
203
+ background: Colors.White,
204
+ border: `1px solid ${Colors.Gray02}`,
205
+ borderRadius: '4px',
206
+ paddingLeft: '24px',
207
+ paddingRight: '24px',
208
+ } }, this.isLoadingMore ? 'Loading' : 'Load more'))))));
209
+ }
210
+ static get is() { return "salon-lookbook"; }
211
+ static get originalStyleUrls() {
212
+ return {
213
+ "$": ["index.css"]
214
+ };
215
+ }
216
+ static get styleUrls() {
217
+ return {
218
+ "$": ["index.css"]
219
+ };
220
+ }
221
+ static get properties() {
222
+ return {
223
+ "salonId": {
224
+ "type": "number",
225
+ "mutable": false,
226
+ "complexType": {
227
+ "original": "number",
228
+ "resolved": "number",
229
+ "references": {}
230
+ },
231
+ "required": false,
232
+ "optional": false,
233
+ "docs": {
234
+ "tags": [],
235
+ "text": ""
236
+ },
237
+ "attribute": "salon-id",
238
+ "reflect": false
239
+ }
240
+ };
241
+ }
242
+ static get states() {
243
+ return {
244
+ "isLoading": {},
245
+ "isLoadingMore": {},
246
+ "hideLoadMore": {},
247
+ "currentPage": {},
248
+ "totalLookbooks": {},
249
+ "salonCategories": {},
250
+ "salonLookbooks": {},
251
+ "sortBy": {},
252
+ "filterBy": {},
253
+ "isLayoutSetup": {}
254
+ };
255
+ }
256
+ static get methods() {
257
+ return {
258
+ "fetchData": {
259
+ "complexType": {
260
+ "signature": "() => Promise<any[]>",
261
+ "parameters": [],
262
+ "references": {
263
+ "Promise": {
264
+ "location": "global"
265
+ }
266
+ },
267
+ "return": "Promise<any[]>"
268
+ },
269
+ "docs": {
270
+ "text": "",
271
+ "tags": []
272
+ }
273
+ },
274
+ "fetchLookbooks": {
275
+ "complexType": {
276
+ "signature": "(options: any, isLoadingMore?: boolean) => Promise<void>",
277
+ "parameters": [{
278
+ "tags": [],
279
+ "text": ""
280
+ }, {
281
+ "tags": [],
282
+ "text": ""
283
+ }],
284
+ "references": {
285
+ "Promise": {
286
+ "location": "global"
287
+ }
288
+ },
289
+ "return": "Promise<void>"
290
+ },
291
+ "docs": {
292
+ "text": "",
293
+ "tags": []
294
+ }
295
+ },
296
+ "onChangeFiltering": {
297
+ "complexType": {
298
+ "signature": "(filterBy: string) => Promise<void>",
299
+ "parameters": [{
300
+ "tags": [],
301
+ "text": ""
302
+ }],
303
+ "references": {
304
+ "Promise": {
305
+ "location": "global"
306
+ }
307
+ },
308
+ "return": "Promise<void>"
309
+ },
310
+ "docs": {
311
+ "text": "",
312
+ "tags": []
313
+ }
314
+ },
315
+ "onChangeSorting": {
316
+ "complexType": {
317
+ "signature": "(sortBy: string) => Promise<void>",
318
+ "parameters": [{
319
+ "tags": [],
320
+ "text": ""
321
+ }],
322
+ "references": {
323
+ "Promise": {
324
+ "location": "global"
325
+ }
326
+ },
327
+ "return": "Promise<void>"
328
+ },
329
+ "docs": {
330
+ "text": "",
331
+ "tags": []
332
+ }
333
+ },
334
+ "onLoadMore": {
335
+ "complexType": {
336
+ "signature": "() => Promise<void>",
337
+ "parameters": [],
338
+ "references": {
339
+ "Promise": {
340
+ "location": "global"
341
+ }
342
+ },
343
+ "return": "Promise<void>"
344
+ },
345
+ "docs": {
346
+ "text": "",
347
+ "tags": []
348
+ }
349
+ },
350
+ "fetchCategories": {
351
+ "complexType": {
352
+ "signature": "() => Promise<void>",
353
+ "parameters": [],
354
+ "references": {
355
+ "Promise": {
356
+ "location": "global"
357
+ }
358
+ },
359
+ "return": "Promise<void>"
360
+ },
361
+ "docs": {
362
+ "text": "",
363
+ "tags": []
364
+ }
365
+ }
366
+ };
367
+ }
368
+ }
@@ -0,0 +1,117 @@
1
+ import { h } from '@stencil/core';
2
+ import { Colors } from '../../constants/colors';
3
+ export class SalonRanking {
4
+ constructor() {
5
+ this.ranking = undefined;
6
+ this.height = 16;
7
+ this.width = 16;
8
+ }
9
+ getRankingData(ranking) {
10
+ if (ranking === 5) {
11
+ return {
12
+ color: Colors.Primary,
13
+ text: 'Viral',
14
+ };
15
+ }
16
+ if (ranking === 4) {
17
+ return {
18
+ color: Colors.Orange03,
19
+ text: 'Advancing',
20
+ };
21
+ }
22
+ if (ranking === 3) {
23
+ return {
24
+ color: Colors.Lilac03,
25
+ text: 'Progressing',
26
+ };
27
+ }
28
+ if (ranking === 2) {
29
+ return {
30
+ color: Colors.Blue03,
31
+ text: 'Building',
32
+ };
33
+ }
34
+ return {
35
+ color: Colors.Gray05,
36
+ text: 'Starting',
37
+ };
38
+ }
39
+ render() {
40
+ const rankingData = this.getRankingData(this.ranking);
41
+ return (h("div", { style: {
42
+ display: 'flex',
43
+ alignItems: 'center',
44
+ justifyContent: 'center',
45
+ width: '100%',
46
+ color: rankingData.color,
47
+ } }, h("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", width: this.width, height: this.height, viewBox: `0 0 ${this.width} ${this.height}`, style: { maxWidth: `${this.width}px`, height: 'auto', marginRight: '8px' } }, h("path", { d: "M14.9984 14.1273C15.0188 14.2658 14.8369 14.3204 14.7415 14.2251L8.11345 7.6028C6.41272 5.90355 6.42184 3.19468 8.23887 1.76037C9.63972 0.678363 11.7259 0.753791 13.1793 1.96961C14.1899 2.80207 14.706 3.93808 14.7471 5.07223L14.9984 14.1273Z", fill: "currentColor" }), h("path", { d: "M1.74847 8.24513C3.18403 6.42967 5.91004 6.40579 7.61078 8.10504L14.2548 14.7432C14.3501 14.8385 14.2795 15.0043 14.1568 14.9999L5.078 14.7329C3.94287 14.6918 2.78997 14.1604 1.97268 13.1665C0.755801 11.7144 0.680308 9.62998 1.74847 8.24513Z", fill: "currentColor" })), rankingData.text));
48
+ }
49
+ static get is() { return "salon-ranking"; }
50
+ static get originalStyleUrls() {
51
+ return {
52
+ "$": ["index.css"]
53
+ };
54
+ }
55
+ static get styleUrls() {
56
+ return {
57
+ "$": ["index.css"]
58
+ };
59
+ }
60
+ static get properties() {
61
+ return {
62
+ "ranking": {
63
+ "type": "number",
64
+ "mutable": false,
65
+ "complexType": {
66
+ "original": "number",
67
+ "resolved": "number",
68
+ "references": {}
69
+ },
70
+ "required": false,
71
+ "optional": false,
72
+ "docs": {
73
+ "tags": [],
74
+ "text": ""
75
+ },
76
+ "attribute": "ranking",
77
+ "reflect": false
78
+ },
79
+ "height": {
80
+ "type": "number",
81
+ "mutable": false,
82
+ "complexType": {
83
+ "original": "number",
84
+ "resolved": "number",
85
+ "references": {}
86
+ },
87
+ "required": false,
88
+ "optional": true,
89
+ "docs": {
90
+ "tags": [],
91
+ "text": ""
92
+ },
93
+ "attribute": "height",
94
+ "reflect": false,
95
+ "defaultValue": "16"
96
+ },
97
+ "width": {
98
+ "type": "number",
99
+ "mutable": false,
100
+ "complexType": {
101
+ "original": "number",
102
+ "resolved": "number",
103
+ "references": {}
104
+ },
105
+ "required": false,
106
+ "optional": true,
107
+ "docs": {
108
+ "tags": [],
109
+ "text": ""
110
+ },
111
+ "attribute": "width",
112
+ "reflect": false,
113
+ "defaultValue": "16"
114
+ }
115
+ };
116
+ }
117
+ }
@@ -2,13 +2,16 @@
2
2
  salon-reviews .salon-reviews {
3
3
  flex-direction: column !important;
4
4
  }
5
+
5
6
  salon-reviews .salon-reviews--filters--options {
6
7
  display: none !important;
7
8
  }
9
+
8
10
  salon-reviews .salon-reviews--list {
9
11
  padding-top: 32px !important;
10
12
  padding-left: 0px !important;
11
13
  }
14
+
12
15
  salon-reviews .reviews-list--sorting > label {
13
16
  display: none !important;
14
17
  }