@rh-support/troubleshoot 2.7.21 → 2.7.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/components/AccountInfo/OwnerSelector.d.ts.map +1 -1
- package/lib/esm/components/AccountInfo/OwnerSelector.js +6 -4
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +7 -7
- package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.js +8 -4
- package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.js +2 -4
- package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.js +2 -4
- package/lib/esm/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.d.ts +9 -0
- package/lib/esm/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.js +30 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseComments.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseComments.js +8 -4
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.js +2 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.js +7 -7
- package/lib/esm/components/CaseInformation/CaseGroup.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/CaseGroup.js +9 -5
- package/lib/esm/components/CaseInformation/CaseLabels.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/CaseLabels.js +12 -4
- package/lib/esm/components/CaseManagement/CaseLabelsCreate.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/CaseLabelsCreate.js +11 -26
- package/lib/esm/components/UpdateSeverityModal/UpdateSeverityModal.d.ts.map +1 -1
- package/lib/esm/components/UpdateSeverityModal/UpdateSeverityModal.js +8 -7
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +14 -3
- package/lib/esm/hooks/useCaseComments/mapCaseComment.d.ts +4 -6
- package/lib/esm/hooks/useCaseComments/mapCaseComment.d.ts.map +1 -1
- package/lib/esm/hooks/useCaseComments/mapCaseComment.js +5 -9
- package/lib/esm/reducers/CaseHelpers.d.ts.map +1 -1
- package/lib/esm/reducers/CaseHelpers.js +2 -2
- package/lib/esm/reducers/CaseReducer.d.ts +1 -1
- package/lib/esm/reducers/CaseReducer.d.ts.map +1 -1
- package/lib/esm/reducers/CaseReducer.js +15 -2
- package/lib/esm/utils/visitedResourcesUtils.d.ts.map +1 -1
- package/lib/esm/utils/visitedResourcesUtils.js +4 -3
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAoBxE,UAAU,MAAM;CAAG;AAMnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAoBxE,UAAU,MAAM;CAAG;AAMnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,qBAmanC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -268,17 +268,19 @@ function OwnerSelector(props) {
|
|
|
268
268
|
isCaseOwnerUpdating ||
|
|
269
269
|
isCasePhoneUpdating ||
|
|
270
270
|
canEditCase.isCaseNotEditable, onSelect: onCustomerContactSelect, onClearQuery: onClearQuery, onQueryUpdated: onQueryUpdated, options: ownerDropdownOptions, status: isNextBtnClickedToShowValidationError && isEmpty(selectedOwner.data) ? 'danger' : undefined })) : (React.createElement(CaseContactsSelectorExternal, { loggedInUserRights: loggedInUserRights.data, selectedAccountNumber: accountNumber, salesforceAccountId: (_a = selectedAccountDetails.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId, contactSsoUsername: contactSsoUsername !== null && contactSsoUsername !== void 0 ? contactSsoUsername : '', selected: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onCustomerContactSelect, onContactEnriched: (contact) => {
|
|
271
|
-
var _a, _b;
|
|
271
|
+
var _a, _b, _c, _d;
|
|
272
272
|
setCaseState(caseDispatch, {
|
|
273
273
|
selectedOwner: { data: contact, isFetching: false, isError: false, errorMessage: '' },
|
|
274
274
|
});
|
|
275
|
-
|
|
275
|
+
const salesforceAccountId = ((_a = selectedAccountDetails.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId) ||
|
|
276
|
+
((_b = loggedInUsersAccount.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId);
|
|
277
|
+
if (!contact.id || !salesforceAccountId) {
|
|
276
278
|
return;
|
|
277
279
|
}
|
|
278
280
|
const defaultCaseGroupIdForFetch = caseNumber
|
|
279
281
|
? groupNumber || null
|
|
280
|
-
: (
|
|
281
|
-
fetchCaseGroupsForContactGraphQL(caseDispatch, apolloClient, contact.id,
|
|
282
|
+
: (_c = contact.defaultCaseGroup) !== null && _c !== void 0 ? _c : null;
|
|
283
|
+
fetchCaseGroupsForContactGraphQL(caseDispatch, apolloClient, contact.id, salesforceAccountId, defaultCaseGroupIdForFetch, (_d = contact.isOrgAdmin) !== null && _d !== void 0 ? _d : false, groupNumber !== null && groupNumber !== void 0 ? groupNumber : '', groupName || '');
|
|
282
284
|
}, placeholder: t(`Search by name or username`), clearButton: true, id: "get-support-owner", name: "get-support-owner", className: "react-select-custom", isUpdating: isCaseOwnerUpdating, isInvalid: isNextBtnClickedToShowValidationError && isEmpty(selectedOwner.data), isDisabled: isCasePhoneUpdating || isCaseOwnerUpdating || canEditCase.isCaseNotEditable }))));
|
|
283
285
|
}
|
|
284
286
|
export { OwnerSelector };
|
|
@@ -13,7 +13,7 @@ import { Button, Form, FormGroup, FormHelperText, Grid, GridItem, HelperText, He
|
|
|
13
13
|
import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
14
14
|
import { AlertMessage, AlertType, LoadingIndicator, SingleSelectDropdown, ToastNotification, useFetch, } from '@rh-support/components';
|
|
15
15
|
import { fetchCaseDetails, useGlobalStateContext } from '@rh-support/react-context';
|
|
16
|
-
import { ensureEscalationRecordTypeId } from '@rh-support/utils';
|
|
16
|
+
import { ensureEscalationRecordTypeId, escapeHtml } from '@rh-support/utils';
|
|
17
17
|
import isEmpty from 'lodash/isEmpty';
|
|
18
18
|
import isEqual from 'lodash/isEqual';
|
|
19
19
|
import React, { useEffect, useState } from 'react';
|
|
@@ -144,12 +144,12 @@ export function RequestEscalationModal(props) {
|
|
|
144
144
|
});
|
|
145
145
|
const createdCaseNumber = (_d = (_c = (_b = (_a = escalationData === null || escalationData === void 0 ? void 0 : escalationData.redhat_support_uiapi) === null || _a === void 0 ? void 0 : _a.CaseCreate) === null || _b === void 0 ? void 0 : _b.RedHatSupportRecord) === null || _c === void 0 ? void 0 : _c.CaseNumber__c) === null || _d === void 0 ? void 0 : _d.value;
|
|
146
146
|
const fullComment = t('<h3>Request Management Escalation:</h3><p><strong>Subject</strong></p><p>{{subject}}</p><p><strong>Category</strong></p><p>{{rmeCategory}}</p><p><strong>Description</strong></p><p>{{description}}</p><p><strong>Expectations</strong></p><p>{{expectations}}</p><p><strong>Business Impact</strong></p><p>{{businessImpactDescription}}</p>', {
|
|
147
|
-
category: formState.rmeCategory,
|
|
148
|
-
subject: formState.subject,
|
|
149
|
-
description: formState.description,
|
|
150
|
-
expectations: formState.expectations,
|
|
151
|
-
businessImpactDescription: formState.businessImpactDescription,
|
|
152
|
-
rmeCategory: formState.rmeCategory,
|
|
147
|
+
category: escapeHtml(formState.rmeCategory),
|
|
148
|
+
subject: escapeHtml(formState.subject),
|
|
149
|
+
description: escapeHtml(formState.description),
|
|
150
|
+
expectations: escapeHtml(formState.expectations),
|
|
151
|
+
businessImpactDescription: escapeHtml(formState.businessImpactDescription),
|
|
152
|
+
rmeCategory: escapeHtml(formState.rmeCategory),
|
|
153
153
|
});
|
|
154
154
|
try {
|
|
155
155
|
yield submitEscalationComment(createdCaseNumber, fullComment, caseSalesforceId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReopenCaseModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/ConfirmationModals/ReopenCaseModal.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,UAAU,MAAM;IACZ,SAAS,EAAE,CAAC,WAAW,KAAA,EAAE,SAAS,KAAA,EAAE,UAAU,CAAC,KAAA,EAAE,iBAAiB,CAAC,KAAA,EAAE,cAAc,CAAC,KAAA,EAAE,mBAAmB,CAAC,KAAA,KAAK,IAAI,CAAC;IACpH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ReopenCaseModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/ConfirmationModals/ReopenCaseModal.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,UAAU,MAAM;IACZ,SAAS,EAAE,CAAC,WAAW,KAAA,EAAE,SAAS,KAAA,EAAE,UAAU,CAAC,KAAA,EAAE,iBAAiB,CAAC,KAAA,EAAE,cAAc,CAAC,KAAA,EAAE,mBAAmB,CAAC,KAAA,KAAK,IAAI,CAAC;IACpH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,qBAoN5C"}
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { Button, ButtonVariant, Form, FormGroup, FormHelperText, HelperText, HelperTextItem, Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant, TextArea, } from '@patternfly/react-core';
|
|
11
11
|
import { SingleSelectDropdown } from '@rh-support/components';
|
|
12
|
-
import { formatDateTime, PORTAL_REOPEN_STATUSES } from '@rh-support/utils';
|
|
12
|
+
import { escapeHtml, formatDateTime, PORTAL_REOPEN_STATUSES } from '@rh-support/utils';
|
|
13
13
|
import isEmpty from 'lodash/isEmpty';
|
|
14
14
|
import map from 'lodash/map';
|
|
15
15
|
import React, { useState } from 'react';
|
|
@@ -42,9 +42,13 @@ export function ReopenCaseModal(props) {
|
|
|
42
42
|
return isValid;
|
|
43
43
|
};
|
|
44
44
|
const getCommentBody = () => {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const reason = escapeHtml(selectedReason);
|
|
46
|
+
const description = escapeHtml(reopenDescription);
|
|
47
|
+
const who = escapeHtml(props.whoIsUpdating);
|
|
48
|
+
const reasonDetail = reasonWithDescription.includes(selectedReason) || props.isInternal
|
|
49
|
+
? `${props.isInternal ? '' : '. '}${description}`
|
|
50
|
+
: '';
|
|
51
|
+
return `<p><strong>Reason for reopening case:</strong></p><p>${reason}${reasonDetail}</p><p><strong>Reopened date:</strong></p><p>${formatDateTime(Date())}</p><p><strong>Reopened by:</strong></p><p>${who}</p><p><strong>Reopened reason other description:</strong></p><p>${description}</p>`;
|
|
48
52
|
};
|
|
49
53
|
const onSubmit = () => __awaiter(this, void 0, void 0, function* () {
|
|
50
54
|
if (!checkForRequiredFields())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewEssTermsModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAiBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"NewEssTermsModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAiBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,qBAwa7C"}
|
|
@@ -20,7 +20,7 @@ import { Trans, useTranslation } from 'react-i18next';
|
|
|
20
20
|
import { useCaseDispatch, useCaseSelector } from '../../../context/CaseContext';
|
|
21
21
|
import { GET_CASE_COMMENTS, useCreateCaseComment } from '../../../hooks/useCaseComments';
|
|
22
22
|
import { checkForCaseStatusToggleOnAttachOrComment, updateCaseDetailsGraphQL } from '../../../reducers/CaseReducer';
|
|
23
|
-
import { buildRemoteSessionRequestCaseUpdate,
|
|
23
|
+
import { buildRemoteSessionRequestCaseUpdate, buildRemoteSessionRequestComment, getLocaleNameFromLocalCode, getRemoteSessionFieldProgressVariant, isRemoteSessionFieldOverLimit, isRemoteSessionFormSubmitDisabled, REMOTE_SESSION_FIELD_LENGTH_ERROR, REMOTE_SESSION_FIELD_LENGTH_LIMIT, } from './remoteSessionUtils';
|
|
24
24
|
export function NewEssTermsModal(props) {
|
|
25
25
|
const { t } = useTranslation();
|
|
26
26
|
const { remoteSessionTermsAcked } = useCaseSelector((state) => ({
|
|
@@ -104,9 +104,7 @@ export function NewEssTermsModal(props) {
|
|
|
104
104
|
};
|
|
105
105
|
// Function to ack remote session terms and post comment
|
|
106
106
|
const submitRemoteSessionAgreement = (pdfId) => __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
const requestComment = t(
|
|
108
|
-
? `<p><strong>Remote session link</strong></p><p>${formatSessionLinks(sessionLink)}</p>`
|
|
109
|
-
: ''}<p>This action does not initiate a remote session. A Red Hat Associate will get back to you soon.</p>`);
|
|
107
|
+
const requestComment = t(buildRemoteSessionRequestComment({ sessionExpectations, impact, sessionLink }));
|
|
110
108
|
try {
|
|
111
109
|
const ackedByUserId = yield resolveSalesforceUserIdByFederationId(apolloClient, props.loggedInUser);
|
|
112
110
|
if (!ackedByUserId) {
|
package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSessionAgreementModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAqBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"RemoteSessionAgreementModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAqBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,qBAiaxD"}
|
|
@@ -20,7 +20,7 @@ import { Trans, useTranslation } from 'react-i18next';
|
|
|
20
20
|
import { useCaseDispatch, useCaseSelector } from '../../../context/CaseContext';
|
|
21
21
|
import { GET_CASE_COMMENTS, useCreateCaseComment } from '../../../hooks/useCaseComments';
|
|
22
22
|
import { checkForCaseStatusToggleOnAttachOrComment, setRemoteRiderFlag, updateCaseDetailsGraphQL, } from '../../../reducers/CaseReducer';
|
|
23
|
-
import { buildRemoteSessionRequestCaseUpdate,
|
|
23
|
+
import { buildRemoteSessionRequestCaseUpdate, buildRemoteSessionRequestComment, getLocaleNameFromLocalCode, getRemoteSessionFieldProgressVariant, isRemoteSessionFieldOverLimit, isRemoteSessionFormSubmitDisabled, REMOTE_SESSION_FIELD_LENGTH_ERROR, REMOTE_SESSION_FIELD_LENGTH_LIMIT, } from './remoteSessionUtils';
|
|
24
24
|
export function RemoteSessionAgreementModal(props) {
|
|
25
25
|
const { t } = useTranslation();
|
|
26
26
|
const { remoteSessionTermsAcked } = useCaseSelector((state) => ({
|
|
@@ -95,9 +95,7 @@ export function RemoteSessionAgreementModal(props) {
|
|
|
95
95
|
const existingCaseDetails = useCaseSelector((state) => state.caseDetails, isEqual);
|
|
96
96
|
// Function to ack remote session terms and post comment
|
|
97
97
|
const submitRemoteSessionAgreement = (pdfId) => __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
const requestComment = t(
|
|
99
|
-
? `<p><strong>Remote session link</strong></p><p>${formatSessionLinks(sessionLink)}</p>`
|
|
100
|
-
: ''}<p>This action does not initiate a remote session. A Red Hat Associate will get back to you soon.</p>`);
|
|
98
|
+
const requestComment = t(buildRemoteSessionRequestComment({ sessionExpectations, impact, sessionLink }));
|
|
101
99
|
try {
|
|
102
100
|
const ackedByUserId = yield resolveSalesforceUserIdByFederationId(apolloClient, props.loggedInUser);
|
|
103
101
|
if (!ackedByUserId) {
|
|
@@ -12,4 +12,13 @@ export declare function buildRemoteSessionRequestCaseUpdate(ackedByUserId: strin
|
|
|
12
12
|
};
|
|
13
13
|
export declare const getLocaleNameFromLocalCode: (localeCode: string) => string;
|
|
14
14
|
export declare const formatSessionLinks: (sessionLink: string) => string;
|
|
15
|
+
/**
|
|
16
|
+
* Builds the public case comment for a remote session request.
|
|
17
|
+
* User-controlled fields are HTML-escaped so markup/CSS cannot be injected.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildRemoteSessionRequestComment(params: {
|
|
20
|
+
sessionExpectations: string;
|
|
21
|
+
impact: string;
|
|
22
|
+
sessionLink?: string;
|
|
23
|
+
}): string;
|
|
15
24
|
//# sourceMappingURL=remoteSessionUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteSessionUtils.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"remoteSessionUtils.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAEtD,eAAO,MAAM,iCAAiC,iEAAiG,CAAC;AAEhJ,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,KAAG,OACV,CAAC;AAErD,eAAO,MAAM,oCAAoC,GAAI,OAAO,MAAM,KAAG,eAKpE,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI,qBAAqB,MAAM,EAAE,QAAQ,MAAM,KAAG,OAIvD,CAAC;AAE1C,wBAAgB,mCAAmC,CAAC,aAAa,EAAE,MAAM;;;;;EAOxE;AAED,eAAO,MAAM,0BAA0B,GAAI,YAAY,MAAM,KAAG,MAa/D,CAAC;AAWF,eAAO,MAAM,kBAAkB,GAAI,aAAa,MAAM,KAAG,MAaxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAQT"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProgressVariant } from '@patternfly/react-core';
|
|
2
|
+
import { escapeHtml } from '@rh-support/utils';
|
|
2
3
|
export const REMOTE_SESSION_FIELD_LENGTH_LIMIT = 2000;
|
|
3
4
|
export const REMOTE_SESSION_FIELD_LENGTH_ERROR = `That description exceeds ${REMOTE_SESSION_FIELD_LENGTH_LIMIT} characters. Try shortening it.`;
|
|
4
5
|
export const isRemoteSessionFieldOverLimit = (value) => value.length > REMOTE_SESSION_FIELD_LENGTH_LIMIT;
|
|
@@ -38,10 +39,38 @@ export const getLocaleNameFromLocalCode = (localeCode) => {
|
|
|
38
39
|
}
|
|
39
40
|
return localeCode;
|
|
40
41
|
};
|
|
42
|
+
const isSafeHttpUrl = (url) => {
|
|
43
|
+
try {
|
|
44
|
+
const parsed = new URL(url);
|
|
45
|
+
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
|
|
46
|
+
}
|
|
47
|
+
catch (_a) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
41
51
|
export const formatSessionLinks = (sessionLink) => {
|
|
42
52
|
const links = sessionLink
|
|
43
53
|
.split(/[;,| \n\r\t]+/)
|
|
44
54
|
.map((link) => link.trim())
|
|
45
55
|
.filter(Boolean);
|
|
46
|
-
return links
|
|
56
|
+
return links
|
|
57
|
+
.map((link) => {
|
|
58
|
+
const safeText = escapeHtml(link);
|
|
59
|
+
const safeHref = isSafeHttpUrl(link) ? escapeHtml(link) : '#';
|
|
60
|
+
return `<a href="${safeHref}">${safeText}</a>`;
|
|
61
|
+
})
|
|
62
|
+
.join('<br>');
|
|
47
63
|
};
|
|
64
|
+
/**
|
|
65
|
+
* Builds the public case comment for a remote session request.
|
|
66
|
+
* User-controlled fields are HTML-escaped so markup/CSS cannot be injected.
|
|
67
|
+
*/
|
|
68
|
+
export function buildRemoteSessionRequestComment(params) {
|
|
69
|
+
var _a;
|
|
70
|
+
const expectations = escapeHtml(params.sessionExpectations);
|
|
71
|
+
const impactHtml = escapeHtml(params.impact);
|
|
72
|
+
const sessionLinkSection = ((_a = params.sessionLink) === null || _a === void 0 ? void 0 : _a.trim())
|
|
73
|
+
? `<p><strong>Remote session link</strong></p><p>${formatSessionLinks(params.sessionLink)}</p>`
|
|
74
|
+
: '';
|
|
75
|
+
return `<p><strong>Thank you for submitting the request for a remote session. A support manager will review the request, and updates will be provided in the support case. Please continue to provide any data requested by the support engineers in the case prior to the remote session (if applicable).</strong></p><p>Submitted a remote session request with following details:</p><p><strong>Preferred Time and Expectations of remote session</strong></p><p>${expectations}</p><p><strong>Describe the impact to you or the business</strong></p><p>${impactHtml}</p>${sessionLinkSection}<p>This action does not initiate a remote session. A Red Hat Associate will get back to you soon.</p>`;
|
|
76
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseComments.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseComments.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAuBvE,OAAO,KAAkD,MAAM,OAAO,CAAC;AAUvE,eAAO,MAAM,2BAA2B,yCAAyC,CAAC;AAClF,eAAO,MAAM,wCAAwC,yBAAyB,CAAC;AAE/E,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,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,YAAY,
|
|
1
|
+
{"version":3,"file":"CaseComments.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseComments.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAuBvE,OAAO,KAAkD,MAAM,OAAO,CAAC;AAUvE,eAAO,MAAM,2BAA2B,yCAAyC,CAAC;AAClF,eAAO,MAAM,wCAAwC,yBAAyB,CAAC;AAE/E,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,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,YAAY,4EAsdhB,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -196,7 +196,11 @@ const CaseComments = React.forwardRef((props, ref) => {
|
|
|
196
196
|
node.setAttribute('rel', 'noopener noreferrer');
|
|
197
197
|
}
|
|
198
198
|
});
|
|
199
|
-
const clean = DOMPurify.sanitize(escapeNonQuillTags(html), {
|
|
199
|
+
const clean = DOMPurify.sanitize(escapeNonQuillTags(html), {
|
|
200
|
+
ADD_ATTR: ['target', 'rel'],
|
|
201
|
+
FORBID_TAGS: ['style'],
|
|
202
|
+
FORBID_ATTR: ['style'],
|
|
203
|
+
});
|
|
200
204
|
DOMPurify.removeHook('afterSanitizeAttributes');
|
|
201
205
|
return clean;
|
|
202
206
|
};
|
|
@@ -246,12 +250,12 @@ const CaseComments = React.forwardRef((props, ref) => {
|
|
|
246
250
|
const parseComment = parseCommentHtml(comment.commentBody, comment.contentType);
|
|
247
251
|
return (React.createElement("pre", { className: "push-top-narrow comment-plaintext reset-pre-text", dangerouslySetInnerHTML: commentText(parseComment), style: { fontFamily: isExportingPDF ? 'DejaVu Sans' : '' } }));
|
|
248
252
|
}
|
|
249
|
-
let htmlString = comment.commentBody;
|
|
250
|
-
|
|
253
|
+
let htmlString = sanitizeHtml(linkifyHtmlTextNodes(comment.commentBody));
|
|
254
|
+
// PDF-only markup is trusted and applied after sanitization.
|
|
251
255
|
if (isExportingPDF) {
|
|
252
256
|
htmlString = formatMarkdownHtmlForPDF(htmlString);
|
|
253
257
|
}
|
|
254
|
-
return (React.createElement("div", { className: "push-top-narrow comment-richtext", dangerouslySetInnerHTML: { __html:
|
|
258
|
+
return (React.createElement("div", { className: "push-top-narrow comment-richtext", dangerouslySetInnerHTML: { __html: htmlString }, style: { fontFamily: isExportingPDF ? 'DejaVu Sans' : '' } }));
|
|
255
259
|
};
|
|
256
260
|
useEffect(() => {
|
|
257
261
|
if ((markdownRef === null || markdownRef === void 0 ? void 0 : markdownRef.current) && isExportingPDF) {
|
package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCommentDrafts.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCommentDrafts.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAsB,MAAM,OAAO,CAAC;AAMrE,UAAU,sBAAsB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,UAAU,EACV,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,cAAc,GACjB,EAAE,sBAAsB;sDAGmB,MAAM,cAAc,OAAO;;EA2DtE"}
|
|
@@ -7,6 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
+
import { escapeHtml } from '@rh-support/utils';
|
|
10
11
|
import debounce from 'lodash/debounce';
|
|
11
12
|
import { useEffect, useMemo } from 'react';
|
|
12
13
|
import { CaseDetailsCacheNamespaces } from '../../../../../enums/cache';
|
|
@@ -47,7 +48,7 @@ export function useCommentDrafts({ caseNumber, loggedInUserSSO, isInternal, comm
|
|
|
47
48
|
// Legacy guard: old drafts stored as plain text without HTML tags
|
|
48
49
|
let draftText = draft.text;
|
|
49
50
|
if (!/<[a-z][\s\S]*>/i.test(draftText)) {
|
|
50
|
-
draftText = `<p>${draftText}</p>`;
|
|
51
|
+
draftText = `<p>${escapeHtml(draftText)}</p>`;
|
|
51
52
|
}
|
|
52
53
|
setCommentText(draftText);
|
|
53
54
|
applySignature(draftText);
|
|
@@ -14,7 +14,7 @@ import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
|
14
14
|
import { LoadingIndicator, RichTextEditor, ToastNotification, usePrevious } from '@rh-support/components';
|
|
15
15
|
import { GlobalMetadataStateContext, useCanEditCase, useUserPreferences } from '@rh-support/react-context';
|
|
16
16
|
import { ability, CaseDiscussionFields, resourceActions, resources } from '@rh-support/user-permissions';
|
|
17
|
-
import { formatDateTime, getHydraAttachmentImageUrl } from '@rh-support/utils';
|
|
17
|
+
import { escapeHtml, formatDateTime, getHydraAttachmentImageUrl } from '@rh-support/utils';
|
|
18
18
|
import isEmpty from 'lodash/isEmpty';
|
|
19
19
|
import isEqual from 'lodash/isEqual';
|
|
20
20
|
import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
@@ -62,7 +62,7 @@ export function PostComment(props) {
|
|
|
62
62
|
const applySignature = useCallback((text) => {
|
|
63
63
|
if (isEmpty(commentSignature))
|
|
64
64
|
return;
|
|
65
|
-
const signatureHtml = `<p>${commentSignature}</p>`;
|
|
65
|
+
const signatureHtml = `<p>${escapeHtml(commentSignature)}</p>`;
|
|
66
66
|
const signed = text.includes(commentSignature) ? text : text + signatureHtml;
|
|
67
67
|
setCommentText(signed);
|
|
68
68
|
}, [commentSignature]);
|
|
@@ -74,7 +74,7 @@ export function PostComment(props) {
|
|
|
74
74
|
const sig = (yield getCommentSignature()) || '';
|
|
75
75
|
setCommentSignature(sig);
|
|
76
76
|
if (isEmpty(commentText) && !isEmpty(sig)) {
|
|
77
|
-
setCommentText(`<p><br></p><p>${sig}</p>`);
|
|
77
|
+
setCommentText(`<p><br></p><p>${escapeHtml(sig)}</p>`);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
catch (error) {
|
|
@@ -141,7 +141,7 @@ export function PostComment(props) {
|
|
|
141
141
|
});
|
|
142
142
|
const resetCommentSection = () => __awaiter(this, void 0, void 0, function* () {
|
|
143
143
|
yield clearDraft();
|
|
144
|
-
const resetText = commentSignature ? `<p><br></p><p>${commentSignature}</p>` : '';
|
|
144
|
+
const resetText = commentSignature ? `<p><br></p><p>${escapeHtml(commentSignature)}</p>` : '';
|
|
145
145
|
setCommentText(resetText);
|
|
146
146
|
resetIsPublic();
|
|
147
147
|
});
|
|
@@ -213,11 +213,11 @@ export function PostComment(props) {
|
|
|
213
213
|
const formattedTimestamp = props.replyingToTimestamp ? formatDateTime(props.replyingToTimestamp) : '';
|
|
214
214
|
const replyPrefix = formattedTimestamp
|
|
215
215
|
? t('(replying to {{commentCreator}}, {{timestamp}}) \n', {
|
|
216
|
-
commentCreator: props.replyingToAuthor,
|
|
217
|
-
timestamp: formattedTimestamp,
|
|
216
|
+
commentCreator: escapeHtml(props.replyingToAuthor),
|
|
217
|
+
timestamp: escapeHtml(formattedTimestamp),
|
|
218
218
|
})
|
|
219
219
|
: t('(replying to {{commentCreator}}) \n', {
|
|
220
|
-
commentCreator: props.replyingToAuthor,
|
|
220
|
+
commentCreator: escapeHtml(props.replyingToAuthor),
|
|
221
221
|
});
|
|
222
222
|
body = `<p>${replyPrefix}</p>${body}`;
|
|
223
223
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseGroup.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAmB5E,UAAU,MAAM;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,iBAAS,SAAS,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CaseGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseGroup.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAmB5E,UAAU,MAAM;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,iBAAS,SAAS,CAAC,KAAK,EAAE,MAAM,qBA0f/B;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -36,9 +36,10 @@ const emptyCaseGroup = {
|
|
|
36
36
|
members: [],
|
|
37
37
|
};
|
|
38
38
|
function CaseGroup(props) {
|
|
39
|
+
var _a, _b;
|
|
39
40
|
const { t } = useTranslation();
|
|
40
41
|
const caseUpdateError = useCaseUpdateErrorMessage();
|
|
41
|
-
const { groupNumber, caseNumber, caseId, accountNumber, ownersCaseGroups, groupName, isCaseOwnerUpdating, contactSSOName, selectedOwnerContactId, selectedOwnerIsOrgAdmin, pendingCaseOwnerUpdate, existingCaseDetails, } = useCaseSelector((state) => {
|
|
42
|
+
const { groupNumber, caseNumber, caseId, accountNumber, ownersCaseGroups, groupName, isCaseOwnerUpdating, contactSSOName, selectedOwnerContactId, selectedOwnerIsOrgAdmin, pendingCaseOwnerUpdate, existingCaseDetails, selectedAccountDetails, } = useCaseSelector((state) => {
|
|
42
43
|
var _a, _b, _c, _d, _e;
|
|
43
44
|
return ({
|
|
44
45
|
caseNumber: state.caseDetails.caseNumber,
|
|
@@ -53,10 +54,14 @@ function CaseGroup(props) {
|
|
|
53
54
|
selectedOwnerIsOrgAdmin: (_e = (_d = (_c = state.selectedOwner) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.isOrgAdmin) !== null && _e !== void 0 ? _e : false,
|
|
54
55
|
pendingCaseOwnerUpdate: state.pendingCaseOwnerUpdate,
|
|
55
56
|
existingCaseDetails: state.caseDetails,
|
|
57
|
+
selectedAccountDetails: state.selectedAccountDetails,
|
|
56
58
|
});
|
|
57
59
|
}, isEqual);
|
|
58
60
|
const caseDispatch = useCaseDispatch();
|
|
59
61
|
const apolloClient = useApolloClient();
|
|
62
|
+
const { globalMetadataState: { loggedInUsersAccount, loggedInUserRights, loggedInUser }, } = useContext(GlobalMetadataStateContext);
|
|
63
|
+
const salesforceAccountId = ((_a = selectedAccountDetails === null || selectedAccountDetails === void 0 ? void 0 : selectedAccountDetails.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId) ||
|
|
64
|
+
((_b = loggedInUsersAccount.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId);
|
|
60
65
|
const { isExportingPDF } = useContext(PDFContext);
|
|
61
66
|
const { routeState: { isNextBtnClickedToShowValidationError }, } = useContext(RouteContext);
|
|
62
67
|
const { isGroupMandatory, shouldHideSelector, isNoGroupsBlockedState } = useCaseGroupUiState();
|
|
@@ -68,11 +73,11 @@ function CaseGroup(props) {
|
|
|
68
73
|
useEffect(() => {
|
|
69
74
|
if (!caseNumber)
|
|
70
75
|
return;
|
|
71
|
-
if (isEmpty(selectedOwnerContactId) || isEmpty(
|
|
76
|
+
if (isEmpty(selectedOwnerContactId) || isEmpty(salesforceAccountId))
|
|
72
77
|
return;
|
|
73
|
-
fetchCaseGroupsForContactGraphQL(caseDispatch, apolloClient, selectedOwnerContactId,
|
|
78
|
+
fetchCaseGroupsForContactGraphQL(caseDispatch, apolloClient, selectedOwnerContactId, salesforceAccountId, groupNumber || null, selectedOwnerIsOrgAdmin, groupNumber !== null && groupNumber !== void 0 ? groupNumber : '', groupName || '');
|
|
74
79
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75
|
-
}, [selectedOwnerContactId,
|
|
80
|
+
}, [selectedOwnerContactId, salesforceAccountId, selectedOwnerIsOrgAdmin, groupNumber, groupName]);
|
|
76
81
|
const [selectedCaseGroup, setSelectedCaseGroup] = useState(isGroupMandatory ? undefined : emptyCaseGroup);
|
|
77
82
|
const [isCaseGroupInvalid, setCaseGroupInvalid] = useState(false);
|
|
78
83
|
const [isSelectedUngroupedInvalid, setIsSelectedUngroupedInvalid] = useState(false);
|
|
@@ -84,7 +89,6 @@ function CaseGroup(props) {
|
|
|
84
89
|
const textInputRef = useRef();
|
|
85
90
|
const canEditCase = useCanEditCase();
|
|
86
91
|
const ability = useContext(AbilityContext);
|
|
87
|
-
const { globalMetadataState: { loggedInUserRights, loggedInUser }, } = useContext(GlobalMetadataStateContext);
|
|
88
92
|
const canViewManageTab = ability.can(resourceActions.READ, resources.MANAGE);
|
|
89
93
|
const canViewCaseGroups = ability.can(resourceActions.READ, resources.CASE_GROUPS) && canViewManageTab;
|
|
90
94
|
// value changed logic to show a non local group change
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseLabels.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseLabels.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CaseLabels.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseLabels.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAYzD,MAAM,CAAC,OAAO,UAAU,UAAU,sBAwMjC"}
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { Label, MenuToggle, Select, SelectList, SelectOption, Spinner, } from '@patternfly/react-core';
|
|
11
11
|
import { CaseLabelLoadErrorModal, ToastNotification } from '@rh-support/components';
|
|
12
12
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
13
|
+
import { resolveCaseLabelAccountId } from '@rh-support/utils';
|
|
13
14
|
import isEqual from 'lodash/isEqual';
|
|
14
15
|
import React, { useContext, useState } from 'react';
|
|
15
16
|
import { Trans, useTranslation } from 'react-i18next';
|
|
@@ -19,15 +20,22 @@ import { useCaseLabelLinks } from '../../hooks/useCaseLabelLinkMutations';
|
|
|
19
20
|
import { useCaseUpdateErrorMessage } from '../../hooks/useCaseUpdateErrorMessage';
|
|
20
21
|
const NUM_VISIBLE_LABELS = 3;
|
|
21
22
|
export default function CaseLabels() {
|
|
22
|
-
var _a;
|
|
23
|
+
var _a, _b;
|
|
23
24
|
const { t } = useTranslation();
|
|
24
25
|
const caseUpdateError = useCaseUpdateErrorMessage();
|
|
25
26
|
const canEditCase = useCanEditCase();
|
|
26
27
|
const { globalMetadataState: { loggedInUser, loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
|
|
27
28
|
const isOrgAdmin = loggedInUser.data.isOrgAdmin;
|
|
28
|
-
const { caseId } = useCaseSelector((state) => ({
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const { caseId, selectedAccountDetails } = useCaseSelector((state) => ({
|
|
30
|
+
caseId: state.caseDetails.id,
|
|
31
|
+
selectedAccountDetails: state.selectedAccountDetails,
|
|
32
|
+
}), isEqual);
|
|
33
|
+
// Same account resolution as Case Group: case/selected account SF id only (logged-in as fallback).
|
|
34
|
+
const labelAccountId = resolveCaseLabelAccountId({
|
|
35
|
+
selectedAccountSalesforceId: (_a = selectedAccountDetails === null || selectedAccountDetails === void 0 ? void 0 : selectedAccountDetails.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId,
|
|
36
|
+
loggedInAccountSalesforceId: (_b = loggedInUsersAccount.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId,
|
|
37
|
+
});
|
|
38
|
+
const isLabelAccountReady = !(selectedAccountDetails === null || selectedAccountDetails === void 0 ? void 0 : selectedAccountDetails.isFetching) && !loggedInUsersAccount.isFetching && Boolean(labelAccountId);
|
|
31
39
|
const { availableLabels, assignedLinks, selectedLabelIds, loading, error, mutating, setAssignedLinks, createLink, deleteLink, refetch, } = useCaseLabelLinks(isLabelAccountReady ? labelAccountId : undefined, caseId);
|
|
32
40
|
const [isOpen, setIsOpen] = useState(false);
|
|
33
41
|
const [isErrorModalDismissed, setIsErrorModalDismissed] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseLabelsCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseLabelsCreate.tsx"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"CaseLabelsCreate.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseLabelsCreate.tsx"],"names":[],"mappings":"AAeA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAYjF,wFAAwF;AACxF,MAAM,CAAC,OAAO,UAAU,gBAAgB,sBAwMvC"}
|
|
@@ -11,10 +11,10 @@ import { useApolloClient } from '@apollo/client/react';
|
|
|
11
11
|
import { Label, MenuToggle, Select, SelectList, SelectOption, Spinner, } from '@patternfly/react-core';
|
|
12
12
|
import { CaseLabelLoadErrorModal } from '@rh-support/components';
|
|
13
13
|
import { GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
14
|
-
import { fetchAllAccountCaseLabels } from '@rh-support/utils';
|
|
14
|
+
import { fetchAllAccountCaseLabels, resolveCaseLabelAccountId } from '@rh-support/utils';
|
|
15
15
|
import isEqual from 'lodash/isEqual';
|
|
16
16
|
import unescape from 'lodash/unescape';
|
|
17
|
-
import React, { useCallback, useContext, useEffect,
|
|
17
|
+
import React, { useCallback, useContext, useEffect, useState } from 'react';
|
|
18
18
|
import { Trans, useTranslation } from 'react-i18next';
|
|
19
19
|
import { Link } from 'react-router-dom';
|
|
20
20
|
import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
|
|
@@ -22,41 +22,26 @@ import { setCaseState } from '../../reducers/CaseReducer';
|
|
|
22
22
|
const NUM_VISIBLE_LABELS = 3;
|
|
23
23
|
/** Case creation Labels dropdown — selection is stored and linked after case create. */
|
|
24
24
|
export default function CaseLabelsCreate() {
|
|
25
|
-
var _a
|
|
25
|
+
var _a;
|
|
26
26
|
const { t } = useTranslation();
|
|
27
27
|
const client = useApolloClient();
|
|
28
28
|
const caseDispatch = useCaseDispatch();
|
|
29
29
|
const { globalMetadataState: { loggedInUser, loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
|
|
30
30
|
const isOrgAdmin = loggedInUser.data.isOrgAdmin;
|
|
31
|
-
const { salesforceAccountIdFromSelected, isSelectedAccountFetching,
|
|
32
|
-
var _a, _b, _c, _d, _e
|
|
31
|
+
const { salesforceAccountIdFromSelected, isSelectedAccountFetching, selectedLabelIds } = useCaseSelector((state) => {
|
|
32
|
+
var _a, _b, _c, _d, _e;
|
|
33
33
|
return ({
|
|
34
34
|
salesforceAccountIdFromSelected: (_b = (_a = state.selectedAccountDetails) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId,
|
|
35
35
|
isSelectedAccountFetching: (_d = (_c = state.selectedAccountDetails) === null || _c === void 0 ? void 0 : _c.isFetching) !== null && _d !== void 0 ? _d : false,
|
|
36
|
-
|
|
37
|
-
selectedLabelIds: (_g = state.selectedLabelIds) !== null && _g !== void 0 ? _g : [],
|
|
36
|
+
selectedLabelIds: (_e = state.selectedLabelIds) !== null && _e !== void 0 ? _e : [],
|
|
38
37
|
});
|
|
39
38
|
}, isEqual);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const loggedInAccountNumber = (_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.accountNumber;
|
|
46
|
-
const loggedInSalesforceAccountId = (_b = loggedInUsersAccount.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId;
|
|
47
|
-
if (loggedInSalesforceAccountId &&
|
|
48
|
-
(!selectedAccountNumber || selectedAccountNumber === loggedInAccountNumber)) {
|
|
49
|
-
return loggedInSalesforceAccountId;
|
|
50
|
-
}
|
|
51
|
-
return undefined;
|
|
52
|
-
}, [
|
|
53
|
-
salesforceAccountIdFromSelected,
|
|
54
|
-
(_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.accountNumber,
|
|
55
|
-
(_b = loggedInUsersAccount.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId,
|
|
56
|
-
selectedAccountNumber,
|
|
57
|
-
]);
|
|
39
|
+
// Same account resolution as Case Group: case/selected account SF id only (logged-in as fallback).
|
|
40
|
+
const labelAccountId = resolveCaseLabelAccountId({
|
|
41
|
+
selectedAccountSalesforceId: salesforceAccountIdFromSelected,
|
|
42
|
+
loggedInAccountSalesforceId: (_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId,
|
|
43
|
+
});
|
|
58
44
|
const isAccountLoading = isSelectedAccountFetching || loggedInUsersAccount.isFetching;
|
|
59
|
-
const labelAccountId = salesforceAccountId !== null && salesforceAccountId !== void 0 ? salesforceAccountId : (_c = loggedInUsersAccount.data) === null || _c === void 0 ? void 0 : _c.salesforceAccountId;
|
|
60
45
|
const [availableLabels, setAvailableLabels] = useState([]);
|
|
61
46
|
const [loading, setLoading] = useState(false);
|
|
62
47
|
const [error, setError] = useState(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateSeverityModal.d.ts","sourceRoot":"","sources":["../../../../src/components/UpdateSeverityModal/UpdateSeverityModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UpdateSeverityModal.d.ts","sourceRoot":"","sources":["../../../../src/components/UpdateSeverityModal/UpdateSeverityModal.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAmE,MAAM,OAAO,CAAC;AAexF,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,MAAM,qBAipBxD"}
|
|
@@ -11,7 +11,7 @@ import { useApolloClient } from '@apollo/client/react';
|
|
|
11
11
|
import { Button, Dropdown, DropdownItem, DropdownList, Flex, FlexItem, MenuToggle, Modal, ModalBody, ModalFooter, ModalHeader, Spinner, TextArea, } from '@patternfly/react-core';
|
|
12
12
|
import { ToastNotification } from '@rh-support/components';
|
|
13
13
|
import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
|
|
14
|
-
import { getFtsForSeverityChange, isPremiumEntitlement, isSev1, PreviousCaseTypes, severitySort, } from '@rh-support/utils';
|
|
14
|
+
import { escapeHtml, getFtsForSeverityChange, isPremiumEntitlement, isSev1, PreviousCaseTypes, severitySort, } from '@rh-support/utils';
|
|
15
15
|
import { isUndefined } from 'lodash';
|
|
16
16
|
import find from 'lodash/find';
|
|
17
17
|
import includes from 'lodash/includes';
|
|
@@ -166,7 +166,7 @@ export default function UpdateSeverityModal(props) {
|
|
|
166
166
|
return '<h4>Contact Support Update</h4><p>User updated 24x7 contact information</p>';
|
|
167
167
|
};
|
|
168
168
|
const updateCaseFtsInfo = () => __awaiter(this, void 0, void 0, function* () {
|
|
169
|
-
const ftsUpdateComment = `${getFtsUpdateComment()}<h4>Description</h4><p>${descriptionValue.trim()}</p>`;
|
|
169
|
+
const ftsUpdateComment = `${getFtsUpdateComment()}<h4>Description</h4><p>${escapeHtml(descriptionValue.trim())}</p>`;
|
|
170
170
|
try {
|
|
171
171
|
yield updateSeverityViaGraphQL({
|
|
172
172
|
severity: currentSeverity || caseDetails.caseSeverity,
|
|
@@ -193,6 +193,7 @@ export default function UpdateSeverityModal(props) {
|
|
|
193
193
|
}
|
|
194
194
|
});
|
|
195
195
|
const onSubmit = () => __awaiter(this, void 0, void 0, function* () {
|
|
196
|
+
var _a, _b;
|
|
196
197
|
setIsUpdateClickedToShowError(true);
|
|
197
198
|
if (isSubmitButtonDisabled) {
|
|
198
199
|
return;
|
|
@@ -204,14 +205,14 @@ export default function UpdateSeverityModal(props) {
|
|
|
204
205
|
const ftsUpdateComment = getFtsUpdateComment();
|
|
205
206
|
// Severity update successful comment body
|
|
206
207
|
const severityUpdateComment = t(`<h4>Severity update</h4><p>Severity changed from {{oldSeverity}} to {{newSeverity}}</p>${isEmpty(ftsUpdateComment) ? '' : ftsUpdateComment}<h4>Description</h4><p>{{description}}</p>`, {
|
|
207
|
-
oldSeverity: caseDetails.caseSeverity,
|
|
208
|
-
newSeverity: updatedCaseDetails['severity'],
|
|
209
|
-
description: descriptionValue === null || descriptionValue === void 0 ? void 0 : descriptionValue.trim(),
|
|
208
|
+
oldSeverity: escapeHtml(caseDetails.caseSeverity),
|
|
209
|
+
newSeverity: escapeHtml(String((_a = updatedCaseDetails['severity']) !== null && _a !== void 0 ? _a : '')),
|
|
210
|
+
description: escapeHtml(descriptionValue === null || descriptionValue === void 0 ? void 0 : descriptionValue.trim()),
|
|
210
211
|
});
|
|
211
212
|
// Severity update failed comment body
|
|
212
213
|
const severityUpdateFailedComment = t('<h4>Severity update</h4><p>Failed to change severity from {{oldSeverity}} to {{newSeverity}}. Please try again</p>', {
|
|
213
|
-
oldSeverity: caseDetails.caseSeverity,
|
|
214
|
-
newSeverity: updatedCaseDetails['severity'],
|
|
214
|
+
oldSeverity: escapeHtml(caseDetails.caseSeverity),
|
|
215
|
+
newSeverity: escapeHtml(String((_b = updatedCaseDetails['severity']) !== null && _b !== void 0 ? _b : '')),
|
|
215
216
|
});
|
|
216
217
|
try {
|
|
217
218
|
setSeverityUpdating(caseOverviewDispatch, true);
|
|
@@ -1 +1 @@
|
|
|
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;AAiBvD,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,
|
|
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;AAiBvD,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,qBAkftD"}
|
|
@@ -34,6 +34,7 @@ import RouteUtils from '../../utils/routeUtils';
|
|
|
34
34
|
import Constants from '../shared/Constants';
|
|
35
35
|
import { AttachmentStateContext } from '../shared/fileUpload/reducer/AttachmentReducerContext';
|
|
36
36
|
export function GlobalTroubleshootEffects(props) {
|
|
37
|
+
var _a;
|
|
37
38
|
const [initDefaultSection, setInitDefaultSection] = useState(false);
|
|
38
39
|
const dispatchToRouteReducer = useContext(RouteDispatchContext);
|
|
39
40
|
const { globalMetadataState: { allProducts, loggedInUser, managedAccounts, loggedInUserRights, loggedInUsersAccount, loggedInUserJwtToken, }, } = useContext(GlobalMetadataStateContext);
|
|
@@ -252,14 +253,24 @@ export function GlobalTroubleshootEffects(props) {
|
|
|
252
253
|
* Filters groups where the contact is a member via GET_CASE_GROUP.
|
|
253
254
|
*/
|
|
254
255
|
useEffect(() => {
|
|
255
|
-
|
|
256
|
+
var _a, _b;
|
|
257
|
+
const salesforceAccountId = ((_a = selectedAccountDetails === null || selectedAccountDetails === void 0 ? void 0 : selectedAccountDetails.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId) ||
|
|
258
|
+
((_b = loggedInUsersAccount.data) === null || _b === void 0 ? void 0 : _b.salesforceAccountId);
|
|
259
|
+
if (isEmpty(salesforceAccountId) || isEmpty(selectedOwnerContactId))
|
|
256
260
|
return;
|
|
257
261
|
const ownerContactChanged = previousOwnerContactIdRef.current !== undefined &&
|
|
258
262
|
previousOwnerContactIdRef.current !== selectedOwnerContactId;
|
|
259
263
|
previousOwnerContactIdRef.current = selectedOwnerContactId;
|
|
260
|
-
fetchCaseGroupsForContactGraphQL(caseDispatch, apolloClient, selectedOwnerContactId,
|
|
264
|
+
fetchCaseGroupsForContactGraphQL(caseDispatch, apolloClient, selectedOwnerContactId, salesforceAccountId, selectedOwnerDefaultCaseGroup, selectedOwnerIsOrgAdmin, ownerContactChanged ? null : groupNumber, ownerContactChanged ? '' : groupName || '');
|
|
261
265
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
262
|
-
}, [
|
|
266
|
+
}, [
|
|
267
|
+
selectedOwnerContactId,
|
|
268
|
+
accountNumber,
|
|
269
|
+
selectedAccountDetails,
|
|
270
|
+
selectedOwnerDefaultCaseGroup,
|
|
271
|
+
selectedOwnerIsOrgAdmin,
|
|
272
|
+
(_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId,
|
|
273
|
+
]);
|
|
263
274
|
useEffect(() => {
|
|
264
275
|
if (!shouldHideSelector || !isEmpty(caseNumber))
|
|
265
276
|
return;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { ICaseComment } from '@cee-eng/hydrajs/@types/api/public/case';
|
|
2
2
|
import { ICaseCommentNode, IGetCaseCommentsQueryResponse } from './types';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* (e.g.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* TODO: The double-encoding is a backend bug in the Salesforce UIAPI — it encodes on both
|
|
9
|
-
* write and read. Once the backend is fixed, replace with a single `unescape(text)` call.
|
|
4
|
+
* GraphQL Body__c values are HTML-encoded once for transport
|
|
5
|
+
* (e.g. < becomes <, & becomes &). Decode a single pass only —
|
|
6
|
+
* a second unescape would turn Quill's intentional text escapes
|
|
7
|
+
* (typed HTML) into live markup / CSS injection.
|
|
10
8
|
*/
|
|
11
9
|
export declare function decodeHtmlEntities(text: string): string;
|
|
12
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapCaseComment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useCaseComments/mapCaseComment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAY1E
|
|
1
|
+
{"version":3,"file":"mapCaseComment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useCaseComments/mapCaseComment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAY1E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAIrF;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG7E;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAEvD;AAQD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;CAC1C,CAaA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAoBvE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,6BAA6B,GAAG,SAAS,GAAG,YAAY,EAAE,CAOvG"}
|
|
@@ -9,17 +9,13 @@ function decodeNumericEntities(text) {
|
|
|
9
9
|
.replaceAll(/&#(\d+);/g, (_, dec) => String.fromCodePoint(Number.parseInt(dec, 10)));
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* (e.g.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* TODO: The double-encoding is a backend bug in the Salesforce UIAPI — it encodes on both
|
|
17
|
-
* write and read. Once the backend is fixed, replace with a single `unescape(text)` call.
|
|
12
|
+
* GraphQL Body__c values are HTML-encoded once for transport
|
|
13
|
+
* (e.g. < becomes <, & becomes &). Decode a single pass only —
|
|
14
|
+
* a second unescape would turn Quill's intentional text escapes
|
|
15
|
+
* (typed HTML) into live markup / CSS injection.
|
|
18
16
|
*/
|
|
19
17
|
export function decodeHtmlEntities(text) {
|
|
20
|
-
|
|
21
|
-
decoded = decodeNumericEntities(decoded);
|
|
22
|
-
return decoded;
|
|
18
|
+
return decodeNumericEntities(unescape(text));
|
|
23
19
|
}
|
|
24
20
|
/**
|
|
25
21
|
* Derives the comment author type with priority: Associate > Customer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseHelpers.d.ts","sourceRoot":"","sources":["../../../src/reducers/CaseHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"CaseHelpers.d.ts","sourceRoot":"","sources":["../../../src/reducers/CaseHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getAppVersion, getTechnicalSupportRecordTypeId, getUserAgentForCaseMode, getVersion, isPremiumEntitlement, resolveAccessRestrictionForCaseCreate, resolveNoClusterIdFieldsForCaseCreate, serializeNoClusterIdFieldsToAdditionalCaseInformation, showFtsOnCreateCasePage, stripNoClusterIdFieldsFromDescription, } from '@rh-support/utils';
|
|
1
|
+
import { escapeHtml, getAppVersion, getTechnicalSupportRecordTypeId, getUserAgentForCaseMode, getVersion, isPremiumEntitlement, resolveAccessRestrictionForCaseCreate, resolveNoClusterIdFieldsForCaseCreate, serializeNoClusterIdFieldsToAdditionalCaseInformation, showFtsOnCreateCasePage, stripNoClusterIdFieldsFromDescription, } from '@rh-support/utils';
|
|
2
2
|
import filter from 'lodash/filter';
|
|
3
3
|
import forEach from 'lodash/forEach';
|
|
4
4
|
import isEmpty from 'lodash/isEmpty';
|
|
@@ -19,7 +19,7 @@ export const getCaseRecommendations = (docs, oldDocs) => {
|
|
|
19
19
|
};
|
|
20
20
|
export const getCepCommentFromCepDetails = (cepDetails) => {
|
|
21
21
|
return `## Consultant Engaged\nThis case has been flagged with Consulting Engagement in Progress (CEP).This issue needs additional focus as Red Hat Consulting is currently engaged and working with the customer.
|
|
22
|
-
\n\n### Consulting Contact:\n**Name:** ${cepDetails.contactName}\n**Availability/Working Hours:** ${cepDetails.workingHours}\n**Contact information:** ${cepDetails.contactInformation}${cepDetails.notes ? `\n**Notes:** ${cepDetails.notes}` : ''} `;
|
|
22
|
+
\n\n### Consulting Contact:\n**Name:** ${escapeHtml(cepDetails.contactName)}\n**Availability/Working Hours:** ${escapeHtml(cepDetails.workingHours)}\n**Contact information:** ${escapeHtml(cepDetails.contactInformation)}${cepDetails.notes ? `\n**Notes:** ${escapeHtml(cepDetails.notes)}` : ''} `;
|
|
23
23
|
};
|
|
24
24
|
export const getRecommendationObject = (doc, index) => {
|
|
25
25
|
const bucket = index === 0 ? 4 : 3;
|
|
@@ -54,7 +54,7 @@ export declare const fetchCaseEntitlements: (dispatch: CaseReducerDispatchType,
|
|
|
54
54
|
export declare const fetchCaseGroupsForSSO: (dispatch: CaseReducerDispatchType, contactSsoUsername: string, setCaseGroupToUngroupedOrDefault?: boolean, abortSignal?: AbortSignal, caseGroupNumberToRestore?: string | undefined) => Promise<void>;
|
|
55
55
|
export declare const fetchCaseGroupsForContactGraphQL: (dispatch: CaseReducerDispatchType, apolloClient: {
|
|
56
56
|
query: (options: any) => Promise<any>;
|
|
57
|
-
}, contactId: string,
|
|
57
|
+
}, contactId: string, salesforceAccountId: string, defaultCaseGroupId?: string | null, isOrgAdmin?: boolean, currentGroupNumber?: string | null, currentGroupName?: string | null) => Promise<MatchedCaseGroup[]>;
|
|
58
58
|
export declare const updateCaseWithSession: (dispatch: CaseReducerDispatchType, sessionItem: ISessionItem, loggedInUserAccountNumber: string, loggedInUserContact: IContact, loggedInUserAccount?: Partial<IAccount>, apolloClient?: {
|
|
59
59
|
query: (options: any) => Promise<any>;
|
|
60
60
|
}) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseReducer.d.ts","sourceRoot":"","sources":["../../../src/reducers/CaseReducer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CaseReducer.d.ts","sourceRoot":"","sources":["../../../src/reducers/CaseReducer.ts"],"names":[],"mappings":"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"}
|
|
@@ -635,16 +635,29 @@ export const fetchCaseGroupsForSSO = (dispatch_1, contactSsoUsername_1, ...args_
|
|
|
635
635
|
setCaseGroupToUngroupedOrDefault && setCaseDetails(dispatch, { groupNumber: null });
|
|
636
636
|
}
|
|
637
637
|
});
|
|
638
|
-
export const fetchCaseGroupsForContactGraphQL = (dispatch_1, apolloClient_1, contactId_1,
|
|
638
|
+
export const fetchCaseGroupsForContactGraphQL = (dispatch_1, apolloClient_1, contactId_1, salesforceAccountId_1, defaultCaseGroupId_1, ...args_1) => __awaiter(void 0, [dispatch_1, apolloClient_1, contactId_1, salesforceAccountId_1, defaultCaseGroupId_1, ...args_1], void 0, function* (dispatch, apolloClient, contactId, salesforceAccountId, defaultCaseGroupId, isOrgAdmin = false, currentGroupNumber, currentGroupName) {
|
|
639
639
|
var _a, _b, _c, _d;
|
|
640
|
+
if (isEmpty(salesforceAccountId)) {
|
|
641
|
+
return [];
|
|
642
|
+
}
|
|
640
643
|
dispatch({
|
|
641
644
|
type: CaseReducerConstants.caseStateChanged,
|
|
642
645
|
payload: { ownersCaseGroups: getApiResourceObject([], true) },
|
|
643
646
|
});
|
|
647
|
+
if (isEmpty(salesforceAccountId)) {
|
|
648
|
+
dispatch({
|
|
649
|
+
type: CaseReducerConstants.caseStateChanged,
|
|
650
|
+
payload: { ownersCaseGroups: getApiResourceObject([], false) },
|
|
651
|
+
});
|
|
652
|
+
return [];
|
|
653
|
+
}
|
|
644
654
|
try {
|
|
645
655
|
const { data } = yield apolloClient.query({
|
|
646
656
|
query: GET_CASE_GROUP,
|
|
647
|
-
variables: {
|
|
657
|
+
variables: {
|
|
658
|
+
where: { Account__c: { eq: salesforceAccountId } },
|
|
659
|
+
first: 2000,
|
|
660
|
+
},
|
|
648
661
|
});
|
|
649
662
|
const response = data;
|
|
650
663
|
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 : [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitedResourcesUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/visitedResourcesUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"visitedResourcesUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/visitedResourcesUtils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,gBAAgB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC/C;AAKD;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAI,qBAAqB,MAAM,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM,SAkBpG,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAO,iBAAiB,EAE/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,6BAA6B,YAGzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wCAAwC,GAAI,0BAA0B,iBAAiB,EAAE,KAAG,MA+BxG,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GACpC,YAAY,MAAM,EAClB,0BAA0B,iBAAiB,EAAE,KAC9C,OAAO,CAAC,IAAI,CAmBd,CAAC"}
|
|
@@ -8,6 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { publicApi } from '@cee-eng/hydrajs';
|
|
11
|
+
import { escapeHtml } from '@rh-support/utils';
|
|
11
12
|
let clickedResourcesSequence = [];
|
|
12
13
|
let lastSourceType = null;
|
|
13
14
|
/**
|
|
@@ -60,15 +61,15 @@ export const formatClickedResourcesSequenceForComment = (clickedResourcesSequenc
|
|
|
60
61
|
// Single link: 1. [source] - [title](url)
|
|
61
62
|
const clickCount = source.clickedUrlsCount[source.clickedResources[0].url];
|
|
62
63
|
const clickCountText = clickCount > 1 ? ` - (Customer visited this content ${clickCount} times)` : '';
|
|
63
|
-
commentBody += ` ${index + 1}. [${source.resourceDisplayName}] - [${source.clickedResources[0].title}](${source.clickedResources[0].url})${clickCountText}\n\n`;
|
|
64
|
+
commentBody += ` ${index + 1}. [${escapeHtml(source.resourceDisplayName)}] - [${escapeHtml(source.clickedResources[0].title)}](${escapeHtml(source.clickedResources[0].url)})${clickCountText}\n\n`;
|
|
64
65
|
}
|
|
65
66
|
else {
|
|
66
67
|
// Multiple links: 1. [source] \n -[title1](url1)\n -[title2](url2)
|
|
67
|
-
commentBody += ` ${index + 1}. [${source.resourceDisplayName}] - \n\n`;
|
|
68
|
+
commentBody += ` ${index + 1}. [${escapeHtml(source.resourceDisplayName)}] - \n\n`;
|
|
68
69
|
source.clickedResources.forEach((urlItem) => {
|
|
69
70
|
const clickCount = source.clickedUrlsCount[urlItem.url];
|
|
70
71
|
const clickCountText = clickCount > 1 ? ` - (Customer visited this content ${clickCount} times)` : '';
|
|
71
|
-
commentBody += ` - [${urlItem.title}](${urlItem.url})${clickCountText}\n`;
|
|
72
|
+
commentBody += ` - [${escapeHtml(urlItem.title)}](${escapeHtml(urlItem.url)})${clickCountText}\n`;
|
|
72
73
|
});
|
|
73
74
|
commentBody += '\n';
|
|
74
75
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rh-support/troubleshoot",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.23",
|
|
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.6.
|
|
56
|
-
"@rh-support/react-context": "2.6.
|
|
55
|
+
"@rh-support/components": "2.6.22",
|
|
56
|
+
"@rh-support/react-context": "2.6.23",
|
|
57
57
|
"@rh-support/types": "2.0.30",
|
|
58
|
-
"@rh-support/user-permissions": "2.6.
|
|
59
|
-
"@rh-support/utils": "2.6.
|
|
58
|
+
"@rh-support/user-permissions": "2.6.20",
|
|
59
|
+
"@rh-support/utils": "2.6.19",
|
|
60
60
|
"@types/react-redux": "^7.1.33",
|
|
61
61
|
"@types/redux": "^3.6.0",
|
|
62
62
|
"date-fns": "3.6.0",
|
|
@@ -129,5 +129,5 @@
|
|
|
129
129
|
"defaults and supports es6-module",
|
|
130
130
|
"maintained node versions"
|
|
131
131
|
],
|
|
132
|
-
"gitHead": "
|
|
132
|
+
"gitHead": "640cdf1b20dd10a0240f7242836884441d925591"
|
|
133
133
|
}
|