- Revert ContactInputForm QR scanner from function props back to emit pattern
- Remove problematic onQRScan function prop that wasn't resolving correctly
- Update ContactsView to use @qr-scan event handler instead of function prop
- Maintain debugging logs to track click events and method execution
- Keep other function props intact for other event handlers
The function prop approach for QR scanning failed due to Vue prop resolution
issues, causing the default function to be called instead of the parent handler.
Reverting to emits provides reliable parent-child communication for this case.
- Revert ContactInputForm QR scanner from function props back to emit pattern
- Remove problematic onQRScan function prop that wasn't resolving correctly
- Update ContactsView to use @qr-scan event handler instead of function prop
- Maintain debugging logs to track click events and method execution
- Keep other function props intact for other event handlers
The function prop approach for QR scanning failed due to Vue prop resolution
issues, causing the default function to be called instead of the parent handler.
Reverting to emits provides reliable parent-child communication for this case.
- Add configurable entity display logic via function props to EntityGrid
- Implement comprehensive test suite for EntityGrid function props in TestView
- Apply consistent code formatting across 15 components and views
- Fix linting issues with trailing commas and line breaks
- Add new EntityGridFunctionPropTest.vue for component testing
- Update endorserServer with improved error handling and logging
- Streamline PlatformServiceMixin with better cache management
- Enhance component documentation and type safety
Changes span 15 files with 159 additions and 69 deletions, focusing on
component flexibility, code quality, and testing infrastructure.
- Add configurable entity display logic via function props to EntityGrid
- Implement comprehensive test suite for EntityGrid function props in TestView
- Apply consistent code formatting across 15 components and views
- Fix linting issues with trailing commas and line breaks
- Add new EntityGridFunctionPropTest.vue for component testing
- Update endorserServer with improved error handling and logging
- Streamline PlatformServiceMixin with better cache management
- Enhance component documentation and type safety
Changes span 15 files with 159 additions and 69 deletions, focusing on
component flexibility, code quality, and testing infrastructure.
Create comprehensive development guide establishing our preferred patterns
for Vue component communication. Document the preference for function props
over $emit for business logic while reserving $emit for DOM-like events.
Guide covers:
- Function props for business logic, data operations, and complex interactions
- $emit for DOM-like events, lifecycle events, and simple user interactions
- Implementation patterns with TypeScript examples
- Testing strategies for both approaches
- Migration strategy from $emit to function props
- Naming conventions and best practices
Establishes consistent, maintainable component communication patterns
across the application with focus on type safety and developer experience.
Create comprehensive development guide establishing our preferred patterns
for Vue component communication. Document the preference for function props
over $emit for business logic while reserving $emit for DOM-like events.
Guide covers:
- Function props for business logic, data operations, and complex interactions
- $emit for DOM-like events, lifecycle events, and simple user interactions
- Implementation patterns with TypeScript examples
- Testing strategies for both approaches
- Migration strategy from $emit to function props
- Naming conventions and best practices
Establishes consistent, maintainable component communication patterns
across the application with focus on type safety and developer experience.
Clean up all temporary debugging console.log statements added during
registration status troubleshooting. Remove debug output from multiple
components while preserving essential error logging and functionality.
Changes:
- PlatformServiceMixin.ts: Remove debug logging from $saveUserSettings and $saveMySettings
- AccountViewView.vue: Remove debug logging from mounted, initializeState, checkLimits, and onRecheckLimits
- UsageLimitsSection.vue: Remove debug logging from lifecycle hooks and recheckLimits
- IdentitySwitcherView.vue: Remove debug logging from switchAccount method
All core functionality preserved including error handling with logger.error()
and user notifications. Codebase now production-ready without debugging noise.
Clean up all temporary debugging console.log statements added during
registration status troubleshooting. Remove debug output from multiple
components while preserving essential error logging and functionality.
Changes:
- PlatformServiceMixin.ts: Remove debug logging from $saveUserSettings and $saveMySettings
- AccountViewView.vue: Remove debug logging from mounted, initializeState, checkLimits, and onRecheckLimits
- UsageLimitsSection.vue: Remove debug logging from lifecycle hooks and recheckLimits
- IdentitySwitcherView.vue: Remove debug logging from switchAccount method
All core functionality preserved including error handling with logger.error()
and user notifications. Codebase now production-ready without debugging noise.
Resolved issue where registration banner persisted despite successful API registration.
Root cause was loadSettings() being called after initializeIdentity(), overwriting
updated isRegistered value with stale database data.
Changes:
- Remove redundant loadSettings() call from mounted() lifecycle
- Add $nextTick() to force template re-render after registration updates
- Create isUserRegistered computed property for template reactivity
- Clean up debugging console.log statements for production readiness
- Simplify template logic to use standard v-if/v-else pattern
Registration banner now properly disappears when users are registered, and
"Record something given by:" section appears correctly. Fix maintains existing
functionality while ensuring proper Vue reactivity.
Resolved issue where registration banner persisted despite successful API registration.
Root cause was loadSettings() being called after initializeIdentity(), overwriting
updated isRegistered value with stale database data.
Changes:
- Remove redundant loadSettings() call from mounted() lifecycle
- Add $nextTick() to force template re-render after registration updates
- Create isUserRegistered computed property for template reactivity
- Clean up debugging console.log statements for production readiness
- Simplify template logic to use standard v-if/v-else pattern
Registration banner now properly disappears when users are registered, and
"Record something given by:" section appears correctly. Fix maintains existing
functionality while ensuring proper Vue reactivity.
- Restored proper section container with bg-slate-100 styling and accessibility attributes
- Added FontAwesome spinner with proper ARIA labels for loading state
- Restored detailed limits information showing claims/week, registrations/month, and images/week
- Added proper pluralization and date formatting for reset timers
- Enhanced button styling to match original design with slate gradient
- Added activeDid, endorserLimits, and imageLimits props to component
- Maintained comprehensive debugging for troubleshooting User #00 limits issue
- Added readableDate helper method for consistent date formatting
Fixes missing functionality that was lost during component extraction from AccountViewView.
- Restored proper section container with bg-slate-100 styling and accessibility attributes
- Added FontAwesome spinner with proper ARIA labels for loading state
- Restored detailed limits information showing claims/week, registrations/month, and images/week
- Added proper pluralization and date formatting for reset timers
- Enhanced button styling to match original design with slate gradient
- Added activeDid, endorserLimits, and imageLimits props to component
- Maintained comprehensive debugging for troubleshooting User #00 limits issue
- Added readableDate helper method for consistent date formatting
Fixes missing functionality that was lost during component extraction from AccountViewView.
Remove obsolete Vite configuration files that are no longer used by the build system
and update BUILDING.md to accurately reflect the current configuration structure.
**Removed Files:**
- vite.config.ts (47 lines) - Legacy configuration file
- vite.config.mts (70 lines) - Unused "main" configuration file
**Updated Documentation:**
- BUILDING.md - Corrected Vite configuration section to show actual usage
**Current Configuration Structure:**
- vite.config.web.mts - Used by build-web.sh
- vite.config.electron.mts - Used by build-electron.sh
- vite.config.capacitor.mts - Used by npm run build:capacitor
- vite.config.common.mts - Shared configuration utilities
- vite.config.utils.mts - Configuration utility functions
**Benefits:**
- Eliminates confusion about which config files to use
- Removes 117 lines of unused configuration code
- Documentation now matches actual build system usage
- Cleaner, more maintainable configuration structure
**Impact:**
- No functional changes to build process
- All platform builds continue to work correctly
- Reduced configuration complexity and maintenance overhead
Remove obsolete Vite configuration files that are no longer used by the build system
and update BUILDING.md to accurately reflect the current configuration structure.
**Removed Files:**
- vite.config.ts (47 lines) - Legacy configuration file
- vite.config.mts (70 lines) - Unused "main" configuration file
**Updated Documentation:**
- BUILDING.md - Corrected Vite configuration section to show actual usage
**Current Configuration Structure:**
- vite.config.web.mts - Used by build-web.sh
- vite.config.electron.mts - Used by build-electron.sh
- vite.config.capacitor.mts - Used by npm run build:capacitor
- vite.config.common.mts - Shared configuration utilities
- vite.config.utils.mts - Configuration utility functions
**Benefits:**
- Eliminates confusion about which config files to use
- Removes 117 lines of unused configuration code
- Documentation now matches actual build system usage
- Cleaner, more maintainable configuration structure
**Impact:**
- No functional changes to build process
- All platform builds continue to work correctly
- Reduced configuration complexity and maintenance overhead
Remove LazyLoadingExample.vue component that was only used for documentation
and not referenced in the actual application code.
**Changes:**
- Delete src/components/LazyLoadingExample.vue (306 lines)
- Add description to @ts-expect-error directive in ShareMyContactInfoView
**Benefits:**
- Reduces codebase size and complexity
- Eliminates 13 lint warnings from unused component
- Improves code maintainability
- Keeps documentation examples separate from runtime code
**Impact:**
- No functional changes to application
- Cleaner component directory
- Reduced bundle size (component was not tree-shakeable)
Remove LazyLoadingExample.vue component that was only used for documentation
and not referenced in the actual application code.
**Changes:**
- Delete src/components/LazyLoadingExample.vue (306 lines)
- Add description to @ts-expect-error directive in ShareMyContactInfoView
**Benefits:**
- Reduces codebase size and complexity
- Eliminates 13 lint warnings from unused component
- Improves code maintainability
- Keeps documentation examples separate from runtime code
**Impact:**
- No functional changes to application
- Cleaner component directory
- Reduced bundle size (component was not tree-shakeable)
Fix ContactInputForm v-model binding issue that was causing "no contact info" error
when adding contacts. The component was using incorrect prop name for v-model.
**Changes:**
- Update ContactInputForm to use standard `modelValue` prop instead of `input`
- Fix v-model binding by using `update:modelValue` event emission
- Remove unused `Model` import from vue-facing-decorator
- Replace `@ts-ignore` with `@ts-expect-error` in ShareMyContactInfoView
**Fixes:**
- Contact input field now properly updates parent component state
- Eliminates "There was no contact info to add" error when DID is entered
- Resolves Vue 3 v-model compatibility issues
- Clears remaining lint errors
**Testing:**
- Contact form should now accept DID input and process it correctly
- v-model binding works as expected between ContactInputForm and ContactsView
Fix ContactInputForm v-model binding issue that was causing "no contact info" error
when adding contacts. The component was using incorrect prop name for v-model.
**Changes:**
- Update ContactInputForm to use standard `modelValue` prop instead of `input`
- Fix v-model binding by using `update:modelValue` event emission
- Remove unused `Model` import from vue-facing-decorator
- Replace `@ts-ignore` with `@ts-expect-error` in ShareMyContactInfoView
**Fixes:**
- Contact input field now properly updates parent component state
- Eliminates "There was no contact info to add" error when DID is entered
- Resolves Vue 3 v-model compatibility issues
- Clears remaining lint errors
**Testing:**
- Contact form should now accept DID input and process it correctly
- v-model binding works as expected between ContactInputForm and ContactsView
- Migrate ContactBulkActions, ContactInputForm, ContactListHeader, ContactListItem, LargeIdenticonModal, and ContactsView to PlatformServiceMixin
- Add comprehensive deep linking support to CapacitorPlatformService and WebPlatformService
- Enhance PlatformService with new database operations and deep link handling
- Update service worker and documentation for migration progress
- Fix TypeScript type errors in util.ts and deepLinks.ts
- Streamline circular dependency analysis and migration tracking docs
- Migrate ContactBulkActions, ContactInputForm, ContactListHeader, ContactListItem, LargeIdenticonModal, and ContactsView to PlatformServiceMixin
- Add comprehensive deep linking support to CapacitorPlatformService and WebPlatformService
- Enhance PlatformService with new database operations and deep link handling
- Update service worker and documentation for migration progress
- Fix TypeScript type errors in util.ts and deepLinks.ts
- Streamline circular dependency analysis and migration tracking docs
- Remove duplicate NOTIFY_INVITE_MISSING and NOTIFY_INVITE_PROCESSING_ERROR exports
- Update InviteOneAcceptView.vue to use correct NOTIFY_INVITE_TRUNCATED_DATA constant
- Migrate ContactsView to PlatformServiceMixin and extract into modular sub-components
- Resolves TypeScript compilation errors preventing web build
- Remove duplicate NOTIFY_INVITE_MISSING and NOTIFY_INVITE_PROCESSING_ERROR exports
- Update InviteOneAcceptView.vue to use correct NOTIFY_INVITE_TRUNCATED_DATA constant
- Migrate ContactsView to PlatformServiceMixin and extract into modular sub-components
- Resolves TypeScript compilation errors preventing web build
- Deleted src/registerServiceWorker.ts and all related imports
- Cleaned up WebPlatformService and main.web.ts to remove manual SW logic
- Updated VitePWA config for correct dev/prod SW handling
- Fixed missing FontAwesome download icon in PWA prompt
- Updated docs to reflect new PWA registration approach
PWA now works reliably in all web environments with zero manual SW code.
- Deleted src/registerServiceWorker.ts and all related imports
- Cleaned up WebPlatformService and main.web.ts to remove manual SW logic
- Updated VitePWA config for correct dev/prod SW handling
- Fixed missing FontAwesome download icon in PWA prompt
- Updated docs to reflect new PWA registration approach
PWA now works reliably in all web environments with zero manual SW code.
- Add PWA methods to PlatformService interface (registerServiceWorker, isPWAEnabled)
- Implement PWA logic in WebPlatformService with service worker registration
- Add no-op PWA implementations for Capacitor and Electron platforms
- Create PWAInstallPrompt component with custom install UI and event handling
- Integrate PWA components into App.vue with platform-aware conditional rendering
- Ensure PWA features only load on web platform via platform service pattern
- Centralize PWA logic in platform service for consistent cross-platform behavior
- Add comprehensive PWA documentation and installation flow support
Platform service now handles all PWA operations including service worker
registration, install prompts, and platform-specific feature detection.
- Add PWA methods to PlatformService interface (registerServiceWorker, isPWAEnabled)
- Implement PWA logic in WebPlatformService with service worker registration
- Add no-op PWA implementations for Capacitor and Electron platforms
- Create PWAInstallPrompt component with custom install UI and event handling
- Integrate PWA components into App.vue with platform-aware conditional rendering
- Ensure PWA features only load on web platform via platform service pattern
- Centralize PWA logic in platform service for consistent cross-platform behavior
- Add comprehensive PWA documentation and installation flow support
Platform service now handles all PWA operations including service worker
registration, install prompts, and platform-specific feature detection.
- Add PWAInstallPrompt component for custom install UI and event handling
- Register PWAInstallPrompt in App.vue for global visibility
- Enable PWA features and install prompt in dev, test, and prod (vite.config.web.mts)
- Update service worker registration to work in all environments
- Update docs/build-web-script-integration.md with PWA install guidance and visual cues
- Add scripts/build-web.sh for unified web build/dev workflow
PWA is now installable and testable in all web environments, with clear user prompts and desktop support.
- Add PWAInstallPrompt component for custom install UI and event handling
- Register PWAInstallPrompt in App.vue for global visibility
- Enable PWA features and install prompt in dev, test, and prod (vite.config.web.mts)
- Update service worker registration to work in all environments
- Update docs/build-web-script-integration.md with PWA install guidance and visual cues
- Add scripts/build-web.sh for unified web build/dev workflow
PWA is now installable and testable in all web environments, with clear user prompts and desktop support.
- Remove all debug and commented-out console.log statements from test files and testUtils
- Ensure test output is clean and maintainable
- No changes to test logic or assertions
- Remove all debug and commented-out console.log statements from test files and testUtils
- Ensure test output is clean and maintainable
- No changes to test logic or assertions
- Change build:* naming from hyphen to colon (build:web-dev → build:web:dev)
- Add missing build:web:test and build:web:prod scripts
- Update build:electron:dev to include electron startup (build + start)
- Remove hardcoded --mode electron to allow proper mode override
- Add comprehensive mode override behavior documentation
- Fix mode conflicts between hardcoded and passed --mode arguments
The plan now properly supports:
- Development builds with default --mode development
- Testing builds with explicit --mode test override
- Production builds with explicit --mode production override
- Consistent naming across all platforms (web, capacitor, electron)
- Change build:* naming from hyphen to colon (build:web-dev → build:web:dev)
- Add missing build:web:test and build:web:prod scripts
- Update build:electron:dev to include electron startup (build + start)
- Remove hardcoded --mode electron to allow proper mode override
- Add comprehensive mode override behavior documentation
- Fix mode conflicts between hardcoded and passed --mode arguments
The plan now properly supports:
- Development builds with default --mode development
- Testing builds with explicit --mode test override
- Production builds with explicit --mode production override
- Consistent naming across all platforms (web, capacitor, electron)
- Extract long CSS class to computed property containerClasses
- Fix header comment formatting to proper JSDoc format
- Enhance component documentation for template streamlining
- Update class binding from static to dynamic for better maintainability
- Migration completed in 3 minutes (within estimate)
- No database or SQL operations needed (pure UI component)
- Lint validation passed with no errors
Security audit: No security risks (cosmetic template changes only)
Migration status: 67% complete (62/92 components migrated)
- Extract long CSS class to computed property containerClasses
- Fix header comment formatting to proper JSDoc format
- Enhance component documentation for template streamlining
- Update class binding from static to dynamic for better maintainability
- Migration completed in 3 minutes (within estimate)
- No database or SQL operations needed (pure UI component)
- Lint validation passed with no errors
Security audit: No security risks (cosmetic template changes only)
Migration status: 67% complete (62/92 components migrated)
- Extracted all long/repeated CSS class strings in template to computed properties for maintainability
- Added/updated file-level and method-level documentation with comprehensive JSDoc comments
- Removed CSS styles in favor of computed properties for consistency
- No databaseUtil or SQL abstraction required (pure UI component)
- No notification usage to migrate
- Lint validation successful (no errors)
Technical improvements:
- 8 computed properties for CSS classes (overlay, dialog, buttons, input, etc.)
- Enhanced code maintainability and readability
- Follows Enhanced Triple Migration Pattern Phase 4 (Template Streamlining)
- Improved component documentation and type safety
Migration completed in 2 minutes (4x faster than 8-12 min estimate)
- Extracted all long/repeated CSS class strings in template to computed properties for maintainability
- Added/updated file-level and method-level documentation with comprehensive JSDoc comments
- Removed CSS styles in favor of computed properties for consistency
- No databaseUtil or SQL abstraction required (pure UI component)
- No notification usage to migrate
- Lint validation successful (no errors)
Technical improvements:
- 8 computed properties for CSS classes (overlay, dialog, buttons, input, etc.)
- Enhanced code maintainability and readability
- Follows Enhanced Triple Migration Pattern Phase 4 (Template Streamlining)
- Improved component documentation and type safety
Migration completed in 2 minutes (4x faster than 8-12 min estimate)