@rh-support/troubleshoot 0.2.95 → 0.2.98

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 (22) hide show
  1. package/lib/esm/components/CaseEditView/Case.d.ts.map +1 -1
  2. package/lib/esm/components/CaseEditView/Case.js +3 -2
  3. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseAlternateId.js +2 -1
  4. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseHostname.d.ts.map +1 -1
  5. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseHostname.js +28 -5
  6. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.d.ts.map +1 -1
  7. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.js +8 -4
  8. package/lib/esm/components/CaseInformation/SupportLevel.js +1 -1
  9. package/lib/esm/components/CaseManagement/NoClusterIDReasonSelector.d.ts.map +1 -1
  10. package/lib/esm/components/CaseManagement/NoClusterIDReasonSelector.js +0 -1
  11. package/lib/esm/components/CaseManagement/OpenShiftClusterId.d.ts.map +1 -1
  12. package/lib/esm/components/CaseManagement/OpenShiftClusterId.js +4 -2
  13. package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.d.ts +3 -3
  14. package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.d.ts.map +1 -1
  15. package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.js +93 -32
  16. package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
  17. package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +1 -4
  18. package/lib/esm/scss/_pf4-overrides.scss +5 -1
  19. package/lib/esm/utils/caseOpenshiftClusterIdUtils.d.ts +3 -3
  20. package/lib/esm/utils/caseOpenshiftClusterIdUtils.d.ts.map +1 -1
  21. package/lib/esm/utils/caseOpenshiftClusterIdUtils.js +5 -4
  22. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"Case.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseEditView/Case.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAS,mBAAmB,EAAiD,MAAM,kBAAkB,CAAC;AAmB7G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,EAAE,MAAM,eAkLzC"}
1
+ {"version":3,"file":"Case.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseEditView/Case.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAS,mBAAmB,EAAiD,MAAM,kBAAkB,CAAC;AAmB7G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,EAAE,MAAM,eAmLzC"}
@@ -1,5 +1,5 @@
1
1
  import { CoverSpinner, ErrorBoundary, OverviewContentLoader, ToastNotification, useDocumentTitle, usePrevious, } from '@rh-support/components';
2
- import { GlobalMetadataStateContext } from '@rh-support/react-context';
2
+ import { GlobalMetadataStateContext, HostnameAwarenessModal } from '@rh-support/react-context';
3
3
  import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
4
4
  import { getUrlParsedParams, isValidCaseNumber } from '@rh-support/utils';
5
5
  import isEmpty from 'lodash/isEmpty';
@@ -118,7 +118,8 @@ export default function Case(props) {
118
118
  React.createElement(CaseOverview, { caseNumber: caseNumber })),
119
119
  React.createElement(Switch, null,
120
120
  React.createElement(Route, { path: `${path}/:activeTab?` },
121
- React.createElement(CaseDetailsTabs, { basePath: url, caseNumber: caseNumber, routeProps: props.routeProps }))))))),
121
+ React.createElement(CaseDetailsTabs, { basePath: url, caseNumber: caseNumber, routeProps: props.routeProps }))))),
122
+ React.createElement(HostnameAwarenessModal, null))),
122
123
  React.createElement(CaseDetailsAside, { caseNumber: caseNumber }),
123
124
  React.createElement(CaseDetailsModals, { caseNumber: caseNumber, isSecureSupport: loggedInUsersAccount.data.secureSupport })))))));
124
125
  }
@@ -44,10 +44,11 @@ function CaseAlternateId(props) {
44
44
  // eslint-disable-next-line react-hooks/exhaustive-deps
45
45
  }, [alternateId]);
46
46
  const onAlternateIdChange = (e) => {
47
+ var _a;
47
48
  if (canEditCase.alert())
48
49
  return;
49
50
  setAlternateIdState(e.target.value);
50
- !caseNumber && setCaseDetails(caseDispatch, { alternateId: e.target.value.trim() });
51
+ !caseNumber && setCaseDetails(caseDispatch, { alternateId: (_a = e.target.value) === null || _a === void 0 ? void 0 : _a.trim() });
51
52
  };
