Merge branch 'dev' of https://github.com/SyncrowIOT/web into SP-1722-FE-Implement-Duplicate-Space-Feature

This commit is contained in:
Faris Armoush
2025-07-23 14:19:55 +03:00
6 changed files with 192 additions and 170 deletions

View File

@ -1,4 +1,3 @@
// booking_page.dart
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:calendar_view/calendar_view.dart'; import 'package:calendar_view/calendar_view.dart';
@ -90,8 +89,7 @@ class _BookingPageContentState extends State<_BookingPageContent> {
return BlocListener<SelectedBookableSpaceBloc, SelectedBookableSpaceState>( return BlocListener<SelectedBookableSpaceBloc, SelectedBookableSpaceState>(
listener: (context, state) { listener: (context, state) {
if (state.selectedBookableSpace != null) { if (state.selectedBookableSpace != null) {
// Reset events and clear cache when room changes context.read<CalendarEventsBloc>().add(const ResetEvents());
context.read<CalendarEventsBloc>().add(ResetEvents());
_loadEvents(context); _loadEvents(context);
} }
}, },
@ -237,7 +235,6 @@ class _BookingPageContentState extends State<_BookingPageContent> {
.watch<DateSelectionBloc>() .watch<DateSelectionBloc>()
.state .state
.selectedDateFromSideBarCalender, .selectedDateFromSideBarCalender,
// isLoading: eventState is EventsLoading,
); );
}, },
); );

View File

