@paro.io/expert-shared-components 1.12.36 → 1.12.37
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/Escalations/AccountSuspensionBanner.d.ts +5 -0
- package/lib/components/Escalations/AccountSuspensionBanner.js +37 -0
- package/lib/components/Escalations/AccountSuspensionModal.d.ts +5 -0
- package/lib/components/Escalations/AccountSuspensionModal.js +112 -0
- package/lib/components/Escalations/EscalationChat.d.ts +6 -0
- package/lib/components/Escalations/EscalationChat.js +89 -0
- package/lib/components/Escalations/EscalationReportBanner.d.ts +4 -0
- package/lib/components/Escalations/EscalationReportBanner.js +20 -0
- package/lib/components/Escalations/EscalationRespondForm.d.ts +6 -0
- package/lib/components/Escalations/EscalationRespondForm.js +103 -0
- package/lib/components/Escalations/EscalationSubmitForm.d.ts +9 -0
- package/lib/components/Escalations/EscalationSubmitForm.js +207 -0
- package/lib/components/Escalations/EscalationTabs.d.ts +9 -0
- package/lib/components/Escalations/EscalationTabs.js +30 -0
- package/lib/components/Escalations/EscalationTabsContent.d.ts +17 -0
- package/lib/components/Escalations/EscalationTabsContent.js +123 -0
- package/lib/components/Escalations/Escalations.d.ts +10 -0
- package/lib/components/Escalations/Escalations.js +143 -0
- package/lib/components/Escalations/index.d.ts +1 -0
- package/lib/components/Escalations/index.js +5 -0
- package/lib/components/ExpertProfileHeader/ActionButtonSection.js +6 -6
- package/lib/components/ExpertProfileHeader/ProfileSection.js +7 -7
- package/lib/components/Invoices/TestDecisionSection.d.ts +1 -1
- package/lib/components/Invoices/TestDecisionSection.js +126 -126
- 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/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/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/package.json +61 -61
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type EscalationChatDetails = {
|
|
2
|
+
title: string;
|
|
3
|
+
project: string;
|
|
4
|
+
caseId: string;
|
|
5
|
+
status: string;
|
|
6
|
+
};
|
|
7
|
+
interface EscalationTabProps {
|
|
8
|
+
activeTab: string;
|
|
9
|
+
openEscalationChat: (details: EscalationChatDetails) => void;
|
|
10
|
+
setSelectedIssue: (issue: string) => void;
|
|
11
|
+
activeIssues: any[];
|
|
12
|
+
inProgressIssues: any[];
|
|
13
|
+
resolvedIssues: any[];
|
|
14
|
+
isExpert: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare const EscalationTabsContent: ({ activeTab, openEscalationChat, setSelectedIssue, activeIssues, inProgressIssues, resolvedIssues, isExpert, }: EscalationTabProps) => JSX.Element;
|
|
17
|
+
export default EscalationTabsContent;
|
|
@@ -0,0 +1,123 @@
|
|
|
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 base_ui_1 = require("@paro.io/base-ui");
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
;
|
|
9
|
+
const getBackgroundColor = (type) => {
|
|
10
|
+
switch (type) {
|
|
11
|
+
case 'Critical':
|
|
12
|
+
return 'danger';
|
|
13
|
+
case 'High':
|
|
14
|
+
return 'warning';
|
|
15
|
+
case 'Medium':
|
|
16
|
+
return 'info';
|
|
17
|
+
case 'Low':
|
|
18
|
+
return 'default';
|
|
19
|
+
default:
|
|
20
|
+
return 'default';
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const EscalationTabsContent = ({ activeTab, openEscalationChat, setSelectedIssue, activeIssues, inProgressIssues, resolvedIssues, isExpert, }) => {
|
|
24
|
+
if (activeTab === 'action-required') {
|
|
25
|
+
return (react_1.default.createElement("div", null,
|
|
26
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between mb-4" },
|
|
27
|
+
react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Issues Requiring Your Response"),
|
|
28
|
+
react_1.default.createElement("div", { className: "text-sm text-gray-500" }, "Ordered by urgency")),
|
|
29
|
+
activeIssues.length > 0 ? react_1.default.createElement("div", { className: "space-y-4" }, activeIssues.map((issue) => (react_1.default.createElement("div", { key: issue.caseId, className: "border border-gray-200 rounded-lg bg-white p-4" },
|
|
30
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
31
|
+
react_1.default.createElement(base_ui_1.Tag, { label: issue.tag, color: getBackgroundColor(issue.tag) }),
|
|
32
|
+
react_1.default.createElement("div", { className: "flex-1 ml-2" },
|
|
33
|
+
react_1.default.createElement("div", { className: "font-bold" }, issue.title),
|
|
34
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500" },
|
|
35
|
+
issue.project,
|
|
36
|
+
" \u2022 Case #",
|
|
37
|
+
issue.caseId))),
|
|
38
|
+
react_1.default.createElement("div", { className: "bg-gray-50 rounded-md p-3 mb-4 border" },
|
|
39
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between mb-2" },
|
|
40
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500" }, issue.submitted)),
|
|
41
|
+
react_1.default.createElement("div", { className: "text-sm text-gray-600 italic" }, issue.message)),
|
|
42
|
+
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
43
|
+
react_1.default.createElement(base_ui_1.Button, { label: "Chat", onClick: () => openEscalationChat({
|
|
44
|
+
title: issue.title,
|
|
45
|
+
project: issue.project,
|
|
46
|
+
caseId: issue.caseId,
|
|
47
|
+
status: issue.status
|
|
48
|
+
}), color: "primary" }),
|
|
49
|
+
react_1.default.createElement(base_ui_1.Button, { label: "Respond to Escalation", onClick: () => setSelectedIssue(issue.respondKey), color: 'info', className: "bg-info hover:bg-white text-white hover:text-info-dark" }))))))
|
|
50
|
+
:
|
|
51
|
+
react_1.default.createElement("div", null, "No Active issues.")));
|
|
52
|
+
}
|
|
53
|
+
if (activeTab === 'in-progress') {
|
|
54
|
+
return (react_1.default.createElement("div", null,
|
|
55
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between mb-4" },
|
|
56
|
+
react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Issues In Progress"),
|
|
57
|
+
react_1.default.createElement("div", { className: "text-sm text-gray-500" }, "Being handled by our team")),
|
|
58
|
+
inProgressIssues.length > 0 ? react_1.default.createElement("div", { className: "space-y-4" }, inProgressIssues.map((issue) => (react_1.default.createElement("div", { key: issue.caseId, className: "border border-gray-200 rounded-lg bg-white p-4" },
|
|
59
|
+
react_1.default.createElement("div", { className: "flex items-start justify-between mb-3" },
|
|
60
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
61
|
+
react_1.default.createElement(base_ui_1.Tag, { label: issue.tag, color: getBackgroundColor(issue.tag) }),
|
|
62
|
+
react_1.default.createElement("div", { className: "flex-1 ml-2" },
|
|
63
|
+
react_1.default.createElement("div", { className: "font-bold" }, issue.title),
|
|
64
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500" },
|
|
65
|
+
issue.project,
|
|
66
|
+
" \u2022 Case #",
|
|
67
|
+
issue.caseId),
|
|
68
|
+
issue.extra))),
|
|
69
|
+
react_1.default.createElement("div", { className: "bg-gray-50 rounded-md p-3 mb-4 border" },
|
|
70
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between mb-2" },
|
|
71
|
+
react_1.default.createElement("span", { className: "text-sm font-medium" }, issue.updateLabel),
|
|
72
|
+
react_1.default.createElement("div", { className: "text-xs text-gray-500" }, issue.updateTime)),
|
|
73
|
+
react_1.default.createElement("div", { className: "text-sm text-gray-600 italic mb-3" }, issue.message)),
|
|
74
|
+
react_1.default.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
75
|
+
react_1.default.createElement(base_ui_1.Button, { onClick: () => openEscalationChat({
|
|
76
|
+
title: issue.title,
|
|
77
|
+
project: issue.project,
|
|
78
|
+
caseId: issue.caseId,
|
|
79
|
+
status: issue.status
|
|
80
|
+
}), label: "Chat", color: "primary" }),
|
|
81
|
+
!isExpert && react_1.default.createElement(base_ui_1.Button, { onClick: issue.markResolved, label: "Mark as Resolved", color: "info", className: "bg-info hover:bg-none text-white hover:text-info-dark" })))))) :
|
|
82
|
+
react_1.default.createElement("div", null, "No inProgress issues.")));
|
|
83
|
+
}
|
|
84
|
+
if (activeTab === 'resolved') {
|
|
85
|
+
return (react_1.default.createElement("div", null,
|
|
86
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between mb-4" },
|
|
87
|
+
react_1.default.createElement("h3", { className: "text-lg font-semibold text-gray-900" }, "Recently Resolved Issues"),
|
|
88
|
+
react_1.default.createElement("button", { className: "text-sm text-gray-500 hover:text-gray-700 flex items-center" },
|
|
89
|
+
react_1.default.createElement("span", null, "View All History"))),
|
|
90
|
+
resolvedIssues.length > 0 ? react_1.default.createElement("div", { className: "space-y-3" }, resolvedIssues.map((issue) => (react_1.default.createElement("div", { key: issue.caseId, className: "border border-green-200 rounded-lg bg-green-50 p-4" },
|
|
91
|
+
react_1.default.createElement("div", { className: "flex items-start justify-between" },
|
|
92
|
+
react_1.default.createElement("div", { className: "flex items-start" },
|
|
93
|
+
react_1.default.createElement("div", null,
|
|
94
|
+
react_1.default.createElement("h4", { className: "font-medium text-gray-900 mb-1" }, issue.title),
|
|
95
|
+
react_1.default.createElement("div", { className: "flex items-center text-sm text-gray-600 mb-2" },
|
|
96
|
+
react_1.default.createElement("span", null, issue.person),
|
|
97
|
+
react_1.default.createElement("span", { className: "mx-2" }, "\u2022"),
|
|
98
|
+
react_1.default.createElement("span", null, issue.project),
|
|
99
|
+
react_1.default.createElement("span", { className: "mx-2" }, "\u2022"),
|
|
100
|
+
react_1.default.createElement("span", null,
|
|
101
|
+
"Case #",
|
|
102
|
+
issue.caseId)),
|
|
103
|
+
react_1.default.createElement("p", { className: "text-sm text-gray-600 mb-3" }, issue.description),
|
|
104
|
+
react_1.default.createElement("div", { className: "flex items-center text-sm text-gray-600 mb-2" },
|
|
105
|
+
react_1.default.createElement("span", { className: "text-xs text-gray-500" },
|
|
106
|
+
"Resolved ",
|
|
107
|
+
issue.resolvedDate),
|
|
108
|
+
react_1.default.createElement("span", { className: "mx-2" }, "\u2022"),
|
|
109
|
+
react_1.default.createElement("span", { className: "text-xs text-gray-500" },
|
|
110
|
+
"Resolved By ",
|
|
111
|
+
issue.resolvedBy)))),
|
|
112
|
+
react_1.default.createElement(base_ui_1.Button, { onClick: () => openEscalationChat({
|
|
113
|
+
title: issue.chatTitle,
|
|
114
|
+
project: issue.project,
|
|
115
|
+
caseId: issue.caseId,
|
|
116
|
+
status: issue.chatStatus
|
|
117
|
+
}), label: "Chat", color: "primary" }))))))
|
|
118
|
+
:
|
|
119
|
+
react_1.default.createElement("div", null, "No resolved issues.")));
|
|
120
|
+
}
|
|
121
|
+
return react_1.default.createElement(react_1.default.Fragment, null);
|
|
122
|
+
};
|
|
123
|
+
exports.default = EscalationTabsContent;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface EscalationsProps {
|
|
2
|
+
experts: any[];
|
|
3
|
+
projects: any[];
|
|
4
|
+
isExpert: boolean;
|
|
5
|
+
activeIssues: any[];
|
|
6
|
+
inProgressIssues: any[];
|
|
7
|
+
resolvedIssues: any[];
|
|
8
|
+
}
|
|
9
|
+
export declare const Escalations: ({ experts, projects, isExpert, activeIssues, inProgressIssues, resolvedIssues, }: EscalationsProps) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,143 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Escalations = void 0;
|
|
30
|
+
const react_1 = __importStar(require("react"));
|
|
31
|
+
const EscalationReportBanner_1 = __importDefault(require("./EscalationReportBanner"));
|
|
32
|
+
const base_ui_1 = require("@paro.io/base-ui");
|
|
33
|
+
const EscalationTabs_1 = __importDefault(require("./EscalationTabs"));
|
|
34
|
+
const EscalationTabsContent_1 = __importDefault(require("./EscalationTabsContent"));
|
|
35
|
+
const EscalationRespondForm_1 = __importDefault(require("./EscalationRespondForm"));
|
|
36
|
+
const EscalationSubmitForm_1 = __importDefault(require("./EscalationSubmitForm"));
|
|
37
|
+
const EscalationChat_1 = __importDefault(require("./EscalationChat"));
|
|
38
|
+
const AccountSuspensionBanner_1 = __importDefault(require("./AccountSuspensionBanner"));
|
|
39
|
+
const AccountSuspensionModal_1 = __importDefault(require("./AccountSuspensionModal"));
|
|
40
|
+
const base_icons_1 = require("@paro.io/base-icons");
|
|
41
|
+
const Escalations = ({ experts, projects, isExpert = false, activeIssues, inProgressIssues, resolvedIssues, }) => {
|
|
42
|
+
const [activeSection, setActiveSection] = (0, react_1.useState)('support');
|
|
43
|
+
const [selectedProject, setSelectedProject] = (0, react_1.useState)(null);
|
|
44
|
+
const [selectedIssue, setSelectedIssue] = (0, react_1.useState)(null);
|
|
45
|
+
const [showEscalationChat, setShowEscalationChat] = (0, react_1.useState)(false);
|
|
46
|
+
const [activeChatIssue, setActiveChatIssue] = (0, react_1.useState)(null); // update required
|
|
47
|
+
const [activeEscalationTab, setActiveEscalationTab] = (0, react_1.useState)('action-required');
|
|
48
|
+
const [showSuspensionModal, setShowSuspensionModal] = (0, react_1.useState)(false);
|
|
49
|
+
const goBack = () => {
|
|
50
|
+
if (selectedIssue) {
|
|
51
|
+
setSelectedIssue(null);
|
|
52
|
+
}
|
|
53
|
+
else if (selectedProject) {
|
|
54
|
+
setSelectedProject(null);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
setActiveSection('support');
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const goHome = () => {
|
|
61
|
+
setSelectedIssue(null);
|
|
62
|
+
setSelectedProject(null);
|
|
63
|
+
setActiveSection('support');
|
|
64
|
+
};
|
|
65
|
+
const openEscalationChat = (issue) => {
|
|
66
|
+
setActiveChatIssue(issue);
|
|
67
|
+
setShowEscalationChat(true);
|
|
68
|
+
};
|
|
69
|
+
return (react_1.default.createElement("div", { className: "bg-white w-full" },
|
|
70
|
+
react_1.default.createElement("div", { className: isExpert ? "p-6" : "mx-auto p-6 border-solid border-t-2" },
|
|
71
|
+
activeSection === 'support' && !selectedIssue && react_1.default.createElement("div", null,
|
|
72
|
+
react_1.default.createElement("div", { className: "flex justify-between items-center mb-1 mt-2" },
|
|
73
|
+
react_1.default.createElement("h2", { className: "text-xl font-bold" }, "Support & Escalation Management"),
|
|
74
|
+
activeIssues.length && react_1.default.createElement("div", { className: "flex items-center space-x-2" },
|
|
75
|
+
react_1.default.createElement(base_ui_1.Tag, { label: `${activeIssues.length} Active Issues`, color: "danger" }))),
|
|
76
|
+
react_1.default.createElement("div", { className: "border-b pb-4 mb-6" },
|
|
77
|
+
react_1.default.createElement("p", { className: "text-gray-600" }, `Manage escalations with integrated chat between you, your ${isExpert ? 'client' : 'expert'}, and Paro support. All conversations are organized by priority and status.`)),
|
|
78
|
+
react_1.default.createElement("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4 mb-6" },
|
|
79
|
+
react_1.default.createElement("h3", { className: "font-medium text-blue-800 mb-3" }, "How Our Escalation System Works"),
|
|
80
|
+
react_1.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" },
|
|
81
|
+
react_1.default.createElement("div", null,
|
|
82
|
+
react_1.default.createElement("h4", { className: "font-medium text-gray-900 mb-2" }, "Standard Resolution Process"),
|
|
83
|
+
react_1.default.createElement("div", { className: "space-y-2 text-sm text-gray-600" },
|
|
84
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
85
|
+
react_1.default.createElement("div", { className: "bg-blue-500 w-2 h-2 rounded-full mr-2" }),
|
|
86
|
+
react_1.default.createElement("span", null,
|
|
87
|
+
react_1.default.createElement("strong", null, "Step 1:"),
|
|
88
|
+
" ",
|
|
89
|
+
`Issue escalated to ${isExpert ? 'client' : 'expert'} & Paro support`)),
|
|
90
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
91
|
+
react_1.default.createElement("div", { className: "bg-blue-500 w-2 h-2 rounded-full mr-2" }),
|
|
92
|
+
react_1.default.createElement("span", null,
|
|
93
|
+
react_1.default.createElement("strong", null, "Step 2:"),
|
|
94
|
+
" ",
|
|
95
|
+
`${isExpert ? 'Client' : 'Expert'} response with solution/timeline`)),
|
|
96
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
97
|
+
react_1.default.createElement("div", { className: "bg-blue-500 w-2 h-2 rounded-full mr-2" }),
|
|
98
|
+
react_1.default.createElement("span", null,
|
|
99
|
+
react_1.default.createElement("strong", null, "Step 3:"),
|
|
100
|
+
" Implementation & resolution confirmation"))),
|
|
101
|
+
react_1.default.createElement("div", { className: "mt-3 text-xs text-gray-600 bg-white p-2 rounded border" },
|
|
102
|
+
react_1.default.createElement("strong", null, "Chat integration:"),
|
|
103
|
+
" ",
|
|
104
|
+
`All escalations include real-time chat with ${isExpert ? 'client' : 'expert'} and support team for transparent communication.`)),
|
|
105
|
+
react_1.default.createElement("div", null,
|
|
106
|
+
react_1.default.createElement("h4", { className: "font-medium text-gray-900 mb-2" }, "Priority Levels & Response Times"),
|
|
107
|
+
react_1.default.createElement("div", { className: "space-y-2 text-sm" },
|
|
108
|
+
react_1.default.createElement("div", { className: "flex items-center gap-x-2" },
|
|
109
|
+
react_1.default.createElement(base_ui_1.Tag, { label: "Critical", color: "danger" }),
|
|
110
|
+
react_1.default.createElement("span", null, "All work blocked")),
|
|
111
|
+
react_1.default.createElement("div", { className: "flex items-center gap-x-2" },
|
|
112
|
+
react_1.default.createElement(base_ui_1.Tag, { label: "High", color: "warning" }),
|
|
113
|
+
react_1.default.createElement("span", null, "Progress blocked")),
|
|
114
|
+
react_1.default.createElement("div", { className: "flex items-center gap-x-2" },
|
|
115
|
+
react_1.default.createElement(base_ui_1.Tag, { label: "Medium", color: "info" }),
|
|
116
|
+
react_1.default.createElement("span", null, "Timeline impacted")),
|
|
117
|
+
react_1.default.createElement("div", { className: "flex items-center gap-x-2" },
|
|
118
|
+
react_1.default.createElement(base_ui_1.Tag, { label: "Low", color: "neutral" }),
|
|
119
|
+
react_1.default.createElement("span", null, "Minor impact")))))),
|
|
120
|
+
isExpert &&
|
|
121
|
+
react_1.default.createElement("div", { className: "rounded-lg p-2 mb-4 shadow-lg" },
|
|
122
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between" },
|
|
123
|
+
react_1.default.createElement("div", { className: "flex items-center" },
|
|
124
|
+
react_1.default.createElement("div", { className: "bg-white bg-opacity-20 rounded-full p-2 mr-3" },
|
|
125
|
+
react_1.default.createElement(base_icons_1.IconExclamationCircle, { className: "h-6 w-6 text-black" })),
|
|
126
|
+
react_1.default.createElement("div", null,
|
|
127
|
+
react_1.default.createElement("div", { className: "mr-4" },
|
|
128
|
+
react_1.default.createElement("h3", { className: "font-semibold text-sm mb-1" }, "Need Support with a Client?"),
|
|
129
|
+
react_1.default.createElement("p", { className: "text-xs" }, "Report payment, scope, or communication activeIssues")))),
|
|
130
|
+
react_1.default.createElement(base_ui_1.Button, { label: "Report issue", onClick: () => setSelectedIssue('submit-escalation'), iconLeft: react_1.default.createElement(base_icons_1.IconExclamation, { size: "sm", className: "text-white" }), color: "info", className: "bg-info hover:bg-white text-white hover:text-info-dark" }))),
|
|
131
|
+
isExpert &&
|
|
132
|
+
react_1.default.createElement(AccountSuspensionBanner_1.default, { setShowSuspensionModal: setShowSuspensionModal, suspended: false }),
|
|
133
|
+
!isExpert &&
|
|
134
|
+
react_1.default.createElement(EscalationReportBanner_1.default, { onReport: () => setSelectedIssue('submit-escalation') }),
|
|
135
|
+
react_1.default.createElement(EscalationTabs_1.default, { activeTab: activeEscalationTab, setActiveTab: setActiveEscalationTab, activeIssues: activeIssues.length, inProgressIssues: inProgressIssues.length, resolvedIssues: resolvedIssues.length }),
|
|
136
|
+
react_1.default.createElement(EscalationTabsContent_1.default, { activeTab: activeEscalationTab, openEscalationChat: openEscalationChat, setSelectedIssue: setSelectedIssue, activeIssues: activeIssues, inProgressIssues: inProgressIssues, resolvedIssues: resolvedIssues, isExpert: isExpert })),
|
|
137
|
+
activeSection === 'support' && (selectedIssue === 'respond-to-issue-critical' || selectedIssue === 'respond-to-issue-medium') && (react_1.default.createElement(EscalationRespondForm_1.default, { goBack: goBack, selectedIssue: selectedIssue, goHome: goHome })),
|
|
138
|
+
activeSection === 'support' && selectedIssue === 'submit-escalation' && (react_1.default.createElement(EscalationSubmitForm_1.default, { goBack: goBack, goHome: goHome, experts: experts, projects: projects, isExpert: isExpert })),
|
|
139
|
+
showEscalationChat && activeChatIssue && (react_1.default.createElement(EscalationChat_1.default, { activeChatIssue: activeChatIssue, showEscalationChat: showEscalationChat, setShowEscalationChat: setShowEscalationChat })),
|
|
140
|
+
showSuspensionModal &&
|
|
141
|
+
react_1.default.createElement(AccountSuspensionModal_1.default, { showSuspensionModal: showSuspensionModal, onClose: () => setShowSuspensionModal(false) }))));
|
|
142
|
+
};
|
|
143
|
+
exports.Escalations = Escalations;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Escalations } from './Escalations';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Escalations = void 0;
|
|
4
|
+
var Escalations_1 = require("./Escalations");
|
|
5
|
+
Object.defineProperty(exports, "Escalations", { enumerable: true, get: function () { return Escalations_1.Escalations; } });
|
|
@@ -11,12 +11,12 @@ const CopyToClipboardAlert_1 = __importDefault(require("../shared/CopyToClipboar
|
|
|
11
11
|
const colors_1 = __importDefault(require("../ClientReferencesSection/constants/colors"));
|
|
12
12
|
const Banner_1 = __importDefault(require("./Banner"));
|
|
13
13
|
const base_icons_1 = require("@paro.io/base-icons");
|
|
14
|
-
const StyledButton = (0, styled_components_1.default)(core_1.Button) `
|
|
15
|
-
margin: 0px !important;
|
|
16
|
-
padding: 26px 0 18px 0 !important;
|
|
17
|
-
span {
|
|
18
|
-
color: ${colors_1.default.buttonText} !important
|
|
19
|
-
}
|
|
14
|
+
const StyledButton = (0, styled_components_1.default)(core_1.Button) `
|
|
15
|
+
margin: 0px !important;
|
|
16
|
+
padding: 26px 0 18px 0 !important;
|
|
17
|
+
span {
|
|
18
|
+
color: ${colors_1.default.buttonText} !important
|
|
19
|
+
}
|
|
20
20
|
`;
|
|
21
21
|
const ActionButton = ({ title, ariaLabel, onClick, icon: Icon }) => (react_1.default.createElement(core_1.Tooltip, { arrow: true, placement: "top", interactive: true, className: "whitespace-nowrap", title: title },
|
|
22
22
|
react_1.default.createElement(core_1.IconButton, { "aria-label": ariaLabel, onClick: onClick },
|
|
@@ -53,13 +53,13 @@ const formatPhoneNumber = (phone) => {
|
|
|
53
53
|
return `(${numericPhone.slice(0, 3)}) ${numericPhone.slice(3, 6)} - ${numericPhone.slice(6)}`;
|
|
54
54
|
};
|
|
55
55
|
exports.formatPhoneNumber = formatPhoneNumber;
|
|
56
|
-
exports.ProfilePhotoPreview = styled_components_1.default.img `
|
|
57
|
-
height: 86px;
|
|
58
|
-
width: 86px;
|
|
59
|
-
border: 1px solid ${colors_1.default.lightGray};
|
|
60
|
-
border-radius: 50%;
|
|
61
|
-
object-fit: cover;
|
|
62
|
-
object-position: top;
|
|
56
|
+
exports.ProfilePhotoPreview = styled_components_1.default.img `
|
|
57
|
+
height: 86px;
|
|
58
|
+
width: 86px;
|
|
59
|
+
border: 1px solid ${colors_1.default.lightGray};
|
|
60
|
+
border-radius: 50%;
|
|
61
|
+
object-fit: cover;
|
|
62
|
+
object-position: top;
|
|
63
63
|
`;
|
|
64
64
|
const ProfileSection = ({ legacyFreelancerId, imageUrl, shouldAllowEditProfile, firstName, lastName, primaryServiceLine, editServiceLine, city, stateAbbreviation, email, phone, setOpen, paroProjectsData, getUserDocument, uploadUserPhotoMutation, loadingNewImage, imageUpdateError, isInternal, getUserByEmail, updateUserEmail, updateUserMutation, getUserByEmailLazyQuery, updateUserPassword, verifyUserPassword, getExpertRates, paroTenure, hourlyRate, }) => {
|
|
65
65
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TestDecisionSection: () => JSX.Element;
|
|
1
|
+
export declare const TestDecisionSection: () => JSX.Element;
|
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.TestDecisionSection = void 0;
|
|
16
|
-
const react_1 = __importDefault(require("react"));
|
|
17
|
-
const DecisionSection_1 = require("./DecisionSection");
|
|
18
|
-
// Test data from the provided JSON
|
|
19
|
-
const testDispute = {
|
|
20
|
-
"__typename": "ClientInvoiceDispute",
|
|
21
|
-
"disputeId": 35,
|
|
22
|
-
"approvedAmount": 450,
|
|
23
|
-
"chatEnabled": true,
|
|
24
|
-
"disputeDate": "2025-05-22",
|
|
25
|
-
"disputeUpdatedDate": "2025-05-23",
|
|
26
|
-
"freelancerId": 8081,
|
|
27
|
-
"freelancer": {
|
|
28
|
-
"__typename": "User",
|
|
29
|
-
"id": 8081,
|
|
30
|
-
"email": "andpande@gmail.com",
|
|
31
|
-
"firstName": "William",
|
|
32
|
-
"lastName": "Annon"
|
|
33
|
-
},
|
|
34
|
-
"status": "Resolved",
|
|
35
|
-
"finalDecisionOwnerId": 29005,
|
|
36
|
-
"invoice": {
|
|
37
|
-
"__typename": "ClientInvoice",
|
|
38
|
-
"amount": 450,
|
|
39
|
-
"balanceDue": 450,
|
|
40
|
-
"clientId": 4433,
|
|
41
|
-
"dateGenerated": "2025-04-14",
|
|
42
|
-
"id": 175325,
|
|
43
|
-
"month": "2025-04-01"
|
|
44
|
-
},
|
|
45
|
-
"disputeProjects": [
|
|
46
|
-
{
|
|
47
|
-
"__typename": "ClientInvoiceDisputeProject",
|
|
48
|
-
"id": 37,
|
|
49
|
-
"projectId": 19158,
|
|
50
|
-
"disputeAmount": 450,
|
|
51
|
-
"disputeHours": 30,
|
|
52
|
-
"disputeType": "Hourly",
|
|
53
|
-
"disputeReasonCode": "Incorrect Hours Logged",
|
|
54
|
-
"clientExplanation": "I have a dispute over this expert for the current invoice 175325",
|
|
55
|
-
"clientDocumentLinks": "https://expert-client-dispute-files.s3.amazonaws.com/project-19158%2Ftesting.pdf,https://expert-client-dispute-files.s3.amazonaws.com/project-19158%2F_Carmelita_Resume-Graduation__1_.docx",
|
|
56
|
-
"expertDocumentLinks": "https://expert-client-dispute-files.s3.amazonaws.com/project-19158%2F0eb4b31b-b6d8-4cd1-b6ac-39b807ea4577.pdf",
|
|
57
|
-
"resolutionMode": null,
|
|
58
|
-
"resolutionType": null,
|
|
59
|
-
"project": {
|
|
60
|
-
"__typename": "Project",
|
|
61
|
-
"name": "Ongoing Ad-Hoc Support",
|
|
62
|
-
"freelancerRate": null,
|
|
63
|
-
"clientRate": null,
|
|
64
|
-
"projectHours": [
|
|
65
|
-
{
|
|
66
|
-
"__typename": "ProjectHour",
|
|
67
|
-
"id": 136605,
|
|
68
|
-
"date": "2022-02-11",
|
|
69
|
-
"description": "Ate Tacos",
|
|
70
|
-
"hours": 8
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"__typename": "ProjectHour",
|
|
74
|
-
"id": 136606,
|
|
75
|
-
"date": "2022-02-12",
|
|
76
|
-
"description": "Worked on project analysis",
|
|
77
|
-
"hours": 6
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"__typename": "ProjectHour",
|
|
81
|
-
"id": 136607,
|
|
82
|
-
"date": "2022-02-13",
|
|
83
|
-
"description": "Client meeting and documentation",
|
|
84
|
-
"hours": 4
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"__typename": "ProjectHour",
|
|
88
|
-
"id": 136608,
|
|
89
|
-
"date": "2022-02-14",
|
|
90
|
-
"description": "Code review and testing",
|
|
91
|
-
"hours": 7
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"__typename": "ProjectHour",
|
|
95
|
-
"id": 136609,
|
|
96
|
-
"date": "2022-02-15",
|
|
97
|
-
"description": "Final deliverable preparation",
|
|
98
|
-
"hours": 5
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
],
|
|
104
|
-
"lastMessageAt": "2025-05-23T10:56:53.000Z",
|
|
105
|
-
"messageCount": 5,
|
|
106
|
-
"client": {
|
|
107
|
-
"__typename": "Client",
|
|
108
|
-
"name": "Vessel Advisors"
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
const testUser = {
|
|
112
|
-
userId: 29005,
|
|
113
|
-
firstName: "Test",
|
|
114
|
-
lastName: "User"
|
|
115
|
-
};
|
|
116
|
-
const TestDecisionSection = () => {
|
|
117
|
-
const mockOnUpdateDispute = (variables) => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
-
console.log('Mock update dispute called with:', variables);
|
|
119
|
-
return Promise.resolve({ success: true });
|
|
120
|
-
});
|
|
121
|
-
const mockUpdateInvoiceMutation = {};
|
|
122
|
-
return (react_1.default.createElement("div", { className: "p-8 max-w-4xl mx-auto" },
|
|
123
|
-
react_1.default.createElement("h1", { className: "text-2xl font-bold mb-6" }, "Test Decision Section with Hours Modal"),
|
|
124
|
-
react_1.default.createElement(DecisionSection_1.DecisionSection, { dispute: testDispute, onUpdateDispute: mockOnUpdateDispute, updateInvoiceMutation: mockUpdateInvoiceMutation, user: testUser })));
|
|
125
|
-
};
|
|
126
|
-
exports.TestDecisionSection = TestDecisionSection;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TestDecisionSection = void 0;
|
|
16
|
+
const react_1 = __importDefault(require("react"));
|
|
17
|
+
const DecisionSection_1 = require("./DecisionSection");
|
|
18
|
+
// Test data from the provided JSON
|
|
19
|
+
const testDispute = {
|
|
20
|
+
"__typename": "ClientInvoiceDispute",
|
|
21
|
+
"disputeId": 35,
|
|
22
|
+
"approvedAmount": 450,
|
|
23
|
+
"chatEnabled": true,
|
|
24
|
+
"disputeDate": "2025-05-22",
|
|
25
|
+
"disputeUpdatedDate": "2025-05-23",
|
|
26
|
+
"freelancerId": 8081,
|
|
27
|
+
"freelancer": {
|
|
28
|
+
"__typename": "User",
|
|
29
|
+
"id": 8081,
|
|
30
|
+
"email": "andpande@gmail.com",
|
|
31
|
+
"firstName": "William",
|
|
32
|
+
"lastName": "Annon"
|
|
33
|
+
},
|
|
34
|
+
"status": "Resolved",
|
|
35
|
+
"finalDecisionOwnerId": 29005,
|
|
36
|
+
"invoice": {
|
|
37
|
+
"__typename": "ClientInvoice",
|
|
38
|
+
"amount": 450,
|
|
39
|
+
"balanceDue": 450,
|
|
40
|
+
"clientId": 4433,
|
|
41
|
+
"dateGenerated": "2025-04-14",
|
|
42
|
+
"id": 175325,
|
|
43
|
+
"month": "2025-04-01"
|
|
44
|
+
},
|
|
45
|
+
"disputeProjects": [
|
|
46
|
+
{
|
|
47
|
+
"__typename": "ClientInvoiceDisputeProject",
|
|
48
|
+
"id": 37,
|
|
49
|
+
"projectId": 19158,
|
|
50
|
+
"disputeAmount": 450,
|
|
51
|
+
"disputeHours": 30,
|
|
52
|
+
"disputeType": "Hourly",
|
|
53
|
+
"disputeReasonCode": "Incorrect Hours Logged",
|
|
54
|
+
"clientExplanation": "I have a dispute over this expert for the current invoice 175325",
|
|
55
|
+
"clientDocumentLinks": "https://expert-client-dispute-files.s3.amazonaws.com/project-19158%2Ftesting.pdf,https://expert-client-dispute-files.s3.amazonaws.com/project-19158%2F_Carmelita_Resume-Graduation__1_.docx",
|
|
56
|
+
"expertDocumentLinks": "https://expert-client-dispute-files.s3.amazonaws.com/project-19158%2F0eb4b31b-b6d8-4cd1-b6ac-39b807ea4577.pdf",
|
|
57
|
+
"resolutionMode": null,
|
|
58
|
+
"resolutionType": null,
|
|
59
|
+
"project": {
|
|
60
|
+
"__typename": "Project",
|
|
61
|
+
"name": "Ongoing Ad-Hoc Support",
|
|
62
|
+
"freelancerRate": null,
|
|
63
|
+
"clientRate": null,
|
|
64
|
+
"projectHours": [
|
|
65
|
+
{
|
|
66
|
+
"__typename": "ProjectHour",
|
|
67
|
+
"id": 136605,
|
|
68
|
+
"date": "2022-02-11",
|
|
69
|
+
"description": "Ate Tacos",
|
|
70
|
+
"hours": 8
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"__typename": "ProjectHour",
|
|
74
|
+
"id": 136606,
|
|
75
|
+
"date": "2022-02-12",
|
|
76
|
+
"description": "Worked on project analysis",
|
|
77
|
+
"hours": 6
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"__typename": "ProjectHour",
|
|
81
|
+
"id": 136607,
|
|
82
|
+
"date": "2022-02-13",
|
|
83
|
+
"description": "Client meeting and documentation",
|
|
84
|
+
"hours": 4
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"__typename": "ProjectHour",
|
|
88
|
+
"id": 136608,
|
|
89
|
+
"date": "2022-02-14",
|
|
90
|
+
"description": "Code review and testing",
|
|
91
|
+
"hours": 7
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"__typename": "ProjectHour",
|
|
95
|
+
"id": 136609,
|
|
96
|
+
"date": "2022-02-15",
|
|
97
|
+
"description": "Final deliverable preparation",
|
|
98
|
+
"hours": 5
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"lastMessageAt": "2025-05-23T10:56:53.000Z",
|
|
105
|
+
"messageCount": 5,
|
|
106
|
+
"client": {
|
|
107
|
+
"__typename": "Client",
|
|
108
|
+
"name": "Vessel Advisors"
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const testUser = {
|
|
112
|
+
userId: 29005,
|
|
113
|
+
firstName: "Test",
|
|
114
|
+
lastName: "User"
|
|
115
|
+
};
|
|
116
|
+
const TestDecisionSection = () => {
|
|
117
|
+
const mockOnUpdateDispute = (variables) => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
+
console.log('Mock update dispute called with:', variables);
|
|
119
|
+
return Promise.resolve({ success: true });
|
|
120
|
+
});
|
|
121
|
+
const mockUpdateInvoiceMutation = {};
|
|
122
|
+
return (react_1.default.createElement("div", { className: "p-8 max-w-4xl mx-auto" },
|
|
123
|
+
react_1.default.createElement("h1", { className: "text-2xl font-bold mb-6" }, "Test Decision Section with Hours Modal"),
|
|
124
|
+
react_1.default.createElement(DecisionSection_1.DecisionSection, { dispute: testDispute, onUpdateDispute: mockOnUpdateDispute, updateInvoiceMutation: mockUpdateInvoiceMutation, user: testUser })));
|
|
125
|
+
};
|
|
126
|
+
exports.TestDecisionSection = TestDecisionSection;
|