Files
WooNooW/examples/example-addon.php
dwindown 232059e928 feat: Complete Dashboard API Integration with Analytics Controller
 Features:
- Implemented API integration for all 7 dashboard pages
- Added Analytics REST API controller with 7 endpoints
- Full loading and error states with retry functionality
- Seamless dummy data toggle for development

📊 Dashboard Pages:
- Customers Analytics (complete)
- Revenue Analytics (complete)
- Orders Analytics (complete)
- Products Analytics (complete)
- Coupons Analytics (complete)
- Taxes Analytics (complete)
- Dashboard Overview (complete)

🔌 Backend:
- Created AnalyticsController.php with REST endpoints
- All endpoints return 501 (Not Implemented) for now
- Ready for HPOS-based implementation
- Proper permission checks

🎨 Frontend:
- useAnalytics hook for data fetching
- React Query caching
- ErrorCard with retry functionality
- TypeScript type safety
- Zero build errors

📝 Documentation:
- DASHBOARD_API_IMPLEMENTATION.md guide
- Backend implementation roadmap
- Testing strategy

🔧 Build:
- All pages compile successfully
- Production-ready with dummy data fallback
- Zero TypeScript errors
2025-11-04 11:19:00 +07:00

148 lines
4.5 KiB
PHP

<?php
/**
* Plugin Name: WooNooW Example Addon
* Plugin URI: https://woonoow.com
* Description: Example addon demonstrating WooNooW addon injection system
* Version: 1.0.0
* Author: WooNooW Team
* Author URI: https://woonoow.com
* Requires at least: 6.0
* Requires PHP: 8.0
* Text Domain: wnw-example-addon
* Domain Path: /languages
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Example Addon Class
*
* This is a complete example showing how to integrate with WooNooW.
* Copy this file to wp-content/plugins/ and activate to see it in action.
*/
class WNW_Example_Addon {
/**
* Initialize the addon
*/
public static function init() {
// Register addon with WooNooW
add_filter('woonoow/addon_registry', [__CLASS__, 'register_addon']);
// Register SPA routes
add_filter('woonoow/spa_routes', [__CLASS__, 'register_routes']);
// Add navigation items
add_filter('woonoow/nav_tree', [__CLASS__, 'register_navigation']);
// Register REST API endpoints
add_action('rest_api_init', [__CLASS__, 'register_rest_routes']);
}
/**
* Register addon with WooNooW
*/
public static function register_addon($addons) {
$addons['example-addon'] = [
'id' => 'example-addon',
'name' => __('Example Addon', 'wnw-example-addon'),
'version' => '1.0.0',
'author' => 'WooNooW Team',
'description' => __('Example addon for testing WooNooW integration', 'wnw-example-addon'),
'spa_bundle' => '', // Not needed for this example
'dependencies' => [
'woocommerce' => '8.0',
'wordpress' => '6.0',
],
];
return $addons;
}
/**
* Register SPA routes
*/
public static function register_routes($routes) {
$base_url = plugin_dir_url(__FILE__);
// Main page
$routes[] = [
'path' => '/example',
'component_url' => $base_url . 'dist/ExamplePage.js',
'capability' => 'manage_woocommerce',
'title' => __('Example Addon', 'wnw-example-addon'),
];
// Detail page
$routes[] = [
'path' => '/example/:id',
'component_url' => $base_url . 'dist/ExampleDetail.js',
'capability' => 'manage_woocommerce',
'title' => __('Example Detail', 'wnw-example-addon'),
];
return $routes;
}
/**
* Register navigation items
*/
public static function register_navigation($tree) {
// Add main menu item
$tree[] = [
'key' => 'example',
'label' => __('Example', 'wnw-example-addon'),
'path' => '/example',
'icon' => 'puzzle', // lucide-react icon
'children' => [
[
'label' => __('All Items', 'wnw-example-addon'),
'mode' => 'spa',
'path' => '/example',
],
[
'label' => __('Settings', 'wnw-example-addon'),
'mode' => 'spa',
'path' => '/example/settings',
],
],
];
return $tree;
}
/**
* Register REST API endpoints
*/
public static function register_rest_routes() {
register_rest_route('woonoow/v1', '/example', [
'methods' => 'GET',
'callback' => [__CLASS__, 'get_example_data'],
'permission_callback' => function() {
return current_user_can('manage_woocommerce');
},
]);
}
/**
* Get example data (REST endpoint)
*/
public static function get_example_data($request) {
return rest_ensure_response([
'success' => true,
'message' => __('Example addon is working!', 'wnw-example-addon'),
'data' => [
'items' => [
['id' => 1, 'name' => 'Item 1', 'status' => 'active'],
['id' => 2, 'name' => 'Item 2', 'status' => 'active'],
['id' => 3, 'name' => 'Item 3', 'status' => 'inactive'],
],
],
]);
}
}
// Initialize the addon
add_action('plugins_loaded', ['WNW_Example_Addon', 'init'], 25);