@paro.io/expert-shared-components 1.12.32 → 1.12.34

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 (72) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -2
  3. package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
  4. package/lib/components/ClientReferencesSection/ParoError.js +10 -10
  5. package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
  6. package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
  7. package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
  8. package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
  9. package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
  10. package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
  11. package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
  12. package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
  13. package/lib/components/DiscussionThread/chat.d.ts +22 -22
  14. package/lib/components/DiscussionThread/chat.js +106 -106
  15. package/lib/components/DocumentCenter/DocumentTable.d.ts +15 -15
  16. package/lib/components/DocumentCenter/DocumentTable.js +350 -350
  17. package/lib/components/DocumentCenter/UploadFilesButton.d.ts +6 -6
  18. package/lib/components/DocumentCenter/UploadFilesButton.js +29 -29
  19. package/lib/components/EarningsTracker/ActiveProjectCard.d.ts +52 -52
  20. package/lib/components/EarningsTracker/ActiveProjectCard.js +161 -161
  21. package/lib/components/EarningsTracker/CenterCardUI.d.ts +13 -13
  22. package/lib/components/EarningsTracker/CenterCardUI.js +134 -134
  23. package/lib/components/EarningsTracker/EarningsTracker.d.ts +52 -52
  24. package/lib/components/EarningsTracker/EarningsTracker.js +508 -508
  25. package/lib/components/EarningsTracker/EditDateModal.d.ts +22 -22
  26. package/lib/components/EarningsTracker/EditDateModal.js +149 -149
  27. package/lib/components/EarningsTracker/EmailModal.d.ts +14 -14
  28. package/lib/components/EarningsTracker/EmailModal.js +79 -79
  29. package/lib/components/EarningsTracker/EndProjectModal.d.ts +56 -56
  30. package/lib/components/EarningsTracker/EndProjectModal.js +221 -221
  31. package/lib/components/EarningsTracker/LeftCardUI.d.ts +18 -18
  32. package/lib/components/EarningsTracker/LeftCardUI.js +189 -189
  33. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.d.ts +52 -52
  34. package/lib/components/EarningsTracker/LogTimeModalAuthenticated.js +358 -358
  35. package/lib/components/EarningsTracker/ProgressBar.d.ts +4 -4
  36. package/lib/components/EarningsTracker/ProgressBar.js +66 -66
  37. package/lib/components/EarningsTracker/ReviewRequestModal.d.ts +17 -17
  38. package/lib/components/EarningsTracker/ReviewRequestModal.js +135 -135
  39. package/lib/components/EarningsTracker/RightCardUI.d.ts +46 -46
  40. package/lib/components/EarningsTracker/RightCardUI.js +231 -231
  41. package/lib/components/EarningsTracker/index.d.ts +1 -1
  42. package/lib/components/EarningsTracker/index.js +5 -5
  43. package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
  44. package/lib/components/ExpertProfileHeader/ProfileSection.js +16 -7
  45. package/lib/components/Invoices/DecisionSection.d.ts +1 -2
  46. package/lib/components/Invoices/DecisionSection.js +25 -56
  47. package/lib/components/Invoices/DisputeSection.d.ts +2 -1
  48. package/lib/components/Invoices/DisputeSection.js +3 -3
  49. package/lib/components/Invoices/InvoiceCard.d.ts +2 -2
  50. package/lib/components/Invoices/InvoiceCard.js +5 -9
  51. package/lib/components/Invoices/InvoiceDetails.d.ts +2 -1
  52. package/lib/components/Invoices/InvoiceDetails.js +3 -3
  53. package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
  54. package/lib/components/Invoices/TestDecisionSection.js +126 -126
  55. package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
  56. package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
  57. package/lib/components/OrganizationChart/PersonCard.js +5 -5
  58. package/lib/components/OrganizationChart/utils.js +79 -79
  59. package/lib/components/ProjectCard/ProgressBar.js +4 -4
  60. package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
  61. package/lib/components/Reviews/Pagination.js +6 -6
  62. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  63. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  64. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  65. package/lib/components/shared/Image.js +13 -13
  66. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  67. package/lib/components/shared/ProfileTextField.js +16 -16
  68. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  69. package/lib/components/shared/StyledActionButtons.js +15 -15
  70. package/lib/components/shared/ToastNotification.d.ts +10 -10
  71. package/lib/components/shared/ToastNotification.js +63 -63
  72. package/package.json +61 -61
