Example Extensions: create build environment
This commit is contained in:
parent
7ace7b108a
commit
8ff24a9a7e
|
@ -33,7 +33,7 @@ import ReportError from 'analytics/components/report-error';
|
||||||
import { searchItemsByString } from 'wc-api/items/utils';
|
import { searchItemsByString } from 'wc-api/items/utils';
|
||||||
import withSelect from 'wc-api/with-select';
|
import withSelect from 'wc-api/with-select';
|
||||||
|
|
||||||
const REPORTS_FILTER = 'woocommerce-reports-list';
|
const REPORTS_FILTER = 'woocommerce_admin_reports_list';
|
||||||
|
|
||||||
const getReports = () => {
|
const getReports = () => {
|
||||||
const reports = [
|
const reports = [
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# WooCommerce Admin Extension Examples
|
||||||
|
|
||||||
|
Examples for extending WooCommerce Admin
|
||||||
|
|
||||||
|
## Directions
|
||||||
|
|
||||||
|
Install dependencies, if you haven't already.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the example extension by running the npm script and passing the example name.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run example -- --ext=<example>
|
||||||
|
```
|
||||||
|
|
||||||
|
Go to your Wordpress installation's plugins page and activate the plugin. WooCommerce Analytics reports will now reflect the changes made by the example extension.
|
||||||
|
|
||||||
|
You can make changes to Javascript and PHP files in the example and see changes reflected upon refresh.
|
||||||
|
|
||||||
|
## Example Extensions
|
||||||
|
|
||||||
|
`add-report` - Create a "Hello World" report page.
|
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
|
import { addFilter } from '@wordpress/hooks';
|
||||||
|
import { Fragment } from '@wordpress/element';
|
||||||
|
import { __ } from '@wordpress/i18n';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WooCommerce dependencies
|
||||||
|
*/
|
||||||
|
import { ReportFilters } from '@woocommerce/components';
|
||||||
|
|
||||||
|
const Report = ( { path, query } ) => {
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<ReportFilters
|
||||||
|
query={ query }
|
||||||
|
path={ path }
|
||||||
|
filters={ [] }
|
||||||
|
advancedFilters={ {} }
|
||||||
|
/>
|
||||||
|
</Fragment>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the 'woocommerce_admin_reports_list' filter to add a report page.
|
||||||
|
*/
|
||||||
|
addFilter( 'woocommerce_admin_reports_list', 'plugin-domain', reports => {
|
||||||
|
return [
|
||||||
|
...reports,
|
||||||
|
{
|
||||||
|
report: 'example',
|
||||||
|
title: __( 'Example', 'plugin-domain' ),
|
||||||
|
component: Report,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
} );
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Plugin Name: WooCommerce Admin Add Report Example
|
||||||
|
*
|
||||||
|
* @package WC_Admin
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the JS.
|
||||||
|
*/
|
||||||
|
function add_report_register_script() {
|
||||||
|
|
||||||
|
if ( ! class_exists( 'WC_Admin_Loader' ) || ! WC_Admin_Loader::is_admin_page() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wp_register_script(
|
||||||
|
'add-report',
|
||||||
|
plugins_url( '/dist/index.js', __FILE__ ),
|
||||||
|
array(
|
||||||
|
'wp-hooks',
|
||||||
|
'wp-element',
|
||||||
|
'wp-i18n',
|
||||||
|
'wc-components',
|
||||||
|
),
|
||||||
|
filemtime( dirname( __FILE__ ) . '/dist/index.js' ),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
wp_enqueue_script( 'add-report' );
|
||||||
|
}
|
||||||
|
add_action( 'admin_enqueue_scripts', 'add_report_register_script' );
|
|
@ -0,0 +1,104 @@
|
||||||
|
/** @format */
|
||||||
|
/**
|
||||||
|
* External dependencies
|
||||||
|
*/
|
||||||
|
const path = require( 'path' );
|
||||||
|
const CopyWebpackPlugin = require( 'copy-webpack-plugin' );
|
||||||
|
const fs = require( 'fs' );
|
||||||
|
|
||||||
|
const extArg = process.argv.find( arg => arg.startsWith( '--ext=' ) );
|
||||||
|
|
||||||
|
if ( ! extArg ) {
|
||||||
|
throw new Error( 'Please provide an extension.' );
|
||||||
|
}
|
||||||
|
|
||||||
|
const extension = extArg.slice( 6 );
|
||||||
|
const extensionPath = path.join( __dirname, `${ extension }/js/index.js` );
|
||||||
|
|
||||||
|
if ( ! fs.existsSync( extensionPath ) ) {
|
||||||
|
throw new Error( 'Extension example does not exist.' );
|
||||||
|
}
|
||||||
|
|
||||||
|
const externals = {
|
||||||
|
'@wordpress/api-fetch': 'window.wp.apiFetch',
|
||||||
|
'@wordpress/blocks': 'window.wp.blocks',
|
||||||
|
'@wordpress/components': 'window.wp.components',
|
||||||
|
'@wordpress/compose': 'window.wp.compose',
|
||||||
|
'@wordpress/data': 'window.wp.data',
|
||||||
|
'@wordpress/editor': 'window.wp.editor',
|
||||||
|
'@wordpress/element': 'window.wp.element',
|
||||||
|
'@wordpress/hooks': 'window.wp.hooks',
|
||||||
|
'@wordpress/html-entities': 'window.wp.htmlEntities',
|
||||||
|
'@wordpress/i18n': 'window.wp.i18n',
|
||||||
|
'@wordpress/keycodes': 'window.wp.keycodes',
|
||||||
|
tinymce: 'tinymce',
|
||||||
|
moment: 'moment',
|
||||||
|
react: 'React',
|
||||||
|
lodash: 'lodash',
|
||||||
|
'react-dom': 'ReactDOM',
|
||||||
|
'@woocommerce/components': 'window.wc.components',
|
||||||
|
'@woocommerce/csv-export': 'window.wc.csvExport',
|
||||||
|
'@woocommerce/currency': 'window.wc.currency',
|
||||||
|
'@woocommerce/date': 'window.wc.date',
|
||||||
|
'@woocommerce/navigation': 'window.wc.navigation',
|
||||||
|
'@woocommerce/number': 'window.wc.number',
|
||||||
|
};
|
||||||
|
|
||||||
|
const webpackConfig = {
|
||||||
|
mode: 'development',
|
||||||
|
entry: {
|
||||||
|
[ extension ]: extensionPath,
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
filename: '[name]/dist/index.js',
|
||||||
|
path: path.resolve( __dirname ),
|
||||||
|
},
|
||||||
|
externals,
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
parser: {
|
||||||
|
amd: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.jsx?$/,
|
||||||
|
loader: 'babel-loader',
|
||||||
|
exclude: /node_modules/,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'babel-loader',
|
||||||
|
options: {
|
||||||
|
presets: [
|
||||||
|
[ '@babel/preset-env', { loose: true, modules: 'commonjs' } ],
|
||||||
|
],
|
||||||
|
plugins: [ 'transform-es2015-template-literals' ],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: [ '.json', '.js', '.jsx' ],
|
||||||
|
modules: [
|
||||||
|
'node_modules',
|
||||||
|
],
|
||||||
|
alias: {
|
||||||
|
'gutenberg-components': path.resolve( __dirname, 'node_modules/@wordpress/components/src' ),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new CopyWebpackPlugin( [
|
||||||
|
{
|
||||||
|
from: path.join( __dirname, `${ extension }/` ),
|
||||||
|
to: path.resolve( __dirname, `../../../../${ extension }/` ),
|
||||||
|
},
|
||||||
|
] ),
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
webpackConfig.devtool = 'source-map';
|
||||||
|
|
||||||
|
module.exports = webpackConfig;
|
|
@ -54,7 +54,8 @@
|
||||||
"test": "wp-scripts test-unit-js --config tests/js/jest.config.json",
|
"test": "wp-scripts test-unit-js --config tests/js/jest.config.json",
|
||||||
"test:help": "wp-scripts test-unit-js --help",
|
"test:help": "wp-scripts test-unit-js --help",
|
||||||
"test:update-snapshots": "jest --updateSnapshot --config tests/js/jest.config.json",
|
"test:update-snapshots": "jest --updateSnapshot --config tests/js/jest.config.json",
|
||||||
"test:watch": "npm run test -- --watch"
|
"test:watch": "npm run test -- --watch",
|
||||||
|
"example": "webpack --config docs/examples/extensions/examples.config.js --watch"
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
"hooks": {
|
"hooks": {
|
||||||
|
|
Loading…
Reference in New Issue