@ -19,6 +19,7 @@ class WeekNavigation extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
width: 250,
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5),
decoration: BoxDecoration( decoration: BoxDecoration(
color: ColorsManager.circleRolesBackground, color: ColorsManager.circleRolesBackground,
@ -32,6 +33,8 @@ class WeekNavigation extends StatelessWidget {
], ],
), ),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
IconButton( IconButton(
iconSize: 15, iconSize: 15,
@ -40,13 +43,17 @@ class WeekNavigation extends StatelessWidget {
onPressed: onPreviousWeek, onPressed: onPreviousWeek,
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Text( SizedBox(
width: 120,
child: Text(
_getMonthYearText(weekStart, weekEnd), _getMonthYearText(weekStart, weekEnd),
style: const TextStyle( style: const TextStyle(
color: ColorsManager.lightGrayColor, color: ColorsManager.lightGrayColor,
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
), ),
textAlign: TextAlign.center,
),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
IconButton( IconButton(

View File

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
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/utils/color_manager.dart';
import 'space_tree_dropdown_bloc.dart'; import 'space_tree_dropdown_bloc.dart';
class DropdownMenuContent extends StatefulWidget { class DropdownMenuContent extends StatefulWidget {
@ -75,7 +76,8 @@ class _DropdownMenuContentState extends State<DropdownMenuContent> {
child: TextFormField( child: TextFormField(
controller: _searchController, controller: _searchController,
onChanged: _handleSearch, onChanged: _handleSearch,
style: const TextStyle(fontSize: 14, color: Colors.black), style: const TextStyle(
fontSize: 14, color: ColorsManager.blackColor),
decoration: InputDecoration( decoration: InputDecoration(
hintText: 'Search for space...', hintText: 'Search for space...',
prefixIcon: const Icon(Icons.search, size: 20), prefixIcon: const Icon(Icons.search, size: 20),
@ -84,6 +86,12 @@ class _DropdownMenuContentState extends State<DropdownMenuContent> {
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: const BorderSide(
color: ColorsManager.dropDownSelectBlue,
),
),
isDense: true, isDense: true,
), ),
), ),
@ -117,7 +125,9 @@ class _DropdownMenuContentState extends State<DropdownMenuContent> {
title: Text( title: Text(
community.name, community.name,
style: TextStyle( style: TextStyle(
color: isSelected ? Colors.blue : Colors.black, color: isSelected
? ColorsManager.dropDownSelectBlue
: ColorsManager.blackColor,
fontWeight: fontWeight:
isSelected ? FontWeight.bold : FontWeight.normal, isSelected ? FontWeight.bold : FontWeight.normal,
), ),

View File

@ -52,7 +52,7 @@ class SpaceDropdown extends StatelessWidget {
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: selectedValue == space.uuid color: selectedValue == space.uuid
? ColorsManager.dialogBlueTitle ? ColorsManager.dropDownSelectBlue
: ColorsManager.blackColor, : ColorsManager.blackColor,
), ),
), ),
@ -61,7 +61,7 @@ class SpaceDropdown extends StatelessWidget {
style: Theme.of(context).textTheme.bodyMedium!.copyWith( style: Theme.of(context).textTheme.bodyMedium!.copyWith(
fontSize: 12, fontSize: 12,
color: selectedValue == space.uuid color: selectedValue == space.uuid
? ColorsManager.dialogBlueTitle ? ColorsManager.dropDownSelectBlue
: ColorsManager.blackColor, : ColorsManager.blackColor,
), ),
), ),

View File

@ -31,19 +31,24 @@ class AssignTagsTable extends StatelessWidget {
DataColumn _buildDataColumn(BuildContext context, String label) { DataColumn _buildDataColumn(BuildContext context, String label) {
return DataColumn( return DataColumn(
label: SelectableText(label, style: context.textTheme.bodyMedium), label: Expanded(
child: FittedBox(
alignment: AlignmentDirectional.centerStart,
fit: BoxFit.scaleDown,
child: SelectableText(label, style: context.textTheme.bodyMedium),
),
),
); );
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider<TagsBloc>( return BlocProvider<TagsBloc>(
create: (BuildContext context) => TagsBloc( create: (context) => TagsBloc(
RemoteTagsService(HTTPService()), RemoteTagsService(HTTPService()),
)..add(const LoadTags()), )..add(const LoadTags()),
child: BlocBuilder<TagsBloc, TagsState>( child: BlocBuilder<TagsBloc, TagsState>(
builder: (context, state) { builder: (context, state) => switch (state) {
return switch (state) {
TagsLoading() || TagsInitial() => const Center( TagsLoading() || TagsInitial() => const Center(
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
), ),
@ -73,7 +78,9 @@ class AssignTagsTable extends StatelessWidget {
DataRow( DataRow(
cells: [ cells: [
DataCell( DataCell(
Center( FittedBox(
alignment: AlignmentDirectional.centerStart,
fit: BoxFit.scaleDown,
child: SelectableText( child: SelectableText(
'No Devices Available', 'No Devices Available',
style: context.textTheme.bodyMedium?.copyWith( style: context.textTheme.bodyMedium?.copyWith(
@ -105,8 +112,7 @@ class AssignTagsTable extends StatelessWidget {
) )
.toList(); .toList();
final currentLocationUuid = final currentLocationUuid = productLocations[allocationUuid];
productLocations[allocationUuid];
final currentLocationName = currentLocationUuid == null final currentLocationName = currentLocationUuid == null
? 'Main Space' ? 'Main Space'
: subspaces : subspaces
@ -197,7 +203,6 @@ class AssignTagsTable extends StatelessWidget {
), ),
), ),
_ => const SizedBox.shrink(), _ => const SizedBox.shrink(),
};
}, },
), ),
); );

View File

@ -85,6 +85,8 @@ abstract class ColorsManager {
static const Color minBlue = Color(0xFF93AAFD); static const Color minBlue = Color(0xFF93AAFD);
static const Color minBlueDot = Color(0xFF023DFE); static const Color minBlueDot = Color(0xFF023DFE);
static const Color grey25 = Color(0xFFF9F9F9); static const Color grey25 = Color(0xFFF9F9F9);
static const Color dropDownSelectBlue = Color(0xFF2196F3);
static const Color drpoDownSelectBlue = Color(0xFF2196F3);
static const Color grey50 = Color(0xFF718096); static const Color grey50 = Color(0xFF718096);
static const Color red100 = Color(0xFFFE0202); static const Color red100 = Color(0xFFFE0202);
static const Color grey800 = Color(0xffF8F8F8); static const Color grey800 = Color(0xffF8F8F8);
@ -93,4 +95,5 @@ abstract class ColorsManager {
static const Color shadowOfDetailsContainer = Color(0x40000000); static const Color shadowOfDetailsContainer = Color(0x40000000);
static const Color checkBoxBorderGray = Color(0xffD0D0D0); static const Color checkBoxBorderGray = Color(0xffD0D0D0);
static const Color timePickerColor = Color(0xff000000); static const Color timePickerColor = Color(0xff000000);
} }