@rh-support/troubleshoot 2.2.3 → 2.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/components/AccountInfo/AccountSelector.js +1 -1
- package/lib/esm/components/AccountInfo/OwnerSelector.d.ts.map +1 -1
- package/lib/esm/components/AccountInfo/OwnerSelector.js +46 -23
- package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/CaseOverview/index.js +2 -0
- package/lib/esm/components/CaseEditView/PDFContainer.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/PDFContainer.js +2 -9
- package/lib/esm/components/CaseEditView/Tabs/CaseActionPlan/CaseActionPlan.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseActionPlan/CaseActionPlan.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 +36 -27
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberConfirmAlert.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberConfirmAlert.js +8 -5
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberSev1ConfirmAlert.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberSev1ConfirmAlert.js +4 -4
- package/lib/esm/components/CaseInformation/ContactPhoneNumber.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/ContactPhoneNumber.js +25 -20
- package/lib/esm/components/CaseManagement/CaseLanguageSelector.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/CaseLanguageSelector.js +1 -1
- package/lib/esm/components/CaseManagement/NoClusterIDReasonSelector.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/NoClusterIDReasonSelector.js +1 -1
- package/lib/esm/components/CaseManagement/OpenShiftV3Inputbox.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/OpenShiftV3Inputbox.js +1 -1
- package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.js +1 -1
- package/lib/esm/components/CaseManagement/RHAssociatesSelector.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/RHAssociatesSelector.js +1 -1
- package/lib/esm/components/OpenCase/OpenCase.js +2 -2
- package/lib/esm/components/OpenCase/SupportTypeSelectorPage.d.ts.map +1 -1
- package/lib/esm/components/OpenCase/SupportTypeSelectorPage.js +9 -1
- package/lib/esm/components/Recommendations/ClusterRecommendations.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/ClusterRecommendations.js +1 -1
- package/lib/esm/components/Recommendations/CriticalSolutionsToast.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/CriticalSolutionsToast.js +2 -2
- package/lib/esm/components/Recommendations/InsightsResults.js +1 -1
- package/lib/esm/components/Recommendations/InsightsRuleInfo.js +1 -1
- package/lib/esm/components/Review/Review.js +1 -1
- package/lib/esm/components/Suggestions/Suggestions.d.ts.map +1 -1
- package/lib/esm/components/Suggestions/Suggestions.js +1 -1
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.d.ts.map +1 -1
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.js +2 -2
- package/lib/esm/components/shared/fileUpload/FileLister.d.ts.map +1 -1
- package/lib/esm/components/shared/fileUpload/FileLister.js +2 -2
- package/lib/esm/components/shared/fileUpload/fileSelectors/FileSelectorButton.js +1 -1
- package/lib/esm/components/shared/useIsSectionValid.d.ts.map +1 -1
- package/lib/esm/components/shared/useIsSectionValid.js +5 -13
- package/lib/esm/components/shared/utils.d.ts +1 -0
- package/lib/esm/components/shared/utils.d.ts.map +1 -1
- package/lib/esm/components/shared/utils.js +16 -0
- package/lib/esm/constants/caseDetailsConstants.d.ts +3 -0
- package/lib/esm/constants/caseDetailsConstants.d.ts.map +1 -1
- package/lib/esm/constants/caseDetailsConstants.js +3 -0
- package/lib/esm/hooks/useWizard.d.ts.map +1 -1
- package/lib/esm/hooks/useWizard.js +3 -2
- package/lib/esm/reducers/CaseHelpers.d.ts.map +1 -1
- package/lib/esm/reducers/CaseHelpers.js +4 -17
- package/lib/esm/scss/_main.scss +5 -0
- package/package.json +8 -8
|
@@ -119,7 +119,7 @@ function AccountSelector(props) {
|
|
|
119
119
|
React.createElement(Trans, null, "Find my account")))),
|
|
120
120
|
React.createElement("div", { className: "account-selector-wrapper" },
|
|
121
121
|
React.createElement(AccountSelectorInternal, { selectedAccounts: [selectedAccount], canBookmarkAccount: canBookmarkAccounts, bookmarkedAccounts: bookmarkedGroupAccounts.data, id: "account-or-bookmark-selector", className: "account-selector", name: "account-or-bookmark-selector", placeholder: t(`Search for an account ${loggedInUserRights.data.isExternal() ? 'or select a bookmark' : ''} `), onSelect: onInternalAccountSelect, disabled: loggedInUserRights.data.isExternal() || selectedAccountDetails.isFetching, isInValid: isSelectedAccountSubscriptionAbused, restrictedOnSubscriptionAbuse: true })),
|
|
122
|
-
canAccessManagedAccounts && (React.createElement(ManagedAccountsDropdown, { className: "managed-account-selector", onManagedAccountChange: onManagedAccountChange, managedAccounts: managedAccounts, selectedAccountNumber: accountNumber, disabled: selectedAccountDetails.isFetching })),
|
|
122
|
+
canAccessManagedAccounts && (React.createElement(ManagedAccountsDropdown, { className: "managed-account-selector pf-u-mt-xl", onManagedAccountChange: onManagedAccountChange, managedAccounts: managedAccounts, selectedAccountNumber: accountNumber, disabled: selectedAccountDetails.isFetching })),
|
|
123
123
|
isSelectedAccountSubscriptionAbused && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
124
124
|
React.createElement(InfoCircleIcon, null),
|
|
125
125
|
' ',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAqCA,UAAU,MAAM;CAAG;AAEnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAqCA,UAAU,MAAM;CAAG;AAEnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,eA0VnC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { contacts } from '@cee-eng/hydrajs';
|
|
11
|
-
import { CaseContactsSelectorExternal, getHydraContactLabel, renderMenuItemChildren, ToastNotification, usePrevious, ValueChangedIcon, } from '@rh-support/components';
|
|
11
|
+
import { CaseContactsSelectorExternal, getHydraContactLabel, getPhoneObj, renderMenuItemChildren, ToastNotification, usePrevious, ValueChangedIcon, } from '@rh-support/components';
|
|
12
12
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
13
13
|
import { sortHydraContacts } from '@rh-support/utils';
|
|
14
14
|
import filter from 'lodash/filter';
|
|
@@ -28,13 +28,14 @@ import { getChangedValueTooltip } from '../shared/utils';
|
|
|
28
28
|
function OwnerSelector(props) {
|
|
29
29
|
const { t } = useTranslation();
|
|
30
30
|
const caseUpdateError = useCaseUpdateErrorMessage();
|
|
31
|
-
const { accountNumber, caseNumber, selectedNotificationContacts, selectedOwner, selectedCaseGroupUsers, isCaseOwnerUpdating, } = useCaseSelector((state) => ({
|
|
31
|
+
const { accountNumber, caseNumber, selectedNotificationContacts, selectedOwner, selectedCaseGroupUsers, isCaseOwnerUpdating, caseDetailes, } = useCaseSelector((state) => ({
|
|
32
32
|
accountNumber: state.caseDetails.accountNumberRef,
|
|
33
33
|
caseNumber: state.caseDetails.caseNumber,
|
|
34
34
|
selectedNotificationContacts: state.selectedNotificationContacts,
|
|
35
35
|
selectedOwner: state.selectedOwner,
|
|
36
36
|
selectedCaseGroupUsers: state.selectedCaseGroupUsers,
|
|
37
37
|
isCaseOwnerUpdating: state.isCaseOwnerUpdating,
|
|
38
|
+
caseDetailes: state.caseDetails,
|
|
38
39
|
}), isEqual);
|
|
39
40
|
const { routeState: { isNextBtnClickedToShowValidationError }, } = useContext(RouteContext);
|
|
40
41
|
const caseDispatch = useCaseDispatch();
|
|
@@ -50,7 +51,9 @@ function OwnerSelector(props) {
|
|
|
50
51
|
!isEmpty(pvalue.ssoUsername) &&
|
|
51
52
|
value.ssoUsername !== pvalue.ssoUsername;
|
|
52
53
|
const canEditCase = useCanEditCase();
|
|
54
|
+
// set owner on creating a case
|
|
53
55
|
const setContactPhoneNumber = (sso) => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
// logged in user and case owner are the same
|
|
54
57
|
if (sso === loggedInUser.data.ssoUsername) {
|
|
55
58
|
if (loggedInUser.data.supportPhoneAreaCodePrefixLineNumber) {
|
|
56
59
|
setCaseDetails(caseDispatch, {
|
|
@@ -61,7 +64,8 @@ function OwnerSelector(props) {
|
|
|
61
64
|
}
|
|
62
65
|
else {
|
|
63
66
|
setCaseDetails(caseDispatch, {
|
|
64
|
-
|
|
67
|
+
phoneAreaCodePrefixLineNumber: getPhoneObj(loggedInUser.data.phone).phoneLine || '',
|
|
68
|
+
phoneCountryCode: getPhoneObj(loggedInUser.data.phone).countryCode,
|
|
65
69
|
suppliedPhoneNumberVerified: 'True',
|
|
66
70
|
});
|
|
67
71
|
}
|
|
@@ -73,12 +77,13 @@ function OwnerSelector(props) {
|
|
|
73
77
|
setCaseDetails(caseDispatch, {
|
|
74
78
|
phoneAreaCodePrefixLineNumber: selectedContact.supportPhoneAreaCodePrefixLineNumber,
|
|
75
79
|
phoneCountryCode: selectedContact.supportPhoneCountryCode,
|
|
76
|
-
suppliedPhoneNumberVerified: '
|
|
80
|
+
suppliedPhoneNumberVerified: 'Deferred',
|
|
77
81
|
});
|
|
78
82
|
}
|
|
79
83
|
else {
|
|
80
84
|
setCaseDetails(caseDispatch, {
|
|
81
|
-
|
|
85
|
+
phoneAreaCodePrefixLineNumber: getPhoneObj(selectedContact.phone).phoneLine || '',
|
|
86
|
+
phoneCountryCode: getPhoneObj(selectedContact.phone).countryCode || '',
|
|
82
87
|
suppliedPhoneNumberVerified: 'Deferred',
|
|
83
88
|
});
|
|
84
89
|
}
|
|
@@ -87,50 +92,68 @@ function OwnerSelector(props) {
|
|
|
87
92
|
setCaseDetails(caseDispatch, {
|
|
88
93
|
phoneAreaCodePrefixLineNumber: '',
|
|
89
94
|
phoneCountryCode: '',
|
|
90
|
-
suppliedPhoneNumberVerified: '
|
|
95
|
+
suppliedPhoneNumberVerified: 'False',
|
|
91
96
|
});
|
|
92
97
|
}
|
|
93
98
|
}
|
|
94
99
|
});
|
|
100
|
+
const updatePhone = (phoneSetting) => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
yield updateCaseDetails(caseDispatch, caseNumber, phoneSetting);
|
|
102
|
+
setCaseDetails(caseDispatch, Object.assign(Object.assign({}, caseDetailes), phoneSetting));
|
|
103
|
+
});
|
|
104
|
+
// set owner on updating a case
|
|
95
105
|
const updateContactPhoneNumber = (sso) => __awaiter(this, void 0, void 0, function* () {
|
|
96
106
|
try {
|
|
107
|
+
// logged in user and case owner are the same
|
|
97
108
|
if (sso === loggedInUser.data.ssoUsername) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
109
|
+
try {
|
|
110
|
+
if (loggedInUser.data.supportPhoneAreaCodePrefixLineNumber) {
|
|
111
|
+
yield updatePhone({
|
|
112
|
+
phoneAreaCodePrefixLineNumber: loggedInUser.data.supportPhoneAreaCodePrefixLineNumber,
|
|
113
|
+
phoneCountryCode: loggedInUser.data.supportPhoneCountryCode,
|
|
114
|
+
suppliedPhoneNumberVerified: 'True',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
yield updatePhone({
|
|
119
|
+
phoneAreaCodePrefixLineNumber: getPhoneObj(loggedInUser.data.phone).phoneLine || '',
|
|
120
|
+
phoneCountryCode: getPhoneObj(loggedInUser.data.phone).countryCode || '',
|
|
121
|
+
suppliedPhoneNumberVerified: 'False',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
104
124
|
}
|
|
105
|
-
|
|
106
|
-
yield
|
|
107
|
-
|
|
108
|
-
|
|
125
|
+
catch (e) {
|
|
126
|
+
yield updatePhone({
|
|
127
|
+
phoneAreaCodePrefixLineNumber: '',
|
|
128
|
+
phoneCountryCode: '',
|
|
129
|
+
suppliedPhoneNumberVerified: 'False',
|
|
109
130
|
});
|
|
110
131
|
}
|
|
111
132
|
}
|
|
112
133
|
else {
|
|
134
|
+
// logged in user and case owner are different
|
|
113
135
|
try {
|
|
114
136
|
const selectedContact = yield contacts.getSFDCContactBySso(sso);
|
|
115
137
|
if (selectedContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
116
|
-
|
|
138
|
+
yield updatePhone({
|
|
117
139
|
phoneAreaCodePrefixLineNumber: selectedContact.supportPhoneAreaCodePrefixLineNumber,
|
|
118
140
|
phoneCountryCode: selectedContact.supportPhoneCountryCode,
|
|
119
|
-
suppliedPhoneNumberVerified: '
|
|
141
|
+
suppliedPhoneNumberVerified: 'Deferred',
|
|
120
142
|
});
|
|
121
143
|
}
|
|
122
144
|
else {
|
|
123
|
-
yield
|
|
124
|
-
|
|
145
|
+
yield updatePhone({
|
|
146
|
+
phoneAreaCodePrefixLineNumber: getPhoneObj(selectedContact.phone).phoneLine || '',
|
|
147
|
+
phoneCountryCode: getPhoneObj(selectedContact.phone).countryCode || '',
|
|
125
148
|
suppliedPhoneNumberVerified: 'Deferred',
|
|
126
149
|
});
|
|
127
150
|
}
|
|
128
151
|
}
|
|
129
152
|
catch (e) {
|
|
130
|
-
yield
|
|
153
|
+
yield updatePhone({
|
|
131
154
|
phoneAreaCodePrefixLineNumber: '',
|
|
132
155
|
phoneCountryCode: '',
|
|
133
|
-
suppliedPhoneNumberVerified: '
|
|
156
|
+
suppliedPhoneNumberVerified: 'False',
|
|
134
157
|
});
|
|
135
158
|
}
|
|
136
159
|
}
|
|
@@ -252,6 +275,6 @@ function OwnerSelector(props) {
|
|
|
252
275
|
React.createElement(Trans, null, "Owner"),
|
|
253
276
|
React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, comparator: ownerComparator, isLocalChange: localOwnerChange, value: selectedOwner.data, getTooltipContent: getChangedValueTooltip(() => CaseValuesToWatch.owner, (v) => v.fullNameCustom) }),
|
|
254
277
|
React.createElement("span", { className: `form-required ${isExportingPDF ? 'hide-in-pdf' : ''}`, "aria-hidden": true }, "*")),
|
|
255
|
-
showUsersWithSelectedGroupAccess ? (React.createElement(Typeahead, { id: "get-support-owner", className: "react-select-custom", clearButton: true, isLoading: selectedCaseGroupUsers.isFetching || isCaseOwnerUpdating, options: usersWithGroupAccess, selected: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onCustomerContactSelect, labelKey: getHydraContactLabel, placeholder: t(`Search by name or username`), disabled: selectedCaseGroupUsers.isFetching || isCaseOwnerUpdating, renderMenuItemChildren: renderMenuItemChildren, "data-tracking-id": "get-support-owner" })) : (React.createElement(CaseContactsSelectorExternal, { loggedInUserRights: loggedInUserRights.data, selectedAccountNumber: accountNumber, selected: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onCustomerContactSelect, placeholder: t(`Search by name or username`), clearButton: true, id: "get-support-owner", name: "get-support-owner", className: "react-select-custom", isUpdating: isCaseOwnerUpdating, isInvalid: isNextBtnClickedToShowValidationError && isEmpty(selectedOwner.data) }))));
|
|
278
|
+
showUsersWithSelectedGroupAccess ? (React.createElement(Typeahead, { id: "get-support-owner", className: "react-select-custom", clearButton: true, isLoading: selectedCaseGroupUsers.isFetching || isCaseOwnerUpdating, options: usersWithGroupAccess, selected: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onCustomerContactSelect, labelKey: getHydraContactLabel, placeholder: t(`Search by name or username`), disabled: selectedCaseGroupUsers.isFetching || isCaseOwnerUpdating, renderMenuItemChildren: renderMenuItemChildren, "data-tracking-id": "get-support-selected-group-owner" })) : (React.createElement(CaseContactsSelectorExternal, { loggedInUserRights: loggedInUserRights.data, selectedAccountNumber: accountNumber, selected: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onCustomerContactSelect, placeholder: t(`Search by name or username`), clearButton: true, id: "get-support-owner", name: "get-support-owner", className: "react-select-custom", isUpdating: isCaseOwnerUpdating, isInvalid: isNextBtnClickedToShowValidationError && isEmpty(selectedOwner.data), "data-tracking-id": "get-support-owner" }))));
|
|
256
279
|
}
|
|
257
280
|
export { OwnerSelector };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA8D,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA8D,MAAM,OAAO,CAAC;AA8BnF,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CACnD;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,MAAM,eA6ejD"}
|
|
@@ -27,6 +27,7 @@ import { ReopenCaseModal } from '../ConfirmationModals/ReopenCaseModal';
|
|
|
27
27
|
import { PDFContext } from '../PDFContainer';
|
|
28
28
|
import { CaseInformation } from '../Tabs/CaseDetails/CaseInformation';
|
|
29
29
|
import { CaseContactPhoneNumberAlert } from '../Tabs/CaseDetails/CasePhoneNumberConfirmAlert';
|
|
30
|
+
import { CasePhoneNumberSev1ConfirmAlert } from '../Tabs/CaseDetails/CasePhoneNumberSev1ConfirmAlert';
|
|
30
31
|
import Summary from '../Tabs/CaseDetails/Summary';
|
|
31
32
|
import CaseOwnerInfo from './CaseOwnerInfo';
|
|
32
33
|
import CaseStatus from './CaseStatus';
|
|
@@ -229,6 +230,7 @@ export default function CaseOverview(props) {
|
|
|
229
230
|
React.createElement("p", { className: "pf-u-mb-sm" },
|
|
230
231
|
React.createElement(Trans, null, "The customer has received two warnings regarding inactivity. This case will be closed soon if we don't receive any input."))) })))),
|
|
231
232
|
React.createElement(CaseContactPhoneNumberAlert, { isReview: true, tabRef: props.tabsRef }),
|
|
233
|
+
React.createElement(CasePhoneNumberSev1ConfirmAlert, { isReview: true, tabRef: props.tabsRef }),
|
|
232
234
|
React.createElement("header", null,
|
|
233
235
|
React.createElement("h2", { className: "case-ID" },
|
|
234
236
|
React.createElement(Trans, null, "Case"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseEditView/PDFContainer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAGhD,UAAU,MAAM;IACZ,QAAQ,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;CACzC;AAED,UAAU,UAAU;IAChB,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;CACrC;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC;CACpD;AAED,eAAO,MAAM,UAAU,4BAIN,CAAC;AAYlB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"PDFContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseEditView/PDFContainer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAGhD,UAAU,MAAM;IACZ,QAAQ,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;CACzC;AAED,UAAU,UAAU;IAChB,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;CACrC;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC;CACpD;AAED,eAAO,MAAM,UAAU,4BAIN,CAAC;AAYlB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,eAwJzC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Button, Modal, ModalVariant
|
|
1
|
+
import { Button, Modal, ModalVariant } from '@patternfly/react-core';
|
|
2
2
|
import DownloadIcon from '@patternfly/react-icons/dist/js/icons/download-icon';
|
|
3
3
|
import { savePDF } from '@progress/kendo-react-pdf';
|
|
4
4
|
import React, { useRef, useState } from 'react';
|
|
5
|
-
import {
|
|
5
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
6
6
|
export const PDFContext = React.createContext({
|
|
7
7
|
isExportingPDF: null,
|
|
8
8
|
exportPDFButton: null,
|
|
@@ -44,13 +44,6 @@ export function PDFContainer(props) {
|
|
|
44
44
|
setValues(Object.assign(Object.assign({}, values), { [event.target.name]: event.target.value }));
|
|
45
45
|
}
|
|
46
46
|
function exportPDFButton(caseNumber) {
|
|
47
|
-
const i18n = getI18n();
|
|
48
|
-
if (i18n.language &&
|
|
49
|
-
(i18n.language === 'ja' || i18n.language === 'zh' || i18n.language === 'ko' || i18n.language === 'ru')) {
|
|
50
|
-
return (React.createElement(Tooltip, { position: TooltipPosition.auto, content: React.createElement("p", null,
|
|
51
|
-
React.createElement(Trans, null, "Case export doesn't support selected language.")) },
|
|
52
|
-
React.createElement(DownloadIcon, { className: "fake-disable", role: "button", title: "Export as PDF", "aria-disabled": "true" })));
|
|
53
|
-
}
|
|
54
47
|
return (React.createElement(Button, { title: "Export as PDF", variant: "link", isInline: true, className: isExportingPDF ? 'hide-in-pdf' : '', "data-tracking-id": "export-case-as-pdf", onClick: openModal(caseNumber), disabled: isExportingPDF, icon: React.createElement(DownloadIcon, null), iconPosition: "right" },
|
|
55
48
|
React.createElement(Trans, null, "Export")));
|
|
56
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseActionPlan.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseActionPlan/CaseActionPlan.tsx"],"names":[],"mappings":"AAqBA,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;CACtB;AAMD,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CaseActionPlan.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseActionPlan/CaseActionPlan.tsx"],"names":[],"mappings":"AAqBA,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;CACtB;AAMD,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,eAyIpC;kBAzIQ,cAAc;;;AA4IvB,eAAe,cAAc,CAAC"}
|
|
@@ -85,7 +85,7 @@ function CaseActionPlan(props) {
|
|
|
85
85
|
React.createElement(AlertMessage, { show: isInternalWithoutSFDCUser, variant: AlertType.WARNING, isInline: true, className: "pf-u-mb-lg", title: t('You need a Salesforce (SFDC) user to edit the action plan.') }),
|
|
86
86
|
React.createElement("label", { htmlFor: "rha-action-plan", className: "sr-only" },
|
|
87
87
|
React.createElement(Trans, null, "Action plan")),
|
|
88
|
-
!canUpdateActionPlan && (React.createElement("pre", { "aria-label": t('Case Action Plan'), dangerouslySetInnerHTML: commentMarkdown(actionPlan) })),
|
|
88
|
+
!canUpdateActionPlan && (React.createElement("pre", { "aria-label": t('Case Action Plan'), dangerouslySetInnerHTML: commentMarkdown(actionPlan), style: { fontFamily: isExportingPDF ? 'DejaVu Sans' : '' } })),
|
|
89
89
|
canUpdateActionPlan && (React.createElement("form", null,
|
|
90
90
|
React.createElement("div", { className: isExportingPDF ? 'hide-in-pdf' : '' },
|
|
91
91
|
React.createElement(TextAreaResizable, { className: "form-control", id: "rha-action-plan", disabled: isUpdating || isInternalWithoutSFDCUser, maxLength: 32768, name: "actionPlan", value: actionPlanState, onChange: onChange, rowsMin: 3 })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseContactPhoneNumber.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CaseContactPhoneNumber.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,gBA8MrC"}
|
|
@@ -13,10 +13,11 @@ import CheckIcon from '@patternfly/react-icons/dist/js/icons/check-icon';
|
|
|
13
13
|
import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
14
14
|
import { PhoneInput, ToastNotification } from '@rh-support/components';
|
|
15
15
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
16
|
-
import
|
|
16
|
+
import isEmpty from 'lodash/isEmpty';
|
|
17
17
|
import isEqual from 'lodash/isEqual';
|
|
18
|
-
import React, { useContext, useState } from 'react';
|
|
18
|
+
import React, { useContext, useEffect, useState } from 'react';
|
|
19
19
|
import { Trans, useTranslation } from 'react-i18next';
|
|
20
|
+
import { PHONE_IS_NOT_VALID, PHONE_LINE_CANNOT_BE_EMPTY, PHONE_NO_CHAR_ERROR, } from '../../../../constants/caseDetailsConstants';
|
|
20
21
|
import { useCaseDispatch, useCaseSelector } from '../../../../context/CaseContext';
|
|
21
22
|
import { useCaseUpdateErrorMessage } from '../../../../hooks/useCaseUpdateErrorMessage';
|
|
22
23
|
import { PHONE_LIMIT } from '../../../../reducers/CaseConstNTypes';
|
|
@@ -38,6 +39,7 @@ export function CaseContactPhoneNumber() {
|
|
|
38
39
|
const [localFullPhoneState, setLocalFullPhoneState] = useState(phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber);
|
|
39
40
|
const [localCountryCodeState, setLocalCountryCodeState] = useState(phoneCountryCode);
|
|
40
41
|
const [invalid, setInvalid] = useState(false);
|
|
42
|
+
const [isSaveClicked, setIsSavedClicked] = useState(false);
|
|
41
43
|
const caseDispatch = useCaseDispatch();
|
|
42
44
|
const caseUpdateError = useCaseUpdateErrorMessage();
|
|
43
45
|
const { t } = useTranslation();
|
|
@@ -54,23 +56,25 @@ export function CaseContactPhoneNumber() {
|
|
|
54
56
|
setLocalCountryCodeState(countryCode);
|
|
55
57
|
};
|
|
56
58
|
const onSave = () => __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
setIsSavedClicked(true);
|
|
60
|
+
if (isPhoneLineEmpty || isPhoneNumberInvalid)
|
|
61
|
+
return;
|
|
57
62
|
setCasePhoneUpdating(true);
|
|
58
63
|
const phoneLine = localFullPhoneState
|
|
59
64
|
.substring(localCountryCodeState.length, localFullPhoneState.length)
|
|
60
65
|
.trim();
|
|
61
66
|
const countryCode = localCountryCodeState.trim();
|
|
62
67
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
});
|
|
68
|
+
// update case contact info
|
|
69
|
+
yield updateCaseDetails(caseDispatch, caseNumber, Object.assign(Object.assign({ phoneCountryCode: countryCode, phoneAreaCodePrefixLineNumber: phoneLine }, (contactSSOName === loggedInUser.data.ssoUsername && { suppliedPhoneNumberVerified: 'True' })), (!countryCode && !phoneLine && { clearPhoneNumber: true, suppliedPhoneNumberVerified: 'False' })));
|
|
70
|
+
setIsSavedClicked(false);
|
|
67
71
|
setCasePhoneUpdating(false);
|
|
68
72
|
ToastNotification.addSuccessMessage(t(`Phone number has been successfully updated`));
|
|
69
73
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
supportPhoneAreaCodePrefixLineNumber: phoneLine,
|
|
73
|
-
}
|
|
74
|
+
// update logged-in user contact info
|
|
75
|
+
if (contactSSOName === loggedInUser.data.ssoUsername) {
|
|
76
|
+
yield contacts.updateContactBySSO(loggedInUser.data.ssoUsername, Object.assign({ supportPhoneCountryCode: countryCode, supportPhoneAreaCodePrefixLineNumber: phoneLine }, (!countryCode && !phoneLine && { clearPhoneNumber: true })));
|
|
77
|
+
}
|
|
74
78
|
}
|
|
75
79
|
catch (e) {
|
|
76
80
|
// silently fails
|
|
@@ -89,17 +93,11 @@ export function CaseContactPhoneNumber() {
|
|
|
89
93
|
yield updateCaseDetails(caseDispatch, caseNumber, {
|
|
90
94
|
phoneCountryCode: '',
|
|
91
95
|
phoneAreaCodePrefixLineNumber: '',
|
|
96
|
+
clearPhoneNumber: true,
|
|
97
|
+
suppliedPhoneNumberVerified: 'False',
|
|
92
98
|
});
|
|
93
99
|
setCasePhoneUpdating(false);
|
|
94
100
|
ToastNotification.addSuccessMessage(t(`Phone number has been successfully updated`));
|
|
95
|
-
try {
|
|
96
|
-
contacts.updateContactBySSO(loggedInUser.data.ssoUsername, {
|
|
97
|
-
clearPhoneNumber: true,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
catch (e) {
|
|
101
|
-
// silently fails
|
|
102
|
-
}
|
|
103
101
|
}
|
|
104
102
|
catch (e) {
|
|
105
103
|
setCasePhoneUpdating(false);
|
|
@@ -110,27 +108,38 @@ export function CaseContactPhoneNumber() {
|
|
|
110
108
|
limit: PHONE_LIMIT,
|
|
111
109
|
});
|
|
112
110
|
const isPhoneNeedsReview = contactSSOName === loggedInUser.data.ssoUsername && suppliedPhoneNumberVerified === 'Deferred';
|
|
113
|
-
|
|
111
|
+
// To check if country code is given but phone number empty
|
|
112
|
+
const isPhoneLineEmpty = !isEmpty(localFullPhoneState) && isEmpty(localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.replace(localCountryCodeState, ''));
|
|
113
|
+
const isPhoneNumberInvalid = isEmpty(localCountryCodeState) && !isEmpty(localFullPhoneState);
|
|
114
114
|
const isPhoneNumberValid = (localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.length) > PHONE_LIMIT
|
|
115
115
|
? ValidatedOptions.error
|
|
116
116
|
: isPhoneNeedsReview
|
|
117
117
|
? ValidatedOptions.warning
|
|
118
|
-
:
|
|
118
|
+
: isSaveClicked && (isPhoneLineEmpty || isPhoneNumberInvalid)
|
|
119
119
|
? ValidatedOptions.error
|
|
120
|
-
:
|
|
121
|
-
|
|
120
|
+
: invalid
|
|
121
|
+
? ValidatedOptions.error
|
|
122
|
+
: ValidatedOptions.default;
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
setLocalFullPhoneState(phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber);
|
|
125
|
+
}, [phoneCountryCode, phoneAreaCodePrefixLineNumber]);
|
|
126
|
+
return (React.createElement("div", { className: "form-group pf-u-pb-md", style: { minWidth: '200px' } },
|
|
122
127
|
React.createElement("h3", { className: `subheading subheading-sm ${isExportingPDF ? 'expand-input' : ''}` },
|
|
123
128
|
React.createElement(Trans, null, "Case owner's phone number"),
|
|
124
129
|
!isExportingPDF ? ContactPhoneNumberPopOver() : ''),
|
|
125
130
|
React.createElement(InputGroupText, { variant: InputGroupTextVariant.plain },
|
|
126
131
|
React.createElement(PhoneInput, { phoneValue: localFullPhoneState, onPhoneValueChange: onPhoneChange, onCountryCodeChange: onCountryCodeChange, validations: isPhoneNumberValid, isDisabled: isCasePhoneUpdating || isCaseOwnerUpdating, isLoading: isCasePhoneUpdating, "data-tracking-id": "case-details-page-supplied-phone", invalid: invalid, setInvalid: setInvalid }),
|
|
127
132
|
React.createElement("button", { className: "btn btn-app btn-link pf-u-ml-sm", type: "button", "data-tracking-id": "case-details-page-supplied-phone-save", onClick: () => onSave(), disabled: (localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.length) > PHONE_LIMIT ||
|
|
128
|
-
localFullPhoneState === phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber
|
|
133
|
+
localFullPhoneState === phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber ||
|
|
134
|
+
(isSaveClicked && (isPhoneLineEmpty || isPhoneNumberInvalid)), style: { display: isExportingPDF ? 'none' : '' } },
|
|
129
135
|
React.createElement(CheckIcon, null)),
|
|
130
136
|
React.createElement("button", { className: "btn btn-app btn-link", type: "button", onClick: onClear, "data-tracking-id": "case-details-page-supplied-phone-cancel", style: { display: isExportingPDF ? 'none' : '' }, disabled: isEmpty(localFullPhoneState) },
|
|
131
137
|
React.createElement(TimesIcon, { color: "#6A6E73" }))),
|
|
132
|
-
invalid && React.createElement("p", { className: "form-instructions form-invalid" },
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
138
|
+
invalid && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
139
|
+
React.createElement(Trans, null, PHONE_NO_CHAR_ERROR))),
|
|
140
|
+
(localFullPhoneState === null || localFullPhoneState === void 0 ? void 0 : localFullPhoneState.length) > PHONE_LIMIT && (React.createElement("p", { className: "form-instructions form-invalid" }, maxLengthErrorMessage)),
|
|
141
|
+
isSaveClicked && isPhoneLineEmpty && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
142
|
+
React.createElement(Trans, null, PHONE_LINE_CANNOT_BE_EMPTY))),
|
|
143
|
+
isSaveClicked && isPhoneNumberInvalid && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
144
|
+
React.createElement(Trans, null, PHONE_IS_NOT_VALID)))));
|
|
136
145
|
}
|
package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberConfirmAlert.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CasePhoneNumberConfirmAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberConfirmAlert.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CasePhoneNumberConfirmAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberConfirmAlert.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+B,MAAM,OAAO,CAAC;AASpD,UAAU,MAAM;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CACnD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,eAgGxD"}
|
|
@@ -21,10 +21,11 @@ import { updateCaseDetails } from '../../../../reducers/CaseReducer';
|
|
|
21
21
|
export function CaseContactPhoneNumberAlert(props) {
|
|
22
22
|
const { globalMetadataState: { loggedInUser }, } = useContext(GlobalMetadataStateContext);
|
|
23
23
|
const [isCaseUpdating, setCasUpdating] = useState(false);
|
|
24
|
-
const { caseNumber, suppliedPhoneNumberVerified, contactSSOName } = useCaseSelector((state) => ({
|
|
24
|
+
const { caseNumber, suppliedPhoneNumberVerified, contactSSOName, severity } = useCaseSelector((state) => ({
|
|
25
25
|
caseNumber: state.caseDetails.caseNumber,
|
|
26
26
|
suppliedPhoneNumberVerified: state.caseDetails.suppliedPhoneNumberVerified,
|
|
27
27
|
contactSSOName: state.caseDetails.contactSSOName,
|
|
28
|
+
severity: state.caseDetails.severity,
|
|
28
29
|
}), isEqual);
|
|
29
30
|
const { t } = useTranslation();
|
|
30
31
|
const caseDispatch = useCaseDispatch();
|
|
@@ -44,19 +45,21 @@ export function CaseContactPhoneNumberAlert(props) {
|
|
|
44
45
|
const goToPhoneField = () => {
|
|
45
46
|
scrollIntoView(props.tabRef);
|
|
46
47
|
};
|
|
47
|
-
const isPhoneNeedsReview = contactSSOName === loggedInUser.data.ssoUsername &&
|
|
48
|
+
const isPhoneNeedsReview = contactSSOName === loggedInUser.data.ssoUsername &&
|
|
49
|
+
suppliedPhoneNumberVerified === 'Deferred' &&
|
|
50
|
+
severity !== "1 (Urgent)" /* SEV_1 */; // we show another alert when sev is 1
|
|
51
|
+
const NEW_OWNER_MSG = 'You are the new owner for this case. Is the new phone number correct?';
|
|
48
52
|
if (!isPhoneNeedsReview)
|
|
49
53
|
return React.createElement(React.Fragment, null);
|
|
50
54
|
return (React.createElement(React.Fragment, null, props.isReview ? (React.createElement(Alert, { className: "pf-u-mb-md", isInline: true, variant: AlertVariant.warning, title: t('Review phone number'), actionLinks: [
|
|
51
55
|
React.createElement(Link, { replace: true, to: {
|
|
52
56
|
pathname: `/case/${caseNumber}/management`,
|
|
53
|
-
search: 'hello',
|
|
54
57
|
}, onClick: () => goToPhoneField(), "data-tracking-id": "case-contact-phone-number-review" },
|
|
55
58
|
React.createElement(Trans, null, "Review phone number")),
|
|
56
59
|
] },
|
|
57
|
-
React.createElement(Trans, null,
|
|
60
|
+
React.createElement(Trans, null, NEW_OWNER_MSG))) : props.isConfirm ? (React.createElement(Alert, { isInline: true, className: "pf-u-mb-md", variant: AlertVariant.warning, title: t('Review phone number'), actionLinks: [
|
|
58
61
|
React.createElement(Button, { variant: ButtonVariant.link, isInline: true, onClick: () => onCaseDetailsChange({ suppliedPhoneNumberVerified: 'True' }), "data-tracking-id": "case-contact-phone-number-confirm", isLoading: isCaseUpdating, isDisabled: isCaseUpdating },
|
|
59
62
|
React.createElement(Trans, null, "Confirm phone number")),
|
|
60
63
|
] },
|
|
61
|
-
React.createElement(Trans, null,
|
|
64
|
+
React.createElement(Trans, null, NEW_OWNER_MSG))) : (React.createElement(React.Fragment, null))));
|
|
62
65
|
}
|
package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberSev1ConfirmAlert.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CasePhoneNumberSev1ConfirmAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberSev1ConfirmAlert.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+B,MAAM,OAAO,CAAC;AASpD,UAAU,MAAM;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CACnD;AAMD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CasePhoneNumberSev1ConfirmAlert.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CasePhoneNumberSev1ConfirmAlert.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+B,MAAM,OAAO,CAAC;AASpD,UAAU,MAAM;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CACnD;AAMD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,eAgG5D"}
|
|
@@ -51,19 +51,19 @@ export function CasePhoneNumberSev1ConfirmAlert(props) {
|
|
|
51
51
|
};
|
|
52
52
|
const isPhoneNeedsConfirm = contactSSOName === loggedInUser.data.ssoUsername &&
|
|
53
53
|
severity === "1 (Urgent)" /* SEV_1 */ &&
|
|
54
|
-
suppliedPhoneNumberVerified
|
|
54
|
+
suppliedPhoneNumberVerified !== 'True';
|
|
55
|
+
const SEV1_MSG = 'This case severity is urgent. Please confirm the phone number we have on file is correct.';
|
|
55
56
|
if (!isPhoneNeedsConfirm)
|
|
56
57
|
return React.createElement(React.Fragment, null);
|
|
57
58
|
return (React.createElement(React.Fragment, null, props.isReview ? (React.createElement(Alert, { className: "pf-u-mb-md", isInline: true, variant: AlertVariant.warning, title: t('Review phone number'), actionLinks: [
|
|
58
59
|
React.createElement(Link, { replace: true, to: {
|
|
59
60
|
pathname: `/case/${caseNumber}/management`,
|
|
60
|
-
search: 'hello',
|
|
61
61
|
}, onClick: () => goToPhoneField(), "data-tracking-id": "case-contact-phone-number-review" },
|
|
62
62
|
React.createElement(Trans, null, "Review phone number")),
|
|
63
63
|
] },
|
|
64
|
-
React.createElement(Trans, null,
|
|
64
|
+
React.createElement(Trans, null, SEV1_MSG))) : props.isConfirm ? (React.createElement(Alert, { isInline: true, className: "pf-u-mb-md", variant: AlertVariant.warning, title: t('Review phone number'), actionLinks: [
|
|
65
65
|
React.createElement(Button, { variant: ButtonVariant.link, isInline: true, onClick: () => onCaseDetailsChange({ suppliedPhoneNumberVerified: 'True' }), "data-tracking-id": "case-contact-phone-number-confirm", isLoading: isCaseUpdating, isDisabled: isCaseUpdating },
|
|
66
66
|
React.createElement(Trans, null, "Confirm phone number")),
|
|
67
67
|
] },
|
|
68
|
-
React.createElement(Trans, null,
|
|
68
|
+
React.createElement(Trans, null, SEV1_MSG))) : (React.createElement(React.Fragment, null))));
|
|
69
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactPhoneNumber.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/ContactPhoneNumber.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContactPhoneNumber.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/ContactPhoneNumber.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,kBAAkB,gBAuGjC"}
|
|
@@ -1,62 +1,67 @@
|
|
|
1
1
|
import { ValidatedOptions } from '@patternfly/react-core';
|
|
2
|
-
import { PhoneInput } from '@rh-support/components';
|
|
2
|
+
import { getPhoneObj, PhoneInput } from '@rh-support/components';
|
|
3
3
|
import isEmpty from 'lodash/isEmpty';
|
|
4
4
|
import isEqual from 'lodash/isEqual';
|
|
5
|
-
import React, { useState } from 'react';
|
|
5
|
+
import React, { useContext, useState } from 'react';
|
|
6
6
|
import { Trans, useTranslation } from 'react-i18next';
|
|
7
|
+
import { PHONE_IS_NOT_VALID, PHONE_LINE_CANNOT_BE_EMPTY, PHONE_NO_CHAR_ERROR, } from '../../constants/caseDetailsConstants';
|
|
7
8
|
import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
|
|
9
|
+
import { RouteContext } from '../../context/RouteContext';
|
|
8
10
|
import { PHONE_LIMIT } from '../../reducers/CaseConstNTypes';
|
|
9
11
|
import { setCaseDetails } from '../../reducers/CaseReducer';
|
|
10
12
|
import { ContactPhoneNumberPopOver } from './ContactPhoneNumberPopOver';
|
|
11
13
|
export function ContactPhoneNumber() {
|
|
12
|
-
var _a, _b;
|
|
13
14
|
const { suppliedPhoneNumberVerified, severity, phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', } = useCaseSelector((state) => ({
|
|
14
15
|
suppliedPhoneNumberVerified: state.caseDetails.suppliedPhoneNumberVerified,
|
|
15
16
|
severity: state.caseDetails.severity,
|
|
16
17
|
phoneCountryCode: state.caseDetails.phoneCountryCode,
|
|
17
18
|
phoneAreaCodePrefixLineNumber: state.caseDetails.phoneAreaCodePrefixLineNumber,
|
|
18
19
|
}), isEqual);
|
|
20
|
+
const { routeState: { isNextBtnClickedToShowValidationError }, } = useContext(RouteContext);
|
|
19
21
|
const [invalid, setInvalid] = useState(false);
|
|
20
|
-
const
|
|
22
|
+
const [localFullPhone, setLocalFullPhone] = useState(phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber);
|
|
23
|
+
const getPhone = () => phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber;
|
|
21
24
|
const caseDispatch = useCaseDispatch();
|
|
22
25
|
const { t } = useTranslation();
|
|
23
26
|
const onPhoneChange = (fullPhone) => {
|
|
27
|
+
setLocalFullPhone(fullPhone);
|
|
24
28
|
if (isEmpty(fullPhone)) {
|
|
25
29
|
setInvalid(false);
|
|
26
30
|
}
|
|
27
31
|
setCaseDetails(caseDispatch, {
|
|
28
|
-
phoneAreaCodePrefixLineNumber:
|
|
29
|
-
|
|
30
|
-
: fullPhone.trim(),
|
|
32
|
+
phoneAreaCodePrefixLineNumber: getPhoneObj(fullPhone).phoneLine,
|
|
33
|
+
phoneCountryCode: getPhoneObj(fullPhone).countryCode,
|
|
31
34
|
});
|
|
32
35
|
};
|
|
33
36
|
const onCountryCodeChange = (phoneCountryCode) => {
|
|
34
|
-
setCaseDetails(caseDispatch, { phoneCountryCode
|
|
37
|
+
setCaseDetails(caseDispatch, { phoneCountryCode });
|
|
35
38
|
};
|
|
36
39
|
const maxLengthErrorMessage = t('Phone number cannot be more than {{limit}} digits.', {
|
|
37
40
|
limit: PHONE_LIMIT,
|
|
38
41
|
});
|
|
39
|
-
const
|
|
42
|
+
const isPhoneNumberInvalid = isEmpty(phoneCountryCode.replace('+', '')) && !isEmpty(phoneAreaCodePrefixLineNumber);
|
|
40
43
|
// To check if country code is given but phone number empty
|
|
41
|
-
const isPhoneNumberEmpty = !isEmpty(phoneCountryCode
|
|
42
|
-
|
|
44
|
+
const isPhoneNumberEmpty = !isEmpty(phoneCountryCode.replace('+', '')) &&
|
|
45
|
+
isEmpty(phoneAreaCodePrefixLineNumber === null || phoneAreaCodePrefixLineNumber === void 0 ? void 0 : phoneAreaCodePrefixLineNumber.replace(phoneCountryCode, ''));
|
|
46
|
+
const isPhoneNumberValid = getPhone().length > PHONE_LIMIT
|
|
43
47
|
? ValidatedOptions.error
|
|
44
48
|
: severity === "1 (Urgent)" /* SEV_1 */ && isEmpty(suppliedPhoneNumberVerified)
|
|
45
49
|
? ValidatedOptions.warning
|
|
46
|
-
: isPhoneNumberEmpty
|
|
50
|
+
: isNextBtnClickedToShowValidationError && (isPhoneNumberEmpty || isPhoneNumberInvalid)
|
|
47
51
|
? ValidatedOptions.error
|
|
48
52
|
: invalid
|
|
49
53
|
? ValidatedOptions.error
|
|
50
54
|
: ValidatedOptions.default;
|
|
51
|
-
|
|
52
|
-
return (React.createElement("div", { className: "form-group pf-u-pb-xl", style: { minWidth: '200px' } },
|
|
55
|
+
return (React.createElement("div", { className: "form-group", style: { minWidth: '200px' } },
|
|
53
56
|
React.createElement("label", null,
|
|
54
57
|
React.createElement(Trans, null, "Case owner's phone number"),
|
|
55
58
|
ContactPhoneNumberPopOver()),
|
|
56
|
-
React.createElement(PhoneInput, { phoneValue:
|
|
57
|
-
invalid && React.createElement("p", { className: "form-instructions form-invalid" },
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
React.createElement(PhoneInput, { phoneValue: localFullPhone, onPhoneValueChange: onPhoneChange, onCountryCodeChange: onCountryCodeChange, validations: isPhoneNumberValid, invalid: invalid, setInvalid: setInvalid }),
|
|
60
|
+
invalid && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
61
|
+
React.createElement(Trans, null, PHONE_NO_CHAR_ERROR))),
|
|
62
|
+
getPhone().length > PHONE_LIMIT && (React.createElement("p", { className: "form-instructions form-invalid" }, maxLengthErrorMessage)),
|
|
63
|
+
isPhoneNumberEmpty && isNextBtnClickedToShowValidationError && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
64
|
+
React.createElement(Trans, null, PHONE_LINE_CANNOT_BE_EMPTY))),
|
|
65
|
+
isNextBtnClickedToShowValidationError && isPhoneNumberInvalid && (React.createElement("p", { className: "form-instructions form-invalid" },
|
|
66
|
+
React.createElement(Trans, null, PHONE_IS_NOT_VALID)))));
|
|
62
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseLanguageSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseLanguageSelector.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,MAAM;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CaseLanguageSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseLanguageSelector.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,MAAM;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,eA6FzD"}
|
|
@@ -55,7 +55,7 @@ export default function CaseLanguageSelector(props) {
|
|
|
55
55
|
React.createElement(Trans, null, "Preferred language"),
|
|
56
56
|
' ',
|
|
57
57
|
React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")),
|
|
58
|
-
React.createElement(Select, { variant: SelectVariant.single, "aria-label": t(`Select a language`), onToggle: onToggle, onSelect: onLanguageChange, selections: caseLanguage, isOpen: isOpen, "aria-labelledby": 'get-support-language', isDisabled: caseLanguages.isError, validated: caseLanguages.isError ? ValidatedOptions.error : ValidatedOptions.default }, caseLanguages.data.map((sla, index) => (React.createElement(SelectOption, { value: sla, key: index }, Constants.languagesMap[sla])))),
|
|
58
|
+
React.createElement(Select, { variant: SelectVariant.single, "aria-label": t(`Select a language`), onToggle: onToggle, onSelect: onLanguageChange, selections: caseLanguage, isOpen: isOpen, "aria-labelledby": 'get-support-language', isDisabled: caseLanguages.isError, validated: caseLanguages.isError ? ValidatedOptions.error : ValidatedOptions.default, "data-tracking-id": "preferred-language-select" }, caseLanguages.data.map((sla, index) => (React.createElement(SelectOption, { value: sla, key: index }, Constants.languagesMap[sla])))),
|
|
59
59
|
React.createElement("p", { className: "form-instructions" },
|
|
60
60
|
React.createElement(Trans, null, "Select a language for communicating with our support engineers."))));
|
|
61
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoClusterIDReasonSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/NoClusterIDReasonSelector.tsx"],"names":[],"mappings":"AAgBA,UAAU,MAAM;IACZ,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,4BAA4B,EAAE,MAAM,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAeD,QAAA,MAAM,yBAAyB,UAAW,MAAM,
|
|
1
|
+
{"version":3,"file":"NoClusterIDReasonSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/NoClusterIDReasonSelector.tsx"],"names":[],"mappings":"AAgBA,UAAU,MAAM;IACZ,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,4BAA4B,EAAE,MAAM,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAeD,QAAA,MAAM,yBAAyB,UAAW,MAAM,gBAoJ/C,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -98,7 +98,7 @@ const NoClusterIDReasonSelector = (props) => {
|
|
|
98
98
|
React.createElement("span", { className: `form-required ${isExportingPDF ? 'hide-in-pdf' : ''}`, "aria-hidden": true },
|
|
99
99
|
' ',
|
|
100
100
|
"*")),
|
|
101
|
-
React.createElement(Select, { variant: SelectVariant.typeahead, typeAheadAriaLabel: t('Select an option or briefly describe your reason'), onToggle: onToggle, onSelect: onSelect, selections: getSelectedItem(), isOpen: isOpen, placeholderText: t('Select an option or briefly describe your reason'), noValidate: props.isInValid, "aria-labelledby": titleId, "aria-invalid": props.isInValid, "aria-describedby": "validate-reason-helper", validated: validated, className: `form-control${props.isInValid ? ' form-invalid' : ''}`, isDisabled: caseNoClusterIdReasons.isFetching || props.isDisabled, required: true, onFilter: () => null, ref: selectRef, onTypeaheadInputChanged: onTypeaheadInputChanged }, (caseNoClusterIdReasonsList || []).map((option, index) => (React.createElement(SelectOption, { key: index, value: createState(option, t(option)) })))),
|
|
101
|
+
React.createElement(Select, { variant: SelectVariant.typeahead, typeAheadAriaLabel: t('Select an option or briefly describe your reason'), onToggle: onToggle, onSelect: onSelect, selections: getSelectedItem(), isOpen: isOpen, placeholderText: t('Select an option or briefly describe your reason'), noValidate: props.isInValid, "aria-labelledby": titleId, "aria-invalid": props.isInValid, "aria-describedby": "validate-reason-helper", validated: validated, className: `form-control${props.isInValid ? ' form-invalid' : ''}`, isDisabled: caseNoClusterIdReasons.isFetching || props.isDisabled, required: true, onFilter: () => null, ref: selectRef, onTypeaheadInputChanged: onTypeaheadInputChanged, "data-tracking-id": "no-openshift-cluster-id-reason" }, (caseNoClusterIdReasonsList || []).map((option, index) => (React.createElement(SelectOption, { key: index, value: createState(option, t(option)) })))),
|
|
102
102
|
React.createElement(LoadingIndicator, { show: caseNoClusterIdReasons.isFetching, size: "xs" }),
|
|
103
103
|
React.createElement("p", { id: "validate-reason-helper", className: `form-instructions ${props.isInValid ? 'form-invalid' : ''}` },
|
|
104
104
|
React.createElement(React.Fragment, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenShiftV3Inputbox.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/OpenShiftV3Inputbox.tsx"],"names":[],"mappings":"AAQA,UAAU,MAAM;IACZ,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"OpenShiftV3Inputbox.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/OpenShiftV3Inputbox.tsx"],"names":[],"mappings":"AAQA,UAAU,MAAM;IACZ,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,eA+BzC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|