diff --git a/lib/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart b/lib/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart deleted file mode 100644 index 1595e695..00000000 --- a/lib/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -abstract class SpaceModelEvent {} - -class SpaceModelSelectedEvent extends SpaceModelEvent { - final int selectedIndex; - - SpaceModelSelectedEvent(this.selectedIndex); -} - -class SpaceModelSelectedIdsEvent extends SpaceModelEvent {} - -class LinkSpaceModelEvent extends SpaceModelEvent { - final String? selectedSpaceMode; - final bool isOverWrite; - LinkSpaceModelEvent({this.selectedSpaceMode, this.isOverWrite = false}); -} - -class ValidateSpaceModelEvent extends SpaceModelEvent { - BuildContext? context; - ValidateSpaceModelEvent({this.context}); -} diff --git a/lib/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart b/lib/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart deleted file mode 100644 index b7cb7c3f..00000000 --- a/lib/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart +++ /dev/null @@ -1,35 +0,0 @@ -abstract class SpaceModelState { - const SpaceModelState(); -} - -class SpaceModelInitial extends SpaceModelState {} - -class SpaceModelLoading extends SpaceModelState {} - -class SpaceModelSelectedState extends SpaceModelState { - final int selectedIndex; - const SpaceModelSelectedState(this.selectedIndex); -} - -class SpaceModelSelectionUpdated extends SpaceModelState { - final bool hasSelectedSpaces; - const SpaceModelSelectionUpdated(this.hasSelectedSpaces); -} - -class SpaceValidationSuccess extends SpaceModelState {} - -class SpaceModelLinkSuccess extends SpaceModelState {} - -class ValidationError extends SpaceModelState { - final String message; - const ValidationError(this.message); -} - -class SpaceModelOperationFailure extends SpaceModelState { - final String message; - const SpaceModelOperationFailure(this.message); -} - -class AlreadyHaveLinkedState extends SpaceModelState { - const AlreadyHaveLinkedState(); -} diff --git a/lib/pages/spaces_management/link_space_model/bloc/link_space_model_bloc.dart b/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart similarity index 86% rename from lib/pages/spaces_management/link_space_model/bloc/link_space_model_bloc.dart rename to lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart index cb9f5d43..98491538 100644 --- a/lib/pages/spaces_management/link_space_model/bloc/link_space_model_bloc.dart +++ b/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart @@ -3,17 +3,18 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/common/bloc/project_manager.dart'; import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_state.dart'; import 'package:syncrow_web/services/space_model_mang_api.dart'; import 'package:syncrow_web/utils/navigation_service.dart'; -class SpaceModelBloc extends Bloc { - SpaceModelBloc() : super(SpaceModelInitial()) { - on(_getSpaceIds); +class LinkSpaceToModelBloc + extends Bloc { + LinkSpaceToModelBloc() : super(SpaceModelInitial()) { + on(_getSpaceIds); on(_handleLinkSpaceModel); on(_validateLinkSpaceModel); - on((event, emit) { + on((event, emit) { emit(SpaceModelSelectedState(event.selectedIndex)); }); } @@ -22,8 +23,8 @@ class SpaceModelBloc extends Bloc { bool hasSelectedSpaces = false; String validate = ''; - Future _getSpaceIds( - SpaceModelSelectedIdsEvent event, Emitter emit) async { + Future _getSpaceIds(LinkSpaceModelSelectedIdsEvent event, + Emitter emit) async { try { BuildContext context = NavigationService.navigatorKey.currentContext!; var spaceBloc = context.read(); @@ -53,7 +54,7 @@ class SpaceModelBloc extends Bloc { Future _handleLinkSpaceModel( LinkSpaceModelEvent event, - Emitter emit, + Emitter emit, ) async { emit(SpaceModelLoading()); try { @@ -74,7 +75,7 @@ class SpaceModelBloc extends Bloc { Future _validateLinkSpaceModel( ValidateSpaceModelEvent event, - Emitter emit, + Emitter emit, ) async { emit(SpaceModelLoading()); try { diff --git a/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart b/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart new file mode 100644 index 00000000..694358db --- /dev/null +++ b/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; + +abstract class LinkSpaceToModelEvent {} + +class LinkSpaceModelSelectedEvent extends LinkSpaceToModelEvent { + final int selectedIndex; + + LinkSpaceModelSelectedEvent(this.selectedIndex); +} + +class LinkSpaceModelSelectedIdsEvent extends LinkSpaceToModelEvent {} + +class LinkSpaceModelEvent extends LinkSpaceToModelEvent { + final String? selectedSpaceMode; + final bool isOverWrite; + LinkSpaceModelEvent({this.selectedSpaceMode, this.isOverWrite = false}); +} + +class ValidateSpaceModelEvent extends LinkSpaceToModelEvent { + BuildContext? context; + ValidateSpaceModelEvent({this.context}); +} diff --git a/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_state.dart b/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_state.dart new file mode 100644 index 00000000..047567a9 --- /dev/null +++ b/lib/pages/spaces_management/link_space_model/bloc/link_space_to_model_state.dart @@ -0,0 +1,35 @@ +abstract class LinkSpaceToModelState { + const LinkSpaceToModelState(); +} + +class SpaceModelInitial extends LinkSpaceToModelState {} + +class SpaceModelLoading extends LinkSpaceToModelState {} + +class SpaceModelSelectedState extends LinkSpaceToModelState { + final int selectedIndex; + const SpaceModelSelectedState(this.selectedIndex); +} + +class SpaceModelSelectionUpdated extends LinkSpaceToModelState { + final bool hasSelectedSpaces; + const SpaceModelSelectionUpdated(this.hasSelectedSpaces); +} + +class SpaceValidationSuccess extends LinkSpaceToModelState {} + +class SpaceModelLinkSuccess extends LinkSpaceToModelState {} + +class ValidationError extends LinkSpaceToModelState { + final String message; + const ValidationError(this.message); +} + +class SpaceModelOperationFailure extends LinkSpaceToModelState { + final String message; + const SpaceModelOperationFailure(this.message); +} + +class AlreadyHaveLinkedState extends LinkSpaceToModelState { + const AlreadyHaveLinkedState(); +} diff --git a/lib/pages/spaces_management/link_space_model/view/link_space_model_dialog.dart b/lib/pages/spaces_management/link_space_model/view/link_space_model_dialog.dart index 69023857..bbd0de36 100644 --- a/lib/pages/spaces_management/link_space_model/view/link_space_model_dialog.dart +++ b/lib/pages/spaces_management/link_space_model/view/link_space_model_dialog.dart @@ -2,9 +2,9 @@ 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/link_space_model/bloc/link_space_model_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_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/widgets/space_model_card_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; @@ -24,13 +24,13 @@ class LinkSpaceModelDialog extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( - create: (context) => SpaceModelBloc() + create: (context) => LinkSpaceToModelBloc() ..add( - SpaceModelSelectedEvent(initialSelectedIndex ?? -1), + LinkSpaceModelSelectedEvent(initialSelectedIndex ?? -1), ), child: Builder( builder: (context) { - final bloc = context.read(); + final bloc = context.read(); return AlertDialog( backgroundColor: ColorsManager.whiteColors, title: const Text('Link a space model'), @@ -39,7 +39,7 @@ class LinkSpaceModelDialog extends StatelessWidget { color: ColorsManager.textFieldGreyColor, width: MediaQuery.of(context).size.width * 0.7, height: MediaQuery.of(context).size.height * 0.6, - child: BlocBuilder( + child: BlocBuilder( builder: (context, state) { int selectedIndex = -1; if (state is SpaceModelSelectedState) { @@ -59,7 +59,7 @@ class LinkSpaceModelDialog extends StatelessWidget { final isSelected = selectedIndex == index; return GestureDetector( onTap: () { - bloc.add(SpaceModelSelectedEvent(index)); + bloc.add(LinkSpaceModelSelectedEvent(index)); }, child: Container( margin: const EdgeInsets.all(10.0), @@ -93,7 +93,7 @@ class LinkSpaceModelDialog extends StatelessWidget { label: 'Cancel', ), const SizedBox(width: 10), - BlocBuilder( + BlocBuilder( builder: (context, state) { final isEnabled = state is SpaceModelSelectedState && state.selectedIndex >= 0; diff --git a/lib/pages/spaces_management/space_model/widgets/dialog/link_space_model_spaces_dialog.dart b/lib/pages/spaces_management/space_model/widgets/dialog/link_space_model_spaces_dialog.dart index 844513d3..f67f8b2c 100644 --- a/lib/pages/spaces_management/space_model/widgets/dialog/link_space_model_spaces_dialog.dart +++ b/lib/pages/spaces_management/space_model/widgets/dialog/link_space_model_spaces_dialog.dart @@ -224,9 +224,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/space_tree/view/space_tree_view.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_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/widgets/dialog/confirm_overwrite_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart'; @@ -249,7 +249,7 @@ class _LinkSpaceModelSpacesDialogState @override void initState() { - context.read().add(SpaceModelSelectedIdsEvent()); + context.read().add(LinkSpaceModelSelectedIdsEvent()); super.initState(); } @@ -328,8 +328,10 @@ class _LinkSpaceModelSpacesDialogState child: SpaceTreeView( isSide: true, onSelect: () { - context.read().add( - SpaceModelSelectedIdsEvent()); + context + .read() + .add( + LinkSpaceModelSelectedIdsEvent()); }))) ], ), @@ -391,7 +393,7 @@ class _LinkSpaceModelSpacesDialogState "Confirm", ColorsManager.onSecondaryColor, () { - final spaceModelBloc = context.read(); + final spaceModelBloc = context.read(); if (!spaceModelBloc.hasSelectedSpaces) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( @@ -408,78 +410,8 @@ class _LinkSpaceModelSpacesDialogState ], ); } - - void _handleConfirm() { - final bloc = context.read(); - if (!bloc.hasSelectedSpaces) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text("Please select at least one space")), - ); - return; - } - - // Trigger validation - bloc.add(ValidateSpaceModelEvent()); - } - - void _showLoadingDialog() { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) => const _LoadingDialog(), - ); - } - - void _handleValidationSuccess() { - Navigator.of(context).pop(); // Close loading dialog - - // Show overwrite confirmation - showDialog( - context: context, - builder: (context) => const ConfirmOverwriteDialog(), - ).then((_) { - // Close main dialog after confirmation - if (mounted) Navigator.of(context).pop(); - }); - } - - void _handleValidationError(String message) { - Navigator.of(context).pop(); // Close loading dialog - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(message)), - ); - } - - void _handleCancel() { - if (mounted) Navigator.of(context).pop(); - } - - // Rest of your helper methods (_buildDetailRow, _buildButton, etc.) } -class _LoadingDialog extends StatelessWidget { - const _LoadingDialog(); - - @override - Widget build(BuildContext context) { - return Dialog( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), - child: const Padding( - padding: EdgeInsets.all(20.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - CircularProgressIndicator(), - SizedBox(height: 16), - Text("Linking in progress..."), - ], - ), - ), - ); - } -} - -// Method to build a detail row Widget _buildDetailRow(String label, String value) { return Padding( padding: const EdgeInsets.symmetric(vertical: 4), diff --git a/lib/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart b/lib/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart index 6a34002f..9f57a4b1 100644 --- a/lib/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart +++ b/lib/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart'; void showOverwriteDialog( - BuildContext context, SpaceModelBloc bloc, SpaceTemplateModel model) { + BuildContext context, LinkSpaceToModelBloc bloc, SpaceTemplateModel model) { showDialog( context: context, barrierDismissible: false, diff --git a/lib/pages/spaces_management/space_model/widgets/space_model_card_widget.dart b/lib/pages/spaces_management/space_model/widgets/space_model_card_widget.dart index 56ba5d3b..c563a6e2 100644 --- a/lib/pages/spaces_management/space_model/widgets/space_model_card_widget.dart +++ b/lib/pages/spaces_management/space_model/widgets/space_model_card_widget.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_bloc.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart'; -import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_bloc.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_model_event.dart'; +import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_to_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/widgets/dialog/custom_loading_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/link_space_model_spaces_dialog.dart'; @@ -81,13 +81,13 @@ class SpaceModelCardWidget extends StatelessWidget { showDialog( context: context, builder: (BuildContext dialogContext) { - return BlocProvider( - create: (_) => SpaceModelBloc(), - child: BlocListener( + return BlocProvider( + create: (_) => LinkSpaceToModelBloc(), + child: BlocListener( listener: (context, state) { final _bloc = - BlocProvider.of( + BlocProvider.of( context); if (state is SpaceModelLoading) { showDialog(