@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.
- package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
- package/lib/components/ClientReferencesSection/ParoError.js +10 -10
- package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
- package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
- package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
- package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
- package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
- package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
- package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
- package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
- package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
- package/lib/components/ExpertProfileHeader/Banner.d.ts +6 -0
- package/lib/components/ExpertProfileHeader/Banner.js +7 -5
- package/lib/components/ExpertProfileHeader/EarningsSection.d.ts +2 -1
- package/lib/components/ExpertProfileHeader/EarningsSection.js +8 -3
- package/lib/components/ExpertProfileHeader/ExpertProfileHeader.js +1 -1
- package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
- package/lib/components/OrganizationChart/OrganizationChart.js +7 -7
- package/lib/components/Reviews/Pagination.js +6 -6
- package/lib/components/ReviewsTab/RatingHeader.js +6 -6
- package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
- package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
- package/lib/components/shared/Error.d.ts +6 -6
- package/lib/components/shared/Error.js +40 -40
- package/lib/components/shared/Image.js +13 -13
- package/lib/components/shared/ProfileTextField.d.ts +18 -18
- package/lib/components/shared/ProfileTextField.js +16 -16
- package/lib/components/shared/StyledActionButtons.d.ts +7 -7
- package/lib/components/shared/StyledActionButtons.js +15 -15
- package/package.json +59 -59
- 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
|
-
|
|
10
|
-
{ fsv: 500000, bgColor: '#F9BABF', message: 'Experts who have accrued $
|
|
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",
|
|
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.
|
|
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
|