favesalon-embed 1.0.16 → 1.0.17

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 (40) hide show
  1. package/dist/favesalon-embed/activate-form.entry.js +1 -1
  2. package/dist/favesalon-embed/buy-giftcard-form.entry.js +91 -64
  3. package/dist/favesalon-embed/buy-giftcard-verification.entry.js +3801 -17
  4. package/dist/favesalon-embed/change-password-form.entry.js +1 -1
  5. package/dist/favesalon-embed/chat-box.entry.js +1 -1
  6. package/dist/favesalon-embed/chat-button.entry.js +1 -1
  7. package/dist/favesalon-embed/chat-form.entry.js +1 -1
  8. package/dist/favesalon-embed/chat-messages.entry.js +1 -1
  9. package/dist/favesalon-embed/chat-rooms.entry.js +2 -2
  10. package/dist/favesalon-embed/favesalon-embed.css +20 -0
  11. package/dist/favesalon-embed/favesalon-embed.esm.js +1 -1
  12. package/dist/favesalon-embed/login-form.entry.js +1 -1
  13. package/dist/favesalon-embed/register-form.entry.js +1 -1
  14. package/dist/favesalon-embed/reset-password-form.entry.js +1 -1
  15. package/dist/favesalon-embed/salon-info.entry.js +1 -1
  16. package/dist/favesalon-embed/salon-latest-reviews.entry.js +2 -2
  17. package/dist/favesalon-embed/salon-latest-styles.entry.js +1 -1
  18. package/dist/favesalon-embed/salon-locations.entry.js +2 -2
  19. package/dist/favesalon-embed/salon-lookbook.entry.js +1 -1
  20. package/dist/favesalon-embed/salon-reviews.entry.js +1 -1
  21. package/dist/favesalon-embed/salon-schedules.entry.js +1 -1
  22. package/dist/favesalon-embed/salon-services.entry.js +1 -1
  23. package/dist/favesalon-embed/salon-stylists.entry.js +1 -1
  24. package/dist/favesalon-embed/{services-45c0e274.js → services-09264f42.js} +133 -123
  25. package/dist/favesalon-embed/services-1406013d.js +24132 -0
  26. package/dist/favesalon-embed/{services-935ba09f.js → services-82948efc.js} +135 -130
  27. package/dist/favesalon-embed/{services-baa3f112.js → services-c2c81c88.js} +9 -1
  28. package/dist/favesalon-embed/{services-3dd9f820.js → services-ef32efdc.js} +151 -123
  29. package/dist/favesalon-embed/style-detail.entry.js +1 -1
  30. package/dist/favesalon-embed/utils-00e4ed17.js +33 -0
  31. package/dist/favesalon-embed/utils-359c37f7.js +33 -0
  32. package/dist/favesalon-embed/utils-daaa9ecc.js +34 -0
  33. package/dist/favesalon-embed/utils-e6e3f132.js +33 -0
  34. package/dist/favesalon-embed/wizard-existing-user.entry.js +10 -10
  35. package/dist/favesalon-embed/wizard-new-user.entry.js +10 -10
  36. package/dist/types/components/buy-giftcard-form/buy-giftcard-form.d.ts +2 -1
  37. package/dist/types/components/buy-giftcard-verification/buy-giftcard-verification.d.ts +2 -0
  38. package/dist/types/services/services.d.ts +3 -3
  39. package/package.json +2 -1
  40. package/dist/favesalon-embed/services-65861516.js +0 -24095
