Merge branch '20829-can-manage' refs #20829
authorPeter Amstutz <peter.amstutz@curii.com>
Thu, 24 Aug 2023 19:06:05 +0000 (15:06 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Thu, 24 Aug 2023 19:06:05 +0000 (15:06 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

Makefile
cypress/integration/sharing.spec.js
src/services/groups-service/groups-service.ts
src/store/collections-content-address-panel/collections-content-address-middleware-service.ts
src/store/shared-with-me-panel/shared-with-me-middleware-service.ts
src/store/trash-panel/trash-panel-middleware-service.ts
src/views-components/main-app-bar/account-menu.tsx

index 0b1b2381efa558a487d5d0ed8e54d0807f491fae..0c618fd096386bba1a7744d77c7af11a19a164a3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@ GIT_COMMIT?=$(shell git rev-parse --short HEAD)
 # changes in the package. (i.e. example config files externally added
 ITERATION?=1
 
-TARGETS?=centos7 debian10 debian11 ubuntu1804 ubuntu2004
+TARGETS?=centos7 rocky8 debian10 debian11 ubuntu1804 ubuntu2004
 
 ARVADOS_DIRECTORY?=unset
 
index 5fbf5692f2b200e17c3aaa48b6731109b889e3fb..f742d09062a4f0b95fe8be8946fb20464a0b8ef7 100644 (file)
@@ -106,6 +106,20 @@ describe('Sharing tests', function () {
 
                 cy.contains('Shared with me').click();
 
+                // Test search
+                cy.get('[data-cy=search-input] input').type('readonly');
+                cy.get('main').should('not.contain', mySharedWritableProject.name);
+                cy.get('main').should('contain', mySharedReadonlyProject.name);
+                cy.get('[data-cy=search-input] input').clear();
+
+                // Test filter
+                cy.waitForDom().get('th').contains('Type').click();
+                cy.get('div[role=presentation]').contains('Project').click();
+                cy.waitForDom().get('main table tr td').contains('Project').should('not.exist');
+                cy.get('div[role=presentation]').contains('Project').click();
+                cy.waitForDom().get('div[role=presentation] button').contains('Close').click();
+
+                // Test move to trash
                 cy.get('main').contains(mySharedWritableProject.name).rightclick();
                 cy.get('[data-cy=context-menu]').should('contain', 'Move to trash');
                 cy.get('[data-cy=context-menu]').contains('Move to trash').click();
index fc6033002dccea2532e27dfe361eaa354747f860..b9f47df0dbb97e01e7f020c84ebf2eb1139c4339 100644 (file)
@@ -60,7 +60,7 @@ export class GroupsService<
                 }))
                 : undefined
         };
-        const pathUrl = uuid ? `/${uuid}/contents` : '/contents';
+        const pathUrl = (uuid !== '') ? `/${uuid}/contents` : '/contents';
         const cfg: AxiosRequestConfig = {
             params: CommonResourceService.mapKeys(snakeCase)(params),
         };
index 56255860eebaf5644201db66d51f3ee20f4a6dbe..2d89cccd020072b11545691231107ed5a510c7a2 100644 (file)
@@ -13,7 +13,6 @@ import { resourcesActions } from 'store/resources/resources-actions';
 import { FilterBuilder } from 'services/api/filter-builder';
 import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions';
 import { collectionsContentAddressActions } from './collections-content-address-panel-actions';
-import { navigateTo } from 'store/navigation/navigation-action';
 import { updateFavorites } from 'store/favorites/favorites-actions';
 import { updatePublicFavorites } from 'store/public-favorites/public-favorites-actions';
 import { setBreadcrumbs } from '../breadcrumbs/breadcrumbs-actions';
index a41978707dec090a3eb5df316ff19a6e087c291c..f2e402347e4c1b2bc3d3093c9198a5603c0d1df7 100644 (file)
@@ -19,8 +19,9 @@ import { OrderBuilder, OrderDirection } from 'services/api/order-builder';
 import { ProjectResource } from 'models/project';
 import { getSortColumn } from "store/data-explorer/data-explorer-reducer";
 import { updatePublicFavorites } from 'store/public-favorites/public-favorites-actions';
