diff --git a/lib/pages/spaces_management/space_model/view/space_model_page.dart b/lib/pages/spaces_management/space_model/view/space_model_page.dart index 8f466a5e..35611868 100644 --- a/lib/pages/spaces_management/space_model/view/space_model_page.dart +++ b/lib/pages/spaces_management/space_model/view/space_model_page.dart @@ -90,7 +90,11 @@ class SpaceModelPage extends StatelessWidget { }, child: Container( margin: const EdgeInsets.all(8.0), - child: SpaceModelCardWidget(model: model), + child: SpaceModelCardWidget( + model: model, + pageContext: context, + topActionsDisabled: 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 0056c96f..ab65af44 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,13 +1,30 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import 'package:flutter_svg/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/space_model/bloc/space_model_bloc.dart'; + +import 'package:syncrow_web/pages/spaces_management/space_model/bloc/space_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/widgets/dialog/delete_space_model_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dynamic_product_widget.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dynamic_room_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; +import 'package:syncrow_web/utils/constants/assets.dart'; class SpaceModelCardWidget extends StatelessWidget { final SpaceTemplateModel model; + final BuildContext? pageContext; + final bool topActionsDisabled; - const SpaceModelCardWidget({Key? key, required this.model}) : super(key: key); + const SpaceModelCardWidget({ + Key? key, + required this.model, + this.pageContext, + this.topActionsDisabled = true, + }) : super(key: key); @override Widget build(BuildContext context) { @@ -34,7 +51,7 @@ class SpaceModelCardWidget extends StatelessWidget { return LayoutBuilder( builder: (context, constraints) { bool showOnlyName = constraints.maxWidth < 250; - return Container( + return Container( padding: const EdgeInsets.all(16.0), decoration: BoxDecoration( color: Colors.white, @@ -51,14 +68,50 @@ class SpaceModelCardWidget extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - model.modelName, - style: Theme.of(context).textTheme.headlineMedium?.copyWith( - color: Colors.black, - fontWeight: FontWeight.bold, + Row( + children: [ + Expanded( + child: Text( + model.modelName, + style: + Theme.of(context).textTheme.headlineMedium?.copyWith( + color: Colors.black, + fontWeight: FontWeight.bold, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, ), - maxLines: 1, - overflow: TextOverflow.ellipsis, + ), + if (!topActionsDisabled) + GestureDetector( + onTap: () => _showDeleteDialog(context), + child: Container( + width: 36, // Adjust size as needed + height: 36, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + spreadRadius: 2, + blurRadius: 5, + offset: const Offset(0, 2), + ), + ], + ), + child: Center( + child: SvgPicture.asset( + Assets.deleteSpaceModel, // Your actual SVG path + width: 20, + height: 20, + colorFilter: const ColorFilter.mode( + Colors.grey, BlendMode.srcIn), + ), + ), + ), + ), + ], ), if (!showOnlyName) ...[ const SizedBox(height: 10), @@ -117,4 +170,22 @@ class SpaceModelCardWidget extends StatelessWidget { }, ); } + + void _showDeleteDialog(BuildContext context) { + showDialog( + context: context, + barrierDismissible: true, + builder: (BuildContext dialogContext) { + return DeleteSpaceModelDialog( + onConfirmDelete: () { + if (pageContext != null) { + pageContext!.read().add( + DeleteSpaceModel(spaceModelUuid: model.uuid ?? ''), + ); + } + }, + ); + }, + ); + } }