@paro.io/expert-shared-components 1.14.1 → 1.14.2

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 (79) 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/Escalations/CustomTag.d.ts +3 -3
  44. package/lib/components/Escalations/CustomTag.js +25 -25
  45. package/lib/components/Escalations/ViewReponseModal.d.ts +8 -8
  46. package/lib/components/Escalations/ViewReponseModal.js +27 -27
  47. package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
  48. package/lib/components/ExpertProfileHeader/NetworkSection.js +1 -1
  49. package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
  50. package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
  51. package/lib/components/Invoices/TestDecisionSection.js +126 -126
  52. package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
  53. package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
  54. package/lib/components/OrganizationChart/PersonCard.js +5 -5
  55. package/lib/components/OrganizationChart/utils.js +79 -79
  56. package/lib/components/ProjectCard/ProgressBar.js +4 -4
  57. package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
  58. package/lib/components/ProjectIntelligence/EngagementHeader/index.js +1 -1
  59. package/lib/components/ProjectIntelligence/FocusAreas/index.js +3 -3
  60. package/lib/components/ProjectIntelligence/KeyMetrics/index.js +4 -4
  61. package/lib/components/ProjectIntelligence/MissingInformation/index.d.ts +1 -0
  62. package/lib/components/ProjectIntelligence/MissingInformation/index.js +8 -8
  63. package/lib/components/ProjectIntelligence/ProgressTracker/index.js +1 -1
  64. package/lib/components/ProjectIntelligence/ProjectHealth/index.js +2 -2
  65. package/lib/components/ProjectIntelligence/TeamSection/index.js +3 -3
  66. package/lib/components/ProjectIntelligence/index.d.ts +1 -0
  67. package/lib/components/ProjectIntelligence/index.js +3 -3
  68. package/lib/components/Reviews/Pagination.js +6 -6
  69. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  70. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  71. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  72. package/lib/components/shared/Image.js +13 -13
  73. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  74. package/lib/components/shared/ProfileTextField.js +16 -16
  75. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  76. package/lib/components/shared/StyledActionButtons.js +15 -15
  77. package/lib/components/shared/ToastNotification.d.ts +10 -10
  78. package/lib/components/shared/ToastNotification.js +63 -63
  79. package/package.json +67 -67
@@ -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; } });
@@ -1,3 +1,3 @@
1
- import React from 'react';
2
- declare const CustomTag: (label: any) => React.JSX.Element;
3
- export default CustomTag;
1
+ import React from 'react';
2
+ declare const CustomTag: (label: any) => React.JSX.Element;
3
+ export default CustomTag;
@@ -1,25 +1,25 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = __importDefault(require("react"));
7
- const getBackgroundColor = (type) => {
8
- switch (type) {
9
- case 'Critical':
10
- return 'danger';
11
- case 'High':
12
- return 'warning';
13
- case 'Medium':
14
- return 'info';
15
- case 'Low':
16
- return 'default';
17
- default:
18
- return 'default';
19
- }
20
- };
21
- const CustomTag = (label) => {
22
- const color = getBackgroundColor(label);
23
- return (react_1.default.createElement("div", { className: `border box-border text-center px-4 pb-0.5 pt-1 text-sm inline-block break-words text-white cursor-pointer rounded-full bg-${color} border-${color}` }, label));
24
- };
25
- exports.default = CustomTag;
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 getBackgroundColor = (type) => {
8
+ switch (type) {
9
+ case 'Critical':
10
+ return 'danger';
11
+ case 'High':
12
+ return 'warning';
13
+ case 'Medium':
14
+ return 'info';
15
+ case 'Low':
16
+ return 'default';
17
+ default:
18
+ return 'default';
19
+ }
20
+ };
21
+ const CustomTag = (label) => {
22
+ const color = getBackgroundColor(label);
23
+ return (react_1.default.createElement("div", { className: `border box-border text-center px-4 pb-0.5 pt-1 text-sm inline-block break-words text-white cursor-pointer rounded-full bg-${color} border-${color}` }, label));
24
+ };
25
+ exports.default = CustomTag;
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
- declare const ViewResponseModal: ({ response, open, onClose, isExpert }: {
3
- response: string | null;
4
- open: boolean;
5
- onClose: () => void;
6
- isExpert: boolean;
7
- }) => React.JSX.Element;
8
- export default ViewResponseModal;
1
+ import React from 'react';
2
+ declare const ViewResponseModal: ({ response, open, onClose, isExpert }: {
3
+ response: string | null;
4
+ open: boolean;
5
+ onClose: () => void;
6
+ isExpert: boolean;
7
+ }) => React.JSX.Element;
8
+ export default ViewResponseModal;