@@ -0,0 +1,33 @@
1
+ function wait(time = 1000) {
2
+ return new Promise(resolve => setTimeout(() => resolve({}), time));
3
+ }
4
+ function format(first, middle, last) {
5
+ return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
6
+ }
7
+ function formatWebsiteUrl(website) {
8
+ return !!website ? website.indexOf('http') > -1 ? website : `http://${website}` : null;
9
+ }
10
+ function formatFullAddress(salon) {
11
+ const { businessAddress, city, state, zipcode, } = salon || {};
12
+ const stateFields = [state, zipcode].filter(field => !!field);
13
+ if (businessAddress) {
14
+ return [businessAddress, city]
15
+ .filter(field => !!field)
16
+ .concat(stateFields.length > 0 ? [stateFields.join(' ')] : [])
17
+ .join(', ');
18
+ }
19
+ return null;
20
+ }
21
+ function getRatingText() {
22
+ return ['', 'Poor', 'Sufficient', 'Average', 'Well', 'Very good'];
23
+ }
24
+ function formatPhoneNumber(phone) {
25
+ debugger;
26
+ return String(phone || '')
27
+ .replace('(', '')
28
+ .replace(')', '')
29
+ .replace('-', '')
30
+ .replaceAll(' ', '');
31
+ }
32
+
33
+ export { formatWebsiteUrl as a, formatFullAddress as b, formatPhoneNumber as f, getRatingText as g };
@@ -0,0 +1,33 @@
1
+ function wait(time = 1000) {
2
+ return new Promise(resolve => setTimeout(() => resolve({}), time));
3
+ }
4
+ function format(first, middle, last) {
5
+ return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
6
+ }
7
+ function formatWebsiteUrl(website) {
8
+ return !!website ? website.indexOf('http') > -1 ? website : `http://${website}` : null;
9
+ }
10
+ function formatFullAddress(salon) {
11
+ const { businessAddress, city, state, zipcode, } = salon || {};
12
+ const stateFields = [state, zipcode].filter(field => !!field);
13
+ if (businessAddress) {
14
+ return [businessAddress, city]
15
+ .filter(field => !!field)
16
+ .concat(stateFields.length > 0 ? [stateFields.join(' ')] : [])
17
+ .join(', ');
18
+ }
19
+ return null;
20
+ }
21
+ function getRatingText() {
22
+ return ['', 'Poor', 'Sufficient', 'Average', 'Well', 'Very good'];
23
+ }
24
+ function formatPhoneNumber(phone) {
25
+ return String(phone || '')
26
+ .replaceAll('(', '')
27
+ .replaceAll(')', '')
28
+ .replaceAll('-', '')
29
+ .replaceAll('_', '')
30
+ .replaceAll(' ', '');
31
+ }
32
+
33
+ export { formatWebsiteUrl as a, formatFullAddress as b, formatPhoneNumber as f, getRatingText as g };
@@ -0,0 +1,34 @@
1
+ function wait(time = 1000) {
2
+ return new Promise(resolve => setTimeout(() => resolve({}), time));
3
+ }
4
+ function format(first, middle, last) {
5
+ return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
6
+ }
7
+ function formatWebsiteUrl(website) {
8
+ return !!website ? website.indexOf('http') > -1 ? website : `http://${website}` : null;
9
+ }
10
+ function formatFullAddress(salon) {
11
+ const { businessAddress, city, state, zipcode, } = salon || {};
12
+ const stateFields = [state, zipcode].filter(field => !!field);
13
+ if (businessAddress) {
14
+ return [businessAddress, city]
15
+ .filter(field => !!field)
16
+ .concat(stateFields.length > 0 ? [stateFields.join(' ')] : [])
17
+ .join(', ');
18
+ }
19
+ return null;
20
+ }
21
+ function getRatingText() {
22
+ return ['', 'Poor', 'Sufficient', 'Average', 'Well', 'Very good'];
23
+ }
24
+ function formatPhoneNumber(phone) {
25
+ debugger;
26
+ return String(phone || '')
27
+ .replace('(', '')
28
+ .replace(')', '')
29
+ .replace('-', '')
30
+ .replace('_', '')
31
+ .replaceAll(' ', '');
32
+ }
33
+
34
+ export { formatWebsiteUrl as a, formatFullAddress as b, formatPhoneNumber as f, getRatingText as g };
@@ -0,0 +1,33 @@
1
+ function wait(time = 1000) {
2
+ return new Promise(resolve => setTimeout(() => resolve({}), time));
3
+ }
4
+ function format(first, middle, last) {
5
+ return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
6
+ }
7
+ function formatWebsiteUrl(website) {
8
+ return !!website ? website.indexOf('http') > -1 ? website : `http://${website}` : null;
9
+ }
10
+ function formatFullAddress(salon) {
11
+ const { businessAddress, city, state, zipcode, } = salon || {};
12
+ const stateFields = [state, zipcode].filter(field => !!field);
13
+ if (businessAddress) {
14
+ return [businessAddress, city]
15
+ .filter(field => !!field)
16
+ .concat(stateFields.length > 0 ? [stateFields.join(' ')] : [])
17
+ .join(', ');
18
+ }
19
+ return null;
20
+ }
21
+ function getRatingText() {
22
+ return ['', 'Poor', 'Sufficient', 'Average', 'Well', 'Very good'];
23
+ }
24
+ function formatPhoneNumber(phone) {
25
+ return String(phone || '')
26
+ .replace('(', '')
27
+ .replace(')', '')
28
+ .replace('-', '')
29
+ .replace('_', '')
30
+ .replaceAll(' ', '');
31
+ }
32
+
33
+ export { formatWebsiteUrl as a, formatFullAddress as b, formatPhoneNumber as f, getRatingText as g };
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, g as get_1 } from './services-9a686ade.js';
2
+ import { H as HttpService, g as get_1 } from './services-82948efc.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -70,7 +70,7 @@ const WizardExistingUser = class {
70
70
  marginBottom: '24px',
