@rh-support/manage 1.0.301-beta.1 → 1.0.301-beta.2

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.
@@ -0,0 +1,2 @@
1
+ export declare const NonOrgCustomerInfoModal: () => JSX.Element;
2
+ //# sourceMappingURL=NonOrgCustomerInfoModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NonOrgCustomerInfoModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/NonOrgCustomerInfoModal.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,mBA2BnC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Button, ButtonVariant, Modal, ModalVariant } from '@patternfly/react-core';
2
+ import React from 'react';
3
+ import { Trans, useTranslation } from 'react-i18next';
4
+ export const NonOrgCustomerInfoModal = () => {
5
+ const [isModalOpen, setIsModalOpen] = React.useState(true);
6
+ const { t } = useTranslation();
7
+ const handleModalToggle = () => {
8
+ setIsModalOpen(!isModalOpen);
9
+ };
10
+ return (React.createElement(Modal, { variant: ModalVariant.small, title: t('Confirm partnership collaboration'), isOpen: isModalOpen, onClose: handleModalToggle, actions: [
11
+ React.createElement(Button, { key: "cancel", variant: ButtonVariant.primary, onClick: handleModalToggle, "data-tracking-id": "confirm-partnership-collaboration-no-org-admin" },
12
+ React.createElement(Trans, null, "Cancel")),
13
+ ] },
14
+ React.createElement(Trans, null, "Only org admin customers can confirm partnership collaboration")));
15
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"PartnershipsList.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsList.tsx"],"names":[],"mappings":"AAwBA,wBAAgB,gBAAgB,gBAwM/B"}
1
+ {"version":3,"file":"PartnershipsList.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsList.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,gBAAgB,gBA0M/B"}
@@ -15,7 +15,8 @@ import { fetchAccountManagers, fetchManagedAccounts, GlobalMetadataDispatchConte
15
15
  import { haventLoadedMetadata } from '@rh-support/utils';
16
16
  import React, { useContext, useEffect, useState } from 'react';
17
17
  import { Trans, useTranslation } from 'react-i18next';
18
- import { useManagePartnershipsContext } from '../../context/ManagePartnershipsProvider';
18
+ import { useManagePartnershipsContext, useManagePartnershipsDispatchContext, } from '../../context/ManagePartnershipsProvider';
19
+ import { setIsUpdatingAccounts } from '../../reducers/ManagePartnershipsReducer';
19
20
  import { ManageTable } from '../ManageTable';
20
21
  import { RequestCollaborationModal } from './RequestCollaborationModal';
21
22
  export function PartnershipsList() {
@@ -29,6 +30,7 @@ export function PartnershipsList() {
29
30
  const [isDeleting, setIsdeleting] = useState(false);
30
31
  const [isDeletingAccountNum, setIsdeletingAccountNum] = useState('');
31
32
  const { isUpdatingPartnerAccountList } = useManagePartnershipsContext();
33
+ const dispatch = useManagePartnershipsDispatchContext();
32
34
  const { globalMetadataState: { loggedInUserRights, managedAccounts, accountManagers, loggedInUserJwtToken }, } = useGlobalStateContext();
33
35
  const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
34
36
  const isPartner = () => loggedInUserRights.data.isPartner();
@@ -127,6 +129,7 @@ export function PartnershipsList() {
127
129
  setIsFetching(true);
128
130
  setHasError(false);
129
131
  yield fetchAccountManagers(dispatchToGlobalMetadataReducer, loggedInUserJwtToken);
132
+ setIsUpdatingAccounts(dispatch, false);
130
133
  }
131
134
  catch (e) {
132
135
  setHasError(true);
@@ -138,7 +141,7 @@ export function PartnershipsList() {
138
141
  (haventLoadedMetadata(accountManagers, (data) => data === undefined) || isUpdatingPartnerAccountList))
139
142
  getAccountManagers();
140
143
  // eslint-disable-next-line react-hooks/exhaustive-deps
141
- }, [accountManagers, isUpdatingPartnerAccountList]);
144
+ }, [isUpdatingPartnerAccountList]);
142
145
  useEffect(() => {
143
146
  if (isPartner()) {
144
147
  setAccountList(managedAccounts.data);
@@ -1 +1 @@
1
- {"version":3,"file":"PendingRequests.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PendingRequests.tsx"],"names":[],"mappings":"AAuBA,eAAO,MAAM,WAAW,SAAU,MAAM,WAMvC,CAAC;AACF,wBAAgB,eAAe,gBAyM9B"}
1
+ {"version":3,"file":"PendingRequests.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PendingRequests.tsx"],"names":[],"mappings":"AA0BA,eAAO,MAAM,WAAW,SAAU,MAAM,WAMvC,CAAC;AACF,wBAAgB,eAAe,gBAwO9B"}
@@ -11,8 +11,11 @@ import { pcm } from '@cee-eng/hydrajs';
11
11
  import { AlertVariant, Badge, ButtonVariant, ExpandableSection, ExpandableSectionToggle, Label, Stack, StackItem, } from '@patternfly/react-core';
12
12
  import ExclamationCircleIcon from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';
13
13
  import { LoadingIndicator, ToastNotification, useConfirmation } from '@rh-support/components';
14
+ import { UserPreferencesKeys, useUserPreferences } from '@rh-support/react-context';
15
+ import isEmpty from 'lodash/isEmpty';
14
16
  import React, { useEffect, useState } from 'react';
15
17
  import { Trans, useTranslation } from 'react-i18next';
18
+ import { useLocation } from 'react-router';
16
19
  import { useManagePartnershipsContext } from '../../context/ManagePartnershipsProvider';
17
20
  import { ManageTable } from '../ManageTable';
18
21
  import { RequestCollaborationModal } from './RequestCollaborationModal';
@@ -33,6 +36,8 @@ export function PendingRequests() {
33
36
  const [isRequestAgainModalOpen, setIsRequestAgainModalOpen] = useState(false);
34
37
  const [selectedRowFriendlyName, setSelectedRowFriendlyName] = useState('');
35
38
  const { isUpdatingRequests } = useManagePartnershipsContext();
39
+ const location = useLocation();
40
+ const { getPreferenceByKey, updatePreferences } = useUserPreferences();
36
41
  const onToggle = (isExpanded) => {
37
42
  setIsExpanded(isExpanded);
38
43
  };
@@ -132,11 +137,30 @@ export function PendingRequests() {
132
137
  setIsRequestAgainModalOpen(false);
133
138
  };
134
139
  useEffect(() => {
140
+ // when a customer accepts a link, as soon as partner visits
141
+ // the partnership page, a pop-up should show up and inform
142
+ // partner that customer has accepted the link
143
+ // to achieve this, we always save the latest accepted link in preferences
144
+ const displayLinkIsVerifiedPopUp = (accepted) => {
145
+ const latestAcceptedLik = JSON.parse(getPreferenceByKey(UserPreferencesKeys.partnershipLastestAcceptedLink));
146
+ if (location.pathname !== '/manage/partnerships' ||
147
+ !isEmpty(accepted) ||
148
+ (latestAcceptedLik === null || latestAcceptedLik === void 0 ? void 0 : latestAcceptedLik.friendlyName) === (accepted === null || accepted === void 0 ? void 0 : accepted[0].friendlyName))
149
+ return;
150
+ try {
151
+ updatePreferences(UserPreferencesKeys.partnershipLastestAcceptedLink, JSON.stringify(accepted[0]));
152
+ ToastNotification.addSuccessMessage('Verified request', 'A customer has verified your collaboration. Find them in the table below.');
153
+ }
154
+ catch (e) {
155
+ // silently fails
156
+ }
157
+ };
135
158
  const getStatuses = () => __awaiter(this, void 0, void 0, function* () {
136
159
  setIsFetchingStatuses(true);
137
160
  try {
138
161
  const statuses = yield pcm.partnerships.getPartnerLinksStatuses(1, 100);
139
162
  setStatusList(statuses.filter((s) => s.status !== 'ACCEPTED').reverse());
163
+ displayLinkIsVerifiedPopUp(statuses.filter((s) => s.status === 'ACCEPTED').reverse());
140
164
  setIsFetchingStatuses(false);
141
165
  }
142
166
  catch (e) {
@@ -158,7 +182,7 @@ export function PendingRequests() {
158
182
  React.createElement(Trans, null, "Pending requests"),
159
183
  isFetchingStatuses ? (React.createElement(LoadingIndicator, { isInline: true, size: "sm", className: "pf-u-mx-sm" })) : (React.createElement(Badge, { className: "pf-u-mx-sm" }, statusList.length)))))),
160
184
  React.createElement(StackItem, null,
161
- React.createElement(ExpandableSection, { isIndented: false, isExpanded: isExpanded, isDetached: true, style: { padding: '0' }, contentId: contentId }, statusList.length !== 0 ? (React.createElement(ManageTable, { ariaLabel: t('Pending requests'), columns: columns, data: statusList, errorVariant: AlertVariant.warning, isFetching: isFetchingStatuses, isError: false, errorTitle: t('Pending requests error'), errorComponent: React.createElement(Trans, null, "Could not get pending requests"), pagination: false, headless: true, actionResolver: statusList && !isFetchingStatuses && statusList.length !== 0
185
+ React.createElement(ExpandableSection, { isIndented: false, isExpanded: isExpanded, isDetached: true, style: { padding: '0' }, contentId: contentId }, !isEmpty(statusList) ? (React.createElement(ManageTable, { ariaLabel: t('Pending requests'), columns: columns, data: statusList, errorVariant: AlertVariant.warning, isFetching: isFetchingStatuses, isError: false, errorTitle: t('Pending requests error'), errorComponent: React.createElement(Trans, null, "Could not get pending requests"), pagination: false, headless: true, actionResolver: statusList && !isFetchingStatuses && !isEmpty(statusList)
162
186
  ? actionResolver
163
187
  : null })) : (React.createElement("p", { className: "pf-u-p-md" },
164
188
  React.createElement(Trans, null, "No pending request"))))))),
@@ -1 +1 @@
1
- {"version":3,"file":"RequestCollaborationModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/RequestCollaborationModal.tsx"],"names":[],"mappings":"AAUA,UAAU,MAAM;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC;AAGD,eAAO,MAAM,yBAAyB,UAAW,MAAM,gBAkKtD,CAAC"}
1
+ {"version":3,"file":"RequestCollaborationModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/RequestCollaborationModal.tsx"],"names":[],"mappings":"AAUA,UAAU,MAAM;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC;AAGD,eAAO,MAAM,yBAAyB,UAAW,MAAM,gBAuKtD,CAAC"}
@@ -65,7 +65,8 @@ export const RequestCollaborationModal = (props) => {
65
65
  yield pcm.partnerships.removePendingPartnerLink(props.sendReqAgainFriendlyName);
66
66
  }
67
67
  const url = yield pcm.partnerships.generatePartnerLink(friendlyName);
68
- setGeneratedUrl(url.message);
68
+ const hash = url.message.replace(/(.*\/)*/, '');
69
+ setGeneratedUrl('https://' + window.location.host + '/support/cases/#/manage/partnerships/partnerlink/' + hash);
69
70
  setIsUpdatingRequests(dispatch, true);
70
71
  setShowDone(true);
71
72
  setIsFetching(false);
@@ -101,7 +102,7 @@ export const RequestCollaborationModal = (props) => {
101
102
  return (React.createElement(Modal, { id: "request-collaboration-modal", className: "pf-modal-overflow-visible", title: isRequestingAgain ? 'Request collaboration again' : 'Request collaboration', isOpen: props.isOpen, onClose: onClose, showClose: true, onEscapePress: onClose, variant: ModalVariant.large, actions: [
102
103
  ...(showDone
103
104
  ? [
104
- React.createElement(Button, { key: "done", variant: ButtonVariant.primary, onClick: onDone, isDisabled: validated === 'error' || (!isCopyClicked && isDoneClicked) },
105
+ React.createElement(Button, { key: "done", variant: ButtonVariant.primary, onClick: onDone, isDisabled: validated === 'error' || (!isCopyClicked && isDoneClicked), "data-tracking-id": "request-collaboration-done-button" },
105
106
  React.createElement(Trans, null, "Done")),
106
107
  ]
107
108
  : [
@@ -119,7 +120,7 @@ export const RequestCollaborationModal = (props) => {
119
120
  React.createElement("div", { className: "clip-content-wrapper code-block" },
120
121
  React.createElement("code", { ref: clipboardRef }, generatedUrl)),
121
122
  React.createElement(Tooltip, { position: TooltipPosition.top, content: clipboardText, trigger: "click" },
122
- React.createElement("button", { className: "nimbus-icon-clipboard clip-code-raw-btn xs-icon", "aria-hidden": "true", onClick: onClickOnCopyToClipboardButton }))),
123
+ React.createElement("button", { className: "nimbus-icon-clipboard clip-code-raw-btn xs-icon", "aria-hidden": "true", onClick: onClickOnCopyToClipboardButton, "data-tracking-id": "request-collaboration-link-copy-button" }))),
123
124
  React.createElement("p", { className: !isCopyClicked && isDoneClicked ? 'pf-u-danger-color-100' : '' },
124
125
  React.createElement(Trans, null,
125
126
  ' ',
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/index.tsx"],"names":[],"mappings":"AAWA,wBAAgB,kBAAkB,gBAuCjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/index.tsx"],"names":[],"mappings":"AAYA,wBAAgB,kBAAkB,gBAuCjC"}
@@ -4,6 +4,7 @@ import React from 'react';
4
4
  import { Trans, useTranslation } from 'react-i18next';
5
5
  import { Route, Switch } from 'react-router-dom';
6
6
  import { ManagePartnershipsProvider } from '../../context/ManagePartnershipsProvider';
7
+ import { NonOrgCustomerInfoModal } from './NonOrgCustomerInfoModal';
7
8
  import { PartnershipsList } from './PartnershipsList';
8
9
  import { PartnershipsTermsModal } from './PartnershipsTermsModal';
9
10
  import { PendingRequests } from './PendingRequests';
@@ -22,5 +23,5 @@ export function ManagePartnerships() {
22
23
  loggedInUserRights.data.isPartner() && React.createElement(PendingRequests, null),
23
24
  React.createElement(PartnershipsList, null),
24
25
  React.createElement(Switch, null,
25
- React.createElement(Route, { path: `/manage/partnerships/partnerlink/:linkHash?` }, loggedInUserRights.data.isCustomerOrgAdmin() ? (React.createElement(PartnershipsTermsModal, null)) : (React.createElement(React.Fragment, null, "Todo: a modal to tell user only or admin customers can use the link"))))))));
26
+ React.createElement(Route, { path: `/manage/partnerships/partnerlink/:linkHash?` }, loggedInUserRights.data.isCustomerOrgAdmin() ? (React.createElement(PartnershipsTermsModal, null)) : (React.createElement(NonOrgCustomerInfoModal, null))))))));
26
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/manage",
3
- "version": "1.0.301-beta.1",
3
+ "version": "1.0.301-beta.2",
4
4
  "description": "Customer Support Manage App",
5
5
  "author": "Jordan Eudy <jeudy100@gmail.com>",
6
6
  "homepage": "",
@@ -96,7 +96,7 @@
96
96
  "@patternfly/react-table": "4.111.33",
97
97
  "@rh-support/components": "1.2.141-beta.0",
98
98
  "@rh-support/configs": "1.0.0",
99
- "@rh-support/react-context": "1.0.211-beta.0",
99
+ "@rh-support/react-context": "1.0.211-beta.2",
100
100
  "@rh-support/types": "0.2.0",
101
101
  "@rh-support/user-permissions": "1.0.111-beta.0",
102
102
  "@rh-support/utils": "1.0.91-beta.0",
@@ -109,5 +109,5 @@
109
109
  "react-i18next": ">=10.11.0",
110
110
  "react-router-dom": ">=5.1.2"
111
111
  },
112
- "gitHead": "4a89373122f506bca4d7f913065e6d8d6ae4eb00"
112
+ "gitHead": "3dee06d1dca62fccc22a0f8488d151a9651366dc"
113
113
  }