feat: legacy mobile apps created

This commit is contained in:
Achintha Isuru
2025-12-02 23:51:04 -05:00
parent 850441ca64
commit 8e7753b324
1519 changed files with 0 additions and 16 deletions

View File

@@ -0,0 +1,99 @@
import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:krow/core/application/di/injectable.dart';
import 'package:krow/core/data/enums/staff_skill_enums.dart';
import 'package:krow/core/data/models/skill.dart';
import 'package:krow/core/data/models/staff_role.dart';
import 'package:krow/features/profile/role/domain/bloc/role_event.dart';
import 'package:krow/features/profile/role/domain/bloc/role_state.dart';
import 'package:krow/features/profile/role/domain/staff_role_repository.dart';
class RoleBloc extends Bloc<RoleEvent, RoleState> {
List<Skill>? skills;
List<StaffRole> staffRoles = [];
RoleBloc() : super(const RoleState(staffRoles: [], isLoading: true)) {
on<RoleFetchEvent>(_onFetch);
on<RoleSelectEvent>(_onSelect);
on<RoleSpawnEvent>(_onSpawn);
on<RoleDeleteEvent>(_onDelete);
on<RoleUpdateEvent>(_onUpdate);
on<RoleSaveChangesEvent>(_onSaveChanges);
}
FutureOr<void> _onFetch(event, emit) async {
staffRoles = await getIt<StaffRoleRepository>().getStaffRole();
skills = await getIt<StaffRoleRepository>().getSkills();
var availableSkills = skills!
.where((e) => !staffRoles.any((r) => r.skill?.id == e.id))
.toList();
emit(RoleState(
staffRoles: staffRoles, skills: availableSkills, isLoading: false));
if (staffRoles.isEmpty) {
var staffRole = StaffRole(
id: DateTime.now().toIso8601String(),
level: StaffSkillLevel.beginner,
experience: 1);
emit(state.copyWith(editedRole: staffRole, staffRoles: [staffRole]));
}
}
FutureOr<void> _onSelect(RoleSelectEvent event, emit) async {
emit(state.copyWith(editedRole: event.editedRole));
}
FutureOr<void> _onSpawn(event, emit) async {
var newRole = StaffRole(
id: DateTime.now().toIso8601String(),
level: StaffSkillLevel.beginner,
experience: 1);
emit(state.copyWith(
editedRole: newRole, staffRoles: [...state.staffRoles, newRole]));
}
FutureOr<void> _onDelete(RoleDeleteEvent event, emit) async {
emit(state.copyWith(isLoading: true));
if (event.role.status != null) {
await getIt<StaffRoleRepository>().deleteStaffRole(event.role);
}
var roles = state.staffRoles.where((e) => e != event.role).toList();
var availableSkills =
skills!.where((e) => !roles.any((r) => r.skill?.id == e.id)).toList();
emit(state.copyWith(
editedRole:
event.role.id == state.editedRole?.id ? null : state.editedRole,
staffRoles: roles,
skills: availableSkills,
isLoading: false));
}
FutureOr<void> _onUpdate(RoleUpdateEvent event, emit) async {
var roles = state.staffRoles
.map((e) => e.id == event.role.id ? event.role : e)
.toList();
var availableSkills =
skills!.where((e) => !roles.any((r) => r.skill?.id == e.id)).toList();
emit(state.copyWith(
staffRoles: roles, editedRole: event.role, skills: availableSkills));
}
Future<void> _onSaveChanges(RoleSaveChangesEvent event, emit) async {
emit(state.copyWith(isLoading: true));
await getIt<StaffRoleRepository>().saveStaffRole(event.role);
List<StaffRole> roles = state.staffRoles
.map((e) => e.id == event.role.id
? event.role.copyWith(status: StaffSkillStatus.pending)
: e)
.toList();
emit(state.copyWith(
staffRoles: roles,
isLoading: false,
editedRole: StaffRole.empty(),
));
}
}

View File

@@ -0,0 +1,37 @@
import 'package:flutter/foundation.dart';
import 'package:krow/core/data/models/staff_role.dart';
@immutable
sealed class RoleEvent {}
class RoleFetchEvent extends RoleEvent {
RoleFetchEvent();
}
class RoleSelectEvent extends RoleEvent {
final StaffRole editedRole;
RoleSelectEvent(this.editedRole);
}
class RoleSpawnEvent extends RoleEvent {
RoleSpawnEvent();
}
class RoleDeleteEvent extends RoleEvent {
final StaffRole role;
RoleDeleteEvent(this.role);
}
class RoleUpdateEvent extends RoleEvent {
final StaffRole role;
RoleUpdateEvent(this.role);
}
class RoleSaveChangesEvent extends RoleEvent {
final StaffRole role;
RoleSaveChangesEvent(this.role);
}

View File

@@ -0,0 +1,31 @@
import 'package:flutter/foundation.dart';
import 'package:krow/core/data/models/skill.dart';
import 'package:krow/core/data/models/staff_role.dart';
@immutable
class RoleState {
final bool isLoading;
final List<StaffRole> staffRoles;
final List<Skill> skills;
final StaffRole? editedRole;
const RoleState(
{required this.staffRoles,
this.editedRole,
this.isLoading = false,
this.skills = const []});
copyWith({
List<StaffRole>? staffRoles,
StaffRole? editedRole,
bool? isLoading,
List<Skill>? skills,
}) {
return RoleState(
staffRoles: staffRoles ?? this.staffRoles,
editedRole: editedRole ?? this.editedRole,
isLoading: isLoading ?? this.isLoading,
skills: skills ?? this.skills,
);
}
}

View File

@@ -0,0 +1,12 @@
import 'package:krow/core/data/models/skill.dart';
import 'package:krow/core/data/models/staff_role.dart';
abstract class StaffRoleRepository {
Future<List<StaffRole>> getStaffRole();
Future<List<Skill>> getSkills();
Future<String> saveStaffRole(StaffRole role);
Future<void> deleteStaffRole(StaffRole role);
}