feat: add advanced analytics and territory management system

- Add comprehensive analytics components with export functionality
- Implement territory management with manager performance tracking
- Add seatmap components for venue layout management
- Create customer management features with modal interface
- Add advanced hooks for dashboard flags and territory data
- Implement seat selection and venue management utilities
- Add type definitions for ticketing and seatmap systems

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-08-26 09:25:10 -06:00
parent d5c3953888
commit aa81eb5adb
438 changed files with 90509 additions and 2787 deletions

82
test-tickets-tab-fix.cjs Normal file
View File

@@ -0,0 +1,82 @@
/**
* Test to verify TicketsTab component fix
*/
const { test, expect } = require('@playwright/test');
test('Verify TicketsTab component renders after fix', async ({ page }) => {
const consoleMessages = [];
// Capture console messages
page.on('console', msg => {
const text = msg.text();
consoleMessages.push(text);
if (text.includes('TICKETS TAB') || text.includes('TICKETING ACCESS TAB')) {
console.log(`🔍 [COMPONENT] ${text}`);
}
});
console.log('🚀 Testing TicketsTab fix...');
// Navigate to login page and login manually
await page.goto('http://localhost:3000/login');
await page.waitForLoadState('networkidle');
// Fill login form
await page.fill('input[type="email"]', 'tyler@zest.is');
await page.fill('input[type="password"]', 'Test123!');
await page.click('button[type="submit"]');
// Wait for redirect
try {
await page.waitForURL('**/dashboard', { timeout: 10000 });
console.log('✅ Successfully logged in');
} catch (error) {
console.log('❌ Login failed or timeout');
return;
}
// Find and navigate to event management
await page.waitForTimeout(2000);
const eventLinks = await page.locator('a[href*="/events/"][href*="/manage"]').all();
if (eventLinks.length === 0) {
console.log('❌ No events found to test');
return;
}
const eventHref = await eventLinks[0].getAttribute('href');
console.log(`🎯 Navigating to: ${eventHref}`);
await page.goto(`http://localhost:3000${eventHref}`);
await page.waitForLoadState('networkidle');
await page.waitForTimeout(3000);
// Check for TicketsTab console messages
const ticketsTabMessages = consoleMessages.filter(msg => msg.includes('TICKETS TAB'));
const ticketingAccessMessages = consoleMessages.filter(msg => msg.includes('TICKETING ACCESS TAB'));
console.log('\n📊 RESULTS:');
console.log(`TicketingAccessTab messages: ${ticketingAccessMessages.length}`);
console.log(`TicketsTab messages: ${ticketsTabMessages.length}`);
if (ticketsTabMessages.length > 0) {
console.log('✅ SUCCESS: TicketsTab is now rendering!');
ticketsTabMessages.forEach(msg => console.log(` - ${msg}`));
} else {
console.log('❌ FAILED: TicketsTab still not rendering');
}
// Look for the ticket creation button
const createButton = page.locator('text="Add Ticket Type"').or(page.locator('text="Create Your First Ticket Type"'));
const buttonVisible = await createButton.isVisible();
console.log(`\n🔘 Ticket creation button visible: ${buttonVisible}`);
if (buttonVisible) {
console.log('🎉 SUCCESS: Ticket creation button is now visible!');
}
await page.waitForTimeout(3000);
});