Skip to content

Commit

Permalink
refresh workflowsummary on update to permissions; tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kpierre13 committed Sep 27, 2024
1 parent 78c68f4 commit ae9c80d
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 9 deletions.
15 changes: 13 additions & 2 deletions src/pages/workflows/workflow/WorkflowSummary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@ import _ from 'lodash/fp';
import { Fragment, useState } from 'react';
import { div, h, h2, span } from 'react-hyperscript-helpers';
import * as breadcrumbs from 'src/components/breadcrumbs';
import { ButtonPrimary, Link } from 'src/components/common';
import { ButtonPrimary, Link, spinnerOverlay } from 'src/components/common';
import { icon } from 'src/components/icons';
import { MarkdownViewer, newWindowLinkRenderer } from 'src/components/markdown';
import { TooltipCell } from 'src/components/table';
import { Ajax } from 'src/libs/ajax';
import { getConfig } from 'src/libs/config';
import { withErrorReporting } from 'src/libs/error';
import { forwardRefWithName, useStore } from 'src/libs/react-utils';
import { forwardRefWithName, useCancellation, useStore } from 'src/libs/react-utils';
import { snapshotStore } from 'src/libs/state';
import * as Style from 'src/libs/style';
import * as Utils from 'src/libs/utils';
import { WorkflowRightBoxSection } from 'src/pages/workflows/components/WorkflowRightBoxSection';
import { PermissionsModal } from 'src/pages/workflows/workflow/common/PermissionsModal';
import { wrapWorkflows } from 'src/pages/workflows/workflow/WorkflowWrapper';
Expand All @@ -32,10 +34,16 @@ export const BaseWorkflowSummary = () => {
const persistenceId = `workflows/${namespace}/${name}/dashboard`;
const [importUrlCopied, setImportUrlCopied] = useState<boolean>();
const [permissionsModalOpen, setPermissionsModalOpen] = useState<boolean>(false);
const [loading, setLoading] = useState<boolean>(false);
const signal: AbortSignal = useCancellation();
const importUrl = `${
getConfig().orchestrationUrlRoot
}/ga4gh/v1/tools/${namespace}:${name}/versions/${snapshotId}/plain-WDL/descriptor`;

const refresh = Utils.withBusyState(setLoading, async () => {
snapshotStore.set(await Ajax(signal).Methods.method(namespace, name, snapshotId).get());
});

return div({ style: { flex: 1, display: 'flex' }, role: 'tabpanel' }, [
div({ style: Style.dashboard.leftBox }, [
synopsis &&
Expand Down Expand Up @@ -119,7 +127,10 @@ export const BaseWorkflowSummary = () => {
name,
selectedSnapshot: snapshotId,
setPermissionsModalOpen,
refresh,
setLoading,
}),
loading && spinnerOverlay,
]);
};

Expand Down
16 changes: 16 additions & 0 deletions src/pages/workflows/workflow/common/PermissionsModal.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand All @@ -75,6 +77,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand All @@ -97,6 +101,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand Down Expand Up @@ -135,6 +141,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand Down Expand Up @@ -169,6 +177,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand All @@ -188,6 +198,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand Down Expand Up @@ -226,6 +238,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand Down Expand Up @@ -259,6 +273,8 @@ describe('PermissionsModal', () => {
snapshotOrNamespace='Snapshot'
selectedSnapshot={3}
setPermissionsModalOpen={jest.fn()}
refresh={jest.fn()}
setLoading={jest.fn()}
/>
);
});
Expand Down
19 changes: 12 additions & 7 deletions src/pages/workflows/workflow/common/PermissionsModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ type WorkflowPermissionsModalProps = {
name: string;
selectedSnapshot: number;
setPermissionsModalOpen: (b: boolean) => void;
refresh: () => void;
setLoading: (b: boolean) => void;
};

type UserProps = {
Expand Down Expand Up @@ -166,7 +168,8 @@ const CurrentUsers = (props: CurrentUserProps) => {
};

export const PermissionsModal = (props: WorkflowPermissionsModalProps) => {
const { snapshotOrNamespace, namespace, name, selectedSnapshot, setPermissionsModalOpen } = props;
const { snapshotOrNamespace, namespace, name, selectedSnapshot, setPermissionsModalOpen, refresh, setLoading } =
props;
const signal: AbortSignal = useCancellation();
const [searchValue, setSearchValue] = useState<string>('');
const [permissions, setPermissions] = useState<WorkflowsPermissions>([]);
Expand Down Expand Up @@ -207,14 +210,14 @@ export const PermissionsModal = (props: WorkflowPermissionsModalProps) => {

const updatePublicUser = (v) => {
if (publicUser) {
permissions.map((pub) => {
permissions.map((user) => {
if (v === false) {
if (pub.user === 'public') {
Object.assign(pub, { user: 'public', role: 'NO ACCESS' });
if (user.user === 'public') {
Object.assign(user, { user: 'public', role: 'NO ACCESS' });
}
} else if (v === true) {
if (pub.user === 'public') {
Object.assign(pub, { user: 'public', role: 'READER' });
if (user.user === 'public') {
Object.assign(user, { user: 'public', role: 'READER' });
}
}

Expand All @@ -232,10 +235,12 @@ export const PermissionsModal = (props: WorkflowPermissionsModalProps) => {

try {
await Ajax(signal).Methods.method(namespace, name, selectedSnapshot).setPermissions(permissionUpdates);
window.location.reload();
setLoading(true);
refresh();
setPermissionsModalOpen(false);
} catch (error) {
await reportError('Error saving permissions.', error);
setLoading(false);
setPermissionsModalOpen(false);
}
});
Expand Down

0 comments on commit ae9c80d

Please sign in to comment.