71
71
  padding: '16px',
72
72
  } }, this.errorMessage)), h("div", { style: { marginBottom: '24px' } }, h("div", { style: {
73
- fontSize: '18px',
73
+ fontSize: '20px',
74
74
  fontWeight: '600',
75
75
  } }, "Phone verification code sent!"), h("div", { style: {
76
76
  marginTop: '4px',
@@ -81,8 +81,8 @@ const WizardExistingUser = class {
81
81
  padding: '8px 16px',
82
82
  height: '48px',
83
83
  width: '100%',
84
- fontSize: '18px',
85
- fontWeight: '600',
84
+ fontSize: '22px',
85
+ fontWeight: '700',
86
86
  } })), h("div", null, h("button", { type: "button", disabled: this.isSubmitting, style: {
87
87
  border: `1px solid ${Colors.Secondary}`,
88
88
  background: Colors.Secondary,
@@ -95,7 +95,7 @@ const WizardExistingUser = class {
95
95
  paddingRight: '24px',
96
96
  height: '48px',
97
97
  width: '100%',
98
- }, onClick: () => this.activateAccount() }, "Submit")), h("div", { style: { marginTop: '16px' } }, h("button", { type: "button", disabled: this.isSubmitting, style: {
98
+ }, onClick: () => this.activateAccount() }, "Submit ", this.isSubmitting && (h("span", { class: "fs-spin", style: { marginLeft: '4px' } }, h("i", { class: "ri-loader-4-line" }))))), h("div", { style: { marginTop: '16px' } }, h("button", { type: "button", disabled: this.isSubmitting, style: {
99
99
  border: `1px solid ${Colors.Gray02}`,
100
100
  background: Colors.White,
101
101
  color: Colors.TextColor,
@@ -114,10 +114,10 @@ const WizardExistingUser = class {
114
114
  marginBottom: '24px',
115
115
  padding: '16px',
116
116
  } }, this.errorMessage)), h("div", { style: { marginBottom: '24px' } }, h("div", { style: {
117
- fontSize: '18px',
117
+ fontSize: '20px',
118
118
  fontWeight: '600',
119
- } }, "Need verification"), h("div", { style: { marginTop: '4px' } }, "We will send you a code to verify your idenity to protect your account"), h("div", { style: { marginTop: '8px', color: Colors.Red03 } }, "Agreed to receive SMS to phone ", this.inputtedPhone)), h("div", { style: { textAlign: 'right' } }, h("button", { type: "button", style: {
120
- border: `1px solid ${Colors.Gray02}`,
119
+ } }, "Need verification"), h("div", { style: { marginTop: '4px' } }, "We will send you a code to verify your idenity to protect your account"), h("div", { style: { marginTop: '8px', color: Colors.Red03 } }, "Agreed to receive SMS to phone ", this.inputtedPhone)), h("div", { style: { textAlign: 'right' } }, h("button", { type: "button", disabled: this.isSubmitting, style: {
120
+ border: `1px solid ${Colors.Gray03}`,
121
121
  background: Colors.White,
122
122
  color: Colors.TextColor,
123
123
  borderRadius: '8px',
@@ -127,7 +127,7 @@ const WizardExistingUser = class {
127
127
  paddingRight: '24px',
128
128
  height: '48px',
129
129
  marginRight: '16px',
130
- }, onClick: () => this.onClose() }, "Cancel"), h("button", { type: "button", style: {
130
+ }, onClick: () => this.onClose() }, "Cancel"), h("button", { type: "button", disabled: this.isSubmitting, style: {
131
131
  border: `1px solid ${Colors.Secondary}`,
132
132
  background: Colors.Secondary,
133
133
  color: Colors.White,
@@ -138,7 +138,7 @@ const WizardExistingUser = class {
138
138
  paddingLeft: '24px',
139
139
  paddingRight: '24px',
140
140
  height: '48px',
141
- }, onClick: () => this.sendLoginCode() }, "Verify now"))));
141
+ }, onClick: () => this.sendLoginCode() }, "Verify now ", this.isSubmitting && (h("span", { class: "fs-spin", style: { marginLeft: '4px' } }, h("i", { class: "ri-loader-4-line" })))))));
142
142
  }
