diff --git a/lib/blocs/create_manifest/create_manifest_cubit.dart b/lib/blocs/create_manifest/create_manifest_cubit.dart index 611a0a494..4c0cd69ee 100644 --- a/lib/blocs/create_manifest/create_manifest_cubit.dart +++ b/lib/blocs/create_manifest/create_manifest_cubit.dart @@ -21,6 +21,7 @@ part 'create_manifest_state.dart'; // TODO: Add tests for CreateManifestCubit class CreateManifestCubit extends Cubit { + late FolderNode targetFolderNode; late FolderNode rootFolderNode; final ProfileCubit _profileCubit; @@ -119,16 +120,26 @@ class CreateManifestCubit extends Cubit { } /// Validate form before User begins choosing a target folder - Future chooseTargetFolder() async { + Future chooseTargetFolder({String? currentFolderId}) async { + rootFolderNode = await _folderRepository.getFolderNode( + _drive.id, + _drive.rootFolderId, + ); + logger.i('Choosing target folder for drive: ${_drive.id}'); - rootFolderNode = - await _folderRepository.getFolderNode(_drive.id, _drive.rootFolderId); - logger.d('Root folder node loaded with id: ${rootFolderNode.folder.id}'); + logger.d('Current folder id: $currentFolderId'); + targetFolderNode = await _folderRepository.getFolderNode( + _drive.id, + currentFolderId ?? _drive.rootFolderId, + ); + + logger.d('Root folder node loaded with id: ${targetFolderNode.folder.id}'); + + _hasPendingFiles = await _hasPendingFilesInFolder(targetFolderNode); - _hasPendingFiles = await _hasPendingFilesInFolder(rootFolderNode); logger.d('Folder has pending files: $_hasPendingFiles'); - await loadFolder(_drive.rootFolderId); + await loadFolder(currentFolderId ?? _drive.rootFolderId); } /// User has confirmed that they would like to submit a manifest revision transaction @@ -305,9 +316,9 @@ class CreateManifestCubit extends Cubit { 'Existing manifest file ID: $existingManifestFileId, Target folder ID: $folderId'); FolderEntry parentFolder; if (folderId != null) { - rootFolderNode = + targetFolderNode = await _folderRepository.getFolderNode(_drive.id, folderId); - parentFolder = rootFolderNode.folder; + parentFolder = targetFolderNode.folder; } else { switch (state) { case CreateManifestPreparingManifestWithARNS s: @@ -324,7 +335,7 @@ class CreateManifestCubit extends Cubit { final manifestFile = await _manifestRepository.getManifestFile( parentFolder: parentFolder, manifestName: manifestName, - rootFolderNode: rootFolderNode, + rootFolderNode: targetFolderNode, driveId: _drive.id, fallbackTxId: _getFallbackTxId(), ); diff --git a/lib/components/create_manifest_form.dart b/lib/components/create_manifest_form.dart index 3cb737d06..f82bd599d 100644 --- a/lib/components/create_manifest_form.dart +++ b/lib/components/create_manifest_form.dart @@ -102,8 +102,6 @@ class _CreateManifestFormState extends State { bool _isFormValid = false; ArDriveTextFieldNew manifestNameForm() { - final readCubitContext = context.read(); - return ArDriveTextFieldNew( hintText: appLocalizationsOf(context).manifestName, controller: _manifestNameController, @@ -118,7 +116,14 @@ class _CreateManifestFormState extends State { }, autofocus: true, onFieldSubmitted: (s) { - readCubitContext.processManifestName(s); + final state = context.read().state; + if (state is DriveDetailLoadSuccess) { + context.read().chooseTargetFolder( + currentFolderId: state.folderInView.folder.id, + ); + } else { + context.read().chooseTargetFolder(); + } }, ); } @@ -458,7 +463,6 @@ class _CreateManifestFormState extends State { required TextStyle textStyle, required CreateManifestNameInput state, }) { - final readCubitContext = context.read(); return ArDriveStandardModalNew( width: kLargeDialogWidth, title: appLocalizationsOf(context).addnewManifestEmphasized, @@ -469,8 +473,16 @@ class _CreateManifestFormState extends State { ), ModalAction( isEnable: _isFormValid, - action: () => readCubitContext - .processManifestName(_manifestNameController.text), + action: () { + final state = context.read().state; + if (state is DriveDetailLoadSuccess) { + context.read().chooseTargetFolder( + currentFolderId: state.folderInView.folder.id, + ); + } else { + context.read().chooseTargetFolder(); + } + }, title: appLocalizationsOf(context).nextEmphasized, ), ],