@paro.io/expert-shared-components 1.4.11 → 1.4.12

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 (31) hide show
  1. package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
  2. package/lib/components/ClientReferencesSection/ParoError.js +10 -10
  3. package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
  4. package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
  5. package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
  6. package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
  7. package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
  8. package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
  9. package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
  10. package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
  11. package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
  12. package/lib/components/ExpertProfileHeader/Banner.d.ts +6 -0
  13. package/lib/components/ExpertProfileHeader/Banner.js +7 -5
  14. package/lib/components/ExpertProfileHeader/EarningsSection.d.ts +2 -1
  15. package/lib/components/ExpertProfileHeader/EarningsSection.js +8 -3
  16. package/lib/components/ExpertProfileHeader/ExpertProfileHeader.js +1 -1
  17. package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
  18. package/lib/components/OrganizationChart/OrganizationChart.js +7 -7
  19. package/lib/components/Reviews/Pagination.js +6 -6
  20. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  21. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  22. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  23. package/lib/components/shared/Error.d.ts +6 -6
  24. package/lib/components/shared/Error.js +40 -40
  25. package/lib/components/shared/Image.js +13 -13
  26. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  27. package/lib/components/shared/ProfileTextField.js +16 -16
  28. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  29. package/lib/components/shared/StyledActionButtons.js +15 -15
  30. package/package.json +59 -59
  31. package/readme.md +86 -86
@@ -15,26 +15,26 @@ const omitDeleteButtonIconProps = ["isDisabled"];
15
15
  const omitDeleteButtonTypographyProps = ["isDisabled"];
