Skip to content

Conversation

bparth24
Copy link
Contributor

@bparth24 bparth24 commented Sep 15, 2025

  • Provides Vue.js components (OpticalScanner, ScannerUI) with reactive state management.
  • Implements plugin architecture for optical scanning with MRZ, QR, and PDF417 support.
  • Integrates Dynamsoft MRZ scanner with native camera interface for passport/ID scanning.
  • Adds scan type selection UI with dedicated modes for different document types.
  • Includes validation logic for MRZ field integrity and critical field checking.
  • Configures timeout handling and scanning mode coordination between continuous and camera-based scanning.

- Implements plugin architecture for optical scanning with MRZ, QR, and PDF417 support.
- Integrates Dynamsoft MRZ scanner with native camera interface for passport/ID scanning.
- Adds scan type selection UI with dedicated modes for different document types.
- Includes validation logic for MRZ field integrity and critical field checking.
- Configures timeout handling and scanning mode coordination between continuous and camera-based scanning.
- Provides Vue.js components (OpticalScanner, ScannerUI) with reactive state management.
@bparth24
Copy link
Contributor Author

@mandyvenables, for some reason, I can't add James as one of the reviewers.

- Replace direct OpticalScanner usage with CameraScanner abstraction
- Delegate all scanning complexity to bedrock-web-optical-scanner module
- Simplify configuration to scanType/scanMode props instead of plugin setup
- Use event-based result handling for cleaner separation of concerns
- Enable thin framework wrapper pattern
- Separate camera-area for CameraScanner and overlay-area for Vue UI
- Provide cameraContainer ref for CameraScanner management
- Focus purely on Quasar/Vue-specific UI components and styling
- Remove scanning logic to achieve thin wrapper architecture
- Enable framework-agnostic scanning with Vue-specific presentation layer
- Demonstrate proper usage of thin OpticalScanner wrapper
- Add architecture validation messaging for delegation testing
- Simplify demo to focus on result display and UI interaction
- Show successful Vue > CameraScanner > OpticalScanner flow
bparth24 and others added 6 commits September 28, 2025 13:54
- Remove licenseKey prop from OpticalScanner component API.
- Add configuration section to README explaining bedrock config setup.
- Update props documentation to clarify mode-specific behavior (showQrBox, torchOn apply to barcode mode only).
- Implement effectiveShowQrBox computed property for mode-aware UI rendering.
- Add troubleshooting section addressing common questions.
- Clarify enhanced PDF417 as hidden/legacy feature accessible via formats override.
- Document license key management architecture and design rationale.

This change addresses feedback to hide third-party dependencies from public API, making it easier to swap scanning providers in the future without breaking changes.
@bparth24 bparth24 requested a review from dlongley October 12, 2025 02:25
@@ -1,114 +1,57 @@
# bedrock-web-pouch-edv ChangeLog
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@davidlehn if you have time and could help wipe out / squash-away the old history from the module this built off of before we release 1.0 that would be great, it's ok if not.

Copy link
Contributor Author

@bparth24 bparth24 Oct 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dlongley @davidlehn

There is a PR already - digitalbazaar/bedrock-module-template-web#1 -- need to make decision on where certain content should be -- readme versus some other place.

Comment on lines +23 to +25
- Implemented `effectiveShowQrBox` computed property for mode-aware UI rendering
- Automatically disables QR box overlay when MRZ mode is active
- Makes mode-specific behavior explicit in code rather than implicit
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we make this more generic and say "show heads up display (HUD)", which will change based on the mode?

Suggested change
- Implemented `effectiveShowQrBox` computed property for mode-aware UI rendering
- Automatically disables QR box overlay when MRZ mode is active
- Makes mode-specific behavior explicit in code rather than implicit
- Implemented `showHud` computed property for mode-aware UI rendering
- Automatically disables QR box overlay when MRZ mode is active
- Makes mode-specific behavior explicit in code rather than implicit

Comment on lines +140 to +142
- **`formats`** (Array|null, default: `null`): Override default formats for scanType
- Example: `:formats="['pdf417_enhanced']"` for legacy driver license parsing
- **Note:** This is for advanced use cases and legacy support only
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is actually a different format that's being parsed, it's a request to use a different underlying engine, right? Perhaps we could just have a flag that says "useThirdPartyEngine: true/false" that we remove later? Or something like this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is actually a different format that's being parsed, it's a request to use a different underlying engine, right? Perhaps we could just have a flag that says "useThirdPartyEngine: true/false" that we remove later? Or something like this?

@dlongley

Question about useThirdPartyEngine implementation:

Where should the conversion from the useThirdPartyEngine boolean to the internal
pdf417_enhanced format string happen?

Option A - Convert in Vue layer:

  • Vue: useThirdPartyEngine={true} -> formats=['pdf417_enhanced']
  • Web module: Receives formats array (already implemented this way)
  • Pro: No changes to web module API
  • Con: Additional conversion logic; "pdf417_enhanced" - not good from a reusability point of view.

Option B - Convert in a web optical scanner module:

  • Vue: Passes useThirdPartyEngine: Boolean directly to CameraScanner
  • Web optical scanner module: Internally maps boolean → format string
  • Pro: "pdf417_enhanced" stays completely hidden; single source of conversion logic
  • Con: Requires adding a new parameter to the CameraScanner constructor

Which approach aligns better, according to you?

My inclination is Option B for now, but I wanted to confirm that this aligns with your vision before finalizing.

},
emits: ['result', 'error', 'close'],
setup(props, {emit}) {
console.log('🔍 Props:', props);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will want to remember to remove debug logging prior to merge.

Comment on lines +89 to +90
// TODO: double check and remove this logic from OpticalScanner as
// CameraScanner should be handle this
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO needs to be addressed or converted into a github issue for later.

Comment on lines +254 to +261
// emit('error', {
// message: error.message || 'File scanning failed',
// code: error.code || 'FILE_SCAN_ERROR'
// });
}
// finally {
// scanning.value = false;
// }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is still a considerable amount of commented coded (just one such example highlighted here) and such (e.g., debug logging) that we want to remove before merging.

export {PouchEdvClient} from './PouchEdvClient.js';
export {default as OpticalScanner} from '../components/OpticalScanner.vue';
export {default as ScannerUI} from '../components/ScannerUI.vue';
export {CameraScanner} from '@bedrock/web-optical-scanner';
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this need to be re-exported? If not, let's not do so right now -- easy to add than to remove.

@@ -1,51 +1,68 @@
{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't check in package-lock in libraries.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants