dispatch(collectionPanelActions.LOAD_COLLECTION({ uuid }));
dispatch(collectionPanelFilesAction.SET_COLLECTION_FILES({ files: createTree() }));
const collection = await services.collectionService.get(uuid);
+ dispatch(collectionPanelActions.LOAD_COLLECTION_SUCCESS({ item: collection }));
dispatch(resourcesActions.SET_RESOURCES([collection]));
dispatch<any>(loadCollectionFiles(collection.uuid));
dispatch<any>(loadCollectionTags(collection.uuid));
import { loadCollectionFiles } from '../collection-panel/collection-panel-files/collection-panel-files-actions';
import { snackbarActions } from '~/store/snackbar/snackbar-actions';
import { fileUploaderActions } from '~/store/file-uploader/file-uploader-actions';
-import { reset } from 'redux-form';
+import { reset, startSubmit } from 'redux-form';
export const uploadCollectionFiles = (collectionUuid: string) =>
async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
dispatch(fileUploaderActions.CLEAR_UPLOAD());
};
-export const UPLOAD_COLLECTION_FILES_DIALOG = 'uploadCollectionFilesDialog';
+export const COLLECTION_UPLOAD_FILES_DIALOG = 'uploadCollectionFilesDialog';
export const openUploadCollectionFilesDialog = () => (dispatch: Dispatch) => {
- dispatch(reset(UPLOAD_COLLECTION_FILES_DIALOG));
+ dispatch(reset(COLLECTION_UPLOAD_FILES_DIALOG));
dispatch(fileUploaderActions.CLEAR_UPLOAD());
- dispatch<any>(dialogActions.OPEN_DIALOG({ id: UPLOAD_COLLECTION_FILES_DIALOG, data: {} }));
+ dispatch<any>(dialogActions.OPEN_DIALOG({ id: COLLECTION_UPLOAD_FILES_DIALOG, data: {} }));
};
-export const uploadCurrentCollectionFiles = () =>
+export const submitCollectionFiles = () =>
async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
const currentCollection = getState().collectionPanel.item;
if (currentCollection) {
+ dispatch(startSubmit(COLLECTION_UPLOAD_FILES_DIALOG));
await dispatch<any>(uploadCollectionFiles(currentCollection.uuid));
dispatch<any>(loadCollectionFiles(currentCollection.uuid));
dispatch(closeUploadCollectionFilesDialog());
}
};
-export const closeUploadCollectionFilesDialog = () => dialogActions.CLOSE_DIALOG({ id: UPLOAD_COLLECTION_FILES_DIALOG });
+export const closeUploadCollectionFilesDialog = () => dialogActions.CLOSE_DIALOG({ id: COLLECTION_UPLOAD_FILES_DIALOG });
const handleUploadProgress = (dispatch: Dispatch) => (fileId: number, loaded: number, total: number, currentTime: number) => {
dispatch(fileUploaderActions.SET_UPLOAD_PROGRESS({ fileId, loaded, total, currentTime }));
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { compose } from "redux";
+import { reduxForm } from 'redux-form';
+import { withDialog } from "~/store/dialog/with-dialog";
+import { CollectionCreateFormDialogData } from '~/store/collections/collection-create-actions';
+import { COLLECTION_UPLOAD_FILES_DIALOG, submitCollectionFiles } from '~/store/collections/collection-upload-actions';
+import { CollectionFilesUploadDialog as Dialog } from '../dialog-upload/collection-files-upload-dialog';
+
+export const CollectionFilesUploadDialog = compose(
+ withDialog(COLLECTION_UPLOAD_FILES_DIALOG),
+ reduxForm<CollectionCreateFormDialogData>({
+ form: COLLECTION_UPLOAD_FILES_DIALOG,
+ onSubmit: (data, dispatch) => {
+ dispatch(submitCollectionFiles());
+ }
+ })
+)(Dialog);
}
})
)(DialogCollectionCreate);
-
-// onSubmit: (data: { name: string, description: string }, files: UploadFile[]) => void;
\ No newline at end of file
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from 'react';
+import { InjectedFormProps, Field } from 'redux-form';
+import { WithDialogProps } from '~/store/dialog/with-dialog';
+import { CollectionCreateFormDialogData } from '~/store/collections/collection-create-actions';
+import { FormDialog } from '~/components/form-dialog/form-dialog';
+import { require } from '~/validators/require';
+import { FileUploaderField } from '../file-uploader/file-uploader';
+
+
+type CollectionFilesUploadDialogProps = WithDialogProps<{}> & InjectedFormProps<CollectionCreateFormDialogData>;
+
+export const CollectionFilesUploadDialog = (props: CollectionFilesUploadDialogProps) =>
+ <FormDialog
+ dialogTitle='Upload data'
+ formFields={UploadCollectionFilesFields}
+ submitLabel='Upload data'
+ {...props}
+ />;
+
+const UploadCollectionFilesFields = () =>
+ <Field
+ name='files'
+ validate={[require]}
+ component={FileUploaderField} />;
+
+
+++ /dev/null
-// Copyright (C) The Arvados Authors. All rights reserved.
-//
-// SPDX-License-Identifier: AGPL-3.0
-
-import { connect } from "react-redux";
-import { Dispatch, compose } from "redux";
-import { withDialog } from '~/store/dialog/with-dialog';
-import { FilesUploadDialog } from '~/components/file-upload-dialog/file-upload-dialog';
-import { RootState } from '~/store/store';
-import { UPLOAD_COLLECTION_FILES_DIALOG, uploadCurrentCollectionFiles } from '~/store/collections/collection-upload-actions';
-import { fileUploaderActions } from '~/store/file-uploader/file-uploader-actions';
-
-const mapStateToProps = (state: RootState) => ({
- files: state.fileUploader,
- uploading: state.fileUploader.some(file => file.loaded < file.total)
-});
-
-const mapDispatchToProps = (dispatch: Dispatch) => ({
- onSubmit: () => {
- dispatch<any>(uploadCurrentCollectionFiles());
- },
- onChange: (files: File[]) => {
- dispatch(fileUploaderActions.SET_UPLOAD_FILES(files));
- }
-});
-
-export const UploadCollectionFilesDialog = compose(
- withDialog(UPLOAD_COLLECTION_FILES_DIALOG),
- connect(mapStateToProps, mapDispatchToProps)
-)(FilesUploadDialog);
\ No newline at end of file
import { RenameFileDialog } from '~/views-components/rename-file-dialog/rename-file-dialog';
import { FileRemoveDialog } from '~/views-components/file-remove-dialog/file-remove-dialog';
import { MultipleFilesRemoveDialog } from '~/views-components/file-remove-dialog/multiple-files-remove-dialog';
-import { UploadCollectionFilesDialog } from '~/views-components/upload-collection-files-dialog/upload-collection-files-dialog';
import { CollectionPartialCopyDialog } from '~/views-components/collection-partial-copy-dialog/collection-partial-copy-dialog';
import { SidePanel } from '~/views-components/side-panel/side-panel';
import { Routes } from '~/routes/routes';
import { UpdateProjectDialog } from '~/views-components/dialog-forms/update-project-dialog';
import { MoveProjectDialog } from '~/views-components/dialog-forms/move-project-dialog';
import { MoveCollectionDialog } from '~/views-components/dialog-forms/move-collection-dialog';
+import { CollectionFilesUploadDialog } from '~/views-components/dialog-forms/collection-files-upload-dialog';
const APP_BAR_HEIGHT = 100;
<CopyCollectionDialog />
<MultipleFilesRemoveDialog />
<UpdateCollectionDialog />
- <UploadCollectionFilesDialog />
+ <CollectionFilesUploadDialog />
<UpdateProjectDialog />
<MoveCollectionDialog />
<MoveProjectDialog />