changed endpoint for getting automations by space

This commit is contained in:
hannathkadher
2025-03-14 12:53:29 +04:00
parent c2fc8fa0ae
commit 0673548745
8 changed files with 77 additions and 36 deletions

View File

@ -46,8 +46,11 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
emit(SceneLoading()); emit(SceneLoading());
try { try {
Project? project = HomeCubit.getInstance().project;
if (event.unitId.isNotEmpty) { if (event.unitId.isNotEmpty) {
automationList = await SceneApi.getAutomationByUnitId(event.unitId); automationList = await SceneApi.getAutomationByUnitId(
event.unitId, event.communityId, project?.uuid ?? '');
emit(SceneLoaded(scenes, automationList)); emit(SceneLoaded(scenes, automationList));
} else { } else {
emit(const SceneError(message: 'Unit ID is empty')); emit(const SceneError(message: 'Unit ID is empty'));
@ -96,11 +99,16 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
)); ));
try { try {
Project? project = HomeCubit.getInstance().project;
final success = await SceneApi.updateAutomationStatus( final success = await SceneApi.updateAutomationStatus(
event.automationId, event.automationStatusUpdate); event.automationId, event.automationStatusUpdate);
if (success) { if (success) {
automationList = await SceneApi.getAutomationByUnitId( automationList = await SceneApi.getAutomationByUnitId(
event.automationStatusUpdate.spaceUuid); event.automationStatusUpdate.spaceUuid,
event.communityId,
project?.uuid ?? ''
);
newLoadingStates[event.automationId] = false; newLoadingStates[event.automationId] = false;
emit(SceneLoaded( emit(SceneLoaded(
currentState.scenes, currentState.scenes,

View File

@ -22,11 +22,13 @@ class LoadScenes extends SceneEvent {
class LoadAutomation extends SceneEvent { class LoadAutomation extends SceneEvent {
final String unitId; final String unitId;
final String communityId;
const LoadAutomation(this.unitId);
const LoadAutomation(this.unitId, this.communityId);
@override @override
List<Object> get props => [unitId]; List<Object> get props => [unitId, communityId];
} }
class SceneTrigger extends SceneEvent { class SceneTrigger extends SceneEvent {
@ -43,8 +45,9 @@ class SceneTrigger extends SceneEvent {
class UpdateAutomationStatus extends SceneEvent { class UpdateAutomationStatus extends SceneEvent {
final String automationId; final String automationId;
final AutomationStatusUpdate automationStatusUpdate; final AutomationStatusUpdate automationStatusUpdate;
final String communityId;
const UpdateAutomationStatus({required this.automationStatusUpdate, required this.automationId}); const UpdateAutomationStatus({required this.automationStatusUpdate, required this.automationId, required this.communityId});
@override @override
List<Object> get props => [automationStatusUpdate]; List<Object> get props => [automationStatusUpdate];

View File

@ -49,7 +49,9 @@ class SceneView extends StatelessWidget {
name: '', name: '',
)), )),
showInDevice: pageType)) showInDevice: pageType))
..add(LoadAutomation(HomeCubit.getInstance().selectedSpace?.id ?? '')); ..add(LoadAutomation(
HomeCubit.getInstance().selectedSpace?.id ?? '',
HomeCubit.getInstance().selectedSpace?.community.uuid ?? ''));
} }
}, },
child: BlocBuilder<CreateSceneBloc, CreateSceneState>( child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
@ -57,30 +59,37 @@ class SceneView extends StatelessWidget {
if (state is DeleteSceneSuccess) { if (state is DeleteSceneSuccess) {
if (state.success) { if (state.success) {
BlocProvider.of<SceneBloc>(context).add(LoadScenes( BlocProvider.of<SceneBloc>(context).add(LoadScenes(
HomeCubit.getInstance().selectedSpace!.id, HomeCubit.getInstance().selectedSpace!, HomeCubit.getInstance().selectedSpace!.id,
HomeCubit.getInstance().selectedSpace!,
showInDevice: pageType)); showInDevice: pageType));
BlocProvider.of<SceneBloc>(context) BlocProvider.of<SceneBloc>(context).add(LoadAutomation(
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id)); HomeCubit.getInstance().selectedSpace!.id,
HomeCubit.getInstance().selectedSpace!.community.uuid));
} }
} }
if (state is CreateSceneWithTasks) { if (state is CreateSceneWithTasks) {
if (state.success == true) { if (state.success == true) {
BlocProvider.of<SceneBloc>(context).add(LoadScenes( BlocProvider.of<SceneBloc>(context).add(LoadScenes(
HomeCubit.getInstance().selectedSpace!.id, HomeCubit.getInstance().selectedSpace!, HomeCubit.getInstance().selectedSpace!.id,
HomeCubit.getInstance().selectedSpace!,
showInDevice: pageType)); showInDevice: pageType));
BlocProvider.of<SceneBloc>(context) BlocProvider.of<SceneBloc>(context).add(LoadAutomation(
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id)); HomeCubit.getInstance().selectedSpace!.id,
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent()); HomeCubit.getInstance().selectedSpace!.community.uuid));
context
.read<SmartSceneSelectBloc>()
.add(const SmartSceneClearEvent());
} }
} }
return BlocListener<SceneBloc, SceneState>( return BlocListener<SceneBloc, SceneState>(
listener: (context, state) { listener: (context, state) {
if (state is SceneTriggerSuccess) { if (state is SceneTriggerSuccess) {
context.showCustomSnackbar( context.showCustomSnackbar(
message: 'Scene ${state.sceneName} triggered successfully!'); message:
'Scene ${state.sceneName} triggered successfully!');
} }
}, },
child: HomeCubit.getInstance().spaces?.isEmpty ?? true child: HomeCubit.getInstance().spaces.isEmpty
? const CreateUnitWidget() ? const CreateUnitWidget()
: Column( : Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
@ -114,25 +123,30 @@ class SceneView extends StatelessWidget {
child: ListView( child: ListView(
children: [ children: [
Theme( Theme(
data: ThemeData() data: ThemeData().copyWith(
.copyWith(dividerColor: Colors.transparent), dividerColor: Colors.transparent),
child: ExpansionTile( child: ExpansionTile(
tilePadding: const EdgeInsets.symmetric(horizontal: 6), tilePadding:
const EdgeInsets.symmetric(
horizontal: 6),
initiallyExpanded: true, initiallyExpanded: true,
iconColor: ColorsManager.grayColor, iconColor: ColorsManager.grayColor,
title: const BodyMedium(text: 'Tap to run routines'), title: const BodyMedium(
text: 'Tap to run routines'),
children: [ children: [
scenes.isNotEmpty scenes.isNotEmpty
? SceneGrid( ? SceneGrid(
scenes: scenes, scenes: scenes,
loadingSceneId: state.loadingSceneId, loadingSceneId:
state.loadingSceneId,
disablePlayButton: false, disablePlayButton: false,
loadingStates: loadingStates: state
state.loadingStates, // Add this line .loadingStates, // Add this line
) )
: const Center( : const Center(
child: BodyMedium( child: BodyMedium(
text: 'No scenes have been added yet', text:
'No scenes have been added yet',
), ),
), ),
const SizedBox( const SizedBox(
@ -142,25 +156,30 @@ class SceneView extends StatelessWidget {
), ),
), ),
Theme( Theme(
data: ThemeData() data: ThemeData().copyWith(
.copyWith(dividerColor: Colors.transparent), dividerColor: Colors.transparent),
child: ExpansionTile( child: ExpansionTile(
initiallyExpanded: true, initiallyExpanded: true,
iconColor: ColorsManager.grayColor, iconColor: ColorsManager.grayColor,
tilePadding: const EdgeInsets.symmetric(horizontal: 6), tilePadding:
title: const BodyMedium(text: 'Automation'), const EdgeInsets.symmetric(
horizontal: 6),
title: const BodyMedium(
text: 'Automation'),
children: [ children: [
automationList.isNotEmpty automationList.isNotEmpty
? SceneGrid( ? SceneGrid(
scenes: automationList, scenes: automationList,
loadingSceneId: state.loadingSceneId, loadingSceneId:
state.loadingSceneId,
disablePlayButton: true, disablePlayButton: true,
loadingStates: loadingStates: state
state.loadingStates, // Add this line .loadingStates, // Add this line
) )
: const Center( : const Center(
child: BodyMedium( child: BodyMedium(
text: 'No automations have been added yet', text:
'No automations have been added yet',
), ),
), ),
const SizedBox( const SizedBox(

View File

@ -25,7 +25,7 @@ class DeleteRoutineButton extends StatelessWidget {
BlocProvider.of<SceneBloc>(context).add(LoadScenes( BlocProvider.of<SceneBloc>(context).add(LoadScenes(
HomeCubit.getInstance().selectedSpace!.id, HomeCubit.getInstance().selectedSpace!)); HomeCubit.getInstance().selectedSpace!.id, HomeCubit.getInstance().selectedSpace!));
BlocProvider.of<SceneBloc>(context) BlocProvider.of<SceneBloc>(context)
.add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id)); .add(LoadAutomation(HomeCubit.getInstance().selectedSpace!.id,HomeCubit.getInstance().selectedSpace!.community.uuid));
} }
} }
}, },

View File

@ -132,6 +132,10 @@ class SceneItem extends StatelessWidget {
spaceUuid: HomeCubit.getInstance() spaceUuid: HomeCubit.getInstance()
.selectedSpace! .selectedSpace!
.id), .id),
communityId: HomeCubit.getInstance()
.selectedSpace!
.community
.uuid,
automationId: scene.id)); automationId: scene.id));
}, },
), ),

View File

@ -22,7 +22,7 @@ class SmartEnableAutomation extends StatelessWidget {
child: BlocBuilder<SceneBloc, SceneState>( child: BlocBuilder<SceneBloc, SceneState>(
bloc: context.read<SceneBloc>() bloc: context.read<SceneBloc>()
..add( ..add(
LoadAutomation(HomeCubit.getInstance().selectedSpace?.id ?? '')), LoadAutomation(HomeCubit.getInstance().selectedSpace?.id ?? '',HomeCubit.getInstance().selectedSpace?.community.uuid ?? '')),
builder: (context, state) { builder: (context, state) {
if (state is SceneLoading) { if (state is SceneLoading) {
return const Align( return const Align(

View File

@ -153,7 +153,7 @@ abstract class ApiEndpoints {
static const String getScene = '/scene/tap-to-run/{sceneId}'; static const String getScene = '/scene/tap-to-run/{sceneId}';
static const String getIconScene = '/scene/icon'; static const String getIconScene = '/scene/icon';
static const String getUnitAutomation = '/automation/{unitUuid}'; static const String getUnitAutomation = '/projects/{projectId}/communities/{communityId}/spaces/{unitUuid}/automations';
static const String getAutomationDetails = static const String getAutomationDetails =
'/automation/details/{automationId}'; '/automation/details/{automationId}';

View File

@ -78,10 +78,17 @@ class SceneApi {
//getAutomation //getAutomation
static Future<List<ScenesModel>> getAutomationByUnitId(String unitId) async { static Future<List<ScenesModel>> getAutomationByUnitId(
String unitId,
String communityId,
String projectId,
) async {
try { try {
final response = await _httpService.get( final response = await _httpService.get(
path: ApiEndpoints.getUnitAutomation.replaceAll('{unitUuid}', unitId), path: ApiEndpoints.getUnitAutomation
.replaceAll('{unitUuid}', unitId)
.replaceAll('{communityId}', communityId)
.replaceAll('{projectId}', projectId),
showServerMessage: false, showServerMessage: false,
expectedResponseModel: (json) { expectedResponseModel: (json) {
List<ScenesModel> scenes = []; List<ScenesModel> scenes = [];