| 1 |
/** |
| 2 |
* Register every ./blocks/* folder via require.context. |
| 3 |
* Imported as a module so filters in index.js install before first registerBlockType. |
| 4 |
* BLOCK_ORDER sets the curated "New Fields" inserter order. |
| 5 |
*/ |
| 6 |
import { registerBlockType } from '@wordpress/blocks'; |
| 7 |
import nullSave from './lib/null-save'; |
| 8 |
|
| 9 |
const blockMeta = require.context( './blocks', true, /\/block\.json$/ ); |
| 10 |
const blockEdit = require.context( './blocks', true, /\/edit\.js$/ ); |
| 11 |
const blockSave = require.context( './blocks', true, /\/save\.js$/ ); |
| 12 |
|
| 13 |
const BLOCK_ORDER = [ |
| 14 |
'field-input', 'field-textarea', 'field-select', 'field-select-multiple', 'field-select2', |
| 15 |
'field-select2-multiple', 'field-select-country', 'field-select-timezone', 'field-select-currency', 'field-select-cpt', |
| 16 |
'field-select-taxonomy', 'field-checkbox', 'field-checkbox-toa', 'field-radio', 'field-number', |
| 17 |
'field-phone', 'field-upload', 'field-avatar', 'field-colorpicker', 'field-datepicker', |
| 18 |
'field-timepicker', 'field-wysiwyg', 'field-html', 'field-input-hidden', 'field-language', |
| 19 |
'field-input-url', 'field-validation', 'field-gdpr-checkbox', 'field-gdpr-delete', 'field-gdpr-communication-preferences', |
| 20 |
'field-mailchimp-subscribe', 'field-mailpoet-subscribe', 'field-campaign-monitor-subscribe', 'field-woo-billing-address', 'field-woo-shipping-address', |
| 21 |
'field-pms-subscription-plans', 'field-pms-billing-fields', |
| 22 |
'field-international-telephone-input', 'field-map', 'field-additional-map', 'field-email', 'field-honeypot', |
| 23 |
'field-default-aim', 'field-default-yim', 'field-default-jabber', 'field-default-blog-details', 'field-recaptcha', |
| 24 |
'field-turnstile', 'field-heading', 'field-repeater', 'field-default-username', 'field-default-email', |
| 25 |
'field-default-password', 'field-default-first-name', 'field-default-last-name', 'field-default-nickname', 'field-default-biographical-info', |
| 26 |
'field-default-display-name', 'field-default-website', 'field-default-name-heading', 'field-default-contact-info-heading', 'field-default-about-yourself-heading', |
| 27 |
'field-default-repeat-password', 'field-email-confirmation', 'field-select-user-role', 'msf-step-break', 'ffc-columns', |
| 28 |
'progress-bar', |
| 29 |
]; |
| 30 |
|
| 31 |
const dirOf = ( key ) => key.replace( /^\.\//, '' ).split( '/' )[ 0 ]; |
| 32 |
const def = ( mod ) => ( mod && mod.default !== undefined ? mod.default : mod ); |
| 33 |
|
| 34 |
const orderOf = ( dir ) => { |
| 35 |
const i = BLOCK_ORDER.indexOf( dir ); |
| 36 |
return i === -1 ? BLOCK_ORDER.length : i; |
| 37 |
}; |
| 38 |
|
| 39 |
const saveKeys = blockSave.keys(); |
| 40 |
|
| 41 |
blockMeta |
| 42 |
.keys() |
| 43 |
.sort( ( a, b ) => orderOf( dirOf( a ) ) - orderOf( dirOf( b ) ) ) |
| 44 |
.forEach( ( metaKey ) => { |
| 45 |
const dir = dirOf( metaKey ); |
| 46 |
const metadata = def( blockMeta( metaKey ) ); |
| 47 |
const edit = def( blockEdit( `./${ dir }/edit.js` ) ); |
| 48 |
const saveKey = `./${ dir }/save.js`; |
| 49 |
const save = saveKeys.includes( saveKey ) ? def( blockSave( saveKey ) ) : nullSave; |
| 50 |
|
| 51 |
registerBlockType( metadata.name, { ...metadata, edit, save } ); |
| 52 |
} ); |
| 53 |
|