@rh-support/troubleshoot 2.6.312 → 2.6.313
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/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +2 -2
- package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/CaseOverview/index.js +2 -2
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.js +2 -2
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.js +30 -7
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseAttachment.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseAttachment.js +17 -20
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.js +7 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.js +7 -8
- package/lib/esm/components/CaseInformation/CaseInformation.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/CaseInformation.js +3 -4
- package/lib/esm/components/CaseInformation/FileDiag.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/FileDiag.js +0 -4
- package/lib/esm/components/IdeaInformation/IdeaInformation.d.ts.map +1 -1
- package/lib/esm/components/IdeaInformation/IdeaInformation.js +3 -4
- package/lib/esm/components/shared/fileUpload/FileUpload.js +2 -3
- package/lib/esm/components/shared/fileUpload/reducer/AttachmentHelper.d.ts +1 -0
- package/lib/esm/components/shared/fileUpload/reducer/AttachmentHelper.d.ts.map +1 -1
- package/lib/esm/components/shared/fileUpload/reducer/AttachmentHelper.js +16 -8
- package/lib/esm/components/shared/fileUpload/useFileUploader.d.ts.map +1 -1
- package/lib/esm/components/shared/fileUpload/useFileUploader.js +26 -8
- package/lib/esm/components/shared/useIsSectionValid.d.ts.map +1 -1
- package/lib/esm/components/shared/useIsSectionValid.js +21 -42
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +1 -3
- package/lib/esm/components/wizardLayout/WizardAside.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardAside.js +2 -4
- package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardLayout.js +1 -4
- package/lib/esm/css/case.css +6 -0
- package/lib/esm/reducers/CaseReducer.d.ts +3 -1
- package/lib/esm/reducers/CaseReducer.d.ts.map +1 -1
- package/lib/esm/reducers/CaseReducer.js +30 -37
- package/package.json +6 -6
|
@@ -98,9 +98,9 @@ export function RequestEscalationModal(props) {
|
|
|
98
98
|
caseInput: {
|
|
99
99
|
Subject: formState.subject,
|
|
100
100
|
Description: formState.description,
|
|
101
|
-
Status: '
|
|
101
|
+
Status: 'In Progress',
|
|
102
102
|
Origin: 'Portal ACE',
|
|
103
|
-
Priority: props.severity
|
|
103
|
+
Priority: props.severity || '3 (Medium)',
|
|
104
104
|
Type: 'RME',
|
|
105
105
|
RecordTypeId: '012Ek00000JUtx5IAD',
|
|
106
106
|
ParentId: caseSalesforceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAkD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AAmCA,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,qBAkhBjD"}
|
|
@@ -30,7 +30,8 @@ import { usePostComment } from '../../shared/usePostComment';
|
|
|
30
30
|
import { ReopenCaseModal } from '../ConfirmationModals/ReopenCaseModal';
|
|
31
31
|
import { PDFContext } from '../PDFContainer';
|
|
32
32
|
import { CaseInformation } from '../Tabs/CaseDetails/CaseInformation';
|
|
33
|
-
|
|
33
|
+
// TODO: Re-enable once phone number verification flow is fully supported with GraphQL
|
|
34
|
+
// import { CaseContactPhoneNumberAlert } from '../Tabs/CaseDetails/CasePhoneNumberConfirmAlert';
|
|
34
35
|
import Summary from '../Tabs/CaseDetails/Summary';
|
|
35
36
|
import CaseOwnerInfo from './CaseOwnerInfo';
|
|
36
37
|
import CaseStatus from './CaseStatus';
|
|
@@ -254,7 +255,6 @@ export default function CaseOverview(props) {
|
|
|
254
255
|
React.createElement(Trans, null, "Case inactivity warning")),
|
|
255
256
|
React.createElement("p", { className: "pf-v6-u-mb-sm" },
|
|
256
257
|
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."))) })))),
|
|
257
|
-
React.createElement(CaseContactPhoneNumberAlert, { isReview: true, tabRef: props.tabsRef }),
|
|
258
258
|
React.createElement("header", { className: "pf-v6-u-mb-sm pf-v6-u-mt-lg" },
|
|
259
259
|
React.createElement("h2", { className: "case-ID" },
|
|
260
260
|
React.createElement(Trans, null, "Case"),
|
|
@@ -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;
|
|
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;AAoBvD,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,qBA2E1D"}
|
|
@@ -14,7 +14,8 @@ import { PartnerCaseHelper } from '../../ShareCase/PartnerCaseHelper';
|
|
|
14
14
|
import { ShareWithPartner } from '../../ShareCase/PartnerShare';
|
|
15
15
|
import { CaseContactPhoneNumber } from './CaseContactPhoneNumber';
|
|
16
16
|
import CaseInternalStatus from './CaseInternalStatus';
|
|
17
|
-
|
|
17
|
+
// TODO: Re-enable once phone number verification flow is fully supported with GraphQL
|
|
18
|
+
// import { CaseContactPhoneNumberAlert } from './CasePhoneNumberConfirmAlert';
|
|
18
19
|
import CaseReferenceNumber from './CaseReferenceNumber';
|
|
19
20
|
import CaseSbrGroups from './CaseSbrGroups';
|
|
20
21
|
import SFDCUrl from './SFDCUrl';
|
|
@@ -43,7 +44,6 @@ export default function CaseDetailsManagement(props) {
|
|
|
43
44
|
React.createElement(OwnerSelector, null)),
|
|
44
45
|
React.createElement(FlexItem, { flex: { default: 'flex_1' } },
|
|
45
46
|
React.createElement(CaseContactPhoneNumber, null))),
|
|
46
|
-
React.createElement(CaseContactPhoneNumberAlert, { isConfirm: true }),
|
|
47
47
|
canSeeInternalStatus && React.createElement(CaseInternalStatus, null),
|
|
48
48
|
canSeeSBRGroups && React.createElement(CaseSbrGroups, null),
|
|
49
49
|
React.createElement(Flex, { direction: { default: 'column', lg: 'row' } },
|
|
@@ -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":"AA0CA,OAAO,KAAkD,MAAM,OAAO,CAAC;AASvE,UAAU,MAAM;IACZ,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,qBAkXrC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -12,7 +12,7 @@ import { Alert, AlertVariant, Button, MenuToggle, Select, SelectList, SelectOpti
|
|
|
12
12
|
import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
13
13
|
import { AlertMessage, AlertType, SingleSelectDropdown, ToastNotification, useSelectKeyboardNavigator, } from '@rh-support/components';
|
|
14
14
|
import { fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, useCanEditCase, } from '@rh-support/react-context';
|
|
15
|
-
import { haventLoadedMetadata, toOption } from '@rh-support/utils';
|
|
15
|
+
import { haventLoadedMetadata, resolveProductServiceLevelsForAccount, toOption, } from '@rh-support/utils';
|
|
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, updateCaseDetailsGraphQL } from '../../../../reducers/CaseReducer';
|
|
24
|
+
import { getVersionsDetails, setCaseState, updateCaseDetailsGraphQL } from '../../../../reducers/CaseReducer';
|
|
25
25
|
import { getProductObj } from '../../../shared/utils';
|
|
26
26
|
import { PDFContext } from '../../PDFContainer';
|
|
27
27
|
function ProductNVersion(props) {
|
|
@@ -32,13 +32,14 @@ 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, existingCaseDetails, versionsDetails, isCaseUpdating } = useCaseSelector((state) => ({
|
|
35
|
+
const { product, version, caseNumber, existingCaseDetails, versionsDetails, isCaseUpdating, selectedAccountDetails, } = useCaseSelector((state) => ({
|
|
36
36
|
product: state.caseDetails.product,
|
|
37
37
|
version: state.caseDetails.version,
|
|
38
38
|
caseNumber: state.caseDetails.caseNumber,
|
|
39
39
|
existingCaseDetails: state.caseDetails,
|
|
40
40
|
versionsDetails: state.versionsDetails,
|
|
41
41
|
isCaseUpdating: state.isCaseUpdating,
|
|
42
|
+
selectedAccountDetails: state.selectedAccountDetails,
|
|
42
43
|
}), isEqual);
|
|
43
44
|
const caseDispatch = useCaseDispatch();
|
|
44
45
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
@@ -105,6 +106,7 @@ function ProductNVersion(props) {
|
|
|
105
106
|
}
|
|
106
107
|
};
|
|
107
108
|
const updateProductVerstion = (selectedProduct, selectedVersion) => __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
var _a, _b;
|
|
108
110
|
let onlyVersionChanged = false;
|
|
109
111
|
try {
|
|
110
112
|
if (product === selectedProduct) {
|
|
@@ -112,10 +114,31 @@ function ProductNVersion(props) {
|
|
|
112
114
|
}
|
|
113
115
|
setIsProductUpdating(true);
|
|
114
116
|
setIsVersionUpdating(true);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
const selectedVersionId = (_b = (_a = versionsDetails.data) === null || _a === void 0 ? void 0 : _a.find((v) => v.name === selectedVersion)) === null || _b === void 0 ? void 0 : _b.id;
|
|
118
|
+
const serviceLevels = !onlyVersionChanged
|
|
119
|
+
? resolveProductServiceLevelsForAccount(selectedAccountDetails.data, allProducts.data.productsResult, selectedProduct)
|
|
120
|
+
: undefined;
|
|
121
|
+
yield updateCaseDetailsGraphQL(caseDispatch, apolloClient, caseNumber, Object.assign(Object.assign(Object.assign({ product: selectedProduct, version: selectedVersion }, (selectedVersionId ? { productId: selectedVersionId } : {})), (!onlyVersionChanged && (serviceLevels === null || serviceLevels === void 0 ? void 0 : serviceLevels.defaultEntitlementId)
|
|
122
|
+
? { entitlementId: serviceLevels.defaultEntitlementId }
|
|
123
|
+
: {})), (!onlyVersionChanged && (serviceLevels === null || serviceLevels === void 0 ? void 0 : serviceLevels.entitlementSla)
|
|
124
|
+
? { entitlementSla: serviceLevels.entitlementSla }
|
|
125
|
+
: {})), false, { existingCaseDetails });
|
|
126
|
+
if (!onlyVersionChanged && (serviceLevels === null || serviceLevels === void 0 ? void 0 : serviceLevels.productServiceLevel)) {
|
|
127
|
+
setCaseState(caseDispatch, {
|
|
128
|
+
isProductNotEntitled: false,
|
|
129
|
+
productServiceLevel: serviceLevels.productServiceLevel,
|
|
130
|
+
otherServiceLevels: serviceLevels.otherServiceLevels,
|
|
131
|
+
selectedEntitlementId: serviceLevels.defaultEntitlementId,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else if (!onlyVersionChanged) {
|
|
135
|
+
setCaseState(caseDispatch, {
|
|
136
|
+
isProductNotEntitled: true,
|
|
137
|
+
productServiceLevel: undefined,
|
|
138
|
+
otherServiceLevels: [],
|
|
139
|
+
selectedEntitlementId: undefined,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
119
142
|
setIsProductUpdating(false);
|
|
120
143
|
setIsVersionUpdating(false);
|
|
121
144
|
if (onlyVersionChanged) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseAttachment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseAttachment.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAsBxE,OAAO,KAAuC,MAAM,OAAO,CAAC;AAS5D,UAAU,MAAM;IACZ,UAAU,EAAE,WAAW,CAAC;IACxB,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,KAAK,IAAI,CAAC;IACzE,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChH;AAED,QAAA,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"CaseAttachment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseAttachment.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAsBxE,OAAO,KAAuC,MAAM,OAAO,CAAC;AAS5D,UAAU,MAAM;IACZ,UAAU,EAAE,WAAW,CAAC;IACxB,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,KAAK,IAAI,CAAC;IACzE,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChH;AAED,QAAA,MAAM,cAAc,4EAkSlB,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -106,15 +106,23 @@ const CaseAttachment = React.forwardRef((props, ref) => {
|
|
|
106
106
|
name: fileName,
|
|
107
107
|
});
|
|
108
108
|
};
|
|
109
|
+
// Prefer size (bytes); fall back to sizeKB when GraphQL only populated the KB field.
|
|
110
|
+
const attachmentSizeBytes = props.attachment.size > 0
|
|
111
|
+
? props.attachment.size
|
|
112
|
+
: props.attachment.sizeKB > 0
|
|
113
|
+
? props.attachment.sizeKB * 1024
|
|
114
|
+
: 0;
|
|
115
|
+
const attachmentSizeLabel = attachmentSizeBytes > 0 ? humanizeSize(attachmentSizeBytes) : '';
|
|
116
|
+
const attachmentLinkLabel = attachmentSizeLabel
|
|
117
|
+
? `${props.attachment.fileName} (${attachmentSizeLabel})`
|
|
118
|
+
: props.attachment.fileName;
|
|
109
119
|
const renderAttachmentLink = () => {
|
|
110
120
|
// TODO: Re-enable secure support download gating when needed again
|
|
111
121
|
// if (!loggedInUsersAccount.data.secureSupport) {
|
|
112
122
|
// if (isExportingPDF) {
|
|
113
123
|
// return (
|
|
114
124
|
// <a href={props.attachment.link}>
|
|
115
|
-
// <span>
|
|
116
|
-
// {props.attachment.fileName} ({humanizeSize(props.attachment.size)})
|
|
117
|
-
// </span>
|
|
125
|
+
// <span>{attachmentLinkLabel}</span>
|
|
118
126
|
// </a>
|
|
119
127
|
// );
|
|
120
128
|
// }
|
|
@@ -123,12 +131,11 @@ const CaseAttachment = React.forwardRef((props, ref) => {
|
|
|
123
131
|
// className="attachment-download-btn"
|
|
124
132
|
// title={t('Download {{fileName}}', { fileName: props.attachment.fileName })}
|
|
125
133
|
// variant={ButtonVariant.link}
|
|
134
|
+
// isInline
|
|
126
135
|
// onClick={onAttachmentDownloadClick}
|
|
127
136
|
// data-tracking-id="attachment-download-button"
|
|
128
137
|
// >
|
|
129
|
-
// <span>
|
|
130
|
-
// {props.attachment.fileName} ({humanizeSize(props.attachment.size)})
|
|
131
|
-
// </span>
|
|
138
|
+
// <span>{attachmentLinkLabel}</span>
|
|
132
139
|
// </Button>
|
|
133
140
|
// );
|
|
134
141
|
// }
|
|
@@ -137,25 +144,15 @@ const CaseAttachment = React.forwardRef((props, ref) => {
|
|
|
137
144
|
// position={TooltipPosition.top}
|
|
138
145
|
// content={t(`You don't have appropriate permissions to download the attachment`)}
|
|
139
146
|
// >
|
|
140
|
-
// <strong>
|
|
141
|
-
// {props.attachment.fileName} ({humanizeSize(props.attachment.size)})
|
|
142
|
-
// </strong>
|
|
147
|
+
// <strong>{attachmentLinkLabel}</strong>
|
|
143
148
|
// </Tooltip>
|
|
144
149
|
// );
|
|
145
150
|
if (isExportingPDF) {
|
|
146
151
|
return (React.createElement("a", { href: props.attachment.link },
|
|
147
|
-
React.createElement("span", null,
|
|
148
|
-
props.attachment.fileName,
|
|
149
|
-
" (",
|
|
150
|
-
humanizeSize(props.attachment.size),
|
|
151
|
-
")")));
|
|
152
|
+
React.createElement("span", null, attachmentLinkLabel)));
|
|
152
153
|
}
|
|
153
|
-
return (React.createElement(Button, { className: "attachment-download-btn", title: t('Download {{fileName}}', { fileName: props.attachment.fileName }), variant: ButtonVariant.link, onClick: onAttachmentDownloadClick, "data-tracking-id": "attachment-download-button" },
|
|
154
|
-
React.createElement("span", null,
|
|
155
|
-
props.attachment.fileName,
|
|
156
|
-
" (",
|
|
157
|
-
humanizeSize(props.attachment.size),
|
|
158
|
-
")")));
|
|
154
|
+
return (React.createElement(Button, { className: "attachment-download-btn", title: t('Download {{fileName}}', { fileName: props.attachment.fileName }), variant: ButtonVariant.link, isInline: true, onClick: onAttachmentDownloadClick, "data-tracking-id": "attachment-download-button" },
|
|
155
|
+
React.createElement("span", null, attachmentLinkLabel)));
|
|
159
156
|
};
|
|
160
157
|
const onJumpToComment = (attachmentId) => () => props.showJumpToComment && props.onJumpToComment && props.onJumpToComment(attachmentId);
|
|
161
158
|
if (((_a = props.attachment) === null || _a === void 0 ? void 0 : _a.isPrivate) && !canSeePrivateAttachments)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentSearch.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.tsx"],"names":[],"mappings":"AASA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAkB,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAE5F,UAAU,MAAM;IACZ,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,sBAAsB,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CommentSearch.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.tsx"],"names":[],"mappings":"AASA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAkB,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAE5F,UAAU,MAAM;IACZ,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,sBAAsB,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,qBA6G1C"}
|
|
@@ -46,7 +46,13 @@ export function CommentSearch(props) {
|
|
|
46
46
|
}
|
|
47
47
|
else if (discussion.discussionType === DiscussionType.ATTACHMENT) {
|
|
48
48
|
const caseAttachment = discussion.item;
|
|
49
|
-
const
|
|
49
|
+
const attachmentSizeBytes = caseAttachment.size > 0
|
|
50
|
+
? caseAttachment.size
|
|
51
|
+
: caseAttachment.sizeKB > 0
|
|
52
|
+
? caseAttachment.sizeKB * 1024
|
|
53
|
+
: 0;
|
|
54
|
+
const attachmentSizeText = attachmentSizeBytes > 0 ? humanizeSize(attachmentSizeBytes) : '';
|
|
55
|
+
const caseAttachmentText = `delete ${caseAttachment.modifiedBy} ${caseAttachment.description || ''} ${caseAttachment.lastModifiedDate} ${caseAttachment.checksum || ''} Attached file ${caseAttachment.fileName}${attachmentSizeText ? ` ${attachmentSizeText}` : ''} to this case.`;
|
|
50
56
|
searchApi.indexDocument(discussion.item.id, caseAttachmentText || '');
|
|
51
57
|
}
|
|
52
58
|
else if (discussion.discussionType === DiscussionType.CHAT) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostComment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/PostComment.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostComment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/PostComment.tsx"],"names":[],"mappings":"AAOA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAMpF,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAmB5E,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,qBA+bxC"}
|
|
@@ -11,7 +11,7 @@ import { Alert, AlertVariant, Button, ButtonVariant, Checkbox } from '@patternfl
|
|
|
11
11
|
import PlusIcon from '@patternfly/react-icons/dist/js/icons/plus-icon';
|
|
12
12
|
import { EditorMode, LoadingIndicator, MarkdownEditor, ToastNotification, usePrevious } from '@rh-support/components';
|
|
13
13
|
import { GlobalMetadataStateContext, useCanEditCase, useUserPreferences } from '@rh-support/react-context';
|
|
14
|
-
import { ability, CaseDiscussionFields,
|
|
14
|
+
import { ability, CaseDiscussionFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
15
15
|
import isEmpty from 'lodash/isEmpty';
|
|
16
16
|
import isEqual from 'lodash/isEqual';
|
|
17
17
|
import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
|
@@ -33,7 +33,6 @@ export function PostComment(props) {
|
|
|
33
33
|
const { t } = useTranslation();
|
|
34
34
|
let { caseNumber } = props;
|
|
35
35
|
const [isTextAreaFocused, setIsTextAreaFocused] = useState(false);
|
|
36
|
-
const canAddAttachments = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.ATTACHMENTS);
|
|
37
36
|
const canPostPrivateComments = ability.can(resourceActions.PATCH, resources.CASE_COMMENTS, CaseDiscussionFields.POST_PRIVATE_COMMENT);
|
|
38
37
|
const { createComment, loading: isPostingComment } = useCreateCaseComment();
|
|
39
38
|
const dispatchToAttachmentReducer = useContext(AttachmentDispatchContext);
|
|
@@ -311,15 +310,15 @@ export function PostComment(props) {
|
|
|
311
310
|
isModalOpen && loggedInUserRights.data.isInternal() && isPublic && (React.createElement(VerifyCaseStatusModal, { onClose: onCancel, onConfirm: onConfirm, isUpdating: isPostingComment, caseNumber: props.caseNumber })),
|
|
312
311
|
React.createElement(Button, { "data-tracking-id": "postcomment-submit-button", type: "button", variant: ButtonVariant.primary, onClick: loggedInUser.data.isInternal && isPublic ? onBtnClick : isNotInternalConfirm, isDisabled: isSubmitDisabled, className: "postcomment-submit" },
|
|
313
312
|
React.createElement(Trans, null, "Submit")),
|
|
314
|
-
|
|
315
|
-
React.createElement(Trans, null, "Cancel"))),
|
|
316
|
-
canAddAttachments && (React.createElement(FileSelectorButton, { isSessionId: false, isDisabled: isFileUploadDisabled, buttonLabel: React.createElement(React.Fragment, null,
|
|
313
|
+
React.createElement(FileSelectorButton, { isSessionId: false, isDisabled: isFileUploadDisabled, buttonLabel: React.createElement(React.Fragment, null,
|
|
317
314
|
React.createElement(PlusIcon, null),
|
|
318
315
|
" ",
|
|
319
|
-
React.createElement(Trans, null, "Attach
|
|
316
|
+
React.createElement(Trans, null, "Attach files")) }),
|
|
317
|
+
React.createElement(Button, { className: "secondary-button-pill", "data-tracking-id": "postcomment-cancel-button", type: "button", variant: ButtonVariant.link, onClick: onCancelClick, isDisabled: isCommentEmpty || isProcessing },
|
|
318
|
+
React.createElement(Trans, null, "Cancel")),
|
|
320
319
|
canPostPrivateComments && (React.createElement("span", { className: "post-comment-checkbox" },
|
|
321
320
|
React.createElement(Checkbox, { label: t('Private'), isChecked: !isPublic && canPostPrivateComments, onChange: handleCheckboxToggle, "aria-label": t('Private'), id: "private-comment", name: "private-comment", "data-tracking-id": "private-comment-checkbox" }))))),
|
|
322
|
-
|
|
321
|
+
React.createElement("div", Object.assign({}, getRootProps(), { className: "post-comment-dropzone" }),
|
|
323
322
|
React.createElement("input", Object.assign({}, getInputProps())),
|
|
324
|
-
React.createElement(FileUpload, { className: `file-upload-section ${hasSomeSelectedFilesLocal ? 'card card-white pf-v6-u-mt-lg pf-v6-u-p-lg' : ''}`, idToUploadTo: caseNumber, caseSalesforceId: caseSalesforceId, onUploadClick: onFileUploadClick, onCaseFileUploaded: onCaseFileUploaded, isSessionId: false, needsAnalyzing: false, autoUploadOnSelect: true, isPrivate: !isPublic, showDescriptionInfoMsg: true }))))
|
|
323
|
+
React.createElement(FileUpload, { className: `file-upload-section ${hasSomeSelectedFilesLocal ? 'card card-white pf-v6-u-mt-lg pf-v6-u-p-lg' : ''}`, idToUploadTo: caseNumber, caseSalesforceId: caseSalesforceId, onUploadClick: onFileUploadClick, onCaseFileUploaded: onCaseFileUploaded, isSessionId: false, needsAnalyzing: false, autoUploadOnSelect: true, isPrivate: !isPublic, showDescriptionInfoMsg: true }))));
|
|
325
324
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseInformation.tsx"],"names":[],"mappings":"AAYA,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,
|
|
1
|
+
{"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseInformation.tsx"],"names":[],"mappings":"AAYA,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,qBAmHpD"}
|
|
@@ -16,11 +16,10 @@ export default function CaseInformation(props) {
|
|
|
16
16
|
const { globalMetadataState: { allCaseTypes, allCaseSeverities, caseLanguages, loggedInUser, loggedInUserJwtToken, loggedInUsersAccount, loggedInUserRights, }, } = useContext(GlobalMetadataStateContext);
|
|
17
17
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
18
18
|
const apolloClient = useApolloClient();
|
|
19
|
-
const { contactSSOName, selectedAccountDetails, ownersCaseGroups
|
|
19
|
+
const { contactSSOName, selectedAccountDetails, ownersCaseGroups } = useCaseSelector((state) => ({
|
|
20
20
|
contactSSOName: state.caseDetails.contactSSOName,
|
|
21
21
|
ownersCaseGroups: state.ownersCaseGroups,
|
|
22
22
|
selectedAccountDetails: state.selectedAccountDetails,
|
|
23
|
-
hasInvalidEntitlements: false, // TODO: remove this once we have a proper entitlement check
|
|
24
23
|
}), isEqual);
|
|
25
24
|
const isMetadataLoading = () => {
|
|
26
25
|
return !isMetadataLoadingError() && (loggedInUser.isFetching || selectedAccountDetails.isFetching);
|
|
@@ -69,13 +68,13 @@ export default function CaseInformation(props) {
|
|
|
69
68
|
' ',
|
|
70
69
|
React.createElement("a", { href: "/support/contact/customerService" }, "Customer Service"),
|
|
71
70
|
" for assistance.")),
|
|
72
|
-
React.createElement(AlertMessage, { show:
|
|
71
|
+
React.createElement(AlertMessage, { show: !loggedInUserRights.data.isEntitled(), variant: AlertType.DANGER, className: "pf-v6-u-mt-lg", isInline: true },
|
|
73
72
|
React.createElement(Trans, { i18nKey: "i18ValidEntitlementContactCustomerService" },
|
|
74
73
|
"You need a valid entitlement to create a case.\u00A0 Please contact",
|
|
75
74
|
' ',
|
|
76
75
|
React.createElement("a", { href: "/support/contact/customerService" }, "Customer Service"),
|
|
77
76
|
" for assistance.")),
|
|
78
|
-
|
|
77
|
+
loggedInUserRights.data.isEntitled() &&
|
|
79
78
|
!isMetadataLoading() &&
|
|
80
79
|
!isMetadataLoadingError() &&
|
|
81
80
|
loggedInUserRights.data.canManageCases() && (React.createElement(React.Fragment, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDiag.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/FileDiag.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileDiag.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/FileDiag.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAQ/D,UAAU,MAAM;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,qBAqCrC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// TODO: Re-enable when Hydra/GraphQL attachment APIs support secure support again
|
|
2
2
|
// import { GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
3
|
-
import { ability, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
4
3
|
import { PreviousCaseTypes } from '@rh-support/utils';
|
|
5
4
|
import isEqual from 'lodash/isEqual';
|
|
6
5
|
import React, { useContext, useEffect, useState } from 'react';
|
|
@@ -11,7 +10,6 @@ import FileEARule, { getValidAttachmentRules } from '../ImproveCase/FileEARule';
|
|
|
11
10
|
import { WidgetFileUploader } from '../shared/fileUpload/WidgetFileUploader';
|
|
12
11
|
export function FileDiag(props) {
|
|
13
12
|
const { sessionRestore: { activeSessionId }, } = useContext(SessionRestoreStateContext);
|
|
14
|
-
const canAddAttachments = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.ATTACHMENTS);
|
|
15
13
|
// TODO: Re-enable when Hydra/GraphQL attachment APIs support secure support again
|
|
16
14
|
// const {
|
|
17
15
|
// globalMetadataState: { loggedInUsersAccount },
|
|
@@ -24,8 +22,6 @@ export function FileDiag(props) {
|
|
|
24
22
|
useEffect(() => {
|
|
25
23
|
setIsIdea(caseType === PreviousCaseTypes.FEATURE_ENHANCEMENT);
|
|
26
24
|
}, [caseType]);
|
|
27
|
-
if (!canAddAttachments)
|
|
28
|
-
return null;
|
|
29
25
|
return (React.createElement(WidgetFileUploader, { className: props.className, idToUploadTo: activeSessionId, isPrivate: false, needsAnalyzing: isIdea ? false : true, isSessionId: true,
|
|
30
26
|
// isSecureSupport={loggedInUsersAccount.data.secureSupport!}
|
|
31
27
|
// autoUploadOnSelect={loggedInUsersAccount.data.secureSupport ? false : true}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdeaInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/IdeaInformation/IdeaInformation.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAkBrD,MAAM,CAAC,OAAO,UAAU,eAAe,
|
|
1
|
+
{"version":3,"file":"IdeaInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/IdeaInformation/IdeaInformation.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAkBrD,MAAM,CAAC,OAAO,UAAU,eAAe,sBAoJtC"}
|
|
@@ -26,11 +26,10 @@ export default function IdeaInformation() {
|
|
|
26
26
|
const { globalMetadataState: { allCaseTypes, allCaseSeverities, caseLanguages, loggedInUser, loggedInUserJwtToken, loggedInUsersAccount, loggedInUserRights, }, } = useContext(GlobalMetadataStateContext);
|
|
27
27
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
28
28
|
const apolloClient = useApolloClient();
|
|
29
|
-
const { contactSSOName, selectedAccountDetails, ownersCaseGroups
|
|
29
|
+
const { contactSSOName, selectedAccountDetails, ownersCaseGroups } = useCaseSelector((state) => ({
|
|
30
30
|
contactSSOName: state.caseDetails.contactSSOName,
|
|
31
31
|
ownersCaseGroups: state.ownersCaseGroups,
|
|
32
32
|
selectedAccountDetails: state.selectedAccountDetails,
|
|
33
|
-
hasInvalidEntitlements: state.hasInvalidEntitlements,
|
|
34
33
|
}), isEqual);
|
|
35
34
|
const caseDispatch = useCaseDispatch();
|
|
36
35
|
const isMetadataLoading = () => {
|
|
@@ -83,13 +82,13 @@ export default function IdeaInformation() {
|
|
|
83
82
|
' ',
|
|
84
83
|
React.createElement("a", { href: "/support/contact/customerService" }, "Customer Service"),
|
|
85
84
|
" for assistance.")),
|
|
86
|
-
React.createElement(AlertMessage, { show:
|
|
85
|
+
React.createElement(AlertMessage, { show: !loggedInUserRights.data.isEntitled(), variant: AlertType.DANGER, className: "pf-v6-u-mb-md", isInline: true },
|
|
87
86
|
React.createElement(Trans, { i18nKey: "i18ValidEntitlementContactCustomerService" },
|
|
88
87
|
"You need a valid entitlement to create a case.\u00A0 Please contact",
|
|
89
88
|
' ',
|
|
90
89
|
React.createElement("a", { href: "/support/contact/customerService" }, "Customer Service"),
|
|
91
90
|
" for assistance.")),
|
|
92
|
-
|
|
91
|
+
loggedInUserRights.data.isEntitled() &&
|
|
93
92
|
!isMetadataLoading() &&
|
|
94
93
|
!isMetadataLoadingError() &&
|
|
95
94
|
loggedInUserRights.data.canManageCases() && (React.createElement(React.Fragment, null,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useContext } from 'react';
|
|
2
2
|
import { Trans } from 'react-i18next';
|
|
3
3
|
import FileLister from './FileLister';
|
|
4
|
-
import { isUploadingAttachment } from './reducer/AttachmentHelper';
|
|
4
|
+
import { hasSomeSelectedFiles, isUploadingAttachment } from './reducer/AttachmentHelper';
|
|
5
5
|
import { AttachmentStateContext } from './reducer/AttachmentReducerContext';
|
|
6
6
|
import { FileUploadButton } from './UploadButton';
|
|
7
7
|
import { useFileUploader } from './useFileUploader';
|
|
@@ -14,12 +14,11 @@ const defaultProps = {
|
|
|
14
14
|
showDescriptionInfoMsg: false,
|
|
15
15
|
};
|
|
16
16
|
function FileUpload(props) {
|
|
17
|
-
var _a, _b, _c;
|
|
18
17
|
// Attachment Reducer Related
|
|
19
18
|
const { attachmentState } = useContext(AttachmentStateContext);
|
|
20
19
|
const { editFile, removeFile, retryUpload, uploadAll, retryAnalysis } = useFileUploader(props);
|
|
21
20
|
return (React.createElement("section", { className: `${props.className}`, id: `${props.id}` },
|
|
22
|
-
(
|
|
21
|
+
hasSomeSelectedFiles(attachmentState.caseFiles.selectedLocalFiles) && (React.createElement(React.Fragment, null,
|
|
23
22
|
!props.isSessionId ? (React.createElement("h4", null,
|
|
24
23
|
React.createElement(Trans, null, "Uploading attachment(s)"))) : null,
|
|
25
24
|
React.createElement(FileLister, { onRetryAnalysis: retryAnalysis, selectedLocalFiles: attachmentState.caseFiles.selectedLocalFiles, onFileEdit: editFile, onFileRemove: removeFile, onRetry: retryUpload, isSessionId: props.isSessionId, showSlowUploadMsg: attachmentState.showUploadingOnSlowConnectionMsg }))),
|
|
@@ -34,6 +34,7 @@ export declare const hasSomeUnUploadedAttachments: (selectedLocalFiles: IFileLoc
|
|
|
34
34
|
export declare const hasQueuedAttachmentUploads: (selectedLocalFiles: IFileLocal[]) => boolean;
|
|
35
35
|
/** Aborted/failed rows should stay in the upload panel until the user clicks Remove. */
|
|
36
36
|
export declare const hasAbortedOrFailedAttachments: (selectedLocalFiles: IFileLocal[]) => boolean;
|
|
37
|
+
/** True when at least one non-deleted file remains in the upload queue (UI visibility). */
|
|
37
38
|
export declare const hasSomeSelectedFiles: (selectedLocalFiles: IFileLocal[]) => boolean;
|
|
38
39
|
export declare const isUploadingAttachment: (selectedLocalFiles: IFileLocal[]) => boolean;
|
|
39
40
|
export declare const isAnalysingAnyAttachment: (selectedLocalFiles: IFileLocal[]) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/shared/fileUpload/reducer/AttachmentHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EACH,iBAAiB,
|
|
1
|
+
{"version":3,"file":"AttachmentHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/shared/fileUpload/reducer/AttachmentHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { Config, pcm, sessionAttachments } from '@cee-eng/hydrajs';
|
|
11
11
|
import { ToastNotification } from '@rh-support/components';
|
|
12
|
-
import { fetchCaseDetailsByCaseNumber, GET_CONTENT_DOCUMENT_IDS, getText, MultipartUploadError, pendoTrackEvent, pollAttachmentUploadStatus, pollContentVersionStatus, uploadCaseAttachment, } from '@rh-support/utils';
|
|
12
|
+
import { CaseAttachmentUploadError, fetchCaseDetailsByCaseNumber, GET_CONTENT_DOCUMENT_IDS, getText, MultipartUploadError, pendoTrackEvent, pollAttachmentUploadStatus, pollContentVersionStatus, uploadCaseAttachment, } from '@rh-support/utils';
|
|
13
13
|
import find from 'lodash/find';
|
|
14
14
|
import forEach from 'lodash/forEach';
|
|
15
15
|
import includes from 'lodash/includes';
|
|
@@ -98,7 +98,8 @@ export const hasQueuedAttachmentUploads = (selectedLocalFiles) => !isEmpty(find(
|
|
|
98
98
|
/** Aborted/failed rows should stay in the upload panel until the user clicks Remove. */
|
|
99
99
|
export const hasAbortedOrFailedAttachments = (selectedLocalFiles) => !isEmpty(find(selectedLocalFiles, (localFile) => isUploadAborted(localFile.uploadProgress.uploadStatus) ||
|
|
100
100
|
isUploadFailed(localFile.uploadProgress.uploadStatus)));
|
|
101
|
-
|
|
101
|
+
/** True when at least one non-deleted file remains in the upload queue (UI visibility). */
|
|
102
|
+
export const hasSomeSelectedFiles = (selectedLocalFiles) => !isEmpty(find(selectedLocalFiles, (localFile) => !isFileDeleted(localFile.uploadProgress.uploadStatus)));
|
|
102
103
|
export const isUploadingAttachment = (selectedLocalFiles) => !isEmpty(find(selectedLocalFiles, (localFile) => isUploading(localFile.uploadProgress.uploadStatus)));
|
|
103
104
|
export const isAnalysingAnyAttachment = (selectedLocalFiles) => !isEmpty(find(selectedLocalFiles, (localFile) => isAnalysingFile(localFile.analysisMetadata.analysisStatus)));
|
|
104
105
|
export const canShowProgressBar = (file) => isUploading(file.uploadProgress.uploadStatus) || isAnalysingFile(file.analysisMetadata.analysisStatus);
|
|
@@ -106,6 +107,7 @@ export const shouldHideDescription = (file, isSessionUpload) => !file.uploadabil
|
|
|
106
107
|
isUploading(file.uploadProgress.uploadStatus) ||
|
|
107
108
|
(!isSessionUpload &&
|
|
108
109
|
(isUploadAborted(file.uploadProgress.uploadStatus) ||
|
|
110
|
+
isUploadFailed(file.uploadProgress.uploadStatus) ||
|
|
109
111
|
(file.uploadability.ableToUpload &&
|
|
110
112
|
file.uploadProgress.percentUploaded > 0 &&
|
|
111
113
|
(file.description || '').length === 0) ||
|
|
@@ -153,6 +155,7 @@ needsAnalyzing = false, isSessionId = false, slowUploadConfig = {}, apolloClient
|
|
|
153
155
|
export const uploadFile = (_a) => __awaiter(void 0, [_a], void 0, function* ({ dispatch, idToUploadTo, localFile, originalFile, index,
|
|
154
156
|
// isSecureSupport = false, // TODO: Re-enable when Hydra/GraphQL attachment APIs support secure support again
|
|
155
157
|
needsAnalyzing = false, isSessionId = false, slowUploadConfig = {}, apolloClient, caseSalesforceId, onCaseFileUploaded, }) {
|
|
158
|
+
var _b;
|
|
156
159
|
if (!localFile.uploadability.ableToUpload) {
|
|
157
160
|
return;
|
|
158
161
|
}
|
|
@@ -169,6 +172,8 @@ needsAnalyzing = false, isSessionId = false, slowUploadConfig = {}, apolloClient
|
|
|
169
172
|
Metadata: Object.assign(Object.assign(Object.assign(Object.assign({}, (localFile.description && { 'x-amz-meta-description': localFile.description })), (localFile.name && { 'x-amz-meta-fileName': localFile.name })), (localFile.size && { 'x-amz-meta-byteLength': localFile.size.toString() })), (localFile.type && { 'x-amz-meta-content-type': localFile.type })),
|
|
170
173
|
};
|
|
171
174
|
let triggerTrackSlowUpload = true;
|
|
175
|
+
// Hoisted so catch can treat S3 403-after-abort as user cancel, not a hard failure.
|
|
176
|
+
let userAborted = false;
|
|
172
177
|
try {
|
|
173
178
|
const listener = (progress, abort, isUploadingWithSlowConfig) => {
|
|
174
179
|
if (isUploadingWithSlowConfig && triggerTrackSlowUpload) {
|
|
@@ -224,7 +229,6 @@ needsAnalyzing = false, isSessionId = false, slowUploadConfig = {}, apolloClient
|
|
|
224
229
|
else {
|
|
225
230
|
// Mirror master Hydra listener behavior for circular progress + abort button.
|
|
226
231
|
let abortUpload;
|
|
227
|
-
let userAborted = false;
|
|
228
232
|
const onAbort = (abortedFileIndex) => {
|
|
229
233
|
userAborted = true;
|
|
230
234
|
const abortPayload = {
|
|
@@ -309,11 +313,16 @@ needsAnalyzing = false, isSessionId = false, slowUploadConfig = {}, apolloClient
|
|
|
309
313
|
}
|
|
310
314
|
}
|
|
311
315
|
catch (error) {
|
|
312
|
-
|
|
316
|
+
const isUserAbort = userAborted || (error === null || error === void 0 ? void 0 : error.message) === 'Request aborted by user';
|
|
317
|
+
const attachmentIdFromError = (error instanceof MultipartUploadError && ((_b = error.resumeData) === null || _b === void 0 ? void 0 : _b.attachmentId)) ||
|
|
318
|
+
(error instanceof CaseAttachmentUploadError && error.attachmentId) ||
|
|
319
|
+
undefined;
|
|
320
|
+
if (attachmentIdFromError) {
|
|
321
|
+
updateAttachmentIdForFile(dispatch, attachmentIdFromError, index);
|
|
322
|
+
}
|
|
323
|
+
if (isUserAbort) {
|
|
313
324
|
const resumeState = error instanceof MultipartUploadError ? error.resumeData : undefined;
|
|
314
|
-
|
|
315
|
-
updateUploadMetadata(dispatch, index, { multipartResumeState: resumeState });
|
|
316
|
-
}
|
|
325
|
+
updateUploadMetadata(dispatch, index, Object.assign({ uploadStatus: UploadStatusConstants.aborted, uploadErrorMessage: '', onAbort: undefined, percentUploaded: 0 }, (resumeState && resumeState.completedParts.length > 0 ? { multipartResumeState: resumeState } : {})));
|
|
317
326
|
}
|
|
318
327
|
else {
|
|
319
328
|
console.error(error);
|
|
@@ -328,7 +337,6 @@ needsAnalyzing = false, isSessionId = false, slowUploadConfig = {}, apolloClient
|
|
|
328
337
|
if (!uploadErrorPayload.multipartResumeState) {
|
|
329
338
|
uploadErrorPayload.percentUploaded = 0;
|
|
330
339
|
}
|
|
331
|
-
updateAttachmentIdForFile(dispatch, null, index);
|
|
332
340
|
updateUploadMetadata(dispatch, index, uploadErrorPayload);
|
|
333
341
|
}
|
|
334
342
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFileUploader.d.ts","sourceRoot":"","sources":["../../../../../src/components/shared/fileUpload/useFileUploader.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA8D,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useFileUploader.d.ts","sourceRoot":"","sources":["../../../../../src/components/shared/fileUpload/useFileUploader.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA8D,MAAM,OAAO,CAAC;AAgBnF,OAAO,EACH,UAAU,EAKb,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,wBAAwB;gCA8EjB,MAAM;gCAYA,UAAU,mBAAmB,MAAM,WAAW,UAAU;oCAOpD,MAAM,QAAQ,UAAU;wBA4DzC,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC;4BA+B3C,MAAM;kCAzGN,MAAM;EAmIhD"}
|
|
@@ -18,8 +18,8 @@ import { SessionRestoreDispatchContext, SessionRestoreStateContext } from '../..
|
|
|
18
18
|
import { SESSION_REFERRER_URL_LIMIT } from '../../../reducers/CaseConstNTypes';
|
|
19
19
|
import { getSessionDetailsFromCase } from '../../../reducers/CaseHelpers';
|
|
20
20
|
import { createSession } from '../../../reducers/SessionRestoreReducer';
|
|
21
|
-
import { doSosReportAnalysisForFile, isAnalysingAnyAttachment, isUploadedSuccessfully, isUploadingAttachment, updateUploadMetadata, uploadAllFiles, uploadFile, } from './reducer/AttachmentHelper';
|
|
22
|
-
import { onFileEdit, onFileRemove, UploadStatusConstants } from './reducer/AttachmentReducer';
|
|
21
|
+
import { doSosReportAnalysisForFile, hasSomeSelectedFiles, isAnalysingAnyAttachment, isUploadedSuccessfully, isUploadingAttachment, updateUploadMetadata, uploadAllFiles, uploadFile, } from './reducer/AttachmentHelper';
|
|
22
|
+
import { onFileEdit, onFileRemove, resetAttachment, UploadStatusConstants, } from './reducer/AttachmentReducer';
|
|
23
23
|
import { AttachmentDispatchContext, AttachmentStateContext } from './reducer/AttachmentReducerContext';
|
|
24
24
|
export function useFileUploader(props) {
|
|
25
25
|
const { attachmentState, attachmentState: { caseFiles }, } = useContext(AttachmentStateContext);
|
|
@@ -83,23 +83,41 @@ export function useFileUploader(props) {
|
|
|
83
83
|
debounceSessionMetadataUpdate(editedLocalFile, changes);
|
|
84
84
|
});
|
|
85
85
|
const onFileRemoveLocal = (fileIndexToRemove, file) => __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
var _a, _b;
|
|
86
|
+
var _a, _b, _c;
|
|
87
87
|
// Stop in-flight S3 transfer if Remove is used while upload/verify is still active
|
|
88
88
|
(_b = (_a = file.uploadProgress).onAbort) === null || _b === void 0 ? void 0 : _b.call(_a, fileIndexToRemove);
|
|
89
|
+
const attachmentIdToDelete = file.attachmentId || ((_c = file.uploadProgress.multipartResumeState) === null || _c === void 0 ? void 0 : _c.attachmentId);
|
|
89
90
|
const selectedLocalFiles = attachmentState.caseFiles.selectedLocalFiles;
|
|
90
|
-
|
|
91
|
+
const isBusy = isUploadingAttachment(selectedLocalFiles) || isAnalysingAnyAttachment(selectedLocalFiles);
|
|
92
|
+
let nextLocalFiles;
|
|
93
|
+
if (!isBusy) {
|
|
91
94
|
onFileRemove(dispatch, fileIndexToRemove);
|
|
95
|
+
nextLocalFiles = selectedLocalFiles.filter((_, index) => index !== fileIndexToRemove);
|
|
92
96
|
}
|
|
93
97
|
else {
|
|
94
98
|
updateUploadMetadata(dispatch, fileIndexToRemove, {
|
|
95
99
|
uploadStatus: UploadStatusConstants.deleted,
|
|
96
100
|
onAbort: undefined,
|
|
97
101
|
});
|
|
102
|
+
nextLocalFiles = selectedLocalFiles.map((localFile, index) => index === fileIndexToRemove
|
|
103
|
+
? Object.assign(Object.assign({}, localFile), { uploadProgress: Object.assign(Object.assign({}, localFile.uploadProgress), { uploadStatus: UploadStatusConstants.deleted, onAbort: undefined }) }) : localFile);
|
|
104
|
+
}
|
|
105
|
+
// Drop soft-deleted stubs so "Uploading attachment(s)" / Upload new file do not linger
|
|
106
|
+
if (!hasSomeSelectedFiles(nextLocalFiles)) {
|
|
107
|
+
resetAttachment(dispatch);
|
|
108
|
+
}
|
|
109
|
+
if (attachmentIdToDelete && isSessionId && isUploadedSuccessfully(file)) {
|
|
110
|
+
deleteSessionAttachment(idToUploadTo, attachmentIdToDelete);
|
|
111
|
+
}
|
|
112
|
+
// Abort/fail after Hydra init still has an attachmentId — clean up SFDC "In Progress" on Remove only
|
|
113
|
+
if (attachmentIdToDelete && !isSessionId) {
|
|
114
|
+
try {
|
|
115
|
+
yield deleteCaseAttachmentRequest(idToUploadTo, attachmentIdToDelete);
|
|
116
|
+
}
|
|
117
|
+
catch (_d) {
|
|
118
|
+
// Best-effort: row is already removed from the PCM queue
|
|
119
|
+
}
|
|
98
120
|
}
|
|
99
|
-
isUploadedSuccessfully(file) && isSessionId && deleteSessionAttachment(idToUploadTo, file.attachmentId);
|
|
100
|
-
// TODO: Re-enable when delete API accepts isSecureSupport again
|
|
101
|
-
// isUploadedSuccessfully(file) && !isSessionId && deleteCaseAttachment(idToUploadTo, file.attachmentId, isSecureSupport);
|
|
102
|
-
isUploadedSuccessfully(file) && !isSessionId && deleteCaseAttachmentRequest(idToUploadTo, file.attachmentId);
|
|
103
121
|
});
|
|
104
122
|
const resolveCaseSalesforceId = () => __awaiter(this, void 0, void 0, function* () {
|
|
105
123
|
if (caseSalesforceIdRef.current || isSessionId || !idToUploadTo || !apolloClient) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsSectionValid.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/useIsSectionValid.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useIsSectionValid.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/useIsSectionValid.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAuBrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAKnE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB;;;;;EAoP9D"}
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
// import { contacts } from '@cee-eng/hydrajs';
|
|
2
1
|
import { GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
3
|
-
// import find from 'lodash/find';
|
|
4
2
|
import isEmpty from 'lodash/isEmpty';
|
|
5
3
|
import isEqual from 'lodash/isEqual';
|
|
6
|
-
import React, { useContext } from 'react';
|
|
7
|
-
// import React, { useContext, useEffect, useState } from 'react';
|
|
4
|
+
import React, { useContext, useEffect } from 'react';
|
|
8
5
|
import { Trans } from 'react-i18next';
|
|
9
6
|
import { useCaseSelector } from '../../context/CaseContext';
|
|
10
|
-
import { RouteContext } from '../../context/RouteContext';
|
|
11
|
-
// import { RouteContext, useRouteDispatchContext } from '../../context/RouteContext';
|
|
7
|
+
import { RouteContext, useRouteDispatchContext } from '../../context/RouteContext';
|
|
12
8
|
import { TCStateContext } from '../../context/TopContentContext';
|
|
13
9
|
import { useAB } from '../../hooks/useAB';
|
|
14
10
|
import { CASE_DEATILS_ENVIRONMENT_LIMIT, CASE_REFERENCE_NUMBER_LIMIT, CONTACT_INFO_24X7_LIMIT, HOSTNAME_LENGTH_LIMIT, ISSUE_SUMMARY_LENGTH_LIMIT, KTQUESTION_MAX_LIMIT, TITLE_SUMMARY_LENGTH_LIMIT, } from '../../reducers/CaseConstNTypes';
|
|
15
11
|
import { isCaseInformationSectionValid, isCaseManagementStateValid, isCaseStateValid, isClusterIDValid, isIdeaCaseStateValid, } from '../../reducers/CaseHelpers';
|
|
16
12
|
import { AppRouteSections } from '../../reducers/RouteConstNTypes';
|
|
13
|
+
import { setNoValidEntitlement } from '../../reducers/RouteReducer';
|
|
17
14
|
import { AttachmentStateContext } from './fileUpload/reducer/AttachmentReducerContext';
|
|
18
15
|
export function useIsSectionValid(sectionName) {
|
|
19
16
|
const { isVariationA } = useAB();
|
|
@@ -36,34 +33,15 @@ export function useIsSectionValid(sectionName) {
|
|
|
36
33
|
// ssoUsername: state.selectedOwner.data.ssoUsername,
|
|
37
34
|
manageSupportCases: state.selectedOwner.data.manageSupportCases,
|
|
38
35
|
}), isEqual);
|
|
39
|
-
|
|
40
|
-
// const [isEntitlement, setIsEntitlement] = useState<boolean | null>(null);
|
|
41
|
-
// useEffect(() => {
|
|
42
|
-
// const fetchContactDetails = async () => {
|
|
43
|
-
// if (ssoUsername) {
|
|
44
|
-
// try {
|
|
45
|
-
// const response = await contacts.getSFDCContactBySso(ssoUsername);
|
|
46
|
-
// setIsEntitlement(response?.isEntitled ?? null);
|
|
47
|
-
// setNoValidEntitlement(routeDispatch, !response?.isEntitled);
|
|
48
|
-
// } catch (error) {
|
|
49
|
-
// console.error('Error fetching contact details:', error);
|
|
50
|
-
// setIsEntitlement(null);
|
|
51
|
-
// setNoValidEntitlement(routeDispatch, null);
|
|
52
|
-
// }
|
|
53
|
-
// }
|
|
54
|
-
// };
|
|
55
|
-
// fetchContactDetails();
|
|
56
|
-
// }, [ssoUsername, routeDispatch]);
|
|
57
|
-
// Contact-level entitlement hardcoded to true — now resolved from SFDCProductJSON__c
|
|
58
|
-
const isEntitlement = true;
|
|
36
|
+
const routeDispatch = useRouteDispatchContext();
|
|
59
37
|
const { routeState: { isCaseCreate }, } = useContext(RouteContext);
|
|
60
38
|
const { globalMetadataState: { allProducts, loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
|
|
39
|
+
// Global entitlement from subscription GraphQL → loggedInUser.isEntitled → UserAuth.isEntitled()
|
|
40
|
+
const isEntitlement = loggedInUserRights.data.isEntitled();
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
setNoValidEntitlement(routeDispatch, !isEntitlement);
|
|
43
|
+
}, [isEntitlement, routeDispatch]);
|
|
61
44
|
const { topContentState: { topContent }, } = useContext(TCStateContext);
|
|
62
|
-
// isEntitledProduct — commented out; product-level entitlement now resolved from SFDCProductJSON__c
|
|
63
|
-
// const isEntitledProduct = find(
|
|
64
|
-
// allProducts?.data?.productsResult,
|
|
65
|
-
// (p) => p.product === caseState.caseDetails.product
|
|
66
|
-
// )?.isEntitledProduct;
|
|
67
45
|
const { routeState: { activeSection }, } = useContext(RouteContext);
|
|
68
46
|
const { attachmentState } = useContext(AttachmentStateContext);
|
|
69
47
|
const selectedLocalFiles = attachmentState.caseFiles.selectedLocalFiles;
|
|
@@ -143,7 +121,7 @@ export function useIsSectionValid(sectionName) {
|
|
|
143
121
|
const isAdditionalInformationSectionValidLocal = () => {
|
|
144
122
|
var _a;
|
|
145
123
|
const hostnameIsValid = hostname ? (hostname === null || hostname === void 0 ? void 0 : hostname.length) <= HOSTNAME_LENGTH_LIMIT : true;
|
|
146
|
-
return (
|
|
124
|
+
return (isEntitlement &&
|
|
147
125
|
isClusterIDValid(caseState, (_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) &&
|
|
148
126
|
isCaseInformationSectionValid(caseState, loggedInUserRights) &&
|
|
149
127
|
hostnameIsValid &&
|
|
@@ -179,7 +157,7 @@ export function useIsSectionValid(sectionName) {
|
|
|
179
157
|
// isEntitledProduct check removed — product-level entitlement now resolved from SFDCProductJSON__c
|
|
180
158
|
return '';
|
|
181
159
|
};
|
|
182
|
-
const
|
|
160
|
+
const getEntitlementSectionError = () => {
|
|
183
161
|
if (manageSupportCases === false) {
|
|
184
162
|
return (React.createElement(Trans, { i18nKey: "i18ManageCaseContactCustomerService" },
|
|
185
163
|
"You need additional access to manage cases.\u00A0 Please contact",
|
|
@@ -187,14 +165,13 @@ export function useIsSectionValid(sectionName) {
|
|
|
187
165
|
React.createElement("a", { href: "/support/contact/customerService" }, "Customer Service"),
|
|
188
166
|
" for assistance."));
|
|
189
167
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
// }
|
|
168
|
+
if (isEntitlement === false) {
|
|
169
|
+
return (React.createElement(Trans, { i18nKey: "i18ValidEntitlementContactCustomerService" },
|
|
170
|
+
"You need a valid entitlement to create a case.\u00A0 Please contact",
|
|
171
|
+
' ',
|
|
172
|
+
React.createElement("a", { href: "/support/contact/customerService" }, "Customer Service"),
|
|
173
|
+
" for assistance."));
|
|
174
|
+
}
|
|
198
175
|
return '';
|
|
199
176
|
};
|
|
200
177
|
const activeSectionError = (sectionNameLocal) => {
|
|
@@ -204,7 +181,9 @@ export function useIsSectionValid(sectionName) {
|
|
|
204
181
|
case AppRouteSections.RESOURCES:
|
|
205
182
|
return recommendationSectionError();
|
|
206
183
|
case AppRouteSections.GET_SUPPORT:
|
|
207
|
-
|
|
184
|
+
case AppRouteSections.SUMMARIZE:
|
|
185
|
+
case AppRouteSections.TROUBLESHOOT:
|
|
186
|
+
return getEntitlementSectionError();
|
|
208
187
|
default:
|
|
209
188
|
return '';
|
|
210
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalTroubleshootEffects.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/GlobalTroubleshootEffects.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GlobalTroubleshootEffects.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/GlobalTroubleshootEffects.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAkD,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAgBvD,OAAO,EAAuC,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAYvG,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,qBAidtD"}
|
|
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { useApolloClient } from '@apollo/client/react';
|
|
11
11
|
import { useDebounce } from '@rh-support/components';
|
|
12
12
|
import { GlobalMetadataStateContext, useUserPreferences } from '@rh-support/react-context';
|
|
13
|
-
import { ability, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
14
13
|
import { GET_ACCOUNT_CONTACTS, resolveProductServiceLevelsForAccount, } from '@rh-support/utils';
|
|
15
14
|
import findIndex from 'lodash/findIndex';
|
|
16
15
|
import includes from 'lodash/includes';
|
|
@@ -69,7 +68,6 @@ export function GlobalTroubleshootEffects(props) {
|
|
|
69
68
|
const isFirstMountProduct = useRef(true);
|
|
70
69
|
const { getPreferredLanguage } = useUserPreferences();
|
|
71
70
|
const rulesDispatch = useContext(RulesDispatchContext);
|
|
72
|
-
const canAddAttachments = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.ATTACHMENTS);
|
|
73
71
|
// top content state
|
|
74
72
|
const { topContentState: { topContentPayload }, } = useContext(TCStateContext);
|
|
75
73
|
const tcDispatch = useContext(TCDispatchContext);
|
|
@@ -338,7 +336,7 @@ export function GlobalTroubleshootEffects(props) {
|
|
|
338
336
|
session_id: activeSessionId,
|
|
339
337
|
}, accountType: {
|
|
340
338
|
isSecure: selectedAccountDetails.data.securedEnvironment || false,
|
|
341
|
-
},
|
|
339
|
+
}, fields: ['title', 'cta', 'description', 'rule_type', 'rule_sub_type', 'rule_id'] }, ((selectedLocalFiles === null || selectedLocalFiles === void 0 ? void 0 : selectedLocalFiles.length) && {
|
|
342
340
|
attachment: selectedLocalFiles.map((file) => ({
|
|
343
341
|
uuid: file.attachmentId,
|
|
344
342
|
fileName: file.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WizardAside.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardAside.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAGH,eAAe,EAIlB,MAAM,iCAAiC,CAAC;AAWzC,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,2BAA2B,EAAE,OAAO,CAAC;CACxC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"WizardAside.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardAside.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAGH,eAAe,EAIlB,MAAM,iCAAiC,CAAC;AAWzC,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,2BAA2B,EAAE,OAAO,CAAC;CACxC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,qBA0EjC;kBA1EQ,WAAW;;;AA4EpB,eAAe,WAAW,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
2
|
-
import { ability,
|
|
2
|
+
import { ability, resourceActions, resources } from '@rh-support/user-permissions';
|
|
3
3
|
import { PreviousCaseTypes } from '@rh-support/utils';
|
|
4
4
|
import isEmpty from 'lodash/isEmpty';
|
|
5
5
|
import isEqual from 'lodash/isEqual';
|
|
@@ -27,7 +27,6 @@ function WizardAside(props) {
|
|
|
27
27
|
const { routeState: { activeSection, isCaseCreate }, } = useContext(RouteContext);
|
|
28
28
|
const { topContentState: { topContent }, } = useContext(TCStateContext);
|
|
29
29
|
const { globalMetadataState: { loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
|
|
30
|
-
const canAddAttachments = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.ATTACHMENTS);
|
|
31
30
|
const { isCreatingCase, caseType, isCveModalOpened, version, product } = useCaseSelector((state) => ({
|
|
32
31
|
isCreatingCase: state.isCreatingCase,
|
|
33
32
|
caseType: state.caseDetails.caseType,
|
|
@@ -39,8 +38,7 @@ function WizardAside(props) {
|
|
|
39
38
|
const canUseSessionManagement = ability.can(resourceActions.CREATE, resources.SESSION_TRACKING);
|
|
40
39
|
const isSecureSupportOrCSS = loggedInUsersAccount.data.hasConfirmedStatesideSupport || loggedInUsersAccount.data.secureSupport;
|
|
41
40
|
const isOpenShiftProduct = (_a = product === null || product === void 0 ? void 0 : product.toLowerCase().includes('openshift')) !== null && _a !== void 0 ? _a : false;
|
|
42
|
-
const canShowFileUploadWidget = () =>
|
|
43
|
-
!props.isAttachmentUploadModalOpen &&
|
|
41
|
+
const canShowFileUploadWidget = () => !props.isAttachmentUploadModalOpen &&
|
|
44
42
|
!isUndefined(activeSection) &&
|
|
45
43
|
!hideFileUploadSidebarWidgetSections.includes(activeSection);
|
|
46
44
|
const canShowEARuleWidget = activeSection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WizardLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WizardLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardLayout.tsx"],"names":[],"mappings":"AASA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAAuC,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAevG,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,qBA4NzC"}
|
|
@@ -11,7 +11,6 @@ import { useApolloClient } from '@apollo/client/react';
|
|
|
11
11
|
import { Grid, GridItem } from '@patternfly/react-core';
|
|
12
12
|
import { SupportFeedbackForm } from '@rh-support/components';
|
|
13
13
|
import { fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
14
|
-
import { ability, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
15
14
|
import { getVersionIfOnlyVersion, pendoTrackEvent, PreviousCaseTypes } from '@rh-support/utils';
|
|
16
15
|
import findIndex from 'lodash/findIndex';
|
|
17
16
|
import isEmpty from 'lodash/isEmpty';
|
|
@@ -76,7 +75,6 @@ export function WizardLayout(props) {
|
|
|
76
75
|
clearTimeout(entitlementTimerRef.current);
|
|
77
76
|
};
|
|
78
77
|
}, [isProductNotEntitled, product, isAccountLoaded, entitlementWarningDismissedForProduct]);
|
|
79
|
-
const canAddAttachments = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.ATTACHMENTS);
|
|
80
78
|
const { attachmentState } = useContext(AttachmentStateContext);
|
|
81
79
|
const isAnyFileAttachedLocal = isAnyFileAttached(attachmentState.caseFiles.selectedLocalFiles);
|
|
82
80
|
const [confirmationModalType, setConfirmationModalType] = useState(null);
|
|
@@ -102,8 +100,7 @@ export function WizardLayout(props) {
|
|
|
102
100
|
viewedConfirmationModalsList.current.push(PreCaseConfirmationModalsEnum.ROCM_MODAL);
|
|
103
101
|
isModalPresent = true;
|
|
104
102
|
}
|
|
105
|
-
else if (
|
|
106
|
-
!isAnyFileAttachedLocal &&
|
|
103
|
+
else if (!isAnyFileAttachedLocal &&
|
|
107
104
|
!viewedConfirmationModalsList.current.includes(PreCaseConfirmationModalsEnum.NO_ATTACHMENT_MODAL)) {
|
|
108
105
|
setConfirmationModalType(PreCaseConfirmationModalsEnum.NO_ATTACHMENT_MODAL);
|
|
109
106
|
viewedConfirmationModalsList.current.push(PreCaseConfirmationModalsEnum.NO_ATTACHMENT_MODAL);
|
package/lib/esm/css/case.css
CHANGED
|
@@ -240,7 +240,13 @@ button,
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
.comment-body .attachment-download-btn {
|
|
243
|
+
--pf-v6-c-button--m-link--m-inline--TextDecorationLine: none;
|
|
244
|
+
--pf-v6-c-button--m-link--m-inline--hover--TextDecorationLine: none;
|
|
245
|
+
--pf-v6-c-button--TextDecorationLine: none;
|
|
246
|
+
--pf-v6-c-button--hover--TextDecorationLine: none;
|
|
243
247
|
padding: 0px 3px;
|
|
248
|
+
white-space: nowrap;
|
|
249
|
+
text-decoration: none;
|
|
244
250
|
}
|
|
245
251
|
|
|
246
252
|
.downshift input[disabled] + label {
|
|
@@ -64,7 +64,9 @@ export declare const updateCaseDetailsGraphQL: (dispatch: CaseReducerDispatchTyp
|
|
|
64
64
|
mutate: (options: any) => Promise<any>;
|
|
65
65
|
}, caseNumber: string, caseUpdate: Partial<IGraphQLCaseUpdateInput>, dontSetDetails?: boolean, options?: UpdateCaseDetailsGraphQLOptions) => Promise<void>;
|
|
66
66
|
export declare const getNotificationContacts4InternalUser: (dispatch: CaseReducerDispatchType, users: INotifiedUser[], caseOwnerSSO: string) => Promise<void>;
|
|
67
|
-
export declare const getNotificationContacts4ExternalUser: (dispatch: CaseReducerDispatchType, users: any, loggedInUserRights: any, accountNumber: any, caseOwnerSSO: string, fullNameCustom: string
|
|
67
|
+
export declare const getNotificationContacts4ExternalUser: (dispatch: CaseReducerDispatchType, users: any, loggedInUserRights: any, accountNumber: any, caseOwnerSSO: string, fullNameCustom: string, apolloClient?: {
|
|
68
|
+
query: (options: any) => Promise<any>;
|
|
69
|
+
}) => Promise<void>;
|
|
68
70
|
export declare const checkForCaseStatusToggleOnAttachOrComment: (dispatch: CaseReducerDispatchType, isInternal: boolean, currentStatus: string) => void;
|
|
69
71
|
export declare const setSelectedCaseGroupUsers: (dispatch: CaseReducerDispatchType, accountNumber: string, groupNumber: string, loggedInUserRights: UserAuth) => Promise<void>;
|
|
70
72
|
export declare function getCustomNotificationEmails(dispatch: CaseReducerDispatchType, caseNumber: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseReducer.d.ts","sourceRoot":"","sources":["../../../src/reducers/CaseReducer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAEtH,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAA+B,MAAM,qCAAqC,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"CaseReducer.d.ts","sourceRoot":"","sources":["../../../src/reducers/CaseReducer.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
18
18
|
}
|
|
19
19
|
return t;
|
|
20
20
|
};
|
|
21
|
-
import {
|
|
21
|
+
import { contacts, kase, pcm, publicApi } from '@cee-eng/hydrajs';
|
|
22
22
|
import { formattedApiErrorMessage } from '@rh-support/components';
|
|
23
|
-
import { CREATE_SUPPORT_CASE, dtmTrackEventCaseCreationStepEncountered, fetchCaseDetailsByCaseNumber, GET_ACCOUNT, GET_CASE_GROUP, GET_PRODUCTS, getAccountQueryVariables, getApiResourceObject, handleGraphQLAccountResponse, handleGraphQLVersionsResponse, mapGraphQLCaseDetailsToCasePayload, PreviousToNewCaseTypeMap, updateCaseDetailsGraphQLRequest, } from '@rh-support/utils';
|
|
23
|
+
import { CREATE_SUPPORT_CASE, dtmTrackEventCaseCreationStepEncountered, fetchCaseDetailsByCaseNumber, fetchLoggedInUserAccountContactsFromGraphQL, GET_ACCOUNT, GET_CASE_GROUP, GET_PRODUCTS, getAccountQueryVariables, getApiResourceObject, handleGraphQLAccountResponse, handleGraphQLVersionsResponse, mapGraphQLCaseDetailsToCasePayload, PreviousToNewCaseTypeMap, updateCaseDetailsGraphQLRequest, } from '@rh-support/utils';
|
|
24
24
|
// import delay from 'lodash/delay';
|
|
25
25
|
import filter from 'lodash/filter';
|
|
26
26
|
import find from 'lodash/find';
|
|
@@ -51,8 +51,10 @@ export const caseReducer = (pState, action) => {
|
|
|
51
51
|
}
|
|
52
52
|
if (((_f = (_e = action.payload) === null || _e === void 0 ? void 0 : _e.caseDetails) === null || _f === void 0 ? void 0 : _f.product) &&
|
|
53
53
|
pState.caseDetails.product !== ((_h = (_g = action.payload) === null || _g === void 0 ? void 0 : _g.caseDetails) === null || _h === void 0 ? void 0 : _h.product)) {
|
|
54
|
-
//
|
|
55
|
-
action.payload.caseDetails
|
|
54
|
+
// Reset SLA on product change unless the caller already provided the new entitlement SLA
|
|
55
|
+
if (!Object.prototype.hasOwnProperty.call(action.payload.caseDetails, 'entitlementSla')) {
|
|
56
|
+
action.payload.caseDetails.entitlementSla = undefined;
|
|
57
|
+
}
|
|
56
58
|
resetEntitlementId = true;
|
|
57
59
|
}
|
|
58
60
|
return Object.assign(Object.assign(Object.assign({}, pState), { hasLargeCaseDescription, caseDetails: Object.assign(Object.assign({}, pState.caseDetails), action.payload.caseDetails), isCaseUpdating: false }), (resetEntitlementId ? { selectedEntitlementId: undefined } : {}));
|
|
@@ -502,7 +504,11 @@ export const setCaseOwner = (dispatch_1, owner_1, product_1, abortSignalCaseGrou
|
|
|
502
504
|
}
|
|
503
505
|
dispatch({
|
|
504
506
|
type: CaseReducerConstants.caseStateChanged,
|
|
505
|
-
payload: {
|
|
507
|
+
payload: {
|
|
508
|
+
selectedOwner: getApiResourceObject(owner),
|
|
509
|
+
// Invert global/user isEntitled (from subscription GraphQL) into case entitlement flag
|
|
510
|
+
hasInvalidEntitlements: owner.isEntitled === false,
|
|
511
|
+
},
|
|
506
512
|
});
|
|
507
513
|
dispatch({
|
|
508
514
|
type: CaseReducerConstants.caseDetailChanged,
|
|
@@ -607,6 +613,7 @@ export const fetchCaseGroupsForContactGraphQL = (dispatch_1, apolloClient_1, con
|
|
|
607
613
|
try {
|
|
608
614
|
const { data } = yield apolloClient.query({
|
|
609
615
|
query: GET_CASE_GROUP,
|
|
616
|
+
variables: { first: 2000 },
|
|
610
617
|
});
|
|
611
618
|
const response = data;
|
|
612
619
|
const allGroups = (_d = (_c = (_b = (_a = response === null || response === void 0 ? void 0 : response.redhat_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.RedHatSupportCaseGroup__c) === null || _c === void 0 ? void 0 : _c.edges) !== null && _d !== void 0 ? _d : [];
|
|
@@ -666,7 +673,7 @@ export const updateCaseWithSession = (dispatch_1, sessionItem_1, loggedInUserAcc
|
|
|
666
673
|
// Set owner and Notified users
|
|
667
674
|
const notifiedUsersExternal = (_b = (_a = sessionDetails.notifiedUsersExternal) === null || _a === void 0 ? void 0 : _a.split(',')) !== null && _b !== void 0 ? _b : [];
|
|
668
675
|
const notifiedUsersInternal = (_d = (_c = sessionDetails.notifiedUsersInternal) === null || _c === void 0 ? void 0 : _c.split(',')) !== null && _d !== void 0 ? _d : [];
|
|
669
|
-
const allRelevantContacts = yield getAllRelevantContacts(loggedInUserContact, caseDetails.accountNumberRef, caseDetails.contactSSOName, notifiedUsersExternal, notifiedUsersInternal);
|
|
676
|
+
const allRelevantContacts = yield getAllRelevantContacts(loggedInUserContact, caseDetails.accountNumberRef, caseDetails.contactSSOName, notifiedUsersExternal, notifiedUsersInternal, apolloClient);
|
|
670
677
|
const owner = find(allRelevantContacts, (c) => c.ssoUsername === caseDetails.contactSSOName);
|
|
671
678
|
const selectedNotificationContacts = getSelectedNotificationContactsFromSession(allRelevantContacts, [
|
|
672
679
|
...notifiedUsersExternal,
|
|
@@ -690,7 +697,7 @@ export const updateCaseWithSession = (dispatch_1, sessionItem_1, loggedInUserAcc
|
|
|
690
697
|
});
|
|
691
698
|
}
|
|
692
699
|
});
|
|
693
|
-
const getAllRelevantContacts = (loggedInUserContact, caseAccountNumber, contactSsoUsername, notifiedUsersExternal, notifiedUsersInternal) => __awaiter(void 0, void 0, void 0, function* () {
|
|
700
|
+
const getAllRelevantContacts = (loggedInUserContact, caseAccountNumber, contactSsoUsername, notifiedUsersExternal, notifiedUsersInternal, apolloClient) => __awaiter(void 0, void 0, void 0, function* () {
|
|
694
701
|
if (loggedInUserContact.isInternal) {
|
|
695
702
|
// Internal users can use the internal API and be done with it
|
|
696
703
|
const userArray = uniq([contactSsoUsername, ...notifiedUsersExternal, ...notifiedUsersInternal]);
|
|
@@ -701,18 +708,12 @@ const getAllRelevantContacts = (loggedInUserContact, caseAccountNumber, contactS
|
|
|
701
708
|
return response.items;
|
|
702
709
|
}
|
|
703
710
|
else {
|
|
704
|
-
const promiseArray = [];
|
|
705
|
-
// Only Org admins have access to there own org accounts
|
|
706
|
-
loggedInUserContact.isOrgAdmin &&
|
|
707
|
-
promiseArray.push(accounts.getAccountContacts(loggedInUserContact.accountNumber));
|
|
708
|
-
// However, all external users (org + non-org) can get list of the managed customer contacts
|
|
709
|
-
// This is specifically relevant for partners accessing their customer cases
|
|
710
|
-
loggedInUserContact.accountNumber !== caseAccountNumber &&
|
|
711
|
-
promiseArray.push(accounts.getAccountContacts(caseAccountNumber));
|
|
712
|
-
const response = yield Promise.all(promiseArray);
|
|
713
711
|
const contactsToReturn = [];
|
|
714
|
-
|
|
715
|
-
|
|
712
|
+
const shouldFetchAccountContacts = loggedInUserContact.isOrgAdmin || loggedInUserContact.accountNumber !== caseAccountNumber;
|
|
713
|
+
if (shouldFetchAccountContacts && apolloClient) {
|
|
714
|
+
const accountContacts = yield fetchLoggedInUserAccountContactsFromGraphQL(apolloClient);
|
|
715
|
+
contactsToReturn.push(...accountContacts);
|
|
716
|
+
}
|
|
716
717
|
contactsToReturn.push(loggedInUserContact);
|
|
717
718
|
return uniqBy(contactsToReturn, 'ssoUsername');
|
|
718
719
|
}
|
|
@@ -860,7 +861,9 @@ export const updateCaseDetailsGraphQL = (dispatch, apolloClient, caseNumber, cas
|
|
|
860
861
|
dispatch({ type: CaseReducerConstants.updateCaseDetailCompleted });
|
|
861
862
|
return;
|
|
862
863
|
}
|
|
863
|
-
|
|
864
|
+
// productId/entitlementId are only used to build the GraphQL mutation patch, not case details UI state
|
|
865
|
+
const { productId: _productId, entitlementId: _entitlementId } = caseUpdate, caseUpdateWithoutIds = __rest(caseUpdate, ["productId", "entitlementId"]);
|
|
866
|
+
let updatedCaseDetails = Object.assign({}, caseUpdateWithoutIds);
|
|
864
867
|
if (graphqlDetails) {
|
|
865
868
|
const mappedGraphQLDetails = mapGraphQLCaseDetailsToCasePayload(graphqlDetails);
|
|
866
869
|
updatedCaseDetails = Object.assign(Object.assign({}, updatedCaseDetails), Object.fromEntries(Object.entries(mappedGraphQLDetails).filter(([, value]) => value !== null && value !== undefined && value !== '')));
|
|
@@ -918,7 +921,7 @@ export const getNotificationContacts4InternalUser = (dispatch, users, caseOwnerS
|
|
|
918
921
|
});
|
|
919
922
|
}
|
|
920
923
|
});
|
|
921
|
-
export const getNotificationContacts4ExternalUser = (dispatch, users, loggedInUserRights, accountNumber, caseOwnerSSO, fullNameCustom) => __awaiter(void 0, void 0, void 0, function* () {
|
|
924
|
+
export const getNotificationContacts4ExternalUser = (dispatch, users, loggedInUserRights, accountNumber, caseOwnerSSO, fullNameCustom, apolloClient) => __awaiter(void 0, void 0, void 0, function* () {
|
|
922
925
|
try {
|
|
923
926
|
const selectedNotificationContacts = [];
|
|
924
927
|
if (loggedInUserRights.isExternalNonOrgAdmin()) {
|
|
@@ -957,24 +960,14 @@ export const getNotificationContacts4ExternalUser = (dispatch, users, loggedInUs
|
|
|
957
960
|
type: CaseReducerConstants.getSelectedAccountDetailsHydra,
|
|
958
961
|
payload: { isFetchingSelectedNotificationContacts: true, hasErrorSelectedNotificationContacts: false },
|
|
959
962
|
});
|
|
960
|
-
const
|
|
961
|
-
|
|
962
|
-
loggedInUserRights.isOrgAdmin() &&
|
|
963
|
-
promiseArray.push(accounts.getAccountContacts(loggedInUserRights.user.accountNumber));
|
|
964
|
-
// However, all external users (org + non-org) can get list of the managed customer contacts
|
|
965
|
-
// This is specifically relevant for partners accessing their customer cases
|
|
966
|
-
loggedInUserRights.isAccountDifferentFromLoggedInAccount(accountNumber) &&
|
|
967
|
-
promiseArray.push(accounts.getAccountContacts(accountNumber));
|
|
968
|
-
dispatch({
|
|
969
|
-
type: CaseReducerConstants.getSelectedAccountDetailsHydra,
|
|
970
|
-
payload: { isFetchingSelectedNotificationContacts: true, hasErrorSelectedNotificationContacts: false },
|
|
971
|
-
});
|
|
972
|
-
const response = yield Promise.all(promiseArray);
|
|
963
|
+
const shouldFetchAccountContacts = loggedInUserRights.isOrgAdmin() ||
|
|
964
|
+
loggedInUserRights.isAccountDifferentFromLoggedInAccount(accountNumber);
|
|
973
965
|
let contactsToReturn = [];
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
966
|
+
if (shouldFetchAccountContacts && apolloClient) {
|
|
967
|
+
contactsToReturn = yield fetchLoggedInUserAccountContactsFromGraphQL(apolloClient);
|
|
968
|
+
contactsToReturn = uniqBy(contactsToReturn, 'ssoUsername').filter((contact) => usersArr.indexOf(contact.ssoUsername) !== -1);
|
|
969
|
+
selectedNotificationContacts.push(...contactsToReturn);
|
|
970
|
+
}
|
|
978
971
|
}
|
|
979
972
|
dispatch({
|
|
980
973
|
type: CaseReducerConstants.getSelectedAccountDetailsHydra,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rh-support/troubleshoot",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.313",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"@progress/kendo-licensing": "1.3.5",
|
|
53
53
|
"@progress/kendo-react-pdf": "^5.16.0",
|
|
54
54
|
"@redux-devtools/extension": "^3.3.0",
|
|
55
|
-
"@rh-support/components": "2.5.
|
|
56
|
-
"@rh-support/react-context": "2.5.
|
|
55
|
+
"@rh-support/components": "2.5.194",
|
|
56
|
+
"@rh-support/react-context": "2.5.288",
|
|
57
57
|
"@rh-support/types": "2.0.26",
|
|
58
|
-
"@rh-support/user-permissions": "2.5.
|
|
59
|
-
"@rh-support/utils": "2.5.
|
|
58
|
+
"@rh-support/user-permissions": "2.5.140",
|
|
59
|
+
"@rh-support/utils": "2.5.122",
|
|
60
60
|
"@types/react-redux": "^7.1.33",
|
|
61
61
|
"@types/redux": "^3.6.0",
|
|
62
62
|
"date-fns": "3.6.0",
|
|
@@ -126,5 +126,5 @@
|
|
|
126
126
|
"defaults and supports es6-module",
|
|
127
127
|
"maintained node versions"
|
|
128
128
|
],
|
|
129
|
-
"gitHead": "
|
|
129
|
+
"gitHead": "6166d112918583d5b9030b1e8cb1e7d2a27bcaa4"
|
|
130
130
|
}
|