feat: legacy mobile apps created
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
import 'package:krow/features/profile/benefits/domain/entities/benefit_entity.dart';
|
||||
|
||||
abstract interface class BenefitsRepository {
|
||||
Future<List<BenefitEntity>> getStaffBenefits();
|
||||
|
||||
Future<BenefitEntity?> requestBenefit({required BenefitEntity benefit});
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:krow/core/application/di/injectable.dart';
|
||||
import 'package:krow/core/data/enums/state_status.dart';
|
||||
import 'package:krow/features/profile/benefits/domain/benefits_repository.dart';
|
||||
import 'package:krow/features/profile/benefits/domain/entities/benefit_entity.dart';
|
||||
|
||||
part 'benefits_event.dart';
|
||||
|
||||
part 'benefits_state.dart';
|
||||
|
||||
class BenefitsBloc extends Bloc<BenefitsEvent, BenefitsState> {
|
||||
BenefitsBloc() : super(const BenefitsState()) {
|
||||
on<InitializeBenefits>((event, emit) async {
|
||||
emit(state.copyWith(status: StateStatus.loading));
|
||||
|
||||
final benefits = await _repository.getStaffBenefits();
|
||||
|
||||
emit(state.copyWith(status: StateStatus.idle, benefits: benefits));
|
||||
});
|
||||
|
||||
on<SendBenefitRequest>((event, emit) async {
|
||||
emit(state.copyWith(status: StateStatus.loading));
|
||||
final result = await _repository.requestBenefit(benefit: event.benefit);
|
||||
|
||||
int index = -1;
|
||||
List<BenefitEntity>? updatedBenefits;
|
||||
if (result != null) {
|
||||
index = state.benefits.indexWhere(
|
||||
(benefit) => benefit.name == result.name,
|
||||
);
|
||||
|
||||
if (index >= 0) {
|
||||
updatedBenefits = List.from(state.benefits)..[index] = result;
|
||||
}
|
||||
}
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
benefits: updatedBenefits,
|
||||
status: StateStatus.idle,
|
||||
),
|
||||
);
|
||||
event.requestCompleter.complete(result ?? event.benefit);
|
||||
});
|
||||
}
|
||||
|
||||
final BenefitsRepository _repository = getIt<BenefitsRepository>();
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
part of 'benefits_bloc.dart';
|
||||
|
||||
@immutable
|
||||
sealed class BenefitsEvent {
|
||||
const BenefitsEvent();
|
||||
}
|
||||
|
||||
class InitializeBenefits extends BenefitsEvent {
|
||||
const InitializeBenefits();
|
||||
}
|
||||
|
||||
class SendBenefitRequest extends BenefitsEvent {
|
||||
const SendBenefitRequest({
|
||||
required this.benefit,
|
||||
required this.requestCompleter,
|
||||
});
|
||||
|
||||
final BenefitEntity benefit;
|
||||
final Completer<BenefitEntity> requestCompleter;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
part of 'benefits_bloc.dart';
|
||||
|
||||
@immutable
|
||||
class BenefitsState {
|
||||
const BenefitsState({
|
||||
this.status = StateStatus.idle,
|
||||
this.benefits = const [],
|
||||
this.exception,
|
||||
});
|
||||
|
||||
final StateStatus status;
|
||||
final List<BenefitEntity> benefits;
|
||||
final Exception? exception;
|
||||
|
||||
BenefitsState copyWith({
|
||||
StateStatus? status,
|
||||
List<BenefitEntity>? benefits,
|
||||
Exception? exception,
|
||||
}) {
|
||||
return BenefitsState(
|
||||
status: status ?? this.status,
|
||||
benefits: benefits ?? this.benefits,
|
||||
exception: exception,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:krow/features/profile/benefits/domain/entities/benefit_record_entity.dart';
|
||||
|
||||
@immutable
|
||||
class BenefitEntity {
|
||||
const BenefitEntity({
|
||||
required this.name,
|
||||
required this.requirement,
|
||||
required this.requiredHours,
|
||||
required this.currentHours,
|
||||
required this.isClaimed,
|
||||
required this.info,
|
||||
required this.history,
|
||||
});
|
||||
|
||||
final String name;
|
||||
final String requirement;
|
||||
final int requiredHours;
|
||||
final int currentHours;
|
||||
final bool isClaimed;
|
||||
final String info;
|
||||
final List<BenefitRecordEntity> history;
|
||||
|
||||
double get progress {
|
||||
final progress = currentHours / requiredHours;
|
||||
return progress > 1 ? 1 : progress;
|
||||
}
|
||||
|
||||
BenefitEntity copyWith({
|
||||
String? name,
|
||||
String? requirement,
|
||||
int? requiredHours,
|
||||
int? currentHours,
|
||||
bool? isClaimed,
|
||||
String? info,
|
||||
List<BenefitRecordEntity>? history,
|
||||
}) {
|
||||
return BenefitEntity(
|
||||
name: name ?? this.name,
|
||||
requirement: requirement ?? this.requirement,
|
||||
requiredHours: requiredHours ?? this.requiredHours,
|
||||
currentHours: currentHours ?? this.currentHours,
|
||||
isClaimed: isClaimed ?? this.isClaimed,
|
||||
info: info ?? this.info,
|
||||
history: history ?? this.history,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
@immutable
|
||||
class BenefitRecordEntity {
|
||||
const BenefitRecordEntity({required this.createdAt, required this.status});
|
||||
|
||||
final DateTime createdAt;
|
||||
final RecordStatus status;
|
||||
}
|
||||
|
||||
enum RecordStatus { pending, submitted }
|
||||
Reference in New Issue
Block a user