@paro.io/expert-shared-components 1.12.5 → 1.12.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +2 -2
- package/lib/components/ClientReferencesSection/DeleteButton.js +11 -11
- package/lib/components/ClientReferencesSection/ParoError.js +10 -10
- package/lib/components/ClientReferencesSection/TagsSection.js +2 -2
- package/lib/components/ClientReferencesSection/styles/BrandedTypography.js +2 -2
- package/lib/components/ClientReferencesSection/styles/Buttons.js +15 -15
- package/lib/components/ClientReferencesSection/styles/Name.js +5 -5
- package/lib/components/ClientReferencesSection/styles/NullContentConditionalColor.js +4 -4
- package/lib/components/ClientReferencesSection/styles/SectionBody.js +11 -11
- package/lib/components/ClientReferencesSection/styles/SectionTitle.js +6 -6
- package/lib/components/ClientReferencesSection/styles/Tags.js +2 -2
- package/lib/components/DiscussionThread/chat.d.ts +22 -22
- package/lib/components/DiscussionThread/chat.js +106 -106
- package/lib/components/DocumentCenter/DocumentTable.d.ts +15 -15
- package/lib/components/DocumentCenter/DocumentTable.js +350 -350
- package/lib/components/DocumentCenter/UploadFilesButton.d.ts +6 -6
- package/lib/components/DocumentCenter/UploadFilesButton.js +29 -29
- package/lib/components/EarningsTracker/ActiveProjectCard.d.ts +52 -52
- package/lib/components/EarningsTracker/ActiveProjectCard.js +161 -161
- package/lib/components/EarningsTracker/CenterCardUI.d.ts +13 -13
- package/lib/components/EarningsTracker/CenterCardUI.js +134 -134
- package/lib/components/EarningsTracker/EarningsTracker.d.ts +52 -52
- package/lib/components/EarningsTracker/EarningsTracker.js +508 -508
- package/lib/components/EarningsTracker/EditDateModal.d.ts +22 -22
- package/lib/components/EarningsTracker/EditDateModal.js +149 -149
- package/lib/components/EarningsTracker/EmailModal.d.ts +14 -14
- package/lib/components/EarningsTracker/EmailModal.js +79 -79
- package/lib/components/EarningsTracker/EndProjectModal.d.ts +56 -56
- package/lib/components/EarningsTracker/EndProjectModal.js +221 -221
- package/lib/components/EarningsTracker/LeftCardUI.d.ts +18 -18
- package/lib/components/EarningsTracker/LeftCardUI.js +189 -189
- package/lib/components/EarningsTracker/LogTimeModalAuthenticated.d.ts +52 -52
- package/lib/components/EarningsTracker/LogTimeModalAuthenticated.js +358 -358
- package/lib/components/EarningsTracker/ProgressBar.d.ts +4 -4
- package/lib/components/EarningsTracker/ProgressBar.js +66 -66
- package/lib/components/EarningsTracker/ReviewRequestModal.d.ts +17 -17
- package/lib/components/EarningsTracker/ReviewRequestModal.js +135 -135
- package/lib/components/EarningsTracker/RightCardUI.d.ts +46 -46
- package/lib/components/EarningsTracker/RightCardUI.js +231 -231
- package/lib/components/EarningsTracker/index.d.ts +1 -1
- package/lib/components/EarningsTracker/index.js +5 -5
- package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
- package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
- package/lib/components/FileDownloader/index.d.ts +2 -1
- package/lib/components/FileDownloader/index.js +2 -1
- package/lib/components/Invoices/ClientDisputeProjectCard.d.ts +3 -1
- package/lib/components/Invoices/ClientDisputeProjectCard.js +55 -34
- package/lib/components/Invoices/DiscussionSection.js +5 -12
- package/lib/components/Invoices/DisputeSection.d.ts +3 -1
- package/lib/components/Invoices/DisputeSection.js +22 -12
- package/lib/components/Invoices/InvoiceCard.d.ts +2 -1
- package/lib/components/Invoices/InvoiceCard.js +3 -3
- package/lib/components/OrganizationChart/OrganizationChart.d.ts +15 -15
- package/lib/components/OrganizationChart/OrganizationChart.js +312 -312
- package/lib/components/OrganizationChart/PersonCard.js +5 -5
- package/lib/components/OrganizationChart/utils.js +79 -79
- package/lib/components/ProjectCard/ProgressBar.js +4 -4
- package/lib/components/ProjectCard/ReviewRequestModal.js +5 -5
- package/lib/components/Reviews/Pagination.js +6 -6
- package/lib/components/ReviewsTab/RatingHeader.js +6 -6
- package/lib/components/ReviewsTab/expert-shared-components.code-workspace +20 -20
- package/lib/components/ReviewsTab/reviewRequestModal.js +5 -5
- package/lib/components/shared/DownloadClient.d.ts +1 -0
- package/lib/components/shared/DownloadClient.js +2 -1
- package/lib/components/shared/Image.js +13 -13
- package/lib/components/shared/ProfileTextField.d.ts +18 -18
- package/lib/components/shared/ProfileTextField.js +16 -16
- package/lib/components/shared/StyledActionButtons.d.ts +7 -7
- package/lib/components/shared/StyledActionButtons.js +15 -15
- package/lib/components/shared/ToastNotification.d.ts +10 -10
- package/lib/components/shared/ToastNotification.js +63 -63
- package/package.json +61 -61
|
@@ -32,7 +32,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.ClientDisputeProjectCard = void 0;
|
|
35
|
+
exports.ClientDisputeProjectCard = exports.handleDownloadDocument = void 0;
|
|
36
36
|
const react_1 = __importStar(require("react"));
|
|
37
37
|
const base_ui_1 = require("@paro.io/base-ui");
|
|
38
38
|
const base_ui_2 = require("@paro.io/base-ui");
|
|
@@ -94,7 +94,58 @@ const ACCEPTED_FILE_TYPES = [
|
|
|
94
94
|
'image/png',
|
|
95
95
|
'text/csv',
|
|
96
96
|
];
|
|
97
|
-
const
|
|
97
|
+
const handleFileDownload = ({ fileData, downloadFilename, streamData, fileType = 'pdf' }) => {
|
|
98
|
+
var _a, _b, _c;
|
|
99
|
+
let byteArray = streamData ? fileData : new Uint8Array();
|
|
100
|
+
if (!streamData) {
|
|
101
|
+
const byteCharacters = atob((_b = (_a = fileData === null || fileData === void 0 ? void 0 : fileData.data) === null || _a === void 0 ? void 0 : _a.getFile) === null || _b === void 0 ? void 0 : _b.data);
|
|
102
|
+
const byteNumbers = new Array(byteCharacters.length);
|
|
103
|
+
for (let i = 0; i < byteCharacters.length; i++) {
|
|
104
|
+
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
|
105
|
+
}
|
|
106
|
+
byteArray = new Uint8Array(byteNumbers);
|
|
107
|
+
}
|
|
108
|
+
// Map file extensions to MIME types
|
|
109
|
+
const mimeTypes = {
|
|
110
|
+
'pdf': 'application/pdf',
|
|
111
|
+
'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
112
|
+
'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
113
|
+
'csv': 'text/csv',
|
|
114
|
+
'doc': 'application/msword',
|
|
115
|
+
'xls': 'application/vnd.ms-excel',
|
|
116
|
+
'txt': 'text/plain',
|
|
117
|
+
'png': 'image/png',
|
|
118
|
+
'jpg': 'image/jpeg',
|
|
119
|
+
'jpeg': 'image/jpeg'
|
|
120
|
+
};
|
|
121
|
+
// Get the file extension from the filename or use the provided fileType
|
|
122
|
+
const fileExtension = ((_c = downloadFilename.split('.').pop()) === null || _c === void 0 ? void 0 : _c.toLowerCase()) || fileType;
|
|
123
|
+
const mimeType = mimeTypes[fileExtension] || 'application/octet-stream';
|
|
124
|
+
const blob = new Blob([byteArray], { type: mimeType });
|
|
125
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
126
|
+
const downloadLink = document.createElement('a');
|
|
127
|
+
downloadLink.href = blobUrl;
|
|
128
|
+
downloadLink.download = downloadFilename;
|
|
129
|
+
document.body.appendChild(downloadLink);
|
|
130
|
+
downloadLink.click();
|
|
131
|
+
document.body.removeChild(downloadLink);
|
|
132
|
+
URL.revokeObjectURL(blobUrl);
|
|
133
|
+
};
|
|
134
|
+
const handleDownloadDocument = (projectId, fileName, downloadDocumentUrl, bucketName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
var _a;
|
|
136
|
+
// Decode the filename from URL encoding if needed
|
|
137
|
+
const decodedFileName = decodeURIComponent(fileName);
|
|
138
|
+
const downloadFileName = `project-${projectId}/${decodedFileName}`;
|
|
139
|
+
const downloadData = yield (0, FileDownloader_1.fileDownloader)({ downloadDocumentUrl: downloadDocumentUrl, fileKey: downloadFileName, bucketName: bucketName });
|
|
140
|
+
handleFileDownload({
|
|
141
|
+
fileData: downloadData,
|
|
142
|
+
downloadFilename: decodedFileName,
|
|
143
|
+
streamData: true,
|
|
144
|
+
fileType: (_a = decodedFileName.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase()
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
exports.handleDownloadDocument = handleDownloadDocument;
|
|
148
|
+
const ClientDisputeProjectCard = ({ clientInvoice, updateClientInvoiceDisputeMutation, documentUploadUrl, downloadDocumentUrl, bucketName }) => {
|
|
98
149
|
const [expandRow, setExpandRow] = (0, react_1.useState)(null);
|
|
99
150
|
const classes = useStyles();
|
|
100
151
|
const [projects, setProjects] = (0, react_1.useState)(clientInvoice === null || clientInvoice === void 0 ? void 0 : clientInvoice.disputeProjects);
|
|
@@ -104,36 +155,6 @@ const ClientDisputeProjectCard = ({ clientInvoice, updateClientInvoiceDisputeMut
|
|
|
104
155
|
const [updatingDispute, setUpdatingDispute] = (0, react_1.useState)(false);
|
|
105
156
|
const [uploadingFile, setUploadingFile] = (0, react_1.useState)(false);
|
|
106
157
|
const fileInputRef = (0, react_1.useRef)(null);
|
|
107
|
-
const handleDownloadPdf = ({ fileData, downloadFilename, streamData }) => {
|
|
108
|
-
var _a, _b;
|
|
109
|
-
let byteArray = streamData ? fileData : new Uint8Array();
|
|
110
|
-
if (!streamData) {
|
|
111
|
-
const byteCharacters = atob((_b = (_a = fileData === null || fileData === void 0 ? void 0 : fileData.data) === null || _a === void 0 ? void 0 : _a.getFile) === null || _b === void 0 ? void 0 : _b.data);
|
|
112
|
-
const byteNumbers = new Array(byteCharacters.length);
|
|
113
|
-
for (let i = 0; i < byteCharacters.length; i++) {
|
|
114
|
-
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
|
115
|
-
}
|
|
116
|
-
byteArray = new Uint8Array(byteNumbers);
|
|
117
|
-
}
|
|
118
|
-
const blob = new Blob([byteArray], { type: 'application/pdf' });
|
|
119
|
-
const blobUrl = URL.createObjectURL(blob);
|
|
120
|
-
const newTab = window.open(blobUrl, '_blank');
|
|
121
|
-
const downloadLink = document.createElement('a');
|
|
122
|
-
downloadLink.href = blobUrl;
|
|
123
|
-
downloadLink.download = downloadFilename;
|
|
124
|
-
document.body.appendChild(downloadLink);
|
|
125
|
-
downloadLink.click();
|
|
126
|
-
document.body.removeChild(downloadLink);
|
|
127
|
-
URL.revokeObjectURL(blobUrl);
|
|
128
|
-
if (newTab) {
|
|
129
|
-
newTab.focus();
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
const handleDownloadDocument = (projectId, fileName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
|
-
const downloadFileName = `project-${projectId}/${fileName}`;
|
|
134
|
-
const downloadData = yield (0, FileDownloader_1.fileDownloader)({ downloadDocumentUrl: downloadDocumentUrl, fileKey: downloadFileName });
|
|
135
|
-
handleDownloadPdf({ fileData: downloadData, downloadFilename: fileName, streamData: true });
|
|
136
|
-
});
|
|
137
158
|
(0, react_1.useEffect)(() => {
|
|
138
159
|
if (JSON.stringify(clientInvoice === null || clientInvoice === void 0 ? void 0 : clientInvoice.disputeProjects) !== JSON.stringify(projects)) {
|
|
139
160
|
setUpdateDispute(true);
|
|
@@ -274,8 +295,8 @@ const ClientDisputeProjectCard = ({ clientInvoice, updateClientInvoiceDisputeMut
|
|
|
274
295
|
((row === null || row === void 0 ? void 0 : row.clientDocumentLinks)
|
|
275
296
|
? (typeof (row === null || row === void 0 ? void 0 : row.clientDocumentLinks) === 'string' ? (_b = row === null || row === void 0 ? void 0 : row.clientDocumentLinks) === null || _b === void 0 ? void 0 : _b.split(',') : [...row === null || row === void 0 ? void 0 : row.clientDocumentLinks])
|
|
276
297
|
: []).map((f, index) => (react_1.default.createElement("div", { key: index, className: "m-1" },
|
|
277
|
-
react_1.default.createElement(base_ui_1.Tag, { variant: "subtle", color: "success", label: f.split('%2F')[1],
|
|
278
|
-
handleDownloadDocument(row === null || row === void 0 ? void 0 : row.projectId, f.split('%2F')[1]);
|
|
298
|
+
react_1.default.createElement(base_ui_1.Tag, { variant: "subtle", color: "success", label: f.split('%2F')[1], onClick: () => {
|
|
299
|
+
(0, exports.handleDownloadDocument)(row === null || row === void 0 ? void 0 : row.projectId, f.split('%2F')[1], downloadDocumentUrl, bucketName);
|
|
279
300
|
} })))))))))))));
|
|
280
301
|
})),
|
|
281
302
|
updatedDispute && react_1.default.createElement("div", { className: "flex justify-end ml-auto mt-2" },
|
|
@@ -51,7 +51,6 @@ const DiscussionSection = ({ disputeId, currentUser, messages, onCreateMessage,
|
|
|
51
51
|
return uniqueUsers;
|
|
52
52
|
}, [messages]);
|
|
53
53
|
const handleSendMessage = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
-
var _a;
|
|
55
54
|
if (!newMessage.trim())
|
|
56
55
|
return;
|
|
57
56
|
try {
|
|
@@ -62,7 +61,7 @@ const DiscussionSection = ({ disputeId, currentUser, messages, onCreateMessage,
|
|
|
62
61
|
disputeId,
|
|
63
62
|
messageText: newMessage,
|
|
64
63
|
visibility,
|
|
65
|
-
senderId:
|
|
64
|
+
senderId: currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId,
|
|
66
65
|
},
|
|
67
66
|
},
|
|
68
67
|
});
|
|
@@ -105,19 +104,13 @@ const DiscussionSection = ({ disputeId, currentUser, messages, onCreateMessage,
|
|
|
105
104
|
}
|
|
106
105
|
};
|
|
107
106
|
const getMessageAlignment = (userTypeId) => {
|
|
108
|
-
|
|
109
|
-
const userIndex = userSequence.indexOf(userTypeId);
|
|
110
|
-
return userIndex === 0 ? 'mr-auto' : 'ml-auto';
|
|
107
|
+
return userTypeId !== currentUser.userTypeId ? 'mr-auto' : 'ml-auto';
|
|
111
108
|
};
|
|
112
109
|
const getMessageOrder = (userTypeId) => {
|
|
113
|
-
|
|
114
|
-
const userIndex = userSequence.indexOf(userTypeId);
|
|
115
|
-
return userIndex === 0 ? 'flex-row' : 'flex-row-reverse';
|
|
110
|
+
return userTypeId !== currentUser.userTypeId ? 'flex-row' : 'flex-row-reverse';
|
|
116
111
|
};
|
|
117
112
|
const getHeaderAlignment = (userTypeId) => {
|
|
118
|
-
|
|
119
|
-
const userIndex = userSequence.indexOf(userTypeId);
|
|
120
|
-
return userIndex === 0 ? 'justify-start' : 'justify-end';
|
|
113
|
+
return userTypeId !== currentUser.userTypeId ? 'justify-start' : 'justify-end';
|
|
121
114
|
};
|
|
122
115
|
return (react_1.default.createElement("div", { className: "space-y-6" },
|
|
123
116
|
react_1.default.createElement("div", { className: "flex items-center justify-between" },
|
|
@@ -146,7 +139,7 @@ const DiscussionSection = ({ disputeId, currentUser, messages, onCreateMessage,
|
|
|
146
139
|
}, className: "w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0" },
|
|
147
140
|
react_1.default.createElement("span", { className: "text-sm font-bold" }, getSenderInitial(message.sender))),
|
|
148
141
|
react_1.default.createElement("div", { className: "flex-1" },
|
|
149
|
-
react_1.default.createElement("div", { className: `flex items-center ${getHeaderAlignment(message.sender.userTypeId)} space-x-2` },
|
|
142
|
+
react_1.default.createElement("div", { className: `flex items-center ${getHeaderAlignment(message.sender.userTypeId)} space-x-2 mr-1` },
|
|
150
143
|
react_1.default.createElement("span", { className: "text-sm font-bold text-[#333333]" },
|
|
151
144
|
message.sender.firstName,
|
|
152
145
|
" ",
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
interface DisputeSectionProps {
|
|
2
2
|
dispute: any;
|
|
3
3
|
documentUploadUrl: string;
|
|
4
|
+
downloadDocumentUrl: string;
|
|
5
|
+
bucketName: string;
|
|
4
6
|
updateClientInvoiceDisputeMutation: (variables: any) => Promise<any>;
|
|
5
7
|
}
|
|
6
|
-
export declare const DisputeSection: ({ dispute, documentUploadUrl, updateClientInvoiceDisputeMutation, }: DisputeSectionProps) => JSX.Element;
|
|
8
|
+
export declare const DisputeSection: ({ dispute, documentUploadUrl, downloadDocumentUrl, bucketName, updateClientInvoiceDisputeMutation, }: DisputeSectionProps) => JSX.Element;
|
|
7
9
|
export {};
|
|
@@ -38,6 +38,7 @@ const base_ui_1 = require("@paro.io/base-ui");
|
|
|
38
38
|
const base_icons_1 = require("@paro.io/base-icons");
|
|
39
39
|
const FileUploader_1 = require("../FileUploader");
|
|
40
40
|
const core_1 = require("@material-ui/core");
|
|
41
|
+
const ClientDisputeProjectCard_1 = require("./ClientDisputeProjectCard");
|
|
41
42
|
const ACCEPTED_FILE_TYPES = [
|
|
42
43
|
'application/pdf',
|
|
43
44
|
'application/msword',
|
|
@@ -46,12 +47,14 @@ const ACCEPTED_FILE_TYPES = [
|
|
|
46
47
|
'image/png',
|
|
47
48
|
'text/csv',
|
|
48
49
|
];
|
|
49
|
-
const DisputeSection = ({ dispute, documentUploadUrl, updateClientInvoiceDisputeMutation, }) => {
|
|
50
|
+
const DisputeSection = ({ dispute, documentUploadUrl, downloadDocumentUrl, bucketName, updateClientInvoiceDisputeMutation, }) => {
|
|
50
51
|
var _a, _b, _c;
|
|
51
|
-
const
|
|
52
|
+
const expertFileInputRef = (0, react_1.useRef)(null);
|
|
53
|
+
const clientFileInputRef = (0, react_1.useRef)(null);
|
|
52
54
|
const disputeProject = (_a = dispute === null || dispute === void 0 ? void 0 : dispute.disputeProjects) === null || _a === void 0 ? void 0 : _a[0];
|
|
53
55
|
const clientDocumentLinks = (_b = disputeProject === null || disputeProject === void 0 ? void 0 : disputeProject.clientDocumentLinks) === null || _b === void 0 ? void 0 : _b.split(',');
|
|
54
56
|
const expertDocumentLinks = (_c = disputeProject === null || disputeProject === void 0 ? void 0 : disputeProject.expertDocumentLinks) === null || _c === void 0 ? void 0 : _c.split(',');
|
|
57
|
+
const projectId = disputeProject === null || disputeProject === void 0 ? void 0 : disputeProject.projectId;
|
|
55
58
|
const validateFileUpload = (file) => {
|
|
56
59
|
return ACCEPTED_FILE_TYPES.includes(file.type);
|
|
57
60
|
};
|
|
@@ -86,8 +89,11 @@ const DisputeSection = ({ dispute, documentUploadUrl, updateClientInvoiceDispute
|
|
|
86
89
|
reader.readAsDataURL(selectedFile);
|
|
87
90
|
});
|
|
88
91
|
}
|
|
89
|
-
if (
|
|
90
|
-
|
|
92
|
+
if (expertFileInputRef.current) {
|
|
93
|
+
expertFileInputRef.current.value = '';
|
|
94
|
+
}
|
|
95
|
+
if (clientFileInputRef.current) {
|
|
96
|
+
clientFileInputRef.current.value = '';
|
|
91
97
|
}
|
|
92
98
|
};
|
|
93
99
|
return (react_1.default.createElement("div", { className: "grid grid-cols-2 gap-6" },
|
|
@@ -104,17 +110,19 @@ const DisputeSection = ({ dispute, documentUploadUrl, updateClientInvoiceDispute
|
|
|
104
110
|
react_1.default.createElement("div", null,
|
|
105
111
|
react_1.default.createElement("div", { className: "text-sm font-bold text-[#333333] mb-2" }, "Supporting Documents:"),
|
|
106
112
|
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
107
|
-
react_1.default.createElement("input", { ref:
|
|
108
|
-
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
113
|
+
react_1.default.createElement("input", { ref: clientFileInputRef, type: "file", multiple: true, accept: ACCEPTED_FILE_TYPES.join(','), className: "hidden", onChange: (e) => handleUpload(e, false) }),
|
|
114
|
+
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" }, clientDocumentLinks === null || clientDocumentLinks === void 0 ? void 0 : clientDocumentLinks.map((file, index) => (
|
|
109
115
|
// @ts-ignore
|
|
110
|
-
react_1.default.createElement(core_1.Chip, { key: index, label: file.split('%2F').pop(), variant: "outlined", onClick: () => {
|
|
116
|
+
react_1.default.createElement(core_1.Chip, { key: index, label: file.split('%2F').pop(), variant: "outlined", onClick: () => {
|
|
117
|
+
(0, ClientDisputeProjectCard_1.handleDownloadDocument)(projectId, file.split('%2F')[1], downloadDocumentUrl, bucketName);
|
|
118
|
+
}, sx: {
|
|
111
119
|
'&:hover': {
|
|
112
120
|
cursor: 'pointer',
|
|
113
121
|
backgroundColor: 'rgba(76, 175, 80, 0.1)'
|
|
114
122
|
}
|
|
115
123
|
} })))),
|
|
116
124
|
react_1.default.createElement("div", { className: "w-full mt-2" },
|
|
117
|
-
react_1.default.createElement(base_ui_1.Button, { label: "Add File", iconLeft: react_1.default.createElement(base_icons_1.IconPlus, { size: "sm" }), onClick: () => { var _a; return (_a =
|
|
125
|
+
react_1.default.createElement(base_ui_1.Button, { label: "Add File", iconLeft: react_1.default.createElement(base_icons_1.IconPlus, { size: "sm" }), onClick: () => { var _a; return (_a = clientFileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, size: "sm", color: "info", className: "bg-white border border-[#248384] text-[#248384]" })))))),
|
|
118
126
|
react_1.default.createElement("div", { className: "space-y-4" },
|
|
119
127
|
react_1.default.createElement("div", { className: "flex items-center justify-between" },
|
|
120
128
|
react_1.default.createElement("div", { className: "text-lg font-bold text-[#333333]" }, "Expert Rebuttal")),
|
|
@@ -125,16 +133,18 @@ const DisputeSection = ({ dispute, documentUploadUrl, updateClientInvoiceDispute
|
|
|
125
133
|
react_1.default.createElement("div", null,
|
|
126
134
|
react_1.default.createElement("div", { className: "text-sm font-bold text-[#333333] mb-2" }, "Supporting Documents:"),
|
|
127
135
|
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
128
|
-
react_1.default.createElement("input", { ref:
|
|
129
|
-
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
136
|
+
react_1.default.createElement("input", { ref: expertFileInputRef, type: "file", multiple: true, accept: ACCEPTED_FILE_TYPES.join(','), className: "hidden", onChange: (e) => handleUpload(e, true) }),
|
|
137
|
+
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" }, expertDocumentLinks === null || expertDocumentLinks === void 0 ? void 0 : expertDocumentLinks.map((file, index) => (
|
|
130
138
|
// @ts-ignore
|
|
131
|
-
react_1.default.createElement(core_1.Chip, { key: index, label: file.split('%2F').pop(), variant: "outlined", onClick: () => {
|
|
139
|
+
react_1.default.createElement(core_1.Chip, { key: index, label: file.split('%2F').pop(), variant: "outlined", onClick: () => {
|
|
140
|
+
(0, ClientDisputeProjectCard_1.handleDownloadDocument)(projectId, file.split('%2F')[1], downloadDocumentUrl, bucketName);
|
|
141
|
+
}, sx: {
|
|
132
142
|
'&:hover': {
|
|
133
143
|
cursor: 'pointer',
|
|
134
144
|
backgroundColor: 'rgba(76, 175, 80, 0.1)'
|
|
135
145
|
}
|
|
136
146
|
} })))),
|
|
137
147
|
react_1.default.createElement("div", { className: "w-full mt-2" },
|
|
138
|
-
react_1.default.createElement(base_ui_1.Button, { label: "Add File", iconLeft: react_1.default.createElement(base_icons_1.IconPlus, { size: "sm" }), onClick: () => { var _a; return (_a =
|
|
148
|
+
react_1.default.createElement(base_ui_1.Button, { label: "Add File", iconLeft: react_1.default.createElement(base_icons_1.IconPlus, { size: "sm" }), onClick: () => { var _a; return (_a = expertFileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, size: "sm", color: "info", className: "bg-white border border-[#248384] text-[#248384]" }))))))));
|
|
139
149
|
};
|
|
140
150
|
exports.DisputeSection = DisputeSection;
|
|
@@ -7,6 +7,7 @@ interface InvoiceCardProps {
|
|
|
7
7
|
documentUploadUrl: string;
|
|
8
8
|
downloadDocumentUrl: string;
|
|
9
9
|
isInternal?: boolean;
|
|
10
|
+
bucketName?: string;
|
|
10
11
|
}
|
|
11
|
-
export declare const InvoiceCard: ({ clientInvoice, createDisputeChatMessage, user, chatMessages, updateClientInvoiceDisputeMutation, documentUploadUrl, downloadDocumentUrl, isInternal, }: InvoiceCardProps) => JSX.Element;
|
|
12
|
+
export declare const InvoiceCard: ({ clientInvoice, createDisputeChatMessage, user, chatMessages, updateClientInvoiceDisputeMutation, documentUploadUrl, downloadDocumentUrl, isInternal, bucketName }: InvoiceCardProps) => JSX.Element;
|
|
12
13
|
export {};
|
|
@@ -12,16 +12,16 @@ const DisputeSection_1 = require("./DisputeSection");
|
|
|
12
12
|
const DiscussionSection_1 = require("./DiscussionSection");
|
|
13
13
|
const DecisionSection_1 = require("./DecisionSection");
|
|
14
14
|
const ClientDisputeProjectCard_1 = require("./ClientDisputeProjectCard");
|
|
15
|
-
const InvoiceCard = ({ clientInvoice, createDisputeChatMessage, user, chatMessages, updateClientInvoiceDisputeMutation, documentUploadUrl, downloadDocumentUrl, isInternal = false, }) => {
|
|
15
|
+
const InvoiceCard = ({ clientInvoice, createDisputeChatMessage, user, chatMessages, updateClientInvoiceDisputeMutation, documentUploadUrl, downloadDocumentUrl, isInternal = false, bucketName }) => {
|
|
16
16
|
var _a, _b;
|
|
17
17
|
return (react_1.default.createElement(base_ui_1.Card, { className: "w-full bg-white rounded-lg shadow-sm overflow-hidden mb-4" },
|
|
18
18
|
react_1.default.createElement(InvoiceHeader_1.InvoiceHeader, { invoice: clientInvoice }),
|
|
19
19
|
react_1.default.createElement("div", { className: "p-6 space-y-6" },
|
|
20
20
|
react_1.default.createElement(InvoiceDetails_1.InvoiceDetails, { invoice: clientInvoice, isInternal: isInternal }),
|
|
21
21
|
isInternal ?
|
|
22
|
-
react_1.default.createElement(DisputeSection_1.DisputeSection, { dispute: clientInvoice, documentUploadUrl: documentUploadUrl, updateClientInvoiceDisputeMutation: updateClientInvoiceDisputeMutation })
|
|
22
|
+
react_1.default.createElement(DisputeSection_1.DisputeSection, { dispute: clientInvoice, documentUploadUrl: documentUploadUrl, updateClientInvoiceDisputeMutation: updateClientInvoiceDisputeMutation, downloadDocumentUrl: downloadDocumentUrl, bucketName: bucketName })
|
|
23
23
|
:
|
|
24
|
-
react_1.default.createElement(ClientDisputeProjectCard_1.ClientDisputeProjectCard, { clientInvoice: clientInvoice, updateClientInvoiceDisputeMutation: updateClientInvoiceDisputeMutation, documentUploadUrl: documentUploadUrl, downloadDocumentUrl: downloadDocumentUrl }),
|
|
24
|
+
react_1.default.createElement(ClientDisputeProjectCard_1.ClientDisputeProjectCard, { clientInvoice: clientInvoice, updateClientInvoiceDisputeMutation: updateClientInvoiceDisputeMutation, documentUploadUrl: documentUploadUrl, downloadDocumentUrl: downloadDocumentUrl, bucketName: bucketName }),
|
|
25
25
|
(clientInvoice === null || clientInvoice === void 0 ? void 0 : clientInvoice.chatEnabled) && (react_1.default.createElement(DiscussionSection_1.DiscussionSection, { disputeId: (_b = (_a = clientInvoice === null || clientInvoice === void 0 ? void 0 : clientInvoice.disputeProjects) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.id, currentUser: user, messages: chatMessages, onCreateMessage: createDisputeChatMessage, isInternal: isInternal })),
|
|
26
26
|
isInternal &&
|
|
27
27
|
react_1.default.createElement(DecisionSection_1.DecisionSection, { dispute: clientInvoice, onUpdateDispute: updateClientInvoiceDisputeMutation }))));
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
interface OrgChartProps {
|
|
2
|
-
openModal: boolean;
|
|
3
|
-
setOpenModal: (openModal: boolean) => void;
|
|
4
|
-
expertFirms: any;
|
|
5
|
-
firstName: string;
|
|
6
|
-
lastName: string;
|
|
7
|
-
imageUrl?: string;
|
|
8
|
-
primaryServiceLine: string;
|
|
9
|
-
city: string;
|
|
10
|
-
stateAbbreviation: string;
|
|
11
|
-
paroTenure?: string;
|
|
12
|
-
isPublicProfile?: boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare const OrganizationChart: ({ openModal, setOpenModal, expertFirms, firstName, lastName, imageUrl, primaryServiceLine, city, stateAbbreviation, paroTenure, isPublicProfile }: OrgChartProps) => JSX.Element;
|
|
15
|
-
export {};
|
|
1
|
+
interface OrgChartProps {
|
|
2
|
+
openModal: boolean;
|
|
3
|
+
setOpenModal: (openModal: boolean) => void;
|
|
4
|
+
expertFirms: any;
|
|
5
|
+
firstName: string;
|
|
6
|
+
lastName: string;
|
|
7
|
+
imageUrl?: string;
|
|
8
|
+
primaryServiceLine: string;
|
|
9
|
+
city: string;
|
|
10
|
+
stateAbbreviation: string;
|
|
11
|
+
paroTenure?: string;
|
|
12
|
+
isPublicProfile?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const OrganizationChart: ({ openModal, setOpenModal, expertFirms, firstName, lastName, imageUrl, primaryServiceLine, city, stateAbbreviation, paroTenure, isPublicProfile }: OrgChartProps) => JSX.Element;
|
|
15
|
+
export {};
|