@paro.io/expert-shared-components 1.9.3 → 1.9.4
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.
- package/lib/components/OrganizationChart/OrgChart.js +8 -58
- package/lib/components/OrganizationChart/PersonCard.d.ts +15 -0
- package/lib/components/OrganizationChart/PersonCard.js +25 -0
- package/lib/components/OrganizationChart/ServicesCard.d.ts +3 -0
- package/lib/components/OrganizationChart/ServicesCard.js +67 -0
- package/lib/components/OrganizationChart/utils.js +0 -48
- package/package.json +1 -1
|
@@ -22,67 +22,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
exports.OrganizationChart = void 0;
|
|
27
30
|
const react_1 = __importStar(require("react"));
|
|
28
31
|
const core_1 = require("@material-ui/core");
|
|
29
32
|
const icons_1 = require("@material-ui/icons");
|
|
30
33
|
const utils_1 = require("./utils");
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
react_1.default.createElement("div", { className: "flex flex-col items-center mb-2" },
|
|
34
|
-
react_1.default.createElement("div", { className: `
|
|
35
|
-
-mb-4 z-10 w-12 h-12 rounded-full bg-[#434889] flex items-center justify-center
|
|
36
|
-
text-white font-semibold text-lg
|
|
37
|
-
transition-all duration-200 hover:bg-[#102377]
|
|
38
|
-
${noOfchildren > 0 ? 'hover:shadow-lg' : ''}
|
|
39
|
-
` },
|
|
40
|
-
initial,
|
|
41
|
-
noOfchildren > 0 && (react_1.default.createElement("div", { className: "absolute -bottom-3 w-6 h-6 rounded bg-gray-400 flex items-center justify-center text-white text-sm" }, noOfchildren)))),
|
|
42
|
-
react_1.default.createElement("div", { className: "p-4 bg-white rounded-lg shadow-sm border text-center w-48 transition-all duration-200 group-hover:shadow-md" },
|
|
43
|
-
react_1.default.createElement("div", { className: "font-semibold text-[#102377]" }, name),
|
|
44
|
-
react_1.default.createElement("div", { className: "text-sm text-gray-600" }, position),
|
|
45
|
-
react_1.default.createElement("div", { className: "text-xs text-gray-500" },
|
|
46
|
-
experience,
|
|
47
|
-
" Years Experience"),
|
|
48
|
-
react_1.default.createElement("div", { className: "text-xs text-gray-500" }, location)))));
|
|
49
|
-
const ServicesCard = ({ uniqueServices, employeeCount, employeeLocation, totalYears }) => {
|
|
50
|
-
const [expanded, setExpanded] = (0, react_1.useState)(false);
|
|
51
|
-
const handleExpandClick = () => {
|
|
52
|
-
setExpanded((prev) => !prev);
|
|
53
|
-
};
|
|
54
|
-
const highlightsExists = (employeeCount > 0 || employeeLocation !== 'none' || totalYears > 0);
|
|
55
|
-
const uniqueServicesExists = (uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.length) >= 1;
|
|
56
|
-
const theme = (0, core_1.useTheme)();
|
|
57
|
-
const smallScreen = (0, core_1.useMediaQuery)(theme.breakpoints.down('lg'));
|
|
58
|
-
return (highlightsExists || uniqueServicesExists) ? react_1.default.createElement(utils_1.InfoCard, null,
|
|
59
|
-
react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: 'row', justifyContent: 'space-between', alignItems: 'center' },
|
|
60
|
-
react_1.default.createElement(core_1.Typography, { variant: "subtitle1", gutterBottom: true },
|
|
61
|
-
react_1.default.createElement("b", null, "Services Offered & Highlights")),
|
|
62
|
-
react_1.default.createElement(core_1.Tooltip, { title: !expanded ? "Expand to view services offered & highlights" : "", arrow: true, placement: 'top' },
|
|
63
|
-
react_1.default.createElement(core_1.IconButton, { onClick: handleExpandClick }, expanded ? react_1.default.createElement(icons_1.ExpandLess, null) : react_1.default.createElement(icons_1.ExpandMore, null)))),
|
|
64
|
-
react_1.default.createElement(core_1.Collapse, { in: expanded },
|
|
65
|
-
react_1.default.createElement(core_1.Grid, { container: true, spacing: 2, style: { paddingLeft: 12 }, direction: smallScreen ? 'column' : 'row' },
|
|
66
|
-
uniqueServicesExists && react_1.default.createElement(core_1.Grid, { item: true },
|
|
67
|
-
react_1.default.createElement(core_1.Typography, { variant: "subtitle1", gutterBottom: true },
|
|
68
|
-
react_1.default.createElement("b", null, "Services Offered")),
|
|
69
|
-
react_1.default.createElement("ul", { className: "pl-2 my-0" }, uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.map((service) => {
|
|
70
|
-
return react_1.default.createElement("li", null, service);
|
|
71
|
-
}))),
|
|
72
|
-
react_1.default.createElement(core_1.Box, { m: 1, mb: smallScreen ? 1 : 2 },
|
|
73
|
-
react_1.default.createElement(core_1.Divider, { orientation: smallScreen ? 'horizontal' : 'vertical' })),
|
|
74
|
-
highlightsExists && react_1.default.createElement(core_1.Grid, { item: true },
|
|
75
|
-
react_1.default.createElement(core_1.Typography, { variant: "subtitle1", gutterBottom: true },
|
|
76
|
-
react_1.default.createElement("b", null, "Highlights")),
|
|
77
|
-
react_1.default.createElement("ul", { className: "pl-2 my-0" },
|
|
78
|
-
employeeCount > 0 && react_1.default.createElement("li", null,
|
|
79
|
-
employeeCount,
|
|
80
|
-
" Team Members"),
|
|
81
|
-
employeeLocation !== 'none' && react_1.default.createElement("li", null, employeeLocation),
|
|
82
|
-
totalYears > 0 && react_1.default.createElement("li", null,
|
|
83
|
-
totalYears,
|
|
84
|
-
" years of combined experience")))))) : react_1.default.createElement(react_1.default.Fragment, null);
|
|
85
|
-
};
|
|
34
|
+
const PersonCard_1 = __importDefault(require("./PersonCard"));
|
|
35
|
+
const ServicesCard_1 = __importDefault(require("./ServicesCard"));
|
|
86
36
|
const RenderChildren = ({ children, zooming, isDragging }) => {
|
|
87
37
|
const childWidth = 100 / children.length;
|
|
88
38
|
const hasSiblings = children.length > 1;
|
|
@@ -117,7 +67,7 @@ const RenderChildren = ({ children, zooming, isDragging }) => {
|
|
|
117
67
|
return (react_1.default.createElement("div", { key: child.name, className: "flex flex-col items-center", style: { width: `${childWidth}%` } },
|
|
118
68
|
react_1.default.createElement(utils_1.ConnectorContainer, { ref: (el) => childRefs.current[index] = el, className: "child-vertical-line" }),
|
|
119
69
|
react_1.default.createElement("div", { className: "flex flex-col items-center relative" },
|
|
120
|
-
react_1.default.createElement(
|
|
70
|
+
react_1.default.createElement(PersonCard_1.default, Object.assign({}, child, { noOfchildren: (_b = (_a = child === null || child === void 0 ? void 0 : child.children) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 })),
|
|
121
71
|
child.children && child.children.length > 0 && (react_1.default.createElement(RenderChildren, { children: child.children, zooming: zooming, isDragging: isDragging })))));
|
|
122
72
|
})))))));
|
|
123
73
|
};
|
|
@@ -207,7 +157,7 @@ const OrganizationChart = ({ expertFirms, openModal, setOpenModal, firstName, la
|
|
|
207
157
|
react_1.default.createElement(core_1.Box, null, "See what services the organization offers and where they're located"))),
|
|
208
158
|
react_1.default.createElement(core_1.IconButton, { onClick: () => setOpenModal(false), style: { position: 'absolute', top: 0, right: 0 } },
|
|
209
159
|
react_1.default.createElement(icons_1.Close, null))),
|
|
210
|
-
isPublicProfile && (react_1.default.createElement(
|
|
160
|
+
isPublicProfile && (react_1.default.createElement(ServicesCard_1.default, { uniqueServices: uniqueServices, employeeCount: expertFirms.employeeCount, employeeLocation: employeeLocation, totalYears: totalYears })),
|
|
211
161
|
react_1.default.createElement(core_1.DialogContent, { onWheel: handleWheel, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onDoubleClick: handleDoubleClick, style: {
|
|
212
162
|
overflow: 'hidden',
|
|
213
163
|
width: '100%',
|
|
@@ -226,7 +176,7 @@ const OrganizationChart = ({ expertFirms, openModal, setOpenModal, firstName, la
|
|
|
226
176
|
} },
|
|
227
177
|
react_1.default.createElement("div", { className: "p-8" },
|
|
228
178
|
react_1.default.createElement("div", { className: "flex flex-col items-center" },
|
|
229
|
-
react_1.default.createElement(
|
|
179
|
+
react_1.default.createElement(PersonCard_1.default, Object.assign({}, treeData, { noOfchildren: (_d = (_c = treeData === null || treeData === void 0 ? void 0 : treeData.children) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0 })),
|
|
230
180
|
react_1.default.createElement(RenderChildren, { children: treeData.children || [], zooming: zoomingRef.current, isDragging: isDraggingRef.current }))))))));
|
|
231
181
|
};
|
|
232
182
|
exports.OrganizationChart = OrganizationChart;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface EmployeeData {
|
|
3
|
+
name: string;
|
|
4
|
+
position: string;
|
|
5
|
+
experience: number;
|
|
6
|
+
location: string;
|
|
7
|
+
initial: string;
|
|
8
|
+
level?: number | null;
|
|
9
|
+
children?: EmployeeData[];
|
|
10
|
+
}
|
|
11
|
+
interface PersonCardProps extends EmployeeData {
|
|
12
|
+
noOfchildren: number;
|
|
13
|
+
}
|
|
14
|
+
declare const PersonCard: React.FC<PersonCardProps>;
|
|
15
|
+
export default PersonCard;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const PersonCard = ({ name, position, experience, location, initial, noOfchildren, }) => (react_1.default.createElement("div", { className: "relative group" },
|
|
8
|
+
react_1.default.createElement("div", { className: "flex flex-col items-center" },
|
|
9
|
+
react_1.default.createElement("div", { className: "flex flex-col items-center mb-2" },
|
|
10
|
+
react_1.default.createElement("div", { className: `
|
|
11
|
+
-mb-4 z-10 w-12 h-12 rounded-full bg-[#434889] flex items-center justify-center
|
|
12
|
+
text-white font-semibold text-lg
|
|
13
|
+
transition-all duration-200 hover:bg-[#102377]
|
|
14
|
+
${noOfchildren > 0 ? 'hover:shadow-lg' : ''}
|
|
15
|
+
` },
|
|
16
|
+
initial,
|
|
17
|
+
noOfchildren > 0 && (react_1.default.createElement("div", { className: "absolute -bottom-3 w-6 h-6 rounded bg-gray-400 flex items-center justify-center text-white text-sm" }, noOfchildren)))),
|
|
18
|
+
react_1.default.createElement("div", { className: "p-4 bg-white rounded-lg shadow-sm border text-center w-48 transition-all duration-200 group-hover:shadow-md" },
|
|
19
|
+
react_1.default.createElement("div", { className: "font-semibold text-[#102377]" }, name),
|
|
20
|
+
react_1.default.createElement("div", { className: "text-sm text-gray-600" }, position),
|
|
21
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500" },
|
|
22
|
+
experience,
|
|
23
|
+
" Years Experience"),
|
|
24
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500" }, location)))));
|
|
25
|
+
exports.default = PersonCard;
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
const react_1 = __importStar(require("react"));
|
|
27
|
+
const core_1 = require("@material-ui/core");
|
|
28
|
+
const icons_1 = require("@material-ui/icons");
|
|
29
|
+
const utils_1 = require("./utils");
|
|
30
|
+
const ServicesCard = ({ uniqueServices, employeeCount, employeeLocation, totalYears }) => {
|
|
31
|
+
const [expanded, setExpanded] = (0, react_1.useState)(false);
|
|
32
|
+
const handleExpandClick = () => {
|
|
33
|
+
setExpanded((prev) => !prev);
|
|
34
|
+
};
|
|
35
|
+
const highlightsExists = (employeeCount > 0 || employeeLocation !== 'none' || totalYears > 0);
|
|
36
|
+
const uniqueServicesExists = (uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.length) >= 1;
|
|
37
|
+
const theme = (0, core_1.useTheme)();
|
|
38
|
+
const smallScreen = (0, core_1.useMediaQuery)(theme.breakpoints.down('lg'));
|
|
39
|
+
return (highlightsExists || uniqueServicesExists) ? react_1.default.createElement(utils_1.InfoCard, null,
|
|
40
|
+
react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: 'row', justifyContent: 'space-between', alignItems: 'center' },
|
|
41
|
+
react_1.default.createElement(core_1.Typography, { variant: "subtitle1", gutterBottom: true },
|
|
42
|
+
react_1.default.createElement("b", null, "Services Offered & Highlights")),
|
|
43
|
+
react_1.default.createElement(core_1.Tooltip, { title: !expanded ? "Expand to view services offered & highlights" : "", arrow: true, placement: 'top' },
|
|
44
|
+
react_1.default.createElement(core_1.IconButton, { onClick: handleExpandClick }, expanded ? react_1.default.createElement(icons_1.ExpandLess, null) : react_1.default.createElement(icons_1.ExpandMore, null)))),
|
|
45
|
+
react_1.default.createElement(core_1.Collapse, { in: expanded },
|
|
46
|
+
react_1.default.createElement(core_1.Grid, { container: true, spacing: 2, style: { paddingLeft: 12 }, direction: smallScreen ? 'column' : 'row' },
|
|
47
|
+
uniqueServicesExists && react_1.default.createElement(core_1.Grid, { item: true },
|
|
48
|
+
react_1.default.createElement(core_1.Typography, { variant: "subtitle1", gutterBottom: true },
|
|
49
|
+
react_1.default.createElement("b", null, "Services Offered")),
|
|
50
|
+
react_1.default.createElement("ul", { className: "pl-2 my-0" }, uniqueServices === null || uniqueServices === void 0 ? void 0 : uniqueServices.map((service) => {
|
|
51
|
+
return react_1.default.createElement("li", null, service);
|
|
52
|
+
}))),
|
|
53
|
+
react_1.default.createElement(core_1.Box, { m: 1, mb: smallScreen ? 1 : 2 },
|
|
54
|
+
react_1.default.createElement(core_1.Divider, { orientation: smallScreen ? 'horizontal' : 'vertical' })),
|
|
55
|
+
highlightsExists && react_1.default.createElement(core_1.Grid, { item: true },
|
|
56
|
+
react_1.default.createElement(core_1.Typography, { variant: "subtitle1", gutterBottom: true },
|
|
57
|
+
react_1.default.createElement("b", null, "Highlights")),
|
|
58
|
+
react_1.default.createElement("ul", { className: "pl-2 my-0" },
|
|
59
|
+
employeeCount > 0 && react_1.default.createElement("li", null,
|
|
60
|
+
employeeCount,
|
|
61
|
+
" Team Members"),
|
|
62
|
+
employeeLocation !== 'none' && react_1.default.createElement("li", null, employeeLocation),
|
|
63
|
+
totalYears > 0 && react_1.default.createElement("li", null,
|
|
64
|
+
totalYears,
|
|
65
|
+
" years of combined experience")))))) : react_1.default.createElement(react_1.default.Fragment, null);
|
|
66
|
+
};
|
|
67
|
+
exports.default = ServicesCard;
|
|
@@ -7,54 +7,6 @@ exports.getTotalYearsWithFirm = exports.checkEmployeeLocation = exports.parseSer
|
|
|
7
7
|
const styled_components_1 = __importDefault(require("styled-components"));
|
|
8
8
|
const core_1 = require("@material-ui/core");
|
|
9
9
|
const Dialog_1 = __importDefault(require("@material-ui/core/Dialog"));
|
|
10
|
-
// export const transformEmployeeData = (
|
|
11
|
-
// employeeData: Employee[],
|
|
12
|
-
// firstName: string,
|
|
13
|
-
// lastName: string,
|
|
14
|
-
// primaryServiceLine: string,
|
|
15
|
-
// city: string,
|
|
16
|
-
// stateAbbreviation: string,
|
|
17
|
-
// paroTenure: number
|
|
18
|
-
// ) => {
|
|
19
|
-
// const getInitial = (name: string): string => name.charAt(0).toUpperCase();
|
|
20
|
-
// // // Organize employees by their level
|
|
21
|
-
// // const levels: { [key: number]: Employee[] } = {};
|
|
22
|
-
// // employeeData.forEach((employee) => {
|
|
23
|
-
// // if (!levels[employee.level]) {
|
|
24
|
-
// // levels[employee.level] = [];
|
|
25
|
-
// // }
|
|
26
|
-
// // levels[employee.level].push(employee);
|
|
27
|
-
// // });
|
|
28
|
-
// const buildHierarchy = (parent: Employee | null, level: number): TransformedEmployee[] => {
|
|
29
|
-
// // if (!levels[level]) return [];
|
|
30
|
-
// // Filter employees based on matching direct_report and expert_firm_id with the parent
|
|
31
|
-
// const children = employeeData.filter((employee) => {
|
|
32
|
-
// return (parent === null ||
|
|
33
|
-
// (employee.directReport === parent.employeeName &&
|
|
34
|
-
// employee.expertFirmId === parent.expertFirmId));
|
|
35
|
-
// }).map((employee) => ({
|
|
36
|
-
// name: employee.employeeName,
|
|
37
|
-
// position: employee.firmRole,
|
|
38
|
-
// experience: employee.yearsWithFirm,
|
|
39
|
-
// location: employee.employeeLocation,
|
|
40
|
-
// initial: getInitial(employee.employeeName),
|
|
41
|
-
// level: level,
|
|
42
|
-
// children: buildHierarchy(employee, level + 1), // Recursive call to get the next level of children
|
|
43
|
-
// }));
|
|
44
|
-
// return children;
|
|
45
|
-
// };
|
|
46
|
-
// // Start building hierarchy from level 1 (assuming the top-most level is level 1)
|
|
47
|
-
// const transformedData = buildHierarchy(null, 1);
|
|
48
|
-
// return {
|
|
49
|
-
// name: `${firstName} ${lastName}`,
|
|
50
|
-
// position: primaryServiceLine,
|
|
51
|
-
// experience: paroTenure,
|
|
52
|
-
// location: `${city}, ${stateAbbreviation}`,
|
|
53
|
-
// initial: firstName.charAt(0).toUpperCase(),
|
|
54
|
-
// level: 0,
|
|
55
|
-
// children: transformedData,
|
|
56
|
-
// };
|
|
57
|
-
// };
|
|
58
10
|
const transformEmployeeData = (employeeData, firstName, lastName, primaryServiceLine, city, stateAbbreviation, paroTenure) => {
|
|
59
11
|
const getInitial = (name) => name.charAt(0).toUpperCase();
|
|
60
12
|
const buildHierarchy = (parent) => {
|