143
143
  };
144
144
  WizardExistingUser.style = wizardExistingUserCss;
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, g as get_1 } from './services-9a686ade.js';
2
+ import { H as HttpService, g as get_1 } from './services-82948efc.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -102,7 +102,7 @@ const WizardNewUser = class {
102
102
  marginBottom: '24px',
103
103
  padding: '16px',
104
104
  } }, this.errorMessage)), h("div", { style: { marginBottom: '24px' } }, h("div", { style: {
105
- fontSize: '18px',
105
+ fontSize: '20px',
106
106
  fontWeight: '600',
107
107
  } }, "Phone verification code sent!"), h("div", { style: {
108
108
  marginTop: '4px',
@@ -113,8 +113,8 @@ const WizardNewUser = class {
113
113
  padding: '8px 16px',
114
114
  height: '48px',
115
115
  width: '100%',
116
- fontSize: '18px',
117
- fontWeight: '600',
116
+ fontSize: '22px',
117
+ fontWeight: '700',
118
118
  } })), h("div", null, h("button", { type: "button", disabled: this.isSubmitting, style: {
119
119
  border: `1px solid ${Colors.Secondary}`,
120
120
  background: Colors.Secondary,
@@ -127,7 +127,7 @@ const WizardNewUser = class {
127
127
  paddingRight: '24px',
128
128
  height: '48px',
129
129
  width: '100%',
130
- }, onClick: () => this.activateAccount() }, "Submit")), h("div", { style: { marginTop: '16px' } }, h("button", { type: "button", disabled: this.isSubmitting, style: {
130
+ }, onClick: () => this.activateAccount() }, "Submit ", this.isSubmitting && (h("span", { class: "fs-spin", style: { marginLeft: '4px' } }, h("i", { class: "ri-loader-4-line" }))))), h("div", { style: { marginTop: '16px' } }, h("button", { type: "button", disabled: this.isSubmitting, style: {
131
131
  border: `1px solid ${Colors.Gray02}`,
132
132
  background: Colors.White,
133
133
  color: Colors.TextColor,
@@ -146,10 +146,10 @@ const WizardNewUser = class {
146
146
  marginBottom: '24px',
147
147
  padding: '16px',
148
148
  } }, this.errorMessage)), h("div", { style: { marginBottom: '24px' } }, h("div", { style: {
149
- fontSize: '18px',
149
+ fontSize: '20px',
150
150
  fontWeight: '600',
151
- } }, "Your first time purchase gift card"), h("div", { style: { marginTop: '4px' } }, "We need to verify your phone number to prevent online spam purchases."), h("div", { style: { marginTop: '12px' } }, "You agreed to receive SMS to the phone number provided. ", h("br", null), "Message frequency varies. Msg & data rates may apply. Reply STOP to Opt-Out. Reply HELP for help."), h("div", { style: { marginTop: '4px' } }, "View our ", h("a", { target: "_blank", rel: "noopener noreferrer", href: "https://fave.salon/r/privacy-policy", style: { color: Colors.TextColor, textDecoration: 'underline' } }, "Privacy Policy"), " and ", h("a", { target: "_blank", rel: "noopener noreferrer", href: "https://fave.salon//r/terms-for-client", style: { color: Colors.TextColor, textDecoration: 'underline' } }, "Terms of Service"))), h("div", { style: { textAlign: 'right' } }, h("button", { type: "button", style: {
152
- border: `1px solid ${Colors.Gray02}`,
151
+ } }, "Your first time purchase gift card"), h("div", { style: { marginTop: '4px' } }, "We need to verify your phone number to prevent online spam purchases."), h("div", { style: { marginTop: '12px' } }, "You agreed to receive SMS to the phone number provided. ", h("br", null), "Message frequency varies. Msg & data rates may apply. Reply STOP to Opt-Out. Reply HELP for help."), h("div", { style: { marginTop: '4px' } }, "View our ", h("a", { target: "_blank", rel: "noopener noreferrer", href: "https://fave.salon/r/privacy-policy", style: { color: Colors.TextColor, textDecoration: 'underline' } }, "Privacy Policy"), " and ", h("a", { target: "_blank", rel: "noopener noreferrer", href: "https://fave.salon//r/terms-for-client", style: { color: Colors.TextColor, textDecoration: 'underline' } }, "Terms of Service"))), h("div", { style: { textAlign: 'right' } }, h("button", { type: "button", disabled: this.isSubmitting, style: {
152
+ border: `1px solid ${Colors.Gray03}`,
153
153
  background: Colors.White,
154
154
  color: Colors.TextColor,
155
155
  borderRadius: '8px',
@@ -159,7 +159,7 @@ const WizardNewUser = class {
159
159
  paddingRight: '24px',
160
160
  height: '48px',
161
161
  marginRight: '16px',
162
- }, onClick: () => this.onClose() }, "Cancel"), h("button", { type: "button", style: {
162
+ }, onClick: () => this.onClose() }, "Cancel"), h("button", { type: "button", disabled: this.isSubmitting, style: {
163
163
  border: `1px solid ${Colors.Secondary}`,
164
164
  background: Colors.Secondary,
165
165
  color: Colors.White,
@@ -170,7 +170,7 @@ const WizardNewUser = class {
170
170
  paddingLeft: '24px',
171
171
  paddingRight: '24px',
172
172
  height: '48px',
173
- }, onClick: () => this.verifyAccount() }, "Verify now"))));
173
+ }, onClick: () => this.verifyAccount() }, "Verify now ", this.isSubmitting && (h("span", { class: "fs-spin", style: { marginLeft: '4px' } }, h("i", { class: "ri-loader-4-line" })))))));
174
174
  }
