@rh-support/troubleshoot 2.3.0-alpha.0 → 2.4.5-beta.1

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.
Files changed (58) hide show
  1. package/lib/esm/components/AccountInfo/OwnerSelector.d.ts.map +1 -1
  2. package/lib/esm/components/AccountInfo/OwnerSelector.js +1 -1
  3. package/lib/esm/components/CaseEditView/CaseDetailsTabs.js +2 -2
  4. package/lib/esm/components/CaseEditView/CaseOverview/CaseType.d.ts.map +1 -1
  5. package/lib/esm/components/CaseEditView/CaseOverview/CaseType.js +18 -4
  6. package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
  7. package/lib/esm/components/CaseEditView/CaseOverview/index.js +2 -2
  8. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutions.d.ts.map +1 -1
  9. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutions.js +4 -2
  10. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseInternalStatus.d.ts.map +1 -1
  11. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseInternalStatus.js +2 -1
  12. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.d.ts.map +1 -1
  13. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.js +6 -4
  14. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.d.ts.map +1 -1
  15. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.js +3 -2
  16. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.d.ts.map +1 -1
  17. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.js +4 -1
  18. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.css +95 -21
  19. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.d.ts.map +1 -1
  20. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.js +269 -137
  21. package/lib/esm/components/CaseInformation/Fts.d.ts.map +1 -1
  22. package/lib/esm/components/CaseInformation/Fts.js +6 -5
  23. package/lib/esm/components/CaseManagement/Cep.d.ts.map +1 -1
  24. package/lib/esm/components/CaseManagement/Cep.js +3 -2
  25. package/lib/esm/components/CaseManagement/RHAssociatesSelector.d.ts.map +1 -1
  26. package/lib/esm/components/CaseManagement/RHAssociatesSelector.js +11 -5
  27. package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.d.ts.map +1 -1
  28. package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.js +11 -5
  29. package/lib/esm/components/Recommendations/AsideResults.d.ts.map +1 -1
  30. package/lib/esm/components/Recommendations/AsideResults.js +3 -1
  31. package/lib/esm/components/Recommendations/EARules/EARule.d.ts.map +1 -1
  32. package/lib/esm/components/Recommendations/EARules/EARule.js +0 -2
  33. package/lib/esm/components/Recommendations/EARules/EARuleInfoInline.d.ts.map +1 -1
  34. package/lib/esm/components/Recommendations/EARules/EARuleInfoInline.js +2 -2
  35. package/lib/esm/components/Recommendations/Recommendations.d.ts.map +1 -1
  36. package/lib/esm/components/Recommendations/Recommendations.js +19 -8
  37. package/lib/esm/components/SubmitCase/SubmitCase.js +3 -3
  38. package/lib/esm/components/Suggestions/TopContent.d.ts.map +1 -1
  39. package/lib/esm/components/Suggestions/TopContent.js +1 -4
  40. package/lib/esm/components/shared/fileUpload/fileSelectors/WidgetFileSelector.d.ts +2 -2
  41. package/lib/esm/components/shared/fileUpload/fileSelectors/WidgetFileSelector.d.ts.map +1 -1
  42. package/lib/esm/components/shared/fileUpload/fileSelectors/WidgetFileSelector.js +10 -1
  43. package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
  44. package/lib/esm/components/wizardLayout/WizardLayout.js +4 -1
  45. package/lib/esm/components/wizardLayout/WizardMain.d.ts.map +1 -1
  46. package/lib/esm/components/wizardLayout/WizardMain.js +5 -0
  47. package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
  48. package/lib/esm/components/wizardLayout/WizardNavigation.js +35 -25
  49. package/lib/esm/hooks/useWizard.js +1 -1
  50. package/lib/esm/reducers/CaseReducer.d.ts +1 -1
  51. package/lib/esm/reducers/CaseReducer.d.ts.map +1 -1
  52. package/lib/esm/reducers/CaseReducer.js +13 -9
  53. package/lib/esm/reducers/SessionRestoreReducer.d.ts +1 -1
  54. package/lib/esm/reducers/SessionRestoreReducer.d.ts.map +1 -1
  55. package/lib/esm/reducers/SessionRestoreReducer.js +14 -121
  56. package/lib/esm/scss/_main.scss +2 -1
  57. package/lib/esm/scss/_pf-overrides.scss +6 -0
  58. package/package.json +11 -12