@@ -1,231 +1,231 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.RightCardUI = void 0;
39
- const react_1 = __importStar(require("react"));
40
- const base_icons_1 = require("@paro.io/base-icons");
41
- const base_ui_1 = require("@paro.io/base-ui");
42
- const core_1 = require("@material-ui/core");
43
- const LogTimeModalAuthenticated_1 = require("./LogTimeModalAuthenticated");
44
- const dayjs_1 = __importDefault(require("dayjs"));
45
- const EmailModal_1 = require("./EmailModal");
46
- const EditDateModal_1 = require("./EditDateModal");
47
- const EndProjectModal_1 = require("./EndProjectModal");
48
- const ReviewRequestModal_1 = require("./ReviewRequestModal");
49
- const ActiveProjectCard_1 = require("./ActiveProjectCard");
50
- const TicketModal = ({ ticketModal, setTicketModal }) => {
51
- return (react_1.default.createElement(base_ui_1.Modal, { open: ticketModal, onClose: () => { setTicketModal(false); }, size: "sm", className: "z-[100]" },
52
- react_1.default.createElement("h1", { className: "font-bold text-xl mb-6" }, "Your ticket has been submitted!"),
53
- react_1.default.createElement("p", { className: "font-bold text-md mb-2" }, "Thank you for reaching out to Paro Support, we will contact you within the next business day to follow up on your request."),
54
- react_1.default.createElement(base_ui_1.Button, { type: "button", onClick: () => { setTicketModal(false); }, label: "OK", className: "mt-4", color: "primary" })));
55
- };
56
- const RightCardUI = ({ project, expertName, freelancerId, freelancerEmail, isAuthenticated, editEndDate, setEditEndDate, editStartDate, setEditStartDate, showTimeModal, setShowTimeModal, setSingleProjectData, projectData, checkStartDate, activeProject, projectFrequencyType, projectRateType, upcomingProject, selectedTab, showRating, projectTagsMap, updateProjectStatusMutation, GetAllProjectIrprDetailsForFreelancerDocument, updateParoProjectTagsMutation, GetParoProjectsDocument, updateProjectTagReviewStatusMutation, updateProjectStatus, updateProjectTags, getSowLazyQuery, sendParoSupportEmail, createChangeRequestMutation, createChangeRequest, createOrUpdateRatingRequestMutation, submitProjectHoursMutation, getAuth0Roles, submitProjectHoursLambda, user, internalPortal, csmUserGroup, clientPortal, signedSow, }) => {
57
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
58
- const [expandClient, setExpandClient] = (0, react_1.useState)(false);
59
- const [expandSupport, setExpandSupport] = (0, react_1.useState)(false);
60
- const [emailModal, setEmailModal] = (0, react_1.useState)(false);
61
- const [emailText, setEmailText] = (0, react_1.useState)("");
62
- const [ticketModal, setTicketModal] = (0, react_1.useState)(false);
63
- const [showConfirmationModal, setShowConfirmationModal] = (0, react_1.useState)(false);
64
- const [isDateInvalid, setIsDateInvalid] = (0, react_1.useState)(false);
65
- const [requestModal, setRequestModal] = (0, react_1.useState)(false);
66
- const [sowData, setSowData] = (0, react_1.useState)();
67
- const [sowLoading, setSowLoading] = (0, react_1.useState)(false);
68
- const classes = (0, ActiveProjectCard_1.useStyles)();
69
- const tasks = project === null || project === void 0 ? void 0 : project.projectScopeTasks;
70
- const pendingTasks = tasks.filter((task) => task.statusId === 2);
71
- const inProgressTasks = tasks.filter((task) => task.statusId === 3);
72
- const sow = !!(project === null || project === void 0 ? void 0 : project.contractId);
73
- const sowId = !!(project === null || project === void 0 ? void 0 : project.scopeOfWorkId);
74
- const projectType = `${projectFrequencyType}-${projectRateType}`;
75
- const nDaysSinceLastRatingIsSubmiited = 30;
76
- const isProjectCompletedIn2024 = (0, dayjs_1.default)(project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp).year() === 2024;
77
- const [requestStatus, setRequestStatus] = (0, react_1.useState)();
78
- const isTestEnv = true; // process.env.STAGE !== "prod"
79
- (0, react_1.useEffect)(() => {
80
- var _a, _b, _c, _d, _e, _f, _g, _h;
81
- const isRatingBeforeRatingRequest = (0, dayjs_1.default)((_b = (_a = project === null || project === void 0 ? void 0 : project.rating) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.createdAt).isBefore((0, dayjs_1.default)((_d = (_c = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.createdAt));
82
- const isRatingRequestAfterRowUpdate = (0, dayjs_1.default)((_f = (_e = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.createdAt).isAfter((0, dayjs_1.default)(project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp));
83
- const isRatingRequestStatusRequested = ((_h = (_g = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0 ? void 0 : _h.status) === 'Requested';
84
- const getRequestStatus = () => {
85
- var _a, _b, _c, _d;
86
- if (selectedTab === 4) {
87
- if (isRatingBeforeRatingRequest && isRatingRequestAfterRowUpdate && isProjectCompletedIn2024 && isRatingRequestStatusRequested) {
88
- return (_b = (_a = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.status;
89
- }
90
- }
91
- else {
92
- if (isRatingBeforeRatingRequest && isRatingRequestStatusRequested) {
93
- return (_d = (_c = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.status;
94
- }
95
- }
96
- return undefined;
97
- };
98
- setRequestStatus(getRequestStatus());
99
- }, [project, selectedTab, isProjectCompletedIn2024]);
100
- const isRequestReviewEnabled = true; //process.env.REQUEST_REVIEW_BUTTON_ENABLED==='true'
101
- (0, react_1.useEffect)(() => {
102
- if (sowData && sowData.presignedUrl) {
103
- window.open(sowData.presignedUrl);
104
- }
105
- }, [sowData]);
106
- const isWithinDays = (date, days) => (0, dayjs_1.default)((0, dayjs_1.default)().tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss')).diff((0, dayjs_1.default)(date).format('YYYY-MM-DD HH:mm:ss'), 'day') < days;
107
- const isWithinHours = (date, hours) => (0, dayjs_1.default)((0, dayjs_1.default)().tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss')).diff((0, dayjs_1.default)(date).format('YYYY-MM-DD HH:mm:ss'), 'hours') < hours;
108
- const hasRecentRating = !!((project === null || project === void 0 ? void 0 : project.rating) && ((_a = project === null || project === void 0 ? void 0 : project.rating[0]) === null || _a === void 0 ? void 0 : _a.overallRating) && isWithinHours((_b = project === null || project === void 0 ? void 0 : project.rating[0]) === null || _b === void 0 ? void 0 : _b.createdAt.replace('Z', ''), 48) &&
109
- (!(((_c = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _c === void 0 ? void 0 : _c.length) > 0) || ((_d = project === null || project === void 0 ? void 0 : project.ratingRequest[0]) === null || _d === void 0 ? void 0 : _d.status) !== 'Requested' && (0, dayjs_1.default)((_e = project === null || project === void 0 ? void 0 : project.ratingRequest[0]) === null || _e === void 0 ? void 0 : _e.createdAt).isBefore((0, dayjs_1.default)((_f = project === null || project === void 0 ? void 0 : project.rating[0]) === null || _f === void 0 ? void 0 : _f.createdAt))));
110
- const getMaxDate = () => {
111
- let maxDate = LogTimeModalAuthenticated_1.constants.MAX_DATE;
112
- const todayDate = new Date();
113
- if (editStartDate) {
114
- maxDate = new Date(project === null || project === void 0 ? void 0 : project.endDate);
115
- }
116
- else if (editEndDate) {
117
- maxDate = new Date(todayDate.setMonth((todayDate).getMonth() + 12));
118
- }
119
- return new Date(maxDate);
120
- };
121
- const validateDate = (date) => {
122
- const minDate = LogTimeModalAuthenticated_1.constants.MIN_DATE;
123
- const maxDate = getMaxDate();
124
- const isValid = date ? date.setHours(0, 0, 0, 0) < minDate.setHours(0, 0, 0, 0) || date.setHours(0, 0, 0, 0) > maxDate.setHours(0, 0, 0, 0) : true;
125
- setIsDateInvalid(isValid);
126
- return !isValid;
127
- };
128
- const downloadSow = (sowId) => __awaiter(void 0, void 0, void 0, function* () {
129
- setSowLoading(true);
130
- yield getSowLazyQuery({ variables: { getSowId: sowId } })
131
- .then((res) => {
132
- setSowData(res.data.getSow);
133
- })
134
- .catch((error) => {
135
- console.error("Failed to download SOW:", error);
136
- })
137
- .finally(() => {
138
- setSowLoading(false);
139
- });
140
- });
141
- const isRecentRatingAfterRowUpdate = (ratingDate, rowUpdateTimestamp) => (0, dayjs_1.default)(ratingDate).isAfter((0, dayjs_1.default)(rowUpdateTimestamp));
142
- const hasRecentRatingCondition = (selectedTab, hasRecentRating, project, isProjectCompletedIn2024) => {
143
- var _a, _b;
144
- if (selectedTab === 4) {
145
- return hasRecentRating && isRecentRatingAfterRowUpdate((_b = (_a = project === null || project === void 0 ? void 0 : project.rating) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.createdAt, project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp) && isProjectCompletedIn2024;
146
- }
147
- return hasRecentRating;
148
- };
149
- const reviewGivenCondition = (selectedTab, showRating, project, isProjectCompletedIn2024, nDaysSinceLastRatingIsSubmiited) => {
150
- var _a, _b, _c, _d;
151
- if (!showRating)
152
- return false;
153
- if (selectedTab === 4) {
154
- return isRecentRatingAfterRowUpdate((_b = (_a = project === null || project === void 0 ? void 0 : project.rating) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.createdAt, project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp) && isProjectCompletedIn2024;
155
- }
156
- return isWithinDays((_d = (_c = project === null || project === void 0 ? void 0 : project.rating) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.createdAt, nDaysSinceLastRatingIsSubmiited);
157
- };
158
- const requestReviewButtonLabel = () => {
159
- const hasRecentRatings = hasRecentRatingCondition(selectedTab, hasRecentRating, project, isProjectCompletedIn2024);
160
- const reviewGiven = reviewGivenCondition(selectedTab, showRating, project, isProjectCompletedIn2024, nDaysSinceLastRatingIsSubmiited);
161
- if (hasRecentRatings) {
162
- return 'Review Pending';
163
- }
164
- else if (requestStatus === 'Requested') {
165
- return 'Requested';
166
- }
167
- else if (reviewGiven) {
168
- return 'Review Given';
169
- }
170
- return 'Request Review';
171
- };
172
- return (react_1.default.createElement(react_1.default.Fragment, null,
173
- react_1.default.createElement("div", { className: "w-full md:w-2/12 flex flex-col gap-y-2.5" },
174
- (internalPortal && csmUserGroup) || (!internalPortal && !csmUserGroup) && !clientPortal ? react_1.default.createElement(react_1.default.Fragment, null,
175
- react_1.default.createElement("h1", { className: "text-[#64748B] text-md font-bold" }, "Actions"),
176
- checkStartDate ?
177
- react_1.default.createElement(core_1.Tooltip, { classes: { tooltip: classes.tooltip }, title: activeProject && "The project has not started yet. Request to change the project start date to the current date in order to edit the project end date.", placement: "top", arrow: true }, upcomingProject ? react_1.default.createElement("div", null,
178
- react_1.default.createElement(base_ui_1.Button, { label: "LOG YOUR TIME", disabled: true, size: "sm", color: "primary", className: "w-full", onClick: () => { setShowTimeModal(true); } }))
179
- : react_1.default.createElement("div", null,
180
- react_1.default.createElement(base_ui_1.Button, { label: "LOG YOUR TIME", disabled: checkStartDate || !activeProject, size: "sm", color: "primary", className: "w-full", onClick: () => { setShowTimeModal(true); } })))
181
- :
182
- react_1.default.createElement(core_1.Tooltip, { classes: { tooltip: classes.tooltip }, title: (projectType === "One-time-Fixed" || projectType === "Recurring-Fixed") ? "Please reach out to your Customer Success Manager if you would like to submit time for Fixed Projects." : "", placement: "top", arrow: true },
183
- react_1.default.createElement("div", null,
184
- react_1.default.createElement(base_ui_1.Button, { label: "LOG YOUR TIME", disabled: !activeProject, size: "sm", color: "primary", className: "w-full", onClick: () => { setShowTimeModal(true); } }))),
185
- upcomingProject ? react_1.default.createElement(base_ui_1.Button, { label: "EDIT START DATE", disabled: false, size: "sm", className: "w-full", onClick: () => { setEditStartDate(true); } }) :
186
- react_1.default.createElement(base_ui_1.Button, { label: "EDIT START DATE", disabled: !activeProject, size: "sm", className: "w-full", onClick: () => { setEditStartDate(true); } }),
187
- checkStartDate ?
188
- react_1.default.createElement(core_1.Tooltip, { classes: { tooltip: classes.tooltip }, title: activeProject && "The project has not started yet, please wait until the project start date to request a change to edit the end date.", placement: "top", arrow: true }, upcomingProject ? react_1.default.createElement("div", null,
189
- react_1.default.createElement(base_ui_1.Button, { label: "EDIT END DATE", disabled: true, size: "sm", className: "w-full", onClick: () => { setEditEndDate(true); } })) :
190
- react_1.default.createElement("div", null,
191
- react_1.default.createElement(base_ui_1.Button, { label: "EDIT END DATE", disabled: checkStartDate || !activeProject, size: "sm", className: "w-full", onClick: () => { setEditEndDate(true); } })))
192
- :
193
- react_1.default.createElement(base_ui_1.Button, { label: "EDIT END DATE", disabled: !activeProject, size: "sm", className: "w-full", onClick: () => { setEditEndDate(true); } }),
194
- react_1.default.createElement(base_ui_1.Button, { label: "END PROJECT", disabled: selectedTab === 2 || selectedTab === 3 || selectedTab === 4, size: "sm", className: "w-full", onClick: () => { setShowConfirmationModal(true); } }),
195
- react_1.default.createElement(base_ui_1.Button, { label: "VIEW SOW", size: "sm", disabled: !sow, className: "w-full", onClick: () => window.open(`/contract/${project === null || project === void 0 ? void 0 : project.contractId}`, '_blank') }),
196
- !internalPortal && react_1.default.createElement(base_ui_1.Button, { label: "DOWNLOAD SOW", size: "sm", disabled: !sowId, className: "w-full", onClick: () => { downloadSow(project === null || project === void 0 ? void 0 : project.scopeOfWorkId); }, isLoading: sowLoading }),
197
- (selectedTab === 0 || selectedTab === 1 || selectedTab === 4) && isRequestReviewEnabled && !internalPortal &&
198
- react_1.default.createElement(base_ui_1.Button, { label: requestReviewButtonLabel(), disabled: requestReviewButtonLabel() !== 'Request Review', size: "sm", className: "w-full", onClick: () => setRequestModal(true), isLoading: sowLoading })) : null,
199
- clientPortal && react_1.default.createElement(react_1.default.Fragment, null,
200
- react_1.default.createElement("h1", { className: "text-[#64748B] text-md font-bold" }, "Actions"),
201
- react_1.default.createElement(base_ui_1.Button, { label: signedSow ? "DOWNLOAD SOW" : "SIGN SOW", size: "sm", disabled: !sowId, className: "w-full", onClick: () => { downloadSow(project === null || project === void 0 ? void 0 : project.scopeOfWorkId); }, isLoading: sowLoading }),
202
- signedSow &&
203
- react_1.default.createElement(base_ui_1.Button, { label: "SUBMIT REVIEW", disabled: requestReviewButtonLabel() !== 'Request Review', size: "sm", className: "w-full", onClick: () => setRequestModal(true), isLoading: sowLoading })),
204
- react_1.default.createElement("div", { className: "gap-y-1 mt-4" },
205
- react_1.default.createElement("div", { className: "flex flex-row justify-between" },
206
- react_1.default.createElement("h1", { className: "font-bold text-lg mb-2" }, clientPortal ? "AE Information" : "Client Contact"),
207
- react_1.default.createElement("button", { onClick: () => { setExpandClient(!expandClient); }, className: "font-bold text-md mb-2" }, expandClient ? react_1.default.createElement(base_icons_1.IconChevronUp, null) : react_1.default.createElement(base_icons_1.IconChevronDown, null))),
208
- expandClient && react_1.default.createElement("div", { className: "m-1 overflow-auto" },
209
- react_1.default.createElement("p", null, (_g = project === null || project === void 0 ? void 0 : project.client) === null || _g === void 0 ? void 0 : _g.name),
210
- react_1.default.createElement("p", null, (_h = project === null || project === void 0 ? void 0 : project.client) === null || _h === void 0 ? void 0 : _h.clientEmail),
211
- react_1.default.createElement("p", null, (_k = ((_j = project === null || project === void 0 ? void 0 : project.client) === null || _j === void 0 ? void 0 : _j.clientPhone)) === null || _k === void 0 ? void 0 : _k.replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3")))),
212
- react_1.default.createElement("div", { className: "gap-y-1 mt-4" },
213
- react_1.default.createElement("div", { className: "flex flex-row justify-between" },
214
- react_1.default.createElement("h1", { className: "font-bold text-lg mb-2" }, "Paro Support"),
215
- react_1.default.createElement("button", { onClick: () => { setExpandSupport(!expandSupport); }, className: "font-bold text-md mb-2" }, expandSupport ? react_1.default.createElement(base_icons_1.IconChevronUp, null) : react_1.default.createElement(base_icons_1.IconChevronDown, null))),
216
- expandSupport && react_1.default.createElement(react_1.default.Fragment, null,
217
- react_1.default.createElement("b", null, "Customer Success Manager"),
218
- react_1.default.createElement("div", { className: "m-1 overflow-auto" },
219
- react_1.default.createElement("p", null, ((_m = (_l = project === null || project === void 0 ? void 0 : project.paroContact) === null || _l === void 0 ? void 0 : _l.firstName) !== null && _m !== void 0 ? _m : '') + ' ' + ((_p = (_o = project === null || project === void 0 ? void 0 : project.paroContact) === null || _o === void 0 ? void 0 : _o.lastName) !== null && _p !== void 0 ? _p : '')),
220
- react_1.default.createElement("a", { href: `mailto:${(_q = project === null || project === void 0 ? void 0 : project.paroContact) === null || _q === void 0 ? void 0 : _q.email}`, className: "underline text-[#1878BD]" }, (_r = project === null || project === void 0 ? void 0 : project.paroContact) === null || _r === void 0 ? void 0 : _r.email),
221
- react_1.default.createElement("p", null, (_s = project === null || project === void 0 ? void 0 : project.paroContact) === null || _s === void 0 ? void 0 : _s.phone)),
222
- react_1.default.createElement(base_ui_1.Button, { label: "CONTACT SUPPORT", size: "sm", className: "max-w-max mt-2", onClick: () => setEmailModal(true) })))),
223
- react_1.default.createElement(LogTimeModalAuthenticated_1.LogTimeModalAuthenticated, { project: project, freelancerId: freelancerId, showTimeModal: showTimeModal, setShowTimeModal: setShowTimeModal, validateDate: validateDate, setIsDateInvalid: setIsDateInvalid, isDateInvalid: isDateInvalid, setSingleProjectData: setSingleProjectData, projectData: projectData, selectedTab: selectedTab, isAuthenticated: isAuthenticated, submitProjectHoursMutation: submitProjectHoursMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, getAuth0Roles: getAuth0Roles, submitProjectHoursLambda: submitProjectHoursLambda, user: user }),
224
- react_1.default.createElement(EditDateModal_1.EditDateModal, { freelancerId: freelancerId, freelancerEmail: freelancerEmail, project: project, previousDate: project === null || project === void 0 ? void 0 : project.startDate, editDate: editStartDate, setEditDate: setEditStartDate, validateDate: validateDate, setIsDateInvalid: setIsDateInvalid, isDateInvalid: isDateInvalid, changeType: "start", expertName: expertName, isAuthenticated: isAuthenticated, selectedTab: selectedTab, createChangeRequestMutation: createChangeRequestMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, createChangeRequest: createChangeRequest, isTestEnv: isTestEnv }),
225
- react_1.default.createElement(EditDateModal_1.EditDateModal, { freelancerId: freelancerId, freelancerEmail: freelancerEmail, project: project, previousDate: project === null || project === void 0 ? void 0 : project.endDate, editDate: editEndDate, setEditDate: setEditEndDate, validateDate: validateDate, setIsDateInvalid: setIsDateInvalid, isDateInvalid: isDateInvalid, changeType: "end", expertName: expertName, isAuthenticated: isAuthenticated, selectedTab: selectedTab, createChangeRequestMutation: createChangeRequestMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, createChangeRequest: createChangeRequest, isTestEnv: isTestEnv }),
226
- react_1.default.createElement(EndProjectModal_1.EndProjectModal, { freelancerId: freelancerId, project: project, expertName: expertName, showConfirmationModal: showConfirmationModal, setShowConfirmationModal: setShowConfirmationModal, projectType: projectType, isAuthenticated: isAuthenticated, selectedTab: selectedTab, projectTagsMap: projectTagsMap, updateProjectStatusMutation: updateProjectStatusMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, updateParoProjectTagsMutation: updateParoProjectTagsMutation, GetParoProjectsDocument: GetParoProjectsDocument, updateProjectTagReviewStatusMutation: updateProjectTagReviewStatusMutation, updateProjectStatus: updateProjectStatus, updateProjectTags: updateProjectTags }),
227
- react_1.default.createElement(EmailModal_1.EmailModal, { emailModal: emailModal, setEmailModal: setEmailModal, emailText: emailText, setEmailText: setEmailText, setTicketModal: setTicketModal, project: project, expertName: expertName, sendParoSupportEmail: sendParoSupportEmail, isTestEnv: isTestEnv }),
228
- react_1.default.createElement(TicketModal, { ticketModal: ticketModal, setTicketModal: setTicketModal }),
229
- react_1.default.createElement(ReviewRequestModal_1.ReviewRequestModal, { project: project, requestModal: requestModal, setRequestModal: setRequestModal, expertName: expertName, freelancerId: freelancerId, setRequestStatus: setRequestStatus, createOrUpdateRatingRequestMutation: createOrUpdateRatingRequestMutation })));
230
- };
231
- exports.RightCardUI = RightCardUI;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.RightCardUI = void 0;
39
+ const react_1 = __importStar(require("react"));
40
+ const base_icons_1 = require("@paro.io/base-icons");
41
+ const base_ui_1 = require("@paro.io/base-ui");
42
+ const core_1 = require("@material-ui/core");
43
+ const LogTimeModalAuthenticated_1 = require("./LogTimeModalAuthenticated");
44
+ const dayjs_1 = __importDefault(require("dayjs"));
45
+ const EmailModal_1 = require("./EmailModal");
46
+ const EditDateModal_1 = require("./EditDateModal");
47
+ const EndProjectModal_1 = require("./EndProjectModal");
48
+ const ReviewRequestModal_1 = require("./ReviewRequestModal");
49
+ const ActiveProjectCard_1 = require("./ActiveProjectCard");
50
+ const TicketModal = ({ ticketModal, setTicketModal }) => {
51
+ return (react_1.default.createElement(base_ui_1.Modal, { open: ticketModal, onClose: () => { setTicketModal(false); }, size: "sm", className: "z-[100]" },
52
+ react_1.default.createElement("h1", { className: "font-bold text-xl mb-6" }, "Your ticket has been submitted!"),
53
+ react_1.default.createElement("p", { className: "font-bold text-md mb-2" }, "Thank you for reaching out to Paro Support, we will contact you within the next business day to follow up on your request."),
54
+ react_1.default.createElement(base_ui_1.Button, { type: "button", onClick: () => { setTicketModal(false); }, label: "OK", className: "mt-4", color: "primary" })));
55
+ };
56
+ const RightCardUI = ({ project, expertName, freelancerId, freelancerEmail, isAuthenticated, editEndDate, setEditEndDate, editStartDate, setEditStartDate, showTimeModal, setShowTimeModal, setSingleProjectData, projectData, checkStartDate, activeProject, projectFrequencyType, projectRateType, upcomingProject, selectedTab, showRating, projectTagsMap, updateProjectStatusMutation, GetAllProjectIrprDetailsForFreelancerDocument, updateParoProjectTagsMutation, GetParoProjectsDocument, updateProjectTagReviewStatusMutation, updateProjectStatus, updateProjectTags, getSowLazyQuery, sendParoSupportEmail, createChangeRequestMutation, createChangeRequest, createOrUpdateRatingRequestMutation, submitProjectHoursMutation, getAuth0Roles, submitProjectHoursLambda, user, internalPortal, csmUserGroup, clientPortal, signedSow, }) => {
57
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
58
+ const [expandClient, setExpandClient] = (0, react_1.useState)(false);
59
+ const [expandSupport, setExpandSupport] = (0, react_1.useState)(false);
60
+ const [emailModal, setEmailModal] = (0, react_1.useState)(false);
61
+ const [emailText, setEmailText] = (0, react_1.useState)("");
62
+ const [ticketModal, setTicketModal] = (0, react_1.useState)(false);
63
+ const [showConfirmationModal, setShowConfirmationModal] = (0, react_1.useState)(false);
64
+ const [isDateInvalid, setIsDateInvalid] = (0, react_1.useState)(false);
65
+ const [requestModal, setRequestModal] = (0, react_1.useState)(false);
66
+ const [sowData, setSowData] = (0, react_1.useState)();
67
+ const [sowLoading, setSowLoading] = (0, react_1.useState)(false);
68
+ const classes = (0, ActiveProjectCard_1.useStyles)();
69
+ const tasks = project === null || project === void 0 ? void 0 : project.projectScopeTasks;
70
+ const pendingTasks = tasks.filter((task) => task.statusId === 2);
71
+ const inProgressTasks = tasks.filter((task) => task.statusId === 3);
72
+ const sow = !!(project === null || project === void 0 ? void 0 : project.contractId);
73
+ const sowId = !!(project === null || project === void 0 ? void 0 : project.scopeOfWorkId);
74
+ const projectType = `${projectFrequencyType}-${projectRateType}`;
75
+ const nDaysSinceLastRatingIsSubmiited = 30;
76
+ const isProjectCompletedIn2024 = (0, dayjs_1.default)(project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp).year() === 2024;
77
+ const [requestStatus, setRequestStatus] = (0, react_1.useState)();
78
+ const isTestEnv = true; // process.env.STAGE !== "prod"
79
+ (0, react_1.useEffect)(() => {
80
+ var _a, _b, _c, _d, _e, _f, _g, _h;
81
+ const isRatingBeforeRatingRequest = (0, dayjs_1.default)((_b = (_a = project === null || project === void 0 ? void 0 : project.rating) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.createdAt).isBefore((0, dayjs_1.default)((_d = (_c = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.createdAt));
82
+ const isRatingRequestAfterRowUpdate = (0, dayjs_1.default)((_f = (_e = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.createdAt).isAfter((0, dayjs_1.default)(project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp));
83
+ const isRatingRequestStatusRequested = ((_h = (_g = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0 ? void 0 : _h.status) === 'Requested';
84
+ const getRequestStatus = () => {
85
+ var _a, _b, _c, _d;
86
+ if (selectedTab === 4) {
87
+ if (isRatingBeforeRatingRequest && isRatingRequestAfterRowUpdate && isProjectCompletedIn2024 && isRatingRequestStatusRequested) {
88
+ return (_b = (_a = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.status;
89
+ }
90
+ }
91
+ else {
92
+ if (isRatingBeforeRatingRequest && isRatingRequestStatusRequested) {
93
+ return (_d = (_c = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.status;
94
+ }
95
+ }
96
+ return undefined;
97
+ };
98
+ setRequestStatus(getRequestStatus());
99
+ }, [project, selectedTab, isProjectCompletedIn2024]);
100
+ const isRequestReviewEnabled = true; //process.env.REQUEST_REVIEW_BUTTON_ENABLED==='true'
101
+ (0, react_1.useEffect)(() => {
102
+ if (sowData && sowData.presignedUrl) {
103
+ window.open(sowData.presignedUrl);
104
+ }
105
+ }, [sowData]);
106
+ const isWithinDays = (date, days) => (0, dayjs_1.default)((0, dayjs_1.default)().tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss')).diff((0, dayjs_1.default)(date).format('YYYY-MM-DD HH:mm:ss'), 'day') < days;
107
+ const isWithinHours = (date, hours) => (0, dayjs_1.default)((0, dayjs_1.default)().tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss')).diff((0, dayjs_1.default)(date).format('YYYY-MM-DD HH:mm:ss'), 'hours') < hours;
108
+ const hasRecentRating = !!((project === null || project === void 0 ? void 0 : project.rating) && ((_a = project === null || project === void 0 ? void 0 : project.rating[0]) === null || _a === void 0 ? void 0 : _a.overallRating) && isWithinHours((_b = project === null || project === void 0 ? void 0 : project.rating[0]) === null || _b === void 0 ? void 0 : _b.createdAt.replace('Z', ''), 48) &&
109
+ (!(((_c = project === null || project === void 0 ? void 0 : project.ratingRequest) === null || _c === void 0 ? void 0 : _c.length) > 0) || ((_d = project === null || project === void 0 ? void 0 : project.ratingRequest[0]) === null || _d === void 0 ? void 0 : _d.status) !== 'Requested' && (0, dayjs_1.default)((_e = project === null || project === void 0 ? void 0 : project.ratingRequest[0]) === null || _e === void 0 ? void 0 : _e.createdAt).isBefore((0, dayjs_1.default)((_f = project === null || project === void 0 ? void 0 : project.rating[0]) === null || _f === void 0 ? void 0 : _f.createdAt))));
110
+ const getMaxDate = () => {
111
+ let maxDate = LogTimeModalAuthenticated_1.constants.MAX_DATE;
112
+ const todayDate = new Date();
113
+ if (editStartDate) {
114
+ maxDate = new Date(project === null || project === void 0 ? void 0 : project.endDate);
115
+ }
116
+ else if (editEndDate) {
117
+ maxDate = new Date(todayDate.setMonth((todayDate).getMonth() + 12));
118
+ }
119
+ return new Date(maxDate);
120
+ };
121
+ const validateDate = (date) => {
122
+ const minDate = LogTimeModalAuthenticated_1.constants.MIN_DATE;
123
+ const maxDate = getMaxDate();
124
+ const isValid = date ? date.setHours(0, 0, 0, 0) < minDate.setHours(0, 0, 0, 0) || date.setHours(0, 0, 0, 0) > maxDate.setHours(0, 0, 0, 0) : true;
125
+ setIsDateInvalid(isValid);
126
+ return !isValid;
127
+ };
128
+ const downloadSow = (sowId) => __awaiter(void 0, void 0, void 0, function* () {
129
+ setSowLoading(true);
130
+ yield getSowLazyQuery({ variables: { getSowId: sowId } })
131
+ .then((res) => {
132
+ setSowData(res.data.getSow);
133
+ })
134
+ .catch((error) => {
135
+ console.error("Failed to download SOW:", error);
136
+ })
137
+ .finally(() => {
138
+ setSowLoading(false);
139
+ });
140
+ });
141
+ const isRecentRatingAfterRowUpdate = (ratingDate, rowUpdateTimestamp) => (0, dayjs_1.default)(ratingDate).isAfter((0, dayjs_1.default)(rowUpdateTimestamp));
142
+ const hasRecentRatingCondition = (selectedTab, hasRecentRating, project, isProjectCompletedIn2024) => {
143
+ var _a, _b;
144
+ if (selectedTab === 4) {
145
+ return hasRecentRating && isRecentRatingAfterRowUpdate((_b = (_a = project === null || project === void 0 ? void 0 : project.rating) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.createdAt, project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp) && isProjectCompletedIn2024;
146
+ }
147
+ return hasRecentRating;
148
+ };
149
+ const reviewGivenCondition = (selectedTab, showRating, project, isProjectCompletedIn2024, nDaysSinceLastRatingIsSubmiited) => {
150
+ var _a, _b, _c, _d;
151
+ if (!showRating)
152
+ return false;
153
+ if (selectedTab === 4) {
154
+ return isRecentRatingAfterRowUpdate((_b = (_a = project === null || project === void 0 ? void 0 : project.rating) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.createdAt, project === null || project === void 0 ? void 0 : project.rowUpdateTimestamp) && isProjectCompletedIn2024;
155
+ }
156
+ return isWithinDays((_d = (_c = project === null || project === void 0 ? void 0 : project.rating) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.createdAt, nDaysSinceLastRatingIsSubmiited);
157
+ };
158
+ const requestReviewButtonLabel = () => {
159
+ const hasRecentRatings = hasRecentRatingCondition(selectedTab, hasRecentRating, project, isProjectCompletedIn2024);
160
+ const reviewGiven = reviewGivenCondition(selectedTab, showRating, project, isProjectCompletedIn2024, nDaysSinceLastRatingIsSubmiited);
161
+ if (hasRecentRatings) {
162
+ return 'Review Pending';
163
+ }
164
+ else if (requestStatus === 'Requested') {
165
+ return 'Requested';
166
+ }
167
+ else if (reviewGiven) {
168
+ return 'Review Given';
169
+ }
170
+ return 'Request Review';
171
+ };
172
+ return (react_1.default.createElement(react_1.default.Fragment, null,
173
+ react_1.default.createElement("div", { className: "w-full md:w-2/12 flex flex-col gap-y-2.5" },
174
+ (internalPortal && csmUserGroup) || (!internalPortal && !csmUserGroup) && !clientPortal ? react_1.default.createElement(react_1.default.Fragment, null,
175
+ react_1.default.createElement("h1", { className: "text-[#64748B] text-md font-bold" }, "Actions"),
176
+ checkStartDate ?
177
+ react_1.default.createElement(core_1.Tooltip, { classes: { tooltip: classes.tooltip }, title: activeProject && "The project has not started yet. Request to change the project start date to the current date in order to edit the project end date.", placement: "top", arrow: true }, upcomingProject ? react_1.default.createElement("div", null,
178
+ react_1.default.createElement(base_ui_1.Button, { label: "LOG YOUR TIME", disabled: true, size: "sm", color: "primary", className: "w-full", onClick: () => { setShowTimeModal(true); } }))
179
+ : react_1.default.createElement("div", null,
180
+ react_1.default.createElement(base_ui_1.Button, { label: "LOG YOUR TIME", disabled: checkStartDate || !activeProject, size: "sm", color: "primary", className: "w-full", onClick: () => { setShowTimeModal(true); } })))
181
+ :
182
+ react_1.default.createElement(core_1.Tooltip, { classes: { tooltip: classes.tooltip }, title: (projectType === "One-time-Fixed" || projectType === "Recurring-Fixed") ? "Please reach out to your Customer Success Manager if you would like to submit time for Fixed Projects." : "", placement: "top", arrow: true },
183
+ react_1.default.createElement("div", null,
184
+ react_1.default.createElement(base_ui_1.Button, { label: "LOG YOUR TIME", disabled: !activeProject, size: "sm", color: "primary", className: "w-full", onClick: () => { setShowTimeModal(true); } }))),
185
+ upcomingProject ? react_1.default.createElement(base_ui_1.Button, { label: "EDIT START DATE", disabled: false, size: "sm", className: "w-full", onClick: () => { setEditStartDate(true); } }) :
186
+ react_1.default.createElement(base_ui_1.Button, { label: "EDIT START DATE", disabled: !activeProject, size: "sm", className: "w-full", onClick: () => { setEditStartDate(true); } }),
187
+ checkStartDate ?
188
+ react_1.default.createElement(core_1.Tooltip, { classes: { tooltip: classes.tooltip }, title: activeProject && "The project has not started yet, please wait until the project start date to request a change to edit the end date.", placement: "top", arrow: true }, upcomingProject ? react_1.default.createElement("div", null,
189
+ react_1.default.createElement(base_ui_1.Button, { label: "EDIT END DATE", disabled: true, size: "sm", className: "w-full", onClick: () => { setEditEndDate(true); } })) :
190
+ react_1.default.createElement("div", null,
191
+ react_1.default.createElement(base_ui_1.Button, { label: "EDIT END DATE", disabled: checkStartDate || !activeProject, size: "sm", className: "w-full", onClick: () => { setEditEndDate(true); } })))
192
+ :
193
+ react_1.default.createElement(base_ui_1.Button, { label: "EDIT END DATE", disabled: !activeProject, size: "sm", className: "w-full", onClick: () => { setEditEndDate(true); } }),
194
+ react_1.default.createElement(base_ui_1.Button, { label: "END PROJECT", disabled: selectedTab === 2 || selectedTab === 3 || selectedTab === 4, size: "sm", className: "w-full", onClick: () => { setShowConfirmationModal(true); } }),
195
+ react_1.default.createElement(base_ui_1.Button, { label: "VIEW SOW", size: "sm", disabled: !sow, className: "w-full", onClick: () => window.open(`/contract/${project === null || project === void 0 ? void 0 : project.contractId}`, '_blank') }),
196
+ !internalPortal && react_1.default.createElement(base_ui_1.Button, { label: "DOWNLOAD SOW", size: "sm", disabled: !sowId, className: "w-full", onClick: () => { downloadSow(project === null || project === void 0 ? void 0 : project.scopeOfWorkId); }, isLoading: sowLoading }),
197
+ (selectedTab === 0 || selectedTab === 1 || selectedTab === 4) && isRequestReviewEnabled && !internalPortal &&
198
+ react_1.default.createElement(base_ui_1.Button, { label: requestReviewButtonLabel(), disabled: requestReviewButtonLabel() !== 'Request Review', size: "sm", className: "w-full", onClick: () => setRequestModal(true), isLoading: sowLoading })) : null,
199
+ clientPortal && react_1.default.createElement(react_1.default.Fragment, null,
200
+ react_1.default.createElement("h1", { className: "text-[#64748B] text-md font-bold" }, "Actions"),
201
+ react_1.default.createElement(base_ui_1.Button, { label: signedSow ? "DOWNLOAD SOW" : "SIGN SOW", size: "sm", disabled: !sowId, className: "w-full", onClick: () => { downloadSow(project === null || project === void 0 ? void 0 : project.scopeOfWorkId); }, isLoading: sowLoading }),
202
+ signedSow &&
203
+ react_1.default.createElement(base_ui_1.Button, { label: "SUBMIT REVIEW", disabled: requestReviewButtonLabel() !== 'Request Review', size: "sm", className: "w-full", onClick: () => setRequestModal(true), isLoading: sowLoading })),
204
+ react_1.default.createElement("div", { className: "gap-y-1 mt-4" },
205
+ react_1.default.createElement("div", { className: "flex flex-row justify-between" },
206
+ react_1.default.createElement("h1", { className: "font-bold text-lg mb-2" }, clientPortal ? "AE Information" : "Client Contact"),
207
+ react_1.default.createElement("button", { onClick: () => { setExpandClient(!expandClient); }, className: "font-bold text-md mb-2" }, expandClient ? react_1.default.createElement(base_icons_1.IconChevronUp, null) : react_1.default.createElement(base_icons_1.IconChevronDown, null))),
208
+ expandClient && react_1.default.createElement("div", { className: "m-1 overflow-auto" },
209
+ react_1.default.createElement("p", null, (_g = project === null || project === void 0 ? void 0 : project.client) === null || _g === void 0 ? void 0 : _g.name),
210
+ react_1.default.createElement("p", null, (_h = project === null || project === void 0 ? void 0 : project.client) === null || _h === void 0 ? void 0 : _h.clientEmail),
211
+ react_1.default.createElement("p", null, (_k = ((_j = project === null || project === void 0 ? void 0 : project.client) === null || _j === void 0 ? void 0 : _j.clientPhone)) === null || _k === void 0 ? void 0 : _k.replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3")))),
212
+ react_1.default.createElement("div", { className: "gap-y-1 mt-4" },
213
+ react_1.default.createElement("div", { className: "flex flex-row justify-between" },
214
+ react_1.default.createElement("h1", { className: "font-bold text-lg mb-2" }, "Paro Support"),
215
+ react_1.default.createElement("button", { onClick: () => { setExpandSupport(!expandSupport); }, className: "font-bold text-md mb-2" }, expandSupport ? react_1.default.createElement(base_icons_1.IconChevronUp, null) : react_1.default.createElement(base_icons_1.IconChevronDown, null))),
216
+ expandSupport && react_1.default.createElement(react_1.default.Fragment, null,
217
+ react_1.default.createElement("b", null, "Customer Success Manager"),
218
+ react_1.default.createElement("div", { className: "m-1 overflow-auto" },
219
+ react_1.default.createElement("p", null, ((_m = (_l = project === null || project === void 0 ? void 0 : project.paroContact) === null || _l === void 0 ? void 0 : _l.firstName) !== null && _m !== void 0 ? _m : '') + ' ' + ((_p = (_o = project === null || project === void 0 ? void 0 : project.paroContact) === null || _o === void 0 ? void 0 : _o.lastName) !== null && _p !== void 0 ? _p : '')),
220
+ react_1.default.createElement("a", { href: `mailto:${(_q = project === null || project === void 0 ? void 0 : project.paroContact) === null || _q === void 0 ? void 0 : _q.email}`, className: "underline text-[#1878BD]" }, (_r = project === null || project === void 0 ? void 0 : project.paroContact) === null || _r === void 0 ? void 0 : _r.email),
221
+ react_1.default.createElement("p", null, (_s = project === null || project === void 0 ? void 0 : project.paroContact) === null || _s === void 0 ? void 0 : _s.phone)),
222
+ react_1.default.createElement(base_ui_1.Button, { label: "CONTACT SUPPORT", size: "sm", className: "max-w-max mt-2", onClick: () => setEmailModal(true) })))),
223
+ react_1.default.createElement(LogTimeModalAuthenticated_1.LogTimeModalAuthenticated, { project: project, freelancerId: freelancerId, showTimeModal: showTimeModal, setShowTimeModal: setShowTimeModal, validateDate: validateDate, setIsDateInvalid: setIsDateInvalid, isDateInvalid: isDateInvalid, setSingleProjectData: setSingleProjectData, projectData: projectData, selectedTab: selectedTab, isAuthenticated: isAuthenticated, submitProjectHoursMutation: submitProjectHoursMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, getAuth0Roles: getAuth0Roles, submitProjectHoursLambda: submitProjectHoursLambda, user: user }),
224
+ react_1.default.createElement(EditDateModal_1.EditDateModal, { freelancerId: freelancerId, freelancerEmail: freelancerEmail, project: project, previousDate: project === null || project === void 0 ? void 0 : project.startDate, editDate: editStartDate, setEditDate: setEditStartDate, validateDate: validateDate, setIsDateInvalid: setIsDateInvalid, isDateInvalid: isDateInvalid, changeType: "start", expertName: expertName, isAuthenticated: isAuthenticated, selectedTab: selectedTab, createChangeRequestMutation: createChangeRequestMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, createChangeRequest: createChangeRequest, isTestEnv: isTestEnv }),
225
+ react_1.default.createElement(EditDateModal_1.EditDateModal, { freelancerId: freelancerId, freelancerEmail: freelancerEmail, project: project, previousDate: project === null || project === void 0 ? void 0 : project.endDate, editDate: editEndDate, setEditDate: setEditEndDate, validateDate: validateDate, setIsDateInvalid: setIsDateInvalid, isDateInvalid: isDateInvalid, changeType: "end", expertName: expertName, isAuthenticated: isAuthenticated, selectedTab: selectedTab, createChangeRequestMutation: createChangeRequestMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, createChangeRequest: createChangeRequest, isTestEnv: isTestEnv }),
226
+ react_1.default.createElement(EndProjectModal_1.EndProjectModal, { freelancerId: freelancerId, project: project, expertName: expertName, showConfirmationModal: showConfirmationModal, setShowConfirmationModal: setShowConfirmationModal, projectType: projectType, isAuthenticated: isAuthenticated, selectedTab: selectedTab, projectTagsMap: projectTagsMap, updateProjectStatusMutation: updateProjectStatusMutation, GetAllProjectIrprDetailsForFreelancerDocument: GetAllProjectIrprDetailsForFreelancerDocument, updateParoProjectTagsMutation: updateParoProjectTagsMutation, GetParoProjectsDocument: GetParoProjectsDocument, updateProjectTagReviewStatusMutation: updateProjectTagReviewStatusMutation, updateProjectStatus: updateProjectStatus, updateProjectTags: updateProjectTags }),
227
+ react_1.default.createElement(EmailModal_1.EmailModal, { emailModal: emailModal, setEmailModal: setEmailModal, emailText: emailText, setEmailText: setEmailText, setTicketModal: setTicketModal, project: project, expertName: expertName, sendParoSupportEmail: sendParoSupportEmail, isTestEnv: isTestEnv }),
228
+ react_1.default.createElement(TicketModal, { ticketModal: ticketModal, setTicketModal: setTicketModal }),
229
+ react_1.default.createElement(ReviewRequestModal_1.ReviewRequestModal, { project: project, requestModal: requestModal, setRequestModal: setRequestModal, expertName: expertName, freelancerId: freelancerId, setRequestStatus: setRequestStatus, createOrUpdateRatingRequestMutation: createOrUpdateRatingRequestMutation })));
230
+ };
231
+ exports.RightCardUI = RightCardUI;
@@ -1 +1 @@
1
- export { EarningsTracker } from './EarningsTracker';
1
+ export { EarningsTracker } from './EarningsTracker';
@@ -1,5 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EarningsTracker = void 0;
4
- var EarningsTracker_1 = require("./EarningsTracker");
5
- Object.defineProperty(exports, "EarningsTracker", { enumerable: true, get: function () { return EarningsTracker_1.EarningsTracker; } });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EarningsTracker = void 0;
4
+ var EarningsTracker_1 = require("./EarningsTracker");
5
+ Object.defineProperty(exports, "EarningsTracker", { enumerable: true, get: function () { return EarningsTracker_1.EarningsTracker; } });
@@ -11,12 +11,12 @@ const CopyToClipboardAlert_1 = __importDefault(require("../shared/CopyToClipboar
11
11
  const colors_1 = __importDefault(require("../ClientReferencesSection/constants/colors"));
12
12
  const Banner_1 = __importDefault(require("./Banner"));
13
13
  const base_icons_1 = require("@paro.io/base-icons");
14
- const StyledButton = (0, styled_components_1.default)(core_1.Button) `
15
- margin: 0px !important;
16
- padding: 26px 0 18px 0 !important;
17
- span {
18
- color: ${colors_1.default.buttonText} !important
19
- }
14
+ const StyledButton = (0, styled_components_1.default)(core_1.Button) `
15
+ margin: 0px !important;
16
+ padding: 26px 0 18px 0 !important;
17
+ span {
18
+ color: ${colors_1.default.buttonText} !important
19
+ }
20
20
  `;
21
21
  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 },
22
22
  react_1.default.createElement(core_1.IconButton, { "aria-label": ariaLabel, onClick: onClick },
@@ -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, setOpen, paroProjectsData, getUserDocument, uploadUserPhotoMutation, loadingNewImage, imageUpdateError, isInternal, getUserByEmail, updateUserEmail, updateUserMutation, getUserByEmailLazyQuery, updateUserPassword, verifyUserPassword, getExpertRates, paroTenure, hourlyRate, }) => {
65
65
  var _a;
@@ -121,6 +121,15 @@ const ProfileSection = ({ legacyFreelancerId, imageUrl, shouldAllowEditProfile,
121
121
  " Reviews")))),
122
122
  react_1.default.createElement(core_1.Box, { mt: 1, mb: 1 },
123
123
  react_1.default.createElement(core_1.Divider, null))),
124
+ react_1.default.createElement(core_1.Box, { ml: 1, display: "flex", justifyContent: "space-between", alignItems: "center", "data-testid": "Matching-Id", style: { marginRight: '10px' } },
125
+ react_1.default.createElement(core_1.Typography, { variant: "body2" }, "Paro Tenure"),
126
+ react_1.default.createElement("b", null, paroTenure.length > 0 ? paroTenure : "N/A")),
127
+ react_1.default.createElement(core_1.Box, { ml: 1, mt: 1, display: "flex", justifyContent: "space-between", alignItems: "center", "data-testid": "Matching-Id", style: { marginRight: '10px' } },
128
+ react_1.default.createElement(core_1.Typography, { variant: "body2" }, isInternal ? 'Hourly Expert Rate' : 'Hourly Rate'),
129
+ react_1.default.createElement("b", null, hourlyRate > 0 ? `$ ${hourlyRate.toLocaleString()}` : "N/A")),
130
+ isInternal && react_1.default.createElement(core_1.Box, { ml: 1, mt: 1, display: "flex", justifyContent: "space-between", alignItems: "center", "data-testid": "Matching-Id", style: { marginRight: '10px' } },
131
+ react_1.default.createElement(core_1.Typography, { variant: "body2" }, "Hourly Client Rate"),
132
+ react_1.default.createElement("b", null, hourlyRate > 0 ? `$ ${(hourlyRate * 2).toLocaleString()}` : "N/A")),
124
133
  react_1.default.createElement(core_1.Box, { mt: 2, mb: 1 }),
125
134
  (rates === null || rates === void 0 ? void 0 : rates.length) > 0 && (react_1.default.createElement(react_1.default.Fragment, null,
126
135
  react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: 'row', justifyContent: 'space-evenly' },
@@ -6,7 +6,6 @@ interface DecisionSectionProps {
6
6
  getClientInvoiceSummaryByMonth: any;
7
7
  invoiceSummary: any;
8
8
  updateClientInvoiceDisputeMutation: any;
9
- addClientCredit: any;
10
9
  }
11
- export declare const DecisionSection: ({ dispute, onUpdateDispute, updateInvoiceMutation, updateClientInvoiceDisputeMutation, invoiceSummary, user, getClientInvoiceSummaryByMonth, addClientCredit }: DecisionSectionProps) => JSX.Element;
10
+ export declare const DecisionSection: ({ dispute, onUpdateDispute, updateInvoiceMutation, updateClientInvoiceDisputeMutation, invoiceSummary, user, getClientInvoiceSummaryByMonth, }: DecisionSectionProps) => JSX.Element;
12
11
  export {};