175
175
  };
176
176
  WizardNewUser.style = wizardNewUserCss;
@@ -32,11 +32,13 @@ export declare class BuyGiftcardForm {
32
32
  isInvalidEmails: boolean;
33
33
  isInvalidPhones: boolean;
34
34
  selectedStyleId: number;
35
+ isDeliveryDoneVisible: boolean;
35
36
  componentDidLoad(): Promise<void>;
36
37
  private fetchMagensaCredentials;
37
38
  private fetchSalonInfo;
38
39
  private fetchGiftCardSettings;
39
40
  private initMagensaPayment;
41
+ private onClickDeliveryDone;
40
42
  private renderPaymentOnlineDisabled;
41
43
  private renderUserVerificationForm;
42
44
  private onChangeEmail;
@@ -46,7 +48,6 @@ export declare class BuyGiftcardForm {
46
48
  private renderPaymentSucceed;
47
49
  private createCardPayment;
48
50
  private processCardToken;
49
- private voidPaymentRequest;
50
51
  private onSubmitPaymentForm;
51
52
  private renderPaymentForm;
52
53
  private renderSalonInfo;
@@ -6,12 +6,14 @@ declare enum FormStep {
6
6
  UserRegister = "Booking Register"
7
7
  }
8
8
  export declare class BuyGiftcardVerification {
9
+ nativeInput?: HTMLInputElement;
9
10
  salonId: string;
10
11
  onSuccess: (user: User) => void;
11
12
  step: FormStep;
12
13
  userInfo: User;
13
14
  inputtedPhone: string;
14
15
  isSearchingUser: boolean;
16
+ componentDidLoad(): void;
15
17
  private onSubmitUserInfo;
16
18
  private renderUserInfoForm;
17
19
  private onSearchClient;
@@ -129,19 +129,19 @@ declare class HttpService {
129
129
  fetchGiftCardSettings(salonId: any): Promise<any>;
130
130
  fetchSalonClientInfo(salonId: any, mobilePhone: any): Promise<{} | {}>;
131
131
  fetchMagensaCredentials(salonId: any): Promise<{
132
- processorName: string;
133
132
  customerCode: string;
134
133
  username: string;
135
134
  password: string;
135
+ processorName: string;
136
136
  token: string;
137
137
  } | {
138
- processorName?: undefined;
139
138
  customerCode?: undefined;
140
139
  username?: undefined;
141
140
  password?: undefined;
141
+ processorName?: undefined;
142
142
  token?: undefined;
143
143
  }>;
144
- magensaProcessToken(options: any): Promise<any>;
144
+ magensaProcessToken(salonId: any, options: any): Promise<any>;
145
145
  magensaConfirmTransaction(options: any): Promise<any>;
146
146
  }
147
147
  declare const _default: () => HttpService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "favesalon-embed",
3
- "version": "1.0.16",
3
+ "version": "1.0.17",
4
4
  "description": "Favesalon Embed",
5
5
  "author": "Trung Luu <trung@favesalon.com> (https://favesalon.com)",
6
6
  "main": "dist/index.cjs.js",
@@ -31,6 +31,7 @@
31
31
  "dayjs": "^1.10.7",
32
32
  "firebase": "^10.0.0",
33
33
  "glamor": "^2.20.40",
34
+ "inputmask": "^5.0.9",
34
35
  "lodash": "^4.17.21"
35
36
  },
36
37
  "devDependencies": {