change model name

This commit is contained in:
mohammad
2025-03-06 11:10:53 +03:00
parent 215dd9cfa4
commit 048a7c0e8f
9 changed files with 97 additions and 164 deletions

View File

@ -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});
}

View File

@ -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();
}

View File

@ -3,17 +3,18 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/common/bloc/project_manager.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/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_to_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_state.dart';
import 'package:syncrow_web/services/space_model_mang_api.dart'; import 'package:syncrow_web/services/space_model_mang_api.dart';
import 'package:syncrow_web/utils/navigation_service.dart'; import 'package:syncrow_web/utils/navigation_service.dart';
class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> { class LinkSpaceToModelBloc
SpaceModelBloc() : super(SpaceModelInitial()) { extends Bloc<LinkSpaceToModelEvent, LinkSpaceToModelState> {
on<SpaceModelSelectedIdsEvent>(_getSpaceIds); LinkSpaceToModelBloc() : super(SpaceModelInitial()) {
on<LinkSpaceModelSelectedIdsEvent>(_getSpaceIds);
on<LinkSpaceModelEvent>(_handleLinkSpaceModel); on<LinkSpaceModelEvent>(_handleLinkSpaceModel);
on<ValidateSpaceModelEvent>(_validateLinkSpaceModel); on<ValidateSpaceModelEvent>(_validateLinkSpaceModel);
on<SpaceModelSelectedEvent>((event, emit) { on<LinkSpaceModelSelectedEvent>((event, emit) {
emit(SpaceModelSelectedState(event.selectedIndex)); emit(SpaceModelSelectedState(event.selectedIndex));
}); });
} }
@ -22,8 +23,8 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
bool hasSelectedSpaces = false; bool hasSelectedSpaces = false;
String validate = ''; String validate = '';
Future<void> _getSpaceIds( Future<void> _getSpaceIds(LinkSpaceModelSelectedIdsEvent event,
SpaceModelSelectedIdsEvent event, Emitter<SpaceModelState> emit) async { Emitter<LinkSpaceToModelState> emit) async {
try { try {
BuildContext context = NavigationService.navigatorKey.currentContext!; BuildContext context = NavigationService.navigatorKey.currentContext!;
var spaceBloc = context.read<SpaceTreeBloc>(); var spaceBloc = context.read<SpaceTreeBloc>();
@ -53,7 +54,7 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
Future<void> _handleLinkSpaceModel( Future<void> _handleLinkSpaceModel(
LinkSpaceModelEvent event, LinkSpaceModelEvent event,
Emitter<SpaceModelState> emit, Emitter<LinkSpaceToModelState> emit,
) async { ) async {
emit(SpaceModelLoading()); emit(SpaceModelLoading());
try { try {
@ -74,7 +75,7 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
Future<void> _validateLinkSpaceModel( Future<void> _validateLinkSpaceModel(
ValidateSpaceModelEvent event, ValidateSpaceModelEvent event,
Emitter<SpaceModelState> emit, Emitter<LinkSpaceToModelState> emit,
) async { ) async {
emit(SpaceModelLoading()); emit(SpaceModelLoading());
try { try {

View File

@ -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});
}

View File

@ -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();
}

View File

@ -2,9 +2,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.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/cancel_button.dart';
import 'package:syncrow_web/pages/common/buttons/default_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_to_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_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_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/space_template_model.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/space_model_card_widget.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/space_model_card_widget.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
@ -24,13 +24,13 @@ class LinkSpaceModelDialog extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider( return BlocProvider(
create: (context) => SpaceModelBloc() create: (context) => LinkSpaceToModelBloc()
..add( ..add(
SpaceModelSelectedEvent(initialSelectedIndex ?? -1), LinkSpaceModelSelectedEvent(initialSelectedIndex ?? -1),
), ),
child: Builder( child: Builder(
builder: (context) { builder: (context) {
final bloc = context.read<SpaceModelBloc>(); final bloc = context.read<LinkSpaceToModelBloc>();
return AlertDialog( return AlertDialog(
backgroundColor: ColorsManager.whiteColors, backgroundColor: ColorsManager.whiteColors,
title: const Text('Link a space model'), title: const Text('Link a space model'),
@ -39,7 +39,7 @@ class LinkSpaceModelDialog extends StatelessWidget {
color: ColorsManager.textFieldGreyColor, color: ColorsManager.textFieldGreyColor,
width: MediaQuery.of(context).size.width * 0.7, width: MediaQuery.of(context).size.width * 0.7,
height: MediaQuery.of(context).size.height * 0.6, height: MediaQuery.of(context).size.height * 0.6,
child: BlocBuilder<SpaceModelBloc, SpaceModelState>( child: BlocBuilder<LinkSpaceToModelBloc, LinkSpaceToModelState>(
builder: (context, state) { builder: (context, state) {
int selectedIndex = -1; int selectedIndex = -1;
if (state is SpaceModelSelectedState) { if (state is SpaceModelSelectedState) {
@ -59,7 +59,7 @@ class LinkSpaceModelDialog extends StatelessWidget {
final isSelected = selectedIndex == index; final isSelected = selectedIndex == index;
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
bloc.add(SpaceModelSelectedEvent(index)); bloc.add(LinkSpaceModelSelectedEvent(index));
}, },
child: Container( child: Container(
margin: const EdgeInsets.all(10.0), margin: const EdgeInsets.all(10.0),
@ -93,7 +93,7 @@ class LinkSpaceModelDialog extends StatelessWidget {
label: 'Cancel', label: 'Cancel',
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
BlocBuilder<SpaceModelBloc, SpaceModelState>( BlocBuilder<LinkSpaceToModelBloc, LinkSpaceToModelState>(
builder: (context, state) { builder: (context, state) {
final isEnabled = state is SpaceModelSelectedState && final isEnabled = state is SpaceModelSelectedState &&
state.selectedIndex >= 0; state.selectedIndex >= 0;

View File

@ -224,9 +224,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.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/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_to_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_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_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/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/confirm_overwrite_dialog.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/overwrite_dialog.dart';
@ -249,7 +249,7 @@ class _LinkSpaceModelSpacesDialogState
@override @override
void initState() { void initState() {
context.read<SpaceModelBloc>().add(SpaceModelSelectedIdsEvent()); context.read<LinkSpaceToModelBloc>().add(LinkSpaceModelSelectedIdsEvent());
super.initState(); super.initState();
} }
@ -328,8 +328,10 @@ class _LinkSpaceModelSpacesDialogState
child: SpaceTreeView( child: SpaceTreeView(
isSide: true, isSide: true,
onSelect: () { onSelect: () {
context.read<SpaceModelBloc>().add( context
SpaceModelSelectedIdsEvent()); .read<LinkSpaceToModelBloc>()
.add(
LinkSpaceModelSelectedIdsEvent());
}))) })))
], ],
), ),
@ -391,7 +393,7 @@ class _LinkSpaceModelSpacesDialogState
"Confirm", "Confirm",
ColorsManager.onSecondaryColor, ColorsManager.onSecondaryColor,
() { () {
final spaceModelBloc = context.read<SpaceModelBloc>(); final spaceModelBloc = context.read<LinkSpaceToModelBloc>();
if (!spaceModelBloc.hasSelectedSpaces) { if (!spaceModelBloc.hasSelectedSpaces) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar( const SnackBar(
@ -408,78 +410,8 @@ class _LinkSpaceModelSpacesDialogState
], ],
); );
} }
void _handleConfirm() {
final bloc = context.read<SpaceModelBloc>();
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) { Widget _buildDetailRow(String label, String value) {
return Padding( return Padding(
padding: const EdgeInsets.symmetric(vertical: 4), padding: const EdgeInsets.symmetric(vertical: 4),

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart'; 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_to_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_event.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/space_template_model.dart';
void showOverwriteDialog( void showOverwriteDialog(
BuildContext context, SpaceModelBloc bloc, SpaceTemplateModel model) { BuildContext context, LinkSpaceToModelBloc bloc, SpaceTemplateModel model) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,

View File

@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.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_to_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_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_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/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/custom_loading_dialog.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/link_space_model_spaces_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( showDialog(
context: context, context: context,
builder: (BuildContext dialogContext) { builder: (BuildContext dialogContext) {
return BlocProvider<SpaceModelBloc>( return BlocProvider<LinkSpaceToModelBloc>(
create: (_) => SpaceModelBloc(), create: (_) => LinkSpaceToModelBloc(),
child: BlocListener<SpaceModelBloc, child: BlocListener<LinkSpaceToModelBloc,
SpaceModelState>( LinkSpaceToModelState>(
listener: (context, state) { listener: (context, state) {
final _bloc = final _bloc =
BlocProvider.of<SpaceModelBloc>( BlocProvider.of<LinkSpaceToModelBloc>(
context); context);
if (state is SpaceModelLoading) { if (state is SpaceModelLoading) {
showDialog( showDialog(