@rh-support/manage 2.4.10-beta.6 → 2.5.0

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 (212) hide show
  1. package/README.md +2 -0
  2. package/lib/esm/Manage.d.ts +2 -3
  3. package/lib/esm/Manage.d.ts.map +1 -1
  4. package/lib/esm/Manage.js +4 -10
  5. package/lib/esm/ManageTabs.d.ts +3 -1
  6. package/lib/esm/ManageTabs.d.ts.map +1 -1
  7. package/lib/esm/ManageTabs.js +54 -51
  8. package/lib/esm/Routes.d.ts +2 -0
  9. package/lib/esm/Routes.d.ts.map +1 -1
  10. package/lib/esm/Routes.js +21 -9
  11. package/lib/esm/components/Configs/ConfigInLineEdit.d.ts +2 -1
  12. package/lib/esm/components/Configs/ConfigInLineEdit.d.ts.map +1 -1
  13. package/lib/esm/components/Configs/ConfigSwitch.d.ts +2 -1
  14. package/lib/esm/components/Configs/ConfigSwitch.d.ts.map +1 -1
  15. package/lib/esm/components/Configs/ConfigSwitch.js +1 -1
  16. package/lib/esm/components/Configs/ConfigsTable.d.ts +2 -1
  17. package/lib/esm/components/Configs/ConfigsTable.d.ts.map +1 -1
  18. package/lib/esm/components/Configs/ConfigsTable.js +4 -3
  19. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts +2 -1
  20. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts.map +1 -1
  21. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.js +2 -1
  22. package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts +2 -1
  23. package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts.map +1 -1
  24. package/lib/esm/components/Groups/GroupSelect/GroupSelect.js +23 -11
  25. package/lib/esm/components/Groups/GroupUserPermissionsSelect/GroupUserPermissionsSelect.d.ts +2 -1
  26. package/lib/esm/components/Groups/GroupUserPermissionsSelect/GroupUserPermissionsSelect.d.ts.map +1 -1
  27. package/lib/esm/components/Groups/GroupUserPermissionsSelect/GroupUserPermissionsSelect.js +1 -1
  28. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts +2 -1
  29. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts.map +1 -1
  30. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.js +3 -3
  31. package/lib/esm/components/ManageBookmarkedAccountsTab/AddEditBookmarkModal.d.ts +2 -1
  32. package/lib/esm/components/ManageBookmarkedAccountsTab/AddEditBookmarkModal.d.ts.map +1 -1
  33. package/lib/esm/components/ManageBookmarkedAccountsTab/AddEditBookmarkModal.js +1 -1
  34. package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkAccountSelector.d.ts +2 -1
  35. package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkAccountSelector.d.ts.map +1 -1
  36. package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkAccountSelector.js +15 -7
  37. package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkGroupSelector.d.ts +1 -1
  38. package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkGroupSelector.d.ts.map +1 -1
  39. package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkGroupSelector.js +8 -5
  40. package/lib/esm/components/ManageBookmarkedAccountsTab/ManageGroupedBookmarkedAccountsTab.d.ts +2 -1
  41. package/lib/esm/components/ManageBookmarkedAccountsTab/ManageGroupedBookmarkedAccountsTab.d.ts.map +1 -1
  42. package/lib/esm/components/ManageBookmarkedAccountsTab/ManageGroupedBookmarkedAccountsTab.js +14 -11
  43. package/lib/esm/components/ManageExpiredContents/ExpiredContentCategory.d.ts +9 -0
  44. package/lib/esm/components/ManageExpiredContents/ExpiredContentCategory.d.ts.map +1 -0
  45. package/lib/esm/components/ManageExpiredContents/ExpiredContentCategory.js +31 -0
  46. package/lib/esm/components/ManageExpiredContents/ExpiredContentHeader.d.ts +3 -0
  47. package/lib/esm/components/ManageExpiredContents/ExpiredContentHeader.d.ts.map +1 -0
  48. package/lib/esm/components/ManageExpiredContents/ExpiredContentHeader.js +9 -0
  49. package/lib/esm/components/ManageExpiredContents/ExpiredContentManagement.d.ts +3 -0
  50. package/lib/esm/components/ManageExpiredContents/ExpiredContentManagement.d.ts.map +1 -0
  51. package/lib/esm/components/ManageExpiredContents/ExpiredContentManagement.js +13 -0
  52. package/lib/esm/components/ManageExpiredContents/ExpiredContentManager.d.ts +3 -0
  53. package/lib/esm/components/ManageExpiredContents/ExpiredContentManager.d.ts.map +1 -0
  54. package/lib/esm/components/ManageExpiredContents/ExpiredContentManager.js +68 -0
  55. package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItem.d.ts +9 -0
  56. package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItem.d.ts.map +1 -0
  57. package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItem.js +77 -0
  58. package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItemView.d.ts +14 -0
  59. package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItemView.d.ts.map +1 -0
  60. package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItemView.js +179 -0
  61. package/lib/esm/components/ManageExpiredContents/index.d.ts +2 -0
  62. package/lib/esm/components/ManageExpiredContents/index.d.ts.map +1 -0
  63. package/lib/esm/components/ManageExpiredContents/index.js +1 -0
  64. package/lib/esm/components/ManagePartnerships/NonOrgCustomerInfoModal.d.ts +2 -1
  65. package/lib/esm/components/ManagePartnerships/NonOrgCustomerInfoModal.d.ts.map +1 -1
  66. package/lib/esm/components/ManagePartnerships/PartnershipsList.d.ts +2 -1
  67. package/lib/esm/components/ManagePartnerships/PartnershipsList.d.ts.map +1 -1
  68. package/lib/esm/components/ManagePartnerships/PartnershipsList.js +3 -3
  69. package/lib/esm/components/ManagePartnerships/PartnershipsTermsModal.d.ts +2 -1
  70. package/lib/esm/components/ManagePartnerships/PartnershipsTermsModal.d.ts.map +1 -1
  71. package/lib/esm/components/ManagePartnerships/PartnershipsTermsModal.js +42 -21
  72. package/lib/esm/components/ManagePartnerships/RequestCollaborationModal.d.ts +2 -1
  73. package/lib/esm/components/ManagePartnerships/RequestCollaborationModal.d.ts.map +1 -1
  74. package/lib/esm/components/ManagePartnerships/RequestCollaborationModal.js +15 -13
  75. package/lib/esm/components/ManagePartnerships/Requests.d.ts +2 -1
  76. package/lib/esm/components/ManagePartnerships/Requests.d.ts.map +1 -1
  77. package/lib/esm/components/ManagePartnerships/Requests.js +25 -5
  78. package/lib/esm/components/ManagePartnerships/index.d.ts +2 -1
  79. package/lib/esm/components/ManagePartnerships/index.d.ts.map +1 -1
  80. package/lib/esm/components/ManagePartnerships/index.js +4 -3
  81. package/lib/esm/components/ManagePreferences/ManagePreferences.d.ts +2 -1
  82. package/lib/esm/components/ManagePreferences/ManagePreferences.d.ts.map +1 -1
  83. package/lib/esm/components/ManagePreferences/ManagePreferences.js +1 -2
  84. package/lib/esm/components/ManagePreferences/Preferences.d.ts +2 -1
  85. package/lib/esm/components/ManagePreferences/Preferences.d.ts.map +1 -1
  86. package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts +2 -1
  87. package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts.map +1 -1
  88. package/lib/esm/components/ManagePreferences/PreferencesBody.js +1 -1
  89. package/lib/esm/components/ManagePreferences/PreferencesHeader.d.ts +2 -1
  90. package/lib/esm/components/ManagePreferences/PreferencesHeader.d.ts.map +1 -1
  91. package/lib/esm/components/ManagePreferences/PreferencesHeader.js +1 -1
  92. package/lib/esm/components/ManagePreferences/components/PreferenceSelect.d.ts +1 -1
  93. package/lib/esm/components/ManagePreferences/components/PreferenceSelect.d.ts.map +1 -1
  94. package/lib/esm/components/ManagePreferences/components/PreferenceSelect.js +5 -3
  95. package/lib/esm/components/ManagePreferences/components/PreferenceSwitch.d.ts +2 -1
  96. package/lib/esm/components/ManagePreferences/components/PreferenceSwitch.d.ts.map +1 -1
  97. package/lib/esm/components/ManagePreferences/components/PreferenceSwitch.js +1 -1
  98. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts +2 -1
  99. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts.map +1 -1
  100. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.js +13 -2
  101. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseSearch.d.ts +2 -1
  102. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseSearch.d.ts.map +1 -1
  103. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseSearch.js +6 -4
  104. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts +2 -1
  105. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts.map +1 -1
  106. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.js +12 -11
  107. package/lib/esm/components/ManageTable/ManageTable.d.ts +1 -1
  108. package/lib/esm/components/ManageTable/ManageTable.d.ts.map +1 -1
  109. package/lib/esm/components/ManageTable/ManageTable.js +7 -8
  110. package/lib/esm/components/ManageTags/TagsManagement.d.ts +3 -0
  111. package/lib/esm/components/ManageTags/TagsManagement.d.ts.map +1 -0
  112. package/lib/esm/components/ManageTags/TagsManagement.js +11 -0
  113. package/lib/esm/components/ManageTags/TagsManager.d.ts +3 -0
  114. package/lib/esm/components/ManageTags/TagsManager.d.ts.map +1 -0
  115. package/lib/esm/components/ManageTags/TagsManager.js +261 -0
  116. package/lib/esm/components/ManageTags/index.d.ts +2 -0
  117. package/lib/esm/components/ManageTags/index.d.ts.map +1 -0
  118. package/lib/esm/components/ManageTags/index.js +1 -0
  119. package/lib/esm/components/NotificationEmails/NotificationEmailsModal.d.ts +2 -1
  120. package/lib/esm/components/NotificationEmails/NotificationEmailsModal.d.ts.map +1 -1
  121. package/lib/esm/components/NotificationEmails/NotificationEmailsModal.js +32 -7
  122. package/lib/esm/components/NotificationEmails/index.d.ts +2 -1
  123. package/lib/esm/components/NotificationEmails/index.d.ts.map +1 -1
  124. package/lib/esm/components/NotificationEmails/index.js +4 -4
  125. package/lib/esm/components/TopContentManagement/CategoryLimit/CategoryLimit.d.ts.map +1 -1
  126. package/lib/esm/components/TopContentManagement/CategoryLimit/CategoryLimit.js +3 -2
  127. package/lib/esm/components/TopContentManagement/CategoryLimit/CategoryLimitGuidelines.js +1 -1
  128. package/lib/esm/components/TopContentManagement/CategoryLimit/QuestionAnswer.js +1 -1
  129. package/lib/esm/components/TopContentManagement/ContentUsage/ContentAccordion.d.ts.map +1 -1
  130. package/lib/esm/components/TopContentManagement/ContentUsage/ContentAccordion.js +2 -2
  131. package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetrics.d.ts.map +1 -1
  132. package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetrics.js +3 -3
  133. package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetricsSelect.d.ts +1 -1
  134. package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetricsSelect.d.ts.map +1 -1
  135. package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetricsSelect.js +3 -3
  136. package/lib/esm/components/TopContentManagement/ContentUsage/VersionPerformanceMetrics.d.ts.map +1 -1
  137. package/lib/esm/components/TopContentManagement/ContentUsage/VersionPerformanceMetrics.js +4 -4
  138. package/lib/esm/components/TopContentManagement/NoTopContentFound.d.ts +2 -1
  139. package/lib/esm/components/TopContentManagement/NoTopContentFound.d.ts.map +1 -1
  140. package/lib/esm/components/TopContentManagement/NoTopContentFound.js +14 -15
  141. package/lib/esm/components/TopContentManagement/TopContent.d.ts +2 -1
  142. package/lib/esm/components/TopContentManagement/TopContent.d.ts.map +1 -1
  143. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/AddNewCategoryDropDown.d.ts +2 -1
  144. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/AddNewCategoryDropDown.d.ts.map +1 -1
  145. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/AddNewCategoryDropDown.js +8 -3
  146. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategory.d.ts +1 -1
  147. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategory.d.ts.map +1 -1
  148. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategory.js +3 -2
  149. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategoryNew.d.ts +2 -1
  150. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategoryNew.d.ts.map +1 -1
  151. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentComponent.d.ts.map +1 -1
  152. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentComponent.js +2 -2
  153. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem.d.ts +6 -2
  154. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem.d.ts.map +1 -1
  155. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem.js +178 -59
  156. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItemLink.js +1 -1
  157. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentEditor.d.ts +2 -1
  158. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentEditor.d.ts.map +1 -1
  159. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentEditor.js +59 -15
  160. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestion.d.ts +1 -0
  161. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestion.d.ts.map +1 -1
  162. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestion.js +35 -10
  163. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestionHint.js +3 -3
  164. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestionHintAccept.d.ts.map +1 -1
  165. package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestionHintAccept.js +26 -20
  166. package/lib/esm/components/TopContentManagement/TopContentHeader.d.ts +2 -1
  167. package/lib/esm/components/TopContentManagement/TopContentHeader.d.ts.map +1 -1
  168. package/lib/esm/components/TopContentManagement/TopContentHeader.js +1 -1
  169. package/lib/esm/components/TopContentManagement/TopContentManagement.d.ts +2 -1
  170. package/lib/esm/components/TopContentManagement/TopContentManagement.d.ts.map +1 -1
  171. package/lib/esm/components/TopContentManagement/TopContentManagement.js +4 -3
  172. package/lib/esm/components/TopContentManagement/TopContentProductVersionSelector.d.ts +2 -1
  173. package/lib/esm/components/TopContentManagement/TopContentProductVersionSelector.d.ts.map +1 -1
  174. package/lib/esm/components/TopContentManagement/TopContentProductVersionSelector.js +6 -6
  175. package/lib/esm/context/ExpiredContentContextProvider.d.ts +8 -0
  176. package/lib/esm/context/ExpiredContentContextProvider.d.ts.map +1 -0
  177. package/lib/esm/context/ExpiredContentContextProvider.js +10 -0
  178. package/lib/esm/context/ManagePartnershipsProvider.d.ts +1 -1
  179. package/lib/esm/context/ManagePartnershipsProvider.d.ts.map +1 -1
  180. package/lib/esm/context/TagManagementContextProvider.d.ts +8 -0
  181. package/lib/esm/context/TagManagementContextProvider.d.ts.map +1 -0
  182. package/lib/esm/context/TagManagementContextProvider.js +10 -0
  183. package/lib/esm/context/TopContentProvider.d.ts +1 -1
  184. package/lib/esm/context/TopContentProvider.d.ts.map +1 -1
  185. package/lib/esm/context/TopContentProvider.js +1 -0
  186. package/lib/esm/hooks/useUserPreferences.d.ts +13 -12
  187. package/lib/esm/hooks/useUserPreferences.d.ts.map +1 -1
  188. package/lib/esm/hooks/useUserPreferences.js +0 -1
  189. package/lib/esm/index.d.ts +1 -0
  190. package/lib/esm/index.d.ts.map +1 -1
  191. package/lib/esm/index.js +1 -0
  192. package/lib/esm/reducers/ExpiredContentReducer.d.ts +36 -0
  193. package/lib/esm/reducers/ExpiredContentReducer.d.ts.map +1 -0
  194. package/lib/esm/reducers/ExpiredContentReducer.js +207 -0
  195. package/lib/esm/reducers/ManagePartnershipsReducer.d.ts +2 -2
  196. package/lib/esm/reducers/ManagePartnershipsReducer.d.ts.map +1 -1
  197. package/lib/esm/reducers/TagManagmentReducer.d.ts +27 -0
  198. package/lib/esm/reducers/TagManagmentReducer.d.ts.map +1 -0
  199. package/lib/esm/reducers/TagManagmentReducer.js +144 -0
  200. package/lib/esm/reducers/TopContentHelpers.d.ts.map +1 -1
  201. package/lib/esm/reducers/TopContentHelpers.js +4 -4
  202. package/lib/esm/reducers/TopContentReducer.d.ts +12 -7
  203. package/lib/esm/reducers/TopContentReducer.d.ts.map +1 -1
  204. package/lib/esm/reducers/TopContentReducer.js +61 -23
  205. package/lib/esm/scss/_main.scss +87 -55
  206. package/lib/esm/scss/_pf-overrides.scss +181 -0
  207. package/lib/esm/scss/index.scss +7 -7
  208. package/package.json +42 -42
  209. package/lib/esm/ManageTab.d.ts +0 -8
  210. package/lib/esm/ManageTab.d.ts.map +0 -1
  211. package/lib/esm/ManageTab.js +0 -12
  212. package/lib/esm/scss/_pf4-overrides.scss +0 -132
