@paro.io/expert-shared-components 1.14.3 → 1.14.5

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 (69) 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/ProfileSection.js +7 -7
  49. package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
  50. package/lib/components/Invoices/TestDecisionSection.js +126 -126
  51. package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
  52. package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
  53. package/lib/components/OrganizationChart/PersonCard.js +5 -5
  54. package/lib/components/OrganizationChart/utils.js +79 -79
  55. package/lib/components/ProjectCard/ProgressBar.js +4 -4
  56. package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
  57. package/lib/components/ProjectIntelligence/MissingInformation/index.js +3 -3
  58. package/lib/components/Reviews/Pagination.js +6 -6
  59. package/lib/components/ReviewsTab/RatingHeader.js +6 -6
  60. package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
  61. package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
  62. package/lib/components/shared/Image.js +13 -13
  63. package/lib/components/shared/ProfileTextField.d.ts +18 -18
  64. package/lib/components/shared/ProfileTextField.js +16 -16
  65. package/lib/components/shared/StyledActionButtons.d.ts +7 -7
  66. package/lib/components/shared/StyledActionButtons.js +15 -15
  67. package/lib/components/shared/ToastNotification.d.ts +10 -10
  68. package/lib/components/shared/ToastNotification.js +63 -63
  69. package/package.json +67 -67
