push automation details and update automation

This commit is contained in:
ashrafzarkanisala
2024-07-25 00:25:48 +03:00
parent 56024ba3a3
commit 8a4c5af2e7
23 changed files with 1271 additions and 709 deletions
@@ -276,8 +276,10 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
? await SceneApi.updateScene(event.createSceneModel!, event.sceneId)
: await SceneApi.createScene(event.createSceneModel!);
} else if (event.createAutomationModel != null) {
response =
await SceneApi.createAutomation(event.createAutomationModel!);
response = event.updateScene
? await SceneApi.updateAutomation(
event.createAutomationModel!, event.sceneId)
: await SceneApi.createAutomation(event.createAutomationModel!);
}
if (response['success'] == true) {
@@ -315,13 +317,31 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
emit(CreateSceneLoading());
try {
final response = await SceneApi.getSceneDetails(event.sceneId);
final response = event.isAutomation
? await SceneApi.getAutomationDetails(event.sceneId)
: await SceneApi.getSceneDetails(event.sceneId);
if (response.id.isNotEmpty) {
tasksList = List<SceneStaticFunction>.from(getTaskListFunctionsFromApi(
actions: response.actions, isAutomation: false));
emit(AddSceneTask(
tasksList: tasksList,
));
if (event.isAutomation) {
automationTasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: [],
isAutomation: true,
conditions: response.conditions));
tasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: response.actions, isAutomation: false));
emit(AddSceneTask(
automationTasksList: automationTasksList,
tasksList: tasksList,
));
} else {
tasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: response.actions, isAutomation: false));
emit(AddSceneTask(
tasksList: tasksList,
));
}
} else {
emit(const CreateSceneError(message: 'Something went wrong'));
}
@@ -420,7 +440,11 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
conditionRule = 'and';
}
emit(ConditionSelectedState(event.condition));
emit(AddSceneTask(
tasksList: tasksList,
automationTasksList: automationTasksList,
condition: conditionRule,
));
}
FutureOr<void> _sceneTypeEvent(
@@ -147,10 +147,13 @@ class ClearTempTaskListEvent extends CreateSceneEvent {
class FetchSceneTasksEvent extends CreateSceneEvent {
final String sceneId;
const FetchSceneTasksEvent({required this.sceneId});
final bool isAutomation;
const FetchSceneTasksEvent(
{this.isAutomation = false, required this.sceneId});
@override
List<Object> get props => [];
List<Object> get props => [sceneId, isAutomation];
}
class DeleteSceneEvent extends CreateSceneEvent {
@@ -22,7 +22,9 @@ class CreateSceneError extends CreateSceneState {
class AddSceneTask extends CreateSceneState {
final List<SceneStaticFunction> tasksList;
final List<SceneStaticFunction>? automationTasksList;
const AddSceneTask({required this.tasksList, this.automationTasksList});
final String? condition;
const AddSceneTask(
{required this.tasksList, this.automationTasksList, this.condition});
@override
List<Object> get props => [tasksList];
@@ -11,16 +11,20 @@ part 'scene_state.dart';
class SceneBloc extends Bloc<SceneEvent, SceneState> {
SceneBloc() : super(SceneInitial()) {
on<LoadScenes>(_onLoadScenes);
on<LoadAutomation>(_onLoadAutomation);
on<SceneTrigger>(_onSceneTrigger);
}
List<ScenesModel> scenes = [];
List<ScenesModel> automationList = [];
Future<void> _onLoadScenes(LoadScenes event, Emitter<SceneState> emit) async {
emit(SceneLoading());
try {
if (event.unitId.isNotEmpty) {
final scenes = await SceneApi.getScenesByUnitId(event.unitId);
emit(SceneLoaded(scenes));
scenes = await SceneApi.getScenesByUnitId(event.unitId);
emit(SceneLoaded(scenes, automationList));
} else {
const SceneError(message: '');
}
@@ -29,16 +33,34 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
}
}
Future<void> _onSceneTrigger(SceneTrigger event, Emitter<SceneState> emit) async {
Future<void> _onLoadAutomation(
LoadAutomation event, Emitter<SceneState> emit) async {
emit(SceneLoading());
try {
if (event.unitId.isNotEmpty) {
automationList = await SceneApi.getAutomationByUnitId(event.unitId);
emit(SceneLoaded(scenes, automationList));
} else {
emit(const SceneError(message: 'Unit ID is empty'));
}
} catch (e) {
emit(const SceneError(message: 'Something went wrong'));
}
}
Future<void> _onSceneTrigger(
SceneTrigger event, Emitter<SceneState> emit) async {
final currentState = state;
if (currentState is SceneLoaded) {
emit(SceneLoaded(currentState.scenes, loadingSceneId: event.sceneId));
emit(SceneLoaded(currentState.scenes, currentState.automationList,
loadingSceneId: event.sceneId));
try {
final success = await SceneApi.triggerScene(event.sceneId);
if (success) {
emit(SceneTriggerSuccess(event.name));
emit(SceneLoaded(currentState.scenes));
emit(SceneLoaded(currentState.scenes, currentState.automationList));
} else {
emit(const SceneError(message: 'Something went wrong'));
}
@@ -16,6 +16,15 @@ class LoadScenes extends SceneEvent {
List<Object> get props => [unitId];
}
class LoadAutomation extends SceneEvent {
final String unitId;
const LoadAutomation(this.unitId);
@override
List<Object> get props => [unitId];
}
class SceneTrigger extends SceneEvent {
final String sceneId;
final String name;
@@ -13,12 +13,13 @@ class SceneLoading extends SceneState {}
class SceneLoaded extends SceneState {
final List<ScenesModel> scenes;
final List<ScenesModel> automationList;
final String? loadingSceneId;
const SceneLoaded(this.scenes, {this.loadingSceneId});
const SceneLoaded(this.scenes, this.automationList, {this.loadingSceneId});
@override
List<Object?> get props => [scenes, loadingSceneId];
List<Object?> get props => [scenes, loadingSceneId, automationList];
}
class SceneError extends SceneState {