@@ -0,0 +1,179 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Button, DatePicker, Flex, FlexItem, FormGroup, TextInput, ValidatedOptions } from '@patternfly/react-core';
11
+ import { TagsSelector, ToastNotification } from '@rh-support/components';
12
+ import { getDrupalResIdIfTypeFromUrl, getText, isFutureDate, isValidDate, isValidUrl } from '@rh-support/utils';
13
+ import { isEqual } from 'lodash';
14
+ import differenceBy from 'lodash/differenceBy';
15
+ import isEmpty from 'lodash/isEmpty';
16
+ import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
17
+ import { Trans, useTranslation } from 'react-i18next';
18
+ import { TagManagementStateContext } from '../../context/TagManagementContextProvider';
19
+ import { getTopContentUrl } from '../../reducers/TopContentHelpers';
20
+ import { getDocsFromUrl } from '../TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem';
21
+ export default function ExpiredContentSingleItemView({ category, content, onCancel, onSave, onDelete, isSaving, isDeleting, }) {
22
+ var _a, _b;
23
+ const { t } = useTranslation();
24
+ const tagManagementEditState = useContext(TagManagementStateContext);
25
+ const { tags: tagOptions } = tagManagementEditState;
26
+ const ref = useRef(null);
27
+ const [isFetchingSolrSearch, setIsFetchingSolrSearch] = useState(false);
28
+ const [localContentUrl, setLocalContentUrl] = useState(content.contentUrl);
29
+ const [localContentTitle, setLocalContentTitle] = useState(content.contentTitle);
30
+ const [localSelectedTags, setLocalSelectedTags] = useState(content.tags || []);
31
+ const [localExpiryDate, setLocalExpiryDate] = useState((content === null || content === void 0 ? void 0 : content.expiryDate) || '');
32
+ const [shouldShowExpDateErr, setShouldShowExpDateErr] = useState(false);
33
+ const [datePickerFocused, setDatePickerFocused] = useState(false);
34
+ const [contentTitleIsValid, setContentTitleIsValid] = useState(true);
35
+ const [contentUrlIsValid, setContentUrlIsValid] = useState(true);
36
+ const oldTagsIds = useMemo(() => { var _a; return ((_a = content === null || content === void 0 ? void 0 : content.tags) === null || _a === void 0 ? void 0 : _a.map((t) => t.id)) || []; }, [content === null || content === void 0 ? void 0 : content.tags]);
37
+ const localTagsIds = useMemo(() => localSelectedTags === null || localSelectedTags === void 0 ? void 0 : localSelectedTags.map((t) => t.id), [localSelectedTags]);
38
+ const expiryDateErrMsg = isFutureDate(localExpiryDate) ? '' : t('Invalid expiry date');
39
+ const onSubmit = (e) => e.preventDefault();
40
+ const updateContentTitleFromUrl = (contentUrl) => __awaiter(this, void 0, void 0, function* () {
41
+ var _a, _b;
42
+ // throws toast warning and clears it after 4 seconds
43
+ const throwWarningMessage = () => {
44
+ const message = getText('Unable to automatically fetch title. Please enter manually');
45
+ ToastNotification.addWarningMessage(message, '', { autoClose: 4000 });
46
+ };
47
+ try {
48
+ const nodeId = getDrupalResIdIfTypeFromUrl(contentUrl);
49
+ if (!nodeId)
50
+ return;
51
+ const docs = yield getDocsFromUrl(contentUrl);
52
+ const contentTitle = ((_a = docs[0]) === null || _a === void 0 ? void 0 : _a.publishedTitle) || ((_b = docs[0]) === null || _b === void 0 ? void 0 : _b.allTitle);
53
+ if (docs.length > 0 && docs[0].id === nodeId + '' && contentTitle) {
54
+ setLocalContentTitle(contentTitle);
55
+ setContentTitleIsValid(true);
56
+ }
57
+ else {
58
+ throwWarningMessage();
59
+ }
60
+ }
61
+ catch (e) {
62
+ throwWarningMessage();
63
+ }
64
+ });
65
+ const onLocalContentUrlChange = () => __awaiter(this, void 0, void 0, function* () {
66
+ if (localContentUrl === content.contentUrl)
67
+ return;
68
+ setIsFetchingSolrSearch(true);
69
+ yield updateContentTitleFromUrl(localContentUrl);
70
+ setIsFetchingSolrSearch(false);
71
+ });
72
+ const checkDuplicateUrls = (url) => {
73
+ //
74
+ onLocalContentUrlChange();
75
+ };
76
+ const onContentUrlChange = (contentUrl, event) => __awaiter(this, void 0, void 0, function* () {
77
+ setContentUrlIsValid(isValidUrl(contentUrl));
78
+ checkDuplicateUrls(contentUrl);
79
+ setLocalContentUrl(contentUrl);
80
+ });
81
+ const onContentTitleChange = (contentTitle, event) => {
82
+ const contentTitleIsValid = event.target.validity.valid;
83
+ setContentTitleIsValid(contentTitleIsValid);
84
+ setLocalContentTitle(contentTitle);
85
+ };
86
+ const handleLocalTagChange = (tags) => {
87
+ setLocalSelectedTags(tags);
88
+ };
89
+ const onExpiryDateChange = (event, str, date) => {
90
+ setLocalExpiryDate(str);
91
+ };
92
+ const expiryDateValidator = (date) => {
93
+ const today = new Date();
94
+ if (date < today)
95
+ return t('Invalid expiry date');
96
+ return '';
97
+ };
98
+ const onContentSave = () => {
99
+ const newTags = differenceBy(localTagsIds, oldTagsIds);
100
+ const deletedTags = differenceBy(oldTagsIds, localTagsIds);
101
+ const updatedContent = Object.assign(Object.assign({}, content), { contentTitle: localContentTitle, contentUrl: localContentUrl, tagList: newTags, tags: localSelectedTags.map((t) => ({ id: t.id, tagName: t.tagName })), expiryDate: localExpiryDate });
102
+ onSave(updatedContent, deletedTags);
103
+ };
104
+ const doesInputHasSpaces = isEmpty(localContentTitle.trim());
105
+ const isSaveButtonDisabled = doesInputHasSpaces ||
106
+ !(contentTitleIsValid &&
107
+ contentUrlIsValid &&
108
+ localContentTitle &&
109
+ localContentUrl &&
110
+ ((isValidDate(localExpiryDate) && isEmpty(expiryDateValidator(new Date(localExpiryDate)))) ||
111
+ (isEmpty(localExpiryDate) && isEmpty((_a = content.expiryDate) !== null && _a !== void 0 ? _a : '')))) ||
112
+ (localContentUrl === content.contentUrl &&
113
+ localContentTitle === content.contentTitle &&
114
+ isEqual(localTagsIds, oldTagsIds) &&
115
+ isEqual(localExpiryDate.split('T')[0], ((_b = content.expiryDate) === null || _b === void 0 ? void 0 : _b.split('T')[0]) || ''));
116
+ useEffect(() => {
117
+ var _a, _b;
118
+ const datePickerElement = (_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.querySelector('#content-expiry-date input');
119
+ const tagsSelectorElement = (_b = ref === null || ref === void 0 ? void 0 : ref.current) === null || _b === void 0 ? void 0 : _b.querySelector('#expired-content-tag');
120
+ const handleFocusOnDatePicker = () => {
121
+ setDatePickerFocused(true);
122
+ };
123
+ const handleTagSelectorClick = () => {
124
+ !shouldShowExpDateErr && setShouldShowExpDateErr(true);
125
+ };
126
+ if (datePickerElement) {
127
+ datePickerElement.addEventListener('focusin', handleFocusOnDatePicker);
128
+ }
129
+ if (tagsSelectorElement) {
130
+ tagsSelectorElement.addEventListener('click', handleTagSelectorClick);
131
+ }
132
+ return () => {
133
+ if (datePickerElement) {
134
+ datePickerElement.removeEventListener('focusin', handleFocusOnDatePicker);
135
+ }
136
+ if (tagsSelectorElement) {
137
+ tagsSelectorElement.removeEventListener('click', handleTagSelectorClick);
138
+ }
139
+ };
140
+ // eslint-disable-next-line react-hooks/exhaustive-deps
141
+ }, []);
142
+ return (React.createElement("form", { noValidate: true, onSubmit: onSubmit, className: "card card-light push-bottom", ref: ref },
143
+ React.createElement("div", { className: "form-group" },
144
+ React.createElement("label", { htmlFor: localContentTitle },
145
+ "Heading",
146
+ ' ',
147
+ React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")),
148
+ React.createElement(TextInput, { isRequired: true, type: "text", maxLength: 254, required: true, value: localContentTitle, isDisabled: isFetchingSolrSearch, "aria-label": t('Copy and paste the heading for consistency'), placeholder: t('Copy and paste the heading for consistency'), onFocus: () => setShouldShowExpDateErr(true), onChange: (e, v) => {
149
+ onContentTitleChange(v, e);
150
+ !shouldShowExpDateErr && setShouldShowExpDateErr(true);
151
+ }, validated: contentTitleIsValid ? ValidatedOptions.default : ValidatedOptions.error })),
152
+ React.createElement("div", { className: "form-group" },
153
+ React.createElement("label", { htmlFor: localContentUrl },
154
+ "Link to content",
155
+ ' ',
156
+ React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")),
157
+ React.createElement(TextInput, { type: "url", maxLength: 254, isRequired: true, pattern: "^(http(s)?:\\/\\/)+[\\w\\-\\._~:\\/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$", value: getTopContentUrl(localContentUrl), "aria-label": t('Entering a solution or article link first will automatically generate the heading for you'), placeholder: t('Entering a solution or article link first will automatically generate the heading for you'), onFocus: () => setShouldShowExpDateErr(true), onChange: (evt, val) => {
158
+ onContentUrlChange(val, evt);
159
+ !shouldShowExpDateErr && setShouldShowExpDateErr(true);
160
+ }, validated: contentUrlIsValid ? ValidatedOptions.default : ValidatedOptions.error })),
161
+ React.createElement(Flex, { className: "pf-v5-u-my-lg" },
162
+ React.createElement(FlexItem, { flex: { default: 'flex_1' } },
163
+ React.createElement(FormGroup, { label: t('Tags') },
164
+ React.createElement("div", { className: "pf-v5-c-form-control" },
165
+ React.createElement(TagsSelector, { tagOptions: tagOptions, onChange: handleLocalTagChange, selectedTags: localSelectedTags, placeholder: t('Select tags to improve discoverability'), id: "expired-content-tag" })))),
166
+ React.createElement(FlexItem, null,
167
+ React.createElement(FormGroup, { label: t('Expiry date') },
168
+ React.createElement(DatePicker, { onBlur: onExpiryDateChange, onChange: onExpiryDateChange, value: !isEmpty(localExpiryDate) ? localExpiryDate.split('T')[0] : '', validators: [expiryDateValidator], id: "content-expiry-date", invalidFormatText: t('Invalid date format') }),
169
+ shouldShowExpDateErr && !datePickerFocused && (React.createElement("p", { className: "form-instructions form-invalid pf-v5-u-font-size-sm pf-v5-u-danger-color-200 pf-v5-u-my-0" }, expiryDateErrMsg))))),
170
+ React.createElement("span", { className: "top-content-single-item-footer" },
171
+ React.createElement("span", null,
172
+ React.createElement(Button, { variant: "primary", onClick: onContentSave, isDisabled: isSaveButtonDisabled || isSaving, isLoading: isSaving },
173
+ React.createElement(Trans, null, "Save")),
174
+ ' ',
175
+ React.createElement(Button, { variant: "tertiary", onClick: onCancel, "data-tracking-id": "cancel-button-top-content" },
176
+ React.createElement(Trans, null, "Cancel"))),
177
+ React.createElement("span", { className: "content-actions" },
178
+ React.createElement(Button, { variant: "danger", "aria-label": t('Delete content'), onClick: onDelete, isDisabled: isDeleting }, "Delete")))));
179
+ }
@@ -0,0 +1,2 @@
1
+ export { ExpiredContentManagement } from './ExpiredContentManagement';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageExpiredContents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1 @@
1
+ export { ExpiredContentManagement } from './ExpiredContentManagement';
@@ -1,2 +1,3 @@
1
- export declare const NonOrgCustomerInfoModal: () => JSX.Element;
1
+ import React from 'react';
2
+ export declare const NonOrgCustomerInfoModal: () => React.JSX.Element;
2
3
  //# sourceMappingURL=NonOrgCustomerInfoModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NonOrgCustomerInfoModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/NonOrgCustomerInfoModal.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,mBA2BnC,CAAC"}
1
+ {"version":3,"file":"NonOrgCustomerInfoModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/NonOrgCustomerInfoModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,uBAAuB,yBA2BnC,CAAC"}
@@ -1,2 +1,3 @@
1
- export declare function PartnershipsList(): JSX.Element;
1
+ import React from 'react';
2
+ export declare function PartnershipsList(): React.JSX.Element;
2
3
  //# sourceMappingURL=PartnershipsList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PartnershipsList.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsList.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,gBAAgB,gBAmO/B"}
1
+ {"version":3,"file":"PartnershipsList.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsList.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAW/D,wBAAgB,gBAAgB,sBAmO/B"}
@@ -115,7 +115,7 @@ export function PartnershipsList() {
115
115
  React.createElement(LoadingIndicator, { isInline: true, show: isDeleting && data.accountNum === isDeletingAccountNum, size: "xs" }))),
116
116
  },
117
117
  ];
