class Router {
constructor() {
this.routes = {
'/login': this.renderLogin,
'/register': this.renderRegister,
'/dashboard': this.renderDashboard,
'/projects': this.renderProjects,
'/projects/:id': this.renderProjectDetail,
'/buckets/:id': this.renderBucketDetail,
'/api-keys': this.renderApiKeys,
'/settings': this.renderSettings
};
window.addEventListener('hashchange', () => this.handleRoute());
this.handleRoute();
}
handleRoute() {
const path = window.location.hash.substring(1) || '/dashboard';
const route = Object.keys(this.routes).find(r => {
if (r.includes(':')) {
const basePath = r.split('/:')[0];
return path.startsWith(basePath);
}
return r === path;
});
if (route) {
this.routes[route]();
} else {
this.renderNotFound();
}
}
renderLogin() {
document.getElementById('auth-container').innerHTML = `
`;
}
renderRegister() {
document.getElementById('auth-container').innerHTML = `
`;
}
renderDashboard() {
document.getElementById('page-content').innerHTML = `
Dashboard
`;
}
renderProjects() {
document.getElementById('page-content').innerHTML = `
Projects
New Project
${store.state.projects.length > 0 ? `
${store.state.projects.map(project => `
| ${project.name} |
${project.buckets.length} buckets |
${new Date(project.createdAt).toLocaleDateString()} |
`).join('')}
` : `
`}
`;
}
renderProjectDetail() {
const projectId = window.location.hash.split('/')[2];
store.setCurrentProject(projectId);
document.getElementById('page-content').innerHTML = `
${store.state.currentProject?.name || 'Project'}
New Bucket
${store.state.currentProject?.buckets.length > 0 ? `
${store.state.currentProject.buckets.map(bucket => `
| ${bucket.name} |
${bucket.files.length} files |
${bucket.size} |
${new Date(bucket.createdAt).toLocaleDateString()} |
`).join('')}
` : `
`}
`;
}
renderBucketDetail() {
const bucketId = window.location.hash.split('/')[2];
store.setCurrentBucket(bucketId);
document.getElementById('page-content').innerHTML = `
${store.state.currentBucket?.name || 'Bucket'}
Upload File
${store.state.currentBucket?.files.length > 0 ? `
${store.state.currentBucket.files.map(file => `
|
${file.name}
|
${file.size} |
${file.type} |
${new Date(file.uploadedAt).toLocaleDateString()} |
|
`).join('')}
` : `
`}
`;
}
renderApiKeys() {
document.getElementById('page-content').innerHTML = `
API Keys
New API Key
${store.state.apiKeys.length > 0 ? `
${store.state.apiKeys.map(key => `
| ${key.name} |
${key.key.substring(0, 8)}... |
${new Date(key.createdAt).toLocaleDateString()} |
|
`).join('')}
` : `
`}
`;
}
renderSettings() {
document.getElementById('page-content').innerHTML = `
Settings
`;
}
renderNotFound() {
document.getElementById('page-content').innerHTML = `
`;
}
}
const router = new Router();
export default router;