@paro.io/expert-shared-components 1.11.1 → 1.11.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.
|
@@ -97,14 +97,13 @@ const DiscussionThread = ({ currentUser, initialThreads, createDisputeChatMessag
|
|
|
97
97
|
const userName = message.sender.firstName + message.sender.lastName;
|
|
98
98
|
const timestamp = message.updatedAt ? message.updatedAt : message.createdAt;
|
|
99
99
|
return (react_1.default.createElement("div", { key: message.messageId, className: `flex mb-4 ${isCurrentUser ? 'justify-end' : 'justify-start'}` },
|
|
100
|
-
!isCurrentUser && (react_1.default.createElement("div", { className: "flex-shrink-0 mr-2" }, ((_a = message.sender) === null || _a === void 0 ? void 0 : _a.avatar) ? (react_1.default.createElement("img", { src: message.sender.avatar, alt: userName, className: "h-8 w-8 rounded-full" })) : (react_1.default.createElement("div", { className:
|
|
101
|
-
react_1.default.createElement("div", { className:
|
|
100
|
+
!isCurrentUser && (react_1.default.createElement("div", { className: "flex-shrink-0 mr-2" }, ((_a = message.sender) === null || _a === void 0 ? void 0 : _a.avatar) ? (react_1.default.createElement("img", { src: message.sender.avatar, alt: userName, className: "h-8 w-8 rounded-full" })) : (react_1.default.createElement("div", { className: "h-8 w-8 rounded-full bg-gray-400 flex items-center justify-center text-white text-xs font-medium bg-[#5f4508]" }, getInitials(userName || 'User'))))),
|
|
101
|
+
react_1.default.createElement("div", { className: `ml-1 min-w-min max-w-[75%] break-words` },
|
|
102
102
|
!isCurrentUser && (react_1.default.createElement("div", { className: "text-xs text-gray-500 font-medium mb-1" }, userName || 'Unknown User')),
|
|
103
103
|
react_1.default.createElement("div", { className: `px-4 py-2 rounded-lg ${isCurrentUser
|
|
104
104
|
? 'bg-[#dbefef] rounded-br-none'
|
|
105
105
|
: 'bg-[#f9d8a7] border rounded-bl-none'}` }, message.messageText),
|
|
106
|
-
react_1.default.createElement("div", { className: "text-xs text-gray-500 mt-1" }, formatTime(timestamp)))
|
|
107
|
-
isCurrentUser && (react_1.default.createElement("div", { className: "flex-shrink-0 ml-2" }, (currentUser === null || currentUser === void 0 ? void 0 : currentUser.avatar) ? (react_1.default.createElement("img", { src: currentUser.avatar, alt: currentUser.name, className: "h-8 w-8 rounded-full" })) : (react_1.default.createElement("div", { className: "h-8 w-8 rounded-full bg-blue-400 flex items-center justify-center text-white text-xs font-medium" }, getInitials((currentUser === null || currentUser === void 0 ? void 0 : currentUser.name) || 'You')))))));
|
|
106
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500 mt-1" }, formatTime(timestamp)))));
|
|
108
107
|
}),
|
|
109
108
|
react_1.default.createElement("div", { ref: threadsEndRef })),
|
|
110
109
|
react_1.default.createElement("div", { className: "py-3" },
|
|
@@ -159,75 +159,53 @@ const InvoiceCard = ({ clientInvoice, createDisputeChatMessage, user }) => {
|
|
|
159
159
|
headCells.map((headcell) => {
|
|
160
160
|
return react_1.default.createElement(core_1.TableCell, { key: headcell.id, className: classes.tableCell }, headcell.label);
|
|
161
161
|
}),
|
|
162
|
-
react_1.default.createElement(core_1.TableCell, { className: classes.tableCell }))),
|
|
163
|
-
projects.map((row) =>
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
react_1.default.createElement(core_1.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
react_1.default.createElement(core_1.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
react_1.default.createElement(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
"
|
|
193
|
-
react_1.default.createElement("
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
react_1.default.createElement(
|
|
209
|
-
|
|
210
|
-
react_1.default.createElement("div", { className: "flex flex-col items-start ml-4" },
|
|
211
|
-
react_1.default.createElement("b", null,
|
|
212
|
-
"Paro Support: ",
|
|
213
|
-
react_1.default.createElement("span", null, "Apr 3, 2025")),
|
|
214
|
-
" ",
|
|
215
|
-
react_1.default.createElement("p", null, "We've received your dispute and are reviewing the timesheet discrepancies."),
|
|
216
|
-
react_1.default.createElement("p", null, "We'll follow up with the expert and update you by Apr 5."),
|
|
217
|
-
react_1.default.createElement("p", null, obj.paroSupport)))
|
|
218
|
-
:
|
|
219
|
-
react_1.default.createElement("div", { className: "flex flex-row-reverse w-[85%] justify-items-end items-center ml-auto my-1" },
|
|
220
|
-
react_1.default.createElement("div", { className: "flex justify-center items-center bg-[#4cbaff] h-12 w-12 rounded-full text-2xl text-white ml-4" }, "A"),
|
|
221
|
-
react_1.default.createElement("p", null, obj.you));
|
|
222
|
-
})),
|
|
223
|
-
react_1.default.createElement("div", { className: "flex flex-row w-[95%] m-2 ml-4 justify-start" },
|
|
224
|
-
react_1.default.createElement(DiscussionThread_1.DiscussionThread, { currentUser: user, initialThreads: clientInvoice.chatMessages, createDisputeChatMessage: createDisputeChatMessage }),
|
|
225
|
-
react_1.default.createElement(base_ui_2.Input, { label: "", type: "text", className: "w-[60vw] mx-4 overflow-ellipsis", value: discussion, onChange: (e) => setDiscussion(e.target.value), placeholder: "Type your reply here..." }),
|
|
226
|
-
react_1.default.createElement(base_ui_2.Button, { label: "Save", size: "md", color: "success", className: "ml-2 mt-1 w-full", disabled: !discussion, onClick: () => {
|
|
227
|
-
setProjects((prev) => prev.map((p) => p.projectId === row.projectId
|
|
228
|
-
? Object.assign(Object.assign({}, p), { discussion: [...p.discussion, { you: discussion }] }) : p));
|
|
229
|
-
setEditingRowId(null);
|
|
230
|
-
setDiscussion('');
|
|
231
|
-
} })))))))))))));
|
|
162
|
+
react_1.default.createElement(core_1.TableCell, { className: classes.tableCell }))), projects === null || projects === void 0 ? void 0 :
|
|
163
|
+
projects.map((row) => {
|
|
164
|
+
var _a, _b;
|
|
165
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
166
|
+
react_1.default.createElement(core_1.TableRow, { key: row.projectId },
|
|
167
|
+
react_1.default.createElement(core_1.TableCell, { align: "left", className: classes.tableCell }, (_a = row.project) === null || _a === void 0 ? void 0 : _a.name),
|
|
168
|
+
react_1.default.createElement(core_1.TableCell, { align: "left", className: classes.tableCell }, row.disputeType),
|
|
169
|
+
react_1.default.createElement(core_1.TableCell, { align: "left", className: classes.tableCell }, row.hours),
|
|
170
|
+
react_1.default.createElement(core_1.TableCell, { align: "left", className: classes.tableCell }, row.disputeAmount),
|
|
171
|
+
react_1.default.createElement(core_1.TableCell, { align: "left", className: classes.tableCell }, row.disputeReasonCode),
|
|
172
|
+
react_1.default.createElement(core_1.TableCell, { align: "left", className: classes.tableCell },
|
|
173
|
+
react_1.default.createElement(core_1.IconButton, { onClick: () => { setExpandRow(expandRow === row.projectId ? null : row.projectId); } }, expandRow === row.projectId ? react_1.default.createElement(base_icons_1.IconChevronUp, null) : react_1.default.createElement(base_icons_1.IconChevronDown, null)))),
|
|
174
|
+
expandRow &&
|
|
175
|
+
react_1.default.createElement(core_1.TableRow, null,
|
|
176
|
+
react_1.default.createElement(core_1.TableCell, { colSpan: headCells.length + 1, style: { paddingBottom: 0, paddingTop: 0 } },
|
|
177
|
+
react_1.default.createElement(core_1.Collapse, { in: expandRow === row.projectId, timeout: "auto", unmountOnExit: true },
|
|
178
|
+
react_1.default.createElement(react_1.default.Fragment, null,
|
|
179
|
+
react_1.default.createElement(base_ui_1.Card, { className: `bg-[#F8F9FA] m-2 md:mx-8 flex md:flex items-start justify-between rounded flex-col w-[95%] p-6` },
|
|
180
|
+
react_1.default.createElement("b", { className: "mb-2 flex flex-row justify-start items-center" },
|
|
181
|
+
"Explanation:",
|
|
182
|
+
editingRowId === row.projectId ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
183
|
+
react_1.default.createElement(base_ui_2.Input, { label: "", type: "text", className: "w-96 mx-4 overflow-ellipsis", value: editedExplanation, onChange: (e) => setEditedExplanation(e.target.value), placeholder: "Please provide an explanation", isInvalid: !editedExplanation, isInvalidText: "Please provide an explanation" }),
|
|
184
|
+
react_1.default.createElement(base_ui_2.Button, { label: "Save", size: "md", color: "success", className: "ml-2 mt-1", onClick: () => {
|
|
185
|
+
setProjects((prev) => prev.map((p) => p.projectId === row.projectId
|
|
186
|
+
? Object.assign(Object.assign({}, p), { clientExplanation: editedExplanation }) : p));
|
|
187
|
+
setEditingRowId(null);
|
|
188
|
+
} }))) : (react_1.default.createElement(base_ui_2.Button, { label: "Edit", iconLeft: react_1.default.createElement(base_icons_1.IconPencil, { size: 'sm' }), onClick: () => {
|
|
189
|
+
setEditedExplanation(row.clientExplanation);
|
|
190
|
+
setEditingRowId(row.projectId);
|
|
191
|
+
}, size: "sm", color: "info", className: "ml-6" }))),
|
|
192
|
+
react_1.default.createElement("p", null, row.clientExplanation),
|
|
193
|
+
react_1.default.createElement("b", { className: "flex flex-row flex-wrap justify-start items-center mt-2" },
|
|
194
|
+
"Supporting Documents:",
|
|
195
|
+
react_1.default.createElement("input", { id: "upload-file", type: "file", multiple: true, accept: ".pdf,.doc,.docx", style: { display: 'none' }, ref: fileInputRef, onChange: handleUpload }),
|
|
196
|
+
react_1.default.createElement(base_ui_2.Button, { label: "Add File", iconLeft: react_1.default.createElement(base_icons_1.IconPlus, { size: 'sm' }), onClick: () => { fileInputRef.current && fileInputRef.current.click(); }, size: 'sm', color: "info", className: "mx-2" }),
|
|
197
|
+
row.clientDocumentLinks && ((_b = row.clientDocumentLinks) === null || _b === void 0 ? void 0 : _b.map((f) => {
|
|
198
|
+
return react_1.default.createElement("div", { className: "mx-2" },
|
|
199
|
+
react_1.default.createElement(base_ui_1.Tag, { variant: "subtle", color: "success", label: f, iconRight: react_1.default.createElement(base_icons_1.IconXCircle, null), onClick: () => {
|
|
200
|
+
const updatedFiles = projects.map((p) => {
|
|
201
|
+
const updatedFiles = p.files.filter((file) => file !== f);
|
|
202
|
+
return Object.assign(Object.assign({}, p), { files: updatedFiles });
|
|
203
|
+
});
|
|
204
|
+
setProjects(updatedFiles);
|
|
205
|
+
} }));
|
|
206
|
+
})))),
|
|
207
|
+
react_1.default.createElement("div", { className: "flex flex-row w-[95%] m-2 ml-4 justify-start" },
|
|
208
|
+
react_1.default.createElement(DiscussionThread_1.DiscussionThread, { key: row.projectId, currentUser: user, initialThreads: clientInvoice.chatMessages, createDisputeChatMessage: createDisputeChatMessage }))))))));
|
|
209
|
+
})))));
|
|
232
210
|
};
|
|
233
211
|
exports.InvoiceCard = InvoiceCard;
|