@paro.io/expert-shared-components 1.14.43 → 1.14.46

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 (242) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/lib/README.md +2 -0
  4. package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
  5. package/lib/components/ClientReferencesSection/ParoError.js +10 -10
  6. package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
  7. package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
  8. package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
  9. package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
  10. package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
  11. package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
  12. package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
  13. package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
  14. package/lib/components/DiscussionThread/DiscussionThread.d.ts +25 -25
  15. package/lib/components/DiscussionThread/DiscussionThread.js +137 -137
  16. package/lib/components/DiscussionThread/chat.d.ts +22 -22
  17. package/lib/components/DiscussionThread/chat.js +106 -106
  18. package/lib/components/DiscussionThread/index.d.ts +1 -1
  19. package/lib/components/DiscussionThread/index.js +5 -5
  20. package/lib/components/DocumentCenter/DocumentTable.d.ts +15 -15
  21. package/lib/components/DocumentCenter/DocumentTable.js +350 -350
  22. package/lib/components/DocumentCenter/DragDropUpload.js +4 -4
  23. package/lib/components/DocumentCenter/UploadFilesButton.d.ts +6 -6
  24. package/lib/components/DocumentCenter/UploadFilesButton.js +29 -29
  25. package/lib/components/EarningsTracker/ActiveProjectCard.d.ts +52 -52
  26. package/lib/components/EarningsTracker/ActiveProjectCard.js +161 -161
  27. package/lib/components/EarningsTracker/CenterCardUI.d.ts +13 -13
  28. package/lib/components/EarningsTracker/CenterCardUI.js +134 -134
  29. package/lib/components/EarningsTracker/EarningsTracker.d.ts +52 -52
  30. package/lib/components/EarningsTracker/EarningsTracker.js +508 -508
  31. package/lib/components/EarningsTracker/EditDateModal.d.ts +22 -22
  32. package/lib/components/EarningsTracker/EditDateModal.js +149 -149
  33. package/lib/components/EarningsTracker/EmailModal.d.ts +14 -14
  34. package/lib/components/EarningsTracker/EmailModal.js +79 -79
  35. package/lib/components/EarningsTracker/EndProjectModal.d.ts +56 -56
  36. package/lib/components/EarningsTracker/EndProjectModal.js +221 -221
  37. package/lib/components/EarningsTracker/LeftCardUI.d.ts +18 -18
  38. package/lib/components/EarningsTracker/LeftCardUI.js +189 -189
  39. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.d.ts +52 -52
  40. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.js +358 -358
  41. package/lib/components/EarningsTracker/ProgressBar.d.ts +4 -4
  42. package/lib/components/EarningsTracker/ProgressBar.js +66 -66
  43. package/lib/components/EarningsTracker/ReviewRequestModal.d.ts +17 -17
  44. package/lib/components/EarningsTracker/ReviewRequestModal.js +135 -135
  45. package/lib/components/EarningsTracker/RightCardUI.d.ts +46 -46
  46. package/lib/components/EarningsTracker/RightCardUI.js +231 -231
  47. package/lib/components/EarningsTracker/index.d.ts +1 -1
  48. package/lib/components/EarningsTracker/index.js +5 -5
  49. package/lib/components/Escalations/CustomTag.d.ts +3 -3
  50. package/lib/components/Escalations/CustomTag.js +25 -25
  51. package/lib/components/Escalations/ViewReponseModal.d.ts +8 -8
  52. package/lib/components/Escalations/ViewReponseModal.js +27 -27
  53. package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
  54. package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
  55. package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
  56. package/lib/components/Invoices/TestDecisionSection.js +126 -126
  57. package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
  58. package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
  59. package/lib/components/OrganizationChart/PersonCard.js +5 -5
  60. package/lib/components/OrganizationChart/utils.js +79 -79
  61. package/lib/components/ProjectCard/ProgressBar.js +4 -4
  62. package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
  63. package/lib/components/ProjectIntelligence/MissingInformation/index.js +1 -1
  64. package/lib/components/Reviews/Pagination.js +6 -6
  65. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  66. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  67. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  68. package/lib/components/shared/Image.js +13 -13
  69. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  70. package/lib/components/shared/ProfileTextField.js +16 -16
  71. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  72. package/lib/components/shared/StyledActionButtons.js +15 -15
  73. package/lib/components/shared/ToastNotification.d.ts +10 -10
  74. package/lib/components/shared/ToastNotification.js +63 -63
  75. package/lib/index.d.ts +13 -0
  76. package/lib/index.js +27 -1
  77. package/lib/package.json +68 -0
  78. package/lib/tax-axis/components/clientReport/ClientReportCover.d.ts +9 -0
  79. package/lib/tax-axis/components/clientReport/ClientReportCover.js +39 -0
  80. package/lib/tax-axis/components/clientReport/ClientReportTOC.d.ts +8 -0
  81. package/lib/tax-axis/components/clientReport/ClientReportTOC.js +24 -0
  82. package/lib/tax-axis/components/clientReport/ClientReportToolbar.d.ts +2 -0
  83. package/lib/tax-axis/components/clientReport/ClientReportToolbar.js +6 -0
  84. package/lib/tax-axis/components/clientReport/ETRChart.d.ts +10 -0
  85. package/lib/tax-axis/components/clientReport/ETRChart.js +50 -0
  86. package/lib/tax-axis/components/clientReport/ExecutiveSummary.d.ts +15 -0
  87. package/lib/tax-axis/components/clientReport/ExecutiveSummary.js +73 -0
  88. package/lib/tax-axis/components/clientReport/FootnoteBlock.d.ts +11 -0
  89. package/lib/tax-axis/components/clientReport/FootnoteBlock.js +34 -0
  90. package/lib/tax-axis/components/clientReport/ImplementationRoadmap.d.ts +26 -0
  91. package/lib/tax-axis/components/clientReport/ImplementationRoadmap.js +51 -0
  92. package/lib/tax-axis/components/clientReport/ImplementationTimelineChart.d.ts +10 -0
  93. package/lib/tax-axis/components/clientReport/ImplementationTimelineChart.js +49 -0
  94. package/lib/tax-axis/components/clientReport/Methodology.d.ts +10 -0
  95. package/lib/tax-axis/components/clientReport/Methodology.js +40 -0
  96. package/lib/tax-axis/components/clientReport/QuarterlyCashChart.d.ts +10 -0
  97. package/lib/tax-axis/components/clientReport/QuarterlyCashChart.js +56 -0
  98. package/lib/tax-axis/components/clientReport/RecommendedStrategies.d.ts +13 -0
  99. package/lib/tax-axis/components/clientReport/RecommendedStrategies.js +51 -0
  100. package/lib/tax-axis/components/clientReport/SavingsStackChart.d.ts +10 -0
  101. package/lib/tax-axis/components/clientReport/SavingsStackChart.js +66 -0
  102. package/lib/tax-axis/components/clientReport/SectionOpener.d.ts +11 -0
  103. package/lib/tax-axis/components/clientReport/SectionOpener.js +20 -0
  104. package/lib/tax-axis/components/clientReport/Sidebar.d.ts +8 -0
  105. package/lib/tax-axis/components/clientReport/Sidebar.js +37 -0
  106. package/lib/tax-axis/components/clientReport/StrategyCard.d.ts +16 -0
  107. package/lib/tax-axis/components/clientReport/StrategyCard.js +63 -0
  108. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.d.ts +9 -0
  109. package/lib/tax-axis/components/clientReport/TaxAxisClientReport.js +125 -0
  110. package/lib/tax-axis/components/clientReport/applyFootnotes.d.ts +12 -0
  111. package/lib/tax-axis/components/clientReport/applyFootnotes.js +43 -0
  112. package/lib/tax-axis/components/clientReport/palette.d.ts +28 -0
  113. package/lib/tax-axis/components/clientReport/palette.js +34 -0
  114. package/lib/tax-axis/components/dashboard/ConfidenceArc.d.ts +7 -0
  115. package/lib/tax-axis/components/dashboard/ConfidenceArc.js +20 -0
  116. package/lib/tax-axis/components/dashboard/DashboardActions.d.ts +13 -0
  117. package/lib/tax-axis/components/dashboard/DashboardActions.js +94 -0
  118. package/lib/tax-axis/components/dashboard/DashboardSummary.d.ts +11 -0
  119. package/lib/tax-axis/components/dashboard/DashboardSummary.js +98 -0
  120. package/lib/tax-axis/components/dashboard/DashboardTopBar.d.ts +10 -0
  121. package/lib/tax-axis/components/dashboard/DashboardTopBar.js +48 -0
  122. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.d.ts +10 -0
  123. package/lib/tax-axis/components/dashboard/StrategyDetailPanel.js +139 -0
  124. package/lib/tax-axis/components/dashboard/StrategyTile.d.ts +10 -0
  125. package/lib/tax-axis/components/dashboard/StrategyTile.js +82 -0
  126. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.d.ts +12 -0
  127. package/lib/tax-axis/components/dashboard/TaxAxisDashboard.js +285 -0
  128. package/lib/tax-axis/components/dashboard/useCountUp.d.ts +1 -0
  129. package/lib/tax-axis/components/dashboard/useCountUp.js +25 -0
  130. package/lib/tax-axis/components/documents/DocumentCard.d.ts +18 -0
  131. package/lib/tax-axis/components/documents/DocumentCard.js +61 -0
  132. package/lib/tax-axis/components/documents/DocumentTier.d.ts +21 -0
  133. package/lib/tax-axis/components/documents/DocumentTier.js +23 -0
  134. package/lib/tax-axis/components/documents/TaxAxisDocuments.d.ts +8 -0
  135. package/lib/tax-axis/components/documents/TaxAxisDocuments.js +157 -0
  136. package/lib/tax-axis/components/extractionReview/DocumentCard.d.ts +17 -0
  137. package/lib/tax-axis/components/extractionReview/DocumentCard.js +105 -0
  138. package/lib/tax-axis/components/extractionReview/FieldRow.d.ts +17 -0
  139. package/lib/tax-axis/components/extractionReview/FieldRow.js +137 -0
  140. package/lib/tax-axis/components/extractionReview/PurposeBlock.d.ts +7 -0
  141. package/lib/tax-axis/components/extractionReview/PurposeBlock.js +18 -0
  142. package/lib/tax-axis/components/extractionReview/RerunFooter.d.ts +8 -0
  143. package/lib/tax-axis/components/extractionReview/RerunFooter.js +60 -0
  144. package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.d.ts +11 -0
  145. package/lib/tax-axis/components/extractionReview/TaxAxisExtractionReview.js +186 -0
  146. package/lib/tax-axis/components/intake/ClientParametersSection.d.ts +7 -0
  147. package/lib/tax-axis/components/intake/ClientParametersSection.js +146 -0
  148. package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.d.ts +7 -0
  149. package/lib/tax-axis/components/intake/CpaIntakeQuestionsSection.js +93 -0
  150. package/lib/tax-axis/components/intake/IntakeCtaCards.d.ts +9 -0
  151. package/lib/tax-axis/components/intake/IntakeCtaCards.js +30 -0
  152. package/lib/tax-axis/components/intake/RefineAnalysisSection.d.ts +7 -0
  153. package/lib/tax-axis/components/intake/RefineAnalysisSection.js +151 -0
  154. package/lib/tax-axis/components/intake/StateMultiSelect.d.ts +7 -0
  155. package/lib/tax-axis/components/intake/StateMultiSelect.js +90 -0
  156. package/lib/tax-axis/components/intake/StrategyRadar.d.ts +7 -0
  157. package/lib/tax-axis/components/intake/StrategyRadar.js +240 -0
  158. package/lib/tax-axis/components/intake/TaxAxisIntake.d.ts +8 -0
  159. package/lib/tax-axis/components/intake/TaxAxisIntake.js +38 -0
  160. package/lib/tax-axis/components/intake/intakeSchema.d.ts +97 -0
  161. package/lib/tax-axis/components/intake/intakeSchema.js +91 -0
  162. package/lib/tax-axis/components/preparerWorkpaper/CalculationTraceAccordion.d.ts +9 -0
  163. package/lib/tax-axis/components/preparerWorkpaper/CalculationTraceAccordion.js +19 -0
  164. package/lib/tax-axis/components/preparerWorkpaper/EngagementHeader.d.ts +9 -0
  165. package/lib/tax-axis/components/preparerWorkpaper/EngagementHeader.js +43 -0
  166. package/lib/tax-axis/components/preparerWorkpaper/Position6694Accordion.d.ts +9 -0
  167. package/lib/tax-axis/components/preparerWorkpaper/Position6694Accordion.js +25 -0
  168. package/lib/tax-axis/components/preparerWorkpaper/PriorityGroup.d.ts +14 -0
  169. package/lib/tax-axis/components/preparerWorkpaper/PriorityGroup.js +20 -0
  170. package/lib/tax-axis/components/preparerWorkpaper/Section6694Summary.d.ts +9 -0
  171. package/lib/tax-axis/components/preparerWorkpaper/Section6694Summary.js +36 -0
  172. package/lib/tax-axis/components/preparerWorkpaper/SourceDocumentsAccordion.d.ts +9 -0
  173. package/lib/tax-axis/components/preparerWorkpaper/SourceDocumentsAccordion.js +20 -0
  174. package/lib/tax-axis/components/preparerWorkpaper/StrategyWorkpaperCard.d.ts +14 -0
  175. package/lib/tax-axis/components/preparerWorkpaper/StrategyWorkpaperCard.js +53 -0
  176. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.d.ts +9 -0
  177. package/lib/tax-axis/components/preparerWorkpaper/TaxAxisPreparerWorkpaper.js +175 -0
  178. package/lib/tax-axis/components/presentationMode/TaxAxisPresentationMode.d.ts +7 -0
  179. package/lib/tax-axis/components/presentationMode/TaxAxisPresentationMode.js +245 -0
  180. package/lib/tax-axis/components/processing/ProcessingStages.d.ts +7 -0
  181. package/lib/tax-axis/components/processing/ProcessingStages.js +17 -0
  182. package/lib/tax-axis/components/processing/TaxAxisProcessing.d.ts +7 -0
  183. package/lib/tax-axis/components/processing/TaxAxisProcessing.js +105 -0
  184. package/lib/tax-axis/components/prospectReport/ProspectCover.d.ts +10 -0
  185. package/lib/tax-axis/components/prospectReport/ProspectCover.js +47 -0
  186. package/lib/tax-axis/components/prospectReport/ProspectDocuments.d.ts +9 -0
  187. package/lib/tax-axis/components/prospectReport/ProspectDocuments.js +31 -0
  188. package/lib/tax-axis/components/prospectReport/ProspectNextSteps.d.ts +13 -0
  189. package/lib/tax-axis/components/prospectReport/ProspectNextSteps.js +37 -0
  190. package/lib/tax-axis/components/prospectReport/ProspectPrintView.d.ts +26 -0
  191. package/lib/tax-axis/components/prospectReport/ProspectPrintView.js +185 -0
  192. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.d.ts +10 -0
  193. package/lib/tax-axis/components/prospectReport/ProspectStrategyCard.js +52 -0
  194. package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.d.ts +7 -0
  195. package/lib/tax-axis/components/prospectReport/SampleAnalysisPreview.js +120 -0
  196. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.d.ts +9 -0
  197. package/lib/tax-axis/components/prospectReport/TaxAxisProspectReport.js +173 -0
  198. package/lib/tax-axis/components/prospectReport/TaxPositionGap.d.ts +15 -0
  199. package/lib/tax-axis/components/prospectReport/TaxPositionGap.js +45 -0
  200. package/lib/tax-axis/components/prospectReport/theme.d.ts +26 -0
  201. package/lib/tax-axis/components/prospectReport/theme.js +33 -0
  202. package/lib/tax-axis/components/shared/ReportToolbar.d.ts +12 -0
  203. package/lib/tax-axis/components/shared/ReportToolbar.js +81 -0
  204. package/lib/tax-axis/components/shared/SectionHeader.d.ts +8 -0
  205. package/lib/tax-axis/components/shared/SectionHeader.js +15 -0
  206. package/lib/tax-axis/components/shared/TaxAxisBadge.d.ts +12 -0
  207. package/lib/tax-axis/components/shared/TaxAxisBadge.js +34 -0
  208. package/lib/tax-axis/components/shared/TaxAxisButton.d.ts +12 -0
  209. package/lib/tax-axis/components/shared/TaxAxisButton.js +17 -0
  210. package/lib/tax-axis/components/shared/TaxAxisCard.d.ts +9 -0
  211. package/lib/tax-axis/components/shared/TaxAxisCard.js +13 -0
  212. package/lib/tax-axis/index.d.ts +25 -0
  213. package/lib/tax-axis/index.js +51 -0
  214. package/lib/tax-axis/lib/compute/index.d.ts +8 -0
  215. package/lib/tax-axis/lib/compute/index.js +163 -0
  216. package/lib/tax-axis/lib/data/documents.d.ts +3 -0
  217. package/lib/tax-axis/lib/data/documents.js +33 -0
  218. package/lib/tax-axis/lib/data/extractedData.d.ts +2 -0
  219. package/lib/tax-axis/lib/data/extractedData.js +47 -0
  220. package/lib/tax-axis/lib/data/footnoteData.d.ts +2 -0
  221. package/lib/tax-axis/lib/data/footnoteData.js +48 -0
  222. package/lib/tax-axis/lib/data/index.d.ts +11 -0
  223. package/lib/tax-axis/lib/data/index.js +31 -0
  224. package/lib/tax-axis/lib/data/nextSteps.d.ts +2 -0
  225. package/lib/tax-axis/lib/data/nextSteps.js +35 -0
  226. package/lib/tax-axis/lib/data/sidebarLookup.d.ts +2 -0
  227. package/lib/tax-axis/lib/data/sidebarLookup.js +90 -0
  228. package/lib/tax-axis/lib/data/sourceDescriptions.d.ts +1 -0
  229. package/lib/tax-axis/lib/data/sourceDescriptions.js +32 -0
  230. package/lib/tax-axis/lib/data/states.d.ts +6 -0
  231. package/lib/tax-axis/lib/data/states.js +25 -0
  232. package/lib/tax-axis/lib/data/strategies.d.ts +8 -0
  233. package/lib/tax-axis/lib/data/strategies.js +166 -0
  234. package/lib/tax-axis/lib/data/strategyNarrative.d.ts +3 -0
  235. package/lib/tax-axis/lib/data/strategyNarrative.js +170 -0
  236. package/lib/tax-axis/lib/data/strategyProspect.d.ts +2 -0
  237. package/lib/tax-axis/lib/data/strategyProspect.js +66 -0
  238. package/lib/tax-axis/lib/data/workpaperInteractions.d.ts +1 -0
  239. package/lib/tax-axis/lib/data/workpaperInteractions.js +15 -0
  240. package/lib/tax-axis/lib/types/index.d.ts +183 -0
  241. package/lib/tax-axis/lib/types/index.js +7 -0
  242. package/package.json +68 -67
