});
});
cy.get('[data-cy=form-submit-btn]').click();
+ cy.get('[data-cy=form-dialog]').should('not.exist');
const editProjectDescription = (name, type) => {
cy.get('[data-cy=side-panel-tree]').contains('Home Projects').click();
cy.get('[data-cy=form-submit-btn]').click();
});
cy.get('[data-cy=form-dialog]').should("not.exist");
+ cy.get('[data-cy=snackbar]').contains('created');
+ cy.get('[data-cy=snackbar]').should("not.exist");
cy.get('[data-cy=side-panel-tree]').contains('Projects').click();
+ cy.waitForDom();
cy.get('[data-cy=project-panel]').contains(projectName).should('be.visible').rightclick();
cy.get('[data-cy=context-menu]').contains('Copy to clipboard').click();
cy.window().then((win) => (
"react-virtualized-auto-sizer": "1.0.2",
"react-window": "1.8.5",
"redux": "4.0.3",
+ "redux-devtools-extension": "^2.13.9",
"redux-form": "7.4.2",
"redux-thunk": "2.3.0",
"reselect": "4.0.0",
import { sortBy } from 'lodash';
import { formatFileSize } from 'common/formatters';
import { getInlineFileUrl, sanitizeToken } from 'views-components/context-menu/actions/helpers';
-import { extractUuidObjectType, ResourceObjectType } from 'models/resource';
+import { extractUuidKind, ResourceKind } from 'models/resource';
export interface CollectionPanelFilesProps {
isWritable: boolean;
const rightData = pathData[rightKey];
React.useEffect(() => {
- if (props.currentItemUuid && extractUuidObjectType(props.currentItemUuid) == ResourceObjectType.COLLECTION) {
+ if (props.currentItemUuid && extractUuidKind(props.currentItemUuid) === ResourceKind.COLLECTION) {
setPathData({});
setPath([props.currentItemUuid]);
}
import { contextMenuActions } from 'store/context-menu/context-menu-actions';
import { searchBarActions } from 'store/search-bar/search-bar-actions';
import { pluginConfig } from 'plugins';
+import { openProjectPanel } from 'store/project-panel/project-panel-action';
export const addRouteChangeHandlers = (history: History, store: RootStore) => {
const handler = handleLocationChange(store);
}
if (projectMatch) {
- store.dispatch(WorkbenchActions.loadProject(projectMatch.params.id));
+ store.dispatch(openProjectPanel(projectMatch.params.id));
} else if (collectionMatch) {
store.dispatch(WorkbenchActions.loadCollection(collectionMatch.params.id));
} else if (favoriteMatch) {
select: select
? JSON.stringify(select.map(sel => {
const sp = sel.split(".");
- return sp.length == 2 ? (sp[0] + "." + snakeCase(sp[1])) : snakeCase(sel);
+ return sp.length === 2 ? (sp[0] + "." + snakeCase(sp[1])) : snakeCase(sel);
}))
: undefined
};
import { propertiesActions } from "store/properties/properties-actions";
import { RootState } from 'store/store';
import { getProperty } from "store/properties/properties";
+import { loadProject } from "store/workbench/workbench-actions";
export const PROJECT_PANEL_ID = "projectPanel";
export const PROJECT_PANEL_CURRENT_UUID = "projectPanelCurrentUuid";
export const projectPanelActions = bindDataExplorerActions(PROJECT_PANEL_ID);
export const openProjectPanel = (projectUuid: string) =>
- (dispatch: Dispatch) => {
+ async (dispatch: Dispatch) => {
+ await dispatch<any>(loadProject(projectUuid));
dispatch(propertiesActions.SET_PROPERTY({ key: PROJECT_PANEL_CURRENT_UUID, value: projectUuid }));
dispatch(projectPanelActions.RESET_EXPLORER_SEARCH_VALUE());
dispatch(projectPanelActions.REQUEST_ITEMS());
import { tooltipsMiddleware } from './tooltips/tooltips-middleware';
import { sidePanelReducer } from './side-panel/side-panel-reducer'
import { bannerReducer } from './banner/banner-reducer';
-
-declare global {
- interface Window {
- __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;
- }
-}
-
-const composeEnhancers =
- (process.env.NODE_ENV === 'development' &&
- window && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ||
- compose;
+import { composeWithDevTools } from 'redux-devtools-extension';
export type RootState = ReturnType<ReturnType<typeof createRootReducer>>;
middlewares = pluginConfig.middlewares.reduce(reduceMiddlewaresFn, middlewares);
- const enhancer = composeEnhancers(applyMiddleware(redirectToMiddleware, ...middlewares));
+ const enhancer = composeWithDevTools({/* options */ })(applyMiddleware(redirectToMiddleware, ...middlewares));
return createStore(rootReducer, enhancer);
}
} from 'store/favorite-panel/favorite-panel-action';
import {
getProjectPanelCurrentUuid,
- openProjectPanel,
projectPanelActions,
setIsProjectPanelTrashed,
} from 'store/project-panel/project-panel-action';
(project: GroupContentsResource | string) =>
async (dispatch: Dispatch<any>) => {
const uuid = typeof project === 'string' ? project : project.uuid;
- dispatch(openProjectPanel(uuid));
dispatch(loadDetailsPanel(uuid));
if (typeof project !== 'string') {
dispatch(updateResources([project]));
//
// SPDX-License-Identifier: AGPL-3.0
-import React, { ReactElement, useState } from 'react';
+import React, { ReactElement, memo, useState } from 'react';
import { Dispatch } from 'redux';
import {
StyleRulesCallback,
type ProcessIOPreviewProps = ProcessIOPreviewDataProps & WithStyles<CssRules>;
-const ProcessIOPreview = withStyles(styles)(
+const ProcessIOPreview = memo(withStyles(styles)(
({ classes, data, showImagePreview, valueLabel }: ProcessIOPreviewProps) => {
const showLabel = data.some((param: ProcessIOParameter) => param.label);
return <Table className={classes.tableRoot} aria-label="Process IO Preview">
})}
</TableBody>
</Table >;
- });
+ }));
interface ProcessValuePreviewProps {
value: ProcessIOValue;
const fileArrayMainFiles = ((input as FileArrayCommandInputParameter).value || []);
const firstMainFilePdh = (fileArrayMainFiles.length > 0 && fileArrayMainFiles[0]) ? getResourcePdhUrl(fileArrayMainFiles[0], pdh) : "";
- // Convert each main file into separate arrays of ProcessIOValue to preserve secondaryFile grouping
- const fileArrayValues = fileArrayMainFiles.map((mainFile: File, i): ProcessIOValue[] => {
- const secondaryFiles = ((mainFile as unknown) as FileWithSecondaryFiles)?.secondaryFiles || [];
- return [
+ // Convert each main and secondaryFiles into array of ProcessIOValue preserving ordering
+ let fileArrayValues: ProcessIOValue[] = [];
+ for(let i = 0; i < fileArrayMainFiles.length; i++) {
+ const secondaryFiles = ((fileArrayMainFiles[i] as unknown) as FileWithSecondaryFiles)?.secondaryFiles || [];
+ fileArrayValues.push(
// Pass firstMainFilePdh to secondary files and every main file besides the first to hide pdh if equal
- ...(mainFile ? [fileToProcessIOValue(mainFile, false, auth, pdh, i > 0 ? firstMainFilePdh : "")] : []),
+ ...(fileArrayMainFiles[i] ? [fileToProcessIOValue(fileArrayMainFiles[i], false, auth, pdh, i > 0 ? firstMainFilePdh : "")] : []),
...(secondaryFiles.map(file => fileToProcessIOValue(file, true, auth, pdh, firstMainFilePdh)))
- ];
- // Reduce each mainFile/secondaryFile group into single array preserving ordering
- }).reduce((acc: ProcessIOValue[], mainFile: ProcessIOValue[]) => (acc.concat(mainFile)), []);
+ );
+ }
return fileArrayValues.length ?
fileArrayValues :
react-window: 1.8.5
redux: 4.0.3
redux-devtools: 3.4.1
+ redux-devtools-extension: ^2.13.9
redux-form: 7.4.2
redux-mock-store: 1.5.4
redux-thunk: 2.3.0
languageName: node
linkType: hard
+"redux-devtools-extension@npm:^2.13.9":
+ version: 2.13.9
+ resolution: "redux-devtools-extension@npm:2.13.9"
+ peerDependencies:
+ redux: ^3.1.0 || ^4.0.0
+ checksum: 603d48fd6acf3922ef373b251ab3fdbb990035e90284191047b29d25b06ea18122bc4ef01e0704ccae495acb27ab5e47b560937e98213605dd88299470025db9
+ languageName: node
+ linkType: hard
+
"redux-devtools-instrument@npm:^1.0.1":
version: 1.10.0
resolution: "redux-devtools-instrument@npm:1.10.0"