@homefile/components-v2 1.3.0 → 1.4.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 (200) hide show
  1. package/dist/assets/images/circle-face.svg +21 -0
  2. package/dist/assets/images/company.svg +34 -0
  3. package/dist/assets/images/index.d.ts +5 -1
  4. package/dist/assets/images/index.js +5 -1
  5. package/dist/assets/images/index.ts +7 -0
  6. package/dist/assets/images/location.jpg +0 -0
  7. package/dist/assets/images/logos/index.d.ts +2 -1
  8. package/dist/assets/images/logos/index.js +2 -1
  9. package/dist/assets/images/logos/index.ts +12 -1
  10. package/dist/assets/images/logos/shine.png +0 -0
  11. package/dist/assets/images/shine/gutter-cleaning.png +0 -0
  12. package/dist/assets/images/shine/holiday-lights.png +0 -0
  13. package/dist/assets/images/shine/home-cleaning.png +0 -0
  14. package/dist/assets/images/shine/index.d.ts +7 -0
  15. package/dist/assets/images/shine/index.js +7 -0
  16. package/dist/assets/images/shine/index.ts +15 -0
  17. package/dist/assets/images/shine/pressure.png +0 -0
  18. package/dist/assets/images/shine/roof-cleaning.png +0 -0
  19. package/dist/assets/images/shine/window.png +0 -0
  20. package/dist/assets/locales/en/index.json +23 -1
  21. package/dist/components/contacts/ContactCard.d.ts +1 -1
  22. package/dist/components/contacts/ContactCard.js +8 -3
  23. package/dist/components/contacts/ContactCardHeader.d.ts +1 -1
  24. package/dist/components/contacts/ContactCardHeader.js +5 -6
  25. package/dist/components/contacts/ContactHeaderMenu.d.ts +2 -0
  26. package/dist/components/contacts/ContactHeaderMenu.js +7 -0
  27. package/dist/components/contacts/ContactsContent.d.ts +1 -1
  28. package/dist/components/contacts/ContactsContent.js +2 -2
  29. package/dist/components/contacts/addEditPanel/AddEditContactPanel.d.ts +2 -0
  30. package/dist/components/contacts/addEditPanel/AddEditContactPanel.js +24 -0
  31. package/dist/components/contacts/addEditPanel/index.d.ts +1 -0
  32. package/dist/components/contacts/addEditPanel/index.js +1 -0
  33. package/dist/components/contacts/index.d.ts +3 -0
  34. package/dist/components/contacts/index.js +3 -0
  35. package/dist/components/contacts/viewPanel/CompanyInfoCard.d.ts +2 -0
  36. package/dist/components/contacts/viewPanel/CompanyInfoCard.js +13 -0
  37. package/dist/components/contacts/viewPanel/CompanyRating.d.ts +3 -0
  38. package/dist/components/contacts/viewPanel/CompanyRating.js +27 -0
  39. package/dist/components/contacts/viewPanel/ContactAddressCard.d.ts +2 -0
  40. package/dist/components/contacts/viewPanel/ContactAddressCard.js +12 -0
  41. package/dist/components/contacts/viewPanel/ContactNotes.d.ts +3 -0
  42. package/dist/components/contacts/viewPanel/ContactNotes.js +8 -0
  43. package/dist/components/contacts/viewPanel/PersonalInfoCard.d.ts +2 -0
  44. package/dist/components/contacts/viewPanel/PersonalInfoCard.js +8 -0
  45. package/dist/components/contacts/viewPanel/RoleTag.d.ts +2 -0
  46. package/dist/components/contacts/viewPanel/RoleTag.js +9 -0
  47. package/dist/components/contacts/viewPanel/ViewContactHeader.d.ts +2 -0
  48. package/dist/components/contacts/viewPanel/ViewContactHeader.js +11 -0
  49. package/dist/components/contacts/viewPanel/ViewContactPanel.d.ts +2 -0
  50. package/dist/components/contacts/viewPanel/ViewContactPanel.js +9 -0
  51. package/dist/components/contacts/viewPanel/index.d.ts +8 -0
  52. package/dist/components/contacts/viewPanel/index.js +8 -0
  53. package/dist/components/forms/dynamicForm/DynamicForm.d.ts +1 -1
  54. package/dist/components/forms/dynamicForm/DynamicForm.js +5 -5
  55. package/dist/components/forms/dynamicForm/SimpleDynamicForm.d.ts +2 -0
  56. package/dist/components/forms/dynamicForm/SimpleDynamicForm.js +29 -0
  57. package/dist/components/forms/dynamicForm/fields/FieldWithDelete.d.ts +1 -1
  58. package/dist/components/forms/dynamicForm/fields/FieldWithDelete.js +2 -3
  59. package/dist/components/forms/dynamicForm/fields/GroupField.d.ts +1 -1
  60. package/dist/components/forms/dynamicForm/fields/GroupField.js +2 -2
  61. package/dist/components/forms/dynamicForm/index.d.ts +1 -1
  62. package/dist/components/forms/dynamicForm/index.js +1 -1
  63. package/dist/components/homeAssistant/panel/ApplianceSteps.d.ts +1 -1
  64. package/dist/components/homeAssistant/panel/ApplianceSteps.js +2 -2
  65. package/dist/components/homeAssistant/panel/HomeAssistantPanel.d.ts +1 -1
  66. package/dist/components/homeAssistant/panel/HomeAssistantPanel.js +14 -7
  67. package/dist/components/homeBoard/HomeBoard.js +1 -1
  68. package/dist/components/homeBoard/HomeCardWithRecipent.d.ts +1 -1
  69. package/dist/components/homeBoard/HomeCardWithRecipent.js +8 -2
  70. package/dist/components/partner/customPartnerTiles/ShineTile.d.ts +2 -0
  71. package/dist/components/partner/customPartnerTiles/ShineTile.js +56 -0
  72. package/dist/components/partner/customPartnerTiles/index.d.ts +1 -0
  73. package/dist/components/partner/customPartnerTiles/index.js +1 -0
  74. package/dist/helpers/HomeRoles.helper.d.ts +1 -5
  75. package/dist/helpers/HomeRoles.helper.js +6 -0
  76. package/dist/helpers/forms/dynamicForm.helper.js +3 -1
  77. package/dist/hooks/forms/index.d.ts +1 -0
  78. package/dist/hooks/forms/index.js +1 -0
  79. package/dist/hooks/forms/useSimpleDynamicForm.d.ts +11 -0
  80. package/dist/hooks/forms/useSimpleDynamicForm.js +36 -0
  81. package/dist/hooks/myHomes/useMyHomeCard.d.ts +1 -3
  82. package/dist/index.d.ts +1 -1
  83. package/dist/index.js +1 -1
  84. package/dist/interfaces/contacts/AddEditContactPanel.interface.d.ts +12 -0
  85. package/dist/interfaces/contacts/ContactCard.interface.d.ts +15 -1
  86. package/dist/interfaces/contacts/ContactCardInfo.interface.d.ts +2 -1
  87. package/dist/interfaces/contacts/ContactsContent.interface.d.ts +4 -0
  88. package/dist/interfaces/contacts/ViewContactPanel.interface.d.ts +9 -0
  89. package/dist/interfaces/contacts/ViewContactPanel.interface.js +1 -0
  90. package/dist/interfaces/contacts/index.d.ts +2 -0
  91. package/dist/interfaces/contacts/index.js +2 -0
  92. package/dist/interfaces/forms/dynamicForm/DynamicForm.interface.d.ts +9 -7
  93. package/dist/interfaces/forms/dynamicForm/SimpleDynamicForm.interface.d.ts +4 -0
  94. package/dist/interfaces/forms/dynamicForm/SimpleDynamicForm.interface.js +1 -0
  95. package/dist/interfaces/forms/dynamicForm/fields/FieldWithDelete.interface.d.ts +1 -1
  96. package/dist/interfaces/forms/dynamicForm/fields/GroupField.interface.d.ts +1 -1
  97. package/dist/interfaces/forms/dynamicForm/index.d.ts +1 -1
  98. package/dist/interfaces/forms/dynamicForm/index.js +1 -1
  99. package/dist/interfaces/homeAssistant/ApplianceSteps.interface.d.ts +3 -0
  100. package/dist/interfaces/homeAssistant/HomeAssistantPanel.interface.d.ts +4 -1
  101. package/dist/interfaces/homeBoard/HomeCardWithRecipent.interface.d.ts +1 -0
  102. package/dist/mocks/contacts/contacts.mock.js +17 -5
  103. package/dist/mocks/forms/dynamicForm.mock.d.ts +1 -0
  104. package/dist/mocks/forms/dynamicForm.mock.js +155 -0
  105. package/dist/proxies/contacts/contactForm.proxy.d.ts +2 -0
  106. package/dist/proxies/contacts/contactForm.proxy.js +7 -0
  107. package/dist/proxies/contacts/index.d.ts +1 -0
  108. package/dist/proxies/contacts/index.js +1 -0
  109. package/dist/proxies/index.d.ts +1 -0
  110. package/dist/proxies/index.js +1 -0
  111. package/dist/stories/assets/Illustrations.stories.js +2 -2
  112. package/dist/stories/contacts/AddEditContactPanel.stories.d.ts +5 -0
  113. package/dist/stories/contacts/AddEditContactPanel.stories.js +22 -0
  114. package/dist/stories/contacts/ContactCardAddress.stories.d.ts +2 -0
  115. package/dist/stories/contacts/ContactCardInfo.stories.d.ts +2 -0
  116. package/dist/stories/contacts/ViewContactPanel.stories.d.ts +5 -0
  117. package/dist/stories/contacts/ViewContactPanel.stories.js +28 -0
  118. package/dist/stories/homeAssistant/panel/ApplianceSteps.stories.d.ts +1 -1
  119. package/dist/stories/homeAssistant/panel/ApplianceSteps.stories.js +1 -0
  120. package/dist/stories/homeAssistant/panel/HomeAssistantPanel.stories.js +1 -1
  121. package/dist/stories/partner/customPartnerTiles/ShineTile.stories.d.ts +5 -0
  122. package/dist/stories/partner/customPartnerTiles/ShineTile.stories.js +19 -0
  123. package/package.json +1 -1
  124. package/src/assets/images/circle-face.svg +21 -0
  125. package/src/assets/images/company.svg +34 -0
  126. package/src/assets/images/index.ts +7 -0
  127. package/src/assets/images/location.jpg +0 -0
  128. package/src/assets/images/logos/index.ts +12 -1
  129. package/src/assets/images/logos/shine.png +0 -0
  130. package/src/assets/images/shine/gutter-cleaning.png +0 -0
  131. package/src/assets/images/shine/holiday-lights.png +0 -0
  132. package/src/assets/images/shine/home-cleaning.png +0 -0
  133. package/src/assets/images/shine/index.ts +15 -0
  134. package/src/assets/images/shine/pressure.png +0 -0
  135. package/src/assets/images/shine/roof-cleaning.png +0 -0
  136. package/src/assets/images/shine/window.png +0 -0
  137. package/src/assets/locales/en/index.json +23 -1
  138. package/src/components/contacts/ContactCard.tsx +28 -25
  139. package/src/components/contacts/ContactCardHeader.tsx +5 -38
  140. package/src/components/contacts/ContactHeaderMenu.tsx +42 -0
  141. package/src/components/contacts/ContactsContent.tsx +3 -1
  142. package/src/components/contacts/addEditPanel/AddEditContactPanel.tsx +63 -0
  143. package/src/components/contacts/addEditPanel/index.ts +1 -0
  144. package/src/components/contacts/index.ts +3 -0
  145. package/src/components/contacts/viewPanel/CompanyInfoCard.tsx +58 -0
  146. package/src/components/contacts/viewPanel/CompanyRating.tsx +27 -0
  147. package/src/components/contacts/viewPanel/ContactAddressCard.tsx +39 -0
  148. package/src/components/contacts/viewPanel/ContactNotes.tsx +16 -0
  149. package/src/components/contacts/viewPanel/PersonalInfoCard.tsx +41 -0
  150. package/src/components/contacts/viewPanel/RoleTag.tsx +30 -0
  151. package/src/components/contacts/viewPanel/ViewContactHeader.tsx +26 -0
  152. package/src/components/contacts/viewPanel/ViewContactPanel.tsx +70 -0
  153. package/src/components/contacts/viewPanel/index.ts +8 -0
  154. package/src/components/forms/dynamicForm/DynamicForm.tsx +9 -6
  155. package/src/components/forms/dynamicForm/SimpleDynamicForm.tsx +57 -0
  156. package/src/components/forms/dynamicForm/fields/FieldWithDelete.tsx +2 -3
  157. package/src/components/forms/dynamicForm/fields/GroupField.tsx +7 -2
  158. package/src/components/forms/dynamicForm/index.ts +1 -1
  159. package/src/components/homeAssistant/panel/ApplianceSteps.tsx +5 -2
  160. package/src/components/homeAssistant/panel/HomeAssistantPanel.tsx +20 -7
  161. package/src/components/homeBoard/HomeBoard.tsx +3 -0
  162. package/src/components/homeBoard/HomeCardWithRecipent.tsx +15 -1
  163. package/src/components/partner/customPartnerTiles/ShineTile.tsx +148 -0
  164. package/src/components/partner/customPartnerTiles/index.ts +1 -0
  165. package/src/helpers/HomeRoles.helper.ts +7 -1
  166. package/src/helpers/forms/dynamicForm.helper.ts +4 -0
  167. package/src/hooks/forms/index.ts +1 -0
  168. package/src/hooks/forms/useSimpleDynamicForm.ts +58 -0
  169. package/src/index.ts +3 -0
  170. package/src/interfaces/contacts/AddEditContactPanel.interface.ts +14 -0
  171. package/src/interfaces/contacts/ContactCard.interface.ts +20 -1
  172. package/src/interfaces/contacts/ContactCardInfo.interface.ts +3 -2
  173. package/src/interfaces/contacts/ContactsContent.interface.ts +3 -0
  174. package/src/interfaces/contacts/ViewContactPanel.interface.ts +10 -0
  175. package/src/interfaces/contacts/index.ts +2 -0
  176. package/src/interfaces/forms/dynamicForm/DynamicForm.interface.ts +10 -6
  177. package/src/interfaces/forms/dynamicForm/SimpleDynamicForm.interface.ts +5 -0
  178. package/src/interfaces/forms/dynamicForm/fields/FieldWithDelete.interface.ts +1 -1
  179. package/src/interfaces/forms/dynamicForm/fields/GroupField.interface.ts +1 -1
  180. package/src/interfaces/forms/dynamicForm/index.ts +1 -1
  181. package/src/interfaces/homeAssistant/ApplianceSteps.interface.ts +13 -2
  182. package/src/interfaces/homeAssistant/HomeAssistantPanel.interface.ts +4 -1
  183. package/src/interfaces/homeBoard/HomeCardWithRecipent.interface.ts +1 -0
  184. package/src/mocks/contacts/contacts.mock.ts +17 -5
  185. package/src/mocks/forms/dynamicForm.mock.ts +156 -0
  186. package/src/proxies/contacts/contactForm.proxy.ts +9 -0
  187. package/src/proxies/contacts/index.ts +1 -0
  188. package/src/proxies/index.ts +1 -0
  189. package/src/stories/assets/Illustrations.stories.tsx +4 -0
  190. package/src/stories/contacts/AddEditContactPanel.stories.tsx +45 -0
  191. package/src/stories/contacts/ViewContactPanel.stories.tsx +35 -0
  192. package/src/stories/homeAssistant/panel/ApplianceSteps.stories.tsx +2 -1
  193. package/src/stories/homeAssistant/panel/HomeAssistantPanel.stories.tsx +2 -0
  194. package/src/stories/partner/customPartnerTiles/ShineTile.stories.tsx +26 -0
  195. package/dist/components/forms/dynamicForm/DynamicFormSimple.d.ts +0 -2
  196. package/dist/components/forms/dynamicForm/DynamicFormSimple.js +0 -32
  197. package/dist/interfaces/forms/dynamicForm/DynamicFormSimple.interface.d.ts +0 -4
  198. package/src/components/forms/dynamicForm/DynamicFormSimple.tsx +0 -66
  199. package/src/interfaces/forms/dynamicForm/DynamicFormSimple.interface.ts +0 -5
  200. /package/dist/interfaces/{forms/dynamicForm/DynamicFormSimple.interface.js → contacts/AddEditContactPanel.interface.js} +0 -0
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Contacts } from '../../../assets/images';
3
+ import { ContactHeaderMenu } from '../..';
4
+ import { partnerCategoriesIcons } from '../../../helpers';
5
+ import { Flex, Image, Text, Stack } from '@chakra-ui/react';
6
+ export const ViewContactHeader = (props) => {
7
+ var _a;
8
+ const { category } = props.contact;
9
+ const icon = (_a = partnerCategoriesIcons[category.toLowerCase()]) !== null && _a !== void 0 ? _a : Contacts;
10
+ return (_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: "2", children: [_jsx(Image, { src: icon, boxSize: "22px" }), _jsx(Stack, { spacing: "-1", children: _jsx(Text, { fontSize: "xs", noOfLines: 1, textTransform: "uppercase", children: category }) })] }), _jsx(ContactHeaderMenu, Object.assign({}, props))] }));
11
+ };
@@ -0,0 +1,2 @@
1
+ import { ViewContactPanelI } from '../../../interfaces';
2
+ export declare const ViewContactPanel: ({ contact, menuItems, handleClose, onShare, roleType, }: ViewContactPanelI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { t } from 'i18next';
3
+ import { DrawerContent, DrawerHeader, DrawerBody, Stack, Container, Divider, } from '@chakra-ui/react';
4
+ import { Contacts } from '../../../assets/images';
5
+ import { CompanyInfoCard, ContactAddressCard, ContactNotes, PanelHeader, RoleTag, PersonalInfoCard, ViewContactHeader, } from '../..';
6
+ export const ViewContactPanel = ({ contact, menuItems, handleClose, onShare, roleType, }) => {
7
+ const isHomeowner = roleType === 'homeowner';
8
+ return (_jsxs(DrawerContent, { bg: "lightBlue.1", children: [_jsx(DrawerHeader, { p: "0", children: _jsx(PanelHeader, { handleCloseButton: handleClose, icon: Contacts, title: t('contacts.contactView') }) }), _jsxs(DrawerBody, { p: "0", overflowX: "hidden", position: "relative", children: [_jsx(RoleTag, { roleType: roleType }), _jsx(Stack, { px: "base", spacing: "base", children: _jsx(Container, { mt: "36px", p: "base", borderRadius: "lg", children: _jsxs(Stack, { spacing: "base", children: [_jsx(ViewContactHeader, { contact: contact, menuItems: menuItems, onShare: onShare }), _jsx(PersonalInfoCard, Object.assign({}, contact, { index: 0 })), isHomeowner && (_jsxs(_Fragment, { children: [_jsx(Divider, { borderStyle: "dashed", borderColor: "lightBlue.6" }), _jsx(ContactAddressCard, { contact: contact })] })), !isHomeowner && (_jsxs(_Fragment, { children: [_jsx(Divider, { borderStyle: "dashed", borderColor: "lightBlue.6" }), _jsx(CompanyInfoCard, { contact: contact }), _jsx(Divider, { borderStyle: "dashed", borderColor: "lightBlue.6" }), _jsx(ContactNotes, { notes: contact.notes })] }))] }) }) })] })] }));
9
+ };
@@ -0,0 +1,8 @@
1
+ export * from './CompanyInfoCard';
2
+ export * from './CompanyRating';
3
+ export * from './ContactAddressCard';
4
+ export * from './ContactNotes';
5
+ export * from './PersonalInfoCard';
6
+ export * from './RoleTag';
7
+ export * from './ViewContactHeader';
8
+ export * from './ViewContactPanel';
@@ -0,0 +1,8 @@
1
+ export * from './CompanyInfoCard';
2
+ export * from './CompanyRating';
3
+ export * from './ContactAddressCard';
4
+ export * from './ContactNotes';
5
+ export * from './PersonalInfoCard';
6
+ export * from './RoleTag';
7
+ export * from './ViewContactHeader';
8
+ export * from './ViewContactPanel';
@@ -1,2 +1,2 @@
1
1
  import { DynamicFormI } from '../../../interfaces';
2
- export declare const DynamicForm: ({ form: fields, onUpload, uploadingFieldId, }: DynamicFormI) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const DynamicForm: ({ form: fields, onUpload, showTitle, uploadingFieldId, }: DynamicFormI) => import("react/jsx-runtime").JSX.Element;
@@ -5,10 +5,10 @@ import { Stack, Text } from '@chakra-ui/react';
5
5
  import { HiddenFieldSection, GroupField, TextField, TextAreaField, SelectField, RatingField, GridField, FieldWithDelete, FileField, SwitchField, DateField, NumberField, CurrencyField, } from '../..';
6
6
  import { useDynamicForm } from '../../../hooks';
7
7
  import { fieldIcons } from '../../../helpers';
8
- export const DynamicForm = ({ form: fields, onUpload, uploadingFieldId, }) => {
8
+ export const DynamicForm = ({ form: fields, onUpload, showTitle = true, uploadingFieldId, }) => {
9
9
  const { form, visibleFields, hiddenFields, handleAddAll, handleAdd, handleFilesUpload, handleRemove, } = useDynamicForm({ fields, onUpload });
10
- return (_jsxs(Stack, { bg: "lightBlue.1", spacing: "0", h: "full", children: [_jsx(Text, { fontFamily: "secondary", px: "base", pt: "4", pb: "2", children: t('forms.itemDetails') }), _jsx(FormProvider, Object.assign({}, form, { children: _jsx(_Fragment, { children: visibleFields === null || visibleFields === void 0 ? void 0 : visibleFields.map((field) => {
11
- const { children, description, icon, id, name, options, type, value, visible, } = field;
10
+ return (_jsxs(Stack, { bg: "lightBlue.1", spacing: "0", h: "full", children: [showTitle && (_jsx(Text, { fontFamily: "secondary", px: "base", pt: "4", pb: "2", children: t('forms.itemDetails') })), _jsx(FormProvider, Object.assign({}, form, { children: _jsx(_Fragment, { children: visibleFields === null || visibleFields === void 0 ? void 0 : visibleFields.map((field) => {
11
+ const { canBeHidden, children, description, icon, id, name, options, type, value, } = field;
12
12
  const baseProps = {
13
13
  id,
14
14
  value,
@@ -19,7 +19,7 @@ export const DynamicForm = ({ form: fields, onUpload, uploadingFieldId, }) => {
19
19
  key: id,
20
20
  id,
21
21
  onRemove: handleRemove,
22
- isAlwaysVisible: visible,
22
+ canBeHidden,
23
23
  };
24
24
  switch (type) {
25
25
  case 'date':
@@ -48,7 +48,7 @@ export const DynamicForm = ({ form: fields, onUpload, uploadingFieldId, }) => {
48
48
  case 'file':
49
49
  return (_jsx(FieldWithDelete, Object.assign({}, fieldWithDeleteBaseProps, { children: _jsx(FileField, { icon: baseProps.icon, description: description, onUpload: (files) => handleFilesUpload({ id, files }), uploading: uploadingFieldId === id }) })));
50
50
  case 'group':
51
- return (_jsx(GroupField, { id: id, fields: children, onRemove: handleRemove, visible: visible }, id));
51
+ return (_jsx(GroupField, { id: id, fields: children, onRemove: handleRemove, canBeHidden: canBeHidden }, id));
52
52
  default:
53
53
  return null;
54
54
  }
@@ -0,0 +1,2 @@
1
+ import { SimpleDynamicFormI } from '../../../interfaces';
2
+ export declare const SimpleDynamicForm: ({ fields }: SimpleDynamicFormI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Stack } from '@chakra-ui/react';
3
+ import { TextField, SelectField, SwitchField, NumberField, FieldDivider, } from '../..';
4
+ import { fieldIcons } from '../../../helpers';
5
+ export const SimpleDynamicForm = ({ fields }) => {
6
+ return (_jsx(Stack, { bg: "neutral.white", spacing: "0", h: "full", boxShadow: "md", children: fields === null || fields === void 0 ? void 0 : fields.map((field) => {
7
+ const { description, icon, id, name, options, type, value } = field;
8
+ const baseProps = {
9
+ description,
10
+ id,
11
+ value,
12
+ icon: icon ? fieldIcons[icon] : undefined,
13
+ placeholder: name !== null && name !== void 0 ? name : description,
14
+ };
15
+ switch (type) {
16
+ case 'number':
17
+ return (_jsx(FieldDivider, { children: _jsx(NumberField, Object.assign({}, baseProps)) }, id));
18
+ case 'text':
19
+ case 'string':
20
+ return (_jsx(FieldDivider, { children: _jsx(TextField, Object.assign({}, baseProps)) }, id));
21
+ case 'select':
22
+ return (_jsx(FieldDivider, { children: _jsx(SelectField, Object.assign({}, baseProps, { options: options })) }, id));
23
+ case 'switch':
24
+ return (_jsx(FieldDivider, { children: _jsx(SwitchField, Object.assign({}, baseProps)) }, id));
25
+ default:
26
+ return null;
27
+ }
28
+ }) }));
29
+ };
@@ -1,3 +1,3 @@
1
1
  import { PropsWithChildren } from 'react';
2
2
  import { FieldWithDeleteI } from '../../../../interfaces';
3
- export declare const FieldWithDelete: ({ children, id, isAlwaysVisible, onRemove, }: PropsWithChildren<FieldWithDeleteI>) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const FieldWithDelete: ({ children, id, canBeHidden, onRemove, }: PropsWithChildren<FieldWithDeleteI>) => import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Flex, IconButton } from '@chakra-ui/react';
3
3
  import { TrashIcon } from '../../..';
4
- export const FieldWithDelete = ({ children, id, isAlwaysVisible, onRemove = () => { }, }) => {
5
- const isUndefined = isAlwaysVisible === undefined;
6
- return (_jsxs(Flex, { align: "center", borderBottom: "1px dashed", borderColor: "lightBlue.6", p: "base", children: [children, !isUndefined && (_jsx(IconButton, { "aria-label": "Remove field", variant: "unstyled", icon: _jsx(TrashIcon, {}), size: "md", position: "relative", right: "-16px", transition: "all 0.2s ease-in-out", _hover: {
4
+ export const FieldWithDelete = ({ children, id, canBeHidden = true, onRemove = () => { }, }) => {
5
+ return (_jsxs(Flex, { align: "center", borderBottom: "1px dashed", borderColor: "lightBlue.6", p: "base", children: [children, canBeHidden && (_jsx(IconButton, { "aria-label": "Remove field", variant: "unstyled", icon: _jsx(TrashIcon, {}), size: "md", position: "relative", right: "-16px", transition: "all 0.2s ease-in-out", _hover: {
7
6
  filter: 'brightness(0.7)',
8
7
  }, onClick: () => onRemove(id) }))] }));
9
8
  };
@@ -1,2 +1,2 @@
1
1
  import { GroupFieldI } from '../../../../interfaces';
2
- export declare const GroupField: ({ id, fields, onRemove, visible }: GroupFieldI) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const GroupField: ({ id, fields, onRemove, canBeHidden, }: GroupFieldI) => import("react/jsx-runtime").JSX.Element;
@@ -2,6 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Stack } from '@chakra-ui/react';
3
3
  import { FieldWithDelete } from '../../..';
4
4
  import { SingleFields } from './SingleFields';
5
- export const GroupField = ({ id, fields, onRemove, visible }) => {
6
- return (_jsx(FieldWithDelete, { id: id, onRemove: onRemove, isAlwaysVisible: visible, children: _jsx(Stack, { spacing: "base", flex: "1", children: _jsx(SingleFields, { fields: fields }) }) }));
5
+ export const GroupField = ({ id, fields, onRemove, canBeHidden, }) => {
6
+ return (_jsx(FieldWithDelete, { id: id, onRemove: onRemove, canBeHidden: canBeHidden, children: _jsx(Stack, { spacing: "base", flex: "1", children: _jsx(SingleFields, { fields: fields }) }) }));
7
7
  };
@@ -1,5 +1,5 @@
1
1
  export * from './fields';
2
2
  export * from './DynamicForm';
3
- export * from './DynamicFormSimple';
3
+ export * from './SimpleDynamicForm';
4
4
  export * from './HiddenField';
5
5
  export * from './HiddenFieldSection';
@@ -1,5 +1,5 @@
1
1
  export * from './fields';
2
2
  export * from './DynamicForm';
3
- export * from './DynamicFormSimple';
3
+ export * from './SimpleDynamicForm';
4
4
  export * from './HiddenField';
5
5
  export * from './HiddenFieldSection';
@@ -1,3 +1,3 @@
1
1
  import { ApplianceStepI, ApplianceStepsI } from '../../../interfaces';
2
- export declare const ApplianceSteps: ({ onClick }: ApplianceStepsI) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const ApplianceSteps: ({ addedAppliances, onClick, }: ApplianceStepsI) => import("react/jsx-runtime").JSX.Element;
3
3
  export declare const steps: ApplianceStepI[];
@@ -4,8 +4,8 @@ import { Center, SimpleGrid, Stack, Text } from '@chakra-ui/react';
4
4
  import { ApplianceButton } from '../..';
5
5
  import { Fridge, Freezer, Washer, Dryer, Dishwasher, CookTop, Oven, Hood, Microwave, Range, } from '../../../assets/images';
6
6
  import { useState } from 'react';
7
- export const ApplianceSteps = ({ onClick }) => {
8
- const [appliances, setAppliances] = useState([]);
7
+ export const ApplianceSteps = ({ addedAppliances = [], onClick, }) => {
8
+ const [appliances, setAppliances] = useState(addedAppliances);
9
9
  const handleClick = (id) => {
10
10
  if (appliances.includes(id)) {
11
11
  const newAppliances = appliances.filter((appliance) => appliance !== id);
@@ -1,3 +1,3 @@
1
1
  import { PropsWithChildren } from 'react';
2
2
  import { HomeAssistantPanelI } from '../../../interfaces';
3
- export declare const HomeAssistantPanel: ({ children, currentForm, currentStep, onApplianceClick, onBack, onClose, onNext, }: PropsWithChildren<HomeAssistantPanelI>) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const HomeAssistantPanel: ({ children, currentForm, currentStep, onApplianceClick, onBack, onClose, onNext, onSave, backDisabled, nextDisabled, }: PropsWithChildren<HomeAssistantPanelI>) => import("react/jsx-runtime").JSX.Element;
@@ -1,24 +1,31 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FormProvider } from 'react-hook-form';
2
3
  import { t } from 'i18next';
3
4
  import { DrawerContent, DrawerHeader, DrawerBody, Stack, Text, DrawerFooter, } from '@chakra-ui/react';
4
5
  import { IA } from '../../../assets/images';
5
- import { ApplianceSteps, DynamicFormSimple, FooterButtons, HomeAssistantPanelStep, PanelHeader, } from '../..';
6
+ import { ApplianceSteps, SimpleDynamicForm, FooterButtons, HomeAssistantPanelStep, PanelHeader, } from '../..';
6
7
  import { homeAssistantSteps } from '../../../helpers';
7
- export const HomeAssistantPanel = ({ children, currentForm, currentStep, onApplianceClick, onBack, onClose, onNext, }) => {
8
+ import { useSimpleDynamicForm } from '../../../hooks';
9
+ export const HomeAssistantPanel = ({ children, currentForm, currentStep, onApplianceClick, onBack, onClose, onNext, onSave, backDisabled, nextDisabled, }) => {
8
10
  const { title } = homeAssistantSteps[currentStep - 1];
9
11
  const text = `${t('homeAssistant.details')} ${title.toLowerCase()}:`;
10
12
  const isAppliances = currentStep === 3;
11
- return (_jsxs(DrawerContent, { bg: "lightBlue.1", children: [_jsx(DrawerHeader, { p: "0", children: _jsx(PanelHeader, { handleCloseButton: onClose, title: t('homeAssistant.title'), icon: IA }) }), _jsxs(DrawerBody, { p: "0", children: [_jsx(HomeAssistantPanelStep, { currentStep: currentStep }), children, isAppliances && _jsx(ApplianceSteps, { onClick: onApplianceClick }), _jsxs(Stack, { spacing: "base", p: "base", children: [_jsx(Text, { fontFamily: "secondary", fontSize: "sm", children: text }), _jsx(DynamicFormSimple, { form: currentForm })] })] }), _jsx(DrawerFooter, { px: "0", py: "6", bg: "neutral.white", children: _jsx(FooterButtons, { button1: {
13
+ const { form, updatedFields } = useSimpleDynamicForm({
14
+ fields: currentForm,
15
+ });
16
+ return (_jsxs(DrawerContent, { bg: "lightBlue.1", children: [_jsx(DrawerHeader, { p: "0", children: _jsx(PanelHeader, { handleCloseButton: onClose, title: t('homeAssistant.title'), icon: IA }) }), _jsxs(DrawerBody, { p: "0", children: [_jsx(HomeAssistantPanelStep, { currentStep: currentStep }), children, isAppliances && _jsx(ApplianceSteps, { onClick: onApplianceClick }), _jsxs(Stack, { spacing: "base", p: "base", children: [_jsx(Text, { fontFamily: "secondary", fontSize: "sm", children: text }), _jsx(FormProvider, Object.assign({}, form, { children: _jsx(SimpleDynamicForm, { fields: currentForm }) }))] })] }), _jsx(DrawerFooter, { px: "0", py: "6", bg: "neutral.white", children: _jsx(FooterButtons, { button1: {
12
17
  buttonStyle: 'secondaryFooter',
13
18
  label: t('buttons.back'),
14
19
  onClick: onBack,
20
+ isDisabled: backDisabled,
15
21
  }, button2: {
22
+ buttonStyle: 'primaryFooter',
23
+ label: t('buttons.saveStep'),
24
+ onClick: () => onSave(updatedFields),
25
+ }, button3: {
16
26
  buttonStyle: 'primaryFooter',
17
27
  label: t('buttons.next'),
18
28
  onClick: onNext,
19
- }, button3: {
20
- buttonStyle: 'secondaryFooter',
21
- label: t('buttons.cancel'),
22
- onClick: onClose,
29
+ isDisabled: nextDisabled,
23
30
  } }) })] }));
24
31
  };
@@ -48,7 +48,7 @@ export const HomeBoard = () => {
48
48
  ], onShare: () => null })),
49
49
  PartnerCatalog: (_jsx(PartnerCatalogPanel, { onClose: onRightClose, onPartnerAdd: () => null, partners: partnerCatalogMock })),
50
50
  AddHouseholdItem: (_jsxs(DrawerContent, { bg: "lightBlue.1", children: [_jsx(DrawerHeader, { p: "0", children: _jsx(PanelHeader, { handleCloseButton: handleClose, icon: Painting, title: "Add Household Item" }) }), _jsx(DrawerBody, { children: _jsx(DynamicForm, { form: formFieldsMock }) })] })),
51
- HomeAssistant: (_jsx(HomeAssistantPanel, { currentStep: homeAssistantCurrentStep, currentForm: currentHomeAssistantForm, onNext: handleHomeAssistantFormChange, onBack: handleHomeAssistantBack, onApplianceClick: () => null, onClose: onRightClose })),
51
+ HomeAssistant: (_jsx(HomeAssistantPanel, { currentStep: homeAssistantCurrentStep, currentForm: currentHomeAssistantForm, onNext: handleHomeAssistantFormChange, onBack: handleHomeAssistantBack, onApplianceClick: () => null, onClose: onRightClose, onSave: () => { }, backDisabled: false, nextDisabled: false })),
52
52
  };
53
53
  const panelSize = currentComponent === 'PartnerCatalog' ? 'lg' : 'md';
54
54
  return (_jsxs(Box, { overflowX: "hidden", children: [_jsx(RightPanel, { overlay: showOverlay, isOpen: isRightOpen, onClose: onRightClose, size: panelSize, children: rightPanelComponents[currentComponent] }), _jsxs(Flex, { w: "full", minH: "100dvh", children: [_jsx(RoomsMenu, { activeRoom: "homeboard", handleAddRoom: (id) => __awaiter(void 0, void 0, void 0, function* () { return console.log(id); }), handleClick: () => null, handleHomeClick: () => null, rooms: RoomsList, roomsToAdd: RoomsToAdd }), _jsxs(Box, { w: "full", children: [_jsx(AppBarComponent, { setActiveTour: setActiveTour }), _jsxs(Stack, { spacing: "base", p: "base", children: [_jsx(HomeHeader, { buttonLabel: "Partner catalog", onBack: () => null, homeName: homeName, onAdd: () => null }), _jsxs(HomeBoardGrid, { children: [_jsx(HomeCardWithRecipent, { address: HomeCards[0].address, handleEdit: handleEditHomeClick, handleDeleteAccountType: (email) => email, handleSubmitAccountType: (form) => form, _id: HomeCards[0]._id, image: HomeCards[0].image, loading: false, name: HomeCards[0].name, menu: menuMock, addImage: () => null, recipients: recipientsDb, records: homeBoardRecorsMock }), _jsx(HomeAssistant, { currentPanel: homeAssistantCurrentStep, currentStep: 6, onStepClick: handleHomeAssistantClick }), _jsx(PropertyTaxes, { estimatedTaxValue: 1000, menuItems: menuMock, taxes: taxesMock, title: "Travis County Property Taxes" }), _jsxs(Stack, { spacing: "base", children: [_jsx(ReceiptAutofiler, { onClick: () => null, totalReceipts: 36, totalTitle: "Receipts Received", forwardTo: "reciepts@homefile.cloud", onFilter: () => null, children: _jsx(ReceiptsFiled, { incidentalItemsNumber: 0, incidentalSpent: 0, inventoryItemsNumber: 0, inventorySpent: 0, total: 0 }) }), _jsx(ValueMonitor, { menuItems: menuMock, balance: "+3%", totalValue: 323421, year: "2023", yearValue: 5684 })] }), _jsx(ShortPartnerTile, { _id: "1", buttonText: "Contact Audrey Scheck", description: "Full-service design firm focusing on residential remodels, furnishing, and styling.", onClick: () => null, socialLinks: socialLinksMock2, logo: "https://static.wixstatic.com/media/258105_8e04439070694f278e4787a310ea9f4b~mv2.png", partnerName: "Audrey Scheck", websiteUrl: "" }), _jsx(TrendingValue, { chartData: lineChartData, marketValue: 894000, menuItems: menuMock, mortgageBalance: 220532, purchasePrice: 220532, roi: "+234%" }), _jsx(ShortPartnerTile, { _id: "2", buttonText: "Contact Audrey Scheck", description: "Full-service design firm focusing on residential remodels, furnishing, and styling.", onClick: () => null, socialLinks: socialLinksMock2, logo: "https://static.wixstatic.com/media/258105_8e04439070694f278e4787a310ea9f4b~mv2.png", partnerName: "Audrey Scheck", websiteUrl: "" }), _jsx(FolderSharing, { folders: FoldersDB, handleAddNewFolder: handleNewFolder, handleFolderClick: handleFolderClick, handleSelect: () => null, initialSelectItem: selectOptions[0], menuItems: menuMock, selectItems: selectOptions }), _jsxs(Stack, { spacing: "base", children: [_jsx(AddHomeItem, { handleClick: () => null }), _jsx(SendCommunication, { documentList: [] })] }), _jsx(ShortPartnerTile, { _id: "3", buttonText: "Contact Audrey Scheck", description: "Full-service design firm focusing on residential remodels, furnishing, and styling.", onClick: () => null, socialLinks: socialLinksMock2, logo: "https://static.wixstatic.com/media/258105_8e04439070694f278e4787a310ea9f4b~mv2.png", partnerName: "Audrey Scheck", websiteUrl: "" })] })] })] })] }), _jsx(HomeBoardTour, { currentStep: currentStep, handleClose: handleClose, handleStep: handleStep, meetStepUrl: videoMock, isActive: activeTour })] }));
@@ -1,2 +1,2 @@
1
1
  import { HomeCardWithRecipentI } from '../../interfaces';
2
- export declare const HomeCardWithRecipent: ({ address: { city, state, street, number, zip }, addImage, externalLink, handleEdit, handleDeleteAccountType, handleSubmitAccountType, image, _id, loading, menu, name, onAddRecords, onViewDetails, panelSize, recipients, records, disabled, }: HomeCardWithRecipentI) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const HomeCardWithRecipent: ({ address: { city, state, street, number, zip }, addImage, externalLink, handleEdit, handleDeleteAccountType, handleSubmitAccountType, image, _id, loading, menu, name, onAddRecords, onViewDetails, panelSize, recipients, records, disabled, propertyDisabled }: HomeCardWithRecipentI) => import("react/jsx-runtime").JSX.Element;
@@ -3,7 +3,7 @@ import { t } from 'i18next';
3
3
  import { Container } from '@chakra-ui/react';
4
4
  import { HomeCard, EditAccountType, RightPanel, HomeCardRecipients, TabsHeader, HomeCardRecords, } from '..';
5
5
  import { useHomeCardWithRecipent } from '../../hooks';
6
- export const HomeCardWithRecipent = ({ address: { city, state, street, number = '', zip }, addImage, externalLink, handleEdit, handleDeleteAccountType, handleSubmitAccountType, image, _id, loading = false, menu, name, onAddRecords, onViewDetails, panelSize = 'md', recipients, records = {}, disabled, }) => {
6
+ export const HomeCardWithRecipent = ({ address: { city, state, street, number = '', zip }, addImage, externalLink, handleEdit, handleDeleteAccountType, handleSubmitAccountType, image, _id, loading = false, menu, name, onAddRecords, onViewDetails, panelSize = 'md', recipients, records = {}, disabled, propertyDisabled }) => {
7
7
  const { isRightOpen, onRightClose, editingAccountType, handleEditAccountType, } = useHomeCardWithRecipent();
8
8
  const tabs = [
9
9
  {
@@ -15,5 +15,11 @@ export const HomeCardWithRecipent = ({ address: { city, state, street, number =
15
15
  component: (_jsx(HomeCardRecipients, { recipients: recipients, menu: menu, onEditClick: handleEditAccountType })),
16
16
  },
17
17
  ];
18
- return (_jsxs(Container, { variant: "launchpad", children: [_jsx(HomeCard, { city: city, externalLink: externalLink, imageUrl: image, name: name, number: number, street: street, state: state, zip: zip, handleEditClick: () => handleEdit(_id), addImage: addImage, loading: loading, edit: !disabled }), _jsx(TabsHeader, { tabList: tabs }), _jsx(RightPanel, { isOpen: isRightOpen, onClose: onRightClose, size: panelSize, children: _jsx(EditAccountType, { associateAccount: editingAccountType, handleClose: onRightClose, handleDelete: handleDeleteAccountType, handleSubmit: handleSubmitAccountType, isLoading: loading }) })] }));
18
+ const noPropertyTabs = [
19
+ {
20
+ label: t('homeBoard.tabs.tab2'),
21
+ component: (_jsx(HomeCardRecipients, { recipients: recipients, menu: menu, onEditClick: handleEditAccountType })),
22
+ }
23
+ ];
24
+ return (_jsxs(Container, { variant: "launchpad", children: [_jsx(HomeCard, { city: city, externalLink: externalLink, imageUrl: image, name: name, number: number, street: street, state: state, zip: zip, handleEditClick: () => handleEdit(_id), addImage: addImage, loading: loading, edit: !disabled }), _jsx(TabsHeader, { tabList: propertyDisabled ? noPropertyTabs : tabs }), _jsx(RightPanel, { isOpen: isRightOpen, onClose: onRightClose, size: panelSize, children: _jsx(EditAccountType, { associateAccount: editingAccountType, handleClose: onRightClose, handleDelete: handleDeleteAccountType, handleSubmit: handleSubmitAccountType, isLoading: loading }) })] }));
19
25
  };
@@ -0,0 +1,2 @@
1
+ import { ShortPartnerTileI } from '../../../interfaces';
2
+ export declare const ShineTile: ({ menuItems, }: Pick<ShortPartnerTileI, "menuItems">) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { t } from 'i18next';
3
+ import { Box, Button, Image, SimpleGrid, Stack, Text, } from '@chakra-ui/react';
4
+ import { PartnerFooter, PartnerHeader, PartnerTileWrapper } from '../..';
5
+ import { GutterCleaning, HolidayLights, HomeCleaning, Pressure, RoofCleaning, Shine, WindowCleaning, } from '../../../assets/images';
6
+ export const ShineTile = ({ menuItems, }) => {
7
+ const cardsArray = ['pressure', 'window', 'roof', 'lights', 'gutter', 'home'];
8
+ return (_jsxs(PartnerTileWrapper, { children: [_jsx(PartnerHeader, { logo: Shine, partnerName: "Shine", menuItems: menuItems }), _jsxs(Box, { children: [_jsxs(Stack, { spacing: "6", bg: "neutral.white", px: "base", py: "6", borderTop: "1px solid", borderColor: "lightBlue.6", children: [_jsx(Text, { fontWeight: "bold", textAlign: "center", children: t('partner.shine.heroTitle') }), _jsx(SimpleGrid, { columns: 3, spacing: "base", children: cardsArray.map((card) => (_jsx(ServiceCard, { service: card }, card))) })] }), _jsx(Stack, { spacing: "base", p: "base", children: _jsx(Button, { onClick: () => openNewTab(links.scheduleService), variant: "tertiary", w: "full", h: "44px", children: t('partner.shine.scheduleService') }) }), _jsx(PartnerFooter, { socialLinks: socialLinks, websiteUrl: "https://shine-windowcleaning.com/" })] })] }));
9
+ };
10
+ const ServiceCard = ({ service = '' }) => {
11
+ const card = cards[service];
12
+ return (_jsxs(Box, { bg: "neutral.white", borderRadius: "md", border: "1px solid", borderColor: "lightBlue.6", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", children: [_jsx(Box, { h: "46px", display: "flex", alignItems: "center", children: card.image }), _jsx(Box, { pb: "2", children: _jsx(Text, { fontWeight: "semibold", textAlign: "center", fontSize: "13px", lineHeight: "14px", children: t(card.title) }) })] }));
13
+ };
14
+ const openNewTab = (url) => {
15
+ window.open(url, '_blank');
16
+ };
17
+ const socialLinks = [
18
+ {
19
+ name: 'linkedin',
20
+ link: 'https://www.linkedin.com/company/shine-window-care-and-holiday-lighting/',
21
+ },
22
+ {
23
+ name: 'facebook',
24
+ link: 'https://www.facebook.com/ShineFranchise',
25
+ },
26
+ ];
27
+ const links = {
28
+ scheduleService: 'https://shine-windowcleaning.com/',
29
+ website: 'https://shine-windowcleaning.com/',
30
+ };
31
+ const cards = {
32
+ pressure: {
33
+ title: 'partner.shine.services.pressure',
34
+ image: _jsx(Image, { src: Pressure, alt: "pressure", w: "46px", h: "auto" }),
35
+ },
36
+ window: {
37
+ title: 'partner.shine.services.window',
38
+ image: (_jsx(Image, { src: WindowCleaning, alt: "window-cleaning", w: "46px", h: "46px" })),
39
+ },
40
+ roof: {
41
+ title: 'partner.shine.services.roof',
42
+ image: _jsx(Image, { src: RoofCleaning, alt: "roof-cleaning", w: "42px", h: "42px" }),
43
+ },
44
+ lights: {
45
+ title: 'partner.shine.services.lights',
46
+ image: _jsx(Image, { src: HolidayLights, alt: "holiday-lights", w: "auto", h: "56px" }),
47
+ },
48
+ gutter: {
49
+ title: 'partner.shine.services.gutter',
50
+ image: (_jsx(Image, { src: GutterCleaning, alt: "gutter-cleaning", w: "auto", h: "40px" })),
51
+ },
52
+ home: {
53
+ title: 'partner.shine.services.home',
54
+ image: _jsx(Image, { src: HomeCleaning, alt: "home-cleaning", w: "auto", h: "34px" }),
55
+ },
56
+ };
@@ -1 +1,2 @@
1
1
  export * from './AphwTile';
2
+ export * from './ShineTile';
@@ -1 +1,2 @@
1
1
  export * from './AphwTile';
2
+ export * from './ShineTile';
@@ -1,8 +1,4 @@
1
1
  export type RoleType = 'guest' | 'member' | 'partner' | 'contributor' | 'manager' | 'homeowner';
2
2
  export type ReducedRoleType = 'member' | 'contributor' | 'manager';
3
3
  export declare const homeRoleTypes: RoleType[];
4
- export declare const homeRoles: {
5
- [key: string]: {
6
- [key: string]: string;
7
- };
8
- };
4
+ export declare const homeRoles: Record<string, Record<string, string>>;
@@ -8,25 +8,31 @@ export const homeRoles = {
8
8
  guest: {
9
9
  bg: 'teal.4',
10
10
  width: '3.5rem',
11
+ name: 'Guest',
11
12
  },
12
13
  member: {
13
14
  bg: 'teal.4',
14
15
  width: '3.5rem',
16
+ name: 'Member',
15
17
  },
16
18
  partner: {
17
19
  bg: '#2F7F9B',
18
20
  width: '4.5rem',
21
+ name: 'Partner',
19
22
  },
20
23
  contributor: {
21
24
  bg: '#2F7F9B',
22
25
  width: '6rem',
26
+ name: 'Contributor',
23
27
  },
24
28
  manager: {
25
29
  bg: '#1A72D9',
26
30
  width: '5rem',
31
+ name: 'Manager',
27
32
  },
28
33
  homeowner: {
29
34
  bg: '#535C51',
30
35
  width: '6rem',
36
+ name: 'Homeowner',
31
37
  },
32
38
  };
@@ -1,4 +1,4 @@
1
- import { Paint, Receipt, Barcode, GoldenBars, Heart, Rating, Notes, Book, ImgIcon, Registry, ShareWith, Calendar, Tools2, Billing, Calc, CheckPen, GenericField, Price, Battery2, Co2, Detector, Electricity, Sprinkler, SixtyEight, DropCalendar, MobileDrop, SolarPanel, Calendar2, Drop, Wind, Foundation, Heater, Light, Plate, Pool2, Closet, Structure, GlassWater, Roof2, Target, } from '../../assets/images';
1
+ import { Paint, Receipt, Barcode, GoldenBars, Heart, Rating, Notes, Book, ImgIcon, Registry, ShareWith, Calendar, Tools2, Billing, Calc, CheckPen, GenericField, Price, Battery2, Co2, Detector, Electricity, Sprinkler, SixtyEight, DropCalendar, MobileDrop, SolarPanel, Calendar2, Drop, Wind, Foundation, Heater, Light, Plate, Pool2, Closet, Structure, GlassWater, Roof2, Target, CircleFace, Company, } from '../../assets/images';
2
2
  export const fieldIcons = {
3
3
  barcode: Barcode,
4
4
  billing: Billing,
@@ -41,4 +41,6 @@ export const fieldIcons = {
41
41
  water: GlassWater,
42
42
  house: Structure,
43
43
  target: Target,
44
+ title: CircleFace,
45
+ company: Company,
44
46
  };
@@ -1,2 +1,3 @@
1
1
  export * from './useAddressStored';
2
2
  export * from './useDynamicForm';
3
+ export * from './useSimpleDynamicForm';
@@ -1,2 +1,3 @@
1
1
  export * from './useAddressStored';
2
2
  export * from './useDynamicForm';
3
+ export * from './useSimpleDynamicForm';
@@ -0,0 +1,11 @@
1
+ import { FieldValues } from 'react-hook-form';
2
+ import { FolderFileI, ReportI } from '../../interfaces';
3
+ interface UseDynamicFormI {
4
+ fields: ReportI[];
5
+ onUpload?: (filesByFieldId: Record<string, FolderFileI[]>) => void;
6
+ }
7
+ export declare const useSimpleDynamicForm: ({ fields }: UseDynamicFormI) => {
8
+ form: import("react-hook-form").UseFormReturn<FieldValues, any, undefined>;
9
+ updatedFields: ReportI[];
10
+ };
11
+ export {};
@@ -0,0 +1,36 @@
1
+ import { useEffect } from 'react';
2
+ import { useForm } from 'react-hook-form';
3
+ export const useSimpleDynamicForm = ({ fields }) => {
4
+ const form = useForm();
5
+ const { watch, setValue } = form;
6
+ const fieldValues = watch();
7
+ const parseCurrenyValue = (value) => {
8
+ if (typeof value === 'number')
9
+ return value;
10
+ const justNumbers = value === null || value === void 0 ? void 0 : value.replace(/[^0-9.]/g, '');
11
+ return parseFloat(justNumbers);
12
+ };
13
+ const handleUpdateFields = (field, fieldValues) => {
14
+ var _a;
15
+ const value = fieldValues[field.id];
16
+ const isCurrency = field.type === 'currency';
17
+ const parsedValue = isCurrency ? parseCurrenyValue(value) : value;
18
+ return Object.assign(Object.assign({}, field), { value: parsedValue, children: (_a = field === null || field === void 0 ? void 0 : field.children) === null || _a === void 0 ? void 0 : _a.map((child) => handleUpdateFields(child, fieldValues)) });
19
+ };
20
+ const updatedFields = fields.map((field) => {
21
+ return handleUpdateFields(field, fieldValues);
22
+ });
23
+ const handleSetDefaultValues = (fields) => {
24
+ fields.forEach((field) => {
25
+ setValue(field.id, field.value);
26
+ handleSetDefaultValues(field.children || []);
27
+ });
28
+ };
29
+ useEffect(() => {
30
+ handleSetDefaultValues(fields);
31
+ }, [JSON.stringify(fields)]);
32
+ return {
33
+ form,
34
+ updatedFields,
35
+ };
36
+ };
@@ -7,8 +7,6 @@ export declare const useMyHomeCard: ({ accountType, image }: useMyHomeCardI) =>
7
7
  imageUrl: string;
8
8
  minHeight: string | undefined;
9
9
  minWidth: string | undefined;
10
- type: {
11
- [key: string]: string;
12
- };
10
+ type: Record<string, string>;
13
11
  };
14
12
  export {};
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { ActivateAccount, ActiveSubscription, AddCardBanner, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPropertyRecords, Address, AddPopup, AddTile, AlertBanner, AphwTile, AppBar, AssignableReceipts, BackHeader, BarDivider, CancelAccount, CatalogPopup, CloudsAnimation, ContactList, ContactsContent, ContainerHeader, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeHeader, HomeSharedWith, InboxTile, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadTour, LeftPanel, MediaDetailsStep, MonthlyCharge, MortgageInfo, MoveModal, MyHomes, MyProfileContent, MyProfileFooter, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewPassword, NotBeChargedBanner, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCode, PartnerDetails, PartnerImages, PartnerPanel, PasswordInput, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SectionHeader, SendCommunication, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShortPartnerTile, SignIn, SignUp, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorSetting, UpdateList, UserDetails, ValueMonitor, VideoPlayer, VideoPlayerModal, WellDone, YtdTile, } from './components';
1
+ export { ActivateAccount, ActiveSubscription, AddCardBanner, AddEditContactPanel, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPropertyRecords, Address, AddPopup, AddTile, AlertBanner, AphwTile, AppBar, AssignableReceipts, BackHeader, BarDivider, CancelAccount, CatalogPopup, CloudsAnimation, ContactList, ContactsContent, ContainerHeader, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeHeader, HomeSharedWith, InboxTile, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadTour, LeftPanel, MediaDetailsStep, MonthlyCharge, MortgageInfo, MoveModal, MyHomes, MyProfileContent, MyProfileFooter, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewPassword, NotBeChargedBanner, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCode, PartnerDetails, PartnerImages, PartnerPanel, PasswordInput, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SectionHeader, SendCommunication, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShineTile, ShortPartnerTile, SignIn, SignUp, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorSetting, UpdateList, UserDetails, ValueMonitor, ViewContactPanel, VideoPlayer, VideoPlayerModal, WellDone, YtdTile, } from './components';
2
2
  export { useCustomToast } from './hooks';
3
3
  export { billingProxy, dynamicFormProxy, homeCardProxy, partnerContentProxy, partnerDetailsProxy, paymentMethodProxy, recordsInputsProxy, recordsInputsToDBProxy, userDetailsProxy, confirmAddressProxy, } from './proxies';
4
4
  import theme from './theme';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ActivateAccount, ActiveSubscription, AddCardBanner, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPropertyRecords, Address, AddPopup, AddTile, AlertBanner, AphwTile, AppBar, AssignableReceipts, BackHeader, BarDivider, CancelAccount, CatalogPopup, CloudsAnimation, ContactList, ContactsContent, ContainerHeader, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeHeader, HomeSharedWith, InboxTile, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadTour, LeftPanel, MediaDetailsStep, MonthlyCharge, MortgageInfo, MoveModal, MyHomes, MyProfileContent, MyProfileFooter, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewPassword, NotBeChargedBanner, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCode, PartnerDetails, PartnerImages, PartnerPanel, PasswordInput, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SectionHeader, SendCommunication, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShortPartnerTile, SignIn, SignUp, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorSetting, UpdateList, UserDetails, ValueMonitor, VideoPlayer, VideoPlayerModal, WellDone, YtdTile, } from './components';
1
+ export { ActivateAccount, ActiveSubscription, AddCardBanner, AddEditContactPanel, AddFolder, AddHomeContent, AddHomeItem, AddHomeItemHeader, AddMedia, AddPropertyRecords, Address, AddPopup, AddTile, AlertBanner, AphwTile, AppBar, AssignableReceipts, BackHeader, BarDivider, CancelAccount, CatalogPopup, CloudsAnimation, ContactList, ContactsContent, ContainerHeader, CreateDocumentHeader, CreateHouseholdItemHeader, CreditCardContainer, CreditCardError, CustomerTile, DeleteBanner, DisplayFiles, DisplayFilesDetail, DisplayOptions, DisplayReceipts, DocumentMenu, DocumentNameHeader, DocumentPreview, DynamicForm, EditAccountType, EditHomeBody, EditHomeFooter, EditHomeHeader, EditHomePanel, EmailPermissions, EmailValidation, Feedback, FileDetail, FilesUploader, FlowStep, FolderDetail, FolderDetailBody, FolderDetailContent, FolderDetailFooter, FolderDetailHeader, FolderInfo, FolderSharing, FolderTypeSelection, FooterButtons, FooterDrawer, GenericBackHeader, GroupCard, GroupsContainer, GroupsHeader, Header, HelpContent, HomeAssistant, HomeAssistantPanel, HomeBoardGrid, HomeBoardTour, HomeCard, HomeCardWithRecipent, HomeHeader, HomeSharedWith, InboxTile, ItemNameHeader, ItemsReviewBanner, ItemSubTypeSelect, Launchpad, LaunchpadAutofilerBanner, LaunchpadReceiptAutofiler, LaunchpadTour, LeftPanel, MediaDetailsStep, MonthlyCharge, MortgageInfo, MoveModal, MyHomes, MyProfileContent, MyProfileFooter, MyProfilePanel, NewCreditCard, NewCreditCardHeader, NewPassword, NotBeChargedBanner, Overlay, PanelHeader, PartnerActiveSubscription, PartnerCatalogPanel, PartnerContent, PartnerCustomerCode, PartnerDetails, PartnerImages, PartnerPanel, PasswordInput, PaymentReceipts, PdfButton, PeopleConnected, ProfileDetailsTab, ProfilePaymentTab, ProjectList, PropertyRecords, PropertyTaxes, ReadOnlyDynamicForm, ReadOnlyImage, ReadOnlyToggle, ReceiptAutofiler, ReceiptBody, ReceiptContent, ReceiptDetails, ReceiptFilters, ReceiptFooter, ReceiptHeader, ReceiptInfos, ReceiptItem, ReceiptItems, ReceiptPDF, ReceiptsDisplayOptions, ReceiptsFiled, ReceiptsHeader, ReceiptsInfo, ReceiptsReceivedContent, RecipientForm, RecipientsToShare, RecipientTab, RecordsInputs, ResendResetPassword, ResetPassword, ReviewBanner, RightPanel, RolePermissionsTab, RoomHeader, RoomsBoardTour, RoomsMenu, RoomsMenuMobile, RoomStep, RoomVideo, SalesTax, SatisfactionTile, SectionHeader, SendCommunication, SharedAccounts, SharedHomeContent, SharedHomeHeader, ShareHome, ShareHomeConnections, ShareHomeForm, ShineTile, ShortPartnerTile, SignIn, SignUp, StepHeader, StorageUsed, Subscription, SubscriptionCard, SubscriptionTable, Summary, TabsHeader, TextInput, ToBeDeletedBody, ToBeDeletedContent, ToBeDeletedFooter, ToBeDeletedHeader, TourButton, Trash, TrendingValue, TrialBanner, TutorialsButton, TwoFactor, TwoFactorSetting, UpdateList, UserDetails, ValueMonitor, ViewContactPanel, VideoPlayer, VideoPlayerModal, WellDone, YtdTile, } from './components';
2
2
  export { useCustomToast } from './hooks';
3
3
  export { billingProxy, dynamicFormProxy, homeCardProxy, partnerContentProxy, partnerDetailsProxy, paymentMethodProxy, recordsInputsProxy, recordsInputsToDBProxy, userDetailsProxy, confirmAddressProxy, } from './proxies';
4
4
  import theme from './theme';
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ import { ReportI } from '..';
3
+ export interface AddEditContactPanelI {
4
+ detailsComponent: ReactNode;
5
+ isEditing?: boolean;
6
+ onBackClick: () => void;
7
+ permissionsComponent: ReactNode;
8
+ }
9
+ export interface ContactFormProxyI {
10
+ fields: ReportI[];
11
+ setFields(fields: ReportI[]): void;
12
+ }
@@ -1,9 +1,21 @@
1
- import { MenuItemI, ShareContactPopoverI } from '..';
1
+ import { MenuItemI, ShareContactPopoverI, ContactAndIndexForm } from '..';
2
+ export interface ContactCompanyInfoI {
3
+ address: string;
4
+ city: string;
5
+ company: string;
6
+ url: string;
7
+ _id: string;
8
+ phone: string;
9
+ state: string;
10
+ zip: string;
11
+ rating?: number;
12
+ }
2
13
  export interface InfoContactCardI {
3
14
  address: string;
4
15
  category: string;
5
16
  city: string;
6
17
  company: string;
18
+ companyInfo?: ContactCompanyInfoI;
7
19
  email: string;
8
20
  firstName: string;
9
21
  _id: string;
@@ -12,11 +24,13 @@ export interface InfoContactCardI {
12
24
  state: string;
13
25
  title: string;
14
26
  zip: string;
27
+ notes?: string;
15
28
  }
16
29
  export interface ContactCardI {
17
30
  apiError?: boolean;
18
31
  contact: InfoContactCardI;
19
32
  index: number;
20
33
  menuItems: MenuItemI[];
34
+ onClick?: (contact: ContactAndIndexForm) => void;
21
35
  onShare: ShareContactPopoverI['onShare'];
22
36
  }
@@ -1,8 +1,9 @@
1
1
  export interface ContactCardInfoI {
2
- company: string;
2
+ company?: string;
3
3
  email: string;
4
4
  firstName: string;
5
5
  index: number;
6
6
  lastName: string;
7
7
  phone: string;
8
+ title?: string;
8
9
  }
@@ -1,5 +1,8 @@
1
1
  import { InfoContactCardI, MenuItemI, ShareContactPopoverI } from '..';
2
2
  import { ReactNode } from 'react';
3
+ export type ContactAndIndexForm = InfoContactCardI & {
4
+ index: number;
5
+ };
3
6
  export interface ContactsContentI {
4
7
  apiError?: boolean;
5
8
  contacts: InfoContactCardI[];
@@ -8,5 +11,6 @@ export interface ContactsContentI {
8
11
  menuItems: MenuItemI[];
9
12
  children?: ReactNode;
10
13
  disabled?: boolean;
14
+ onClick?: (contact: ContactAndIndexForm) => void;
11
15
  onShare: ShareContactPopoverI['onShare'];
12
16
  }