ProjectsBloc constructor

ProjectsBloc({
  1. required GetProjectsUseCase getProjectsUseCase,
  2. required CreateProjectUseCase createProjectUseCase,
  3. required DeleteProjectUseCase deleteUseCase,
})

Implementation

ProjectsBloc({
  required this.getProjectsUseCase,
  required this.createProjectUseCase,
  required this.deleteUseCase,
}) : super(ProjectsInitial()) {
  on<FetchProjectsEvent>((event, emit) async {
    emit(ProjectsLoading());
    final result = await getProjectsUseCase(NoParams());
    result.fold(
      (failure) => emit(ProjectsError('Failed to load projects')),
      (projects) => emit(ProjectsLoaded(projects)),
    );
  });
  on<DeleteProjectEvent>((event, emit) async {
    emit(ProjectsLoading());
    final result = await deleteUseCase(event.id);
    result.fold(
      (failure) => emit(ProjectsError('Failed to delete project')),
      (projects) => emit(DeleteProjectState()),
    );
  });

  on<CreateProjectEvent>((event, emit) async {
    emit(ProjectsLoading());
    final either = await createProjectUseCase(event.name);
    either.fold(
      (failure) {
        if (failure.message.contains('403')) {
          emit(ProjectsError(
              'Maximum number of projects per user limit reached'));
        } else {
          emit(ProjectsError(failure.message));
        }
      },
      (project) {
        emit(ProjectCreateSuccess(project));
      },
    );
  });
}