52
53
  const updateAlternateId = () => __awaiter(this, void 0, void 0, function* () {
53
54
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"CaseHostname.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseHostname.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAY5D,UAAU,MAAO,SAAQ,gBAAgB;IACrC,cAAc,EAAE,OAAO,CAAC;CAC3B;AAMD,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,eA2HlC;kBA3HQ,YAAY;;;AA8HrB,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"CaseHostname.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseHostname.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAY5D,UAAU,MAAO,SAAQ,gBAAgB;IACrC,cAAc,EAAE,OAAO,CAAC;CAC3B;AAMD,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,eAgKlC;kBAhKQ,YAAY;;;AAmKrB,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -7,13 +7,14 @@ 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 { Popover, PopoverPosition } from '@patternfly/react-core';
11
- import { InlineEdit, LoadingIndicator, ToastNotification, ValueChangedIcon } from '@rh-support/components';
12
- import { useCanEditCase } from '@rh-support/react-context';
10
+ import { accounts } from '@cee-eng/hydrajs';
11
+ import { Popover, PopoverPosition, Switch } from '@patternfly/react-core';
12
+ import { InlineEdit, LoadingIndicator, ToastNotification, useFetch, ValueChangedIcon } from '@rh-support/components';
13
+ import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
13
14
  import { ability, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
14
15
  import isEmpty from 'lodash/isEmpty';
15
16
  import isEqual from 'lodash/isEqual';
16
- import React, { useEffect, useState } from 'react';
17
+ import React, { useContext, useEffect, useState } from 'react';
17
18
  import { Trans, useTranslation } from 'react-i18next';
18
19
  import { useCaseDispatch, useCaseSelector } from '../../../../context/CaseContext';
19
20
  import { HOSTNAME_LENGTH_LIMIT } from '../../../../reducers/CaseConstNTypes';
@@ -33,6 +34,13 @@ function CaseHostname(props) {
33
34
  const [hostnameState, setHostnameState] = useState(hostname);
34
35
  const [isHostnameUpdating, setIsHostnameUpdating] = useState(false);
35
36
  const canUseHostName = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.HOSTNAME);
37
+ const [isShareHostNamesChecked, setIsShareHostNamesChecked] = useState(false);
38
+ const { globalMetadataState: { loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
39
+ const { request: fetchHostnameDefault } = useFetch(accounts.getIsSharingHostname);
40
+ const userOriginalHostnameValue = () => __awaiter(this, void 0, void 0, function* () {
41
+ const fetchedHostnameStatus = yield fetchHostnameDefault(accountNumber);
42
+ setIsShareHostNamesChecked(fetchedHostnameStatus.shareHostnameWithRHT);
43
+ });
36
44
  // value changed logic to show a none local status change
37
45
  const [localHostnameChange, setLocalHostnameChange] = useState(false);
38
46
  const afterLocalChange = () => setLocalHostnameChange(false);
@@ -71,6 +79,21 @@ function CaseHostname(props) {
71
79
  useEffect(() => {
72
80
  setHostnameState(hostname);
73
81
  }, [hostname]);
82
+ const accountNumber = loggedInUsersAccount.data.accountNumber;
83
+ const { request: updateShareHostnames } = useFetch(accounts.updateIsSharingHostname);
84
+ const onShareHostnameCheck = () => __awaiter(this, void 0, void 0, function* () {
85
+ try {
86
+ yield updateShareHostnames(!isShareHostNamesChecked, accountNumber);
87
+ setIsShareHostNamesChecked(!isShareHostNamesChecked);
88
+ }
89
+ catch (error) {
90
+ console.log(error);
91
+ }
92
+ });
93
+ const shareHostnameLabel = 'Share hostnames with Red Hat';
94
+ const hostNameVisibilityContent = (React.createElement("div", null,
95
+ React.createElement("p", null, "Share hostnames with our support professionals for a smoother and faster experience."),
96
+ React.createElement(Switch, { label: shareHostnameLabel, isChecked: isShareHostNamesChecked, onChange: onShareHostnameCheck })));
74
97
  if (!canUseHostName) {
75
98
  return React.createElement(React.Fragment, null);
76
99
  }
@@ -80,7 +103,7 @@ function CaseHostname(props) {
80
103
  return (React.createElement(React.Fragment, null,
81
104
  React.createElement(InlineEdit, { labelProps: { htmlFor: 'case-details-hostname' }, formClassName: props.className || '', labelContent: React.createElement(React.Fragment, null,
82
105
  React.createElement(Trans, null, "Hostname"),
83
- React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, isLocalChange: localHostnameChange, value: hostname, getTooltipContent: getChangedValueTooltip(() => CaseValuesToWatch.hostname) })), helperContent: React.createElement(Popover, { "aria-label": "Hostname Info", position: PopoverPosition.auto, bodyContent: React.createElement(Trans, null, "Hostname is not visible to Red Hat Support professionals."), closeBtnAriaLabel: "Close" },
106
+ React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, isLocalChange: localHostnameChange, value: hostname, getTooltipContent: getChangedValueTooltip(() => CaseValuesToWatch.hostname) })), helperContent: React.createElement(Popover, { "aria-label": "Hostname Info", position: PopoverPosition.auto, bodyContent: hostNameVisibilityContent, closeBtnAriaLabel: "Close", headerContent: 'Hostname Visibility', onShow: () => userOriginalHostnameValue() },
84
107
  React.createElement("i", { "aria-label": "Hostname Info", className: "m-l-1 fa fa-question-circle" })), allowInlineEdit: props.inlineEditable, content: hostname, saveDisabled: isHostNameEmpty || hostnameState === hostname || isHostnameUpdating || lengthError, onSave: onSave, onCancel: onCancel, initialIsEditing: false, loadingIndicator: isHostnameUpdating ? React.createElement(LoadingIndicator, { show: isHostnameUpdating, isInline: true }) : null },
85
108
  React.createElement("input", { type: "text", id: "case-details-hostname", className: `form-control${lengthError ? ' form-invalid' : ''}`, name: "case-details-hostname", value: hostnameState, onChange: onHostnameChange, disabled: isHostnameUpdating, "data-tracking-id": "case-details-hostname", "aria-invalid": lengthError })),
86
109
  lengthError && (React.createElement("div", { className: "pull-top" },
@@ -1 +1 @@
1
- {"version":3,"file":"CaseOpenshiftClusterId.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,gBAkPrC"}
1
+ {"version":3,"file":"CaseOpenshiftClusterId.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,sBAAsB,gBA2PrC"}
@@ -54,7 +54,9 @@ export function CaseOpenshiftClusterId() {
54
54
  if (!openshiftClusterID || getIsClusterIdInvalid(openshiftClusterID))
55
55
  return;
56
56
  let openshiftClusterVersion;
57
- if (clusterDetails && clusterDetails.external_id === openshiftClusterID && clusterDetails.openshift_version) {
57
+ if (clusterDetails &&
58
+ clusterDetails.external_cluster_id === openshiftClusterID &&
59
+ clusterDetails.openshift_version) {
58
60
  openshiftClusterVersion = clusterDetails.openshift_version;
59
61
  }
60
62
  else {
@@ -70,7 +72,7 @@ export function CaseOpenshiftClusterId() {
70
72
  const hasCluster = yield isClusterIdEnabledForProduct(product, (_b = allProducts.data) === null || _b === void 0 ? void 0 : _b.productsResult);
71
73
  setShowClusterId(hasCluster);
72
74
  // when product changes from a product with cluster to a product without cluster, reset the clusterId
73
- const isResetClusterID = (!hasCluster || isOpenShiftV3) && openshiftClusterID;
75
+ const isResetClusterID = !hasCluster || isOpenShiftV3;
74
76
  if (isResetClusterID) {
75
77
  const caseDetails = {
76
78
  openshiftClusterID: '',
@@ -79,6 +81,8 @@ export function CaseOpenshiftClusterId() {
79
81
  };
80
82
  yield clusterIdUpdate(caseDetails, false);
81
83
  setCaseDetails(caseDispatch, caseDetails);
84
+ setLocalOpenshiftClusterIDState('');
85
+ clusterStateReset();
82
86
  }
83
87
  });
84
88
  if ((((_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) || []).length) {
@@ -89,7 +93,7 @@ export function CaseOpenshiftClusterId() {
89
93
  // user may change product and version we need to reset internal state
90
94
  // context api state will be reset on parent component each time user changes product and version
91
95
  useEffect(() => {
92
- clusterStateReset(); //=>
96
+ clusterStateReset();
93
97
  }, [product, version]);
94
98
  /**
95
99
  * Hook to make sure that if cluster id comes from session or someother source
@@ -125,7 +129,7 @@ export function CaseOpenshiftClusterId() {
125
129
  }
126
130
  });
127
131
  const onClusterIdSave = (selectedCluster) => __awaiter(this, void 0, void 0, function* () {
128
- const selectedClusterId = selectedCluster === null || selectedCluster === void 0 ? void 0 : selectedCluster.external_id;
132
+ const selectedClusterId = selectedCluster === null || selectedCluster === void 0 ? void 0 : selectedCluster.external_cluster_id;
129
133
  if (isEmpty(selectedClusterId))
130
134
  return;
131
135
  setLocalOpenshiftClusterIDState(selectedClusterId);
@@ -76,7 +76,7 @@ function SupportLevel(props) {
76
76
  React.createElement("p", null,
77
77
  "Learn more about our",
78
78
  ' ',
79
- React.createElement("a", { href: "/support/offerings/production/sla.html", target: "_blank" }, "production support service level agreement"))), closeBtnAriaLabel: "Close" },
79
+ React.createElement("a", { href: "/support/offerings/production/sla", target: "_blank" }, "production support service level agreement"))), closeBtnAriaLabel: "Close" },
80
80
  React.createElement("i", { "aria-label": "Support Level info", className: "fa fa-question-circle" })),
81
81
  React.createElement(Dropdown, { id: "open-case-support-level", name: "open-case-support-level", placeholder: "Select", title: `Select Support Level`, list: getSlaList(), selectedItem: toOption({ slaProcessId: selectedSla }, { labelKey: 'slaProcessId' }), disabled: ownersEntitlements.isError || isEmpty(ownersEntitlements.data), isLoadingList: ownersEntitlements.isFetching, isInValid: isSupportLevelInValid, required: true, onChange: onEntitlementChange, onOuterClick: validateSupportLevel, "data-tracking-id": "open-case-support-level" }),
82
82
  isEmpty(ownersEntitlements.data) && (React.createElement("p", { className: "form-instructions" }, ownersEntitlements.isError ? t('Error loading support levels') : t('No active subscriptions')))));
@@ -1 +1 @@
1
- {"version":3,"file":"NoClusterIDReasonSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/NoClusterIDReasonSelector.tsx"],"names":[],"mappings":"AAcA,UAAU,MAAM;IACZ,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,4BAA4B,EAAE,MAAM,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AA0BD,QAAA,MAAM,yBAAyB,UAAW,MAAM,gBAsI/C,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"NoClusterIDReasonSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/NoClusterIDReasonSelector.tsx"],"names":[],"mappings":"AAcA,UAAU,MAAM;IACZ,uBAAuB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,4BAA4B,EAAE,MAAM,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AA0BD,QAAA,MAAM,yBAAyB,UAAW,MAAM,gBAqI/C,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -74,7 +74,6 @@ const NoClusterIDReasonSelector = (props) => {
74
74
  setIsOpen(false);
75
75
  setInputVal(input);
76
76
  props.onReasonInputBoxChanged(input);
77
- props.onReasonChange('Other');
78
77
  };
79
78
  useEffect(() => {
80
79
  if (haventLoadedMetadata(caseNoClusterIdReasons)) {
@@ -1 +1 @@
1
- {"version":3,"file":"OpenShiftClusterId.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/OpenShiftClusterId.tsx"],"names":[],"mappings":"AAwBA,eAAO,MAAM,oBAAoB,mBAShC,CAAC;AAEF,eAAO,MAAM,uBAAuB,mBAInC,CAAC;AAEF,eAAO,MAAM,4BAA4B,mBAKxC,CAAC;AAEF,eAAO,MAAM,qBAAqB,mBAIjC,CAAC;AAEF,wBAAgB,kBAAkB,gBAsRjC"}
1
+ {"version":3,"file":"OpenShiftClusterId.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/OpenShiftClusterId.tsx"],"names":[],"mappings":"AAwBA,eAAO,MAAM,oBAAoB,mBAShC,CAAC;AAEF,eAAO,MAAM,uBAAuB,mBAInC,CAAC;AAEF,eAAO,MAAM,4BAA4B,mBAKxC,CAAC;AAEF,eAAO,MAAM,qBAAqB,mBAIjC,CAAC;AAEF,wBAAgB,kBAAkB,gBA6RjC"}
@@ -96,7 +96,9 @@ export function OpenShiftClusterId() {
96
96
  if (!openshiftClusterID || getIsClusterIdInvalid(openshiftClusterID))
97
97
  return;
98
98
  let openshiftClusterVersion;
99
- if (clusterDetails && clusterDetails.external_id === openshiftClusterID && clusterDetails.openshift_version) {
99
+ if (clusterDetails &&
100
+ clusterDetails.external_cluster_id === openshiftClusterID &&
101
+ clusterDetails.openshift_version) {
100
102
  openshiftClusterVersion = clusterDetails.openshift_version;
101
103
  }
102
104
  else {
@@ -162,7 +164,7 @@ export function OpenShiftClusterId() {
162
164
  // eslint-disable-next-line react-hooks/exhaustive-deps
163
165
  }, [v3ClusterName, noClusterIdReason]);
164
166
  const onClusterIdStateUpdate = (selectedCluster) => {
165
- const selectedId = selectedCluster.external_id;
167
+ const selectedId = selectedCluster.external_cluster_id;
166
168
  if (isEmpty(selectedId))
167
169
  return;
168
170
  resetClusterData();
@@ -1,15 +1,15 @@
1
- import { ICluster } from '@rh-support/api';
1
+ import { IClusterSubscription } from '@cee-eng/hydrajs/@types/models/cloud';
2
2
  import { IDClassNameProps } from '@rh-support/types/shared';
3
3
  interface IProps extends IDClassNameProps {
4
4
  openshiftClusterIDState: string;
5
- onClusterIdStateUpdate: (cluster: Partial<ICluster>, value?: string) => void;
5
+ onClusterIdStateUpdate: (cluster: Partial<IClusterSubscription>, value?: string) => void;
6
6
  isClusterIdInvalid: boolean;
7
7
  clusterIdDropdownFormInstructions?: JSX.Element;
8
8
  onClusterClear: () => void;
9
9
  isV4: boolean;
10
10
  isDisabled?: boolean;
11
11
  }
12
- declare const fetchClusterIdDetails: (clusterId: string) => Promise<ICluster>;
12
+ declare const fetchClusterIdDetails: (clusterId: string) => Promise<import("@cee-eng/hydrajs/@types/models/cloud").ICluster>;
13
13
  declare function OpenshiftDropdownV4(props: IProps): JSX.Element;
14
14
  declare namespace OpenshiftDropdownV4 {
15
15
  var defaultProps: {};
@@ -1 +1 @@
1
- {"version":3,"file":"OpenshiftDropdownV4.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/OpenshiftDropdownV4.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsB,QAAQ,EAAqB,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAuB,MAAM,0BAA0B,CAAC;AAUjF,UAAU,MAAO,SAAQ,gBAAgB;IACrC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iCAAiC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAcD,QAAA,MAAM,qBAAqB,cAAqB,MAAM,sBASrD,CAAC;AAeF,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,eA6OzC;kBA7OQ,mBAAmB;;;AAgP5B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"OpenshiftDropdownV4.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/OpenshiftDropdownV4.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAgC,MAAM,sCAAsC,CAAC;AAE1G,OAAO,EAAE,gBAAgB,EAAuB,MAAM,0BAA0B,CAAC;AAYjF,UAAU,MAAO,SAAQ,gBAAgB;IACrC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iCAAiC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAChD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAQD,QAAA,MAAM,qBAAqB,cAAqB,MAAM,qEASrD,CAAC;AAeF,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,eAgTzC;kBAhTQ,mBAAmB;;;AAmT5B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -7,12 +7,13 @@ 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 { Divider, Select, SelectOption, SelectVariant } from '@patternfly/react-core';
11
- import { getAccountClusters } from '@rh-support/api';
12
- import { useFetch } from '@rh-support/components';
10
+ import { cloud } from '@cee-eng/hydrajs';
11
+ import { Checkbox, Divider, Select, SelectOption, SelectVariant } from '@patternfly/react-core';
13
12
  import find from 'lodash/find';
14
13
  import groupBy from 'lodash/groupBy';
15
14
  import isEmpty from 'lodash/isEmpty';
15
+ import map from 'lodash/map';
16
+ import merge from 'lodash/merge';
16
17
  import React, { useEffect, useRef, useState } from 'react';
17
18
  import { Trans, useTranslation } from 'react-i18next';
18
19
  import { getDisplayNameForCluster } from '../../utils/caseOpenshiftClusterIdUtils';
@@ -24,19 +25,19 @@ const defaultProps = {
24
25
  };
25
26
  const fetchClusterIdDetails = (clusterId) => __awaiter(void 0, void 0, void 0, function* () {
26
27
  try {
27
- const clustersResponse = yield getAccountClusters({
28
+ const clustersResponse = yield cloud.getAccountClusters({
28
29
  order: 'display_name asc',
29
- search: `external_id ILIKE '%${clusterId}%'`,
30
+ search: `external_id ILIKE '%${clusterId}%'`,
30
31
  });
31
32
  const clusterDetails = (clustersResponse.items || []).find((item) => item.external_id === clusterId);
32
33
  return clusterDetails;
33
34
  }
34
35
  catch (e) { }
35
36
  });
36
- const createState = (external_id, display_name) => {
37
+ const createState = (external_cluster_id, display_name) => {
37
38
  return {
38
39
  display_name,
39
- external_id,
40
+ external_cluster_id,
40
41
  toString: () => display_name || '',
41
42
  compareTo: function (value) {
42
43
  const displayName = this.toString().toLowerCase();
@@ -47,16 +48,16 @@ const createState = (external_id, display_name) => {
47
48
  };
48
49
  function OpenshiftDropdownV4(props) {
49
50
  const { t } = useTranslation();
51
+ const OLD_API_PER_PAGE_GET_ALL = 5000;
50
52
  const PER_PAGE = 200;
51
- const { request: getAccountClustersRequest, isFetching: isFetchingClusters } = useFetch(getAccountClusters, {
52
- propgateErrors: true,
53
- });
54
53
  const [clustersRawResponse, setClustersRawResponse] = useState([]);
55
54
  const abortControllerRef = useRef(undefined);
56
55
  const [clustersSelectOptions, setClustersSelectOptions] = useState([]);
57
56
  const [isOpen, setIsOpen] = useState(false);
58
57
  const [validated, setValidated] = useState('default');
59
58
  const [inputVal, setInputVal] = useState('');
59
+ const [showArchivedClusters, setShowArchivedClusters] = useState(false);
60
+ const [isFetchingClusters, setIsFetchingClusters] = useState(false);
60
61
  // gets a cluster id and returns display name
61
62
  const getDisplayNameById = (clusters, id) => {
62
63
  if (isEmpty(id))
@@ -65,7 +66,7 @@ function OpenshiftDropdownV4(props) {
65
66
  return t("I don't have my Cluster ID");
66
67
  if (id === 'v3-cluster')
67
68
  return t('The case is for a v3 cluster');
68
- const cluster = find(clusters, (o) => o.external_id === id);
69
+ const cluster = find(clusters, (o) => o.external_cluster_id === id);
69
70
  return isEmpty(cluster) ? id : getDisplayNameForCluster(cluster);
70
71
  };
71
72
  const onDropdownClear = () => __awaiter(this, void 0, void 0, function* () {
@@ -75,15 +76,24 @@ function OpenshiftDropdownV4(props) {
75
76
  });
76
77
  const onToggle = (isOpen) => setIsOpen(isOpen);
77
78
  const onViewMoreClick = () => __awaiter(this, void 0, void 0, function* () {
78
- const fetchedClusters = yield fetchAccountClusters();
79
+ const fetchedClusters = yield fetchAccountClusters(inputVal);
79
80
  const clusterResponse = [...clustersRawResponse, ...fetchedClusters.items];
80
81
  setClustersRawResponse(clusterResponse);
81
82
  setClustersSelectOptions(getClusterOptions(clusterResponse));
82
83
  });
83
84
  const onSelect = (event, selectedCluster) => __awaiter(this, void 0, void 0, function* () {
84
85
  setInputVal('');
85
- props.onClusterIdStateUpdate(selectedCluster);
86
- setIsOpen(false);
86
+ if (event.target.tagName !== 'BUTTON') {
87
+ // checkbox is clicked
88
+ setShowArchivedClusters(!showArchivedClusters);
89
+ // reset
90
+ props.onClusterClear();
91
+ setClustersRawResponse([]);
92
+ }
93
+ else {
94
+ props.onClusterIdStateUpdate(selectedCluster);
95
+ setIsOpen(false);
96
+ }
87
97
  });
88
98
  const getClusterOptions = (clusters) => {
89
99
  const clustersResponseGrouped = groupBy(clusters, 'dns.base_domain') || [];
@@ -101,22 +111,28 @@ function OpenshiftDropdownV4(props) {
101
111
  domain !== 'undefined' &&
102
112
  clusterOptions.push(React.createElement(SelectOption, { isDisabled: true, className: "pf-u-font-weight-bold pf-u-color-400", value: createState(domain, domain), key: domain + index }));
103
113
  clustersResponseGrouped[domain].forEach((cluster, i) => {
104
- clusterOptions.push(React.createElement(SelectOption, { key: i + cluster.external_id, value: createState(cluster.external_id, cluster.display_name) }));
114
+ clusterOptions.push(React.createElement(SelectOption, { key: cluster.external_cluster_id, value: createState(cluster.external_cluster_id, cluster.display_name) }));
105
115
  });
106
116
  clusterOptions.push(React.createElement(Divider, { component: "div", key: index + domain }));
107
117
  });
108
118
  return [
109
- ...clusterOptions,
119
+ React.createElement(SelectOption, { key: 'show-hide-archived-clusters', inputId: "check-box" },
120
+ React.createElement(Checkbox, { label: t('Show archived clusters'), key: "show-archived-clusters", "aria-label": t('Show archived clusters'), id: "show-archived-clusters", "data-tracking-id": "show-hide-archived-clusters", isChecked: showArchivedClusters })),
121
+ React.createElement(Divider, { component: "div", key: 'cluster-id-options-divider-e' }),
122
+ React.createElement(SelectOption, { key: 'dont-have-id', value: createState('dont-have-id', t("I don't have my Cluster ID")) }),
110
123
  ...(!props.isV4
111
124
  ? [
112
125
  React.createElement(SelectOption, { key: 'v3-cluster', value: createState('v3-cluster', t('The case is for a v3 cluster')) }),
113
126
  ]
114
127
  : []),
115
- React.createElement(SelectOption, { key: 'dont-have-id', value: createState('dont-have-id', t("I don't have my Cluster ID")) }),
128
+ ...(clusterOptions.length !== 0 ? [React.createElement(Divider, { component: "div", key: 'cluster-id-options-divider' })] : []),
129
+ ...clusterOptions,
116
130
  ];
117
131
  };
118
132
  const fetchAccountClusters = (search = '') => __awaiter(this, void 0, void 0, function* () {
133
+ var _a, _b;
119
134
  const page = Math.floor(clustersRawResponse.length / PER_PAGE) + 1;
135
+ setIsFetchingClusters(true);
120
136
  try {
121
137
  if (abortControllerRef.current !== undefined) {
122
138
  // Cancel the previous request
@@ -125,26 +141,71 @@ function OpenshiftDropdownV4(props) {
125
141
  // recreate a new AbortController for each call
126
142
  let controller = new AbortController();
127
143
  abortControllerRef.current = controller;
144
+ let clustersResponse;
128
145
  // query language: https://github.com/yaacov/tree-search-language
129
- const clustersResponse = yield getAccountClustersRequest({
130
- order: 'display_name asc',
131
- page,
132
- size: PER_PAGE,
133
- search: `external_id ILIKE '%${search}%' OR display_name ILIKE '%${search}%' OR dns.base_domain ILIKE '%${search}%'`,
134
- }, controller.signal);
135
- const items = clustersResponse.items.map((item) => ({
136
- display_name: getDisplayNameForCluster(item),
137
- external_id: item.external_id,
138
- dns: item.dns,
139
- }));
146
+ // old api has dns info but we cannot exclude archived clusters
147
+ // new api doesn't have dns info but we can exclude archived clusters
148
+ if (showArchivedClusters) {
149
+ // call old api
150
+ clustersResponse = yield cloud.getAccountClusters({
151
+ order: 'display_name asc',
152
+ page,
153
+ size: PER_PAGE,
154
+ search: `external_id ILIKE '%${search}%' OR display_name ILIKE '%${search}%' OR dns.base_domain ILIKE '%${search}%'`,
155
+ }, controller.signal);
156
+ clustersResponse = clustersResponse.items;
157
+ }
158
+ else {
159
+ // call old api get all clusters and call new api get limitted number of clusters
160
+ // then add dns info to the new api response
161
+ const clustersResponses = yield Promise.allSettled([
162
+ cloud.getAccountClustersSubscription({
163
+ order: 'display_name asc',
164
+ page,
165
+ size: PER_PAGE,
166
+ search: `${showArchivedClusters ? '' : "status!='Archived' AND "} (external_cluster_id ILIKE '%${search}%' OR display_name ILIKE '%${search}%')`,
167
+ fields: 'external_cluster_id,display_name,status,metrics.openshift_version',
168
+ }, controller.signal),
169
+ cloud.getAccountClusters({
170
+ order: 'display_name asc',
171
+ page: 1,
172
+ size: OLD_API_PER_PAGE_GET_ALL,
173
+ search: `external_id ILIKE '%${search}%' OR display_name ILIKE '%${search}%' OR dns.base_domain ILIKE '%${search}%'`,
174
+ }, controller.signal),
175
+ ]);
176
+ if (clustersResponses[0].status === 'fulfilled' && clustersResponses[1].status === 'fulfilled') {
177
+ const newApi = ((_a = clustersResponses[0].value) === null || _a === void 0 ? void 0 : _a.items) || [];
178
+ const oldApi = ((_b = clustersResponses[1].value) === null || _b === void 0 ? void 0 : _b.items) || [];
179
+ clustersResponse = map(newApi, function (item) {
180
+ return merge(item, find(oldApi, { external_id: item.external_cluster_id }));
181
+ });
182
+ }
183
+ else if (clustersResponses[0].status === 'fulfilled' && clustersResponses[1].status === 'rejected') {
184
+ clustersResponse = clustersResponses[0].value.items;
185
+ }
186
+ else {
187
+ clustersResponse = [];
188
+ }
189
+ }
190
+ const items = clustersResponse.map((item) => {
191
+ var _a, _b;
192
+ return ({
193
+ display_name: getDisplayNameForCluster(item),
194
+ external_cluster_id: item.external_cluster_id || item.external_id,
195
+ openshift_version: item.openshift_version || ((_b = (_a = item === null || item === void 0 ? void 0 : item.metrics) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.openshift_version) || '',
196
+ dns: item.dns || {},
197
+ });
198
+ });
199
+ setIsFetchingClusters(false);
140
200
  return {
141
201
  items,
142
- totalResult: clustersResponse.total,
143
- page: clustersResponse.page,
202
+ totalResult: clustersResponse.length,
203
+ page,
144
204
  };
145
205
  }
146
206
  catch (e) {
147
207
  // silently fails
208
+ setIsFetchingClusters(false);
148
209
  return { items: [], totalResult: 0, page: 0 };
149
210
  }
150
211
  });
@@ -154,7 +215,7 @@ function OpenshiftDropdownV4(props) {
154
215
  useEffect(() => {
155
216
  let isUnmounted = false;
156
217
  const fetchClusters = () => __awaiter(this, void 0, void 0, function* () {
157
- const fetchedClusters = yield fetchAccountClusters();
218
+ const fetchedClusters = yield fetchAccountClusters(inputVal);
158
219
  if (!isUnmounted) {
159
220
  setClustersSelectOptions(getClusterOptions(fetchedClusters.items));
160
221
  setClustersRawResponse(fetchedClusters.items);
@@ -165,7 +226,7 @@ function OpenshiftDropdownV4(props) {
165
226
  isUnmounted = true;
166
227
  };
167
228
  // eslint-disable-next-line react-hooks/exhaustive-deps
168
- }, [props.isV4]);
229
+ }, [props.isV4, showArchivedClusters]);
169
230
  useEffect(() => {
170
231
  if (props.isClusterIdInvalid) {
171
232
  setValidated('error');
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalTroubleshootEffects.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/GlobalTroubleshootEffects.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAWvD,OAAO,EAAqB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAOrF,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,eA2XtD"}
1
+ {"version":3,"file":"GlobalTroubleshootEffects.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/GlobalTroubleshootEffects.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAWvD,OAAO,EAAqB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAOrF,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,eAqXtD"}
@@ -293,10 +293,7 @@ export function GlobalTroubleshootEffects(props) {
293
293
  const previousActiveSessionId = usePrevious(activeSessionId);
294
294
  useEffect(() => {
295
295
  var _a;
296
- if (isEmpty(product) ||
297
- isEmpty(version) ||
298
- isEmpty(previousVersion) ||
299
- activeSessionId !== previousActiveSessionId)
296
+ if (isEmpty(product) || isEmpty(version) || activeSessionId !== previousActiveSessionId)
300
297
  return;
301
298
  // we need to reset openshift cluster states only when major version is different
302
299
  const oldMajorVersion = previousVersion && getVersion(previousVersion).major;
@@ -301,6 +301,10 @@ section.grid-aside-content pfe-accordion {
301
301
  --pfe-accordion--FontSize--header: 16px;
302
302
  --pfe-accordion--FontWeight--header: 600;
303
303
  }
304
+
305
+ div.pf-c-modal-box__body label.pf-c-switch {
306
+ padding: 1rem;
307
+ }
304
308
  // override added padding
305
309
  div.pf-c-alert__description div.ea-rule p a.pf-c-button {
306
310
  padding: 0;
@@ -310,4 +314,4 @@ div.pf-c-alert__description div.ea-rule p a.pf-c-button {
310
314
  div pfe-accordion {
311
315
  --pfe-accordion--FontSize--header: 16px;
312
316
  --pfe-accordion--FontWeight--header: 600;
313
- }
317
+ }
@@ -1,7 +1,7 @@
1
+ import { IClusterSubscriptionExtended } from '@cee-eng/hydrajs/@types/models/cloud';
1
2
  import { ISEProduct } from '@cee-eng/hydrajs/@types/models/product';
2
- import { ICluster } from '@rh-support/api';
3
- export declare const getDisplayNameById: (clusters: Partial<ICluster>[], id: string) => string;
4
- export declare const getDisplayNameForCluster: (cluster: Partial<ICluster>) => string;
3
+ export declare const getDisplayNameById: (clusters: Partial<IClusterSubscriptionExtended>[], id: string) => string;
4
+ export declare const getDisplayNameForCluster: (cluster: Partial<IClusterSubscriptionExtended>) => string;
5
5
  export declare const invalidGuidHelperText = "Please enter a valid Cluster ID (For example: d3aa88e2-c754-41e0-8ba6-4198a34aa0a2)";
6
6
  export declare const isClusterIdEnabledForProduct: (selectedProduct: string, allProducts: Partial<ISEProduct>[]) => boolean;
7
7
  export declare const isOpenShiftV3Product: (product: string, pcmConfig: any) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"caseOpenshiftClusterIdUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseOpenshiftClusterIdUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM3C,eAAO,MAAM,kBAAkB,aAAc,QAAQ,QAAQ,CAAC,EAAE,MAAM,MAAM,WAI3E,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAAa,QAAQ,QAAQ,CAAC,WAIlE,CAAC;AAEF,eAAO,MAAM,qBAAqB,wFACuD,CAAC;AAE1F,eAAO,MAAM,4BAA4B,oBAAqB,MAAM,eAAe,QAAQ,UAAU,CAAC,EAAE,YAIvG,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,4BAenD,CAAC;AAEF,eAAO,MAAM,qBAAqB,sCACkC,CAAC"}
1
+ {"version":3,"file":"caseOpenshiftClusterIdUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseOpenshiftClusterIdUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAMpE,eAAO,MAAM,kBAAkB,aAAc,QAAQ,4BAA4B,CAAC,EAAE,MAAM,MAAM,WAI/F,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAAa,QAAQ,4BAA4B,CAAC,WAKtF,CAAC;AAEF,eAAO,MAAM,qBAAqB,wFACuD,CAAC;AAE1F,eAAO,MAAM,4BAA4B,oBAAqB,MAAM,eAAe,QAAQ,UAAU,CAAC,EAAE,YAIvG,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,4BAenD,CAAC;AAEF,eAAO,MAAM,qBAAqB,sCACkC,CAAC"}
@@ -5,15 +5,16 @@ import isEmpty from 'lodash/isEmpty';
5
5
  export const getDisplayNameById = (clusters, id) => {
6
6
  if (isEmpty(id))
7
7
  return '';
8
- const cluster = find(clusters, (o) => o.external_id === id);
8
+ const cluster = find(clusters, (o) => o.external_cluster_id === id);
9
9
  return isEmpty(cluster) ? `${id}` : cluster.display_name;
10
10
  };
11
11
  export const getDisplayNameForCluster = (cluster) => {
12
12
  if (isEmpty(cluster))
13
13
  return '';
14
- if (isEmpty(cluster.display_name) || cluster.display_name === cluster.external_id)
15
- return `${cluster.external_id}`;
16
- return `${cluster.external_id} <${cluster.display_name}>`;
14
+ const clusterId = (cluster === null || cluster === void 0 ? void 0 : cluster.external_cluster_id) || cluster.external_id;
15
+ if (isEmpty(cluster.display_name) || cluster.display_name === clusterId)
16
+ return clusterId;
17
+ return `${clusterId} <${cluster.display_name}>`;
17
18
  };
18
19
  export const invalidGuidHelperText = 'Please enter a valid Cluster ID (For example: d3aa88e2-c754-41e0-8ba6-4198a34aa0a2)';
19
20
  export const isClusterIdEnabledForProduct = (selectedProduct, allProducts) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/troubleshoot",
3
- "version": "0.2.95",
3
+ "version": "0.2.98",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -26,7 +26,7 @@
26
26
  "lib/**/*"
27
27
  ],
28
28
  "peerDependencies": {
29
- "@cee-eng/hydrajs": "4.8.34",
29
+ "@cee-eng/hydrajs": "4.9.1",
30
30
  "@cee-eng/ui-toolkit": "1.1.6",
31
31
  "@patternfly/patternfly": "4.185.1",
32
32
  "@patternfly/pfe-accordion": "1.12.3",
@@ -63,7 +63,7 @@
63
63
  "react-virtualized": "^9.21.2"
64
64
  },
65
65
  "dependencies": {
66
- "@cee-eng/hydrajs": "4.8.34",
66
+ "@cee-eng/hydrajs": "4.9.1",
67
67
  "@cee-eng/ui-toolkit": "1.1.6",
68
68
  "@patternfly/patternfly": "4.185.1",
69
69
  "@patternfly/pfe-accordion": "1.12.3",
@@ -73,12 +73,12 @@
73
73
  "@patternfly/react-core": "4.202.16",
74
74
  "@progress/kendo-drawing": "^1.6.0",
75
75
  "@progress/kendo-react-pdf": "^3.12.0",
76
- "@rh-support/api": "0.3.14",
77
- "@rh-support/components": "1.1.58",
78
- "@rh-support/react-context": "0.2.58",
76
+ "@rh-support/api": "0.3.15",
77
+ "@rh-support/components": "1.1.59",
78
+ "@rh-support/react-context": "0.2.59",
79
79
  "@rh-support/types": "0.2.0",
80
- "@rh-support/user-permissions": "0.2.46",
81
- "@rh-support/utils": "0.2.35",
80
+ "@rh-support/user-permissions": "0.2.47",
81
+ "@rh-support/utils": "0.2.36",
82
82
  "@types/react-redux": "^7.1.12",
83
83
  "@types/redux": "^3.6.0",
84
84
  "@webcomponents/webcomponentsjs": "^2.2.10",
@@ -143,5 +143,5 @@
143
143
  "not ie <= 11",
144
144
  "not op_mini all"
145
145
  ],
146
- "gitHead": "c64dcee1e1d2cdc0251d656b1ae85d146bfe0d66"
146
+ "gitHead": "99ba6c8857a4963a567df96563b10eb37f6b1bd4"
147
147
  }