118
- const requestCollaborationButton = () => (React.createElement("div", { className: "toolbar-right pf-u-mt-xs" },
118
+ const requestCollaborationButton = () => (React.createElement("div", { className: "toolbar-right pf-v5-u-mt-xs" },
119
119
  React.createElement(Button, { variant: ButtonVariant.primary, isInline: true, onClick: () => setIsRequestCollabModalOpen(true), "data-tracking-id": "request-collaboration-button", isDisabled: false },
120
120
  React.createElement(Trans, null, "Request Collaboration"))));
121
121
  // Get Customer Accounts For A Partner
@@ -174,8 +174,8 @@ export function PartnershipsList() {
174
174
  React.createElement("div", { className: "toolbar" },
175
175
  React.createElement("div", { className: "toolbar-left" },
176
176
  React.createElement("label", { htmlFor: "search-partnerships" }, "Filter by"),
177
- React.createElement(SearchInput, { className: "pf-u-flex-grow-1 pf-c-search-input pf-u-background-color-100 pf-u-mr-lg", id: "search-partnerships", placeholder: t('Search for an existing partnership'), value: searchString, onChange: setSearchString, onClear: () => setSearchString(''), "aria-label": t('Search for an existing partnership') })),
178
- isPartner() && requestCollaborationButton()),
177
+ React.createElement(SearchInput, { className: "pf-v5-u-flex-grow-1 pf-v5-c-search-input pf-v5-u-background-color-100 pf-v5-u-mr-lg", id: "search-partnerships", placeholder: t('Search for an existing partnership'), value: searchString, onChange: (_event, value) => setSearchString(value), onClear: () => setSearchString(''), "aria-label": t('Search for an existing partnership') })),
178
+ requestCollaborationButton()),
179
179
  React.createElement(ManageTable, { ariaLabel: t('Partnerships list'), columns: columns, data: accountList.filter((account) => account.name.toLowerCase().includes(searchString.toLowerCase())), sortInfo: { column: 'customer-account-name', direction: 'asc' }, errorVariant: AlertVariant.warning, isFetching: isFetching, isError: hasError, errorTitle: t('Partnerships error'), errorComponent: React.createElement(Trans, null, "Could not get partnerships list"), noResultText: t('There are no results to display.') }),
180
180
  React.createElement(RequestCollaborationModal, { isOpen: isRequestCollabModalOpen, onClose: () => {
181
181
  setIsRequestCollabModalOpen(false);
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  export declare function getTnCUrl(): string;
2
- export declare const PartnershipsTermsModal: () => JSX.Element;
3
+ export declare const PartnershipsTermsModal: () => React.JSX.Element;
3
4
  //# sourceMappingURL=PartnershipsTermsModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PartnershipsTermsModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsTermsModal.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,SAAS,WAMxB;AAID,eAAO,MAAM,sBAAsB,mBAsKlC,CAAC"}
1
+ {"version":3,"file":"PartnershipsTermsModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsTermsModal.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAUnD,wBAAgB,SAAS,WAMxB;AAID,eAAO,MAAM,sBAAsB,yBAqMlC,CAAC"}
@@ -39,6 +39,15 @@ export const PartnershipsTermsModal = () => {
39
39
  const onClose = () => {
40
40
  if (isUpdating)
41
41
  return;
42
+ if (ackChoice === 'accept' || ackChoice === 'decline') {
43
+ const navigationObj = {
44
+ pathname: '/manage/partnerships',
45
+ search: '',
46
+ };
47
+ history.replace(navigationObj);
48
+ }
49
+ ackChoice === 'decline' &&
50
+ ToastNotification.addDangerMessage(t('You have declined a partner collaboration request'));
42
51
  setIsTermsModalOpen(false);
43
52
  setIsTermsVisited(false);
44
53
  setAckChoice(undefined);
@@ -57,40 +66,56 @@ export const PartnershipsTermsModal = () => {
57
66
  catch (error) {
58
67
  const errorCode = parseInt((error === null || error === void 0 ? void 0 : error.code) || (error === null || error === void 0 ? void 0 : error.status)) || '';
59
68
  const errorMessage = errorCode === 400 ? (React.createElement(Trans, null, "You are not authorized to accept or reject partner link.")) : errorCode === 404 ? (React.createElement(Trans, null, "Partner link is invalid. The link has been used or expired.")) : (React.createElement(Trans, null, "There was a problem and partner link cannot be verified at this moment. Please try again later."));
60
- setIsTermsVisited(true);
69
+ setIsVerifyingLink(false);
61
70
  setVerificationFailMessage(errorMessage);
62
71
  }
63
72
  });
64
73
  const termAck = (ackResponse) => __awaiter(void 0, void 0, void 0, function* () {
65
74
  setIsUpdating(true);
66
75
  setAckChoice(ackResponse);
76
+ setIsTermsModalOpen(false);
67
77
  try {
68
78
  yield pcm.partnerships.partnerLinkAckResponse(linkHash, ackResponse);
69
79
  setIsUpdating(false);
70
80
  setIsUpdatingAccounts(dispatch, true);
81
+ setIsTermsVisited(true);
82
+ setIsTermsModalOpen(true);
71
83
  }
72
84
  catch (e) {
73
- ToastNotification.addDangerMessage(ackResponse === 'accept' ? t('Failed to add partnership.') : t('Failed to decline partnership.'), React.createElement(Button, { variant: ButtonVariant.link, isInline: true, onClick: () => setIsTermsModalOpen(true) },
85
+ const errorDetail = e.detailMessage || '';
86
+ const errorBody = errorDetail ? (errorDetail) : (React.createElement(Button, { variant: ButtonVariant.link, isInline: true, onClick: () => setIsTermsModalOpen(true) },
74
87
  React.createElement(Trans, null, "Try again")));
88
+ ToastNotification.addDangerMessage(ackResponse === 'accept' ? t('Failed to add partnership.') : t('Failed to decline partnership.'), errorBody);
75
89
  setIsUpdating(false);
90
+ setIsTermsVisited(false);
76
91
  }
77
- history.push({
78
- search: '',
79
- });
80
92
  });
81
- verifyLink();
82
- const decisionAccepted = /decision-\d+=accepted/gi.exec(location.search);
83
- const decisionDeclined = /rejectedTnC=true/gi.exec(location.search);
84
- const ackID = get(/ackID=(\d+)/gi.exec(location.search), [1]);
85
- if ((!!decisionAccepted && ackID) || !!decisionDeclined) {
86
- const choice = !!decisionAccepted ? 'accept' : !!decisionDeclined ? 'decline' : undefined;
87
- setAckChoice(choice);
88
- termAck(choice);
89
- setIsTermsVisited(true);
90
- }
93
+ const showModal = () => __awaiter(void 0, void 0, void 0, function* () {
94
+ const decisionAccepted = /decision-\d+=accepted/gi.exec(location.search);
95
+ const decisionDeclined = /rejectedTnC=true/gi.exec(location.search);
96
+ const ackID = get(/ackID=(\d+)/gi.exec(location.search), [1]);
97
+ if ((!!decisionAccepted && ackID) || !!decisionDeclined) {
98
+ // user visited terms and conditions page and declined/accepted the terms then redirected to pcm
99
+ const choice = !!decisionAccepted ? 'accept' : !!decisionDeclined ? 'decline' : undefined;
100
+ setAckChoice(choice);
101
+ yield termAck(choice);
102
+ }
103
+ else {
104
+ // verify if link before sending user to terms page to check if link is a valid link and not already used
105
+ verifyLink();
106
+ }
107
+ });
108
+ showModal();
91
109
  // eslint-disable-next-line react-hooks/exhaustive-deps
92
110
  }, [linkHash]);
93
- return (React.createElement(Modal, { id: "partnership-terms-and-conditions-modal", className: "pf-modal-overflow-visible", title: 'Confirm partnership collaboration', isOpen: isTermsModalOpen, onClose: onClose, showClose: true, onEscapePress: onClose, variant: ModalVariant.large, actions: !isTermVisited
111
+ const modalContentWhenTermIsVisited = () => isUpdating ? (React.createElement(LoadingIndicator, { show: true, size: "lg" })) : ackChoice === 'accept' ? (React.createElement(Trans, null, "Your partnership link is created successfully")) : ackChoice === 'decline' ? (React.createElement(Trans, null, "You have not accepted terms and conditions")) : (React.createElement(React.Fragment, null));
112
+ const modalContentBeforeTermVisited = () => isVerifyingLink ? (React.createElement("p", { className: "pf-v5-u-mt-xs" },
113
+ React.createElement(LoadingDots, { show: true, message: t('Verifying partner link') }))) : verificationFailMessage ? (React.createElement("p", { className: "pf-v5-u-mt-xs pf-v5-u-danger-color-100" }, verificationFailMessage)) : (React.createElement(React.Fragment, null,
114
+ React.createElement("p", null,
115
+ React.createElement(Trans, null, "A partner would like to collaborate with you for support when cases are shared. Please confirm the name below and continue to accept terms and conditions.")),
116
+ React.createElement(TextContent, { className: "pf-v5-u-mt-lg" },
117
+ React.createElement(Text, { component: TextVariants.h3 }, linkAccountName))));
118
+ return (React.createElement(Modal, { id: "partnership-terms-and-conditions-modal", className: "pf-modal-overflow-visible", title: t('Confirm partnership collaboration'), isOpen: isTermsModalOpen, onClose: onClose, showClose: true, onEscapePress: onClose, variant: ModalVariant.large, actions: !isTermVisited && !verificationFailMessage
94
119
  ? [
95
120
  React.createElement(Button, { href: getTnCUrl(), component: "a", variant: ButtonVariant.primary, key: "go-to-agreement", "data-tracking-id": "go-to-agreement" },
96
121
  React.createElement(ExternalLinkAltIcon, null),
@@ -104,9 +129,5 @@ export const PartnershipsTermsModal = () => {
104
129
  React.createElement(Button, { key: "close-after-link-created", "data-tracking-id": "close-after-link-created", variant: ButtonVariant.primary, onClick: () => onClose(), isDisabled: isUpdating },
105
130
  React.createElement(Trans, null, "Close")),
106
131
  ] },
107
- React.createElement(React.Fragment, null, isVerifyingLink ? (React.createElement(React.Fragment, null, verificationFailMessage ? (React.createElement("p", { className: "pf-u-mt-xs pf-u-danger-color-100" }, verificationFailMessage)) : (React.createElement("p", { className: "pf-u-mt-xs" },
108
- React.createElement(LoadingDots, { show: true, message: t('Verifying partner link') }))))) : !isVerifyingLink && !isTermVisited ? (React.createElement(React.Fragment, null,
109
- React.createElement("p", null, "A partner would like to collaborate with you for support when cases are shared. Please confirm the name below and continue to accept terms and conditions."),
110
- React.createElement(TextContent, { className: "pf-u-mt-lg" },
111
- React.createElement(Text, { component: TextVariants.h3 }, linkAccountName)))) : isTermVisited && isUpdating ? (React.createElement(LoadingIndicator, { show: true, size: "lg" })) : isTermVisited && ackChoice === 'accept' ? (React.createElement("div", null, "Your partnership link is created successfully")) : (React.createElement("div", null, "You have not accepted terms and conditions")))));
132
+ React.createElement(React.Fragment, null, isTermVisited ? modalContentWhenTermIsVisited() : modalContentBeforeTermVisited())));
112
133
  };
@@ -1,8 +1,9 @@
1
+ import React from 'react';
1
2
  interface IProps {
2
3
  isOpen: boolean;
3
4
  onClose: () => void;
4
5
  sendReqAgainFriendlyName?: string;
5
6
  }
6
- export declare const RequestCollaborationModal: (props: IProps) => JSX.Element;
7
+ export declare const RequestCollaborationModal: (props: IProps) => React.JSX.Element;
7
8
  export {};
8
9
  //# sourceMappingURL=RequestCollaborationModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestCollaborationModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/RequestCollaborationModal.tsx"],"names":[],"mappings":"AAuBA,UAAU,MAAM;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC;AAID,eAAO,MAAM,yBAAyB,UAAW,MAAM,gBAmOtD,CAAC"}
1
+ {"version":3,"file":"RequestCollaborationModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/RequestCollaborationModal.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,UAAU,MAAM;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC;AAID,eAAO,MAAM,yBAAyB,UAAW,MAAM,sBAqOtD,CAAC"}
@@ -8,10 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { pcm } from '@cee-eng/hydrajs';
11
- import { Button, ButtonVariant, Form, FormGroup, FormHelperText, Grid, GridItem, Modal, ModalVariant, TextInput, Tooltip, TooltipPosition, } from '@patternfly/react-core';
12
- import ExclamationCircleIcon from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';
11
+ import { Button, ButtonVariant, Form, FormGroup, FormHelperText, Grid, GridItem, HelperText, HelperTextItem, Modal, ModalVariant, TextInput, Tooltip, TooltipPosition, } from '@patternfly/react-core';
13
12
  import { ToastNotification, useCopyToClipboard } from '@rh-support/components';
14
- import { isEmpty } from 'lodash';
13
+ import isEmpty from 'lodash/isEmpty';
15
14
  import React, { useRef, useState } from 'react';
16
15
  import { Trans, useTranslation } from 'react-i18next';
17
16
  import { useManagePartnershipsDispatchContext } from '../../context/ManagePartnershipsProvider';
@@ -33,7 +32,7 @@ export const RequestCollaborationModal = (props) => {
33
32
  const dispatch = useManagePartnershipsDispatchContext();
34
33
  const isRequestingAgain = !isEmpty((_a = props.sendReqAgainFriendlyName) === null || _a === void 0 ? void 0 : _a.trim());
35
34
  const [localLinkName, setLocalLinkName] = useState('');
36
- const handleLinkNameChange = (link, _event) => {
35
+ const handleLinkNameChange = (_event, link) => {
37
36
  setLocalLinkName(link);
38
37
  setFriendlyName(link);
39
38
  setIsDuplicateLinkName(false);
@@ -72,7 +71,7 @@ export const RequestCollaborationModal = (props) => {
72
71
  }
73
72
  };
74
73
  const onNext = () => __awaiter(void 0, void 0, void 0, function* () {
75
- var _b;
74
+ var _a;
76
75
  setNextButtonIsClicked(true);
77
76
  if (!isRequestingAgain && isEmpty(friendlyName.trim())) {
78
77
  setValidated('error');
@@ -81,7 +80,7 @@ export const RequestCollaborationModal = (props) => {
81
80
  setIsFetching(true);
82
81
  try {
83
82
  let url;
84
- if ((_b = props.sendReqAgainFriendlyName) === null || _b === void 0 ? void 0 : _b.trim()) {
83
+ if ((_a = props.sendReqAgainFriendlyName) === null || _a === void 0 ? void 0 : _a.trim()) {
85
84
  url = yield pcm.partnerships.requestAgainLink(props.sendReqAgainFriendlyName.trim());
86
85
  }
87
86
  else if (!isEmpty(friendlyName.trim())) {
@@ -129,13 +128,16 @@ export const RequestCollaborationModal = (props) => {
129
128
  ] },
130
129
  React.createElement(React.Fragment, null,
131
130
  React.createElement("p", null, "Initiate a new collaboration by generating a unique link for your customer. Check the status under your requests to see if they accept or reject your collaboration."),
132
- React.createElement(Form, { className: "pf-u-my-md" },
131
+ React.createElement(Form, { className: "pf-v5-u-my-md" },
133
132
  React.createElement(Grid, { sm: 12, md: 6, lg: 6 },
134
133
  React.createElement(GridItem, null,
135
- React.createElement(FormGroup, { label: t('Name your link'), type: "string", helperText: React.createElement(FormHelperText, { isHidden: validated === 'error' },
136
- React.createElement(Trans, null, "Please enter a name for your request")), helperTextInvalid: isDuplicateLinkName
137
- ? t('Link name already used. Please enter a unique name')
138
- : t('Please enter a name for your request'), helperTextInvalidIcon: React.createElement(ExclamationCircleIcon, null), fieldId: partnershipLinkId, validated: validated, isRequired: true },
134
+ React.createElement(FormGroup, { label: t('Name your link'), type: "string", fieldId: partnershipLinkId, isRequired: true },
135
+ React.createElement(FormHelperText, null,
136
+ React.createElement(HelperText, null, validated !== 'error' ? (React.createElement(HelperTextItem, null,
137
+ React.createElement(Trans, null, "Please enter a name for your request"))) : (React.createElement(HelperTextItem, { variant: "error", hasIcon: true },
138
+ React.createElement(Trans, null, isDuplicateLinkName
139
+ ? t('Link name already used. Please enter a unique name')
140
+ : t('Please enter a name for your request')))))),
139
141
  React.createElement(TextInput, { isRequired: true, validated: validated, value: localLinkName || props.sendReqAgainFriendlyName, id: partnershipLinkId, "aria-describedby": "age-1-helper", onChange: handleLinkNameChange, onKeyDown: handleKeyDown, placeholder: t('e.g. Customer name'), isDisabled: showDone || isRequestingAgain }))))),
140
142
  showDone && (React.createElement(React.Fragment, null, !isRequestingAgain ? (React.createElement(React.Fragment, null,
141
143
  React.createElement("h4", null,
@@ -144,8 +146,8 @@ export const RequestCollaborationModal = (props) => {
144
146
  React.createElement("div", { className: "clip-content-wrapper code-block" },
145
147
  React.createElement("code", { ref: clipboardRef }, generatedUrl)),
146
148
  React.createElement(Tooltip, { position: TooltipPosition.top, content: clipboardText, trigger: "click" },
147
- 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" }))),
148
- React.createElement("p", { className: !isCopyClicked && isDoneClicked ? 'pf-u-danger-color-100' : '' },
149
+ 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", type: "button" }))),
150
+ React.createElement("p", { className: !isCopyClicked && isDoneClicked ? 'pf-v5-u-danger-color-100' : '' },
149
151
  React.createElement(Trans, null,
150
152
  ' ',
151
153
  "Please ",
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  export declare const daysFromNow: (date: string) => number;
2
- export declare function Requests(): JSX.Element;
3
+ export declare function Requests(): React.JSX.Element;
3
4
  //# sourceMappingURL=Requests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Requests.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/Requests.tsx"],"names":[],"mappings":"AA8BA,eAAO,MAAM,WAAW,SAAU,MAAM,WAMvC,CAAC;AACF,wBAAgB,QAAQ,gBAiPvB"}
1
+ {"version":3,"file":"Requests.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/Requests.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAanD,eAAO,MAAM,WAAW,SAAU,MAAM,WAMvC,CAAC;AACF,wBAAgB,QAAQ,sBAgRvB"}
@@ -15,7 +15,7 @@ import { UserPreferencesKeys, useUserPreferences } from '@rh-support/react-conte
15
15
  import isEmpty from 'lodash/isEmpty';
16
16
  import React, { useEffect, useState } from 'react';
17
17
  import { Trans, useTranslation } from 'react-i18next';
18
- import { useLocation } from 'react-router';
18
+ import { useLocation } from 'react-router-dom';
19
19
  import { useManagePartnershipsContext, useManagePartnershipsDispatchContext, } from '../../context/ManagePartnershipsProvider';
20
20
  import { setIsUpdatingRequests } from '../../reducers/ManagePartnershipsReducer';
21
21
  import { ManageTable } from '../ManageTable';
@@ -129,7 +129,7 @@ export function Requests() {
129
129
  ]
130
130
  : []),
131
131
  {
132
- title: (React.createElement("div", { className: "pf-u-danger-color-200" },
132
+ title: (React.createElement("div", { className: "pf-v5-u-danger-color-200" },
133
133
  React.createElement(Trans, null, "Delete"))),
134
134
  onClick: () => deleteRequest(friendlyName),
135
135
  itemKey: 'delete-request',
@@ -160,6 +160,23 @@ export function Requests() {
160
160
  // silently fails
161
161
  }
162
162
  };
163
+ // when a customer rejects a link, as soon as partner visits
164
+ // the partnership page, a pop-up should show up and inform
165
+ // partner that customer has rejected the link
166
+ // to achieve this, we always save the last rejected link
167
+ // friendly name that is unique in user preferences data
168
+ const displayLinkIsRejectedPopUp = (currentLatestRejectedFriendlyName) => {
169
+ const lastSavedAcceptedFriendlyName = JSON.parse(getPreferenceByKey(UserPreferencesKeys.partnershipLastestRejectedLink));
170
+ if (lastSavedAcceptedFriendlyName === currentLatestRejectedFriendlyName)
171
+ return;
172
+ try {
173
+ updatePreferences(UserPreferencesKeys.partnershipLastestRejectedLink, JSON.stringify(currentLatestRejectedFriendlyName));
174
+ ToastNotification.addDangerMessage(t('Request rejected'), t('A customer has rejected your collaboration. Find them in the table below.'));
175
+ }
176
+ catch (e) {
177
+ // silently fails
178
+ }
179
+ };
163
180
  const getStatuses = () => __awaiter(this, void 0, void 0, function* () {
164
181
  setIsFetchingStatuses(true);
165
182
  try {
@@ -172,6 +189,9 @@ export function Requests() {
172
189
  const lastStatusesAccepted = yield pcm.partnerships.getPartnerLinksStatuses(1, 1, ['accepted']);
173
190
  if (lastStatusesAccepted && lastStatusesAccepted[0])
174
191
  displayLinkIsVerifiedPopUp(lastStatusesAccepted[0].friendlyName);
192
+ const lastStatusesRejected = yield pcm.partnerships.getPartnerLinksStatuses(1, 1, ['declined']);
193
+ if (lastStatusesRejected && lastStatusesRejected[0])
194
+ displayLinkIsRejectedPopUp(lastStatusesRejected[0].friendlyName);
175
195
  setIsFetchingStatuses(false);
176
196
  }
177
197
  catch (e) {
@@ -190,14 +210,14 @@ export function Requests() {
190
210
  React.createElement(StackItem, { className: "toolbar" },
191
211
  React.createElement(ExpandableSectionToggle, { isExpanded: isExpanded, onToggle: onToggle, contentId: contentId },
192
212
  React.createElement("div", null,
193
- React.createElement("label", { className: "pf-u-color-100" },
213
+ React.createElement("label", { className: "pf-v5-u-color-100" },
194
214
  ' ',
195
215
  React.createElement(Trans, null, "Requests"),
196
- isFetchingStatuses ? (React.createElement(LoadingIndicator, { isInline: true, size: "sm", className: "pf-u-mx-sm" })) : (React.createElement(Badge, { className: "pf-u-mx-sm" }, statusList.length)))))),
216
+ isFetchingStatuses ? (React.createElement(LoadingIndicator, { isInline: true, size: "sm", className: "pf-v5-u-mx-sm" })) : (React.createElement(Badge, { className: "pf-v5-u-mx-sm" }, statusList.length)))))),
197
217
  React.createElement(StackItem, null,
198
218
  React.createElement(ExpandableSection, { isIndented: false, isExpanded: isExpanded, isDetached: true, contentId: contentId }, !isEmpty(statusList) ? (React.createElement(ManageTable, { ariaLabel: t('Requests'), columns: columns, data: statusList, errorVariant: AlertVariant.warning, isFetching: isFetchingStatuses, isError: false, errorTitle: t('Request error'), errorComponent: React.createElement(Trans, null, "Could not get requests"), pagination: true, actionResolver: statusList && !isFetchingStatuses && !isEmpty(statusList)
199
219
  ? actionResolver
200
- : null, perPage: 5 })) : (React.createElement("p", { className: "pf-u-p-md" },
220
+ : null, perPage: 5 })) : (React.createElement("p", { className: "pf-v5-u-p-md" },
201
221
  React.createElement(Trans, null, "No request"))))))),
202
222
  isRequestAgainModalOpen && (React.createElement(RequestCollaborationModal, { isOpen: isRequestAgainModalOpen, onClose: onRequestAgainModalClose, sendReqAgainFriendlyName: selectedRowFriendlyName }))));
203
223
  }
@@ -1,2 +1,3 @@
1
- export declare function ManagePartnerships(): JSX.Element;
1
+ import React from 'react';
2
+ export declare function ManagePartnerships(): React.JSX.Element;
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/index.tsx"],"names":[],"mappings":"AAYA,wBAAgB,kBAAkB,gBAsCjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,wBAAgB,kBAAkB,sBAkCjC"}
@@ -12,13 +12,14 @@ export function ManagePartnerships() {
12
12
  const { t } = useTranslation();
13
13
  const { globalMetadataState: { loggedInUserRights }, } = useGlobalStateContext();
14
14
  return (React.createElement(React.Fragment, null,
15
- React.createElement("header", { className: "pf-u-mt-md pf-u-mb-xs" },
15
+ React.createElement("header", { className: "pf-v5-u-mb-xs" },
16
16
  React.createElement("h2", null,
17
17
  React.createElement(Trans, null, "Partnerships")),
18
- React.createElement("p", null, loggedInUserRights.data.isPartner() ? (React.createElement(Trans, null, "Add, edit, or remove partnerships and manage your collaboration requests")) : (React.createElement(Trans, null, "Confirm, filter, or remove partnerships and manage collaboration requests.")))),
18
+ React.createElement("p", null,
19
+ React.createElement(Trans, null, "Add, edit, or remove partnerships and manage your collaboration requests"))),
19
20
  React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading partnerships list') } },
20
21
  React.createElement(ManagePartnershipsProvider, null,
21
- loggedInUserRights.data.isPartner() && React.createElement(Requests, null),
22
+ React.createElement(Requests, null),
22
23
  React.createElement(PartnershipsList, null),
23
24
  React.createElement(Switch, null,
24
25
  React.createElement(Route, { path: `/manage/partnerships/partnerlink/:linkHash?` }, loggedInUserRights.data.isCustomerOrgAdmin() ? (React.createElement(PartnershipsTermsModal, null)) : (React.createElement(NonOrgCustomerInfoModal, null))))))));
@@ -1,5 +1,6 @@
1
+ import React from 'react';
1
2
  interface IProps {
2
3
  }
3
- export declare function ManagePreferences(props: IProps): JSX.Element;
4
+ export declare function ManagePreferences(props: IProps): React.JSX.Element;
4
5
  export {};
5
6
  //# sourceMappingURL=ManagePreferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManagePreferences.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/ManagePreferences.tsx"],"names":[],"mappings":"AAIA,UAAU,MAAM;CAAG;AAEnB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,eAM9C"}
1
+ {"version":3,"file":"ManagePreferences.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/ManagePreferences.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,MAAM;CAAG;AAEnB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,qBAE9C"}
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import { Preferences } from './Preferences';
3
3
  export function ManagePreferences(props) {
4
- return (React.createElement("section", { id: "manage-preferences" },
5
- React.createElement(Preferences, null)));
4
+ return React.createElement(Preferences, null);
6
5
  }
@@ -1,5 +1,6 @@
1
+ import React from 'react';
1
2
  interface IProps {
2
3
  }
3
- export declare function Preferences(props: IProps): JSX.Element;
4
+ export declare function Preferences(props: IProps): React.JSX.Element;
4
5
  export {};
5
6
  //# sourceMappingURL=Preferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Preferences.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/Preferences.tsx"],"names":[],"mappings":"AAIA,UAAU,MAAM;CAAG;AAEnB,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,eAOxC"}
1
+ {"version":3,"file":"Preferences.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/Preferences.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,MAAM;CAAG;AAEnB,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,qBAOxC"}
@@ -1,5 +1,6 @@
1
+ import React from 'react';
1
2
  interface IProps {
2
3
  }
3
- export declare function PreferencesBody(props: IProps): JSX.Element;
4
+ export declare function PreferencesBody(props: IProps): React.JSX.Element;
4
5
  export {};
5
6
  //# sourceMappingURL=PreferencesBody.d.ts.map