@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.
- package/README.md +2 -0
- package/lib/esm/Manage.d.ts +2 -3
- package/lib/esm/Manage.d.ts.map +1 -1
- package/lib/esm/Manage.js +4 -10
- package/lib/esm/ManageTabs.d.ts +3 -1
- package/lib/esm/ManageTabs.d.ts.map +1 -1
- package/lib/esm/ManageTabs.js +54 -51
- package/lib/esm/Routes.d.ts +2 -0
- package/lib/esm/Routes.d.ts.map +1 -1
- package/lib/esm/Routes.js +21 -9
- package/lib/esm/components/Configs/ConfigInLineEdit.d.ts +2 -1
- package/lib/esm/components/Configs/ConfigInLineEdit.d.ts.map +1 -1
- package/lib/esm/components/Configs/ConfigSwitch.d.ts +2 -1
- package/lib/esm/components/Configs/ConfigSwitch.d.ts.map +1 -1
- package/lib/esm/components/Configs/ConfigSwitch.js +1 -1
- package/lib/esm/components/Configs/ConfigsTable.d.ts +2 -1
- package/lib/esm/components/Configs/ConfigsTable.d.ts.map +1 -1
- package/lib/esm/components/Configs/ConfigsTable.js +4 -3
- package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts +2 -1
- package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts.map +1 -1
- package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.js +2 -1
- package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts +2 -1
- package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts.map +1 -1
- package/lib/esm/components/Groups/GroupSelect/GroupSelect.js +23 -11
- package/lib/esm/components/Groups/GroupUserPermissionsSelect/GroupUserPermissionsSelect.d.ts +2 -1
- package/lib/esm/components/Groups/GroupUserPermissionsSelect/GroupUserPermissionsSelect.d.ts.map +1 -1
- package/lib/esm/components/Groups/GroupUserPermissionsSelect/GroupUserPermissionsSelect.js +1 -1
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts +2 -1
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts.map +1 -1
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.js +3 -3
- package/lib/esm/components/ManageBookmarkedAccountsTab/AddEditBookmarkModal.d.ts +2 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/AddEditBookmarkModal.d.ts.map +1 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/AddEditBookmarkModal.js +1 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkAccountSelector.d.ts +2 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkAccountSelector.d.ts.map +1 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkAccountSelector.js +15 -7
- package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkGroupSelector.d.ts +1 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkGroupSelector.d.ts.map +1 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/BookmarkGroupSelector.js +8 -5
- package/lib/esm/components/ManageBookmarkedAccountsTab/ManageGroupedBookmarkedAccountsTab.d.ts +2 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/ManageGroupedBookmarkedAccountsTab.d.ts.map +1 -1
- package/lib/esm/components/ManageBookmarkedAccountsTab/ManageGroupedBookmarkedAccountsTab.js +14 -11
- package/lib/esm/components/ManageExpiredContents/ExpiredContentCategory.d.ts +9 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentCategory.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentCategory.js +31 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentHeader.d.ts +3 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentHeader.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentHeader.js +9 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentManagement.d.ts +3 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentManagement.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentManagement.js +13 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentManager.d.ts +3 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentManager.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentManager.js +68 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItem.d.ts +9 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItem.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItem.js +77 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItemView.d.ts +14 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItemView.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/ExpiredContentSingleItemView.js +179 -0
- package/lib/esm/components/ManageExpiredContents/index.d.ts +2 -0
- package/lib/esm/components/ManageExpiredContents/index.d.ts.map +1 -0
- package/lib/esm/components/ManageExpiredContents/index.js +1 -0
- package/lib/esm/components/ManagePartnerships/NonOrgCustomerInfoModal.d.ts +2 -1
- package/lib/esm/components/ManagePartnerships/NonOrgCustomerInfoModal.d.ts.map +1 -1
- package/lib/esm/components/ManagePartnerships/PartnershipsList.d.ts +2 -1
- package/lib/esm/components/ManagePartnerships/PartnershipsList.d.ts.map +1 -1
- package/lib/esm/components/ManagePartnerships/PartnershipsList.js +3 -3
- package/lib/esm/components/ManagePartnerships/PartnershipsTermsModal.d.ts +2 -1
- package/lib/esm/components/ManagePartnerships/PartnershipsTermsModal.d.ts.map +1 -1
- package/lib/esm/components/ManagePartnerships/PartnershipsTermsModal.js +42 -21
- package/lib/esm/components/ManagePartnerships/RequestCollaborationModal.d.ts +2 -1
- package/lib/esm/components/ManagePartnerships/RequestCollaborationModal.d.ts.map +1 -1
- package/lib/esm/components/ManagePartnerships/RequestCollaborationModal.js +15 -13
- package/lib/esm/components/ManagePartnerships/Requests.d.ts +2 -1
- package/lib/esm/components/ManagePartnerships/Requests.d.ts.map +1 -1
- package/lib/esm/components/ManagePartnerships/Requests.js +25 -5
- package/lib/esm/components/ManagePartnerships/index.d.ts +2 -1
- package/lib/esm/components/ManagePartnerships/index.d.ts.map +1 -1
- package/lib/esm/components/ManagePartnerships/index.js +4 -3
- package/lib/esm/components/ManagePreferences/ManagePreferences.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/ManagePreferences.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/ManagePreferences.js +1 -2
- package/lib/esm/components/ManagePreferences/Preferences.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/Preferences.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/PreferencesBody.js +1 -1
- package/lib/esm/components/ManagePreferences/PreferencesHeader.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/PreferencesHeader.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/PreferencesHeader.js +1 -1
- package/lib/esm/components/ManagePreferences/components/PreferenceSelect.d.ts +1 -1
- package/lib/esm/components/ManagePreferences/components/PreferenceSelect.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/components/PreferenceSelect.js +5 -3
- package/lib/esm/components/ManagePreferences/components/PreferenceSwitch.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/components/PreferenceSwitch.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/components/PreferenceSwitch.js +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.js +13 -2
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseSearch.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseSearch.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseSearch.js +6 -4
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts +2 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.js +12 -11
- package/lib/esm/components/ManageTable/ManageTable.d.ts +1 -1
- package/lib/esm/components/ManageTable/ManageTable.d.ts.map +1 -1
- package/lib/esm/components/ManageTable/ManageTable.js +7 -8
- package/lib/esm/components/ManageTags/TagsManagement.d.ts +3 -0
- package/lib/esm/components/ManageTags/TagsManagement.d.ts.map +1 -0
- package/lib/esm/components/ManageTags/TagsManagement.js +11 -0
- package/lib/esm/components/ManageTags/TagsManager.d.ts +3 -0
- package/lib/esm/components/ManageTags/TagsManager.d.ts.map +1 -0
- package/lib/esm/components/ManageTags/TagsManager.js +261 -0
- package/lib/esm/components/ManageTags/index.d.ts +2 -0
- package/lib/esm/components/ManageTags/index.d.ts.map +1 -0
- package/lib/esm/components/ManageTags/index.js +1 -0
- package/lib/esm/components/NotificationEmails/NotificationEmailsModal.d.ts +2 -1
- package/lib/esm/components/NotificationEmails/NotificationEmailsModal.d.ts.map +1 -1
- package/lib/esm/components/NotificationEmails/NotificationEmailsModal.js +32 -7
- package/lib/esm/components/NotificationEmails/index.d.ts +2 -1
- package/lib/esm/components/NotificationEmails/index.d.ts.map +1 -1
- package/lib/esm/components/NotificationEmails/index.js +4 -4
- package/lib/esm/components/TopContentManagement/CategoryLimit/CategoryLimit.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/CategoryLimit/CategoryLimit.js +3 -2
- package/lib/esm/components/TopContentManagement/CategoryLimit/CategoryLimitGuidelines.js +1 -1
- package/lib/esm/components/TopContentManagement/CategoryLimit/QuestionAnswer.js +1 -1
- package/lib/esm/components/TopContentManagement/ContentUsage/ContentAccordion.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/ContentUsage/ContentAccordion.js +2 -2
- package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetrics.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetrics.js +3 -3
- package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetricsSelect.d.ts +1 -1
- package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetricsSelect.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/ContentUsage/PerformanceMetricsSelect.js +3 -3
- package/lib/esm/components/TopContentManagement/ContentUsage/VersionPerformanceMetrics.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/ContentUsage/VersionPerformanceMetrics.js +4 -4
- package/lib/esm/components/TopContentManagement/NoTopContentFound.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/NoTopContentFound.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/NoTopContentFound.js +14 -15
- package/lib/esm/components/TopContentManagement/TopContent.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContent.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/AddNewCategoryDropDown.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/AddNewCategoryDropDown.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/AddNewCategoryDropDown.js +8 -3
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategory.d.ts +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategory.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategory.js +3 -2
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategoryNew.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentCategoryNew.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentComponent.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentComponent.js +2 -2
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem.d.ts +6 -2
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItem.js +178 -59
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentCategoryContent/TopContentSingleItemLink.js +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentEditor.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentEditor.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentEditor.js +59 -15
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestion.d.ts +1 -0
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestion.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestion.js +35 -10
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestionHint.js +3 -3
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestionHintAccept.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentEditor/TopContentSuggestion/TopContentSuggestionHintAccept.js +26 -20
- package/lib/esm/components/TopContentManagement/TopContentHeader.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContentHeader.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentHeader.js +1 -1
- package/lib/esm/components/TopContentManagement/TopContentManagement.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContentManagement.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentManagement.js +4 -3
- package/lib/esm/components/TopContentManagement/TopContentProductVersionSelector.d.ts +2 -1
- package/lib/esm/components/TopContentManagement/TopContentProductVersionSelector.d.ts.map +1 -1
- package/lib/esm/components/TopContentManagement/TopContentProductVersionSelector.js +6 -6
- package/lib/esm/context/ExpiredContentContextProvider.d.ts +8 -0
- package/lib/esm/context/ExpiredContentContextProvider.d.ts.map +1 -0
- package/lib/esm/context/ExpiredContentContextProvider.js +10 -0
- package/lib/esm/context/ManagePartnershipsProvider.d.ts +1 -1
- package/lib/esm/context/ManagePartnershipsProvider.d.ts.map +1 -1
- package/lib/esm/context/TagManagementContextProvider.d.ts +8 -0
- package/lib/esm/context/TagManagementContextProvider.d.ts.map +1 -0
- package/lib/esm/context/TagManagementContextProvider.js +10 -0
- package/lib/esm/context/TopContentProvider.d.ts +1 -1
- package/lib/esm/context/TopContentProvider.d.ts.map +1 -1
- package/lib/esm/context/TopContentProvider.js +1 -0
- package/lib/esm/hooks/useUserPreferences.d.ts +13 -12
- package/lib/esm/hooks/useUserPreferences.d.ts.map +1 -1
- package/lib/esm/hooks/useUserPreferences.js +0 -1
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/reducers/ExpiredContentReducer.d.ts +36 -0
- package/lib/esm/reducers/ExpiredContentReducer.d.ts.map +1 -0
- package/lib/esm/reducers/ExpiredContentReducer.js +207 -0
- package/lib/esm/reducers/ManagePartnershipsReducer.d.ts +2 -2
- package/lib/esm/reducers/ManagePartnershipsReducer.d.ts.map +1 -1
- package/lib/esm/reducers/TagManagmentReducer.d.ts +27 -0
- package/lib/esm/reducers/TagManagmentReducer.d.ts.map +1 -0
- package/lib/esm/reducers/TagManagmentReducer.js +144 -0
- package/lib/esm/reducers/TopContentHelpers.d.ts.map +1 -1
- package/lib/esm/reducers/TopContentHelpers.js +4 -4
- package/lib/esm/reducers/TopContentReducer.d.ts +12 -7
- package/lib/esm/reducers/TopContentReducer.d.ts.map +1 -1
- package/lib/esm/reducers/TopContentReducer.js +61 -23
- package/lib/esm/scss/_main.scss +87 -55
- package/lib/esm/scss/_pf-overrides.scss +181 -0
- package/lib/esm/scss/index.scss +7 -7
- package/package.json +42 -42
- package/lib/esm/ManageTab.d.ts +0 -8
- package/lib/esm/ManageTab.d.ts.map +0 -1
- package/lib/esm/ManageTab.js +0 -12
- 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 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NonOrgCustomerInfoModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/NonOrgCustomerInfoModal.tsx"],"names":[],"mappings":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartnershipsList.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsList.tsx"],"names":[],"mappings":"
|
|
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
|
-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartnershipsTermsModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/PartnershipsTermsModal.tsx"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
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,
|
|
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":"
|
|
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
|
|
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 = (
|
|
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
|
|
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 ((
|
|
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",
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Requests.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/Requests.tsx"],"names":[],"mappings":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePartnerships/index.tsx"],"names":[],"mappings":"
|
|
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-
|
|
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,
|
|
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
|
-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManagePreferences.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/ManagePreferences.tsx"],"names":[],"mappings":"
|
|
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
|
|
5
|
-
React.createElement(Preferences, null)));
|
|
4
|
+
return React.createElement(Preferences, null);
|
|
6
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preferences.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/Preferences.tsx"],"names":[],"mappings":"
|
|
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"}
|