@@ -1 +1 @@
1
- {"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAkB/D,UAAU,MAAM;CAAG;AAEnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,qBA0OnC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"OwnerSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/AccountInfo/OwnerSelector.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAkB/D,UAAU,MAAM;CAAG;AAEnB,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,qBAgPnC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -105,7 +105,7 @@ function OwnerSelector(props) {
105
105
  firstName: newOwner.firstName,
106
106
  lastName: newOwner.lastName,
107
107
  fullNameCustom: newOwner.fullNameCustom,
108
- }, '', abortSignal);
108
+ }, '', abortSignal, abortSignal, false, '', true, true, caseNumber);
109
109
  setLocalOwnerChange(true);
110
110
  updateNotifyUsersList(newOwner);
111
111
  ToastNotification.addSuccessMessage(t(`Owner has been successfully updated`));
@@ -20,7 +20,7 @@ const RMEEscalationList = React.lazy(() => import(/* webpackChunkName: 'RMEEscal
20
20
  export function CaseDetailsTabs(props) {
21
21
  const { caseNumber } = props;
22
22
  const { activeTab } = useParams();
23
- const { globalMetadataState: { loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
23
+ const { globalMetadataState: { loggedInUserRights, loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
24
24
  const { accountNumber, chats, comments, status } = useCaseSelector((state) => ({
25
25
  accountNumber: state.caseDetails.accountNumberRef,
26
26
  chats: state.caseDetails.chats,
@@ -104,7 +104,7 @@ export function CaseDetailsTabs(props) {
104
104
  routePath: 'escalation',
105
105
  component: (React.createElement(RMEEscalationList, { escalations: caseEscalations.data, caseNumber: caseNumber, caseStatus: status, accountNumber: loggedInUserRights.data.getAccountNumber(), isInternal: loggedInUserRights.data.isInternal() })),
106
106
  });
107
- false && //Don't add this component to 'tabsToRender' for now, pending QA release
107
+ !loggedInUsersAccount.data.secureSupport &&
108
108
  tabsToRender.push({
109
109
  'data-tracking-id': 'case-history-tab',
110
110
  title: CaseDetailsTabsEnum.HISTORY,
@@ -1 +1 @@
1
- {"version":3,"file":"CaseType.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/CaseType.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAW,MAAM,0BAA0B,CAAC;AAGrE,OAAO,KAA+B,MAAM,OAAO,CAAC;AAOpD,UAAU,MAAO,SAAQ,gBAAgB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAOD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,qBAsD9B;kBAtDQ,QAAQ;;;AAyDjB,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"CaseType.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/CaseType.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAoC,MAAM,OAAO,CAAC;AAOzD,UAAU,MAAO,SAAQ,gBAAgB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAOD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,qBAoF9B;kBApFQ,QAAQ;;;AAuFjB,eAAe,QAAQ,CAAC"}
@@ -7,8 +7,9 @@ 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 { Dropdown, ValueChangedIcon } from '@rh-support/components';
11
- import { toOldCaseTypeSwitcher, toOption, toOptions } from '@rh-support/utils';
10
+ import { Flex, FlexItem, MenuToggle, Select, SelectList, SelectOption, Spinner, } from '@patternfly/react-core';
11
+ import { ValueChangedIcon } from '@rh-support/components';
12
+ import { toOldCaseTypeSwitcher } from '@rh-support/utils';
12
13
  import isEmpty from 'lodash/isEmpty';
13
14
  import React, { useContext, useState } from 'react';
14
15
  import { Trans, useTranslation } from 'react-i18next';
@@ -23,16 +24,28 @@ function CaseType(props) {
23
24
  const { t } = useTranslation();
24
25
  const [isCaseTypeInValid, setIsCaseTypeInValid] = useState(false);
25
26
  const { isExportingPDF } = useContext(PDFContext);
27
+ const [isOpen, setIsOpen] = useState(false);
28
+ const [selected, setSelected] = useState(props.selectedType);
29
+ const onToggleClick = () => {
30
+ setIsOpen(!isOpen);
31
+ };
32
+ const toggle = (toggleRef) => (React.createElement(MenuToggle, { ref: toggleRef, onClick: onToggleClick, isExpanded: isOpen, isDisabled: props.hasError || props.isDisabled || props.isFetching, isFullWidth: true, status: isCaseTypeInValid ? 'danger' : undefined, className: "case-type-selector-text" },
33
+ React.createElement(Flex, { justifyContent: { default: 'justifyContentSpaceBetween' } },
34
+ React.createElement(FlexItem, null,
35
+ " ",
36
+ selected || t(`Select a category`)),
37
+ React.createElement(FlexItem, null, props.isFetching ? React.createElement(Spinner, { size: "md" }) : ''))));
26
38
  const validateCaseType = (selectedItem) => {
27
39
  setIsCaseTypeInValid(isEmpty(selectedItem));
28
40
  };
29
41
  const onCaseTypeChange = (option) => __awaiter(this, void 0, void 0, function* () {
30
- const switchedCaseType = toOldCaseTypeSwitcher(option.value);
42
+ const switchedCaseType = toOldCaseTypeSwitcher(option);
31
43
  if (switchedCaseType === props.selectedType) {
32
44
  return;
33
45
  }
34
46
  yield props.onTypeChange(switchedCaseType);
35
47
  setLocalTypeChange(true);
48
+ setSelected(option);
36
49
  validateCaseType(option);
37
50
  });
38
51
  // value changed logic to show a non local type change
@@ -43,7 +56,8 @@ function CaseType(props) {
43
56
  React.createElement(Trans, null, "Support type"),
44
57
  React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, isLocalChange: localTypeChange, value: props.selectedType, getTooltipContent: getChangedValueTooltip(() => CaseValuesToWatch.type) }),
45
58
  React.createElement("span", { className: `form-required ${isExportingPDF ? 'hide-in-pdf' : ''}`, "aria-hidden": true }, "*")),
46
- React.createElement(Dropdown, { name: "get-support-type", placeholder: t(`Select`), title: t(`Select a category`), list: toOptions(props.allTypes || []), selectedItem: toOption(props.selectedType), disabled: props.hasError || props.isDisabled, isLoadingList: props.isFetching, isInValid: isCaseTypeInValid, required: true, onChange: onCaseTypeChange, onOuterClick: validateCaseType, "data-tracking-id": "case-details-type-selector" })));
59
+ React.createElement(Select, { "data-tracking-id": "case-details-type-selector", isOpen: isOpen, selected: selected, onSelect: (event, val) => onCaseTypeChange(val), onOpenChange: (isOpen) => setIsOpen(isOpen), toggle: toggle, popperProps: { direction: 'down', enableFlip: false }, shouldFocusFirstItemOnOpen: false, shouldFocusToggleOnSelect: true },
60
+ React.createElement(SelectList, null, (props.allTypes || []).map((option) => (React.createElement(SelectOption, { value: option, key: option }, option)))))));
47
61
  }
48
62
  CaseType.defaultProps = defaultProps;
49
63
  export default CaseType;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AA8BA,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,qBAigBjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AA8BA,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,qBA4fjD"}
@@ -12,7 +12,7 @@ import LockIcon from '@patternfly/react-icons/dist/js/icons/lock-icon';
12
12
  import { ToastNotification, useConfirmation } from '@rh-support/components';
13
13
  import { CloseCaseModal, fetchCaseSeverities, fetchCaseTypes, GlobalMetadataDispatchContext, GlobalMetadataStateContext, useCanEditCase, } from '@rh-support/react-context';
14
14
  import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
15
- import { dtmTrackEvent, haventLoadedMetadata, isOpenShiftOnlineProduct, PreviousCaseTypes, toNewCaseTypeMapper, toNewCaseTypeSwitcher, } from '@rh-support/utils';
15
+ import { dtmTrackEventCaseStepEncountered, haventLoadedMetadata, isOpenShiftOnlineProduct, PreviousCaseTypes, toNewCaseTypeMapper, toNewCaseTypeSwitcher, } from '@rh-support/utils';
16
16
  import isEqual from 'lodash/isEqual';
17
17
  import React, { useContext, useEffect, useRef, useState } from 'react';
18
18
  import { Trans, useTranslation } from 'react-i18next';
@@ -301,7 +301,7 @@ export default function CaseOverview(props) {
301
301
  yield updateStatusState(CaseStatusEnum.CLOSED);
302
302
  yield postCommentAfterStatusUpdate(commentBody);
303
303
  setShowCaseCloseModal(false);
304
- dtmTrackEvent('case closed', 'case closed - case details page', caseNumber, `${product}|${version}`);
304
+ dtmTrackEventCaseStepEncountered('close', caseNumber, product, version);
305
305
  }), isUpdating: (caseOverviewState.caseStatusUpdating && isCaseUpdating) || isPostingComment, onClose: () => {
306
306
  setShowCaseCloseModal(false);
307
307
  }, caseNumber: caseNumber })),
@@ -1 +1 @@
1
- {"version":3,"file":"CaseSolutions.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseSolutions/CaseSolutions.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAuE3E,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;CACnC;AAUD,eAAO,MAAM,aAAa,+EAihBxB,CAAC"}
1
+ {"version":3,"file":"CaseSolutions.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseSolutions/CaseSolutions.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAuE3E,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;CACnC;AAUD,eAAO,MAAM,aAAa,+EAkhBxB,CAAC"}
@@ -23,7 +23,7 @@ import { Accordion, AccordionContent, AccordionItem, AccordionToggle, Button, Mo
23
23
  import { PaginatedList, ToastNotification } from '@rh-support/components';
24
24
  import { useGlobalStateContext } from '@rh-support/react-context';
25
25
  import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
26
- import { dtmTrackEventCaseDetailsSolutionDocs, getSolrParams } from '@rh-support/utils';
26
+ import { getSolrParams } from '@rh-support/utils';
27
27
  import find from 'lodash/find';
28
28
  import isEqual from 'lodash/isEqual';
29
29
  import some from 'lodash/some';
@@ -163,7 +163,9 @@ export const CaseSolutions = forwardRef((props, ref) => {
163
163
  });
164
164
  const canPinUnpin = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_PIN_UNPIN_RESOURCES);
165
165
  const canLinkUnlink = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_LINK_UNLINK_RESOURCES);
166
- const addDtmEvent = (stepName) => dtmTrackEventCaseDetailsSolutionDocs(stepName, caseNumber, `${product}|${version}`);
166
+ const addDtmEvent = (stepName) => {
167
+ // reserve for when fixing dtm
168
+ };
167
169
  const updateRecommendations = (recommendationToUpdate, isPinned, isLinked) => () => __awaiter(void 0, void 0, void 0, function* () {
168
170
  try {
169
171
  setIsPinLoading((prevPiningMap) => (Object.assign(Object.assign({}, prevPiningMap), { [recommendationToUpdate.resourceId]: true })));
@@ -1 +1 @@
1
- {"version":3,"file":"CaseInternalStatus.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseInternalStatus.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAQpE,MAAM,CAAC,OAAO,UAAU,kBAAkB,sBAwFzC"}
1
+ {"version":3,"file":"CaseInternalStatus.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseInternalStatus.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAQpE,MAAM,CAAC,OAAO,UAAU,kBAAkB,sBAyFzC"}
@@ -30,7 +30,8 @@ export default function CaseInternalStatus() {
30
30
  const globalMetadataDispatchContext = useContext(GlobalMetadataDispatchContext);
31
31
  const [isOpen, setIsOpen] = useState(false);
32
32
  const [selected, setSelected] = useState(internalStatus);
33
- const onToggleClick = () => {
33
+ const onToggleClick = (e) => {
34
+ e.stopPropagation();
34
35
  setIsOpen(!isOpen);
35
36
  };
36
37
  const toggle = (toggleRef) => (React.createElement(MenuToggle, { ref: toggleRef, onClick: onToggleClick, isExpanded: isOpen, isDisabled: isIStatusUpdating, isFullWidth: true, className: "case-internal-status-selector-text" },
@@ -1 +1 @@
1
- {"version":3,"file":"CaseDiscussion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAA0B,MAAM,yCAAyC,CAAC;AAa1G,OAAO,KAAoE,MAAM,OAAO,CAAC;AAsCzF,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;CAC5B;AAOD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM,qBA4mBnD"}
1
+ {"version":3,"file":"CaseDiscussion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAA0B,MAAM,yCAAyC,CAAC;AAkB1G,OAAO,KAAoE,MAAM,OAAO,CAAC;AAsCzF,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;CAC5B;AAOD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM,qBA8mBnD"}
@@ -12,7 +12,7 @@ import { MenuToggle, Select, SelectList, SelectOption } from '@patternfly/react-
12
12
  import { AlertMessage, AlertType, ErrorBoundary, LoadingIndicator, ToastNotification } from '@rh-support/components';
13
13
  import { useGlobalStateContext } from '@rh-support/react-context';
14
14
  import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
15
- import { dtmTrackEvent, getDropdownBtnPlaceholder, getUrlParsedParams, scrollIntoView } from '@rh-support/utils';
15
+ import { dtmTrackEventCaseStepEncountered, getDropdownBtnPlaceholder, getUrlParsedParams, scrollIntoView, } from '@rh-support/utils';
16
16
  import cloneDeep from 'lodash/cloneDeep';
17
17
  import filter from 'lodash/filter';
18
18
  import findIndex from 'lodash/findIndex';
@@ -171,7 +171,7 @@ export default function CaseDiscussion(props) {
171
171
  };
172
172
  const onCommentAdded = () => __awaiter(this, void 0, void 0, function* () {
173
173
  yield updateDiscussionStateComments(dispatchDiscussion, caseDispatch, caseNumber, allDiscussions, sort, caseFeedbacksHydra.data, discussionFiltersListState);
174
- dtmTrackEvent('case details page comment', 'comment', caseNumber, `${product}|${version}`);
174
+ dtmTrackEventCaseStepEncountered('comment', caseNumber, product, version);
175
175
  });
176
176
  const onAttachmentAdded = () => __awaiter(this, void 0, void 0, function* () {
177
177
  yield updateDiscussionStateAttachments(dispatchDiscussion, caseNumber, allDiscussions, sort, loggedInUsersAccount.data.secureSupport, discussionFiltersListState);
@@ -326,10 +326,12 @@ export default function CaseDiscussion(props) {
326
326
  }
327
327
  // eslint-disable-next-line react-hooks/exhaustive-deps
328
328
  }, [isPostingRemoteRequestCommentCompleted]);
329
- const onToggleClick = () => {
329
+ const onToggleClick = (e) => {
330
+ e.stopPropagation();
330
331
  setIsOpen(!isOpen);
331
332
  };
332
- const onSortToggleClick = () => {
333
+ const onSortToggleClick = (e) => {
334
+ e.stopPropagation();
333
335
  setIsSortOpen(!isSortOpen);
334
336
  };
335
337
  const onFilterSelect = (_event, prevOption) => {
@@ -1 +1 @@
1
- {"version":3,"file":"CommentSearch.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.tsx"],"names":[],"mappings":"AAOA,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,qBAoG1C"}
1
+ {"version":3,"file":"CommentSearch.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.tsx"],"names":[],"mappings":"AAOA,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,qBAqG1C"}
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { Button, TextInput } from '@patternfly/react-core';
11
11
  import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
12
12
  import { humanizeSize } from '@rh-support/utils';
13
- import SearchApi, { INDEX_MODES } from 'js-worker-search';
13
+ import SearchApi from 'js-worker-search';
14
14
  import isEmpty from 'lodash/isEmpty';
15
15
  import React, { useState } from 'react';
16
16
  import { Trans, useTranslation } from 'react-i18next';
@@ -32,8 +32,9 @@ export function CommentSearch(props) {
32
32
  props.onCommentSearch([], '');
33
33
  return;
34
34
  }
35
+ // Removing indexMode: INDEX_MODES.PREFIXES parameter from SearchAPI to match all sub-strings by default
36
+ // Refer https://github.com/bvaughn/js-worker-search?tab=readme-ov-file#custom-index-mode
35
37
  const searchApi = new SearchApi({
36
- indexMode: INDEX_MODES.PREFIXES,
37
38
  caseSensitive: false,
38
39
  matchAnyToken: true,
39
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PostComment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/PostComment.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAQ7F,OAAO,EAAkB,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAsB5F,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,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,qBAyiBxC"}
1
+ {"version":3,"file":"PostComment.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/PostComment.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAQ7F,OAAO,EAAkB,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAsB5F,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,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,qBA6iBxC"}
@@ -209,7 +209,10 @@ export function PostComment(props) {
209
209
  const handleCheckboxToggle = () => {
210
210
  setIsPublic((publicComment) => !publicComment);
211
211
  };
212
- const isPostCommentDisabled = isProcessing || !commentText || isCommentTooLong;
212
+ function isCommentSignatureMatch() {
213
+ return commentText.trim() === commentSignature;
214
+ }
215
+ const isPostCommentDisabled = isProcessing || !commentText || isCommentSignatureMatch();
213
216
  const isFileUploadDisabled = isConfirmedStateSideSupport && !cssCommentAgreed;
214
217
  const onFileUploadClick = () => {
215
218
  ToastNotification.addInfoMessage(t('Uploading Attachment(s)'));
@@ -5,10 +5,38 @@
5
5
  .timeline {
6
6
  position: relative;
7
7
  max-width: 100%;
8
- margin: 0 auto;
8
+ margin: 24px auto;
9
9
  padding: 0 20px;
10
10
  }
11
11
 
12
+ .timeline-empty::after {
13
+ display: none;
14
+ }
15
+ .timeline::before {
16
+ bottom: var(--timeline-bottom, 0px);
17
+ }
18
+
19
+ .right-node {
20
+ white-space: nowrap;
21
+ overflow: hidden;
22
+ text-overflow: ellipsis;
23
+ width: 100%;
24
+ }
25
+ .content-date-right-history {
26
+ white-space: nowrap;
27
+ overflow: hidden;
28
+ text-overflow: ellipsis;
29
+ }
30
+
31
+ .timelineMenu button.pf-v5-c-button.pf-m-primary {
32
+ margin-bottom: 31px;
33
+ }
34
+
35
+ /* fixes a bug with datepicker month input being bigger than the day */
36
+ .timelineMenu div.pf-v5-c-calendar-month__header-year span.pf-v5-c-form-control input {
37
+ margin-bottom: -3px;
38
+ }
39
+
12
40
  .timeline::after {
13
41
  content: '';
14
42
  position: absolute;
@@ -21,7 +49,7 @@
21
49
 
22
50
  /* This value is calculated in timeline.tsx */
23
51
  bottom: calc(var(--timeline-bottom) + var(--timeline-bottom-offset, 18.35%));
24
- left: calc(13% + 13px);
52
+ left: calc(15% + 14.5px);
25
53
  transform: translateX(-50%);
26
54
  }
27
55
 
@@ -45,18 +73,49 @@
45
73
  z-index: 1;
46
74
  }
47
75
 
76
+ .timeline-controls {
77
+ display: flex;
78
+ justify-content: space-between;
79
+ align-items: center;
80
+ padding: 0.5rem 1rem;
81
+ margin: 0 -0.8rem;
82
+ }
83
+
84
+ .timeline-pagination {
85
+ flex-grow: 1;
86
+ display: flex;
87
+ align-items: center;
88
+ }
89
+ #options-menu-top-pagination {
90
+ display: flex !important;
91
+ flex-wrap: nowrap !important;
92
+ }
93
+ .timeline-sort-order-select {
94
+ width: auto;
95
+ margin-left: 1rem;
96
+ }
97
+
98
+ .timeline-controls:last-of-type {
99
+ justify-content: flex-start;
100
+ }
101
+
102
+ .timeline-controls:last-of-type .timeline-pagination {
103
+ flex-grow: 0;
104
+ }
105
+
48
106
  .timeline-node {
49
107
  display: flex;
50
108
  justify-content: space-between;
51
109
  align-items: flex-start;
52
110
  position: relative;
53
- margin-bottom: 20px;
111
+ margin-bottom: 32px;
54
112
  min-height: 80px;
113
+ max-height: 1em;
55
114
  }