16
16
  const DeleteButtonTypography = (0, styled_components_1.default)((props) => {
17
17
  return react_1.default.createElement(Typography_1.default, Object.assign({}, (0, omit_1.default)(props, omitDeleteButtonTypographyProps)));
18
- }) `
19
- padding-right: 17px;
20
- color: ${colors_1.default.deleteButtonRed} !important ;
18
+ }) `
19
+ padding-right: 17px;
20
+ color: ${colors_1.default.deleteButtonRed} !important ;
21
21
  ${({ isDisabled }) => {
22
22
  return (isDisabled &&
23
- `
24
- color: ${colors_1.default.notice} !important;
23
+ `
24
+ color: ${colors_1.default.notice} !important;
25
25
  `);
26
- }}
26
+ }}
27
27
  `;
28
28
  const DeleteButtonIcon = (0, styled_components_1.default)((props) => {
29
29
  return react_1.default.createElement(Clear_1.default, Object.assign({}, (0, omit_1.default)(props, omitDeleteButtonIconProps)));
30
- }) `
31
- color: ${colors_1.default.deleteButtonRed} !important ;
30
+ }) `
31
+ color: ${colors_1.default.deleteButtonRed} !important ;
32
32
  ${({ isDisabled }) => {
33
33
  return (isDisabled &&
34
- `
35
- color: ${colors_1.default.notice} !important;
34
+ `
35
+ color: ${colors_1.default.notice} !important;
36
36
  `);
37
- }}
37
+ }}
38
38
  `;
39
39
  const DeleteButton = ({ buttonText, onClick, variant = "text", isDisabled, className }) => {
40
40
  return (react_1.default.createElement(Buttons_1.StyledEditOrDeleteButton, { onClick: () => {
@@ -9,18 +9,18 @@ const core_1 = require("@material-ui/core");
9
9
  const styled_components_1 = __importDefault(require("styled-components"));
10
10
  const colors_1 = __importDefault(require("./constants/colors"));
11
11
  const AlertSnackBarButton_1 = require("./AlertSnackBarButton");
12
- const ErrorBox = (0, styled_components_1.default)(core_1.Box) `
13
- width: 100%;
14
- padding-bottom: 100;
12
+ const ErrorBox = (0, styled_components_1.default)(core_1.Box) `
13
+ width: 100%;
14
+ padding-bottom: 100;
15
15
  `;
16
- const ParoTitle = (0, styled_components_1.default)(core_1.Box) `
17
- color: ${colors_1.default.paroBlack};
18
- padding: 0px 0px 18px 0px;
16
+ const ParoTitle = (0, styled_components_1.default)(core_1.Box) `
17
+ color: ${colors_1.default.paroBlack};
18
+ padding: 0px 0px 18px 0px;
19
19
  `;
20
- const ParoSubtitle = styled_components_1.default.div `
21
- color: ${colors_1.default.paroBlack};
22
- margin-bottom: 24px;
23
- font-size: 1rem;
20
+ const ParoSubtitle = styled_components_1.default.div `
21
+ color: ${colors_1.default.paroBlack};
22
+ margin-bottom: 24px;
23
+ font-size: 1rem;
24
24
  `;
25
25
  const ParoError = ({ handleClose }) => {
26
26
  const handleCancelLanguage = handleClose ? "Close" : "Retry";
@@ -9,8 +9,8 @@ const core_1 = require("@material-ui/core");
9
9
  const styled_components_1 = __importDefault(require("styled-components"));
10
10
  const NullContentConditionalColor_1 = require("./styles/NullContentConditionalColor");
11
11
  const Tags_1 = require("./styles/Tags");
12
- const ProfileTags = (0, styled_components_1.default)(Tags_1.Tags) `
13
- margin: 0 5px 8px 0;
12
+ const ProfileTags = (0, styled_components_1.default)(Tags_1.Tags) `
13
+ margin: 0 5px 8px 0;
14
14
  `;
15
15
  const TagsSection = ({ multiLine, tags = [], tagsExpected, }) => {
16
16
  if ((tags === null || tags === void 0 ? void 0 : tags.length) < 1) {
@@ -7,6 +7,6 @@ exports.StyledTypography = void 0;
7
7
  const Typography_1 = __importDefault(require("@material-ui/core/Typography"));
8
8
  const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const colors_1 = __importDefault(require("../constants/colors"));
10
- exports.StyledTypography = (0, styled_components_1.default)(Typography_1.default) `
11
- color: ${colors_1.default.paroDeepblue} !important ;
10
+ exports.StyledTypography = (0, styled_components_1.default)(Typography_1.default) `
11
+ color: ${colors_1.default.paroDeepblue} !important ;
12
12
  `;
@@ -7,21 +7,21 @@ exports.StyledEditOrDeleteButton = exports.HeaderButtonUnderline = exports.Heade
7
7
  const core_1 = require("@material-ui/core");
8
8
  const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const colors_1 = __importDefault(require("../constants/colors"));
10
- exports.HeaderButtons = (0, styled_components_1.default)(core_1.Button) `
11
- margin-left: 0px !important;
12
- padding-left: 0px !important;
13
- span {
14
- color: ${colors_1.default.buttonText} !important;
15
- }
10
+ exports.HeaderButtons = (0, styled_components_1.default)(core_1.Button) `
11
+ margin-left: 0px !important;
12
+ padding-left: 0px !important;
13
+ span {
14
+ color: ${colors_1.default.buttonText} !important;
15
+ }
16
16
  `;
17
- exports.HeaderButtonUnderline = (0, styled_components_1.default)(exports.HeaderButtons) `
18
- text-decoration: underline;
17
+ exports.HeaderButtonUnderline = (0, styled_components_1.default)(exports.HeaderButtons) `
18
+ text-decoration: underline;
19
19
  `;
20
- exports.StyledEditOrDeleteButton = (0, styled_components_1.default)(core_1.Button) `
21
- margin: 10px 0px !important;
22
- background-color: ${colors_1.default.primary};
23
- color: ${colors_1.default.white};
24
- :hover {
25
- color: ${colors_1.default.primary} !important;
26
- }
20
+ exports.StyledEditOrDeleteButton = (0, styled_components_1.default)(core_1.Button) `
21
+ margin: 10px 0px !important;
22
+ background-color: ${colors_1.default.primary};
23
+ color: ${colors_1.default.white};
24
+ :hover {
25
+ color: ${colors_1.default.primary} !important;
26
+ }
27
27
  `;
@@ -11,12 +11,12 @@ const styled_components_1 = __importDefault(require("styled-components"));
11
11
  const colors_1 = __importDefault(require("../constants/colors"));
12
12
  exports.Name = (0, styled_components_1.default)((props) => {
13
13
  return react_1.default.createElement(core_1.Typography, Object.assign({}, (0, omit_1.default)(props, ["isNull"])));
14
- }) `
15
- font-family: Roboto-Bold;
14
+ }) `
15
+ font-family: Roboto-Bold;
16
16
  ${({ isNull }) => {
17
17
  return (isNull &&
18
- `
19
- color: ${colors_1.default.paroRed} !important;
18
+ `
19
+ color: ${colors_1.default.paroRed} !important;
20
20
  `);
21
- }}
21
+ }}
22
22
  `;
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.NullContentConditionalColor = void 0;
7
7
  const styled_components_1 = __importDefault(require("styled-components"));
8
8
  const colors_1 = __importDefault(require("../constants/colors"));
9
- exports.NullContentConditionalColor = styled_components_1.default.span `
9
+ exports.NullContentConditionalColor = styled_components_1.default.span `
10
10
  ${(props) => {
11
11
  return (props.isNull &&
12
- `
13
- color: ${colors_1.default.paroRed} !important
12
+ `
13
+ color: ${colors_1.default.paroRed} !important
14
14
  `);
15
- }}
15
+ }}
16
16
  `;
@@ -10,18 +10,18 @@ const styled_components_1 = __importDefault(require("styled-components"));
10
10
  const colors_1 = __importDefault(require("../constants/colors"));
11
11
  exports.SectionBody = (0, styled_components_1.default)((props) => {
12
12
  return react_1.default.createElement("div", Object.assign({}, (0, omit_1.default)(props, ["atLeastOneValueIsNull"])));
13
- }) `
14
- background-color: ${colors_1.default.white};
15
- border-radius: 2px;
16
- border: 1px Solid ${colors_1.default.lightGray};
17
- color: ${colors_1.default.paroBlack};
18
- font-family: Roboto;
19
- padding: 32.5px 42.5px 32.5px 42.5px;
20
- width: 100%;
13
+ }) `
14
+ background-color: ${colors_1.default.white};
15
+ border-radius: 2px;
16
+ border: 1px Solid ${colors_1.default.lightGray};
17
+ color: ${colors_1.default.paroBlack};
18
+ font-family: Roboto;
19
+ padding: 32.5px 42.5px 32.5px 42.5px;
20
+ width: 100%;
21
21
  ${({ atLeastOneValueIsNull }) => {
22
22
  return (atLeastOneValueIsNull &&
23
- `
24
- border-color: ${colors_1.default.paroRed} !important;
23
+ `
24
+ border-color: ${colors_1.default.paroRed} !important;
25
25
  `);
26
- }}
26
+ }}
27
27
  `;
@@ -10,12 +10,12 @@ const styled_components_1 = __importDefault(require("styled-components"));
10
10
  const colors_1 = __importDefault(require("../constants/colors"));
11
11
  exports.SectionTitle = (0, styled_components_1.default)((props) => {
12
12
  return react_1.default.createElement("div", Object.assign({}, (0, omit_1.default)(props, ["noBottomPadding"])));
13
- }) `
14
- font-family: Roboto-Bold;
15
- font-size: 20px;
16
- color: ${colors_1.default.paroBlack};
17
- padding: 23px 0px 15.5px 0px;
13
+ }) `
14
+ font-family: Roboto-Bold;
15
+ font-size: 20px;
16
+ color: ${colors_1.default.paroBlack};
17
+ padding: 23px 0px 15.5px 0px;
18
18
  ${({ noBottomPadding }) => {
19
19
  return noBottomPadding && "padding-bottom: 0 !important;";
20
- }}
20
+ }}
21
21
  `;
@@ -6,6 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Tags = void 0;
7
7
  const core_1 = require("@material-ui/core");
8
8
  const styled_components_1 = __importDefault(require("styled-components"));
9
- exports.Tags = (0, styled_components_1.default)(core_1.Chip) `
10
- font-family: Roboto-Bold;
9
+ exports.Tags = (0, styled_components_1.default)(core_1.Chip) `
10
+ font-family: Roboto-Bold;
11
11
  `;
@@ -10,12 +10,12 @@ const react_1 = __importDefault(require("react"));
10
10
  const CopyToClipboardAlert_1 = __importDefault(require("../shared/CopyToClipboardAlert"));
11
11
  const colors_1 = __importDefault(require("../ClientReferencesSection/constants/colors"));
12
12
  const Banner_1 = __importDefault(require("./Banner"));
13
- const StyledButton = (0, styled_components_1.default)(core_1.Button) `
14
- margin: 0px !important;
15
- padding: 26px 0 18px 0 !important;
16
- span {
17
- color: ${colors_1.default.buttonText} !important
18
- }
13
+ const StyledButton = (0, styled_components_1.default)(core_1.Button) `
14
+ margin: 0px !important;
15
+ padding: 26px 0 18px 0 !important;
16
+ span {
17
+ color: ${colors_1.default.buttonText} !important
18
+ }
19
19
  `;
20
20
  const ActionButton = ({ title, ariaLabel, onClick, icon: Icon }) => (react_1.default.createElement(core_1.Tooltip, { arrow: true, placement: "top", interactive: true, className: "whitespace-nowrap", title: title },
21
21
  react_1.default.createElement(core_1.IconButton, { "aria-label": ariaLabel, onClick: onClick },
@@ -1,5 +1,11 @@
1
1
  interface BannerProps {
2
2
  lifetimeFSV: number;
3
3
  }
4
+ export declare const fsvRanges: {
5
+ fsv: number;
6
+ bgColor: string;
7
+ message: string;
8
+ }[];
9
+ export declare const getBGColor: (fsv: number) => string;
4
10
  declare const Banner: ({ lifetimeFSV }: BannerProps) => JSX.Element;
5
11
  export default Banner;
@@ -3,24 +3,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getBGColor = exports.fsvRanges = void 0;
6
7
  const react_1 = __importDefault(require("react"));
7
8
  const base_icons_1 = require("@paro.io/base-icons");
8
9
  const core_1 = require("@material-ui/core");
9
- const fsvRanges = [
10
- { fsv: 500000, bgColor: '#F9BABF', message: 'Experts who have accrued $85K+ in FSV tend to churn more than the average Expert' },
10
+ exports.fsvRanges = [
11
+ { fsv: 500000, bgColor: '#F9BABF', message: 'Experts who have accrued $500K+ in FSV tend to churn more than the average Expert' },
11
12
  { fsv: 100000, bgColor: '#FBDD9B', message: 'Experts who have accrued $100K+ in FSV tend to churn more than the average Expert' },
12
13
  { fsv: 85000, bgColor: '#A3C9E5', message: 'Experts who have accrued $85K+ in FSV tend to churn more than the average Expert' },
13
14
  ];
14
15
  const getHoverMessage = (fsv) => {
15
- const threshold = fsvRanges.find(threshold => fsv >= threshold.fsv);
16
+ const threshold = exports.fsvRanges.find(threshold => fsv >= threshold.fsv);
16
17
  return threshold ? threshold.message : '';
17
18
  };
18
19
  const getBGColor = (fsv) => {
19
- const threshold = fsvRanges.find(threshold => fsv >= threshold.fsv);
20
+ const threshold = exports.fsvRanges.find(threshold => fsv >= threshold.fsv);
20
21
  return threshold ? threshold.bgColor : '';
21
22
  };
23
+ exports.getBGColor = getBGColor;
22
24
  const Banner = ({ lifetimeFSV }) => {
23
- const backgroundColor = getBGColor(lifetimeFSV);
25
+ const backgroundColor = (0, exports.getBGColor)(lifetimeFSV);
24
26
  const hoverText = getHoverMessage(lifetimeFSV);
25
27
  return (react_1.default.createElement(core_1.Box, { style: {
26
28
  backgroundColor: backgroundColor,
@@ -14,6 +14,7 @@ interface EarningsSectionProps {
14
14
  lifetimeIRPR: any;
15
15
  lifetimeWinRate: any;
16
16
  hasCompletedProjects: boolean;
17
+ lifetimeFSV: any;
17
18
  }
18
- declare const EarningsSection: ({ expertServiceLinesPlus, firmTags, haveATeamProp, expertLevels, currentMonthGoalHours, expertIRPRRatio, winRate, expertIRPRRatioPrev, winRatePrev, earnings, upsell, crossSell, lifetimeIRPR, lifetimeWinRate, hasCompletedProjects }: EarningsSectionProps) => JSX.Element;
19
+ declare const EarningsSection: ({ expertServiceLinesPlus, firmTags, haveATeamProp, expertLevels, currentMonthGoalHours, expertIRPRRatio, winRate, expertIRPRRatioPrev, winRatePrev, earnings, upsell, crossSell, lifetimeIRPR, lifetimeWinRate, hasCompletedProjects, lifetimeFSV }: EarningsSectionProps) => JSX.Element;
19
20
  export default EarningsSection;
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  const core_1 = require("@material-ui/core");
18
18
  const styles_1 = require("@material-ui/core/styles");
19
19
  const react_1 = __importDefault(require("react"));
20
+ const Banner_1 = require("./Banner");
20
21
  const useStyles = (0, styles_1.makeStyles)((theme) => ({
21
22
  chip: (props) => ({
22
23
  background: '#248384',
@@ -60,9 +61,9 @@ const FirmTags = (_a) => {
60
61
  margin: 1,
61
62
  } }, chipProps));
62
63
  };
63
- const EarningsInfo = ({ label, value }) => (react_1.default.createElement(core_1.Box, { mr: 2, display: "flex", justifyContent: "space-between", alignItems: "center" },
64
+ const EarningsInfo = ({ label, value, textColor = 'black' }) => (react_1.default.createElement(core_1.Box, { mr: 2, display: "flex", justifyContent: "space-between", alignItems: "center" },
64
65
  react_1.default.createElement(core_1.Typography, { variant: "body2" }, label),
65
- react_1.default.createElement("b", null, value)));
66
+ react_1.default.createElement("b", { style: { color: textColor } }, value)));
66
67
  const DataCell = ({ label, value }) => {
67
68
  //@ts-ignore
68
69
  const classes = useStyles();
@@ -101,9 +102,10 @@ const ToLocalStringFn = (value) => {
101
102
  maximumFractionDigits: 2,
102
103
  });
103
104
  };
104
- const EarningsSection = ({ expertServiceLinesPlus, firmTags, haveATeamProp, expertLevels, currentMonthGoalHours, expertIRPRRatio, winRate, expertIRPRRatioPrev, winRatePrev, earnings, upsell, crossSell, lifetimeIRPR, lifetimeWinRate, hasCompletedProjects }) => {
105
+ const EarningsSection = ({ expertServiceLinesPlus, firmTags, haveATeamProp, expertLevels, currentMonthGoalHours, expertIRPRRatio, winRate, expertIRPRRatioPrev, winRatePrev, earnings, upsell, crossSell, lifetimeIRPR, lifetimeWinRate, hasCompletedProjects, lifetimeFSV }) => {
105
106
  var _a;
106
107
  const earning = earnings && (earnings === null || earnings === void 0 ? void 0 : earnings.length) > 0 && ((_a = earnings[0]) === null || _a === void 0 ? void 0 : _a.earnings);
108
+ const backgroundColor = (0, Banner_1.getBGColor)(lifetimeFSV);
107
109
  return (react_1.default.createElement(core_1.Grid, { item: true, style: { width: '100%', padding: '6px' } },
108
110
  ((expertServiceLinesPlus === null || expertServiceLinesPlus === void 0 ? void 0 : expertServiceLinesPlus.length) > 0 || (firmTags === null || firmTags === void 0 ? void 0 : firmTags.length) > 0 || haveATeamProp || (expertLevels === null || expertLevels === void 0 ? void 0 : expertLevels.length) > 0) && react_1.default.createElement(react_1.default.Fragment, null,
109
111
  react_1.default.createElement(core_1.Grid, null,
@@ -134,6 +136,9 @@ const EarningsSection = ({ expertServiceLinesPlus, firmTags, haveATeamProp, expe
134
136
  react_1.default.createElement(core_1.Box, { mb: 2 },
135
137
  react_1.default.createElement(core_1.Divider, null)),
136
138
  react_1.default.createElement(EarningsInfo, { label: "% to Goal", value: currentMonthGoalHours && earning ? `${ToLocalStringFn(((earning / currentMonthGoalHours) * 100).toFixed(2))} %` : 'N/A' }),
139
+ react_1.default.createElement(core_1.Box, { mb: 2 },
140
+ react_1.default.createElement(core_1.Divider, null)),
141
+ react_1.default.createElement(EarningsInfo, { label: "Lifetime FSV", value: lifetimeFSV ? ToLocalStringFn(lifetimeFSV) : 'N/A', textColor: backgroundColor }),
137
142
  react_1.default.createElement(core_1.Box, { mb: 2 },
138
143
  react_1.default.createElement(core_1.Divider, null)),
139
144
  react_1.default.createElement(core_1.Box, { mb: 2 },
@@ -221,7 +221,7 @@ const ExpertProfileHeader = ({ expertId, address: addressForReducer, companyName
221
221
  react_1.default.createElement(NetworkSection_1.default, { handleScrollToBottom: isInternal && handleScrollToBottom ? handleScrollToBottom : () => { }, preferenceTasks: preferenceTasks, isWhiteLabel: isWhiteLabel, detailsSectionCompleted: detailsSectionCompleted, infoColor: infoColor, leftSideStatus: leftSideStatus, rightSideStatus: rightSideStatus, isInternal: isInternal }),
222
222
  react_1.default.createElement(core_1.Divider, { orientation: isSmallScreen ? 'horizontal' : 'vertical' })),
223
223
  react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: 'column', justify: 'space-between', xs: 12, md: true, style: { flex: '1', width: 'auto' } },
224
- react_1.default.createElement(EarningsSection_1.default, { expertServiceLinesPlus: expertServiceLinesPlus, firmTags: firmTags, haveATeamProp: haveATeamProp, expertLevels: expertLevels, currentMonthGoalHours: currentMonthGoalHours, expertIRPRRatio: expertIRPRRatio, winRate: winRate, expertIRPRRatioPrev: expertIRPRRatioPrev, winRatePrev: winRatePrev, earnings: earnings, upsell: upsell, crossSell: crossSell, lifetimeIRPR: lifetimeIRPR, lifetimeWinRate: lifetimeWinRate, hasCompletedProjects: (_k = expertMetricsData === null || expertMetricsData === void 0 ? void 0 : expertMetricsData.getExpertMetrics) === null || _k === void 0 ? void 0 : _k.lastProjectCompleted }),
224
+ react_1.default.createElement(EarningsSection_1.default, { expertServiceLinesPlus: expertServiceLinesPlus, firmTags: firmTags, haveATeamProp: haveATeamProp, expertLevels: expertLevels, currentMonthGoalHours: currentMonthGoalHours, expertIRPRRatio: expertIRPRRatio, winRate: winRate, expertIRPRRatioPrev: expertIRPRRatioPrev, winRatePrev: winRatePrev, earnings: earnings, upsell: upsell, crossSell: crossSell, lifetimeIRPR: lifetimeIRPR, lifetimeWinRate: lifetimeWinRate, hasCompletedProjects: (_k = expertMetricsData === null || expertMetricsData === void 0 ? void 0 : expertMetricsData.getExpertMetrics) === null || _k === void 0 ? void 0 : _k.lastProjectCompleted, lifetimeFSV: lifetimeFSV }),
225
225
  react_1.default.createElement(core_1.Divider, { orientation: isSmallScreen ? 'horizontal' : 'vertical' })),
226
226
  (estimatedAvailability !== '-' || nextMonthTrueAvailability !== '-' || expertFirms) && (react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: 'column', justify: 'space-between', xs: 12, md: true, style: { flex: '1', width: 'auto' } },
227
227
  react_1.default.createElement(TeamsSection_1.default, { estimatedAvailability: estimatedAvailability, nextMonthTrueAvailability: nextMonthTrueAvailability, expertFirms: expertFirms, firstName: firstName, lastName: lastName, primaryServiceLine: primaryServiceLine, city: city, stateAbbreviation: stateAbbreviation, paroTenure: paroTenure, imageUrl: imageUrl }),
@@ -53,13 +53,13 @@ const formatPhoneNumber = (phone) => {
53
53
  return `(${numericPhone.slice(0, 3)}) ${numericPhone.slice(3, 6)} - ${numericPhone.slice(6)}`;
54
54
  };
55
55
  exports.formatPhoneNumber = formatPhoneNumber;
56
- exports.ProfilePhotoPreview = styled_components_1.default.img `
57
- height: 86px;
58
- width: 86px;
59
- border: 1px solid ${colors_1.default.lightGray};
60
- border-radius: 50%;
61
- object-fit: cover;
62
- object-position: top;
56
+ exports.ProfilePhotoPreview = styled_components_1.default.img `
57
+ height: 86px;
58
+ width: 86px;
59
+ border: 1px solid ${colors_1.default.lightGray};
60
+ border-radius: 50%;
61
+ object-fit: cover;
62
+ object-position: top;
63
63
  `;
64
64
  const ProfileSection = ({ legacyFreelancerId, imageUrl, shouldAllowEditProfile, firstName, lastName, primaryServiceLine, editServiceLine, city, stateAbbreviation, email, phone, paroTenure, hourlyRate, setOpen, paroProjectsData, getUserDocument, uploadUserPhotoMutation, loadingNewImage, imageUpdateError, isInternal, getUserByEmail, updateUserEmail, updateUserMutation, getUserByEmailLazyQuery, updateUserPassword, verifyUserPassword, }) => {
65
65
  const [openReviews, setOpenReviews] = (0, react_1.useState)(false);
@@ -34,13 +34,13 @@ const Close_1 = __importDefault(require("@material-ui/icons/Close"));
34
34
  const cdn_1 = require("../shared/constants/cdn");
35
35
  const styled_components_1 = __importDefault(require("styled-components"));
36
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;
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
44
  `;
45
45
  const CustomDialog = (0, core_1.styled)(Dialog_1.default)(({ theme }) => ({
46
46
  '& .MuiDialog-paper': {
@@ -51,12 +51,12 @@ const Pagination = ({ total, currentPage = 1, setCurrentPage, perPageItems = 10,
51
51
  };
52
52
  const numberOfPages = Math.ceil(total / perPageItems);
53
53
  return (react_1.default.createElement("div", { className: "bg-white px-4 py-3 border-t border-gray-200 sm:px-6 flex flex-col md:flex-row md:items-center md:justify-between" },
54
- react_1.default.createElement("div", { className: "pb-2 md:pb-0" }, `Showing
55
- ${perPageItems * (currentPage - 1) + 1}
56
- to
57
- ${Math.min(total, perPageItems * currentPage)}
58
- of
59
- ${total}
54
+ react_1.default.createElement("div", { className: "pb-2 md:pb-0" }, `Showing
55
+ ${perPageItems * (currentPage - 1) + 1}
56
+ to
57
+ ${Math.min(total, perPageItems * currentPage)}
58
+ of
59
+ ${total}
60
60
  ${displayText}`),
61
61
  react_1.default.createElement("div", { className: "flex items-center justify-between" },
62
62
  react_1.default.createElement("div", { className: "flex-1 flex justify-between sm:hidden" },
@@ -51,12 +51,12 @@ const isRatingExists = (rating) => {
51
51
  return false;
52
52
  };
53
53
  exports.isRatingExists = isRatingExists;
54
- const StyledButton = (0, styled_components_1.default)(core_2.Button) `
55
- margin: 0px !important;
56
- padding: 26px 0 18px 0 !important;
57
- span {
58
- color: #248384 !important
59
- }
54
+ const StyledButton = (0, styled_components_1.default)(core_2.Button) `
55
+ margin: 0px !important;
56
+ padding: 26px 0 18px 0 !important;
57
+ span {
58
+ color: #248384 !important
59
+ }
60
60
  `;
61
61
  const RatingHeader = ({ ratings, project, index, highlightedRatings, requestStatus, handleRatingRequest, loadingSubmitId, handleAddToProfile, ratingReviewButtonlabel, setOpenClientReviewModal, setShowReviewModelWithRecentlyRatedProjects, enableReviewModal, disableReviewModal, isClientPortal, isInternal, createOrUpdateRating, getParoProjectsDocument, projectIdToShow, }) => {
62
62
  var _a, _b, _c, _d;
@@ -1,20 +1,20 @@
1
- {
2
- "folders": [
3
- {
4
- "path": "../../.."
5
- },
6
- {
7
- "path": "../../../../internal-profile-app"
8
- },
9
- {
10
- "path": "../../../../availability-gantt-chart"
11
- },
12
- {
13
- "path": "../../../../client-portal"
14
- },
15
- {
16
- "path": "../../../../expert-portal"
17
- }
18
- ],
19
- "settings": {}
20
- }
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": "../../.."
5
+ },
6
+ {
7
+ "path": "../../../../internal-profile-app"
8
+ },
9
+ {
10
+ "path": "../../../../availability-gantt-chart"
11
+ },
12
+ {
13
+ "path": "../../../../client-portal"
14
+ },
15
+ {
16
+ "path": "../../../../expert-portal"
17
+ }
18
+ ],
19
+ "settings": {}
20
+ }
@@ -34,11 +34,11 @@ const react_hot_toast_1 = __importDefault(require("react-hot-toast"));
34
34
  const ReviewRequestModal = ({ project, requestModal, setRequestModal, expertName, freelancerId, setRequestStatus, selectedProject, setSelectedProject, clientId, refetchParoProjects, setHighlightedRatings, createOrUpdateRatingRequestMutation, getParoProjectsDocument, }) => {
35
35
  var _a;
36
36
  const [showError, setShowError] = (0, react_1.useState)(false);
37
- const [textareaValue, setTextareaValue] = (0, react_1.useState)(`Hi ${(_a = project === null || project === void 0 ? void 0 : project.client) === null || _a === void 0 ? void 0 : _a.name},
38
- I hope you are satisfied with the work I provided on ${project === null || project === void 0 ? void 0 : project.name}. Your feedback is very important to me and helps me improve my services and build my reputation on Paro. Could you please take a moment to leave a review of you experience? Your input is greatly appreciated!
39
-
40
- Thank you in advance for your time and feedback.
41
- Best regards,
37
+ const [textareaValue, setTextareaValue] = (0, react_1.useState)(`Hi ${(_a = project === null || project === void 0 ? void 0 : project.client) === null || _a === void 0 ? void 0 : _a.name},
38
+ I hope you are satisfied with the work I provided on ${project === null || project === void 0 ? void 0 : project.name}. Your feedback is very important to me and helps me improve my services and build my reputation on Paro. Could you please take a moment to leave a review of you experience? Your input is greatly appreciated!
39
+
40
+ Thank you in advance for your time and feedback.
41
+ Best regards,
42
42
  ${expertName}`);
43
43
  const handleTextArea = (e) => {
44
44
  setTextareaValue(e.target.value);
@@ -1,6 +1,6 @@
1
- type SectionContents = {
2
- handleClose?: (...args: any) => void;
3
- formError?: boolean;
4
- };
5
- declare const Error: ({ handleClose }: SectionContents) => JSX.Element;
6
- export default Error;
1
+ type SectionContents = {
2
+ handleClose?: (...args: any) => void;
3
+ formError?: boolean;
4
+ };
5
+ declare const Error: ({ handleClose }: SectionContents) => JSX.Element;
6
+ export default Error;
@@ -1,40 +1,40 @@
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 core_1 = require("@material-ui/core");
8
- const styled_components_1 = __importDefault(require("styled-components"));
9
- const colors_1 = __importDefault(require("../shared/constants/colors"));
10
- const CopyToClipboardAlert_1 = __importDefault(require("./CopyToClipboardAlert"));
11
- const ErrorBox = (0, styled_components_1.default)(core_1.Box) `
12
- width: 100%;
13
- padding-bottom: 100;
14
- `;
15
- const ParoTitle = (0, styled_components_1.default)(core_1.Box) `
16
- color: ${colors_1.default.paroBlack};
17
- padding: 0px 0px 18px 0px;
18
- `;
19
- const ParoSubtitle = styled_components_1.default.div `
20
- color: ${colors_1.default.paroBlack};
21
- margin-bottom: 24px;
22
- font-size: 1rem;
23
- `;
24
- const reloadWindow = () => {
25
- window.location.reload();
26
- };
27
- const Error = ({ handleClose }) => {
28
- const handleCancel = handleClose ? handleClose : reloadWindow;
29
- const handleCancelLanguage = handleClose ? 'Close' : 'Retry';
30
- return (react_1.default.createElement(ErrorBox, null,
31
- react_1.default.createElement(core_1.Box, { display: 'flex', alignContent: 'center', alignItems: 'center', justifyContent: 'center', flexDirection: 'column', padding: '100px 0px 36px 5px;' },
32
- react_1.default.createElement(core_1.Typography, { variant: 'h6', gutterBottom: true },
33
- react_1.default.createElement(ParoTitle, null, "Oops! We had a misstep.")),
34
- react_1.default.createElement(core_1.Typography, { component: 'span', gutterBottom: true },
35
- react_1.default.createElement(ParoSubtitle, null, "Contact support if the issue persists")),
36
- react_1.default.createElement(core_1.DialogActions, null,
37
- react_1.default.createElement(core_1.Button, { variant: 'outlined', onClick: handleCancel, color: 'primary' }, handleCancelLanguage),
38
- react_1.default.createElement(CopyToClipboardAlert_1.default, { alertMessage: 'Email address copied to clipboard', button: core_1.Button, buttonContent: 'Copy support email', copyContent: 'people@paro.io', variant: 'contained' })))));
39
- };
40
- exports.default = Error;
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 core_1 = require("@material-ui/core");
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const colors_1 = __importDefault(require("../shared/constants/colors"));
10
+ const CopyToClipboardAlert_1 = __importDefault(require("./CopyToClipboardAlert"));
11
+ const ErrorBox = (0, styled_components_1.default)(core_1.Box) `
12
+ width: 100%;
13
+ padding-bottom: 100;
14
+ `;
15
+ const ParoTitle = (0, styled_components_1.default)(core_1.Box) `
16
+ color: ${colors_1.default.paroBlack};
17
+ padding: 0px 0px 18px 0px;
18
+ `;
19
+ const ParoSubtitle = styled_components_1.default.div `
20
+ color: ${colors_1.default.paroBlack};
21
+ margin-bottom: 24px;
22
+ font-size: 1rem;
23
+ `;
24
+ const reloadWindow = () => {
25
+ window.location.reload();
26
+ };
27
+ const Error = ({ handleClose }) => {
28
+ const handleCancel = handleClose ? handleClose : reloadWindow;
29
+ const handleCancelLanguage = handleClose ? 'Close' : 'Retry';
30
+ return (react_1.default.createElement(ErrorBox, null,
31
+ react_1.default.createElement(core_1.Box, { display: 'flex', alignContent: 'center', alignItems: 'center', justifyContent: 'center', flexDirection: 'column', padding: '100px 0px 36px 5px;' },
32
+ react_1.default.createElement(core_1.Typography, { variant: 'h6', gutterBottom: true },
33
+ react_1.default.createElement(ParoTitle, null, "Oops! We had a misstep.")),
34
+ react_1.default.createElement(core_1.Typography, { component: 'span', gutterBottom: true },
35
+ react_1.default.createElement(ParoSubtitle, null, "Contact support if the issue persists")),
36
+ react_1.default.createElement(core_1.DialogActions, null,
37
+ react_1.default.createElement(core_1.Button, { variant: 'outlined', onClick: handleCancel, color: 'primary' }, handleCancelLanguage),
38
+ react_1.default.createElement(CopyToClipboardAlert_1.default, { alertMessage: 'Email address copied to clipboard', button: core_1.Button, buttonContent: 'Copy support email', copyContent: 'people@paro.io', variant: 'contained' })))));
39
+ };
40
+ exports.default = Error;
@@ -31,20 +31,20 @@ const react_1 = __importStar(require("react"));
31
31
  const core_1 = require("@material-ui/core");
32
32
  const styled_components_1 = __importDefault(require("styled-components"));
33
33
  const cdn_1 = require("./constants/cdn");
34
- const ProfilePhotoPreview = styled_components_1.default.img `
35
- height: 86px;
36
- width: 86px;
37
- border: 4px solid #F8FAFC;
38
- border-radius: 10px;
39
- object-fit: cover;
40
- object-position: top;
34
+ const ProfilePhotoPreview = styled_components_1.default.img `
35
+ height: 86px;
36
+ width: 86px;
37
+ border: 4px solid #F8FAFC;
38
+ border-radius: 10px;
39
+ object-fit: cover;
40
+ object-position: top;
41
41
  `;
42
- const PhotoChangeButton = (0, styled_components_1.default)(core_1.Typography) `
43
- text-decoration: underline;
44
- cursor: pointer;
45
- :active {
46
- text-decoration: none !important;
47
- }
42
+ const PhotoChangeButton = (0, styled_components_1.default)(core_1.Typography) `
43
+ text-decoration: underline;
44
+ cursor: pointer;
45
+ :active {
46
+ text-decoration: none !important;
47
+ }
48
48
  `;
49
49
  exports.defaultAvatar = cdn_1.CDN_URL + 'defaultAvatar.png';
50
50
  const Image = ({ imageUrl, getUserDocument, uploadUserPhotoMutation, loadingNewImage, imageUpdateError, legacyFreelancerId, }) => {
@@ -1,18 +1,18 @@
1
- import { FieldError } from 'react-hook-form/dist/types/form';
2
- type SectionContents = {
3
- defaultValue?: string | number;
4
- error?: boolean;
5
- helperText: string | undefined | (FieldError | undefined)[];
6
- inputRef?: ((instance: any) => void) | null | undefined;
7
- label?: string;
8
- multiline?: boolean;
9
- name?: string;
10
- placeholder?: string;
11
- props?: unknown;
12
- size?: 'small' | 'medium' | undefined;
13
- onChange?: ((value: any) => void) | undefined;
14
- width?: boolean;
15
- InputProps?: any;
16
- };
17
- declare const ProfileTextField: ({ defaultValue, error, helperText, inputRef, label, multiline, name, placeholder, props, size, width, onChange, InputProps }: SectionContents) => JSX.Element;
18
- export default ProfileTextField;
1
+ import { FieldError } from 'react-hook-form/dist/types/form';
2
+ type SectionContents = {
3
+ defaultValue?: string | number;
4
+ error?: boolean;
5
+ helperText: string | undefined | (FieldError | undefined)[];
6
+ inputRef?: ((instance: any) => void) | null | undefined;
7
+ label?: string;
8
+ multiline?: boolean;
9
+ name?: string;
10
+ placeholder?: string;
11
+ props?: unknown;
12
+ size?: 'small' | 'medium' | undefined;
13
+ onChange?: ((value: any) => void) | undefined;
14
+ width?: boolean;
15
+ InputProps?: any;
16
+ };
17
+ declare const ProfileTextField: ({ defaultValue, error, helperText, inputRef, label, multiline, name, placeholder, props, size, width, onChange, InputProps }: SectionContents) => JSX.Element;
18
+ export default ProfileTextField;
@@ -1,16 +1,16 @@
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 TextField_1 = __importDefault(require("@material-ui/core/TextField"));
8
- const ProfileTextField = ({ defaultValue, error, helperText, inputRef, label, multiline = false, name, placeholder, props, size, width = false, onChange, InputProps }) => {
9
- return (onChange ? react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
10
- shrink: true
11
- }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined', onChange: onChange, classes: { root: 'inputCurrency' } })) :
12
- react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
13
- shrink: true
14
- }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined' })));
15
- };
16
- exports.default = ProfileTextField;
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 TextField_1 = __importDefault(require("@material-ui/core/TextField"));
8
+ const ProfileTextField = ({ defaultValue, error, helperText, inputRef, label, multiline = false, name, placeholder, props, size, width = false, onChange, InputProps }) => {
9
+ return (onChange ? react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
10
+ shrink: true
11
+ }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined', onChange: onChange, classes: { root: 'inputCurrency' } })) :
12
+ react_1.default.createElement(TextField_1.default, Object.assign({ InputProps: InputProps, "x-id": 'TextField' }, props, { defaultValue: defaultValue, error: error, fullWidth: true, helperText: helperText, InputLabelProps: {
13
+ shrink: true
14
+ }, inputRef: inputRef, label: label, margin: 'normal', multiline: multiline, name: name, placeholder: placeholder, size: size, style: Object.assign({ marginTop: '8px' }, (width && { width: '100%' })), variant: 'outlined' })));
15
+ };
16
+ exports.default = ProfileTextField;
@@ -1,7 +1,7 @@
1
- declare const StyledActionButtons: ({ closeOnClick, isDisabled, isLoading, handleSubmit }: {
2
- closeOnClick: () => void;
3
- isDisabled: boolean;
4
- isLoading: boolean;
5
- handleSubmit?: () => void;
6
- }) => JSX.Element;
7
- export default StyledActionButtons;
1
+ declare const StyledActionButtons: ({ closeOnClick, isDisabled, isLoading, handleSubmit }: {
2
+ closeOnClick: () => void;
3
+ isDisabled: boolean;
4
+ isLoading: boolean;
5
+ handleSubmit?: () => void;
6
+ }) => JSX.Element;
7
+ export default StyledActionButtons;
@@ -1,15 +1,15 @@
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 core_1 = require("@material-ui/core");
8
- const Button_1 = __importDefault(require("@material-ui/core/Button"));
9
- const Loader_1 = __importDefault(require("./Loader"));
10
- const StyledActionButtons = ({ closeOnClick, isDisabled, isLoading, handleSubmit }) => {
11
- return (react_1.default.createElement(core_1.DialogActions, null,
12
- react_1.default.createElement(Button_1.default, { variant: 'outlined', onClick: closeOnClick, color: 'primary' }, "Close"),
13
- react_1.default.createElement(Button_1.default, { color: 'default', disabled: isDisabled, key: String(isDisabled), onClick: handleSubmit, variant: 'contained' }, isLoading ? react_1.default.createElement(Loader_1.default, { key: String(isLoading) }) : 'Save')));
14
- };
15
- exports.default = StyledActionButtons;
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 core_1 = require("@material-ui/core");
8
+ const Button_1 = __importDefault(require("@material-ui/core/Button"));
9
+ const Loader_1 = __importDefault(require("./Loader"));
10
+ const StyledActionButtons = ({ closeOnClick, isDisabled, isLoading, handleSubmit }) => {
11
+ return (react_1.default.createElement(core_1.DialogActions, null,
12
+ react_1.default.createElement(Button_1.default, { variant: 'outlined', onClick: closeOnClick, color: 'primary' }, "Close"),
13
+ react_1.default.createElement(Button_1.default, { color: 'default', disabled: isDisabled, key: String(isDisabled), onClick: handleSubmit, variant: 'contained' }, isLoading ? react_1.default.createElement(Loader_1.default, { key: String(isLoading) }) : 'Save')));
14
+ };
15
+ exports.default = StyledActionButtons;
package/package.json CHANGED
@@ -1,59 +1,59 @@
1
- {
2
- "name": "@paro.io/expert-shared-components",
3
- "version": "1.4.11",
4
- "description": "",
5
- "main": "lib/index.js",
6
- "scripts": {
7
- "build": "tsc",
8
- "prepare": "yarn build",
9
- "test": "yarn test:build",
10
- "test:build": "yarn build",
11
- "clean": "yarn -rf lib",
12
- "predeploy": "tsc && cp package.json README.md ./lib",
13
- "link-local": "yarn link && cd node_modules/react && yarn link && cd ../react-dom && yarn link",
14
- "unlink-local": "yarn unlink && cd node_modules/react && yarn unlink && cd ../react-dom && yarn unlink"
15
- },
16
- "repository": "https://github.com/paroadmin/expert-shared-components.git",
17
- "keywords": ["react", "components", "shared"],
18
- "author": "apande@paro.io",
19
- "license": "MIT",
20
- "dependencies": {
21
- "@fortawesome/fontawesome-svg-core": "^6.6.0",
22
- "@fortawesome/free-solid-svg-icons": "^6.6.0",
23
- "@fortawesome/react-fontawesome": "^0.2.2",
24
- "@hookform/resolvers": "3.3.4",
25
- "@material-ui/core": "^4.11.0",
26
- "@material-ui/icons": "^4.11.3",
27
- "@material-ui/lab": "^4.0.0-alpha.61",
28
- "@paro.io/base-icons": "^1.0.4",
29
- "@paro.io/base-ui": "^1.8.3",
30
- "@types/react-input-mask": "^3.0.5",
31
- "dayjs": "^1.10.7",
32
- "lodash": "^4.17.21",
33
- "react": "^18.2.0",
34
- "react-copy-to-clipboard": "^5.0.4",
35
- "react-datepicker": "^4.6.0",
36
- "react-dom": "^17.0.2",
37
- "react-hook-form": "7.51.1",
38
- "react-hot-toast": "^2.4.1",
39
- "react-input-mask": "^3.0.0-alpha.2",
40
- "styled-components": "^5.3.3",
41
- "yup": "^0.32.11"
42
- },
43
- "devDependencies": {
44
- "@types/lodash": "^4.14.170",
45
- "@types/react": "^18.2.73",
46
- "@types/react-copy-to-clipboard": "^5.0.2",
47
- "@types/react-datepicker": "^4.19.6",
48
- "@types/react-dom": "^18.2.22",
49
- "@types/styled-components": "^5.1.22",
50
- "@types/yup": "^0.29.13",
51
- "typescript": "^5.3.3"
52
- },
53
- "files": [
54
- "lib/**/*"
55
- ],
56
- "directories": {
57
- "lib": "lib"
58
- }
59
- }
1
+ {
2
+ "name": "@paro.io/expert-shared-components",
3
+ "version": "1.4.12",
4
+ "description": "",
5
+ "main": "lib/index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "prepare": "yarn build",
9
+ "test": "yarn test:build",
10
+ "test:build": "yarn build",
11
+ "clean": "yarn -rf lib",
12
+ "predeploy": "tsc && cp package.json README.md ./lib",
13
+ "link-local": "yarn link && cd node_modules/react && yarn link && cd ../react-dom && yarn link",
14
+ "unlink-local": "yarn unlink && cd node_modules/react && yarn unlink && cd ../react-dom && yarn unlink"
15
+ },
16
+ "repository": "https://github.com/paroadmin/expert-shared-components.git",
17
+ "keywords": ["react", "components", "shared"],
18
+ "author": "apande@paro.io",
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "@fortawesome/fontawesome-svg-core": "^6.6.0",
22
+ "@fortawesome/free-solid-svg-icons": "^6.6.0",
23
+ "@fortawesome/react-fontawesome": "^0.2.2",
24
+ "@hookform/resolvers": "3.3.4",
25
+ "@material-ui/core": "^4.11.0",
26
+ "@material-ui/icons": "^4.11.3",
27
+ "@material-ui/lab": "^4.0.0-alpha.61",
28
+ "@paro.io/base-icons": "^1.0.4",
29
+ "@paro.io/base-ui": "^1.8.3",
30
+ "@types/react-input-mask": "^3.0.5",
31
+ "dayjs": "^1.10.7",
32
+ "lodash": "^4.17.21",
33
+ "react": "^18.2.0",
34
+ "react-copy-to-clipboard": "^5.0.4",
35
+ "react-datepicker": "^4.6.0",
36
+ "react-dom": "^17.0.2",
37
+ "react-hook-form": "7.51.1",
38
+ "react-hot-toast": "^2.4.1",
39
+ "react-input-mask": "^3.0.0-alpha.2",
40
+ "styled-components": "^5.3.3",
41
+ "yup": "^0.32.11"
42
+ },
43
+ "devDependencies": {
44
+ "@types/lodash": "^4.14.170",
45
+ "@types/react": "^18.2.73",
46
+ "@types/react-copy-to-clipboard": "^5.0.2",
47
+ "@types/react-datepicker": "^4.19.6",
48
+ "@types/react-dom": "^18.2.22",
49
+ "@types/styled-components": "^5.1.22",
50
+ "@types/yup": "^0.29.13",
51
+ "typescript": "^5.3.3"
52
+ },
53
+ "files": [
54
+ "lib/**/*"
55
+ ],
56
+ "directories": {
57
+ "lib": "lib"
58
+ }
59
+ }
package/readme.md CHANGED
@@ -1,87 +1,87 @@
1
- # Expert Shared Components
2
-
3
- This repository contains shared React components that are developed in the Expert Portal but can be utilized across the Internal and Client Portals. The primary components included are `Reviews` and `ReviewsTab`, which are used to display and manage reviews for experts.
4
-
5
- ## Table of Contents
6
-
7
- - [Installation](#installation)
8
- - [Usage](#usage)
9
- - [Components](#components)
10
- - [Reviews](#reviews)
11
- - [ReviewsTab](#reviewstab)
12
- - [Contributing](#contributing)
13
- - [License](#license)
14
-
15
- ## Installation
16
-
17
- To install the package, use npm or yarn:
18
-
19
- ```sh
20
- npm install expert-shared-components
21
-
22
- or
23
-
24
- yarn add expert-shared-components
25
- ```
26
-
27
- ## Usage
28
-
29
- To use the components in your project, import them as follows:
30
-
31
- `import { Reviews, ReviewsTab } from 'expert-shared-components';`
32
-
33
- ## Components
34
-
35
- ### Reviews
36
-
37
- The Reviews component is used to display a list of reviews for an expert.
38
-
39
- Props
40
-
41
- - paroProjectsData (array): An array of project data.
42
- - legacyFreelancerId (number): The ID of the freelancer.
43
- - expertName (string): The name of the expert.
44
- - refetchParoProjects (function): A function to refetch project data.
45
- - createOrUpdateRating (any): A function or object to create or update a rating.
46
-
47
- ### Example
48
-
49
- ```
50
- <Reviews
51
- paroProjectsData={paroProjectsData}
52
- legacyFreelancerId={123}
53
- expertName="John Doe"
54
- refetchParoProjects={refetchParoProjects}
55
- createOrUpdateRating={createOrUpdateRating}
56
- />
57
- ```
58
-
59
- ### ReviewsTab
60
-
61
- The ReviewsTab component is used to display a tabbed interface for managing reviews.
62
-
63
- Props
64
-
65
- - paroProjectsData (array): An array of project data.
66
- - legacyFreelancerId (number): The ID of the freelancer.
67
- - expertName (string): The name of the expert.
68
- - refetchParoProjects (function): A function to refetch project data.
69
- - createOrUpdateRating (any): A function or object to create or update a rating.
70
- - createOrUpdateRatingRequestMutation (any): A function or object to create or update a rating request.
71
-
72
- ### Example
73
-
74
- ```
75
- <ReviewsTab
76
- paroProjectsData={paroProjectsData}
77
- legacyFreelancerId={123}
78
- expertName="John Doe"
79
- refetchParoProjects={refetchParoProjects}
80
- createOrUpdateRating={createOrUpdateRating}
81
- createOrUpdateRatingRequestMutation={createOrUpdateRatingRequestMutation}
82
- />
83
- ```
84
-
85
- ### Publishing the Components
86
- - Update the version of the component in the package.json file, either the major or the minor version based on how big the change is
1
+ # Expert Shared Components
2
+
3
+ This repository contains shared React components that are developed in the Expert Portal but can be utilized across the Internal and Client Portals. The primary components included are `Reviews` and `ReviewsTab`, which are used to display and manage reviews for experts.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Installation](#installation)
8
+ - [Usage](#usage)
9
+ - [Components](#components)
10
+ - [Reviews](#reviews)
11
+ - [ReviewsTab](#reviewstab)
12
+ - [Contributing](#contributing)
13
+ - [License](#license)
14
+
15
+ ## Installation
16
+
17
+ To install the package, use npm or yarn:
18
+
19
+ ```sh
20
+ npm install expert-shared-components
21
+
22
+ or
23
+
24
+ yarn add expert-shared-components
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ To use the components in your project, import them as follows:
30
+
31
+ `import { Reviews, ReviewsTab } from 'expert-shared-components';`
32
+
33
+ ## Components
34
+
35
+ ### Reviews
36
+
37
+ The Reviews component is used to display a list of reviews for an expert.
38
+
39
+ Props
40
+
41
+ - paroProjectsData (array): An array of project data.
42
+ - legacyFreelancerId (number): The ID of the freelancer.
43
+ - expertName (string): The name of the expert.
44
+ - refetchParoProjects (function): A function to refetch project data.
45
+ - createOrUpdateRating (any): A function or object to create or update a rating.
46
+
47
+ ### Example
48
+
49
+ ```
50
+ <Reviews
51
+ paroProjectsData={paroProjectsData}
52
+ legacyFreelancerId={123}
53
+ expertName="John Doe"
54
+ refetchParoProjects={refetchParoProjects}
55
+ createOrUpdateRating={createOrUpdateRating}
56
+ />
57
+ ```
58
+
59
+ ### ReviewsTab
60
+
61
+ The ReviewsTab component is used to display a tabbed interface for managing reviews.
62
+
63
+ Props
64
+
65
+ - paroProjectsData (array): An array of project data.
66
+ - legacyFreelancerId (number): The ID of the freelancer.
67
+ - expertName (string): The name of the expert.
68
+ - refetchParoProjects (function): A function to refetch project data.
69
+ - createOrUpdateRating (any): A function or object to create or update a rating.
70
+ - createOrUpdateRatingRequestMutation (any): A function or object to create or update a rating request.
71
+
72
+ ### Example
73
+
74
+ ```
75
+ <ReviewsTab
76
+ paroProjectsData={paroProjectsData}
77
+ legacyFreelancerId={123}
78
+ expertName="John Doe"
79
+ refetchParoProjects={refetchParoProjects}
80
+ createOrUpdateRating={createOrUpdateRating}
81
+ createOrUpdateRatingRequestMutation={createOrUpdateRatingRequestMutation}
82
+ />
83
+ ```
84
+
85
+ ### Publishing the Components
86
+ - Update the version of the component in the package.json file, either the major or the minor version based on how big the change is
87
87
  - Run `npm publish` to publish the component to the @paro.io/expert-shared-components npm package