lista de servicios

This commit is contained in:
Felipe
2024-04-05 18:40:17 -05:00
parent e82c7c3afd
commit df9f44a8f2
12 changed files with 398 additions and 250 deletions
+55 -2
View File
@@ -4,21 +4,31 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:professional_repository/professional_repository.dart';
import 'package:service_repository/service_repository.dart';
import 'package:user_repository/user_repository.dart';
part 'service_event.dart';
part 'service_state.dart';
class ServiceBloc extends Bloc<ServiceEvent, ServiceState> {
final FirebaseServiceRepository _serviceRepository;
final UserRepository _userRepository;
final FirebaseProfessionalRepository _professionalRepository;
ServiceBloc({required FirebaseServiceRepository serviceRepository})
: _serviceRepository = serviceRepository,
ServiceBloc({
required FirebaseServiceRepository serviceRepository,
required UserRepository userRepository,
required FirebaseProfessionalRepository professionRepository,
}) : _serviceRepository = serviceRepository,
_userRepository = userRepository,
_professionalRepository = professionRepository,
super(CreateServiceInitial()) {
on<CreateService>(_onCreateService);
on<LoadService>(_onLoadService);
on<UpdateServiceStatus>(_onUpdateServiceStatus);
on<LoadServicesForUser>(_onLoadServicesForUser);
}
void _onCreateService(CreateService event, Emitter<ServiceState> emit) async {
@@ -66,6 +76,40 @@ class ServiceBloc extends Bloc<ServiceEvent, ServiceState> {
}
}
void _onLoadServicesForUser(
LoadServicesForUser event, Emitter<ServiceState> emit) async {
try {
final servicesStream =
_serviceRepository.getServicesForUser(event.userId);
await for (var services in servicesStream) {
final professionalIds = services.map((e) => e.professionalId);
final List<MyUser> users =
await _userRepository.getUsersFromIds(professionalIds);
final usersDir = {for (var e in users) e.id: e};
final List<ProfessionalEntity> professionsList =
await _professionalRepository
.getProfessionsFromIds(professionalIds);
final professionsDir = {for (var e in professionsList) e.id: e};
final servicesInfo = services.map((e) {
return ServiceInfoUI(
service: e,
user: usersDir[e.professionalId]!,
professional: professionsDir[e.professionalId]!);
}).toList();
emit(ServicesForUserLoaded(servicesInfo));
}
} catch (e) {
log(e.toString());
emit(CreateServiceFailure());
}
}
void _onUpdateServiceStatus(
UpdateServiceStatus event, Emitter<ServiceState> emit) async {
try {
@@ -79,3 +123,12 @@ class ServiceBloc extends Bloc<ServiceEvent, ServiceState> {
}
}
}
class ServiceInfoUI {
final ServiceEntity service;
final MyUser user;
final ProfessionalEntity professional;
ServiceInfoUI(
{required this.service, required this.user, required this.professional});
}
@@ -26,6 +26,15 @@ class UpdateServiceStatus extends ServiceEvent {
List<Object> get props => [serviceId, newStatus];
}
class LoadServicesForUser extends ServiceEvent {
final String userId;
const LoadServicesForUser(this.userId);
@override
List<Object> get props => [userId];
}
class CreateService extends ServiceEvent {
final String professionalId;
final bool? professionalScored;
@@ -16,6 +16,15 @@ class ServiceLoaded extends ServiceState {
List<Object> get props => [service];
}
class ServicesForUserLoaded extends ServiceState {
final List<ServiceInfoUI> services;
const ServicesForUserLoaded(this.services);
@override
List<Object> get props => [services];
}
class CreateServiceInitial extends ServiceState {}
class CreateServiceFailure extends ServiceState {}