From 4b3af15992994058715e95f6b91c95aea9f3b4e2 Mon Sep 17 00:00:00 2001 From: jerabekjiri Date: Thu, 13 Apr 2023 14:09:59 +0200 Subject: [PATCH 1/4] add repo col and filter Issue: AAH-2274 --- .../ansible-repository-collection-version-add.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/actions/ansible-repository-collection-version-add.tsx b/src/actions/ansible-repository-collection-version-add.tsx index dae4185645..34cef9c63d 100644 --- a/src/actions/ansible-repository-collection-version-add.tsx +++ b/src/actions/ansible-repository-collection-version-add.tsx @@ -75,6 +75,7 @@ const AddCollectionVersionModal = ({ const renderTableRow = (item: CollectionVersionSearch, index: number) => { const { collection_version: { name, namespace, version, description }, + repository, } = item; return ( @@ -91,6 +92,7 @@ const AddCollectionVersionModal = ({ {namespace}.{name} v{version} {description} + {repository.name} ); }; @@ -138,6 +140,10 @@ const AddCollectionVersionModal = ({ id: 'namespace', title: t`Namespace`, }, + { + id: 'repository_name', + title: t`Repository`, + }, ]} noDataDescription={t`Collection versions will appear once a collection is uploaded.`} noDataTitle={t`No collection versions yet`} @@ -159,6 +165,11 @@ const AddCollectionVersionModal = ({ type: 'none', id: 'col2', }, + { + title: t`Repository`, + type: 'none', + id: 'col3', + }, ]} title={t`Collection versions`} /> From a8892ac6699c258879cc169a91b2f1fe35f4472b Mon Sep 17 00:00:00 2001 From: jerabekjiri Date: Thu, 13 Apr 2023 14:11:49 +0200 Subject: [PATCH 2/4] add multi select in select collection screen Issue: AAH-2274 --- CHANGES/2274.misc | 1 + ...ible-repository-collection-version-add.tsx | 61 +++++++++++++------ src/api/ansible-repository.ts | 4 +- src/utilities/repositories.ts | 32 ++++++++++ 4 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 CHANGES/2274.misc diff --git a/CHANGES/2274.misc b/CHANGES/2274.misc new file mode 100644 index 0000000000..8ccc550ba7 --- /dev/null +++ b/CHANGES/2274.misc @@ -0,0 +1 @@ +Improved select collection screen: added repository field, multi select and repository filter diff --git a/src/actions/ansible-repository-collection-version-add.tsx b/src/actions/ansible-repository-collection-version-add.tsx index 34cef9c63d..7a3e13ff2c 100644 --- a/src/actions/ansible-repository-collection-version-add.tsx +++ b/src/actions/ansible-repository-collection-version-add.tsx @@ -1,5 +1,5 @@ import { t } from '@lingui/macro'; -import { Button, Modal, Radio } from '@patternfly/react-core'; +import { Button, Checkbox, Modal } from '@patternfly/react-core'; import React, { useState } from 'react'; import { AnsibleRepositoryAPI, @@ -8,29 +8,43 @@ import { } from 'src/api'; import { AlertList, AlertType, DetailList, closeAlert } from 'src/components'; import { canEditAnsibleRepository } from 'src/permissions'; -import { handleHttpError, parsePulpIDFromURL, taskAlert } from 'src/utilities'; +import { + RepositoriesUtils, + handleHttpError, + parsePulpIDFromURL, + taskAlert, +} from 'src/utilities'; import { Action } from './action'; const add = ( { repositoryHref, repositoryName }, - { namespace, name, version, pulp_href: collectionVersionHref }, + collections, { addAlert, setState, query }, ) => { const pulpId = parsePulpIDFromURL(repositoryHref); - return AnsibleRepositoryAPI.addContent(pulpId, collectionVersionHref) + const collectionVersionHrefs = collections.map( + (c) => c.collection_version.pulp_href, + ); + return AnsibleRepositoryAPI.addContent(pulpId, collectionVersionHrefs) .then(({ data }) => { - addAlert( - taskAlert( - data.task, - t`Started adding ${namespace}.${name} v${version} to repository "${repositoryName}".`, - ), + collections.map( + ({ collection_version: { name, namespace, version } }) => { + addAlert( + taskAlert( + data.task, + t`Started adding ${namespace}.${name} v${version} to repository "${repositoryName}".`, + ), + ); + setState((ms) => ({ ...ms, addCollectionVersionModal: null })); + query({}); + }, ); - setState((ms) => ({ ...ms, addCollectionVersionModal: null })); - query({}); }) .catch( handleHttpError( - t`Failed to add ${namespace}.${name} v${version} to repository "${repositoryName}".`, + t`Failed to add collection${ + collections.length === 1 ? '' : 's' + } to repository "${repositoryName}".`, () => setState((ms) => ({ ...ms, addCollectionVersionModal: null })), addAlert, ), @@ -45,7 +59,7 @@ const AddCollectionVersionModal = ({ closeAction: () => void; }) => { const [alerts, setAlerts] = useState([]); - const [selected, setSelected] = useState(null); + const [selected, setSelected] = useState([]); const addAlert = (alert: AlertType) => { setAlerts([...alerts, alert]); @@ -79,12 +93,19 @@ const AddCollectionVersionModal = ({ } = item; return ( - setSelected(item)} key={index}> + + setSelected( + RepositoriesUtils.pushToOrFilterOutCollections(item, selected), + ) + } + key={index} + > - @@ -189,13 +210,13 @@ export const ansibleRepositoryCollectionVersionAddAction = Action({ modal: ({ addAlert, state, setState, query }) => state.addCollectionVersionModal ? ( - add(state.addCollectionVersionModal, collection.collection_version, { + addAction={(collections: CollectionVersionSearch[]) => { + add(state.addCollectionVersionModal, collections, { addAlert, setState, query, - }) - } + }); + }} closeAction={() => setState((ms) => ({ ...ms, addCollectionVersionModal: null })) } diff --git a/src/api/ansible-repository.ts b/src/api/ansible-repository.ts index 639768ca53..d979e9351b 100644 --- a/src/api/ansible-repository.ts +++ b/src/api/ansible-repository.ts @@ -22,9 +22,9 @@ class API extends PulpAPI { }); } - addContent(id, collection_version_href) { + addContent(id, collection_version_hrefs) { return this.http.post(this.apiPath + id + '/modify/', { - add_content_units: [collection_version_href], + add_content_units: collection_version_hrefs, }); } diff --git a/src/utilities/repositories.ts b/src/utilities/repositories.ts index 0a76eb3b26..16416c002a 100644 --- a/src/utilities/repositories.ts +++ b/src/utilities/repositories.ts @@ -1,5 +1,6 @@ import { t } from '@lingui/macro'; import { Repositories } from 'src/api/repositories'; +import { CollectionVersionSearch } from 'src/api/response-types/collection'; import { Repository } from 'src/api/response-types/repositories'; import { waitForTaskUrl } from 'src/utilities'; import { parsePulpIDFromURL } from 'src/utilities/parse-pulp-id'; @@ -82,4 +83,35 @@ export class RepositoriesUtils { true, ); } + + public static pushToOrFilterOutCollections( + selectedCollection: CollectionVersionSearch, + collections: CollectionVersionSearch[], + ): CollectionVersionSearch[] { + // check if collection is already selected + const selectedItem = collections.find( + ({ collection_version: { name, namespace, version }, repository }) => + name === selectedCollection.collection_version.name && + namespace === selectedCollection.collection_version.namespace && + version === selectedCollection.collection_version.version && + repository.name === selectedCollection.repository.name, + ); + + // if collection is not selected, add it to selected items + if (!selectedItem) { + return [...collections, selectedCollection]; + } + + // unselect collection + return collections.filter( + ({ collection_version, repository }) => + collection_version.name !== + selectedCollection.collection_version.name || + collection_version.namespace !== + selectedCollection.collection_version.namespace || + collection_version.version !== + selectedCollection.collection_version.version || + repository.name !== selectedCollection.repository.name, + ); + } } From 979f397f3fecbf00cb9697c6f6c6a9a679ec51ae Mon Sep 17 00:00:00 2001 From: jerabekjiri Date: Thu, 13 Apr 2023 14:22:09 +0200 Subject: [PATCH 3/4] add source repo name to add alert Issue: AAH-2274 --- src/actions/ansible-repository-collection-version-add.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/actions/ansible-repository-collection-version-add.tsx b/src/actions/ansible-repository-collection-version-add.tsx index 7a3e13ff2c..f9c22ea2f5 100644 --- a/src/actions/ansible-repository-collection-version-add.tsx +++ b/src/actions/ansible-repository-collection-version-add.tsx @@ -28,11 +28,11 @@ const add = ( return AnsibleRepositoryAPI.addContent(pulpId, collectionVersionHrefs) .then(({ data }) => { collections.map( - ({ collection_version: { name, namespace, version } }) => { + ({ collection_version: { name, namespace, version }, repository }) => { addAlert( taskAlert( data.task, - t`Started adding ${namespace}.${name} v${version} to repository "${repositoryName}".`, + t`Started adding ${namespace}.${name} v${version} from "${repository.name}" to repository "${repositoryName}".`, ), ); setState((ms) => ({ ...ms, addCollectionVersionModal: null })); From d4d579ba075a450dff6ea38510f2c3d6df75dfd0 Mon Sep 17 00:00:00 2001 From: jerabekjiri Date: Fri, 14 Apr 2023 14:13:38 +0200 Subject: [PATCH 4/4] fix alert plural translation Issue: AAH-2274 --- .../ansible-repository-collection-version-add.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/actions/ansible-repository-collection-version-add.tsx b/src/actions/ansible-repository-collection-version-add.tsx index f9c22ea2f5..0cf10f441d 100644 --- a/src/actions/ansible-repository-collection-version-add.tsx +++ b/src/actions/ansible-repository-collection-version-add.tsx @@ -1,4 +1,4 @@ -import { t } from '@lingui/macro'; +import { plural, t } from '@lingui/macro'; import { Button, Checkbox, Modal } from '@patternfly/react-core'; import React, { useState } from 'react'; import { @@ -42,9 +42,10 @@ const add = ( }) .catch( handleHttpError( - t`Failed to add collection${ - collections.length === 1 ? '' : 's' - } to repository "${repositoryName}".`, + plural(collections.length, { + one: `Failed to add collection to repository "${repositoryName}".`, + other: `Failed to add collections to repository "${repositoryName}".`, + }), () => setState((ms) => ({ ...ms, addCollectionVersionModal: null })), addAlert, ),