121 lines
3.7 KiB
JavaScript
121 lines
3.7 KiB
JavaScript
// app/static/vendor/js/init-alpine.js
|
|
/**
|
|
* Alpine.js initialization for vendor pages
|
|
* Provides common data and methods for all vendor pages
|
|
*/
|
|
|
|
// ✅ Use centralized logger
|
|
const vendorLog = window.LogConfig.log;
|
|
|
|
console.log('[VENDOR INIT-ALPINE] Loading...');
|
|
|
|
function data() {
|
|
console.log('[VENDOR INIT-ALPINE] data() function called');
|
|
return {
|
|
dark: false,
|
|
isSideMenuOpen: false,
|
|
isNotificationsMenuOpen: false,
|
|
isProfileMenuOpen: false,
|
|
currentPage: '',
|
|
currentUser: {},
|
|
vendor: null,
|
|
vendorCode: null,
|
|
|
|
init() {
|
|
// Set current page from URL
|
|
const path = window.location.pathname;
|
|
const segments = path.split('/').filter(Boolean);
|
|
this.currentPage = segments[segments.length - 1] || 'dashboard';
|
|
|
|
// Get vendor code from URL
|
|
if (segments[0] === 'vendor' && segments[1]) {
|
|
this.vendorCode = segments[1];
|
|
}
|
|
|
|
// Load user from localStorage
|
|
const user = localStorage.getItem('currentUser');
|
|
if (user) {
|
|
this.currentUser = JSON.parse(user);
|
|
}
|
|
|
|
// Load theme preference
|
|
const theme = localStorage.getItem('theme');
|
|
if (theme === 'dark') {
|
|
this.dark = true;
|
|
}
|
|
|
|
// Load vendor info
|
|
this.loadVendorInfo();
|
|
},
|
|
|
|
async loadVendorInfo() {
|
|
if (!this.vendorCode) return;
|
|
|
|
try {
|
|
// apiClient prepends /api/v1, so /vendor/{code} → /api/v1/vendor/{code}
|
|
const response = await apiClient.get(`/vendor/${this.vendorCode}`);
|
|
this.vendor = response;
|
|
vendorLog.debug('Vendor info loaded', this.vendor);
|
|
} catch (error) {
|
|
vendorLog.error('Failed to load vendor info', error);
|
|
}
|
|
},
|
|
|
|
toggleSideMenu() {
|
|
this.isSideMenuOpen = !this.isSideMenuOpen;
|
|
},
|
|
|
|
closeSideMenu() {
|
|
this.isSideMenuOpen = false;
|
|
},
|
|
|
|
toggleNotificationsMenu() {
|
|
this.isNotificationsMenuOpen = !this.isNotificationsMenuOpen;
|
|
if (this.isNotificationsMenuOpen) {
|
|
this.isProfileMenuOpen = false;
|
|
}
|
|
},
|
|
|
|
closeNotificationsMenu() {
|
|
this.isNotificationsMenuOpen = false;
|
|
},
|
|
|
|
toggleProfileMenu() {
|
|
this.isProfileMenuOpen = !this.isProfileMenuOpen;
|
|
if (this.isProfileMenuOpen) {
|
|
this.isNotificationsMenuOpen = false;
|
|
}
|
|
},
|
|
|
|
closeProfileMenu() {
|
|
this.isProfileMenuOpen = false;
|
|
},
|
|
|
|
toggleTheme() {
|
|
this.dark = !this.dark;
|
|
localStorage.setItem('theme', this.dark ? 'dark' : 'light');
|
|
},
|
|
|
|
async handleLogout() {
|
|
console.log('🚪 Logging out vendor user...');
|
|
|
|
try {
|
|
// Call logout API
|
|
await apiClient.post('/vendor/auth/logout');
|
|
console.log('✅ Logout API called successfully');
|
|
} catch (error) {
|
|
console.error('⚠️ Logout API error (continuing anyway):', error);
|
|
} finally {
|
|
// Clear all tokens and data
|
|
console.log('🧹 Clearing tokens...');
|
|
localStorage.removeItem('vendor_token');
|
|
localStorage.removeItem('currentUser');
|
|
localStorage.removeItem('vendorCode');
|
|
localStorage.clear(); // Clear everything to be safe
|
|
|
|
console.log('🔄 Redirecting to login...');
|
|
window.location.href = `/vendor/${this.vendorCode}/login`;
|
|
}
|
|
}
|
|
};
|
|
} |