@rh-support/troubleshoot 2.2.139 → 2.2.141
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/lib/esm/components/AccountInfo/OwnerSelector.d.ts.map +1 -1
- package/lib/esm/components/AccountInfo/OwnerSelector.js +3 -79
- package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutionsItem.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutionsItem.js +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.js +108 -55
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseComments.js +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/DiscussionItemLink.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/DiscussionItemLink.js +1 -1
- package/lib/esm/scss/_main.scss +16 -0
- package/lib/esm/scss/_pf-overrides.scss +8 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAkB/D,UAAU,MAAM;CAAG;AAEnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,qBAuOnC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -7,8 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
11
|
-
import { CaseContactsSelectorExternal, getHydraContactLabel, getPhoneObj, renderMenuItemChildren, ToastNotification, usePrevious, ValueChangedIcon, } from '@rh-support/components';
|
|
10
|
+
import { CaseContactsSelectorExternal, getHydraContactLabel, renderMenuItemChildren, ToastNotification, usePrevious, ValueChangedIcon, } from '@rh-support/components';
|
|
12
11
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
13
12
|
import { sortHydraContacts } from '@rh-support/utils';
|
|
14
13
|
import filter from 'lodash/filter';
|
|
@@ -28,18 +27,17 @@ import { getChangedValueTooltip } from '../shared/utils';
|
|
|
28
27
|
function OwnerSelector(props) {
|
|
29
28
|
const { t } = useTranslation();
|
|
30
29
|
const caseUpdateError = useCaseUpdateErrorMessage();
|
|
31
|
-
const { accountNumber, caseNumber, selectedNotificationContacts, selectedOwner, selectedCaseGroupUsers, isCaseOwnerUpdating,
|
|
30
|
+
const { accountNumber, caseNumber, selectedNotificationContacts, selectedOwner, selectedCaseGroupUsers, isCaseOwnerUpdating, } = useCaseSelector((state) => ({
|
|
32
31
|
accountNumber: state.caseDetails.accountNumberRef,
|
|
33
32
|
caseNumber: state.caseDetails.caseNumber,
|
|
34
33
|
selectedNotificationContacts: state.selectedNotificationContacts,
|
|
35
34
|
selectedOwner: state.selectedOwner,
|
|
36
35
|
selectedCaseGroupUsers: state.selectedCaseGroupUsers,
|
|
37
36
|
isCaseOwnerUpdating: state.isCaseOwnerUpdating,
|
|
38
|
-
hasLoggedInUserConfirmedPhoneNumber: state.hasLoggedInUserConfirmedPhoneNumber,
|
|
39
37
|
}), isEqual);
|
|
40
38
|
const { routeState: { isNextBtnClickedToShowValidationError }, } = useContext(RouteContext);
|
|
41
39
|
const caseDispatch = useCaseDispatch();
|
|
42
|
-
const { globalMetadataState: { loggedInUserRights
|
|
40
|
+
const { globalMetadataState: { loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
|
|
43
41
|
const previousAccountNumber = usePrevious(accountNumber);
|
|
44
42
|
const { isExportingPDF } = useContext(PDFContext);
|
|
45
43
|
const [usersWithGroupAccess, setUsersWithGroupAccess] = useState([]);
|
|
@@ -51,79 +49,6 @@ function OwnerSelector(props) {
|
|
|
51
49
|
!isEmpty(pvalue.ssoUsername) &&
|
|
52
50
|
value.ssoUsername !== pvalue.ssoUsername;
|
|
53
51
|
const canEditCase = useCanEditCase();
|
|
54
|
-
const updatePhone = (phoneSetting) => __awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
yield updateCaseDetails(caseDispatch, caseNumber, phoneSetting);
|
|
56
|
-
setCaseDetails(caseDispatch, Object.assign({}, phoneSetting));
|
|
57
|
-
});
|
|
58
|
-
// set owner on updating a case
|
|
59
|
-
const updateContactPhoneNumber = (sso) => __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
try {
|
|
61
|
-
// logged in user and case owner are the same
|
|
62
|
-
if (sso === loggedInUser.data.ssoUsername) {
|
|
63
|
-
try {
|
|
64
|
-
const loggedInUserContact = yield (contacts === null || contacts === void 0 ? void 0 : contacts.getSFDCContactBySso(sso)); // to get updated loggedIn user contact details
|
|
65
|
-
if (loggedInUserContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
66
|
-
yield updatePhone({
|
|
67
|
-
phoneAreaCodePrefixLineNumber: loggedInUserContact.supportPhoneAreaCodePrefixLineNumber || '',
|
|
68
|
-
phoneCountryCode: loggedInUserContact.supportPhoneCountryCode || '',
|
|
69
|
-
suppliedPhoneNumberVerified: isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') || //hasLoggedInUserConfirmedPhoneNumber: global verification phone state for contactSSOName === loggedInUser.data.ssoUsername
|
|
70
|
-
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
|
|
71
|
-
? hasLoggedInUserConfirmedPhoneNumber
|
|
72
|
-
: 'False',
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
yield updatePhone({
|
|
77
|
-
phoneAreaCodePrefixLineNumber: getPhoneObj(loggedInUserContact.phone).phoneLine || '',
|
|
78
|
-
phoneCountryCode: getPhoneObj(loggedInUserContact.phone).countryCode || '',
|
|
79
|
-
suppliedPhoneNumberVerified: isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') || //hasLoggedInUserConfirmedPhoneNumber: global verification phone state for contactSSOName === loggedInUser.data.ssoUsername
|
|
80
|
-
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
|
|
81
|
-
? hasLoggedInUserConfirmedPhoneNumber
|
|
82
|
-
: 'False',
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch (e) {
|
|
87
|
-
yield updatePhone({
|
|
88
|
-
phoneAreaCodePrefixLineNumber: '',
|
|
89
|
-
phoneCountryCode: '',
|
|
90
|
-
suppliedPhoneNumberVerified: 'False',
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
// logged in user and case owner are different
|
|
96
|
-
try {
|
|
97
|
-
const selectedContact = yield contacts.getSFDCContactBySso(sso);
|
|
98
|
-
if (selectedContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
99
|
-
yield updatePhone({
|
|
100
|
-
phoneAreaCodePrefixLineNumber: selectedContact.supportPhoneAreaCodePrefixLineNumber,
|
|
101
|
-
phoneCountryCode: selectedContact.supportPhoneCountryCode,
|
|
102
|
-
suppliedPhoneNumberVerified: 'Deferred',
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
yield updatePhone({
|
|
107
|
-
phoneAreaCodePrefixLineNumber: getPhoneObj(selectedContact.phone).phoneLine || '',
|
|
108
|
-
phoneCountryCode: getPhoneObj(selectedContact.phone).countryCode || '',
|
|
109
|
-
suppliedPhoneNumberVerified: 'Deferred',
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
yield updatePhone({
|
|
115
|
-
phoneAreaCodePrefixLineNumber: '',
|
|
116
|
-
phoneCountryCode: '',
|
|
117
|
-
suppliedPhoneNumberVerified: 'False',
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
ToastNotification.addSuccessMessage(t(`Phone number has been successfully updated`));
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
caseUpdateError.showError(e, t(`Phone number failed to update`));
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
52
|
/**
|
|
128
53
|
* Changing selected owner related
|
|
129
54
|
*/
|
|
@@ -183,7 +108,6 @@ function OwnerSelector(props) {
|
|
|
183
108
|
setLocalOwnerChange(true);
|
|
184
109
|
updateNotifyUsersList(newOwner);
|
|
185
110
|
ToastNotification.addSuccessMessage(t(`Owner has been successfully updated`));
|
|
186
|
-
yield updateContactPhoneNumber(newOwner.ssoUsername);
|
|
187
111
|
setCaseState(caseDispatch, { isCaseOwnerUpdating: false });
|
|
188
112
|
}
|
|
189
113
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseSolutionsItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseSolutions/CaseSolutionsItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAQ5E,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,UAAU,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,8BAA8B,CAAC;IAC/C,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,8BAA+B,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;CACnD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CaseSolutionsItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseSolutions/CaseSolutionsItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAQ5E,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,UAAU,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,8BAA8B,CAAC;IAC/C,YAAY,EAAE,GAAG,CAAC;IAClB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,8BAA+B,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;CACnD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,qBAwD9C"}
|
|
@@ -17,7 +17,7 @@ export function CaseSolutionsItem(props) {
|
|
|
17
17
|
!isLoading && props.showPin && (React.createElement(React.Fragment, null,
|
|
18
18
|
React.createElement(Icon, { size: "md" }, props.isPinned ? (React.createElement(StarIcon, { className: "pinned-resource", color: "0066cc" })) : (React.createElement(OutlinedStarIcon, { className: "pinned-resource", color: "0066cc" }))))),
|
|
19
19
|
!isLoading && props.showLink && React.createElement(LinkIcon, null)),
|
|
20
|
-
React.createElement("a", { href: props.recommendation.resourceViewURI, "data-tracking-id": `case-resource-${props.type}-link-${props.index}`, target: "_blank", rel: "noopener noreferrer", dangerouslySetInnerHTML: {
|
|
20
|
+
React.createElement("a", { href: props.recommendation.resourceViewURI, "data-tracking-id": `case-resource-${props.type}-link-${props.index}`, target: "_blank", rel: "noopener noreferrer", className: "case-resource-recommendation-link", dangerouslySetInnerHTML: {
|
|
21
21
|
__html: DOMPurify.sanitize(truncate(decodeMarkTag(props.recommendation.title || ''), maxTitleLength)),
|
|
22
22
|
}, onClick: () => props.onLinkClick('case solution click') })),
|
|
23
23
|
React.createElement("div", { className: "result-body", dangerouslySetInnerHTML: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseContactPhoneNumber.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.tsx"],"names":[],"mappings":"AASA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAgB/D,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"CaseContactPhoneNumber.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.tsx"],"names":[],"mappings":"AASA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAgB/D,wBAAgB,sBAAsB,sBAqXrC"}
|
|
@@ -24,17 +24,16 @@ import { useCaseUpdateErrorMessage } from '../../../../hooks/useCaseUpdateErrorM
|
|
|
24
24
|
import { PHONE_LIMIT } from '../../../../reducers/CaseConstNTypes';
|
|
25
25
|
import { setCaseState, updateCaseDetails } from '../../../../reducers/CaseReducer';
|
|
26
26
|
import { ContactPhoneNumberPopOver } from '../../../CaseInformation/ContactPhoneNumberPopOver';
|
|
27
|
-
import { trimAndReplacePlus } from '../../../shared/utils';
|
|
27
|
+
import { removeAllChars, trimAndReplacePlus } from '../../../shared/utils';
|
|
28
28
|
import { PDFContext } from '../../PDFContainer';
|
|
29
29
|
export function CaseContactPhoneNumber() {
|
|
30
|
-
const { phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', caseNumber, contactSSOName, suppliedPhoneNumberVerified, isCaseOwnerUpdating,
|
|
30
|
+
const { phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', caseNumber, contactSSOName, suppliedPhoneNumberVerified, isCaseOwnerUpdating, hasLoggedInUserConfirmedPhoneNumber, } = useCaseSelector((state) => ({
|
|
31
31
|
phoneCountryCode: state.caseDetails.phoneCountryCode || '',
|
|
32
32
|
phoneAreaCodePrefixLineNumber: state.caseDetails.phoneAreaCodePrefixLineNumber || '',
|
|
33
33
|
caseNumber: state.caseDetails.caseNumber,
|
|
34
34
|
contactSSOName: state.caseDetails.contactSSOName,
|
|
35
35
|
suppliedPhoneNumberVerified: state.caseDetails.suppliedPhoneNumberVerified,
|
|
36
36
|
isCaseOwnerUpdating: state.isCaseOwnerUpdating,
|
|
37
|
-
phone: state.caseDetails.phone,
|
|
38
37
|
hasLoggedInUserConfirmedPhoneNumber: state.hasLoggedInUserConfirmedPhoneNumber,
|
|
39
38
|
}), isEqual);
|
|
40
39
|
const { globalMetadataState: { loggedInUser }, } = useContext(GlobalMetadataStateContext);
|
|
@@ -45,7 +44,7 @@ export function CaseContactPhoneNumber() {
|
|
|
45
44
|
const [localCountryCodeState, setLocalCountryCodeState] = useState(phoneCountryCode);
|
|
46
45
|
const [invalid, setInvalid] = useState(false);
|
|
47
46
|
const [isSaveClicked, setIsSavedClicked] = useState(false);
|
|
48
|
-
const [
|
|
47
|
+
const [isFetchingSSO, setIsFetchingSSO] = useState(false);
|
|
49
48
|
const caseDispatch = useCaseDispatch();
|
|
50
49
|
const caseUpdateError = useCaseUpdateErrorMessage();
|
|
51
50
|
const { t } = useTranslation();
|
|
@@ -61,21 +60,22 @@ export function CaseContactPhoneNumber() {
|
|
|
61
60
|
return;
|
|
62
61
|
setLocalCountryCodeState(countryCode);
|
|
63
62
|
};
|
|
64
|
-
const regex = /[()\s-]/g; // to have only digits in phone
|
|
65
63
|
// To check if country code is given but phone number empty
|
|
66
64
|
const isPhoneNumberInvalid = !isEmpty(localFullPhoneState) &&
|
|
67
|
-
isEmpty(localFullPhoneState
|
|
65
|
+
isEmpty(removeAllChars(localFullPhoneState).replace(localCountryCodeState, ''));
|
|
68
66
|
const isPhoneLineEmpty = isEmpty(trimAndReplacePlus(localCountryCodeState)) &&
|
|
69
67
|
isEmpty(localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.replace(localCountryCodeState, ''));
|
|
68
|
+
const showInvalidPhoneError = !isCasePhoneUpdating &&
|
|
69
|
+
!isEmpty(localFullPhoneState) &&
|
|
70
|
+
!isEmpty(phoneAreaCodePrefixLineNumber) &&
|
|
71
|
+
isEmpty(phoneCountryCode); // country code empty
|
|
70
72
|
const onSave = () => __awaiter(this, void 0, void 0, function* () {
|
|
71
73
|
setIsSavedClicked(true);
|
|
72
74
|
if (isPhoneValueCannotBeSaved)
|
|
73
75
|
return;
|
|
74
76
|
setCasePhoneUpdating(true);
|
|
75
|
-
const phoneLine = localFullPhoneState
|
|
76
|
-
|
|
77
|
-
.trim();
|
|
78
|
-
const countryCode = trimAndReplacePlus(localCountryCodeState);
|
|
77
|
+
const phoneLine = getPhoneObj(localFullPhoneState).phoneLine;
|
|
78
|
+
const countryCode = getPhoneObj(localFullPhoneState).countryCode;
|
|
79
79
|
try {
|
|
80
80
|
// update case contact info
|
|
81
81
|
yield updateCaseDetails(caseDispatch, caseNumber, Object.assign(Object.assign({ phoneCountryCode: countryCode, phoneAreaCodePrefixLineNumber: phoneLine }, (contactSSOName === loggedInUser.data.ssoUsername && { suppliedPhoneNumberVerified: 'True' })), (!countryCode && !phoneLine && { clearPhoneNumber: true, suppliedPhoneNumberVerified: 'False' })));
|
|
@@ -128,54 +128,21 @@ export function CaseContactPhoneNumber() {
|
|
|
128
128
|
isPhoneNumberInvalid ||
|
|
129
129
|
isEmpty(trimAndReplacePlus(localCountryCodeState)) ||
|
|
130
130
|
trimAndReplacePlus(localFullPhoneState) === trimAndReplacePlus(localCountryCodeState);
|
|
131
|
-
|
|
132
|
-
if (isEqual(
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
if (isEqual(localCountryCodeState.trim(), '+')) {
|
|
136
|
-
setLocalCountryCodeState('');
|
|
131
|
+
const checkingPlusInLocalFullPhone = (_localFullPhone) => {
|
|
132
|
+
if (isEqual(_localFullPhone.trim(), '+')) {
|
|
133
|
+
return '';
|
|
137
134
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const updatePhone = () => __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
var _a, _b;
|
|
142
|
-
if (isEmpty(phoneCountryCode) && isEmpty(phoneAreaCodePrefixLineNumber) && !isEmpty(phone)) {
|
|
143
|
-
const oldPhoneline = ((_a = getPhoneObj(phone)) === null || _a === void 0 ? void 0 : _a.phoneLine) || '';
|
|
144
|
-
const oldCountryCode = ((_b = getPhoneObj(phone)) === null || _b === void 0 ? void 0 : _b.countryCode) || '';
|
|
145
|
-
if (!isEmpty(oldPhoneline.trim()) && !isEmpty(trimAndReplacePlus(oldCountryCode))) {
|
|
146
|
-
setLocalFullPhoneState(oldCountryCode + ' ' + oldPhoneline);
|
|
147
|
-
setLocalCountryCodeState(oldCountryCode);
|
|
148
|
-
setCasePhoneUpdating(true);
|
|
149
|
-
try {
|
|
150
|
-
yield updateCaseDetails(caseDispatch, caseNumber, {
|
|
151
|
-
phoneCountryCode: oldCountryCode,
|
|
152
|
-
phoneAreaCodePrefixLineNumber: oldPhoneline,
|
|
153
|
-
});
|
|
154
|
-
setCasePhoneUpdating(false);
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
setCasePhoneUpdating(false);
|
|
158
|
-
caseUpdateError.showError(e, t(`Phone number failed to update`));
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
setIsShowOldPhone(true);
|
|
163
|
-
}
|
|
135
|
+
else if (!isEmpty(_localFullPhone.trim()) && !_localFullPhone.trim().startsWith('+')) {
|
|
136
|
+
return '+' + _localFullPhone.replace(' ', '');
|
|
164
137
|
}
|
|
165
138
|
else {
|
|
166
|
-
|
|
167
|
-
setIsShowOldPhone(false);
|
|
139
|
+
return _localFullPhone;
|
|
168
140
|
}
|
|
169
|
-
}
|
|
170
|
-
// should be removed when old phone field is removed by CCM team
|
|
171
|
-
useEffect(() => {
|
|
172
|
-
updatePhone();
|
|
173
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
174
|
-
}, [phone, phoneAreaCodePrefixLineNumber, phoneCountryCode]);
|
|
141
|
+
};
|
|
175
142
|
useEffect(() => {
|
|
176
143
|
if (contactSSOName === loggedInUser.data.ssoUsername) {
|
|
177
144
|
// edge case: when loggedInUser === contactSSOName while opening a case confirms or deffers the phone
|
|
178
|
-
// we need to save the verification state
|
|
145
|
+
// we need to save the verification state globally so that we don't show the phone review banner again
|
|
179
146
|
// to the user where he changes it to another owner and then again assigns himself as the case owner
|
|
180
147
|
setCaseState(caseDispatch, {
|
|
181
148
|
hasLoggedInUserConfirmedPhoneNumber: suppliedPhoneNumberVerified,
|
|
@@ -193,13 +160,99 @@ export function CaseContactPhoneNumber() {
|
|
|
193
160
|
}
|
|
194
161
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
195
162
|
}, [suppliedPhoneNumberVerified]);
|
|
163
|
+
useEffect(() => {
|
|
164
|
+
if (isEmpty(contactSSOName)) {
|
|
165
|
+
setLocalFullPhoneState('');
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const initContactPhoneNumber = () => __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
let _phoneAreaCodePrefixLineNumber;
|
|
170
|
+
let _phoneCountryCode;
|
|
171
|
+
let _suppliedPhoneNumberVerified;
|
|
172
|
+
// logged in user and case owner are the same
|
|
173
|
+
if (contactSSOName === loggedInUser.data.ssoUsername) {
|
|
174
|
+
try {
|
|
175
|
+
setIsFetchingSSO(true);
|
|
176
|
+
const loggedInUserContact = yield (contacts === null || contacts === void 0 ? void 0 : contacts.getSFDCContactBySso(contactSSOName));
|
|
177
|
+
setIsFetchingSSO(false);
|
|
178
|
+
if (loggedInUserContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
179
|
+
// User has opened a case before and has phone and area code in her/his contact on SF
|
|
180
|
+
_phoneAreaCodePrefixLineNumber = loggedInUserContact.supportPhoneAreaCodePrefixLineNumber;
|
|
181
|
+
_phoneCountryCode = loggedInUserContact.supportPhoneCountryCode;
|
|
182
|
+
_suppliedPhoneNumberVerified =
|
|
183
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
|
|
184
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
|
|
185
|
+
? hasLoggedInUserConfirmedPhoneNumber
|
|
186
|
+
: 'False';
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const phoneLine = getPhoneObj(loggedInUserContact.phone).phoneLine || '';
|
|
190
|
+
const countryCode = getPhoneObj(loggedInUserContact.phone).countryCode;
|
|
191
|
+
_phoneAreaCodePrefixLineNumber = phoneLine;
|
|
192
|
+
_phoneCountryCode = countryCode;
|
|
193
|
+
_suppliedPhoneNumberVerified =
|
|
194
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
|
|
195
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
|
|
196
|
+
? hasLoggedInUserConfirmedPhoneNumber
|
|
197
|
+
: 'False';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (_a) {
|
|
201
|
+
_phoneAreaCodePrefixLineNumber = '';
|
|
202
|
+
_phoneCountryCode = '';
|
|
203
|
+
_suppliedPhoneNumberVerified = 'False';
|
|
204
|
+
setIsFetchingSSO(false);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// user is openning case for others (use is partner or red hatter)
|
|
209
|
+
try {
|
|
210
|
+
setIsFetchingSSO(true);
|
|
211
|
+
const selectedContact = yield contacts.getSFDCContactBySso(contactSSOName);
|
|
212
|
+
setIsFetchingSSO(false);
|
|
213
|
+
if (selectedContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
214
|
+
_phoneAreaCodePrefixLineNumber = selectedContact.supportPhoneAreaCodePrefixLineNumber;
|
|
215
|
+
_phoneCountryCode = selectedContact.supportPhoneCountryCode;
|
|
216
|
+
_suppliedPhoneNumberVerified = 'Deferred';
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
_phoneAreaCodePrefixLineNumber = getPhoneObj(selectedContact.phone).phoneLine || '';
|
|
220
|
+
_phoneCountryCode = getPhoneObj(selectedContact.phone).countryCode || '';
|
|
221
|
+
_suppliedPhoneNumberVerified = 'Deferred';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
_phoneAreaCodePrefixLineNumber = '';
|
|
226
|
+
_phoneCountryCode = '';
|
|
227
|
+
_suppliedPhoneNumberVerified = 'False';
|
|
228
|
+
setIsFetchingSSO(false);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
setCasePhoneUpdating(true);
|
|
232
|
+
yield updateCaseDetails(caseDispatch, caseNumber, {
|
|
233
|
+
phoneAreaCodePrefixLineNumber: _phoneAreaCodePrefixLineNumber,
|
|
234
|
+
phoneCountryCode: _phoneCountryCode,
|
|
235
|
+
suppliedPhoneNumberVerified: _suppliedPhoneNumberVerified,
|
|
236
|
+
});
|
|
237
|
+
let _localFullPhone = _phoneCountryCode + ' ' + _phoneAreaCodePrefixLineNumber;
|
|
238
|
+
setLocalFullPhoneState(checkingPlusInLocalFullPhone(_localFullPhone));
|
|
239
|
+
setCasePhoneUpdating(false);
|
|
240
|
+
});
|
|
241
|
+
if (isEmpty(phoneCountryCode) && isEmpty(phoneAreaCodePrefixLineNumber)) {
|
|
242
|
+
initContactPhoneNumber();
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
setLocalFullPhoneState(phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber);
|
|
246
|
+
}
|
|
247
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
248
|
+
}, [contactSSOName]);
|
|
196
249
|
return (React.createElement("div", { className: "form-group pf-v5-u-pb-md", style: { minWidth: '200px' } },
|
|
197
250
|
React.createElement("h3", { className: `subheading subheading-sm ${isExportingPDF ? 'expand-input' : ''}` },
|
|
198
251
|
React.createElement(Trans, null, "Case owner's phone number"),
|
|
199
252
|
React.createElement("span", { className: `form-required ${isExportingPDF ? 'hide-in-pdf' : ''}`, "aria-hidden": true }, "*"),
|
|
200
253
|
!isExportingPDF ? ContactPhoneNumberPopOver() : ''),
|
|
201
254
|
React.createElement(InputGroupText, null,
|
|
202
|
-
React.createElement(PhoneInput, { phoneValue: localFullPhoneState, onPhoneValueChange: onPhoneChange, onCountryCodeChange: onCountryCodeChange, validations: isPhoneNumberValid, isDisabled: isCasePhoneUpdating || isCaseOwnerUpdating || !isEditting, isLoading: isCasePhoneUpdating || isCaseOwnerUpdating, "data-tracking-id": "case-details-page-supplied-phone", invalid: invalid, setInvalid: setInvalid }),
|
|
255
|
+
React.createElement(PhoneInput, { phoneValue: localFullPhoneState, onPhoneValueChange: onPhoneChange, onCountryCodeChange: onCountryCodeChange, validations: isPhoneNumberValid, isDisabled: isCasePhoneUpdating || isCaseOwnerUpdating || !isEditting, isLoading: isCasePhoneUpdating || isCaseOwnerUpdating || isFetchingSSO, "data-tracking-id": "case-details-page-supplied-phone", invalid: invalid, setInvalid: setInvalid }),
|
|
203
256
|
isEditting ? (React.createElement(React.Fragment, null,
|
|
204
257
|
React.createElement("button", { className: "btn btn-app btn-link pf-v5-u-ml-sm", type: "button", "data-tracking-id": "case-details-page-supplied-phone-save", onClick: () => onSave(), "aria-label": "Save", disabled: (isSaveClicked && isPhoneValueCannotBeSaved) ||
|
|
205
258
|
(localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.length) > PHONE_LIMIT ||
|
|
@@ -213,7 +266,7 @@ export function CaseContactPhoneNumber() {
|
|
|
213
266
|
!invalid &&
|
|
214
267
|
(localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.length) < PHONE_LIMIT &&
|
|
215
268
|
!(isSaveClicked && isPhoneValueCannotBeSaved) &&
|
|
216
|
-
!
|
|
269
|
+
!showInvalidPhoneError && (React.createElement("p", { className: "form-instructions" },
|
|
217
270
|
React.createElement(Trans, null, PHONE_INSTRUCTION))),
|
|
218
271
|
invalid && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
219
272
|
React.createElement(Trans, null, PHONE_NO_CHAR_ERROR))),
|
|
@@ -224,9 +277,9 @@ export function CaseContactPhoneNumber() {
|
|
|
224
277
|
React.createElement(Trans, null, PHONE_LINE_CANNOT_BE_EMPTY))),
|
|
225
278
|
isSaveClicked && isEmpty(trimAndReplacePlus(localCountryCodeState)) && !isPhoneLineEmpty && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
226
279
|
React.createElement(Trans, null, PHONE_IS_NOT_VALID))),
|
|
227
|
-
|
|
280
|
+
showInvalidPhoneError && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
228
281
|
React.createElement(Trans, null,
|
|
229
282
|
"The phone number on case is ",
|
|
230
|
-
|
|
283
|
+
localFullPhoneState,
|
|
231
284
|
". The format of the phone field is changed and this phone does not fit.")))));
|
|
232
285
|
}
|
|
@@ -218,7 +218,7 @@ const CaseComments = React.forwardRef((props, ref) => {
|
|
|
218
218
|
React.createElement("span", { className: "pull-right pf-v5-l-flex pf-m-align-items-center" },
|
|
219
219
|
props.showJumpToComment && (React.createElement(DiscussionItemLink, { onClick: onJumpToComment(props.comment.id), discussionType: DiscussionType.COMMENT, itemId: props.comment.id, caseNumber: caseNumber, isCopyLink: false },
|
|
220
220
|
React.createElement(Trans, null, "Jump to comment"))),
|
|
221
|
-
React.createElement("button", { onClick: commentReply(props.comment), className: `btn btn-app btn-link ${isExportingPDF ? 'hide-in-pdf' : ''}`, "data-tracking-id": "case-comment-reply", type: "button" },
|
|
221
|
+
React.createElement("button", { onClick: commentReply(props.comment), className: `btn btn-app btn-link case-reply-button ${isExportingPDF ? 'hide-in-pdf' : ''}`, "data-tracking-id": "case-comment-reply", type: "button" },
|
|
222
222
|
React.createElement(Trans, null, "Reply")),
|
|
223
223
|
React.createElement(JumpAndCopyLink, { caseNumber: caseNumber, cardId: props.comment.id, discussionType: DiscussionType.COMMENT })))));
|
|
224
224
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscussionItemLink.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/DiscussionItemLink.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAE/E,UAAU,MAAM;IACZ,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AASD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"DiscussionItemLink.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/DiscussionItemLink.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAE/E,UAAU,MAAM;IACZ,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AASD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,qBA0B/C"}
|
|
@@ -21,5 +21,5 @@ export function DiscussionItemLink(props) {
|
|
|
21
21
|
return (React.createElement(Link, { replace: true, to: {
|
|
22
22
|
pathname: `/case/${props.caseNumber}/discussion`,
|
|
23
23
|
search: getQueryString(),
|
|
24
|
-
}, onClick: props.onClick, "data-tracking-id": `${!props.isCopyLink ? 'jumptocomment-' : 'case-'}${trackingIdMap[props.discussionType]}` }, props.children));
|
|
24
|
+
}, className: "case-public-private-link", onClick: props.onClick, "data-tracking-id": `${!props.isCopyLink ? 'jumptocomment-' : 'case-'}${trackingIdMap[props.discussionType]}` }, props.children));
|
|
25
25
|
}
|
package/lib/esm/scss/_main.scss
CHANGED
|
@@ -585,6 +585,10 @@ div.support-grid-case-details.support-case {
|
|
|
585
585
|
}
|
|
586
586
|
}
|
|
587
587
|
}
|
|
588
|
+
.btn.btn-app.btn-link.case-reply-button {
|
|
589
|
+
padding-left: 0.5rem;
|
|
590
|
+
padding-right: 0.5rem;
|
|
591
|
+
}
|
|
588
592
|
}
|
|
589
593
|
|
|
590
594
|
.text-danger {
|
|
@@ -973,3 +977,15 @@ svg.pf-v5-u-ml-xs.icon-size {
|
|
|
973
977
|
position: relative;
|
|
974
978
|
top: 1px;
|
|
975
979
|
}
|
|
980
|
+
|
|
981
|
+
#rh-support {
|
|
982
|
+
#rh-support-manage {
|
|
983
|
+
.grid-main.manage {
|
|
984
|
+
.pf-v5-c-tabs__item {
|
|
985
|
+
a {
|
|
986
|
+
color: var(--pf-v5-global--palette--black-700);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
}
|
|
@@ -712,3 +712,11 @@ label.react-typeahead-label-wrapper {
|
|
|
712
712
|
padding-top: var(--pf-v5-global--spacer--sm);
|
|
713
713
|
}
|
|
714
714
|
}
|
|
715
|
+
.case-public-private-link {
|
|
716
|
+
padding: 0.5rem;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
a.case-resource-recommendation-link {
|
|
720
|
+
padding: 0.5rem;
|
|
721
|
+
padding-left: 0px;
|
|
722
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rh-support/troubleshoot",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.141",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"@progress/kendo-licensing": "1.3.5",
|
|
61
61
|
"@progress/kendo-react-pdf": "^5.16.0",
|
|
62
62
|
"@redux-devtools/extension": "^3.3.0",
|
|
63
|
-
"@rh-support/components": "2.1.
|
|
64
|
-
"@rh-support/react-context": "2.1.
|
|
63
|
+
"@rh-support/components": "2.1.69",
|
|
64
|
+
"@rh-support/react-context": "2.1.77",
|
|
65
65
|
"@rh-support/types": "2.0.4",
|
|
66
66
|
"@rh-support/user-permissions": "2.1.48",
|
|
67
67
|
"@rh-support/utils": "2.1.37",
|
|
@@ -131,5 +131,5 @@
|
|
|
131
131
|
"defaults and supports es6-module",
|
|
132
132
|
"maintained node versions"
|
|
133
133
|
],
|
|
134
|
-
"gitHead": "
|
|
134
|
+
"gitHead": "8720a44261dd585266b2cfdf2bf5092a0cec88d0"
|
|
135
135
|
}
|