@rh-support/troubleshoot 2.6.276 → 2.6.282
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.d.ts.map +1 -1
- package/lib/esm/components/AccountInfo/AccountSelector.js +40 -28
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +1 -3
- package/lib/esm/components/CaseEditView/Case.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Case.js +1 -3
- package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/CaseOverview/index.js +4 -6
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.js +34 -38
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.js +4 -2
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.js +59 -19
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.js +3 -5
- package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.css +5 -0
- package/lib/esm/components/CaseInformation/CaseInformation.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/CaseInformation.js +5 -7
- package/lib/esm/components/CaseInformation/ContactPhoneNumber.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/ContactPhoneNumber.js +24 -37
- package/lib/esm/components/CaseInformation/SupportLevel.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/SupportLevel.js +55 -32
- package/lib/esm/components/CaseManagement/CaseLanguageSelector.js +2 -2
- package/lib/esm/components/CaseManagement/CaseManagement.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/CaseManagement.js +7 -4
- package/lib/esm/components/IdeaInformation/IdeaInformation.d.ts.map +1 -1
- package/lib/esm/components/IdeaInformation/IdeaInformation.js +10 -10
- package/lib/esm/components/OpenCase/SupportTypeSelectorPage.d.ts.map +1 -1
- package/lib/esm/components/OpenCase/SupportTypeSelectorPage.js +2 -4
- package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts +1 -0
- package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts.map +1 -1
- package/lib/esm/components/ProductSelector/AllProductsSelector.js +15 -3
- package/lib/esm/components/ProductSelector/NewProductDropdownSelector.d.ts.map +1 -1
- package/lib/esm/components/ProductSelector/NewProductDropdownSelector.js +37 -13
- package/lib/esm/components/ProductSelector/NewProductVersionSelector.d.ts.map +1 -1
- package/lib/esm/components/ProductSelector/NewProductVersionSelector.js +53 -19
- package/lib/esm/components/ProductSelector/ProductSelector.d.ts.map +1 -1
- package/lib/esm/components/ProductSelector/ProductSelector.js +3 -1
- package/lib/esm/components/Review/Review.d.ts.map +1 -1
- package/lib/esm/components/Review/Review.js +10 -6
- package/lib/esm/components/SessionRestore/SessionRestore.d.ts.map +1 -1
- package/lib/esm/components/SessionRestore/SessionRestore.js +1 -6
- package/lib/esm/components/shared/useIsSectionValid.d.ts.map +1 -1
- package/lib/esm/components/shared/useIsSectionValid.js +64 -50
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +9 -34
- package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardLayout.js +7 -6
- package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardNavigation.js +9 -10
- package/lib/esm/hooks/useResetCaseCreate.d.ts.map +1 -1
- package/lib/esm/hooks/useResetCaseCreate.js +11 -13
- package/lib/esm/i18n/template-de.d.ts +1 -1
- package/lib/esm/i18n/template-de.js +1 -1
- package/lib/esm/reducers/CaseConstNTypes.d.ts +0 -23
- package/lib/esm/reducers/CaseConstNTypes.d.ts.map +1 -1
- package/lib/esm/reducers/CaseConstNTypes.js +0 -5
- package/lib/esm/reducers/CaseHelpers.d.ts +1 -2
- package/lib/esm/reducers/CaseHelpers.d.ts.map +1 -1
- package/lib/esm/reducers/CaseHelpers.js +2 -39
- package/lib/esm/reducers/CaseOverviewReducer.d.ts +1 -3
- package/lib/esm/reducers/CaseOverviewReducer.d.ts.map +1 -1
- package/lib/esm/reducers/CaseOverviewReducer.js +5 -7
- package/lib/esm/reducers/CaseReducer.d.ts +5 -15
- package/lib/esm/reducers/CaseReducer.d.ts.map +1 -1
- package/lib/esm/reducers/CaseReducer.js +23 -60
- package/lib/esm/reducers/SessionRestoreReducer.d.ts.map +1 -1
- package/lib/esm/reducers/SessionRestoreReducer.js +4 -7
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/AccountSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAOnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,UAAU,MAAO,SAAQ,gBAAgB;CAAG;AAE5C,eAAO,MAAM,YAAY,EAAE,MAG1B,CAAC;AAEF,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"AccountSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/AccountSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AAOnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,UAAU,MAAO,SAAQ,gBAAgB;CAAG;AAE5C,eAAO,MAAM,YAAY,EAAE,MAG1B,CAAC;AAEF,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,qBA6KrC;kBA7KQ,eAAe;;;AAiLxB,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import './css/accountSelector.css';
|
|
11
|
-
import {
|
|
11
|
+
import { accounts } from '@cee-eng/hydrajs';
|
|
12
12
|
import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
13
13
|
import { AlertMessage, AlertType } from '@rh-support/components';
|
|
14
14
|
import { AccountSelectorInternal, GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
@@ -30,14 +30,12 @@ export const defaultProps = {
|
|
|
30
30
|
function AccountSelector(props) {
|
|
31
31
|
var _a;
|
|
32
32
|
const [showNotEntitledMessage, setShowNotEntitledMessage] = useState(false);
|
|
33
|
-
const { accountNumber, selectedAccountDetails
|
|
33
|
+
const { accountNumber, selectedAccountDetails } = useCaseSelector((state) => ({
|
|
34
34
|
accountNumber: state.caseDetails.accountNumberRef,
|
|
35
35
|
selectedAccountDetails: state.selectedAccountDetails,
|
|
36
|
-
hasInvalidEntitlements: state.hasInvalidEntitlements,
|
|
37
36
|
}), isEqual);
|
|
38
37
|
const isSelectedAccountSubscriptionAbused = ((_a = selectedAccountDetails === null || selectedAccountDetails === void 0 ? void 0 : selectedAccountDetails.data) === null || _a === void 0 ? void 0 : _a.subscriptionAbuse) || false;
|
|
39
38
|
const caseDispatch = useCaseDispatch();
|
|
40
|
-
const apolloClient = useApolloClient();
|
|
41
39
|
const routeDispatch = useRouteDispatchContext();
|
|
42
40
|
const { globalMetadataState: { bookmarkedGroupAccounts, loggedInUserRights, managedAccounts, loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
|
|
43
41
|
const { t } = useTranslation();
|
|
@@ -45,7 +43,7 @@ function AccountSelector(props) {
|
|
|
45
43
|
const ability = useContext(AbilityContext);
|
|
46
44
|
const canAccessManagedAccounts = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.MANAGED_ACCOUNTS);
|
|
47
45
|
const canBookmarkAccounts = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.BOOKMARK_ACCOUNTS);
|
|
48
|
-
|
|
46
|
+
const canUseFindMyAccount = loggedInUserRights.data.isAccountDifferentFromLoggedInAccount(accountNumber);
|
|
49
47
|
// Account Change Handler
|
|
50
48
|
const onAccountChange = (account) => __awaiter(this, void 0, void 0, function* () {
|
|
51
49
|
if (selectedAccountDetails.data.accountNumber === account.accountNumber)
|
|
@@ -54,7 +52,7 @@ function AccountSelector(props) {
|
|
|
54
52
|
clearSelectedAccount(caseDispatch);
|
|
55
53
|
return;
|
|
56
54
|
}
|
|
57
|
-
setCaseAccountNumber(caseDispatch, account.accountNumber, loggedInUserRights.data.isAccountSameAsLoggedInAccount(account.accountNumber), loggedInUsersAccount.data
|
|
55
|
+
setCaseAccountNumber(caseDispatch, account.accountNumber, loggedInUserRights.data.isAccountSameAsLoggedInAccount(account.accountNumber), loggedInUsersAccount.data);
|
|
58
56
|
});
|
|
59
57
|
const onInternalAccountSelect = (accounts) => {
|
|
60
58
|
if (!isArray(accounts))
|
|
@@ -66,36 +64,48 @@ function AccountSelector(props) {
|
|
|
66
64
|
selection.accountNum &&
|
|
67
65
|
onAccountChange({ accountNumber: selection.accountNum, name: selection.name });
|
|
68
66
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
const onFindMyAccountClick = (event) => {
|
|
68
|
+
!isEmpty(loggedInUserRights.data) &&
|
|
69
|
+
onAccountChange({
|
|
70
|
+
accountNumber: loggedInUserRights.data.getAccountNumber(),
|
|
71
|
+
name: loggedInUserRights.data.getAccountName(),
|
|
72
|
+
});
|
|
73
|
+
};
|
|
76
74
|
const selectedAccount = {
|
|
77
75
|
name: selectedAccountDetails.data.name,
|
|
78
76
|
accountNumber: selectedAccountDetails.data.accountNumber,
|
|
79
77
|
subscriptionAbuse: selectedAccountDetails.data.subscriptionAbuse,
|
|
80
78
|
};
|
|
79
|
+
// When internal user wants to open a case for a customer but customer account doesn't have entitlement, we show an error
|
|
81
80
|
useEffect(() => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
const getAccountEntitlement = () => __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
// internal user doesn't open case for customer. No need to check account entitlement
|
|
83
|
+
if (selectedAccountDetails.data.accountNumber === loggedInUsersAccount.data.accountNumber) {
|
|
84
|
+
setNoValidEntitlement(routeDispatch, false);
|
|
85
|
+
setShowNotEntitledMessage(false);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
87
88
|
setShowNotEntitledMessage(false);
|
|
88
|
-
|
|
89
|
+
try {
|
|
90
|
+
const res = yield accounts.getAccountEntitlementByInternalUser(selectedAccountDetails.data.accountNumber);
|
|
91
|
+
if (isEmpty(res)) {
|
|
92
|
+
setShowNotEntitledMessage(true);
|
|
93
|
+
setNoValidEntitlement(routeDispatch, true);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
setShowNotEntitledMessage(false);
|
|
97
|
+
setNoValidEntitlement(routeDispatch, false);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
console.log(e);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
if (loggedInUserRights.data.isInternal() && selectedAccountDetails.data.accountNumber) {
|
|
105
|
+
getAccountEntitlement();
|
|
89
106
|
}
|
|
90
|
-
setShowNotEntitledMessage(hasInvalidEntitlements);
|
|
91
|
-
setNoValidEntitlement(routeDispatch, hasInvalidEntitlements);
|
|
92
107
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
93
|
-
}, [
|
|
94
|
-
selectedAccountDetails.data.accountNumber,
|
|
95
|
-
loggedInUserRights.data,
|
|
96
|
-
loggedInUsersAccount.data,
|
|
97
|
-
hasInvalidEntitlements,
|
|
98
|
-
]);
|
|
108
|
+
}, [selectedAccountDetails.data.accountNumber, loggedInUserRights.data, loggedInUsersAccount.data]);
|
|
99
109
|
if (isEmpty(loggedInUserRights.data))
|
|
100
110
|
return React.createElement(React.Fragment, null);
|
|
101
111
|
return (React.createElement("div", { id: props.id, className: `form-group ${props.className}` },
|
|
@@ -104,7 +114,9 @@ function AccountSelector(props) {
|
|
|
104
114
|
React.createElement("label", { htmlFor: "account-selector" },
|
|
105
115
|
React.createElement(Trans, null, "Account"),
|
|
106
116
|
' ',
|
|
107
|
-
React.createElement("span", { className: "form-required", "aria-hidden": true }, "*"))
|
|
117
|
+
React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")),
|
|
118
|
+
canUseFindMyAccount && (React.createElement("button", { role: "link", className: "btn btn-link btn-app find-my-account pf-v6-u-ml-auto", onClick: onFindMyAccountClick, disabled: selectedAccountDetails.isFetching, "data-tracking-id": "get-support-find-my-account", type: "button" },
|
|
119
|
+
React.createElement(Trans, null, "Find my account")))),
|
|
108
120
|
React.createElement("div", { className: "account-selector-wrapper" },
|
|
109
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 })),
|
|
110
122
|
canAccessManagedAccounts && !isEmpty(managedAccounts.data) && (React.createElement(ManagedAccountsDropdown, { className: "managed-account-selector pf-v6-u-mt-xl", onManagedAccountChange: onManagedAccountChange, managedAccounts: managedAccounts, selectedAccountNumber: accountNumber, disabled: selectedAccountDetails.isFetching })),
|
package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestEscalationModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RequestEscalationModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAkBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAID,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,qBA6WnD"}
|
|
@@ -7,7 +7,6 @@ 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 { useApolloClient } from '@apollo/client/react';
|
|
11
10
|
import { escalations, publicApi } from '@cee-eng/hydrajs';
|
|
12
11
|
import { Button, Form, FormGroup, FormHelperText, Grid, GridItem, HelperText, HelperTextItem, Modal, ModalBody, ModalFooter, ModalHeader, Popover, TextArea, TextInput, Title, ValidatedOptions, } from '@patternfly/react-core';
|
|
13
12
|
import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
@@ -28,7 +27,6 @@ const customerGEOKeys = Object.keys(CustomerGEOs);
|
|
|
28
27
|
export function RequestEscalationModal(props) {
|
|
29
28
|
const { globalMetadataState: { loggedInUser, loggedInUserRights }, } = useGlobalStateContext();
|
|
30
29
|
const { t } = useTranslation();
|
|
31
|
-
const apolloClient = useApolloClient();
|
|
32
30
|
const [categories, setCategories] = useState([]);
|
|
33
31
|
const initialState = {
|
|
34
32
|
subject: '',
|
|
@@ -70,7 +68,7 @@ export function RequestEscalationModal(props) {
|
|
|
70
68
|
updateDiscussionStateComments(dispatchDiscussion, caseDispatch, props.caseNumber, allDiscussions, sort, caseFeedbacksHydra.data, discussionFiltersListState);
|
|
71
69
|
yield updateCaseRequest(props.caseNumber, { customerEscalation: true });
|
|
72
70
|
checkForCaseStatusToggleOnAttachOrComment(caseDispatch, loggedInUserRights.data.isInternal(), props.caseStatus);
|
|
73
|
-
yield fetchCaseDetails(caseDispatch, props.caseNumber, loggedInUserRights.data, loggedInUser.data
|
|
71
|
+
yield fetchCaseDetails(caseDispatch, props.caseNumber, loggedInUserRights.data, loggedInUser.data);
|
|
74
72
|
escalationNum &&
|
|
75
73
|
ToastNotification.addSuccessMessage(t('Your escalation request has been successfully submitted.'));
|
|
76
74
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Case.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseEditView/Case.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Case.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseEditView/Case.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAS,mBAAmB,EAAiD,MAAM,kBAAkB,CAAC;AAmB7G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,EAAE,MAAM,qBAmPzC"}
|
|
@@ -7,7 +7,6 @@ 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 { useApolloClient } from '@apollo/client/react';
|
|
11
10
|
import { CoverSpinner, ErrorBoundary, OverviewContentLoader, ToastNotification, useDocumentTitle, usePrevious, } from '@rh-support/components';
|
|
12
11
|
import { GlobalMetadataStateContext, HostnameAwarenessModal } from '@rh-support/react-context';
|
|
13
12
|
import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
@@ -31,7 +30,6 @@ import { PDFContext } from './PDFContainer';
|
|
|
31
30
|
export default function Case(props) {
|
|
32
31
|
const { globalMetadataState: { loggedInUserRights, loggedInUsersAccount, loggedInUser }, } = useContext(GlobalMetadataStateContext);
|
|
33
32
|
const caseDetailsPageDispatch = useCaseDetailsPageDispatchContext();
|
|
34
|
-
const apolloClient = useApolloClient();
|
|
35
33
|
const { t } = useTranslation();
|
|
36
34
|
// The `path` lets us build <Route> paths that are
|
|
37
35
|
// relative to the parent route, while the `url` lets
|
|
@@ -109,7 +107,7 @@ export default function Case(props) {
|
|
|
109
107
|
caseDispatch(action);
|
|
110
108
|
}
|
|
111
109
|
};
|
|
112
|
-
yield fetchCaseDetails(safeDispatch, targetCaseNumber, loggedInUserRights.data, loggedInUser.data
|
|
110
|
+
yield fetchCaseDetails(safeDispatch, targetCaseNumber, loggedInUserRights.data, loggedInUser.data);
|
|
113
111
|
if (currentCaseRef.current !== targetCaseNumber)
|
|
114
112
|
return;
|
|
115
113
|
if (canSeeRMEs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAkD,MAAM,OAAO,CAAC;AA4BvE,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,qBA0fjD"}
|
|
@@ -7,12 +7,11 @@ 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 { useApolloClient } from '@apollo/client/react';
|
|
11
10
|
import { Alert, AlertVariant, Button, ButtonVariant, ExpandableSection, Label, ModalVariant, } from '@patternfly/react-core';
|
|
12
11
|
import ExternalLinkAltIcon from '@patternfly/react-icons/dist/js/icons/external-link-alt-icon';
|
|
13
12
|
import LockIcon from '@patternfly/react-icons/dist/js/icons/lock-icon';
|
|
14
13
|
import { ToastNotification, useConfirmation } from '@rh-support/components';
|
|
15
|
-
import { CloseCaseModal,
|
|
14
|
+
import { CloseCaseModal, fetchCaseSeverities, fetchCaseTypes, GlobalMetadataDispatchContext, GlobalMetadataStateContext, useCanEditCase, } from '@rh-support/react-context';
|
|
16
15
|
import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
17
16
|
import { dtmTrackEventCaseStepEncountered, haventLoadedMetadata, isOpenShiftOnlineProduct, PreviousCaseTypes, toNewCaseTypeMapper, toNewCaseTypeSwitcher, } from '@rh-support/utils';
|
|
18
17
|
import isEqual from 'lodash/isEqual';
|
|
@@ -75,7 +74,6 @@ export default function CaseOverview(props) {
|
|
|
75
74
|
const canEditCase = useCanEditCase();
|
|
76
75
|
const caseDispatch = useCaseDispatch();
|
|
77
76
|
const globalMetadataDispatchContext = useContext(GlobalMetadataDispatchContext);
|
|
78
|
-
const apolloClient = useApolloClient();
|
|
79
77
|
const { globalMetadataState: { allCaseTypes, allCaseSeverities, viewAsCustomer, loggedInUsersAccount, loggedInUserRights, }, } = useContext(GlobalMetadataStateContext);
|
|
80
78
|
const canManageCase = loggedInUserRights.data.canManageCases();
|
|
81
79
|
const switchedCaseType = toNewCaseTypeSwitcher(caseType);
|
|
@@ -91,13 +89,13 @@ export default function CaseOverview(props) {
|
|
|
91
89
|
}
|
|
92
90
|
}
|
|
93
91
|
if (haventLoadedMetadata(allCaseSeverities)) {
|
|
94
|
-
|
|
92
|
+
fetchCaseSeverities(globalMetadataDispatchContext, loggedInUsersAccount.data.secureSupport);
|
|
95
93
|
}
|
|
96
94
|
if (haventLoadedMetadata(allCaseTypes)) {
|
|
97
|
-
|
|
95
|
+
fetchCaseTypes(globalMetadataDispatchContext, loggedInUsersAccount.data.secureSupport);
|
|
98
96
|
}
|
|
99
97
|
if (haventLoadedMetadata(caseOverviewState.allCaseStatuses)) {
|
|
100
|
-
fetchAllStatuses(caseOverviewDispatch,
|
|
98
|
+
fetchAllStatuses(caseOverviewDispatch, loggedInUsersAccount.data.secureSupport);
|
|
101
99
|
}
|
|
102
100
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
103
101
|
}, [
|
|
@@ -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":"AASA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAgB/D,wBAAgB,sBAAsB,sBAoYrC"}
|
|
@@ -7,7 +7,6 @@ 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 { useApolloClient } from '@apollo/client/react';
|
|
11
10
|
import { contacts } from '@cee-eng/hydrajs';
|
|
12
11
|
import { InputGroupText, ValidatedOptions } from '@patternfly/react-core';
|
|
13
12
|
import CheckIcon from '@patternfly/react-icons/dist/js/icons/check-icon';
|
|
@@ -15,7 +14,6 @@ import PencilAltIcon from '@patternfly/react-icons/dist/js/icons/pencil-alt-icon
|
|
|
15
14
|
import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
16
15
|
import { getPhoneObj, PhoneInput, ToastNotification } from '@rh-support/components';
|
|
17
16
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
18
|
-
import { GET_ACCOUNT_CONTACTS } from '@rh-support/utils';
|
|
19
17
|
import isEmpty from 'lodash/isEmpty';
|
|
20
18
|
import isEqual from 'lodash/isEqual';
|
|
21
19
|
import React, { useContext, useEffect, useState } from 'react';
|
|
@@ -28,34 +26,13 @@ import { setCaseState, updateCaseDetails } from '../../../../reducers/CaseReduce
|
|
|
28
26
|
import { ContactPhoneNumberPopOver } from '../../../CaseInformation/ContactPhoneNumberPopOver';
|
|
29
27
|
import { removeAllChars, trimAndReplacePlus } from '../../../shared/utils';
|
|
30
28
|
import { PDFContext } from '../../PDFContainer';
|
|
31
|
-
function fetchContactBySSO(apolloClient, accountNumber, ssoUsername) {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
34
|
-
const { data } = yield apolloClient.query({
|
|
35
|
-
query: GET_ACCOUNT_CONTACTS,
|
|
36
|
-
variables: {
|
|
37
|
-
accountNumber: { eq: accountNumber },
|
|
38
|
-
contactsWhere: { SSOUserName__c: { eq: ssoUsername } },
|
|
39
|
-
first: 1,
|
|
40
|
-
},
|
|
41
|
-
fetchPolicy: 'network-only',
|
|
42
|
-
});
|
|
43
|
-
const response = data;
|
|
44
|
-
const contactNode = (_j = (_h = (_g = (_f = (_e = (_d = (_c = (_b = (_a = response === null || response === void 0 ? void 0 : response.salesforce_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.SalesforceSupportAccount) === null || _c === void 0 ? void 0 : _c.edges) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.node) === null || _f === void 0 ? void 0 : _f.Contacts) === null || _g === void 0 ? void 0 : _g.edges) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.node;
|
|
45
|
-
return {
|
|
46
|
-
phone: (_l = (_k = contactNode === null || contactNode === void 0 ? void 0 : contactNode.Phone) === null || _k === void 0 ? void 0 : _k.value) !== null && _l !== void 0 ? _l : '',
|
|
47
|
-
};
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
29
|
export function CaseContactPhoneNumber() {
|
|
51
30
|
var _a;
|
|
52
|
-
const
|
|
53
|
-
const { phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', caseNumber, contactSSOName, accountNumberRef, suppliedPhoneNumberVerified, isCaseOwnerUpdating, hasLoggedInUserConfirmedPhoneNumber, isCasePhoneUpdating, } = useCaseSelector((state) => ({
|
|
31
|
+
const { phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', caseNumber, contactSSOName, suppliedPhoneNumberVerified, isCaseOwnerUpdating, hasLoggedInUserConfirmedPhoneNumber, isCasePhoneUpdating, } = useCaseSelector((state) => ({
|
|
54
32
|
phoneCountryCode: state.caseDetails.phoneCountryCode || '',
|
|
55
33
|
phoneAreaCodePrefixLineNumber: state.caseDetails.phoneAreaCodePrefixLineNumber || '',
|
|
56
34
|
caseNumber: state.caseDetails.caseNumber,
|
|
57
35
|
contactSSOName: state.caseDetails.contactSSOName,
|
|
58
|
-
accountNumberRef: state.caseDetails.accountNumberRef,
|
|
59
36
|
suppliedPhoneNumberVerified: state.caseDetails.suppliedPhoneNumberVerified,
|
|
60
37
|
isCaseOwnerUpdating: state.isCaseOwnerUpdating,
|
|
61
38
|
hasLoggedInUserConfirmedPhoneNumber: state.hasLoggedInUserConfirmedPhoneNumber,
|
|
@@ -203,17 +180,29 @@ export function CaseContactPhoneNumber() {
|
|
|
203
180
|
if (contactSSOName === loggedInUser.data.ssoUsername) {
|
|
204
181
|
try {
|
|
205
182
|
setIsFetchingSSO(true);
|
|
206
|
-
const loggedInUserContact = yield
|
|
183
|
+
const loggedInUserContact = yield (contacts === null || contacts === void 0 ? void 0 : contacts.getSFDCContactBySso(contactSSOName));
|
|
207
184
|
setIsFetchingSSO(false);
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
185
|
+
if (loggedInUserContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
186
|
+
// User has opened a case before and has phone and area code in her/his contact on SF
|
|
187
|
+
_phoneAreaCodePrefixLineNumber = loggedInUserContact.supportPhoneAreaCodePrefixLineNumber;
|
|
188
|
+
_phoneCountryCode = loggedInUserContact.supportPhoneCountryCode;
|
|
189
|
+
_suppliedPhoneNumberVerified =
|
|
190
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
|
|
191
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
|
|
192
|
+
? hasLoggedInUserConfirmedPhoneNumber
|
|
193
|
+
: 'False';
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
const phoneLine = getPhoneObj(loggedInUserContact.phone).phoneLine || '';
|
|
197
|
+
const countryCode = getPhoneObj(loggedInUserContact.phone).countryCode;
|
|
198
|
+
_phoneAreaCodePrefixLineNumber = phoneLine;
|
|
199
|
+
_phoneCountryCode = countryCode;
|
|
200
|
+
_suppliedPhoneNumberVerified =
|
|
201
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
|
|
202
|
+
isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
|
|
203
|
+
? hasLoggedInUserConfirmedPhoneNumber
|
|
204
|
+
: 'False';
|
|
205
|
+
}
|
|
217
206
|
}
|
|
218
207
|
catch (_a) {
|
|
219
208
|
_phoneAreaCodePrefixLineNumber = '';
|
|
@@ -227,11 +216,18 @@ export function CaseContactPhoneNumber() {
|
|
|
227
216
|
// user is openning case for others (use is partner or red hatter)
|
|
228
217
|
try {
|
|
229
218
|
setIsFetchingSSO(true);
|
|
230
|
-
const selectedContact = yield
|
|
219
|
+
const selectedContact = yield contacts.getSFDCContactBySso(contactSSOName);
|
|
231
220
|
setIsFetchingSSO(false);
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
221
|
+
if (selectedContact.supportPhoneAreaCodePrefixLineNumber) {
|
|
222
|
+
_phoneAreaCodePrefixLineNumber = selectedContact.supportPhoneAreaCodePrefixLineNumber;
|
|
223
|
+
_phoneCountryCode = selectedContact.supportPhoneCountryCode;
|
|
224
|
+
_suppliedPhoneNumberVerified = 'Deferred';
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
_phoneAreaCodePrefixLineNumber = getPhoneObj(selectedContact.phone).phoneLine || '';
|
|
228
|
+
_phoneCountryCode = getPhoneObj(selectedContact.phone).countryCode || '';
|
|
229
|
+
_suppliedPhoneNumberVerified = 'Deferred';
|
|
230
|
+
}
|
|
235
231
|
}
|
|
236
232
|
catch (e) {
|
|
237
233
|
_phoneAreaCodePrefixLineNumber = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseDetailsManagement.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAkBvD,UAAU,MAAO,SAAQ,gBAAgB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CAClD;AAED,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CaseDetailsManagement.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAkBvD,UAAU,MAAO,SAAQ,gBAAgB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CAClD;AAED,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAK,EAAE,MAAM,qBAgE1D"}
|
|
@@ -4,9 +4,9 @@ import isEqual from 'lodash/isEqual';
|
|
|
4
4
|
import React, { useContext, useState } from 'react';
|
|
5
5
|
import { useCaseSelector } from '../../../../context/CaseContext';
|
|
6
6
|
import { OwnerSelector } from '../../../AccountInfo/OwnerSelector';
|
|
7
|
-
|
|
7
|
+
import CaseGroup from '../../../CaseInformation/CaseGroup';
|
|
8
8
|
import Fts from '../../../CaseInformation/Fts';
|
|
9
|
-
|
|
9
|
+
import { Cep } from '../../../CaseManagement/Cep';
|
|
10
10
|
import { RHAssociatesSelector } from '../../../CaseManagement/RHAssociatesSelector';
|
|
11
11
|
import CaseContactSelector from '../../../CaseManagement/SendNotifications/CaseContactSelector';
|
|
12
12
|
import { PartnerCaseHelper } from '../../ShareCase/PartnerCaseHelper';
|
|
@@ -41,10 +41,12 @@ export default function CaseDetailsManagement(props) {
|
|
|
41
41
|
React.createElement(CaseContactPhoneNumberAlert, { isConfirm: true }),
|
|
42
42
|
canSeeInternalStatus && React.createElement(CaseInternalStatus, null),
|
|
43
43
|
canSeeSBRGroups && React.createElement(CaseSbrGroups, null),
|
|
44
|
+
React.createElement(CaseGroup, null),
|
|
44
45
|
React.createElement(CaseReferenceNumber, null),
|
|
45
46
|
canSeeEmailNotifications && React.createElement(CaseContactSelector, null),
|
|
46
47
|
React.createElement(RHAssociatesSelector, null),
|
|
47
48
|
React.createElement(Fts, { inlineEditable: true }),
|
|
49
|
+
React.createElement(Cep, null),
|
|
48
50
|
React.createElement(SFDCUrl, null),
|
|
49
51
|
React.createElement(ShareWithPartner, { routeProps: props.routeProps, isUpdatingPartner: isUpdatingPartner, accountNumber: accountNumber })))));
|
|
50
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductVersion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/ProductVersion.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProductVersion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/ProductVersion.tsx"],"names":[],"mappings":"AAyCA,OAAO,KAAkD,MAAM,OAAO,CAAC;AASvE,UAAU,MAAM;IACZ,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,qBA4WrC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -7,12 +7,12 @@ 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 { useApolloClient } from '@apollo/client/react';
|
|
11
10
|
import { Alert, AlertVariant, Button, MenuToggle, Select, SelectList, SelectOption, Spinner, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from '@patternfly/react-core';
|
|
12
11
|
import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
13
12
|
import { AlertMessage, AlertType, SingleSelectDropdown, ToastNotification, useSelectKeyboardNavigator, } from '@rh-support/components';
|
|
14
13
|
import { fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, useCanEditCase, } from '@rh-support/react-context';
|
|
15
|
-
import { haventLoadedMetadata, toOption } from '@rh-support/utils';
|
|
14
|
+
import { getUniqueSortedVersions, haventLoadedMetadata, toOption, } from '@rh-support/utils';
|
|
15
|
+
import filter from 'lodash/filter';
|
|
16
16
|
import isEmpty from 'lodash/isEmpty';
|
|
17
17
|
import isEqual from 'lodash/isEqual';
|
|
18
18
|
import isUndefined from 'lodash/isUndefined';
|
|
@@ -21,7 +21,7 @@ import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
|
21
21
|
import { Trans, useTranslation } from 'react-i18next';
|
|
22
22
|
import { useCaseDispatch, useCaseSelector } from '../../../../context/CaseContext';
|
|
23
23
|
import { useCaseUpdateErrorMessage } from '../../../../hooks/useCaseUpdateErrorMessage';
|
|
24
|
-
import { getVersionsDetails, updateCaseDetails } from '../../../../reducers/CaseReducer';
|
|
24
|
+
import { fetchCaseEntitlements, getVersionsDetails, updateCaseDetails } from '../../../../reducers/CaseReducer';
|
|
25
25
|
import { getProductObj } from '../../../shared/utils';
|
|
26
26
|
import { PDFContext } from '../../PDFContainer';
|
|
27
27
|
function ProductNVersion(props) {
|
|
@@ -32,21 +32,22 @@ function ProductNVersion(props) {
|
|
|
32
32
|
const [isVersionUpdating, setIsVersionUpdating] = useState(false);
|
|
33
33
|
const [isOpen, setIsOpen] = useState(false);
|
|
34
34
|
const textInputRef = useRef();
|
|
35
|
-
const { product, version, caseNumber, versionsDetails, isCaseUpdating } = useCaseSelector((state) => ({
|
|
35
|
+
const { product, version, caseNumber, contactSSOName, versionsDetails, isCaseUpdating } = useCaseSelector((state) => ({
|
|
36
36
|
product: state.caseDetails.product,
|
|
37
37
|
version: state.caseDetails.version,
|
|
38
|
+
contactSSOName: state.caseDetails.contactSSOName,
|
|
38
39
|
caseNumber: state.caseDetails.caseNumber,
|
|
39
40
|
versionsDetails: state.versionsDetails,
|
|
40
41
|
isCaseUpdating: state.isCaseUpdating,
|
|
41
42
|
}), isEqual);
|
|
42
43
|
const caseDispatch = useCaseDispatch();
|
|
43
44
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
44
|
-
const apolloClient = useApolloClient();
|
|
45
45
|
const { globalMetadataState: { allProducts }, } = useContext(GlobalMetadataStateContext);
|
|
46
46
|
const [isProductInvalid, setIsProductInvalid] = useState(false);
|
|
47
47
|
const [isVersionInvalid, setIsVersionInvalid] = useState(false);
|
|
48
48
|
const [selectedProductLocal, setSelectedProductLocal] = useState(product);
|
|
49
49
|
const [selectedVersionLocal, setSelectedVersionLocal] = useState(version);
|
|
50
|
+
const [isSEProductApiIsDown, setIsSEProductApiIsDown] = useState(false);
|
|
50
51
|
const [inputValue, setInputValue] = useState(product);
|
|
51
52
|
const [shouldFilter, setShouldFilter] = useState(false);
|
|
52
53
|
const onToggleClick = () => {
|
|
@@ -111,11 +112,19 @@ function ProductNVersion(props) {
|
|
|
111
112
|
}
|
|
112
113
|
setIsProductUpdating(true);
|
|
113
114
|
setIsVersionUpdating(true);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
if (!onlyVersionChanged && contactSSOName && caseNumber) {
|
|
116
|
+
yield updateCaseDetails(caseDispatch, caseNumber, {
|
|
117
|
+
product: selectedProduct,
|
|
118
|
+
version: selectedVersion,
|
|
119
|
+
});
|
|
120
|
+
yield fetchCaseEntitlements(caseDispatch, contactSSOName, selectedProduct, undefined, true, caseNumber);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
yield updateCaseDetails(caseDispatch, caseNumber, {
|
|
124
|
+
product: selectedProduct,
|
|
125
|
+
version: selectedVersion,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
119
128
|
setIsProductUpdating(false);
|
|
120
129
|
setIsVersionUpdating(false);
|
|
121
130
|
if (onlyVersionChanged) {
|
|
@@ -141,29 +150,60 @@ function ProductNVersion(props) {
|
|
|
141
150
|
});
|
|
142
151
|
// To check if version in invalid
|
|
143
152
|
const checkIfVersionIsInvalid = isVersionInvalid && isEmpty(selectedVersionLocal);
|
|
153
|
+
// when user changes selected product, we need to get the versions
|
|
144
154
|
useEffect(() => {
|
|
145
155
|
if (!selectedProductLocal)
|
|
146
156
|
return;
|
|
157
|
+
const getVersions = () => __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
try {
|
|
159
|
+
yield getVersionsDetails(caseDispatch, selectedProductLocal);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
console.log(e);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
// call sfdc version api to get version flags that we only get from sfdc api
|
|
166
|
+
// flags are used in severity components
|
|
167
|
+
getVersions();
|
|
168
|
+
// populate versions with SE product api versions
|
|
147
169
|
const productObj = getProductObj(allProducts.data.productsResult, selectedProductLocal);
|
|
148
|
-
if (productObj.
|
|
149
|
-
|
|
170
|
+
if (productObj.versions) {
|
|
171
|
+
const productVersions = productObj.hasComponentsInsteadOfVersions
|
|
172
|
+
? productObj.versions.sort()
|
|
173
|
+
: productObj.versions;
|
|
174
|
+
setVersions(productVersions);
|
|
175
|
+
if (productVersions.length === 1 && !selectedVersionLocal) {
|
|
176
|
+
setSelectedVersionLocal(productVersions[0]);
|
|
177
|
+
updateProductVerstion(selectedProductLocal, productVersions[0]);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
setIsSEProductApiIsDown(true);
|
|
150
182
|
}
|
|
151
183
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
152
184
|
}, [selectedProductLocal, caseDispatch, allProducts.data]);
|
|
185
|
+
// observe when fetched versions are available
|
|
153
186
|
useEffect(() => {
|
|
154
|
-
|
|
155
|
-
if (versionsDetails.isFetching || !((_a = versionsDetails.data) === null || _a === void 0 ? void 0 : _a.length))
|
|
187
|
+
if (!isSEProductApiIsDown)
|
|
156
188
|
return;
|
|
157
189
|
const fetchedVersions = versionsDetails.data.map(({ name }) => name);
|
|
158
|
-
setVersions(fetchedVersions);
|
|
159
190
|
if (fetchedVersions.length === 1 && !selectedVersionLocal) {
|
|
191
|
+
setVersions(fetchedVersions);
|
|
160
192
|
setSelectedVersionLocal(fetchedVersions[0]);
|
|
161
193
|
updateProductVerstion(selectedProductLocal, fetchedVersions[0]);
|
|
194
|
+
return;
|
|
162
195
|
}
|
|
196
|
+
const productObj = getProductObj(allProducts.data.productsResult, selectedProductLocal);
|
|
197
|
+
const sfdcVersions = getUniqueSortedVersions(fetchedVersions);
|
|
198
|
+
const versionsForSelectedProduct = productObj.versions ? productObj.versions : sfdcVersions;
|
|
199
|
+
const productVersions = (productObj === null || productObj === void 0 ? void 0 : productObj.hasComponentsInsteadOfVersions)
|
|
200
|
+
? versionsForSelectedProduct.sort()
|
|
201
|
+
: versionsForSelectedProduct;
|
|
202
|
+
setVersions(productVersions);
|
|
163
203
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
164
204
|
}, [versionsDetails.data]);
|
|
165
205
|
const computeDropdownList = () => {
|
|
166
|
-
const list = allProducts.data.productsResult;
|
|
206
|
+
const list = filter(allProducts.data.productsResult, (p) => p.isEntitledProduct);
|
|
167
207
|
if (!list)
|
|
168
208
|
return [];
|
|
169
209
|
const options = shouldFilter && !isUndefined(inputValue) && !isEmpty(inputValue === null || inputValue === void 0 ? void 0 : inputValue.trim())
|
|
@@ -193,10 +233,10 @@ function ProductNVersion(props) {
|
|
|
193
233
|
};
|
|
194
234
|
useEffect(() => {
|
|
195
235
|
if (haventLoadedMetadata(allProducts, (data) => isEmpty(data.productsResult))) {
|
|
196
|
-
fetchProducts(dispatchToGlobalMetadataReducer,
|
|
236
|
+
fetchProducts(dispatchToGlobalMetadataReducer, contactSSOName);
|
|
197
237
|
}
|
|
198
238
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
199
|
-
}, [allProducts, dispatchToGlobalMetadataReducer,
|
|
239
|
+
}, [allProducts, dispatchToGlobalMetadataReducer, contactSSOName]);
|
|
200
240
|
return (React.createElement(React.Fragment, null,
|
|
201
241
|
React.createElement(AlertMessage, { show: !allProducts.isFetching && allProducts.isError, title: t('There was an error loading products.'), variant: AlertType.DANGER }),
|
|
202
242
|
isEmpty(selectedVersionLocal) && (selectedVersionLocal === null || selectedVersionLocal === void 0 ? void 0 : selectedVersionLocal.length) < 2 && (React.createElement(Alert, { isInline: true, className: "pf-v6-u-mb-md", variant: AlertVariant.danger, title: React.createElement(Trans, null, "Please clear the errors to change the product on your case") })),
|
|
@@ -213,6 +253,6 @@ function ProductNVersion(props) {
|
|
|
213
253
|
React.createElement(SingleSelectDropdown, { className: "open-case-version", id: "version-dropdown", placeholder: t(`Select a version`), selected: getVersionSelectedDropdownOption, options: getVersionDropdownOptions, isInvalid: checkIfVersionIsInvalid, isDisabled: isVersionUpdating ||
|
|
214
254
|
(allProducts.isFetching && !allProducts.isError) ||
|
|
215
255
|
isEmpty(selectedProductLocal) ||
|
|
216
|
-
isCaseUpdating, onSelect: onVersionChange, isLoading: isVersionUpdating || versionsDetails.isFetching, dataTrackingId: "case-details-version-selector", isScrollable: true }))))));
|
|
256
|
+
isCaseUpdating, onSelect: onVersionChange, isLoading: isVersionUpdating || (isSEProductApiIsDown && versionsDetails.isFetching), dataTrackingId: "case-details-version-selector", isScrollable: true }))))));
|
|
217
257
|
}
|
|
218
258
|
export default ProductNVersion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VerifyCaseStatusModal.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VerifyCaseStatusModal.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAa3E,UAAU,MAAM;IACZ,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,qBA6IlD"}
|
|
@@ -7,7 +7,6 @@ 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 { useApolloClient } from '@apollo/client/react';
|
|
11
10
|
import { Button, ButtonVariant, Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant, } from '@patternfly/react-core';
|
|
12
11
|
import { SingleSelectDropdown, ToastNotification } from '@rh-support/components';
|
|
13
12
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
@@ -44,12 +43,11 @@ export function VerifyCaseStatusModal(props) {
|
|
|
44
43
|
selectedAccountDetails: state.selectedAccountDetails,
|
|
45
44
|
}), isEqual);
|
|
46
45
|
const { status } = caseState.caseDetails;
|
|
47
|
-
const { globalMetadataState: { loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
|
|
48
|
-
const apolloClient = useApolloClient();
|
|
46
|
+
const { globalMetadataState: { loggedInUsersAccount, loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
|
|
49
47
|
const canManageCase = loggedInUserRights.data.canManageCases();
|
|
50
48
|
useEffect(() => {
|
|
51
|
-
fetchAllStatuses(caseOverviewDispatch,
|
|
52
|
-
}, [caseOverviewDispatch,
|
|
49
|
+
fetchAllStatuses(caseOverviewDispatch, loggedInUsersAccount.data.secureSupport);
|
|
50
|
+
}, [caseOverviewDispatch, loggedInUsersAccount.data.secureSupport]);
|
|
53
51
|
const { isCaseUpdating } = caseState;
|
|
54
52
|
const canEditCase = useCanEditCase();
|
|
55
53
|
const caseDispatch = useCaseDispatch();
|
|
@@ -301,6 +301,11 @@ ul#case-history-paginated-timeline {
|
|
|
301
301
|
height: 36px;
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
+
/* Error state is shown in helper text below; hide the inline status icon from the input */
|
|
305
|
+
.case-history-timeline-datepicker .pf-v6-c-form-control__icon.pf-m-status {
|
|
306
|
+
display: none;
|
|
307
|
+
}
|
|
308
|
+
|
|
304
309
|
.timeline-sort-order-select {
|
|
305
310
|
display: flex;
|
|
306
311
|
justify-content: center;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseInformation.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseInformation.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,MAAM,qBAkHpD"}
|