diff --git a/lib/pages/spaces_management/bloc/space_management_bloc.dart b/lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart similarity index 95% rename from lib/pages/spaces_management/bloc/space_management_bloc.dart rename to lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart index dc661dab..a171f2a7 100644 --- a/lib/pages/spaces_management/bloc/space_management_bloc.dart +++ b/lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart @@ -1,9 +1,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_event.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_state.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_state.dart'; import 'package:syncrow_web/services/product_api.dart'; import 'package:syncrow_web/services/space_mana_api.dart'; diff --git a/lib/pages/spaces_management/bloc/space_management_event.dart b/lib/pages/spaces_management/all_spaces/bloc/space_management_event.dart similarity index 93% rename from lib/pages/spaces_management/bloc/space_management_event.dart rename to lib/pages/spaces_management/all_spaces/bloc/space_management_event.dart index 7b95f262..9e3dcc74 100644 --- a/lib/pages/spaces_management/bloc/space_management_event.dart +++ b/lib/pages/spaces_management/all_spaces/bloc/space_management_event.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; // Import for Offset +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; // Import for Offset abstract class SpaceManagementEvent extends Equatable { const SpaceManagementEvent(); diff --git a/lib/pages/spaces_management/bloc/space_management_state.dart b/lib/pages/spaces_management/all_spaces/bloc/space_management_state.dart similarity index 82% rename from lib/pages/spaces_management/bloc/space_management_state.dart rename to lib/pages/spaces_management/all_spaces/bloc/space_management_state.dart index 0a1cfe4d..eca8c16f 100644 --- a/lib/pages/spaces_management/bloc/space_management_state.dart +++ b/lib/pages/spaces_management/all_spaces/bloc/space_management_state.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; abstract class SpaceManagementState extends Equatable { const SpaceManagementState(); diff --git a/lib/pages/spaces_management/model/community_model.dart b/lib/pages/spaces_management/all_spaces/model/community_model.dart similarity index 93% rename from lib/pages/spaces_management/model/community_model.dart rename to lib/pages/spaces_management/all_spaces/model/community_model.dart index b61b780b..14d9d729 100644 --- a/lib/pages/spaces_management/model/community_model.dart +++ b/lib/pages/spaces_management/all_spaces/model/community_model.dart @@ -1,5 +1,5 @@ import 'package:syncrow_web/pages/auth/model/region_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; class CommunityModel { final String uuid; diff --git a/lib/pages/spaces_management/model/connection_model.dart b/lib/pages/spaces_management/all_spaces/model/connection_model.dart similarity index 89% rename from lib/pages/spaces_management/model/connection_model.dart rename to lib/pages/spaces_management/all_spaces/model/connection_model.dart index 650781d6..a774efe2 100644 --- a/lib/pages/spaces_management/model/connection_model.dart +++ b/lib/pages/spaces_management/all_spaces/model/connection_model.dart @@ -1,4 +1,4 @@ -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; class Connection { final SpaceModel startSpace; diff --git a/lib/pages/spaces_management/model/product_model.dart b/lib/pages/spaces_management/all_spaces/model/product_model.dart similarity index 100% rename from lib/pages/spaces_management/model/product_model.dart rename to lib/pages/spaces_management/all_spaces/model/product_model.dart diff --git a/lib/pages/spaces_management/model/selected_product_model.dart b/lib/pages/spaces_management/all_spaces/model/selected_product_model.dart similarity index 100% rename from lib/pages/spaces_management/model/selected_product_model.dart rename to lib/pages/spaces_management/all_spaces/model/selected_product_model.dart diff --git a/lib/pages/spaces_management/model/space_data_model.dart b/lib/pages/spaces_management/all_spaces/model/space_data_model.dart similarity index 100% rename from lib/pages/spaces_management/model/space_data_model.dart rename to lib/pages/spaces_management/all_spaces/model/space_data_model.dart diff --git a/lib/pages/spaces_management/model/space_model.dart b/lib/pages/spaces_management/all_spaces/model/space_model.dart similarity index 93% rename from lib/pages/spaces_management/model/space_model.dart rename to lib/pages/spaces_management/all_spaces/model/space_model.dart index 3e38d931..df6550f8 100644 --- a/lib/pages/spaces_management/model/space_model.dart +++ b/lib/pages/spaces_management/all_spaces/model/space_model.dart @@ -1,7 +1,7 @@ import 'dart:ui'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/connection_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/connection_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/selected_product_model.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:uuid/uuid.dart'; diff --git a/lib/pages/spaces_management/model/space_response_model.dart b/lib/pages/spaces_management/all_spaces/model/space_response_model.dart similarity index 100% rename from lib/pages/spaces_management/model/space_response_model.dart rename to lib/pages/spaces_management/all_spaces/model/space_response_model.dart diff --git a/lib/pages/spaces_management/view/spaces_management_page.dart b/lib/pages/spaces_management/all_spaces/view/spaces_management_page.dart similarity index 77% rename from lib/pages/spaces_management/view/spaces_management_page.dart rename to lib/pages/spaces_management/all_spaces/view/spaces_management_page.dart index 8b37b876..8cad58b2 100644 --- a/lib/pages/spaces_management/view/spaces_management_page.dart +++ b/lib/pages/spaces_management/all_spaces/view/spaces_management_page.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/device_managment/shared/navigate_home_grid_view.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_event.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_state.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/loaded_space_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_state.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/loaded_space_widget.dart'; import 'package:syncrow_web/services/product_api.dart'; import 'package:syncrow_web/services/space_mana_api.dart'; import 'package:syncrow_web/web_layout/web_scaffold.dart'; diff --git a/lib/pages/spaces_management/widgets/add_device_type_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/add_device_type_widget.dart similarity index 96% rename from lib/pages/spaces_management/widgets/add_device_type_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/add_device_type_widget.dart index 08c08997..40759b58 100644 --- a/lib/pages/spaces_management/widgets/add_device_type_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/add_device_type_widget.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:syncrow_web/pages/common/buttons/default_button.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/counter_widget.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/all_spaces/widgets/counter_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; diff --git a/lib/pages/spaces_management/widgets/blank_community_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/blank_community_widget.dart similarity index 85% rename from lib/pages/spaces_management/widgets/blank_community_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/blank_community_widget.dart index a57f3c18..999c27bd 100644 --- a/lib/pages/spaces_management/widgets/blank_community_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/blank_community_widget.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_event.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/dialogs/create_community_dialog.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/create_community/view/create_community_dialog.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class BlankCommunityWidget extends StatefulWidget { @@ -73,7 +73,7 @@ class _BlankCommunityWidgetState extends State { context: parentContext, builder: (context) => CreateCommunityDialog( isEditMode: false, - communities: widget.communities, + existingCommunityNames: widget.communities.map((community) => community.name).toList(), onCreateCommunity: (String communityName, String description) { parentContext.read().add( CreateCommunityEvent( diff --git a/lib/pages/spaces_management/widgets/community_structure_header_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/community_structure_header_widget.dart similarity index 94% rename from lib/pages/spaces_management/widgets/community_structure_header_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/community_structure_header_widget.dart index 72d6228e..63306581 100644 --- a/lib/pages/spaces_management/widgets/community_structure_header_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/community_structure_header_widget.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:syncrow_web/pages/common/buttons/default_button.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/dialogs/create_community_dialog.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/create_community/view/create_community_dialog.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; @@ -76,8 +76,9 @@ class _CommunityStructureHeaderState extends State { context: parentContext, builder: (context) => CreateCommunityDialog( isEditMode: true, - communities: widget.communities, - communityToEdit: widget.community, + existingCommunityNames: + widget.communities.map((community) => community.name).toList(), + initialName: widget.community?.name ?? '', onCreateCommunity: (String communityName, String description) { widget.onNameSubmitted(communityName); }, diff --git a/lib/pages/spaces_management/widgets/community_structure_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/community_structure_widget.dart similarity index 93% rename from lib/pages/spaces_management/widgets/community_structure_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/community_structure_widget.dart index 3789b3c9..c11563da 100644 --- a/lib/pages/spaces_management/widgets/community_structure_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/community_structure_widget.dart @@ -4,19 +4,19 @@ import 'package:flutter_bloc/flutter_bloc.dart'; // Syncrow project imports import 'package:syncrow_web/pages/common/buttons/add_space_button.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_event.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/connection_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/blank_community_widget.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/community_structure_header_widget.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/dialogs/create_space_dialog.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/curved_line_painter.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/space_card_widget.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/space_container_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.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/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/connection_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/blank_community_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/community_structure_header_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/curved_line_painter.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/space_card_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/space_container_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class CommunityStructureArea extends StatefulWidget { diff --git a/lib/pages/spaces_management/widgets/community_tile.dart b/lib/pages/spaces_management/all_spaces/widgets/community_tile.dart similarity index 100% rename from lib/pages/spaces_management/widgets/community_tile.dart rename to lib/pages/spaces_management/all_spaces/widgets/community_tile.dart diff --git a/lib/pages/spaces_management/widgets/counter_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/counter_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/counter_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/counter_widget.dart diff --git a/lib/pages/spaces_management/widgets/curved_line_painter.dart b/lib/pages/spaces_management/all_spaces/widgets/curved_line_painter.dart similarity index 95% rename from lib/pages/spaces_management/widgets/curved_line_painter.dart rename to lib/pages/spaces_management/all_spaces/widgets/curved_line_painter.dart index 263f0edc..2b85acfd 100644 --- a/lib/pages/spaces_management/widgets/curved_line_painter.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/curved_line_painter.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/model/connection_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/connection_model.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class CurvedLinePainter extends CustomPainter { diff --git a/lib/pages/spaces_management/widgets/dialogs/create_space_dialog.dart b/lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart similarity index 96% rename from lib/pages/spaces_management/widgets/dialogs/create_space_dialog.dart rename to lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart index 028729b8..e0853e3a 100644 --- a/lib/pages/spaces_management/widgets/dialogs/create_space_dialog.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.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/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/add_device_type_widget.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/dialogs/icon_selection_dialog.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/hoverable_button.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/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/add_device_type_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/dialogs/icon_selection_dialog.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/hoverable_button.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/constants/space_icon_const.dart'; diff --git a/lib/pages/spaces_management/widgets/dialogs/delete_dialogue.dart b/lib/pages/spaces_management/all_spaces/widgets/dialogs/delete_dialogue.dart similarity index 100% rename from lib/pages/spaces_management/widgets/dialogs/delete_dialogue.dart rename to lib/pages/spaces_management/all_spaces/widgets/dialogs/delete_dialogue.dart diff --git a/lib/pages/spaces_management/widgets/dialogs/icon_selection_dialog.dart b/lib/pages/spaces_management/all_spaces/widgets/dialogs/icon_selection_dialog.dart similarity index 100% rename from lib/pages/spaces_management/widgets/dialogs/icon_selection_dialog.dart rename to lib/pages/spaces_management/all_spaces/widgets/dialogs/icon_selection_dialog.dart diff --git a/lib/pages/spaces_management/widgets/gradient_canvas_border_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/gradient_canvas_border_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/gradient_canvas_border_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/gradient_canvas_border_widget.dart diff --git a/lib/pages/spaces_management/widgets/hoverable_button.dart b/lib/pages/spaces_management/all_spaces/widgets/hoverable_button.dart similarity index 100% rename from lib/pages/spaces_management/widgets/hoverable_button.dart rename to lib/pages/spaces_management/all_spaces/widgets/hoverable_button.dart diff --git a/lib/pages/spaces_management/widgets/loaded_space_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/loaded_space_widget.dart similarity index 73% rename from lib/pages/spaces_management/widgets/loaded_space_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/loaded_space_widget.dart index 6b149701..7ce56914 100644 --- a/lib/pages/spaces_management/widgets/loaded_space_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/loaded_space_widget.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/community_structure_widget.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/gradient_canvas_border_widget.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/sidebar_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/community_structure_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/gradient_canvas_border_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart'; class LoadedSpaceView extends StatefulWidget { final List communities; diff --git a/lib/pages/spaces_management/widgets/plus_button_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/plus_button_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/plus_button_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/plus_button_widget.dart diff --git a/lib/pages/spaces_management/widgets/sidebar_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart similarity index 92% rename from lib/pages/spaces_management/widgets/sidebar_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart index e11be2c2..a58d73e9 100644 --- a/lib/pages/spaces_management/widgets/sidebar_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:syncrow_web/common/search_bar.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/bloc/space_management_event.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/community_tile.dart'; -import 'package:syncrow_web/pages/spaces_management/widgets/space_tile_widget.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/community_tile.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/space_tile_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/style.dart'; diff --git a/lib/pages/spaces_management/widgets/space_card_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/space_card_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/space_card_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/space_card_widget.dart diff --git a/lib/pages/spaces_management/widgets/space_container_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/space_container_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/space_container_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/space_container_widget.dart diff --git a/lib/pages/spaces_management/widgets/space_tile_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/space_tile_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/space_tile_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/space_tile_widget.dart diff --git a/lib/pages/spaces_management/widgets/space_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/space_widget.dart similarity index 100% rename from lib/pages/spaces_management/widgets/space_widget.dart rename to lib/pages/spaces_management/all_spaces/widgets/space_widget.dart diff --git a/lib/pages/spaces_management/create_community/bloc/community_dialog_bloc.dart b/lib/pages/spaces_management/create_community/bloc/community_dialog_bloc.dart new file mode 100644 index 00000000..724ed51a --- /dev/null +++ b/lib/pages/spaces_management/create_community/bloc/community_dialog_bloc.dart @@ -0,0 +1,21 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'community_dialog_event.dart'; +import 'community_dialog_state.dart'; + +class CommunityDialogBloc extends Bloc { + final List existingCommunityNames; + + CommunityDialogBloc(this.existingCommunityNames) + : super(CommunityDialogInitial()) { + on((event, emit) { + final trimmedName = event.name.trim(); + final isNameValid = !existingCommunityNames.contains(trimmedName); + final isNameEmpty = trimmedName.isEmpty; + + emit(CommunityNameValidationState( + isNameValid: isNameValid, + isNameEmpty: isNameEmpty, + )); + }); + } +} diff --git a/lib/pages/spaces_management/create_community/bloc/community_dialog_event.dart b/lib/pages/spaces_management/create_community/bloc/community_dialog_event.dart new file mode 100644 index 00000000..74f4fa5c --- /dev/null +++ b/lib/pages/spaces_management/create_community/bloc/community_dialog_event.dart @@ -0,0 +1,15 @@ +import 'package:equatable/equatable.dart'; + +abstract class CommunityDialogEvent extends Equatable { + @override + List get props => []; +} + +class ValidateCommunityNameEvent extends CommunityDialogEvent { + final String name; + + ValidateCommunityNameEvent(this.name); + + @override + List get props => [name]; +} diff --git a/lib/pages/spaces_management/create_community/bloc/community_dialog_state.dart b/lib/pages/spaces_management/create_community/bloc/community_dialog_state.dart new file mode 100644 index 00000000..8b61c1c7 --- /dev/null +++ b/lib/pages/spaces_management/create_community/bloc/community_dialog_state.dart @@ -0,0 +1,21 @@ +import 'package:equatable/equatable.dart'; + +abstract class CommunityDialogState extends Equatable { + @override + List get props => []; +} + +class CommunityDialogInitial extends CommunityDialogState {} + +class CommunityNameValidationState extends CommunityDialogState { + final bool isNameValid; + final bool isNameEmpty; + + CommunityNameValidationState({ + required this.isNameValid, + required this.isNameEmpty, + }); + + @override + List get props => [isNameValid, isNameEmpty]; +} diff --git a/lib/pages/spaces_management/create_community/view/create_community_dialog.dart b/lib/pages/spaces_management/create_community/view/create_community_dialog.dart new file mode 100644 index 00000000..94a8c054 --- /dev/null +++ b/lib/pages/spaces_management/create_community/view/create_community_dialog.dart @@ -0,0 +1,166 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/create_community/bloc/community_dialog_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/create_community/bloc/community_dialog_event.dart'; +import 'package:syncrow_web/pages/spaces_management/create_community/bloc/community_dialog_state.dart'; +import 'package:syncrow_web/utils/color_manager.dart'; +import 'package:syncrow_web/pages/common/buttons/cancel_button.dart'; +import 'package:syncrow_web/pages/common/buttons/default_button.dart'; + +class CreateCommunityDialog extends StatelessWidget { + final Function(String name, String description) onCreateCommunity; + final List existingCommunityNames; + final bool isEditMode; + final String? initialName; + + const CreateCommunityDialog({ + super.key, + required this.onCreateCommunity, + required this.existingCommunityNames, + required this.isEditMode, + this.initialName, + }); + + @override + Widget build(BuildContext context) { + final nameController = + TextEditingController(text: isEditMode ? initialName : ''); + + return BlocProvider( + create: (_) => CommunityDialogBloc(existingCommunityNames), + child: Dialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20), + ), + backgroundColor: ColorsManager.transparentColor, + child: Stack( + children: [ + Container( + width: MediaQuery.of(context).size.width * 0.3, + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: ColorsManager.whiteColors, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: ColorsManager.blackColor.withOpacity(0.25), + blurRadius: 20, + spreadRadius: 5, + offset: const Offset(0, 5), + ), + ], + ), + child: SingleChildScrollView( + child: BlocBuilder( + builder: (context, state) { + bool isNameValid = true; + bool isNameEmpty = false; + + if (state is CommunityNameValidationState) { + isNameValid = state.isNameValid; + isNameEmpty = state.isNameEmpty; + } + + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + isEditMode ? 'Edit Community Name' : 'Community Name', + style: const TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 16), + TextField( + controller: nameController, + onChanged: (value) { + context + .read() + .add(ValidateCommunityNameEvent(value)); + }, + style: const TextStyle( + color: ColorsManager.blackColor, + ), + decoration: InputDecoration( + hintText: 'Please enter the community name', + filled: true, + fillColor: ColorsManager.boxColor, + border: OutlineInputBorder( + borderSide: BorderSide( + color: isNameValid && !isNameEmpty + ? ColorsManager.boxColor + : ColorsManager.red, + width: 1, + ), + borderRadius: BorderRadius.circular(10), + ), + ), + ), + if (!isNameValid) + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text( + '*Name already exists.', + style: Theme.of(context) + .textTheme + .bodySmall + ?.copyWith(color: ColorsManager.red), + ), + ), + if (isNameEmpty) + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text( + '*Name should not be empty.', + style: Theme.of(context) + .textTheme + .bodySmall + ?.copyWith(color: ColorsManager.red), + ), + ), + const SizedBox(height: 24), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: CancelButton( + label: 'Cancel', + onPressed: () => Navigator.of(context).pop(), + ), + ), + const SizedBox(width: 16), + Expanded( + child: DefaultButton( + onPressed: () { + if (isNameValid && !isNameEmpty) { + onCreateCommunity( + nameController.text.trim(), + "", + ); + Navigator.of(context).pop(); + } + }, + backgroundColor: isNameValid && !isNameEmpty + ? ColorsManager.secondaryColor + : ColorsManager.lightGrayColor, + borderRadius: 10, + foregroundColor: ColorsManager.whiteColors, + child: const Text('OK'), + ), + ), + ], + ), + ], + ); + }, + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/pages/spaces_management/widgets/dialogs/create_community_dialog.dart b/lib/pages/spaces_management/widgets/dialogs/create_community_dialog.dart deleted file mode 100644 index e2208713..00000000 --- a/lib/pages/spaces_management/widgets/dialogs/create_community_dialog.dart +++ /dev/null @@ -1,198 +0,0 @@ -import 'package:flutter/material.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/model/community_model.dart'; -import 'package:syncrow_web/utils/color_manager.dart'; - -class CreateCommunityDialog extends StatefulWidget { - final Function(String name, String description) onCreateCommunity; - final List communities; - final bool isEditMode; - final CommunityModel? communityToEdit; - - const CreateCommunityDialog({ - super.key, - required this.onCreateCommunity, - required this.communities, - required this.isEditMode, - this.communityToEdit, - }); - - @override - CreateCommunityDialogState createState() => CreateCommunityDialogState(); -} - -class CreateCommunityDialogState extends State { - String enteredName = ''; - bool isNameFieldExist = false; - bool isNameEmpty = false; - late TextEditingController nameController; - - @override - void initState() { - super.initState(); - // Initialize fields for edit mode or set defaults for create mode - nameController = TextEditingController( - text: widget.isEditMode ? widget.communityToEdit?.name ?? '' : '', - ); - } - - @override - Widget build(BuildContext context) { - final screenWidth = MediaQuery.of(context).size.width; - - return Dialog( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20), - ), - backgroundColor: - ColorsManager.transparentColor, // Transparent for shadow effect - child: Stack( - children: [ - // Background container with shadow and rounded corners - Container( - width: screenWidth * 0.3, - padding: const EdgeInsets.all(20), - decoration: BoxDecoration( - color: ColorsManager.whiteColors, - borderRadius: BorderRadius.circular(20), - boxShadow: [ - BoxShadow( - color: ColorsManager.blackColor.withOpacity(0.25), - blurRadius: 20, - spreadRadius: 5, - offset: const Offset(0, 5), - ), - ], - ), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.isEditMode ? 'Edit Community Name' : 'Community Name', - style: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 16), - // Input field for the community name - TextField( - controller: nameController, - onChanged: (value) { - setState(() { - enteredName = value.trim(); - isNameFieldExist = widget.communities.any( - (community) => - community.name == enteredName && - widget.communityToEdit != community, - ); - if (value.isEmpty) { - isNameEmpty = true; - } else { - isNameEmpty = false; - } - }); - }, - style: const TextStyle( - color: ColorsManager.blackColor, - ), - decoration: InputDecoration( - hintText: 'Please enter the community name', - filled: true, - fillColor: ColorsManager.boxColor, - hintStyle: const TextStyle( - fontSize: 14, - color: ColorsManager.grayBorder, - fontWeight: FontWeight.w400, - ), - border: OutlineInputBorder( - borderSide: BorderSide( - color: isNameFieldExist || isNameEmpty - ? ColorsManager.red - : ColorsManager.boxColor, - width: 1), - borderRadius: BorderRadius.circular(10), - ), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide( - color: isNameFieldExist || isNameEmpty - ? ColorsManager.red - : ColorsManager.boxColor, - width: 1), - borderRadius: BorderRadius.circular(10), - ), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(10), - borderSide: BorderSide( - color: isNameFieldExist || isNameEmpty - ? ColorsManager.red - : ColorsManager.boxColor, - width: 1), - ), - ), - ), - if (isNameFieldExist) - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Text( - '*Name already exists.', - style: Theme.of(context) - .textTheme - .bodySmall - ?.copyWith(color: ColorsManager.red), - ), - ), - if (isNameEmpty) - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Text( - '*Name should not be empty.', - style: Theme.of(context) - .textTheme - .bodySmall - ?.copyWith(color: ColorsManager.red), - ), - ), - const SizedBox(height: 24), - // Action buttons - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: CancelButton( - label: 'Cancel', - onPressed: () => Navigator.of(context).pop(), - ), - ), - const SizedBox(width: 16), - Expanded( - child: DefaultButton( - onPressed: () { - if (enteredName.isNotEmpty && !isNameFieldExist) { - widget.onCreateCommunity( - enteredName, - "", - ); - Navigator.of(context).pop(); - } - }, - backgroundColor: isNameFieldExist || isNameEmpty - ? ColorsManager.lightGrayColor - : ColorsManager.secondaryColor, - borderRadius: 10, - foregroundColor: ColorsManager.whiteColors, - child: const Text('OK'), - ), - ), - ], - ), - ], - ), - ), - ], - ), - ); - } -} diff --git a/lib/services/product_api.dart b/lib/services/product_api.dart index f33a4135..02c9f143 100644 --- a/lib/services/product_api.dart +++ b/lib/services/product_api.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/model/product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_model.dart'; import 'package:syncrow_web/services/api/http_service.dart'; import 'package:syncrow_web/utils/constants/api_const.dart'; diff --git a/lib/services/space_mana_api.dart b/lib/services/space_mana_api.dart index 5d2464e6..55875bfa 100644 --- a/lib/services/space_mana_api.dart +++ b/lib/services/space_mana_api.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_model.dart'; -import 'package:syncrow_web/pages/spaces_management/model/space_response_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/selected_product_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_response_model.dart'; import 'package:syncrow_web/services/api/http_service.dart'; import 'package:syncrow_web/utils/constants/api_const.dart'; diff --git a/lib/utils/app_routes.dart b/lib/utils/app_routes.dart index 20a89e21..31329d8a 100644 --- a/lib/utils/app_routes.dart +++ b/lib/utils/app_routes.dart @@ -3,7 +3,7 @@ import 'package:syncrow_web/pages/access_management/view/access_management.dart' import 'package:syncrow_web/pages/auth/view/login_page.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/view/device_managment_page.dart'; import 'package:syncrow_web/pages/home/view/home_page.dart'; -import 'package:syncrow_web/pages/spaces_management/view/spaces_management_page.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/view/spaces_management_page.dart'; import 'package:syncrow_web/pages/visitor_password/view/visitor_password_dialog.dart'; import 'package:syncrow_web/utils/constants/routes_const.dart'; @@ -32,7 +32,7 @@ class AppRoutes { ), GoRoute( path: RoutesConst.spacesManagementPage, - builder: (context, state) => SpaceManagementPage()), + builder: (context, state) => const SpaceManagementPage()), ]; } }