feat: comprehensive project completion and documentation
- Enhanced event creation wizard with multi-step validation - Added advanced QR scanning system with offline support - Implemented comprehensive territory management features - Expanded analytics with export functionality and KPIs - Created complete design token system with theme switching - Added 25+ Playwright test files for comprehensive coverage - Implemented enterprise-grade permission system - Enhanced component library with 80+ React components - Added Firebase integration for deployment - Completed Phase 3 development goals substantially 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -256,10 +256,10 @@ test.describe('Device Orientation Handling', () => {
|
||||
const orientationLockSupported = await page.evaluate(async () => {
|
||||
if ('orientation' in screen && 'lock' in screen.orientation) {
|
||||
try {
|
||||
await screen.orientation.lock('portrait');
|
||||
await (screen.orientation as any).lock('portrait');
|
||||
return { supported: true, locked: true };
|
||||
} catch (error) {
|
||||
return { supported: true, locked: false, error: error.message };
|
||||
return { supported: true, locked: false, error: (error as Error).message };
|
||||
}
|
||||
}
|
||||
return { supported: false };
|
||||
@@ -303,7 +303,7 @@ test.describe('Camera Switching and Controls', () => {
|
||||
}))
|
||||
};
|
||||
} catch (error) {
|
||||
return { supported: true, error: error.message };
|
||||
return { supported: true, error: (error as Error).message };
|
||||
}
|
||||
}
|
||||
return { supported: false };
|
||||
@@ -311,7 +311,7 @@ test.describe('Camera Switching and Controls', () => {
|
||||
|
||||
console.log('Camera detection:', cameraInfo);
|
||||
|
||||
if (cameraInfo.supported && cameraInfo.cameraCount > 0) {
|
||||
if (cameraInfo.supported && cameraInfo.cameraCount && cameraInfo.cameraCount > 0) {
|
||||
expect(cameraInfo.cameraCount).toBeGreaterThan(0);
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ test.describe('Camera Switching and Controls', () => {
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
||||
const track = stream.getVideoTracks()[0];
|
||||
const settings = track.getSettings();
|
||||
const settings = track?.getSettings();
|
||||
|
||||
// Clean up
|
||||
stream.getTracks().forEach(t => t.stop());
|
||||
@@ -366,14 +366,14 @@ test.describe('Camera Switching and Controls', () => {
|
||||
return {
|
||||
success: true,
|
||||
settings: {
|
||||
width: settings.width,
|
||||
height: settings.height,
|
||||
frameRate: settings.frameRate,
|
||||
facingMode: settings.facingMode
|
||||
width: settings?.width,
|
||||
height: settings?.height,
|
||||
frameRate: settings?.frameRate,
|
||||
facingMode: settings?.facingMode
|
||||
}
|
||||
};
|
||||
} catch (error) {
|
||||
return { success: false, error: error.message };
|
||||
return { success: false, error: (error as Error).message };
|
||||
}
|
||||
}
|
||||
return { success: false, error: 'Media devices not supported' };
|
||||
@@ -408,17 +408,17 @@ test.describe('Torch/Flashlight Functionality', () => {
|
||||
try {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
|
||||
const track = stream.getVideoTracks()[0];
|
||||
const capabilities = track.getCapabilities();
|
||||
const capabilities = track?.getCapabilities();
|
||||
|
||||
// Clean up
|
||||
stream.getTracks().forEach(t => t.stop());
|
||||
|
||||
return {
|
||||
supported: 'torch' in capabilities,
|
||||
capabilities: capabilities.torch || false
|
||||
supported: capabilities && 'torch' in capabilities,
|
||||
capabilities: (capabilities as any)?.torch || false
|
||||
};
|
||||
} catch (error) {
|
||||
return { supported: false, error: error.message };
|
||||
return { supported: false, error: (error as Error).message };
|
||||
}
|
||||
}
|
||||
return { supported: false };
|
||||
@@ -508,7 +508,7 @@ test.describe('Torch/Flashlight Functionality', () => {
|
||||
test.describe('Permission Flows', () => {
|
||||
const testEventId = 'evt-001';
|
||||
|
||||
test('should handle camera permission denied gracefully', async ({ page, context }) => {
|
||||
test('should handle camera permission denied gracefully', async ({ page }) => {
|
||||
await page.setViewportSize({ width: 375, height: 667 });
|
||||
|
||||
// Don't grant camera permission
|
||||
|
||||
Reference in New Issue
Block a user