diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart index de03b8aa..5c0efd76 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/data/repositories_impl/documents_repository_impl.dart @@ -50,21 +50,11 @@ class DocumentsRepositoryImpl implements DocumentsRepository { ); final String description = (currentDoc.description ?? '').toLowerCase(); - String verificationType = 'government_id'; - if (description.contains('permit')) { - verificationType = 'work_permit'; - } else if (description.contains('passport')) { - verificationType = 'passport'; - } else if (description.contains('ssn') || - description.contains('social security')) { - verificationType = 'ssn'; - } - final String staffId = await _service.getStaffId(); final VerificationResponse verificationRes = await _verificationService .createVerification( fileUri: uploadRes.fileUri, - type: verificationType, + type: 'government_id', subjectType: 'worker', subjectId: staffId, rules: { @@ -75,7 +65,7 @@ class DocumentsRepositoryImpl implements DocumentsRepository { // 4. Update/Create StaffDocument in Data Connect await _service.getStaffRepository().upsertStaffDocument( documentId: documentId, - documentUrl: uploadRes.fileUri, + documentUrl: signedUrlRes.signedUrl, status: domain.DocumentStatus.pending, verificationId: verificationRes.verificationId, ); diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_cubit.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_cubit.dart index 8cb036a6..89cd8d86 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_cubit.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_cubit.dart @@ -19,6 +19,11 @@ class DocumentUploadCubit extends Cubit { emit(state.copyWith(isAttested: value)); } + /// Sets the selected file path for the document. + void setSelectedFilePath(String filePath) { + emit(state.copyWith(selectedFilePath: filePath)); + } + /// Uploads the selected document if the user has attested. /// /// Requires [state.isAttested] to be true before proceeding. diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_state.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_state.dart index a737b1a1..eb92a3e0 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_state.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/blocs/document_upload/document_upload_state.dart @@ -7,6 +7,7 @@ class DocumentUploadState extends Equatable { const DocumentUploadState({ this.status = DocumentUploadStatus.initial, this.isAttested = false, + this.selectedFilePath, this.documentUrl, this.updatedDocument, this.errorMessage, @@ -14,6 +15,7 @@ class DocumentUploadState extends Equatable { final DocumentUploadStatus status; final bool isAttested; + final String? selectedFilePath; final String? documentUrl; final StaffDocument? updatedDocument; final String? errorMessage; @@ -21,6 +23,7 @@ class DocumentUploadState extends Equatable { DocumentUploadState copyWith({ DocumentUploadStatus? status, bool? isAttested, + String? selectedFilePath, String? documentUrl, StaffDocument? updatedDocument, String? errorMessage, @@ -28,6 +31,7 @@ class DocumentUploadState extends Equatable { return DocumentUploadState( status: status ?? this.status, isAttested: isAttested ?? this.isAttested, + selectedFilePath: selectedFilePath ?? this.selectedFilePath, documentUrl: documentUrl ?? this.documentUrl, updatedDocument: updatedDocument ?? this.updatedDocument, errorMessage: errorMessage ?? this.errorMessage, @@ -38,6 +42,7 @@ class DocumentUploadState extends Equatable { List get props => [ status, isAttested, + selectedFilePath, documentUrl, updatedDocument, errorMessage, diff --git a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/document_upload_page.dart b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/document_upload_page.dart index 5894b363..13dbe8df 100644 --- a/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/document_upload_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/compliance/documents/lib/src/presentation/pages/document_upload_page.dart @@ -17,7 +17,7 @@ import '../widgets/document_upload/pdf_file_types_banner.dart'; /// /// Mirrors the pattern used in [AttireCapturePage] for a consistent upload flow: /// file selection → attestation → submit → poll for result. -class DocumentUploadPage extends StatefulWidget { +class DocumentUploadPage extends StatelessWidget { const DocumentUploadPage({ super.key, required this.document, @@ -30,20 +30,17 @@ class DocumentUploadPage extends StatefulWidget { /// Optional URL of an already-uploaded document. final String? initialUrl; - @override - State createState() => _DocumentUploadPageState(); -} - -class _DocumentUploadPageState extends State { - String? _selectedFilePath; @override Widget build(BuildContext context) { - if (widget.initialUrl != null) { - _selectedFilePath = widget.initialUrl; - } - return BlocProvider( - create: (BuildContext _) => Modular.get(), + create: (BuildContext _) { + final DocumentUploadCubit cubit = + Modular.get(); + if (initialUrl != null) { + cubit.setSelectedFilePath(initialUrl!); + } + return cubit; + }, child: BlocConsumer( listener: (BuildContext context, DocumentUploadState state) { if (state.status == DocumentUploadStatus.success) { @@ -64,8 +61,8 @@ class _DocumentUploadPageState extends State { builder: (BuildContext context, DocumentUploadState state) { return Scaffold( appBar: UiAppBar( - title: widget.document.name, - subtitle: widget.document.description, + title: document.name, + subtitle: document.description, onLeadingPressed: () => Modular.to.toDocuments(), ), body: SingleChildScrollView( @@ -78,11 +75,10 @@ class _DocumentUploadPageState extends State { ), const SizedBox(height: UiConstants.space6), DocumentFileSelector( - selectedFilePath: _selectedFilePath, + selectedFilePath: state.selectedFilePath, onFileSelected: (String path) { - setState(() { - _selectedFilePath = path; - }); + BlocProvider.of(context) + .setSelectedFilePath(path); }, ), ], @@ -109,15 +105,13 @@ class _DocumentUploadPageState extends State { DocumentUploadFooter( isUploading: state.status == DocumentUploadStatus.uploading, - canSubmit: _selectedFilePath != null && state.isAttested, + canSubmit: state.selectedFilePath != null && state.isAttested, onSubmit: () { - - BlocProvider.of( - context, - ).uploadDocument( - widget.document.documentId, - _selectedFilePath!, - ); + BlocProvider.of(context) + .uploadDocument( + document.documentId, + state.selectedFilePath!, + ); }, ), ],