@@ -1,350 +1,350 @@
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.DocumentTable = void 0;
39
- const react_1 = __importStar(require("react"));
40
- const core_1 = require("@material-ui/core");
41
- const Pagination_1 = __importDefault(require("../Reviews/Pagination"));
42
- const DocumentUploadRow_1 = require("./DocumentUploadRow");
43
- const base_icons_1 = require("@paro.io/base-icons");
44
- const base_ui_1 = require("@paro.io/base-ui");
45
- const useStyles = (0, core_1.makeStyles)({
46
- tableCell: {
47
- whiteSpace: 'normal',
48
- border: '1px solid #E2E8F0',
49
- padding: '10px'
50
- },
51
- tableRow: {
52
- height: 40
53
- },
54
- container: {
55
- overflow: 'auto',
56
- padding: 10,
57
- width: '100%',
58
- borderRadius: '12px',
59
- margin: '12px'
60
- },
61
- tableCellBorder: {
62
- whiteSpace: 'nowrap',
63
- border: '1px solid #E2E8F0'
64
- },
65
- shade: {
66
- backgroundColor: '#D9EFEF'
67
- }
68
- });
69
- const headCells = [
70
- {
71
- id: 'fileName',
72
- label: 'File Name',
73
- },
74
- {
75
- id: 'docType',
76
- label: 'Document Type',
77
- },
78
- {
79
- id: 'docSize',
80
- label: 'Document Size',
81
- },
82
- {
83
- id: 'clientName',
84
- label: 'Client Name',
85
- },
86
- {
87
- id: 'projectName',
88
- label: 'Project Name',
89
- },
90
- {
91
- id: 'projectStatus',
92
- label: 'Project Status',
93
- },
94
- {
95
- id: 'uploadedDate',
96
- label: 'Uploaded Date',
97
- },
98
- {
99
- id: 'uploadedBy',
100
- label: 'Uploaded By',
101
- },
102
- {
103
- id: 'lastViewed',
104
- label: 'Last Viewed',
105
- },
106
- ];
107
- function descendingComparator(a, b, orderBy) {
108
- var _a, _b, _c, _d, _e, _f;
109
- // Check for orderBy being 'projectDuration', we will compare docSize if 'docSize' is passed
110
- if (orderBy === 'docSize') {
111
- //@ts-ignore
112
- const sizeA = (_a = a === null || a === void 0 ? void 0 : a.docSize) !== null && _a !== void 0 ? _a : 0;
113
- //@ts-ignore
114
- const sizeB = (_b = b === null || b === void 0 ? void 0 : b.docSize) !== null && _b !== void 0 ? _b : 0;
115
- if (sizeB < sizeA) {
116
- return -1;
117
- }
118
- if (sizeB > sizeA) {
119
- return 1;
120
- }
121
- return 0;
122
- }
123
- else if (orderBy === 'uploadedDate' || orderBy === 'lastViewed') {
124
- // For 'uploadedDate' and 'lastViewed', we assume they're strings or date strings
125
- //@ts-ignore
126
- const dateA = a === null || a === void 0 ? void 0 : a[orderBy];
127
- //@ts-ignore
128
- const dateB = b === null || b === void 0 ? void 0 : b[orderBy];
129
- //@ts-ignore
130
- if (dateB < dateA) {
131
- return -1;
132
- }
133
- //@ts-ignore
134
- if (dateB > dateA) {
135
- return 1;
136
- }
137
- return 0;
138
- }
139
- else if (orderBy === 'clientName') {
140
- // For clientName, do normal string comparison
141
- //@ts-ignore
142
- const clientA = (_c = a === null || a === void 0 ? void 0 : a.clientName) !== null && _c !== void 0 ? _c : "";
143
- //@ts-ignore
144
- const clientB = (_d = b === null || b === void 0 ? void 0 : b.clientName) !== null && _d !== void 0 ? _d : "";
145
- if (clientB < clientA) {
146
- return -1;
147
- }
148
- if (clientB > clientA) {
149
- return 1;
150
- }
151
- return 0;
152
- }
153
- else if (orderBy === 'fileName' || orderBy === 'docType' || orderBy === 'projectName' || orderBy === 'uploadedBy') {
154
- // For string-based comparisons (e.g., fileName, docType, projectName, uploadedBy)
155
- //@ts-ignore
156
- const valueA = (_e = a === null || a === void 0 ? void 0 : a[orderBy]) !== null && _e !== void 0 ? _e : "";
157
- //@ts-ignore
158
- const valueB = (_f = b === null || b === void 0 ? void 0 : b[orderBy]) !== null && _f !== void 0 ? _f : "";
159
- if (valueB < valueA) {
160
- return -1;
161
- }
162
- if (valueB > valueA) {
163
- return 1;
164
- }
165
- return 0;
166
- }
167
- else {
168
- // General case for other properties
169
- //@ts-ignore
170
- const selectedColumnA = a === null || a === void 0 ? void 0 : a[orderBy];
171
- //@ts-ignore
172
- const selectedColumnB = b === null || b === void 0 ? void 0 : b[orderBy];
173
- if (selectedColumnA === 'N/A' && selectedColumnB !== 'N/A') {
174
- return 1;
175
- }
176
- if (selectedColumnA !== 'N/A' && selectedColumnB === 'N/A') {
177
- return -1;
178
- }
179
- if (selectedColumnB === undefined) {
180
- return -1;
181
- }
182
- if (selectedColumnA === undefined) {
183
- return 1;
184
- }
185
- //@ts-ignore
186
- if (selectedColumnB < selectedColumnA) {
187
- return -1;
188
- }
189
- //@ts-ignore
190
- if (selectedColumnB > selectedColumnA) {
191
- return 1;
192
- }
193
- return 0;
194
- }
195
- }
196
- function getComparator(order, orderBy) {
197
- return order === 'desc'
198
- ? (a, b) => descendingComparator(a, b, orderBy)
199
- : (a, b) => -descendingComparator(a, b, orderBy);
200
- }
201
- function stableSort(array, comparator) {
202
- const stabilizedThis = array.map((el, index) => [el, index]);
203
- stabilizedThis.sort((a, b) => {
204
- const order = comparator(a[0], b[0]);
205
- if (order !== 0) {
206
- return order;
207
- }
208
- return a[1] - b[1];
209
- });
210
- return stabilizedThis.map((el) => el[0]);
211
- }
212
- const DocumentTable = ({ legacyFreelancerId, paroProjectsData, expiryDate, expertFiles, uploadExpertClientFiles, uploadFileData, deleteFileMutation, updateFreelancerExpiryMutation, GetFilesDocument, foldername, paroDocuments }) => {
213
- const classes = useStyles();
214
- const [order, setOrder] = react_1.default.useState('asc');
215
- const [orderBy, setOrderBy] = react_1.default.useState('lastViewed');
216
- const [currentPage, setCurrentPage] = (0, react_1.useState)(1);
217
- const [perPageItems, setPerPageItems] = (0, react_1.useState)(10);
218
- const [files, setFiles] = (0, react_1.useState)(paroProjectsData);
219
- const [documentName, setDocumentName] = (0, react_1.useState)('');
220
- const [clientAndProject, setClientAndProject] = (0, react_1.useState)('');
221
- const [docType, setDocType] = (0, react_1.useState)('');
222
- const [searchText, setSearchText] = (0, react_1.useState)('');
223
- const [downloadFilename, setDownloadFilename] = (0, react_1.useState)('');
224
- const [apiFoldername, setApiFoldername] = (0, react_1.useState)('');
225
- const [isDeleteModalOpen, setDeleteModalOpen] = (0, react_1.useState)(false);
226
- const [deleteFileName, setDeleteFileName] = (0, react_1.useState)('');
227
- const [insuranceExpiryDate, setInsuranceExpiryDate] = (0, react_1.useState)(expiryDate);
228
- const firstItem = (currentPage - 1) * perPageItems;
229
- const lastItem = (currentPage - 1) * perPageItems + perPageItems;
230
- const tableData = files === null || files === void 0 ? void 0 : files.map((file) => {
231
- return {
232
- fileName: (file === null || file === void 0 ? void 0 : file.fileName) || "-", // Assuming there's a `fileName` property in `project`
233
- docType: (file === null || file === void 0 ? void 0 : file.docType) || "-", // Assuming there's a `docType` property in `project`
234
- docSize: (file === null || file === void 0 ? void 0 : file.docSize) || 0, // Assuming there's a `docSize` property in `project`
235
- clientName: file.clientName || "-", // Mapping from project.client.name
236
- projectName: file.projectName, // Mapping from project.name
237
- projectStatus: file.projectStatus,
238
- uploadedDate: file.uploadedDate, // Assuming there's an `uploadedDate` property
239
- uploadedBy: file.uploadedBy || "-", // Assuming there's an `uploadedBy` property
240
- lastViewed: file.lastViewed, // Assuming there's a `lastViewed` property
241
- };
242
- });
243
- (0, react_1.useEffect)(() => {
244
- const sortByTextProjects = searchText === ''
245
- ? paroProjectsData
246
- : paroProjectsData.filter((p) => {
247
- var _a, _b, _c;
248
- return ((_a = p === null || p === void 0 ? void 0 : p.clientName) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchText.toLowerCase())) ||
249
- (((_b = p === null || p === void 0 ? void 0 : p.projectName) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(searchText.toLowerCase())) ||
250
- ((_c = p === null || p === void 0 ? void 0 : p.fileName) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes(searchText.toLowerCase())));
251
- });
252
- setFiles(sortByTextProjects);
253
- }, [searchText]);
254
- const handleRequestSort = (event, property) => {
255
- const isDesc = orderBy === property && order === 'desc';
256
- setOrder(isDesc ? 'asc' : 'desc');
257
- setOrderBy(property);
258
- };
259
- const createSortHandler = (property) => (event) => {
260
- handleRequestSort(event, property);
261
- };
262
- const handleDelete = () => {
263
- if (apiFoldername.split('/')[1] === 'EO Insurance') {
264
- updateFreelancerExpiryMutation({
265
- variables: {
266
- id: legacyFreelancerId,
267
- },
268
- })
269
- .catch((err) => { console.log(`Error deleting insurance from freelancer table ${err}`); });
270
- setInsuranceExpiryDate('');
271
- }
272
- deleteFileMutation({
273
- variables: {
274
- input: {
275
- foldername: apiFoldername,
276
- filename: deleteFileName,
277
- },
278
- },
279
- refetchQueries: [{ query: GetFilesDocument, variables: { input: { foldername } } }],
280
- })
281
- .then(() => {
282
- toggleDeleteModal(deleteFileName);
283
- })
284
- .catch((err) => {
285
- toggleDeleteModal(deleteFileName);
286
- console.log(`Error deleting file ${err}`);
287
- });
288
- };
289
- const handleDownloadFile = (name) => __awaiter(void 0, void 0, void 0, function* () {
290
- if (name && name.filename && name.filename.trim().length > 0) {
291
- setDownloadFilename(name.filename.split('/').pop());
292
- const segments = name.filename.split('/');
293
- setApiFoldername(segments.slice(0, segments.length - 1).join('/'));
294
- }
295
- });
296
- const toggleDeleteModal = (name) => {
297
- setDeleteModalOpen(!isDeleteModalOpen);
298
- if (name && name.filename && name.filename.trim().length > 0) {
299
- setDeleteFileName(name.filename.split('/').pop());
300
- const segments = name.filename.split('/');
301
- setApiFoldername(segments.slice(0, segments.length - 1).join('/'));
302
- }
303
- };
304
- return (react_1.default.createElement(core_1.Paper, { className: classes.container },
305
- react_1.default.createElement(DocumentUploadRow_1.DocumentUploadRow, { documentName: documentName, setDocumentName: setDocumentName, clientAndProject: clientAndProject, setClientAndProject: setClientAndProject, docType: docType, setDocType: setDocType, searchText: searchText, setSearchText: setSearchText }),
306
- react_1.default.createElement(core_1.Box, { mt: 2 },
307
- react_1.default.createElement(core_1.Table, { style: { overflow: 'auto' } },
308
- react_1.default.createElement(core_1.TableHead, null,
309
- react_1.default.createElement(core_1.TableRow, { className: [classes.tableCellBorder, classes.shade].join(" ") },
310
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }),
311
- headCells.map((headCell) => (react_1.default.createElement(core_1.TableCell, { key: headCell.id, sortDirection: orderBy === headCell.id ? order : false, align: "center", className: classes.tableCell },
312
- react_1.default.createElement(core_1.TableSortLabel, { active: orderBy === headCell.id, direction: orderBy === headCell.id ? order : 'asc', onClick: createSortHandler(headCell.id) },
313
- react_1.default.createElement("div", { className: "flex flex-row items-center gap-x-1" },
314
- react_1.default.createElement("div", { className: "flex flex-col justify-center items-center" },
315
- react_1.default.createElement("b", null, headCell.label)),
316
- orderBy === headCell.id && null))))),
317
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }))),
318
- react_1.default.createElement(core_1.TableBody, null, stableSort(tableData, getComparator(order, orderBy)).slice(firstItem, lastItem).map((row, index) => {
319
- const { fileName, docType, docSize, clientName, projectName, projectStatus, uploadedDate, uploadedBy, lastViewed } = row;
320
- return (react_1.default.createElement(core_1.TableRow, { key: index },
321
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, index + 1),
322
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, fileName),
323
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, docType),
324
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, docSize),
325
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, clientName),
326
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, projectName),
327
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, projectStatus),
328
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, uploadedDate),
329
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, uploadedBy),
330
- react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, lastViewed),
331
- react_1.default.createElement(core_1.TableCell, { className: "flex items-center gap-x-4" },
332
- react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justify: "space-between", alignItems: "center" },
333
- react_1.default.createElement(core_1.IconButton, { onClick: () => __awaiter(void 0, void 0, void 0, function* () { return handleDownloadFile(name); }) },
334
- react_1.default.createElement(base_icons_1.IconDocumentDownload, { size: "sm" })),
335
- react_1.default.createElement(core_1.IconButton, { onClick: () => toggleDeleteModal(name) },
336
- react_1.default.createElement(base_icons_1.IconTrash, { size: "sm" }))))));
337
- })))),
338
- react_1.default.createElement(core_1.Box, { m: 2 },
339
- react_1.default.createElement(Pagination_1.default, { total: paroProjectsData === null || paroProjectsData === void 0 ? void 0 : paroProjectsData.length, currentPage: currentPage, setCurrentPage: setCurrentPage, perPageItems: perPageItems, setPerPageItems: setPerPageItems, displayText: "projects" })),
340
- react_1.default.createElement(base_ui_1.Modal, { variant: base_ui_1.ModalVariant.transactional, label: "Delete Document?", color: "danger", open: isDeleteModalOpen, onClose: () => { setDeleteModalOpen(!isDeleteModalOpen); }, icon: "danger", iconCustom: react_1.default.createElement(base_icons_1.IconExclamation, null), size: "md", onPrimaryButtonClickHandler: handleDelete }, apiFoldername.split('/')[1] !== "EO Insurance" ? (react_1.default.createElement(react_1.default.Fragment, null,
341
- "Are you sure you want to delete document ",
342
- react_1.default.createElement("strong", null, deleteFileName),
343
- "? If you continue, this document will no longer be available.")) : (react_1.default.createElement(react_1.default.Fragment, null,
344
- "Are you sure you want to delete Insurance document ",
345
- react_1.default.createElement("strong", null, deleteFileName),
346
- "? ",
347
- react_1.default.createElement("strong", null, "Note:"),
348
- " You hold only one insurance document. Deleting it might effect your 'Matching'.")))));
349
- };
350
- exports.DocumentTable = DocumentTable;
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.DocumentTable = void 0;
39
+ const react_1 = __importStar(require("react"));
40
+ const core_1 = require("@material-ui/core");
41
+ const Pagination_1 = __importDefault(require("../Reviews/Pagination"));
42
+ const DocumentUploadRow_1 = require("./DocumentUploadRow");
43
+ const base_icons_1 = require("@paro.io/base-icons");
44
+ const base_ui_1 = require("@paro.io/base-ui");
45
+ const useStyles = (0, core_1.makeStyles)({
46
+ tableCell: {
47
+ whiteSpace: 'normal',
48
+ border: '1px solid #E2E8F0',
49
+ padding: '10px'
50
+ },
51
+ tableRow: {
52
+ height: 40
53
+ },
54
+ container: {
55
+ overflow: 'auto',
56
+ padding: 10,
57
+ width: '100%',
58
+ borderRadius: '12px',
59
+ margin: '12px'
60
+ },
61
+ tableCellBorder: {
62
+ whiteSpace: 'nowrap',
63
+ border: '1px solid #E2E8F0'
64
+ },
65
+ shade: {
66
+ backgroundColor: '#D9EFEF'
67
+ }
68
+ });
69
+ const headCells = [
70
+ {
71
+ id: 'fileName',
72
+ label: 'File Name',
73
+ },
74
+ {
75
+ id: 'docType',
76
+ label: 'Document Type',
77
+ },
78
+ {
79
+ id: 'docSize',
80
+ label: 'Document Size',
81
+ },
82
+ {
83
+ id: 'clientName',
84
+ label: 'Client Name',
85
+ },
86
+ {
87
+ id: 'projectName',
88
+ label: 'Project Name',
89
+ },
90
+ {
91
+ id: 'projectStatus',
92
+ label: 'Project Status',
93
+ },
94
+ {
95
+ id: 'uploadedDate',
96
+ label: 'Uploaded Date',
97
+ },
98
+ {
99
+ id: 'uploadedBy',
100
+ label: 'Uploaded By',
101
+ },
102
+ {
103
+ id: 'lastViewed',
104
+ label: 'Last Viewed',
105
+ },
106
+ ];
107
+ function descendingComparator(a, b, orderBy) {
108
+ var _a, _b, _c, _d, _e, _f;
109
+ // Check for orderBy being 'projectDuration', we will compare docSize if 'docSize' is passed
110
+ if (orderBy === 'docSize') {
111
+ //@ts-ignore
112
+ const sizeA = (_a = a === null || a === void 0 ? void 0 : a.docSize) !== null && _a !== void 0 ? _a : 0;
113
+ //@ts-ignore
114
+ const sizeB = (_b = b === null || b === void 0 ? void 0 : b.docSize) !== null && _b !== void 0 ? _b : 0;
115
+ if (sizeB < sizeA) {
116
+ return -1;
117
+ }
118
+ if (sizeB > sizeA) {
119
+ return 1;
120
+ }
121
+ return 0;
122
+ }
123
+ else if (orderBy === 'uploadedDate' || orderBy === 'lastViewed') {
124
+ // For 'uploadedDate' and 'lastViewed', we assume they're strings or date strings
125
+ //@ts-ignore
126
+ const dateA = a === null || a === void 0 ? void 0 : a[orderBy];
127
+ //@ts-ignore
128
+ const dateB = b === null || b === void 0 ? void 0 : b[orderBy];
129
+ //@ts-ignore
130
+ if (dateB < dateA) {
131
+ return -1;
132
+ }
133
+ //@ts-ignore
134
+ if (dateB > dateA) {
135
+ return 1;
136
+ }
137
+ return 0;
138
+ }
139
+ else if (orderBy === 'clientName') {
140
+ // For clientName, do normal string comparison
141
+ //@ts-ignore
142
+ const clientA = (_c = a === null || a === void 0 ? void 0 : a.clientName) !== null && _c !== void 0 ? _c : "";
143
+ //@ts-ignore
144
+ const clientB = (_d = b === null || b === void 0 ? void 0 : b.clientName) !== null && _d !== void 0 ? _d : "";
145
+ if (clientB < clientA) {
146
+ return -1;
147
+ }
148
+ if (clientB > clientA) {
149
+ return 1;
150
+ }
151
+ return 0;
152
+ }
153
+ else if (orderBy === 'fileName' || orderBy === 'docType' || orderBy === 'projectName' || orderBy === 'uploadedBy') {
154
+ // For string-based comparisons (e.g., fileName, docType, projectName, uploadedBy)
155
+ //@ts-ignore
156
+ const valueA = (_e = a === null || a === void 0 ? void 0 : a[orderBy]) !== null && _e !== void 0 ? _e : "";
157
+ //@ts-ignore
158
+ const valueB = (_f = b === null || b === void 0 ? void 0 : b[orderBy]) !== null && _f !== void 0 ? _f : "";
159
+ if (valueB < valueA) {
160
+ return -1;
161
+ }
162
+ if (valueB > valueA) {
163
+ return 1;
164
+ }
165
+ return 0;
166
+ }
167
+ else {
168
+ // General case for other properties
169
+ //@ts-ignore
170
+ const selectedColumnA = a === null || a === void 0 ? void 0 : a[orderBy];
171
+ //@ts-ignore
172
+ const selectedColumnB = b === null || b === void 0 ? void 0 : b[orderBy];
173
+ if (selectedColumnA === 'N/A' && selectedColumnB !== 'N/A') {
174
+ return 1;
175
+ }
176
+ if (selectedColumnA !== 'N/A' && selectedColumnB === 'N/A') {
177
+ return -1;
178
+ }
179
+ if (selectedColumnB === undefined) {
180
+ return -1;
181
+ }
182
+ if (selectedColumnA === undefined) {
183
+ return 1;
184
+ }
185
+ //@ts-ignore
186
+ if (selectedColumnB < selectedColumnA) {
187
+ return -1;
188
+ }
189
+ //@ts-ignore
190
+ if (selectedColumnB > selectedColumnA) {
191
+ return 1;
192
+ }
193
+ return 0;
194
+ }
195
+ }
196
+ function getComparator(order, orderBy) {
197
+ return order === 'desc'
198
+ ? (a, b) => descendingComparator(a, b, orderBy)
199
+ : (a, b) => -descendingComparator(a, b, orderBy);
200
+ }
201
+ function stableSort(array, comparator) {
202
+ const stabilizedThis = array.map((el, index) => [el, index]);
203
+ stabilizedThis.sort((a, b) => {
204
+ const order = comparator(a[0], b[0]);
205
+ if (order !== 0) {
206
+ return order;
207
+ }
208
+ return a[1] - b[1];
209
+ });
210
+ return stabilizedThis.map((el) => el[0]);
211
+ }
212
+ const DocumentTable = ({ legacyFreelancerId, paroProjectsData, expiryDate, expertFiles, uploadExpertClientFiles, uploadFileData, deleteFileMutation, updateFreelancerExpiryMutation, GetFilesDocument, foldername, paroDocuments }) => {
213
+ const classes = useStyles();
214
+ const [order, setOrder] = react_1.default.useState('asc');
215
+ const [orderBy, setOrderBy] = react_1.default.useState('lastViewed');
216
+ const [currentPage, setCurrentPage] = (0, react_1.useState)(1);
217
+ const [perPageItems, setPerPageItems] = (0, react_1.useState)(10);
218
+ const [files, setFiles] = (0, react_1.useState)(paroProjectsData);
219
+ const [documentName, setDocumentName] = (0, react_1.useState)('');
220
+ const [clientAndProject, setClientAndProject] = (0, react_1.useState)('');
221
+ const [docType, setDocType] = (0, react_1.useState)('');
222
+ const [searchText, setSearchText] = (0, react_1.useState)('');
223
+ const [downloadFilename, setDownloadFilename] = (0, react_1.useState)('');
224
+ const [apiFoldername, setApiFoldername] = (0, react_1.useState)('');
225
+ const [isDeleteModalOpen, setDeleteModalOpen] = (0, react_1.useState)(false);
226
+ const [deleteFileName, setDeleteFileName] = (0, react_1.useState)('');
227
+ const [insuranceExpiryDate, setInsuranceExpiryDate] = (0, react_1.useState)(expiryDate);
228
+ const firstItem = (currentPage - 1) * perPageItems;
229
+ const lastItem = (currentPage - 1) * perPageItems + perPageItems;
230
+ const tableData = files === null || files === void 0 ? void 0 : files.map((file) => {
231
+ return {
232
+ fileName: (file === null || file === void 0 ? void 0 : file.fileName) || "-", // Assuming there's a `fileName` property in `project`
233
+ docType: (file === null || file === void 0 ? void 0 : file.docType) || "-", // Assuming there's a `docType` property in `project`
234
+ docSize: (file === null || file === void 0 ? void 0 : file.docSize) || 0, // Assuming there's a `docSize` property in `project`
235
+ clientName: file.clientName || "-", // Mapping from project.client.name
236
+ projectName: file.projectName, // Mapping from project.name
237
+ projectStatus: file.projectStatus,
238
+ uploadedDate: file.uploadedDate, // Assuming there's an `uploadedDate` property
239
+ uploadedBy: file.uploadedBy || "-", // Assuming there's an `uploadedBy` property
240
+ lastViewed: file.lastViewed, // Assuming there's a `lastViewed` property
241
+ };
242
+ });
243
+ (0, react_1.useEffect)(() => {
244
+ const sortByTextProjects = searchText === ''
245
+ ? paroProjectsData
246
+ : paroProjectsData.filter((p) => {
247
+ var _a, _b, _c;
248
+ return ((_a = p === null || p === void 0 ? void 0 : p.clientName) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(searchText.toLowerCase())) ||
249
+ (((_b = p === null || p === void 0 ? void 0 : p.projectName) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(searchText.toLowerCase())) ||
250
+ ((_c = p === null || p === void 0 ? void 0 : p.fileName) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes(searchText.toLowerCase())));
251
+ });
252
+ setFiles(sortByTextProjects);
253
+ }, [searchText]);
254
+ const handleRequestSort = (event, property) => {
255
+ const isDesc = orderBy === property && order === 'desc';
256
+ setOrder(isDesc ? 'asc' : 'desc');
257
+ setOrderBy(property);
258
+ };
259
+ const createSortHandler = (property) => (event) => {
260
+ handleRequestSort(event, property);
261
+ };
262
+ const handleDelete = () => {
263
+ if (apiFoldername.split('/')[1] === 'EO Insurance') {
264
+ updateFreelancerExpiryMutation({
265
+ variables: {
266
+ id: legacyFreelancerId,
267
+ },
268
+ })
269
+ .catch((err) => { console.log(`Error deleting insurance from freelancer table ${err}`); });
270
+ setInsuranceExpiryDate('');
271
+ }
272
+ deleteFileMutation({
273
+ variables: {
274
+ input: {
275
+ foldername: apiFoldername,
276
+ filename: deleteFileName,
277
+ },
278
+ },
279
+ refetchQueries: [{ query: GetFilesDocument, variables: { input: { foldername } } }],
280
+ })
281
+ .then(() => {
282
+ toggleDeleteModal(deleteFileName);
283
+ })
284
+ .catch((err) => {
285
+ toggleDeleteModal(deleteFileName);
286
+ console.log(`Error deleting file ${err}`);
287
+ });
288
+ };
289
+ const handleDownloadFile = (name) => __awaiter(void 0, void 0, void 0, function* () {
290
+ if (name && name.filename && name.filename.trim().length > 0) {
291
+ setDownloadFilename(name.filename.split('/').pop());
292
+ const segments = name.filename.split('/');
293
+ setApiFoldername(segments.slice(0, segments.length - 1).join('/'));
294
+ }
295
+ });
296
+ const toggleDeleteModal = (name) => {
297
+ setDeleteModalOpen(!isDeleteModalOpen);
298
+ if (name && name.filename && name.filename.trim().length > 0) {
299
+ setDeleteFileName(name.filename.split('/').pop());
300
+ const segments = name.filename.split('/');
301
+ setApiFoldername(segments.slice(0, segments.length - 1).join('/'));
302
+ }
303
+ };
304
+ return (react_1.default.createElement(core_1.Paper, { className: classes.container },
305
+ react_1.default.createElement(DocumentUploadRow_1.DocumentUploadRow, { documentName: documentName, setDocumentName: setDocumentName, clientAndProject: clientAndProject, setClientAndProject: setClientAndProject, docType: docType, setDocType: setDocType, searchText: searchText, setSearchText: setSearchText }),
306
+ react_1.default.createElement(core_1.Box, { mt: 2 },
307
+ react_1.default.createElement(core_1.Table, { style: { overflow: 'auto' } },
308
+ react_1.default.createElement(core_1.TableHead, null,
309
+ react_1.default.createElement(core_1.TableRow, { className: [classes.tableCellBorder, classes.shade].join(" ") },
310
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }),
311
+ headCells.map((headCell) => (react_1.default.createElement(core_1.TableCell, { key: headCell.id, sortDirection: orderBy === headCell.id ? order : false, align: "center", className: classes.tableCell },
312
+ react_1.default.createElement(core_1.TableSortLabel, { active: orderBy === headCell.id, direction: orderBy === headCell.id ? order : 'asc', onClick: createSortHandler(headCell.id) },
313
+ react_1.default.createElement("div", { className: "flex flex-row items-center gap-x-1" },
314
+ react_1.default.createElement("div", { className: "flex flex-col justify-center items-center" },
315
+ react_1.default.createElement("b", null, headCell.label)),
316
+ orderBy === headCell.id && null))))),
317
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }))),
318
+ react_1.default.createElement(core_1.TableBody, null, stableSort(tableData, getComparator(order, orderBy)).slice(firstItem, lastItem).map((row, index) => {
319
+ const { fileName, docType, docSize, clientName, projectName, projectStatus, uploadedDate, uploadedBy, lastViewed } = row;
320
+ return (react_1.default.createElement(core_1.TableRow, { key: index },
321
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, index + 1),
322
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, fileName),
323
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, docType),
324
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, docSize),
325
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, clientName),
326
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, projectName),
327
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, projectStatus),
328
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, uploadedDate),
329
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, uploadedBy),
330
+ react_1.default.createElement(core_1.TableCell, { className: classes.tableCell, align: "center" }, lastViewed),
331
+ react_1.default.createElement(core_1.TableCell, { className: "flex items-center gap-x-4" },
332
+ react_1.default.createElement(core_1.Grid, { item: true, container: true, direction: "row", justify: "space-between", alignItems: "center" },
333
+ react_1.default.createElement(core_1.IconButton, { onClick: () => __awaiter(void 0, void 0, void 0, function* () { return handleDownloadFile(name); }) },
334
+ react_1.default.createElement(base_icons_1.IconDocumentDownload, { size: "sm" })),
335
+ react_1.default.createElement(core_1.IconButton, { onClick: () => toggleDeleteModal(name) },
336
+ react_1.default.createElement(base_icons_1.IconTrash, { size: "sm" }))))));
337
+ })))),
338
+ react_1.default.createElement(core_1.Box, { m: 2 },
339
+ react_1.default.createElement(Pagination_1.default, { total: paroProjectsData === null || paroProjectsData === void 0 ? void 0 : paroProjectsData.length, currentPage: currentPage, setCurrentPage: setCurrentPage, perPageItems: perPageItems, setPerPageItems: setPerPageItems, displayText: "projects" })),
340
+ react_1.default.createElement(base_ui_1.Modal, { variant: base_ui_1.ModalVariant.transactional, label: "Delete Document?", color: "danger", open: isDeleteModalOpen, onClose: () => { setDeleteModalOpen(!isDeleteModalOpen); }, icon: "danger", iconCustom: react_1.default.createElement(base_icons_1.IconExclamation, null), size: "md", onPrimaryButtonClickHandler: handleDelete }, apiFoldername.split('/')[1] !== "EO Insurance" ? (react_1.default.createElement(react_1.default.Fragment, null,
341
+ "Are you sure you want to delete document ",
342
+ react_1.default.createElement("strong", null, deleteFileName),
343
+ "? If you continue, this document will no longer be available.")) : (react_1.default.createElement(react_1.default.Fragment, null,
344
+ "Are you sure you want to delete Insurance document ",
345
+ react_1.default.createElement("strong", null, deleteFileName),
346
+ "? ",
347
+ react_1.default.createElement("strong", null, "Note:"),
348
+ " You hold only one insurance document. Deleting it might effect your 'Matching'.")))));
349
+ };
350
+ exports.DocumentTable = DocumentTable;