-import { FilterBuilder } from 'services/api/filter-builder';
+import { FilterBuilder, joinFilters } from 'services/api/filter-builder';
 import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions';
+import { AuthState } from 'store/auth/auth-reducer';
 
 export class SharedWithMeMiddlewareService extends DataExplorerMiddlewareService {
     constructor(private services: ServiceRepository, id: string) {
@@ -33,11 +34,7 @@ export class SharedWithMeMiddlewareService extends DataExplorerMiddlewareService
         try {
             api.dispatch(progressIndicatorActions.START_WORKING(this.getId()));
             const response = await this.services.groupsService
-                .contents('', {
-                    ...getParams(dataExplorer),
-                    excludeHomeProject: true,
-                    filters: new FilterBuilder().addDistinct('uuid', `${state.auth.config.uuidPrefix}-j7d0g-publicfavorites`).getFilters()
-                });
+                .contents('', getParams(dataExplorer, state.auth));
             api.dispatch<any>(updateFavorites(response.items.map(item => item.uuid)));
             api.dispatch<any>(updatePublicFavorites(response.items.map(item => item.uuid)));
             api.dispatch(updateResources(response.items));
@@ -51,10 +48,14 @@ export class SharedWithMeMiddlewareService extends DataExplorerMiddlewareService
     }
 }
 
-export const getParams = (dataExplorer: DataExplorer) => ({
+export const getParams = (dataExplorer: DataExplorer, authState: AuthState) => ({
     ...dataExplorerToListParams(dataExplorer),
     order: getOrder(dataExplorer),
-    filters: getFilters(dataExplorer),
+    filters: joinFilters(
+        getFilters(dataExplorer),
+        new FilterBuilder().addDistinct('uuid', `${authState.config.uuidPrefix}-j7d0g-publicfavorites`).getFilters(),
+    ),
+    excludeHomeProject: true,
 });
 
 const getOrder = (dataExplorer: DataExplorer) => {
index bed3e62859b73c52bae07259599e2066afe8ef1f..e63365103319c709de6a7405e594409662e1148b 100644 (file)
@@ -56,7 +56,7 @@ export class TrashPanelMiddlewareService extends DataExplorerMiddlewareService {
         try {
             api.dispatch(progressIndicatorActions.START_WORKING(this.getId()));
             const listResults = await this.services.groupsService
-                .contents(userUuid, {
+                .contents('', {
                     ...dataExplorerToListParams(dataExplorer),
                     order: getOrder(dataExplorer),
                     filters,
index 4b62cea2c60f343739d92396ec6cc3dfbeb126fb..15e008d1e89d64961af348b6cdd4a7fd3a98d056 100644 (file)
@@ -71,10 +71,6 @@ export const AccountMenuComponent =
             <MenuItem onClick={() => dispatch(navigateToSiteManager)}>Site Manager</MenuItem>
             <MenuItem onClick={() => dispatch(navigateToMyAccount)}>My account</MenuItem>
             <MenuItem onClick={() => dispatch(navigateToLinkAccount)}>Link account</MenuItem>
-            <MenuItem>
-                <a href={`${workbenchURL.replace(/\/$/, "")}/${wb1URL(currentRoute)}?api_token=${apiToken}`}
-                    className={classes.link}>
-                    Switch to Workbench v1</a></MenuItem>
         </>;
 
         const reduceItemsFn: (a: React.ReactElement[],
@@ -97,7 +93,7 @@ export const AccountMenuComponent =
                 <MenuItem data-cy="logout-menuitem"
                     onClick={() => dispatch(authActions.LOGOUT({ deleteLinkData: true, preservePath: false }))}>
                     Logout
-                </MenuItem>
+                </MenuItem>
             </DropdownMenu>
             : null;
     };