fix: Implement comprehensive edit event button functionality and resolve authentication issues

Major fixes and improvements:
- Fixed edit event button functionality with proper event handlers and DOM ready state checking
- Added status column to tickets table via Supabase migration to resolve 500 API errors
- Updated stats API to correctly calculate revenue from decimal price values
- Resolved authentication redirect loops by fixing cookie configuration for Docker environment
- Fixed Permissions-Policy header syntax errors
- Added comprehensive debugging and error handling for event management
- Implemented modal-based event editing with form validation and API integration
- Enhanced event data loading with proper error handling and user feedback

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-14 18:49:49 -06:00
parent b07ee8cdff
commit dbf4b11e81
216 changed files with 15891 additions and 468 deletions

122
inspect-dashboard.cjs Normal file
View File

@@ -0,0 +1,122 @@
const playwright = require('playwright');
(async () => {
const browser = await playwright.chromium.launch();
const page = await browser.newPage();
try {
console.log('=== DASHBOARD INSPECTION ===');
// Login first
await page.goto('http://localhost:3000/login-new');
await page.fill('input[type="email"], input[name="email"]', 'tmartinez@gmail.com');
await page.fill('input[type="password"], input[name="password"]', 'Skittles@420');
await page.click('button[type="submit"], input[type="submit"]');
await page.waitForTimeout(3000);
console.log('1. Inspecting dashboard navigation...');
// Look for any dropdown triggers or menu buttons
const menuTriggers = await page.locator('button, [role="button"], .dropdown-trigger, [data-dropdown], [aria-haspopup]').all();
console.log(` Found ${menuTriggers.length} potential menu triggers`);
for (let i = 0; i < Math.min(menuTriggers.length, 10); i++) {
const text = await menuTriggers[i].textContent();
const classes = await menuTriggers[i].getAttribute('class');
const id = await menuTriggers[i].getAttribute('id');
console.log(` ${i + 1}. Text: "${text?.trim()}" | ID: ${id} | Classes: ${classes}`);
}
// Check for logout button in DOM but hidden
const logoutButton = page.locator('#logout-btn');
const logoutExists = await logoutButton.count();
console.log(`\\n2. Logout button exists: ${logoutExists > 0}`);
if (logoutExists > 0) {
const isVisible = await logoutButton.isVisible();
const isEnabled = await logoutButton.isEnabled();
const boundingBox = await logoutButton.boundingBox();
console.log(` Is visible: ${isVisible}`);
console.log(` Is enabled: ${isEnabled}`);
console.log(` Bounding box: ${boundingBox ? JSON.stringify(boundingBox) : 'null'}`);
// Get parent elements to understand structure
const parent = logoutButton.locator('..');
const parentClasses = await parent.getAttribute('class');
console.log(` Parent classes: ${parentClasses}`);
// Try to find what might be hiding it
const computedStyle = await logoutButton.evaluate(el => {
const style = window.getComputedStyle(el);
return {
display: style.display,
visibility: style.visibility,
opacity: style.opacity,
position: style.position,
zIndex: style.zIndex,
transform: style.transform
};
});
console.log(` Computed style:`, computedStyle);
}
// Look for user profile/avatar areas
console.log('\\n3. Looking for user profile areas...');
const profileSelectors = [
'.user-profile',
'.user-avatar',
'.profile-dropdown',
'[data-testid*="user"]',
'[data-testid*="profile"]',
'img[alt*="avatar"]',
'img[alt*="profile"]'
];
for (const selector of profileSelectors) {
const elements = await page.locator(selector).count();
if (elements > 0) {
console.log(` Found ${elements} elements matching: ${selector}`);
}
}
// Try clicking on different areas that might trigger dropdown
console.log('\\n4. Testing potential dropdown triggers...');
// Look for elements with user info or initials
const userElements = await page.locator('*').evaluateAll(elements => {
return elements.filter(el => {
const text = el.textContent?.trim() || '';
return text.includes('@') || text.includes('Tyler') || text.includes('martinez') ||
text.length === 2 && text.match(/^[A-Z]{2}$/); // Initials
}).map(el => ({
tagName: el.tagName,
text: el.textContent?.trim(),
className: el.className,
id: el.id
}));
});
console.log(' Elements that might be user-related:');
userElements.forEach((el, i) => {
console.log(` ${i + 1}. ${el.tagName}: "${el.text}" | ID: ${el.id} | Classes: ${el.className}`);
});
// Try to force click the logout button
console.log('\\n5. Attempting to force click logout...');
if (logoutExists > 0) {
try {
await logoutButton.click({ force: true, timeout: 2000 });
await page.waitForTimeout(2000);
console.log(` Force click attempted, current URL: ${page.url()}`);
} catch (error) {
console.log(` Force click failed: ${error.message}`);
}
}
} catch (error) {
console.error('Inspection failed:', error.message);
} finally {
await browser.close();
}
})();