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