@servicetitan/mpa-components 0.2.2 → 0.3.0

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 (71) hide show
  1. package/lib/components/settings/company-details/index.d.ts +10 -9
  2. package/lib/components/settings/company-details/index.d.ts.map +1 -1
  3. package/lib/components/settings/company-details/index.js.map +1 -1
  4. package/lib/components/settings/company-email-footer/company-email-footer.stories.js +2 -2
  5. package/lib/components/settings/company-email-footer/company-email-footer.stories.js.map +1 -1
  6. package/lib/components/settings/company-email-footer/index.d.ts +4 -4
  7. package/lib/components/settings/company-email-footer/index.d.ts.map +1 -1
  8. package/lib/components/settings/company-email-reply-to/index.d.ts +1 -1
  9. package/lib/components/settings/company-email-reply-to/index.d.ts.map +1 -1
  10. package/lib/components/settings/company-email-sender/company-email-sender.stories.d.ts +3 -1
  11. package/lib/components/settings/company-email-sender/company-email-sender.stories.d.ts.map +1 -1
  12. package/lib/components/settings/company-email-sender/company-email-sender.stories.js +7 -3
  13. package/lib/components/settings/company-email-sender/company-email-sender.stories.js.map +1 -1
  14. package/lib/components/settings/company-email-sender/custom-domain-sender.d.ts +12 -0
  15. package/lib/components/settings/company-email-sender/custom-domain-sender.d.ts.map +1 -0
  16. package/lib/components/settings/company-email-sender/custom-domain-sender.js +29 -0
  17. package/lib/components/settings/company-email-sender/custom-domain-sender.js.map +1 -0
  18. package/lib/components/settings/company-email-sender/index.d.ts +2 -11
  19. package/lib/components/settings/company-email-sender/index.d.ts.map +1 -1
  20. package/lib/components/settings/company-email-sender/index.js +2 -28
  21. package/lib/components/settings/company-email-sender/index.js.map +1 -1
  22. package/lib/components/settings/company-email-sender/simple-sender.d.ts +8 -0
  23. package/lib/components/settings/company-email-sender/simple-sender.d.ts.map +1 -0
  24. package/lib/components/settings/company-email-sender/simple-sender.js +18 -0
  25. package/lib/components/settings/company-email-sender/simple-sender.js.map +1 -0
  26. package/lib/components/settings/company-trade-checkbox/index.d.ts +2 -2
  27. package/lib/components/settings/company-trade-checkbox/index.d.ts.map +1 -1
  28. package/lib/components/settings/company-trade-checkbox/index.js.map +1 -1
  29. package/lib/components/settings/company-trades-picker/index.d.ts +3 -3
  30. package/lib/components/settings/company-trades-picker/index.d.ts.map +1 -1
  31. package/lib/components/settings/company-trades-picker/index.js.map +1 -1
  32. package/lib/components/settings/double-opt-in/double-opt-in.stories.js +2 -2
  33. package/lib/components/settings/double-opt-in/double-opt-in.stories.js.map +1 -1
  34. package/lib/components/settings/double-opt-in/index.d.ts +5 -5
  35. package/lib/components/settings/double-opt-in/index.d.ts.map +1 -1
  36. package/lib/components/settings/email-validation/email-validation.stories.d.ts +3 -2
  37. package/lib/components/settings/email-validation/email-validation.stories.d.ts.map +1 -1
  38. package/lib/components/settings/email-validation/index.d.ts +4 -4
  39. package/lib/components/settings/email-validation/index.d.ts.map +1 -1
  40. package/lib/components/settings/email-validation/index.js.map +1 -1
  41. package/lib/components/settings/form-errors-list/index.d.ts +7 -0
  42. package/lib/components/settings/form-errors-list/index.d.ts.map +1 -0
  43. package/lib/components/settings/form-errors-list/index.js +14 -0
  44. package/lib/components/settings/form-errors-list/index.js.map +1 -0
  45. package/lib/components/settings/index.d.ts +2 -0
  46. package/lib/components/settings/index.d.ts.map +1 -1
  47. package/lib/components/settings/index.js +2 -0
  48. package/lib/components/settings/index.js.map +1 -1
  49. package/lib/components/settings/opt-out-message/index.d.ts +6 -6
  50. package/lib/components/settings/opt-out-message/index.d.ts.map +1 -1
  51. package/lib/components/settings/opt-out-message/opt-out-message.stories.js +2 -2
  52. package/lib/components/settings/opt-out-message/opt-out-message.stories.js.map +1 -1
  53. package/package.json +3 -9
  54. package/src/components/settings/company-details/index.tsx +10 -9
  55. package/src/components/settings/company-email-footer/company-email-footer.stories.tsx +2 -2
  56. package/src/components/settings/company-email-footer/index.tsx +4 -4
  57. package/src/components/settings/company-email-reply-to/index.tsx +1 -1
  58. package/src/components/settings/company-email-sender/company-email-sender.stories.tsx +11 -3
  59. package/src/components/settings/company-email-sender/custom-domain-sender.tsx +129 -0
  60. package/src/components/settings/company-email-sender/index.tsx +2 -129
  61. package/src/components/settings/company-email-sender/simple-sender.tsx +71 -0
  62. package/src/components/settings/company-trade-checkbox/index.tsx +3 -3
  63. package/src/components/settings/company-trades-picker/index.tsx +4 -4
  64. package/src/components/settings/double-opt-in/double-opt-in.stories.tsx +2 -2
  65. package/src/components/settings/double-opt-in/index.tsx +5 -5
  66. package/src/components/settings/email-validation/index.tsx +8 -8
  67. package/src/components/settings/form-errors-list/index.tsx +41 -0
  68. package/src/components/settings/index.ts +2 -0
  69. package/src/components/settings/opt-out-message/index.tsx +6 -6
  70. package/src/components/settings/opt-out-message/opt-out-message.stories.tsx +2 -2
  71. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/settings/form-errors-list/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAMrD,MAAM,CAAC,MAAM,cAAc,GAA4B,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAuB,EAAE,EAAE;IAC9F,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IAED,MAAM,UAAU,GAAG,OAAO,CACtB,GAAG,EAAE,CACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CACtB,CAAC,CAAC,GAAG,EAAE,KAAK,CAAuD,EAAE,EAAE;QACnE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpB,2BAAc,SAAS,EAAC,mCAAmC,gBACtD,KAAK,CAAC,KAAK,KADP,GAAG,CAEP,CACR,CAAC,CAAC,CAAC,IAAI,CAAC;IACb,CAAC,CACJ,EACL,CAAC,IAAI,CAAC,CAAC,CAAC,CACX,CAAC;IAEF,OAAO,CACH,MAAC,MAAM,kBACH,MAAM,EAAC,UAAU,EACjB,KAAK,EAAC,gBAAgB,EACtB,IAAI,QACJ,SAAS,EAAC,+BAA+B,iBAEzC,uEAA2C,EAC3C,2BAAI,SAAS,EAAC,8BAA8B,gBAAE,UAAU,YAAM,aACzD,CACZ,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -4,6 +4,8 @@ export * from './company-email-reply-to';