56
115
 
57
116
  .timeline-avatar {
58
117
  position: absolute;
59
- left: calc(13% + 13px);
118
+ left: calc(15% + 15px);
60
119
  transform: translateX(-91%);
61
120
  top: 12px;
62
121
  z-index: 5;
@@ -69,15 +128,17 @@
69
128
  width: 10px;
70
129
  height: 10px;
71
130
  z-index: 2;
72
- left: calc(13% + 13px);
131
+ left: calc(15% + 15px);
73
132
  transform: translateX(-195%);
74
133
  top: 25px;
75
134
  }
76
135
 
77
136
  .left-node {
78
- flex: 0 0 13%;
79
- max-width: 13%;
137
+ flex: 0 0 15%;
138
+ max-width: 20%;
80
139
  padding-right: 24px;
140
+ margin-left: -2em;
141
+ margin-right: 24px;
81
142
  }
82
143
 
83
144
  .content-date-left-history {
@@ -96,6 +157,9 @@
96
157
  font-weight: 400;
97
158
  text-align: right;
98
159
  line-height: 30px;
160
+ padding-left: 1em;
161
+ white-space: nowrap;
162
+ overflow: hidden;
99
163
  }
100
164
 
101
165
  .content-date-right-history {
@@ -121,29 +185,27 @@
121
185
  .right-node {
122
186
  flex-grow: 1;
123
187
  padding-left: 2.8%;
188
+ margin-left: 1%;
124
189
  }
125
190
 
126
191
  .right-node::before {
127
192
  content: ' ';
128
- height: 0;
129
- position: relative;
130
- display: list-item;
193
+ position: absolute;
131
194
  top: 22.5px;
132
195
  width: 0;
133
- z-index: 1;
134
- left: -0.5%;
196
+ height: 0;
135
197
  border: medium solid white;
136
- border-width: 7px 0 7px 7px;
137
- border-color: transparent transparent transparent white;
138
- transform: rotate(180deg);
198
+ border-width: 7px 7px 7px 0;
199
+ border-color: transparent white transparent transparent;
200
+ transform: translateX(-100%);
139
201
  }
140
202
 
141
203
  .internal.right-node::before {
142
- border-color: transparent transparent transparent #ee0000;
204
+ border-right-color: #ee0000;
143
205
  }
144
206
 
145
207
  .customer.right-node::before {
146
- border-color: transparent transparent transparent #316dc1;
208
+ border-right-color: #316dc1;
147
209
  }
148
210
 
149
211
  .timeline-internal {
@@ -168,9 +230,9 @@
168
230
 
169
231
  .contentTimeline {
170
232
  padding: 16px;
171
- position: absolute;
233
+ /* position: absolute; */
172
234
  border-radius: 3px;
173
- margin-bottom: 32px;
235
+ /* margin-bottom: 32px; */
174
236
  }
175
237
 
176
238
  .content-right-history {
@@ -179,8 +241,7 @@
179
241
  border-left-style: solid !important;
180
242
  border-radius: 3px;
181
243
  border: 1px solid #d2d2d2;
182
- width: 80%;
183
- top: 0rem;
244
+ width: 100%;
184
245
  }
185
246
 
186
247
  .content-right-customer {
@@ -203,6 +264,9 @@ ul#case-history-paginated-timeline {
203
264
 
204
265
  .timelineMenu {
205
266
  display: flex;
267
+ justify-content: space-between;
268
+ align-items: center;
269
+ margin-bottom: 1rem;
206
270
  }
207
271
 
208
272
  .case-history-timeline-datepicker {
@@ -224,6 +288,16 @@ ul#case-history-paginated-timeline {
224
288
  width: 93.2%;
225
289
  }
226
290
 
291
+ @-moz-document url-prefix() {
292
+ .timeline-controls {
293
+ padding: 0.5rem 1rem;
294
+ }
295
+
296
+ #options-menu-top-pagination {
297
+ width: 15em;
298
+ }
299
+ }
300
+
227
301
  @media screen and (max-width: 768px) {
228
302
  .timeline::after {
229
303
  left: 20px;
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseHistory/Timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAwBxB,OAAO,KAAuD,MAAM,OAAO,CAAC;AAkO5E,QAAA,MAAM,QAAQ;;uBAgRb,CAAC;AACF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseHistory/Timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AA0BxB,OAAO,KAAsC,MAAM,OAAO,CAAC;AAgT3D,QAAA,MAAM,QAAQ;;uBAkUb,CAAC;AAEF,eAAe,QAAQ,CAAC"}