Merge pull request #557 from Oloodi/267-p0-comp-04-documents-screen
Fix small UI issue
This commit is contained in:
@@ -279,4 +279,10 @@ class UiIcons {
|
||||
|
||||
/// Gallery icon for gallery
|
||||
static const IconData gallery = _IconLib.galleryVertical;
|
||||
|
||||
/// Certificate icon
|
||||
static const IconData certificate = _IconLib.fileCheck;
|
||||
|
||||
/// Circle dollar icon
|
||||
static const IconData circleDollar = _IconLib.circleDollarSign;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,9 @@ class ComplianceSection extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final TranslationsStaffProfileEn i18n = Translations.of(context).staff.profile;
|
||||
final TranslationsStaffProfileEn i18n = Translations.of(
|
||||
context,
|
||||
).staff.profile;
|
||||
|
||||
return BlocBuilder<ProfileCubit, ProfileState>(
|
||||
builder: (BuildContext context, ProfileState state) {
|
||||
@@ -33,11 +35,21 @@ class ComplianceSection extends StatelessWidget {
|
||||
crossAxisCount: 3,
|
||||
children: <Widget>[
|
||||
ProfileMenuItem(
|
||||
icon: UiIcons.file,
|
||||
icon: UiIcons.circleDollar,
|
||||
label: i18n.menu_items.tax_forms,
|
||||
completed: state.taxFormsComplete,
|
||||
onTap: () => Modular.to.toTaxForms(),
|
||||
),
|
||||
ProfileMenuItem(
|
||||
icon: UiIcons.file,
|
||||
label: i18n.menu_items.documents,
|
||||
onTap: () => Modular.to.toDocuments(),
|
||||
),
|
||||
ProfileMenuItem(
|
||||
icon: UiIcons.certificate,
|
||||
label: i18n.menu_items.certificates,
|
||||
onTap: () => Modular.to.toCertificates(),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
@@ -56,11 +56,6 @@ class OnboardingSection extends StatelessWidget {
|
||||
label: i18n.menu_items.attire,
|
||||
onTap: () => Modular.to.toAttire(),
|
||||
),
|
||||
ProfileMenuItem(
|
||||
icon: UiIcons.file,
|
||||
label: i18n.menu_items.documents,
|
||||
onTap: () => Modular.to.toDocuments(),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
@@ -15,6 +15,9 @@ import 'presentation/pages/certificate_upload_page.dart';
|
||||
import 'presentation/pages/certificates_page.dart';
|
||||
|
||||
class StaffCertificatesModule extends Module {
|
||||
@override
|
||||
List<Module> get imports => <Module>[CoreModule()];
|
||||
|
||||
@override
|
||||
void binds(Injector i) {
|
||||
i.addLazySingleton<CertificatesRepository>(CertificatesRepositoryImpl.new);
|
||||
|
||||
@@ -11,6 +11,9 @@ import 'presentation/pages/documents_page.dart';
|
||||
import 'presentation/pages/document_upload_page.dart';
|
||||
|
||||
class StaffDocumentsModule extends Module {
|
||||
@override
|
||||
List<Module> get imports => <Module>[CoreModule()];
|
||||
|
||||
@override
|
||||
void binds(Injector i) {
|
||||
i.addLazySingleton<DocumentsRepository>(
|
||||
|
||||
@@ -14,6 +14,9 @@ import 'presentation/pages/attire_capture_page.dart';
|
||||
import 'presentation/pages/attire_page.dart';
|
||||
|
||||
class StaffAttireModule extends Module {
|
||||
@override
|
||||
List<Module> get imports => <Module>[CoreModule()];
|
||||
|
||||
@override
|
||||
void binds(Injector i) {
|
||||
/// third party services
|
||||
@@ -25,7 +28,13 @@ class StaffAttireModule extends Module {
|
||||
);
|
||||
|
||||
// Repository
|
||||
i.addLazySingleton<AttireRepository>(AttireRepositoryImpl.new);
|
||||
i.addLazySingleton<AttireRepository>(
|
||||
() => AttireRepositoryImpl(
|
||||
uploadService: i.get<FileUploadService>(),
|
||||
signedUrlService: i.get<SignedUrlService>(),
|
||||
verificationService: i.get<VerificationService>(),
|
||||
),
|
||||
);
|
||||
|
||||
// Use Cases
|
||||
i.addLazySingleton(GetAttireOptionsUseCase.new);
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_modular/flutter_modular.dart';
|
||||
import 'package:krow_core/core.dart';
|
||||
import 'package:krow_data_connect/krow_data_connect.dart'
|
||||
hide AttireVerificationStatus;
|
||||
@@ -12,12 +11,22 @@ import '../../domain/repositories/attire_repository.dart';
|
||||
/// Delegates data access to [StaffConnectorRepository].
|
||||
class AttireRepositoryImpl implements AttireRepository {
|
||||
/// Creates an [AttireRepositoryImpl].
|
||||
AttireRepositoryImpl({StaffConnectorRepository? connector})
|
||||
: _connector =
|
||||
connector ?? DataConnectService.instance.getStaffRepository();
|
||||
AttireRepositoryImpl({
|
||||
required FileUploadService uploadService,
|
||||
required SignedUrlService signedUrlService,
|
||||
required VerificationService verificationService,
|
||||
StaffConnectorRepository? connector,
|
||||
}) : _connector =
|
||||
connector ?? DataConnectService.instance.getStaffRepository(),
|
||||
_uploadService = uploadService,
|
||||
_signedUrlService = signedUrlService,
|
||||
_verificationService = verificationService;
|
||||
|
||||
/// The Staff Connector repository.
|
||||
final StaffConnectorRepository _connector;
|
||||
final FileUploadService _uploadService;
|
||||
final SignedUrlService _signedUrlService;
|
||||
final VerificationService _verificationService;
|
||||
|
||||
@override
|
||||
Future<List<AttireItem>> getAttireOptions() async {
|
||||
@@ -37,8 +46,7 @@ class AttireRepositoryImpl implements AttireRepository {
|
||||
@override
|
||||
Future<AttireItem> uploadPhoto(String itemId, String filePath) async {
|
||||
// 1. Upload file to Core API
|
||||
final FileUploadService uploadService = Modular.get<FileUploadService>();
|
||||
final FileUploadResponse uploadRes = await uploadService.uploadFile(
|
||||
final FileUploadResponse uploadRes = await _uploadService.uploadFile(
|
||||
filePath: filePath,
|
||||
fileName: filePath.split('/').last,
|
||||
);
|
||||
@@ -46,14 +54,11 @@ class AttireRepositoryImpl implements AttireRepository {
|
||||
final String fileUri = uploadRes.fileUri;
|
||||
|
||||
// 2. Create signed URL for the uploaded file
|
||||
final SignedUrlService signedUrlService = Modular.get<SignedUrlService>();
|
||||
final SignedUrlResponse signedUrlRes = await signedUrlService
|
||||
final SignedUrlResponse signedUrlRes = await _signedUrlService
|
||||
.createSignedUrl(fileUri: fileUri);
|
||||
final String photoUrl = signedUrlRes.signedUrl;
|
||||
|
||||
// 3. Initiate verification job
|
||||
final VerificationService verificationService =
|
||||
Modular.get<VerificationService>();
|
||||
final Staff staff = await _connector.getStaffProfile();
|
||||
|
||||
// Get item details for verification rules
|
||||
@@ -64,7 +69,7 @@ class AttireRepositoryImpl implements AttireRepository {
|
||||
final String dressCode =
|
||||
'${targetItem.description ?? ''} ${targetItem.label}'.trim();
|
||||
|
||||
final VerificationResponse verifyRes = await verificationService
|
||||
final VerificationResponse verifyRes = await _verificationService
|
||||
.createVerification(
|
||||
type: 'attire',
|
||||
subjectType: 'worker',
|
||||
@@ -81,7 +86,7 @@ class AttireRepositoryImpl implements AttireRepository {
|
||||
bool isFinished = false;
|
||||
while (!isFinished && attempts < 5) {
|
||||
await Future<void>.delayed(const Duration(seconds: 2));
|
||||
final VerificationResponse statusRes = await verificationService
|
||||
final VerificationResponse statusRes = await _verificationService
|
||||
.getStatus(verificationId);
|
||||
currentStatus = statusRes.status;
|
||||
if (currentStatus != VerificationStatus.pending &&
|
||||
|
||||
Reference in New Issue
Block a user