4
4
  export * from './company-email-sender';
5
5
  export * from './company-trades-picker';
6
6
  export * from './double-opt-in';
7
+ export * from './email-validation';
8
+ export * from './form-errors-list';
7
9
  export * from './logo-picker';
8
10
  export * from './opt-out-message';
9
11
  export * from './settings-section';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/settings/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/settings/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
@@ -4,6 +4,8 @@ export * from './company-email-reply-to';
4
4
  export * from './company-email-sender';
5
5
  export * from './company-trades-picker';
6
6
  export * from './double-opt-in';
7
+ export * from './email-validation';
8
+ export * from './form-errors-list';
7
9
  export * from './logo-picker';
8
10
  export * from './opt-out-message';
9
11
  export * from './settings-section';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/settings/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/settings/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { FC } from 'react';
2
- import { CheckboxFieldState, InputFieldState } from '@servicetitan/form';
2
+ import { CheckboxFieldState, InputFieldState, TextAreaFieldState } from '@servicetitan/form';
3
3
  export interface OptOutMessageState {
4
- subjectLine: InputFieldState<string>;
5
- header: InputFieldState<string>;
6
- body: InputFieldState<string>;
7
- buttonText: InputFieldState<string>;
8
- monthsLimit: InputFieldState<number>;
4
+ subjectLine: InputFieldState<string | undefined>;
5
+ header: InputFieldState<string | undefined>;
6
+ body: TextAreaFieldState<string | undefined>;
7
+ buttonText: InputFieldState<string | undefined>;
8
+ monthsLimit: InputFieldState<number | undefined>;
9
9
  enabled: CheckboxFieldState;
10
10
  autoSuppressionEnabled: CheckboxFieldState;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/opt-out-message/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASzE,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,sBAAsB,EAAE,kBAAkB,CAAC;CAC9C;AACD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAChD;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA8HhD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/settings/opt-out-message/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAS7F,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,MAAM,EAAE,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,IAAI,EAAE,kBAAkB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,UAAU,EAAE,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChD,WAAW,EAAE,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,kBAAkB,CAAC;IAC5B,sBAAsB,EAAE,kBAAkB,CAAC;CAC9C;AACD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAChD;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA8HhD,CAAC"}
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
- import { CheckboxFieldState, InputFieldState } from '@servicetitan/form';
8
+ import { CheckboxFieldState, InputFieldState, TextAreaFieldState } from '@servicetitan/form';
9
9
  import { injectable, provide, useDependencies } from '@servicetitan/react-ioc';
10
10
  import { FormState } from 'formstate';
11
11
  import { OptOutMessage as Component } from '.';
@@ -23,7 +23,7 @@ let OptOutStore = class OptOutStore {
23
23
  value: new FormState({
24
24
  subjectLine: new InputFieldState('Good bye'),
25
25
  header: new InputFieldState('Opt out of emails'),
26
- body: new InputFieldState('Sorry to see you go!'),
26
+ body: new TextAreaFieldState('Sorry to see you go!'),
27
27
  buttonText: new InputFieldState('Bye'),
28
28
  monthsLimit: new InputFieldState(6),
29
29
  enabled: new CheckboxFieldState(true),
@@ -1 +1 @@
1
- {"version":3,"file":"opt-out-message.stories.js","sourceRoot":"","sources":["../../../../src/components/settings/opt-out-message/opt-out-message.stories.tsx"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAE/C,eAAe;IACX,KAAK,EAAE,uCAAuC;IAC9C,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,EAAE;CACjB,CAAC;AAGF,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QACI;;;;mBAAO,IAAI,SAAS,CAAC;gBACjB,WAAW,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC;gBAC5C,MAAM,EAAE,IAAI,eAAe,CAAC,mBAAmB,CAAC;gBAChD,IAAI,EAAE,IAAI,eAAe,CAAC,sBAAsB,CAAC;gBACjD,UAAU,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC;gBACtC,WAAW,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC;gBACnC,OAAO,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC;gBACrC,sBAAsB,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC;aACvD,CAAC;WAAC;IACP,CAAC;CAAA,CAAA;AAVK,WAAW;IADhB,UAAU,EAAE;GACP,WAAW,CAUhB;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;IACjC,UAAU,EAAE,CAAC,WAAW,CAAC;CAC5B,CAAC,CAAC,GAAG,EAAE;IACJ,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE7C,OAAO,KAAC,SAAS,IAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,WAAI,CAAC;AAClD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"opt-out-message.stories.js","sourceRoot":"","sources":["../../../../src/components/settings/opt-out-message/opt-out-message.stories.tsx"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC;AAE/C,eAAe;IACX,KAAK,EAAE,uCAAuC;IAC9C,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,EAAE;CACjB,CAAC;AAGF,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QACI;;;;mBAAO,IAAI,SAAS,CAAC;gBACjB,WAAW,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC;gBAC5C,MAAM,EAAE,IAAI,eAAe,CAAC,mBAAmB,CAAC;gBAChD,IAAI,EAAE,IAAI,kBAAkB,CAAC,sBAAsB,CAAC;gBACpD,UAAU,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC;gBACtC,WAAW,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC;gBACnC,OAAO,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC;gBACrC,sBAAsB,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC;aACvD,CAAC;WAAC;IACP,CAAC;CAAA,CAAA;AAVK,WAAW;IADhB,UAAU,EAAE;GACP,WAAW,CAUhB;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;IACjC,UAAU,EAAE,CAAC,WAAW,CAAC;CAC5B,CAAC,CAAC,GAAG,EAAE;IACJ,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE7C,OAAO,KAAC,SAAS,IAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,WAAI,CAAC;AAClD,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,9 @@
1
1
  {
2
2
  "name": "@servicetitan/mpa-components",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "typings": "./lib/index.d.ts",
7
- "dependencies": {
8
- "classnames": "~2.3.1",
9
- "lodash": "4.17.21"
10
- },
11
7
  "peerDependencies": {
12
8
  "@servicetitan/confirm": "~21.4.1",
13
9
  "@servicetitan/design-system": "~10.1.1",
@@ -22,9 +18,7 @@
22
18
  },
23
19
  "devDependencies": {
24
20
  "@testing-library/react": "^12.0.0",
25
- "@types/history": "~4.7.7",
26
- "@types/lodash": "^4.14.182",
27
- "@types/react": "~17.0.15"
21
+ "@types/history": "~4.7.7"
28
22
  },
29
23
  "publishConfig": {
30
24
  "access": "restricted"
@@ -32,5 +26,5 @@
32
26
  "cli": {
33
27
  "webpack": false
34
28
  },
35
- "gitHead": "75d806e799cb1fd2aee0714ba06a6753cd478c12"
29
+ "gitHead": "83727a32567c2b028cb21bcda592ccd6bbf02b98"
36
30
  }
@@ -1,5 +1,6 @@
1
1
  import { FC, Fragment, ReactNode } from 'react';
2
2
  import { observer } from 'mobx-react';
3
+ import { FieldState } from 'formstate';
3
4
 
4
5
  import { Form, Link } from '@servicetitan/design-system';
5
6
  import { NumberInput, InputFieldState } from '@servicetitan/form';
@@ -7,15 +8,15 @@ import { NumberInput, InputFieldState } from '@servicetitan/form';
7
8
  import { SettingsSection } from '../settings-section';
8
9
  export interface CompanyDetailsProps {
9
10
  formState: {
10
- city: InputFieldState<string>;
11
- companyEmail: InputFieldState<string>;
12
- companyName: InputFieldState<string>;
13
- state: InputFieldState<string>;
14
- street: InputFieldState<string>;
15
- tagline: InputFieldState<string>;
16
- unit: InputFieldState<string>;
17
- yearEstablished: InputFieldState<number>;
18
- zipCode: InputFieldState<string>;
11
+ city: InputFieldState<string | undefined>;
12
+ companyEmail: InputFieldState<string | undefined>;
13
+ companyName: InputFieldState<string | undefined>;
14
+ state: InputFieldState<string | undefined>;
15
+ street: InputFieldState<string | undefined>;
16
+ tagline: InputFieldState<string | undefined>;
17
+ unit: InputFieldState<string | undefined>;
18
+ yearEstablished: FieldState<number | undefined>;
19
+ zipCode: InputFieldState<string | undefined>;
19
20
  };
20
21
  logoPicker?: ReactNode;
21
22
  sectionDescription?: string | JSX.Element;
@@ -1,4 +1,4 @@
1
- import { InputFieldState } from '@servicetitan/form';
1
+ import { InputFieldState, TextAreaFieldState } from '@servicetitan/form';
2
2
  import { injectable, provide, useDependencies } from '@servicetitan/react-ioc';
3
3
  import { FormState } from 'formstate';
4
4
 
@@ -13,7 +13,7 @@ export default {
13
13
  @injectable()
14
14
  class CompanyEmailStore {
15
15
  form = new FormState({
16
- legalCopy: new InputFieldState('Legal copy example'),
16
+ legalCopy: new TextAreaFieldState('Legal copy example'),
17
17
  license: new InputFieldState('License'),
18
18
  copyrightText: new InputFieldState('Copyritght 2022'),
19
19
  });
@@ -2,15 +2,15 @@ import { FC, Fragment } from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
 
4
4
  import { Form, Text } from '@servicetitan/design-system';
5
- import { InputFieldState } from '@servicetitan/form';
5
+ import { InputFieldState, TextAreaFieldState } from '@servicetitan/form';
6
6
 
7
7
  import { SettingsSection } from '../settings-section';
8
8
 
9
9
  export interface CompanyEmailFooterProps {
10
10
  formState: {
11
- legalCopy: InputFieldState<string>;
12
- license: InputFieldState<string>;
13
- copyrightText: InputFieldState<string>;
11
+ legalCopy: TextAreaFieldState<string | undefined>;
12
+ license: InputFieldState<string | undefined>;
13
+ copyrightText: InputFieldState<string | undefined>;
14
14
  };
15
15
  }
16
16
 
@@ -7,7 +7,7 @@ import { Form } from '@servicetitan/design-system';
7
7
  import { SettingsSection } from '../settings-section';
8
8
 
9
9
  export interface CompanyEmailReplyToProps {
10
- replyToEmail: InputFieldState<string>;
10
+ replyToEmail: InputFieldState<string | undefined>;
11
11
  }
12
12
 
13
13
  export const CompanyEmailReplyTo: FC<CompanyEmailReplyToProps> = observer(({ replyToEmail }) => {
@@ -2,11 +2,11 @@ import { InputFieldState } from '@servicetitan/form';
2
2
  import { injectable, provide, useDependencies } from '@servicetitan/react-ioc';
3
3
  import { FormState } from 'formstate';
4
4
 
5
- import { CompanyEmailSender as Component } from '.';
5
+ import { CompanyEmailSender as Simple, CompanyEmailSenderCustomDomain as Custom } from '.';
6
6
 
7
7
  export default {
8
8
  title: 'MPA Components/settings/CompanyEmailSender',
9
- component: Component,
9
+ component: Simple,
10
10
  parameters: {},
11
11
  };
12
12
 
@@ -19,8 +19,16 @@ class CompanyEmailSenderStore {
19
19
  });
20
20
  }
21
21
 
22
+ export const CompanyEmailSenderCustomDomain = provide({ singletons: [CompanyEmailSenderStore] })(
23
+ () => {
24
+ const [store] = useDependencies(CompanyEmailSenderStore);
25
+
26
+ return <Custom formState={store.form.$} senderTld="tld.com" />;
27
+ }
28
+ );
29
+
22
30
  export const CompanyEmailSender = provide({ singletons: [CompanyEmailSenderStore] })(() => {
23
31
  const [store] = useDependencies(CompanyEmailSenderStore);
24
32
 
25
- return <Component formState={store.form.$} senderTld="com" />;
33
+ return <Simple senderName={store.form.$.senderName} senderEmail={store.form.$.senderEmail} />;
26
34
  });
@@ -0,0 +1,129 @@
1
+ import { SyntheticEvent, Fragment, useCallback, FC } from 'react';
2
+ import { observer } from 'mobx-react';
3
+
4
+ import { Form, Text } from '@servicetitan/design-system';
5
+ import { InputFieldState } from '@servicetitan/form';
6
+
7
+ import { SettingsSection } from '../settings-section';
8
+ import { convertDomainName } from '../../../utils/helpers';
9
+
10
+ import * as Styles from './company-email-sender.module.less';
11
+
12
+ export interface CompanyEmailSenderProps {
13
+ formState: {
14
+ senderName: InputFieldState<string | undefined>;
15
+ senderDomain: InputFieldState<string | undefined>;
16
+ senderEmail: InputFieldState<string | undefined>;
17
+ };
18
+
19
+ senderTld: string;
20
+ }
21
+
22
+ export const CompanyEmailSender: FC<CompanyEmailSenderProps> = observer(
23
+ ({ formState: { senderDomain, senderName, senderEmail }, senderTld }) => {
24
+ const handleSenderNameChange = useCallback(
25
+ (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {
26
+ if (data.value.length > 80) {
27
+ return;
28
+ }
29
+
30
+ senderName.onChange(data.value);
31
+ },
32
+ [senderName]
33
+ );
34
+
35
+ const handleSenderDomainChange = useCallback(
36
+ (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {
37
+ if (data.value.length > 30) {
38
+ return;
39
+ }
40
+
41
+ senderDomain.onChange(data.value);
42
+ },
43
+ [senderDomain]
44
+ );
45
+
46
+ const handleSenderEmailChange = useCallback(
47
+ (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {
48
+ if (data.value.length > 50) {
49
+ return;
50
+ }
51
+
52
+ senderEmail.onChange(data.value);
53
+ },
54
+ [senderEmail]
55
+ );
56
+
57
+ return (
58
+ <SettingsSection
59
+ title="Sender"
60
+ text="Configure sender name and email."
61
+ qaPrefix="qa-settings-sender"
62
+ >
63
+ <Form className="m-b-0-i">
64
+ <Form.Group widths="equal" className="m-b-2-i">
65
+ <Form.Input
66
+ width={6}
67
+ className="m-b-0-i qa-settings-sender-name"
68
+ value={senderName.value}
69
+ onChange={handleSenderNameChange}
70
+ error={senderName.hasError}
71
+ label={
72
+ <Fragment>
73
+ Sender Name &nbsp;&nbsp;
74
+ <Text inline size={2} subdued>
75
+ max 80 characters
76
+ </Text>
77
+ </Fragment>
78
+ }
79
+ placeholder="John Doe"
80
+ fluid
81
+ />
82
+ <Form.Input
83
+ width={6}
84
+ className="m-b-0-i qa-settings-sender-domain"
85
+ value={senderDomain.value}
86
+ onChange={handleSenderDomainChange}
87
+ error={senderDomain.hasError}
88
+ label="Sender Domain"
89
+ placeholder="Your Company"
90
+ fluid
91
+ />
92
+ </Form.Group>
93
+ <Form.Group className="m-b-0-i">
94
+ <Form.Input
95
+ width={6}
96
+ className="m-b-0-i qa-settings-sender-email"
97
+ value={senderEmail.value}
98
+ onChange={handleSenderEmailChange}
99
+ error={senderEmail.hasError}
100
+ label={
101
+ <Fragment>
102
+ Sender Email&nbsp;
103
+ <Text inline size={2} subdued>
104
+ (domain added automatically)
105
+ </Text>
106
+ </Fragment>
107
+ }
108
+ placeholder="john.doe"
109
+ fluid
110
+ />
111
+ <Form.Field label={'\u00A0'}>
112
+ <div className={Styles.domain}>
113
+ <Text
114
+ size={3}
115
+ bold
116
+ subdued
117
+ className="qa-settings-sender-generated-domain"
118
+ >
119
+ @{senderDomain.$ ? convertDomainName(senderDomain.$) : 'domain'}
120
+ .{senderTld}
121
+ </Text>
122
+ </div>
123
+ </Form.Field>
124
+ </Form.Group>
125
+ </Form>
126
+ </SettingsSection>
127
+ );
128
+ }
129
+ );
@@ -1,129 +1,2 @@
1
- import { SyntheticEvent, Fragment, useCallback, FC } from 'react';
2
- import { observer } from 'mobx-react';
3
-
4
- import { Form, Text } from '@servicetitan/design-system';
5
- import { InputFieldState } from '@servicetitan/form';
6
-
7
- import { SettingsSection } from '../settings-section';
8
- import { convertDomainName } from '../../../utils/helpers';
9
-
10
- import * as Styles from './company-email-sender.module.less';
11
-
12
- export interface CompanyEmailSenderProps {
13
- formState: {
14
- senderName: InputFieldState<string>;
15
- senderDomain: InputFieldState<string>;
16
- senderEmail: InputFieldState<string>;
17
- };
18
-
19
- senderTld: string;
20
- }
21
-
22
- export const CompanyEmailSender: FC<CompanyEmailSenderProps> = observer(
23
- ({ formState: { senderDomain, senderName, senderEmail }, senderTld }) => {
24
- const handleSenderNameChange = useCallback(
25
- (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {
26
- if (data.value.length > 80) {
27
- return;
28
- }
29
-
30
- senderName.onChange(data.value);
31
- },
32
- [senderName]
33
- );
34
-
35
- const handleSenderDomainChange = useCallback(
36
- (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {
37
- if (data.value.length > 30) {
38
- return;
39
- }
40
-
41
- senderDomain.onChange(data.value);
42
- },
43
- [senderDomain]
44
- );
45
-
46
- const handleSenderEmailChange = useCallback(
47
- (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {
48
- if (data.value.length > 50) {
49
- return;
50
- }
51
-
52
- senderEmail.onChange(data.value);
53
- },
54
- [senderEmail]
55
- );
56
-
57
- return (
58
- <SettingsSection
59
- title="Sender"
60
- text="Configure sender name and email."
61
- qaPrefix="qa-settings-sender"
62
- >
63
- <Form className="m-b-0-i">
64
- <Form.Group widths="equal" className="m-b-2-i">
65
- <Form.Input
66
- width={6}
67
- className="m-b-0-i qa-settings-sender-name"
68
- value={senderName.value}
69
- onChange={handleSenderNameChange}
70
- error={senderName.hasError}
71
- label={
72
- <Fragment>
73
- Sender Name &nbsp;&nbsp;
74
- <Text inline size={2} subdued>
75
- max 80 characters
76
- </Text>
77
- </Fragment>
78
- }
79
- placeholder="John Doe"
80
- fluid
81
- />
82
- <Form.Input
83
- width={6}
84
- className="m-b-0-i qa-settings-sender-domain"
85
- value={senderDomain.value}
86
- onChange={handleSenderDomainChange}
87
- error={senderDomain.hasError}
88
- label="Sender Domain"
89
- placeholder="Your Company"
90
- fluid
91
- />
92
- </Form.Group>
93
- <Form.Group className="m-b-0-i">
94
- <Form.Input
95
- width={6}
96
- className="m-b-0-i qa-settings-sender-email"
97
- value={senderEmail.value}
98
- onChange={handleSenderEmailChange}
99
- error={senderEmail.hasError}
100
- label={
101
- <Fragment>
102
- Sender Email&nbsp;
103
- <Text inline size={2} subdued>
104
- (domain added automatically)
105
- </Text>
106
- </Fragment>
107
- }
108
- placeholder="john.doe"
109
- fluid
110
- />
111
- <Form.Field label={'\u00A0'}>
112
- <div className={Styles.domain}>
113
- <Text
114
- size={3}
115
- bold
116
- subdued
117
- className="qa-settings-sender-generated-domain"
118
- >
119
- @{senderDomain.$ ? convertDomainName(senderDomain.$) : 'domain'}
120
- .{senderTld}
121
- </Text>
122
- </div>
123
- </Form.Field>
124
- </Form.Group>
125
- </Form>
126
- </SettingsSection>
127
- );
128
- }
129
- );
1
+ export { CompanyEmailSender as CompanyEmailSenderCustomDomain } from './custom-domain-sender';
2
+ export { CompanyEmailSender as CompanyEmailSender } from './simple-sender';
@@ -0,0 +1,71 @@
1
+ import { SyntheticEvent, Fragment, useCallback, FC } from 'react';
2
+ import { observer } from 'mobx-react';
3
+
4
+ import { Form, Text } from '@servicetitan/design-system';
5
+ import { InputFieldState } from '@servicetitan/form';
6
+ import { SettingsSection } from '../settings-section';
7
+
8
+ export interface CompanyEmailSender {
9
+ senderName: InputFieldState<string | undefined>;
10
+ senderEmail: InputFieldState<string | undefined>;
11
+ }
12
+
13
+ export const CompanyEmailSender: FC<CompanyEmailSender> = observer(
14
+ ({ senderName, senderEmail }) => {
15
+ const handleSenderNameChange = useCallback(
16
+ (_0: SyntheticEvent<HTMLInputElement, Event>, data: { value: string }) => {
17
+ if (data.value.length > 80) {
18
+ return;
19
+ }
20
+
21
+ senderName.onChange(data.value);
22
+ },
23
+ [senderName]
24
+ );
25
+
26
+ const handleSenderEmailBlur = useCallback(() => {
27
+ senderEmail.validate();
28
+ }, [senderEmail]);
29
+
30
+ return (
31
+ <SettingsSection
32
+ title="Sender"
33
+ text="Configure sender name and email."
34
+ qaPrefix="qa-settings-sender"
35
+ >
36
+ <Form className="m-b-0-i">
37
+ <Form.Group widths="equal" className="m-b-0-i">
38
+ <Form.Input
39
+ width={6}
40
+ className="m-b-0-i qa-settings-sender-name"
41
+ value={senderName.value}
42
+ onChange={handleSenderNameChange}
43
+ error={senderName.hasError}
44
+ label={
45
+ <Fragment>
46
+ Sender Name &nbsp;&nbsp;
47
+ <Text inline size={2} subdued>
48
+ max 80 characters
49
+ </Text>
50
+ </Fragment>
51
+ }
52
+ placeholder="John Doe"
53
+ fluid
54
+ />
55
+ <Form.Input
56
+ width={6}
57
+ className="m-b-0-i qa-settings-sender-email"
58
+ value={senderEmail.value}
59
+ onChange={senderEmail.onChangeHandler}
60
+ error={senderEmail.hasError}
61
+ onBlur={handleSenderEmailBlur}
62
+ label="Sender Email"
63
+ placeholder="name@company.com"
64
+ fluid
65
+ />
66
+ </Form.Group>
67
+ </Form>
68
+ </SettingsSection>
69
+ );
70
+ }
71
+ );
@@ -5,7 +5,7 @@ import { Card, Icon } from '@servicetitan/design-system';
5
5
 
6
6
  import * as Styles from './company-trade-checkbox.module.less';
7
7
 
8
- export interface CompanyTradeCheckboxProps<TradesType extends string = string> {
8
+ export interface CompanyTradeCheckboxProps<TradesType extends string | number = string> {
9
9
  label?: JSX.Element | string;
10
10
  value?: TradesType;
11
11
  className?: string;
@@ -13,13 +13,13 @@ export interface CompanyTradeCheckboxProps<TradesType extends string = string> {
13
13
  onClick?(item?: TradesType): void;
14
14
  }
15
15
 
16
- export function CompanyTradeCheckbox({
16
+ export function CompanyTradeCheckbox<T extends string | number = string>({
17
17
  label,
18
18
  value,
19
19
  className,
20
20
  active,
21
21
  onClick,
22
- }: CompanyTradeCheckboxProps) {
22
+ }: CompanyTradeCheckboxProps<T>) {
23
23
  const handleClick = useCallback(() => {
24
24
  if (onClick) {
25
25
  onClick(value);
@@ -6,7 +6,7 @@ import { Grid, Text } from '@servicetitan/design-system';
6
6
  import { SettingsSection } from '../settings-section';
7
7
  import { CompanyTradeCheckbox } from '../company-trade-checkbox';
8
8
 
9
- export interface Trade<TradeType extends string> {
9
+ export interface Trade<TradeType extends string | number> {
10
10
  qaKey?: string;
11
11
  name: string;
12
12
  value: TradeType;
@@ -19,12 +19,12 @@ export interface Trade<TradeType extends string> {
19
19
  };
20
20
  }
21
21
 
22
- export interface CompanyTradesPickerProps<TradeType extends string = string> {
22
+ export interface CompanyTradesPickerProps<TradeType extends string | number = string> {
23
23
  trades: Trade<TradeType>[];
24
24
  onTradeChange(t?: TradeType): void;
25
25
  }
26
26
 
27
- export function CompanyTradesPicker<T extends string = string>({
27
+ export function CompanyTradesPicker<T extends string | number = string>({
28
28
  trades,
29
29
  onTradeChange,
30
30
  }: CompanyTradesPickerProps<T>) {
@@ -46,7 +46,7 @@ export function CompanyTradesPicker<T extends string = string>({
46
46
  {row.map(trade => {
47
47
  return (
48
48
  <Grid.Column key={trade.value}>
49
- <CompanyTradeCheckbox
49
+ <CompanyTradeCheckbox<T>
50
50
  className={`qa-settings-select-your-trades-${
51
51
  trade.qaKey ?? trade.value
52
52
  }`}
@@ -1,4 +1,4 @@
1
- import { CheckboxFieldState, InputFieldState } from '@servicetitan/form';
1
+ import { CheckboxFieldState, InputFieldState, TextAreaFieldState } from '@servicetitan/form';
2
2
  import { injectable, provide, useDependencies } from '@servicetitan/react-ioc';
3
3
  import { FormState } from 'formstate';
4
4
  import { DoubleOptIn as Component } from '.';
@@ -14,7 +14,7 @@ class DoubleOptInStore {
14
14
  form = new FormState({
15
15
  emailSubject: new InputFieldState('Jump in'),
16
16
  emailHeader: new InputFieldState('Right now'),
17
- emailBody: new InputFieldState('Jump in right now! Please!'),
17
+ emailBody: new TextAreaFieldState('Jump in right now! Please!'),
18
18
  emailButtonText: new InputFieldState('JUMP IN'),
19
19
  enabled: new CheckboxFieldState(true),
20
20
  });