diff --git a/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart b/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart index c2b3ba9b..182fbe55 100644 --- a/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart +++ b/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart @@ -21,6 +21,7 @@ class AssignTagModelsDialog extends StatelessWidget { final List addedProducts; final List? allTags; final String spaceName; + final String title; const AssignTagModelsDialog({ Key? key, @@ -31,6 +32,7 @@ class AssignTagModelsDialog extends StatelessWidget { this.onTagsAssigned, this.allTags, required this.spaceName, + required this.title }) : super(key: key); @override @@ -52,7 +54,7 @@ class AssignTagModelsDialog extends StatelessWidget { ); return AlertDialog( - title: const Text('Assign Tags'), + title: const Text(title), backgroundColor: ColorsManager.whiteColors, content: SingleChildScrollView( child: Column( @@ -284,7 +286,21 @@ class AssignTagModelsDialog extends StatelessWidget { Expanded( child: CancelButton( label: 'Cancel', - onPressed: () => Navigator.of(context).pop(), + onPressed: () async { + Navigator.of(context).pop(); + await showDialog( + barrierDismissible: false, + context: context, + builder: (context) => CreateSpaceModelDialog( + products: products, + allTags: allTags, + spaceModel: SpaceTemplateModel( + modelName: spaceName, + subspaceModels: subspaces, + tags: initialTags), + ), + ); + }, ), ), const SizedBox(width: 10), @@ -313,7 +329,6 @@ class AssignTagModelsDialog extends StatelessWidget { } } } - state.tags.removeWhere(assignedTags.contains); await showDialog( barrierDismissible: false, diff --git a/lib/pages/spaces_management/create_subspace_model/views/create_subspace_model_dialog.dart b/lib/pages/spaces_management/create_subspace_model/views/create_subspace_model_dialog.dart index d241b41e..4a290617 100644 --- a/lib/pages/spaces_management/create_subspace_model/views/create_subspace_model_dialog.dart +++ b/lib/pages/spaces_management/create_subspace_model/views/create_subspace_model_dialog.dart @@ -2,22 +2,36 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/common/buttons/cancel_button.dart'; import 'package:syncrow_web/pages/common/buttons/default_button.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_bloc.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_event.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace_model/bloc/subspace_model_state.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/models/tag_model.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class CreateSubSpaceModelDialog extends StatelessWidget { final bool isEdit; final String dialogTitle; final List? existingSubSpaces; + final String? spaceName; + final List? spaceTagModels; + final List? allTags; + final List? products; + final SpaceTemplateModel? spaceModel; const CreateSubSpaceModelDialog({ Key? key, required this.isEdit, required this.dialogTitle, this.existingSubSpaces, + required this.allTags, + required this.spaceName, + required this.spaceTagModels, + required this.products, + required this.spaceModel, }) : super(key: key); @override @@ -153,20 +167,49 @@ class CreateSubSpaceModelDialog extends StatelessWidget { Expanded( child: CancelButton( label: 'Cancel', - onPressed: () { + onPressed: () async { Navigator.of(context).pop(); + await showDialog( + barrierDismissible: false, + context: context, + builder: (context) => + CreateSpaceModelDialog( + products: products, + allTags: allTags, + spaceModel: SpaceTemplateModel( + modelName: spaceName ?? '', + subspaceModels: existingSubSpaces, + tags: spaceTagModels, + ), + ), + ); }, ), ), const SizedBox(width: 10), Expanded( child: DefaultButton( - onPressed: () { + onPressed: () async { final subSpaces = context .read() .state .subSpaces; - Navigator.of(context).pop(subSpaces); + Navigator.of(context).pop(); + + await showDialog( + barrierDismissible: false, + context: context, + builder: (context) => + CreateSpaceModelDialog( + products: products, + allTags: allTags, + spaceModel: SpaceTemplateModel( + modelName: spaceName ?? '', + subspaceModels: subSpaces, + tags: spaceTagModels, + ), + ), + ); }, backgroundColor: ColorsManager.secondaryColor, borderRadius: 10, diff --git a/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart b/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart index bd988782..25a8fb63 100644 --- a/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart +++ b/lib/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart @@ -29,7 +29,6 @@ class CreateSpaceModelDialog extends StatelessWidget { final SpaceModelManagementApi _spaceModelApi = SpaceModelManagementApi(); final screenWidth = MediaQuery.of(context).size.width; - List? subspaces = spaceModel?.subspaceModels ?? []; final TextEditingController spaceNameController = TextEditingController( text: spaceModel?.modelName ?? '', ); @@ -104,8 +103,15 @@ class CreateSpaceModelDialog extends StatelessWidget { ), ), const SizedBox(height: 16), - SubspaceModelCreate(context, - subspaces: state.space.subspaceModels ?? []), + SubspaceModelCreate( + context, + subspaces: state.space.subspaceModels ?? [], + allTags: allTags, + products: products, + spaceModel: spaceModel, + spaceTagModels: spaceModel?.tags ?? [], + spaceNameController: spaceNameController + ), const SizedBox(height: 10), TagChipDisplay(context, screenWidth: screenWidth, diff --git a/lib/pages/spaces_management/space_model/widgets/subspace_model_create_widget.dart b/lib/pages/spaces_management/space_model/widgets/subspace_model_create_widget.dart index 35b680a0..31ed8659 100644 --- a/lib/pages/spaces_management/space_model/widgets/subspace_model_create_widget.dart +++ b/lib/pages/spaces_management/space_model/widgets/subspace_model_create_widget.dart @@ -1,25 +1,34 @@ import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_space_model_event.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/models/tag_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/button_content_widget.dart'; import 'package:syncrow_web/pages/spaces_management/create_subspace_model/views/create_subspace_model_dialog.dart'; import 'package:syncrow_web/utils/color_manager.dart'; -import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_space_model_bloc.dart'; class SubspaceModelCreate extends StatelessWidget { final List subspaces; + final TextEditingController spaceNameController; + final List? spaceTagModels; + final List? allTags; + final List? products; + final SpaceTemplateModel? spaceModel; const SubspaceModelCreate( BuildContext context, { Key? key, required this.subspaces, + this.spaceTagModels, + required this.allTags, + required this.products, + required this.spaceModel, + required this.spaceNameController, }) : super(key: key); @override Widget build(BuildContext context) { final screenWidth = MediaQuery.of(context).size.width; - return Container( child: subspaces.isEmpty ? TextButton( @@ -29,11 +38,16 @@ class SubspaceModelCreate extends StatelessWidget { onPressed: () async { Navigator.of(context).pop(); - final result = await showDialog>( + await showDialog>( barrierDismissible: false, context: context, builder: (BuildContext context) { return CreateSubSpaceModelDialog( + allTags: allTags, + spaceName: spaceNameController.text, + spaceModel: spaceModel, + spaceTagModels: spaceTagModels, + products: products, isEdit: true, dialogTitle: subspaces.isEmpty ? 'Create Sub-space' @@ -42,14 +56,6 @@ class SubspaceModelCreate extends StatelessWidget { ); }, ); - - if (result != null) { - subspaces.clear(); - subspaces.addAll(result); - context - .read() - .add(AddSubspacesToSpaceTemplate(subspaces)); - } }, child: const ButtonContentWidget( icon: Icons.add, @@ -90,8 +96,8 @@ class SubspaceModelCreate extends StatelessWidget { ), GestureDetector( onTap: () async { - final result = - await showDialog>( + Navigator.of(context).pop(); + await showDialog>( barrierDismissible: false, context: context, builder: (BuildContext context) { @@ -99,17 +105,14 @@ class SubspaceModelCreate extends StatelessWidget { isEdit: true, dialogTitle: 'Edit Sub-space', existingSubSpaces: subspaces, + allTags: allTags, + spaceName: spaceNameController.text, + spaceTagModels: spaceTagModels, + products: products, + spaceModel: spaceModel, ); }, ); - - if (result != null) { - subspaces.clear(); - subspaces.addAll(result); - context - .read() - .add(AddSubspacesToSpaceTemplate(subspaces)); - } }, child: Chip( label: const Text( diff --git a/lib/pages/spaces_management/space_model/widgets/tag_chips_display_widget.dart b/lib/pages/spaces_management/space_model/widgets/tag_chips_display_widget.dart index f60e1cf3..f367012d 100644 --- a/lib/pages/spaces_management/space_model/widgets/tag_chips_display_widget.dart +++ b/lib/pages/spaces_management/space_model/widgets/tag_chips_display_widget.dart @@ -30,8 +30,7 @@ class TagChipDisplay extends StatelessWidget { @override Widget build(BuildContext context) { - return (spaceModel?.subspaceModels?.isNotEmpty == true || - spaceModel?.tags?.isNotEmpty == true || + return (spaceModel?.tags?.isNotEmpty == true || spaceModel?.subspaceModels ?.any((subspace) => subspace.tags?.isNotEmpty == true) == true) @@ -160,7 +159,6 @@ class TagChipDisplay extends StatelessWidget { List? tags, List? subspaces) { final Map productCounts = {}; - // Count products in spaceModel tags if (tags != null) { for (var tag in tags) { if (tag.product != null) { @@ -169,7 +167,6 @@ class TagChipDisplay extends StatelessWidget { } } - // Count products in subspaces if (subspaces != null) { for (var subspace in subspaces) { if (subspace.tags != null) { @@ -183,7 +180,6 @@ class TagChipDisplay extends StatelessWidget { } } - // Create SelectedProduct instances return productCounts.entries .map((entry) => SelectedProduct( productId: entry.key.uuid, diff --git a/lib/pages/spaces_management/tag_model/views/add_device_type_model_widget.dart b/lib/pages/spaces_management/tag_model/views/add_device_type_model_widget.dart index 74f11194..a8a6b1ac 100644 --- a/lib/pages/spaces_management/tag_model/views/add_device_type_model_widget.dart +++ b/lib/pages/spaces_management/tag_model/views/add_device_type_model_widget.dart @@ -4,8 +4,10 @@ import 'package:syncrow_web/pages/common/buttons/cancel_button.dart'; import 'package:syncrow_web/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/selected_product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/tag_model.dart'; +import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/create_space_model_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/tag_model/bloc/add_device_model_bloc.dart'; import 'package:syncrow_web/pages/spaces_management/tag_model/widgets/action_button_widget.dart'; import 'package:syncrow_web/pages/spaces_management/tag_model/widgets/scrollable_grid_view_widget.dart'; @@ -70,7 +72,21 @@ class AddDeviceTypeModelWidget extends StatelessWidget { children: [ CancelButton( label: 'Cancel', - onPressed: () => Navigator.of(context).pop(), + onPressed: () async { + Navigator.of(context).pop(); + await showDialog( + barrierDismissible: false, + context: context, + builder: (context) => CreateSpaceModelDialog( + products: products, + allTags: allTags, + spaceModel: SpaceTemplateModel( + modelName: spaceName, + subspaceModels: subspaces, + tags: spaceTagModels, + )), + ); + }, ), ActionButton( label: 'Continue', @@ -82,6 +98,14 @@ class AddDeviceTypeModelWidget extends StatelessWidget { Navigator.of(context).pop(); if (currentState.isNotEmpty) { + final initialTags = generateInitialTags( + spaceTagModels: spaceTagModels, + subspaces: subspaces, + ); + + final dialogTitle = initialTags.isNotEmpty + ? 'Edit Device' + : 'Assign Tags'; await showDialog( barrierDismissible: false, context: context, @@ -91,9 +115,8 @@ class AddDeviceTypeModelWidget extends StatelessWidget { addedProducts: currentState, allTags: allTags, spaceName: spaceName, - initialTags: generateInitialTags( - spaceTagModels: spaceTagModels, - subspaces: subspaces), + initialTags: initialTags, + title: dialogTitle, ), ); }