@@ -1,312 +1,312 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.OrganizationChart = void 0;
30
- const react_1 = __importStar(require("react"));
31
- const core_1 = require("@material-ui/core");
32
- const Dialog_1 = __importDefault(require("@material-ui/core/Dialog"));
33
- const Close_1 = __importDefault(require("@material-ui/icons/Close"));
34
- const cdn_1 = require("../shared/constants/cdn");
35
- const styled_components_1 = __importDefault(require("styled-components"));
36
- const defaultAvatar = cdn_1.CDN_URL + 'defaultAvatar.png';
37
- const ProfilePhotoPreview = styled_components_1.default.img `
38
- height: 86px;
39
- width: 86px;
40
- border: 1px solid #e4e5e4;
41
- border-radius: 50%;
42
- object-fit: cover;
43
- object-position: top;
44
- `;
45
- const CustomDialog = (0, core_1.styled)(Dialog_1.default)(({ theme }) => ({
46
- '& .MuiDialog-paper': {
47
- backgroundColor: '#060821',
48
- width: '50vw',
49
- maxWidth: '80vw',
50
- height: '80vh',
51
- justifyContent: 'center',
52
- alignItems: 'center',
53
- overflow: 'hidden',
54
- [theme.breakpoints.down('md')]: {
55
- width: '100vw',
56
- maxWidth: '100vw',
57
- },
58
- }
59
- }));
60
- const InformationRow = ({ label, value }) => {
61
- return (react_1.default.createElement(core_1.Grid, { item: true, container: true, justify: "flex-start", alignItems: "center" },
62
- react_1.default.createElement(core_1.Box, { style: {
63
- backgroundColor: '#248384',
64
- color: 'white',
65
- textAlign: 'center',
66
- margin: '2px',
67
- padding: '4px',
68
- width: '120px',
69
- borderRadius: '6px',
70
- fontSize: '10px'
71
- } },
72
- react_1.default.createElement("b", null, label)),
73
- react_1.default.createElement(core_1.Box, { ml: 0.5 }, value !== null && value !== void 0 ? value : 'N/A')));
74
- };
75
- const EmployeeCard = ({ name, role, experience, location, imageUrl }) => {
76
- return (react_1.default.createElement(core_1.Card, { style: {
77
- backgroundColor: '#d9efef',
78
- borderRadius: '12px',
79
- width: 'max-content',
80
- padding: '4px 20px',
81
- margin: '8px'
82
- } },
83
- imageUrl && (react_1.default.createElement(core_1.Grid, { item: true, justify: "center", style: { display: 'flex', justifyContent: 'center' } },
84
- react_1.default.createElement(ProfilePhotoPreview, { src: imageUrl || defaultAvatar, alt: 'Profile Photo' }))),
85
- react_1.default.createElement(core_1.Typography, { variant: "subtitle2", align: "center" },
86
- react_1.default.createElement("b", null, name)),
87
- react_1.default.createElement(core_1.Grid, { item: true, justify: "center", alignItems: "center" },
88
- react_1.default.createElement(InformationRow, { label: "Role", value: role }),
89
- react_1.default.createElement(InformationRow, { label: "Experience", value: experience }),
90
- react_1.default.createElement(InformationRow, { label: "Location", value: location }))));
91
- };
92
- const HorizontalLine = () => (react_1.default.createElement(core_1.Grid, { item: true, alignContent: "center", style: {
93
- position: 'relative',
94
- background: '#FFFFFF',
95
- width: 'calc(105% - 1px)',
96
- height: '2px',
97
- top: 0,
98
- right: 0,
99
- left: '50%',
100
- transform: 'translateX(0)'
101
- } }));
102
- const VerticalLine = ({ isBottomLine }) => (react_1.default.createElement(core_1.Grid, { item: true, style: {
103
- position: 'relative',
104
- background: '#FFFFFF',
105
- width: '2px',
106
- height: '30px',
107
- top: 0,
108
- left: '50%',
109
- transform: 'translateX(-50%)'
110
- } }, !isBottomLine && react_1.default.createElement("div", { style: {
111
- content: '',
112
- position: 'absolute',
113
- bottom: 0,
114
- left: '50%',
115
- transform: 'translateX(-50%)',
116
- borderStyle: 'solid',
117
- borderWidth: '6px 6px 0 6px',
118
- borderColor: '#FFFFFF transparent transparent transparent'
119
- } })));
120
- const parseServices = (services) => {
121
- var _a;
122
- const uniqueArray = (_a = Array.from(new Set(services === null || services === void 0 ? void 0 : services.map(item => JSON.stringify(item))))) === null || _a === void 0 ? void 0 : _a.map(str => JSON.parse(str));
123
- return uniqueArray;
124
- };
125
- const checkEmployeeLocation = (data) => {
126
- let hasOffshore = false;
127
- let hasOnshore = false;
128
- data === null || data === void 0 ? void 0 : data.forEach(employee => {
129
- var _a;
130
- const location = (_a = employee === null || employee === void 0 ? void 0 : employee.employeeLocation) === null || _a === void 0 ? void 0 : _a.toLowerCase();
131
- if (location === null || location === void 0 ? void 0 : location.includes("offshore")) {
132
- hasOffshore = true;
133
- }
134
- if (location === null || location === void 0 ? void 0 : location.includes("onshore")) {
135
- hasOnshore = true;
136
- }
137
- });
138
- if (hasOffshore && hasOnshore) {
139
- return "Offshore & Onshore Team";
140
- }
141
- else if (hasOffshore) {
142
- return "Offshore Team";
143
- }
144
- else if (hasOnshore) {
145
- return "Onshore Team";
146
- }
147
- else {
148
- return "none";
149
- }
150
- };
151
- const getTotalYearsWithFirm = (data) => {
152
- return data === null || data === void 0 ? void 0 : data.reduce((total, employee) => total + employee.yearsWithFirm, 0);
153
- };
154
- const OrganizationChart = ({ openModal, setOpenModal, expertFirms, firstName, lastName, imageUrl, primaryServiceLine, city, stateAbbreviation, paroTenure, isPublicProfile }) => {
155
- var _a, _b;
156
- const services = (_a = expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmClientReferences) === null || _a === void 0 ? void 0 : _a.flatMap((obj) => { var _a; return (_a = obj === null || obj === void 0 ? void 0 : obj.services) !== null && _a !== void 0 ? _a : []; });
157
- const uniqueServices = parseServices(services);
158
- const employeeLocation = checkEmployeeLocation(expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmEmployees);
159
- const getTotalYears = getTotalYearsWithFirm(expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmEmployees);
160
- let firmMemberCounter = 1;
161
- const groupedEmployees = (_b = expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmEmployees) === null || _b === void 0 ? void 0 : _b.reduce((acc, obj) => {
162
- if (!acc[obj.level]) {
163
- acc[obj.level] = [];
164
- }
165
- acc[obj.level].push(obj);
166
- return acc;
167
- }, {});
168
- const [scale, setScale] = (0, react_1.useState)((groupedEmployees === null || groupedEmployees === void 0 ? void 0 : groupedEmployees.length) >= 2 ? 0.3 : 0.5); // checking no of levels & zooming out to fit content
169
- const [position, setPosition] = (0, react_1.useState)({ x: 0, y: (groupedEmployees === null || groupedEmployees === void 0 ? void 0 : groupedEmployees.length) >= 2 ? -100 : 0 }); // negative value to align content maximum zoom out and center
170
- const [isDragging, setIsDragging] = (0, react_1.useState)(false);
171
- const [lastMousePos, setLastMousePos] = (0, react_1.useState)(null);
172
- const sortedLevels = Object.keys(groupedEmployees || {})
173
- .map(Number)
174
- .sort((a, b) => a - b);
175
- const MAX_ZOOM_IN = 5;
176
- const MAX_ZOOM_OUT = 0.2;
177
- const CONTENT_SIZE = 10;
178
- // to center the content
179
- const centerContent = (newScale) => {
180
- const centerX = (CONTENT_SIZE * newScale) / 2;
181
- const centerY = (CONTENT_SIZE * newScale) / 2;
182
- setPosition({ x: centerX, y: centerY });
183
- };
184
- const handleWheel = (event) => {
185
- event.preventDefault();
186
- const zoomFactor = 0.1;
187
- if (event.deltaY < 0) {
188
- setScale((prev) => Math.min(prev + zoomFactor, MAX_ZOOM_IN));
189
- }
190
- else {
191
- setScale((prev) => {
192
- const newScale = Math.max(prev - zoomFactor, MAX_ZOOM_OUT);
193
- if (newScale === MAX_ZOOM_OUT) {
194
- centerContent(newScale); // Center content when zoomed out fully
195
- }
196
- return newScale;
197
- });
198
- }
199
- };
200
- const handleMouseDown = (event) => {
201
- setIsDragging(true);
202
- setLastMousePos({ x: event.clientX, y: event.clientY });
203
- };
204
- const handleMouseMove = (event) => {
205
- if (isDragging && lastMousePos) {
206
- const dx = event.clientX - lastMousePos.x;
207
- const dy = event.clientY - lastMousePos.y;
208
- setPosition((prev) => ({
209
- x: prev.x + dx,
210
- y: prev.y + dy,
211
- }));
212
- setLastMousePos({ x: event.clientX, y: event.clientY });
213
- }
214
- };
215
- const handleMouseUp = () => {
216
- setIsDragging(false);
217
- };
218
- // to center the content on double click
219
- const handleDoubleClick = () => {
220
- const newScale = 1;
221
- setScale(newScale);
222
- centerContent(newScale);
223
- };
224
- const highlightsExists = ((expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.employeeCount) > 0 || employeeLocation !== 'none' || getTotalYears > 0);
225
- const uniqueServicesExists = (uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.length) > 1;
226
- return (react_1.default.createElement(CustomDialog, { open: openModal, onClose: () => setOpenModal(false), fullScreen: true, scroll: 'paper' },
227
- react_1.default.createElement(react_1.default.Fragment, null,
228
- react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justify: "space-between", alignItems: "center" },
229
- react_1.default.createElement(core_1.Box, { p: 2 },
230
- react_1.default.createElement(core_1.Typography, { variant: "subtitle1" },
231
- react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "Organizational Structure & Services")),
232
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
233
- react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "See what services the organization offers and where they're located"))),
234
- react_1.default.createElement(core_1.Box, { style: { alignSelf: 'flex-end' } },
235
- react_1.default.createElement(core_1.IconButton, { onClick: () => setOpenModal(false) },
236
- react_1.default.createElement(core_1.Box, { style: { color: 'white' } },
237
- react_1.default.createElement(Close_1.default, null))))),
238
- react_1.default.createElement(core_1.DialogContent, { onWheel: handleWheel, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onDoubleClick: handleDoubleClick, style: {
239
- overflow: 'hidden',
240
- width: '100%',
241
- height: '100vh',
242
- position: 'relative',
243
- } },
244
- react_1.default.createElement("div", { onMouseDown: handleMouseDown, style: {
245
- transform: `translate(${position.x}px, ${position.y}px) scale(${scale})`,
246
- transformOrigin: 'center',
247
- transition: 'transform 0.1s',
248
- width: '100%',
249
- height: '100%',
250
- position: 'relative',
251
- cursor: isDragging ? 'grabbing' : 'grab',
252
- userSelect: 'none',
253
- } },
254
- isPublicProfile ?
255
- react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justify: "flex-start", alignItems: 'center', wrap: 'nowrap', spacing: 4, style: { width: '100%' } },
256
- react_1.default.createElement(core_1.Box, { style: { width: '25%' } }, highlightsExists &&
257
- react_1.default.createElement(core_1.Box, null,
258
- react_1.default.createElement(core_1.Grid, { item: true },
259
- react_1.default.createElement(core_1.Typography, { variant: "subtitle1" },
260
- react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "Highlights:")),
261
- react_1.default.createElement("ul", null,
262
- (expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.employeeCount) > 0 && react_1.default.createElement("li", { style: { color: 'white' } },
263
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
264
- react_1.default.createElement(core_1.Box, { style: { color: 'white', } }, expertFirms === null || expertFirms === void 0 ? void 0 :
265
- expertFirms.employeeCount,
266
- " Team Members"))),
267
- employeeLocation !== 'none' && react_1.default.createElement("li", { style: { color: 'white' } },
268
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
269
- react_1.default.createElement(core_1.Box, { style: { color: 'white', } }, employeeLocation))),
270
- getTotalYears > 0 && react_1.default.createElement("li", { style: { color: 'white' } },
271
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
272
- react_1.default.createElement(core_1.Box, { style: { color: 'white', } },
273
- getTotalYears,
274
- " years of combined experience"))))))),
275
- react_1.default.createElement(core_1.Box, { style: { width: '50%' } },
276
- react_1.default.createElement(core_1.Grid, { item: true },
277
- react_1.default.createElement(core_1.Box, null,
278
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
279
- react_1.default.createElement(core_1.Box, { style: { color: 'white', textAlign: 'center' }, mt: 4, ml: 2 }, "Level 1")),
280
- react_1.default.createElement(core_1.Grid, { item: true, direction: "row", justify: "center", alignItems: "center", style: { margin: 'auto', width: 'fit-content' } },
281
- react_1.default.createElement(EmployeeCard, { name: `${firstName} ${lastName}`, role: primaryServiceLine, experience: paroTenure, location: `${city}, ${stateAbbreviation}`, imageUrl: imageUrl }))))),
282
- react_1.default.createElement(core_1.Box, { style: { width: '25%' } }, uniqueServicesExists &&
283
- react_1.default.createElement(core_1.Box, null,
284
- react_1.default.createElement(core_1.Grid, { item: true },
285
- react_1.default.createElement(core_1.Typography, { variant: "body1" },
286
- react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "Services Offered:")),
287
- react_1.default.createElement("ul", null, uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.map((service) => {
288
- return react_1.default.createElement("li", { style: { color: 'white' } },
289
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
290
- react_1.default.createElement(core_1.Box, { style: { color: 'white', } }, service)));
291
- }))))))
292
- :
293
- react_1.default.createElement(react_1.default.Fragment, null,
294
- react_1.default.createElement(core_1.Typography, { variant: "caption" },
295
- react_1.default.createElement(core_1.Box, { style: { color: 'white', textAlign: 'center' }, mt: 4, ml: 2 }, "Level 1")),
296
- react_1.default.createElement(core_1.Grid, { item: true, direction: "row", justify: "center", alignItems: "center", style: { margin: 'auto', width: 'fit-content' } },
297
- react_1.default.createElement(EmployeeCard, { name: `${firstName} ${lastName}`, role: primaryServiceLine, experience: paroTenure, location: `${city}, ${stateAbbreviation}`, imageUrl: imageUrl }))), sortedLevels === null || sortedLevels === void 0 ? void 0 :
298
- sortedLevels.map((level, levelIndex) => {
299
- var _a;
300
- return (react_1.default.createElement(core_1.Grid, { item: true, key: level, justify: "center", alignItems: "center", style: { width: 'auto' } },
301
- react_1.default.createElement(core_1.Grid, { container: true, direction: "row", justify: "center", alignItems: "center", spacing: 2, wrap: "nowrap" }, (_a = groupedEmployees[level]) === null || _a === void 0 ? void 0 : _a.map((obj, index) => {
302
- var _a, _b, _c, _d, _e, _f;
303
- return (react_1.default.createElement(core_1.Grid, { item: true, key: obj.id, style: { flexShrink: 0 } },
304
- ((_a = groupedEmployees[level]) === null || _a === void 0 ? void 0 : _a.length) > 1 && index < ((_b = groupedEmployees[level]) === null || _b === void 0 ? void 0 : _b.length) - 1 && (react_1.default.createElement(HorizontalLine, null)),
305
- react_1.default.createElement(VerticalLine, { isBottomLine: false }),
306
- react_1.default.createElement(EmployeeCard, { name: isPublicProfile ? `Firm Member ${firmMemberCounter++}` : obj === null || obj === void 0 ? void 0 : obj.employeeName, role: obj === null || obj === void 0 ? void 0 : obj.firmRole, experience: `${obj === null || obj === void 0 ? void 0 : obj.yearsWithFirm} years`, location: obj === null || obj === void 0 ? void 0 : obj.employeeLocation }),
307
- levelIndex !== (sortedLevels === null || sortedLevels === void 0 ? void 0 : sortedLevels.length) - 1 && react_1.default.createElement(VerticalLine, { isBottomLine: true }),
308
- ((_c = groupedEmployees[level]) === null || _c === void 0 ? void 0 : _c.length) > 1 && index < ((_d = groupedEmployees[level]) === null || _d === void 0 ? void 0 : _d.length) - 1 && levelIndex !== (sortedLevels === null || sortedLevels === void 0 ? void 0 : sortedLevels.length) - 1 && ((_e = groupedEmployees[level]) === null || _e === void 0 ? void 0 : _e.length) !== ((_f = groupedEmployees[level + 1]) === null || _f === void 0 ? void 0 : _f.length) && (react_1.default.createElement(HorizontalLine, null))));
309
- }))));
310
- }))))));
311
- };
312
- exports.OrganizationChart = OrganizationChart;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.OrganizationChart = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const core_1 = require("@material-ui/core");
32
+ const Dialog_1 = __importDefault(require("@material-ui/core/Dialog"));
33
+ const Close_1 = __importDefault(require("@material-ui/icons/Close"));
34
+ const cdn_1 = require("../shared/constants/cdn");
35
+ const styled_components_1 = __importDefault(require("styled-components"));
36
+ const defaultAvatar = cdn_1.CDN_URL + 'defaultAvatar.png';
37
+ const ProfilePhotoPreview = styled_components_1.default.img `
38
+ height: 86px;
39
+ width: 86px;
40
+ border: 1px solid #e4e5e4;
41
+ border-radius: 50%;
42
+ object-fit: cover;
43
+ object-position: top;
44
+ `;
45
+ const CustomDialog = (0, core_1.styled)(Dialog_1.default)(({ theme }) => ({
46
+ '& .MuiDialog-paper': {
47
+ backgroundColor: '#060821',
48
+ width: '50vw',
49
+ maxWidth: '80vw',
50
+ height: '80vh',
51
+ justifyContent: 'center',
52
+ alignItems: 'center',
53
+ overflow: 'hidden',
54
+ [theme.breakpoints.down('md')]: {
55
+ width: '100vw',
56
+ maxWidth: '100vw',
57
+ },
58
+ }
59
+ }));
60
+ const InformationRow = ({ label, value }) => {
61
+ return (react_1.default.createElement(core_1.Grid, { item: true, container: true, justify: "flex-start", alignItems: "center" },
62
+ react_1.default.createElement(core_1.Box, { style: {
63
+ backgroundColor: '#248384',
64
+ color: 'white',
65
+ textAlign: 'center',
66
+ margin: '2px',
67
+ padding: '4px',
68
+ width: '120px',
69
+ borderRadius: '6px',
70
+ fontSize: '10px'
71
+ } },
72
+ react_1.default.createElement("b", null, label)),
73
+ react_1.default.createElement(core_1.Box, { ml: 0.5 }, value !== null && value !== void 0 ? value : 'N/A')));
74
+ };
75
+ const EmployeeCard = ({ name, role, experience, location, imageUrl }) => {
76
+ return (react_1.default.createElement(core_1.Card, { style: {
77
+ backgroundColor: '#d9efef',
78
+ borderRadius: '12px',
79
+ width: 'max-content',
80
+ padding: '4px 20px',
81
+ margin: '8px'
82
+ } },
83
+ imageUrl && (react_1.default.createElement(core_1.Grid, { item: true, justify: "center", style: { display: 'flex', justifyContent: 'center' } },
84
+ react_1.default.createElement(ProfilePhotoPreview, { src: imageUrl || defaultAvatar, alt: 'Profile Photo' }))),
85
+ react_1.default.createElement(core_1.Typography, { variant: "subtitle2", align: "center" },
86
+ react_1.default.createElement("b", null, name)),
87
+ react_1.default.createElement(core_1.Grid, { item: true, justify: "center", alignItems: "center" },
88
+ react_1.default.createElement(InformationRow, { label: "Role", value: role }),
89
+ react_1.default.createElement(InformationRow, { label: "Experience", value: experience }),
90
+ react_1.default.createElement(InformationRow, { label: "Location", value: location }))));
91
+ };
92
+ const HorizontalLine = () => (react_1.default.createElement(core_1.Grid, { item: true, alignContent: "center", style: {
93
+ position: 'relative',
94
+ background: '#FFFFFF',
95
+ width: 'calc(105% - 1px)',
96
+ height: '2px',
97
+ top: 0,
98
+ right: 0,
99
+ left: '50%',
100
+ transform: 'translateX(0)'
101
+ } }));
102
+ const VerticalLine = ({ isBottomLine }) => (react_1.default.createElement(core_1.Grid, { item: true, style: {
103
+ position: 'relative',
104
+ background: '#FFFFFF',
105
+ width: '2px',
106
+ height: '30px',
107
+ top: 0,
108
+ left: '50%',
109
+ transform: 'translateX(-50%)'
110
+ } }, !isBottomLine && react_1.default.createElement("div", { style: {
111
+ content: '',
112
+ position: 'absolute',
113
+ bottom: 0,
114
+ left: '50%',
115
+ transform: 'translateX(-50%)',
116
+ borderStyle: 'solid',
117
+ borderWidth: '6px 6px 0 6px',
118
+ borderColor: '#FFFFFF transparent transparent transparent'
119
+ } })));
120
+ const parseServices = (services) => {
121
+ var _a;
122
+ const uniqueArray = (_a = Array.from(new Set(services === null || services === void 0 ? void 0 : services.map(item => JSON.stringify(item))))) === null || _a === void 0 ? void 0 : _a.map(str => JSON.parse(str));
123
+ return uniqueArray;
124
+ };
125
+ const checkEmployeeLocation = (data) => {
126
+ let hasOffshore = false;
127
+ let hasOnshore = false;
128
+ data === null || data === void 0 ? void 0 : data.forEach(employee => {
129
+ var _a;
130
+ const location = (_a = employee === null || employee === void 0 ? void 0 : employee.employeeLocation) === null || _a === void 0 ? void 0 : _a.toLowerCase();
131
+ if (location === null || location === void 0 ? void 0 : location.includes("offshore")) {
132
+ hasOffshore = true;
133
+ }
134
+ if (location === null || location === void 0 ? void 0 : location.includes("onshore")) {
135
+ hasOnshore = true;
136
+ }
137
+ });
138
+ if (hasOffshore && hasOnshore) {
139
+ return "Offshore & Onshore Team";
140
+ }
141
+ else if (hasOffshore) {
142
+ return "Offshore Team";
143
+ }
144
+ else if (hasOnshore) {
145
+ return "Onshore Team";
146
+ }
147
+ else {
148
+ return "none";
149
+ }
150
+ };
151
+ const getTotalYearsWithFirm = (data) => {
152
+ return data === null || data === void 0 ? void 0 : data.reduce((total, employee) => total + employee.yearsWithFirm, 0);
153
+ };
154
+ const OrganizationChart = ({ openModal, setOpenModal, expertFirms, firstName, lastName, imageUrl, primaryServiceLine, city, stateAbbreviation, paroTenure, isPublicProfile }) => {
155
+ var _a, _b;
156
+ const services = (_a = expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmClientReferences) === null || _a === void 0 ? void 0 : _a.flatMap((obj) => { var _a; return (_a = obj === null || obj === void 0 ? void 0 : obj.services) !== null && _a !== void 0 ? _a : []; });
157
+ const uniqueServices = parseServices(services);
158
+ const employeeLocation = checkEmployeeLocation(expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmEmployees);
159
+ const getTotalYears = getTotalYearsWithFirm(expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmEmployees);
160
+ let firmMemberCounter = 1;
161
+ const groupedEmployees = (_b = expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.expertFirmEmployees) === null || _b === void 0 ? void 0 : _b.reduce((acc, obj) => {
162
+ if (!acc[obj.level]) {
163
+ acc[obj.level] = [];
164
+ }
165
+ acc[obj.level].push(obj);
166
+ return acc;
167
+ }, {});
168
+ const [scale, setScale] = (0, react_1.useState)((groupedEmployees === null || groupedEmployees === void 0 ? void 0 : groupedEmployees.length) >= 2 ? 0.3 : 0.5); // checking no of levels & zooming out to fit content
169
+ const [position, setPosition] = (0, react_1.useState)({ x: 0, y: (groupedEmployees === null || groupedEmployees === void 0 ? void 0 : groupedEmployees.length) >= 2 ? -100 : 0 }); // negative value to align content maximum zoom out and center
170
+ const [isDragging, setIsDragging] = (0, react_1.useState)(false);
171
+ const [lastMousePos, setLastMousePos] = (0, react_1.useState)(null);
172
+ const sortedLevels = Object.keys(groupedEmployees || {})
173
+ .map(Number)
174
+ .sort((a, b) => a - b);
175
+ const MAX_ZOOM_IN = 5;
176
+ const MAX_ZOOM_OUT = 0.2;
177
+ const CONTENT_SIZE = 10;
178
+ // to center the content
179
+ const centerContent = (newScale) => {
180
+ const centerX = (CONTENT_SIZE * newScale) / 2;
181
+ const centerY = (CONTENT_SIZE * newScale) / 2;
182
+ setPosition({ x: centerX, y: centerY });
183
+ };
184
+ const handleWheel = (event) => {
185
+ event.preventDefault();
186
+ const zoomFactor = 0.1;
187
+ if (event.deltaY < 0) {
188
+ setScale((prev) => Math.min(prev + zoomFactor, MAX_ZOOM_IN));
189
+ }
190
+ else {
191
+ setScale((prev) => {
192
+ const newScale = Math.max(prev - zoomFactor, MAX_ZOOM_OUT);
193
+ if (newScale === MAX_ZOOM_OUT) {
194
+ centerContent(newScale); // Center content when zoomed out fully
195
+ }
196
+ return newScale;
197
+ });
198
+ }
199
+ };
200
+ const handleMouseDown = (event) => {
201
+ setIsDragging(true);
202
+ setLastMousePos({ x: event.clientX, y: event.clientY });
203
+ };
204
+ const handleMouseMove = (event) => {
205
+ if (isDragging && lastMousePos) {
206
+ const dx = event.clientX - lastMousePos.x;
207
+ const dy = event.clientY - lastMousePos.y;
208
+ setPosition((prev) => ({
209
+ x: prev.x + dx,
210
+ y: prev.y + dy,
211
+ }));
212
+ setLastMousePos({ x: event.clientX, y: event.clientY });
213
+ }
214
+ };
215
+ const handleMouseUp = () => {
216
+ setIsDragging(false);
217
+ };
218
+ // to center the content on double click
219
+ const handleDoubleClick = () => {
220
+ const newScale = 1;
221
+ setScale(newScale);
222
+ centerContent(newScale);
223
+ };
224
+ const highlightsExists = ((expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.employeeCount) > 0 || employeeLocation !== 'none' || getTotalYears > 0);
225
+ const uniqueServicesExists = (uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.length) > 1;
226
+ return (react_1.default.createElement(CustomDialog, { open: openModal, onClose: () => setOpenModal(false), fullScreen: true, scroll: 'paper' },
227
+ react_1.default.createElement(react_1.default.Fragment, null,
228
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justify: "space-between", alignItems: "center" },
229
+ react_1.default.createElement(core_1.Box, { p: 2 },
230
+ react_1.default.createElement(core_1.Typography, { variant: "subtitle1" },
231
+ react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "Organizational Structure & Services")),
232
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
233
+ react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "See what services the organization offers and where they're located"))),
234
+ react_1.default.createElement(core_1.Box, { style: { alignSelf: 'flex-end' } },
235
+ react_1.default.createElement(core_1.IconButton, { onClick: () => setOpenModal(false) },
236
+ react_1.default.createElement(core_1.Box, { style: { color: 'white' } },
237
+ react_1.default.createElement(Close_1.default, null))))),
238
+ react_1.default.createElement(core_1.DialogContent, { onWheel: handleWheel, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onDoubleClick: handleDoubleClick, style: {
239
+ overflow: 'hidden',
240
+ width: '100%',
241
+ height: '100vh',
242
+ position: 'relative',
243
+ } },
244
+ react_1.default.createElement("div", { onMouseDown: handleMouseDown, style: {
245
+ transform: `translate(${position.x}px, ${position.y}px) scale(${scale})`,
246
+ transformOrigin: 'center',
247
+ transition: 'transform 0.1s',
248
+ width: '100%',
249
+ height: '100%',
250
+ position: 'relative',
251
+ cursor: isDragging ? 'grabbing' : 'grab',
252
+ userSelect: 'none',
253
+ } },
254
+ isPublicProfile ?
255
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justify: "flex-start", alignItems: 'center', wrap: 'nowrap', spacing: 4, style: { width: '100%' } },
256
+ react_1.default.createElement(core_1.Box, { style: { width: '25%' } }, highlightsExists &&
257
+ react_1.default.createElement(core_1.Box, null,
258
+ react_1.default.createElement(core_1.Grid, { item: true },
259
+ react_1.default.createElement(core_1.Typography, { variant: "subtitle1" },
260
+ react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "Highlights:")),
261
+ react_1.default.createElement("ul", null,
262
+ (expertFirms === null || expertFirms === void 0 ? void 0 : expertFirms.employeeCount) > 0 && react_1.default.createElement("li", { style: { color: 'white' } },
263
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
264
+ react_1.default.createElement(core_1.Box, { style: { color: 'white', } }, expertFirms === null || expertFirms === void 0 ? void 0 :
265
+ expertFirms.employeeCount,
266
+ " Team Members"))),
267
+ employeeLocation !== 'none' && react_1.default.createElement("li", { style: { color: 'white' } },
268
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
269
+ react_1.default.createElement(core_1.Box, { style: { color: 'white', } }, employeeLocation))),
270
+ getTotalYears > 0 && react_1.default.createElement("li", { style: { color: 'white' } },
271
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
272
+ react_1.default.createElement(core_1.Box, { style: { color: 'white', } },
273
+ getTotalYears,
274
+ " years of combined experience"))))))),
275
+ react_1.default.createElement(core_1.Box, { style: { width: '50%' } },
276
+ react_1.default.createElement(core_1.Grid, { item: true },
277
+ react_1.default.createElement(core_1.Box, null,
278
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
279
+ react_1.default.createElement(core_1.Box, { style: { color: 'white', textAlign: 'center' }, mt: 4, ml: 2 }, "Level 1")),
280
+ react_1.default.createElement(core_1.Grid, { item: true, direction: "row", justify: "center", alignItems: "center", style: { margin: 'auto', width: 'fit-content' } },
281
+ react_1.default.createElement(EmployeeCard, { name: `${firstName} ${lastName}`, role: primaryServiceLine, experience: paroTenure, location: `${city}, ${stateAbbreviation}`, imageUrl: imageUrl }))))),
282
+ react_1.default.createElement(core_1.Box, { style: { width: '25%' } }, uniqueServicesExists &&
283
+ react_1.default.createElement(core_1.Box, null,
284
+ react_1.default.createElement(core_1.Grid, { item: true },
285
+ react_1.default.createElement(core_1.Typography, { variant: "body1" },
286
+ react_1.default.createElement(core_1.Box, { style: { color: 'white' } }, "Services Offered:")),
287
+ react_1.default.createElement("ul", null, uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.map((service) => {
288
+ return react_1.default.createElement("li", { style: { color: 'white' } },
289
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
290
+ react_1.default.createElement(core_1.Box, { style: { color: 'white', } }, service)));
291
+ }))))))
292
+ :
293
+ react_1.default.createElement(react_1.default.Fragment, null,
294
+ react_1.default.createElement(core_1.Typography, { variant: "caption" },
295
+ react_1.default.createElement(core_1.Box, { style: { color: 'white', textAlign: 'center' }, mt: 4, ml: 2 }, "Level 1")),
296
+ react_1.default.createElement(core_1.Grid, { item: true, direction: "row", justify: "center", alignItems: "center", style: { margin: 'auto', width: 'fit-content' } },
297
+ react_1.default.createElement(EmployeeCard, { name: `${firstName} ${lastName}`, role: primaryServiceLine, experience: paroTenure, location: `${city}, ${stateAbbreviation}`, imageUrl: imageUrl }))), sortedLevels === null || sortedLevels === void 0 ? void 0 :
298
+ sortedLevels.map((level, levelIndex) => {
299
+ var _a;
300
+ return (react_1.default.createElement(core_1.Grid, { item: true, key: level, justify: "center", alignItems: "center", style: { width: 'auto' } },
301
+ react_1.default.createElement(core_1.Grid, { container: true, direction: "row", justify: "center", alignItems: "center", spacing: 2, wrap: "nowrap" }, (_a = groupedEmployees[level]) === null || _a === void 0 ? void 0 : _a.map((obj, index) => {
302
+ var _a, _b, _c, _d, _e, _f;
303
+ return (react_1.default.createElement(core_1.Grid, { item: true, key: obj.id, style: { flexShrink: 0 } },
304
+ ((_a = groupedEmployees[level]) === null || _a === void 0 ? void 0 : _a.length) > 1 && index < ((_b = groupedEmployees[level]) === null || _b === void 0 ? void 0 : _b.length) - 1 && (react_1.default.createElement(HorizontalLine, null)),
305
+ react_1.default.createElement(VerticalLine, { isBottomLine: false }),
306
+ react_1.default.createElement(EmployeeCard, { name: isPublicProfile ? `Firm Member ${firmMemberCounter++}` : obj === null || obj === void 0 ? void 0 : obj.employeeName, role: obj === null || obj === void 0 ? void 0 : obj.firmRole, experience: `${obj === null || obj === void 0 ? void 0 : obj.yearsWithFirm} years`, location: obj === null || obj === void 0 ? void 0 : obj.employeeLocation }),
307
+ levelIndex !== (sortedLevels === null || sortedLevels === void 0 ? void 0 : sortedLevels.length) - 1 && react_1.default.createElement(VerticalLine, { isBottomLine: true }),
308
+ ((_c = groupedEmployees[level]) === null || _c === void 0 ? void 0 : _c.length) > 1 && index < ((_d = groupedEmployees[level]) === null || _d === void 0 ? void 0 : _d.length) - 1 && levelIndex !== (sortedLevels === null || sortedLevels === void 0 ? void 0 : sortedLevels.length) - 1 && ((_e = groupedEmployees[level]) === null || _e === void 0 ? void 0 : _e.length) !== ((_f = groupedEmployees[level + 1]) === null || _f === void 0 ? void 0 : _f.length) && (react_1.default.createElement(HorizontalLine, null))));
309
+ }))));
310
+ }))))));
311
+ };
312
+ exports.OrganizationChart = OrganizationChart;