| 1 |
/** |
| 2 |
* Admin Dashboard Entry Point |
| 3 |
* |
| 4 |
* Main entry point for React admin interface |
| 5 |
* |
| 6 |
* @package ThinkRank |
| 7 |
* @since 1.0.0 |
| 8 |
*/ |
| 9 |
|
| 10 |
import { createRoot } from '@wordpress/element'; |
| 11 |
import { __ } from '@wordpress/i18n'; |
| 12 |
import './stores'; |
| 13 |
import './styles/admin.scss'; |
| 14 |
import './styles/sitemap.xsl'; |
| 15 |
import './styles/sitemap-index.xsl'; |
| 16 |
import App from './components/App'; |
| 17 |
|
| 18 |
/** |
| 19 |
* Initialize admin interface |
| 20 |
*/ |
| 21 |
document.addEventListener('DOMContentLoaded', () => { |
| 22 |
// Find admin containers |
| 23 |
const containers = { |
| 24 |
dashboard: document.getElementById('thinkrank-dashboard'), |
| 25 |
'essential-seo': document.getElementById('thinkrank-essential-seo'), |
| 26 |
'ai-tools': document.getElementById('thinkrank-ai-tools'), |
| 27 |
settings: document.getElementById('thinkrank-settings'), |
| 28 |
credits: document.getElementById('thinkrank-credits'), |
| 29 |
analytics: document.getElementById('thinkrank-analytics'), |
| 30 |
}; |
| 31 |
|
| 32 |
// Render appropriate component based on container |
| 33 |
Object.entries(containers).forEach(([page, container]) => { |
| 34 |
if (container) { |
| 35 |
renderAdminPage(page, container); |
| 36 |
} |
| 37 |
}); |
| 38 |
}); |
| 39 |
|
| 40 |
/** |
| 41 |
* Render admin page component |
| 42 |
* |
| 43 |
* @param {string} page Page identifier |
| 44 |
* @param {Element} container DOM container |
| 45 |
*/ |
| 46 |
function renderAdminPage(page, container) { |
| 47 |
try { |
| 48 |
// Create root and render component using React 18 API |
| 49 |
const root = createRoot(container); |
| 50 |
root.render(<App page={page} />); |
| 51 |
} catch (error) { |
| 52 |
console.error('ThinkRank: Failed to render admin page', error); |
| 53 |
|
| 54 |
// Fallback error display |
| 55 |
container.innerHTML = ` |
| 56 |
<div class="notice notice-error"> |
| 57 |
<p>${__('Failed to load ThinkRank interface. Please refresh the page.', 'thinkrank')}</p> |
| 58 |
</div> |
| 59 |
`; |
| 60 |
} |
| 61 |
} |
| 62 |
|