fix: prevent asset conflicts between React and Grid.js versions

Add coexistence checks to all enqueue methods to prevent loading
both React and Grid.js assets simultaneously.

Changes:
- ReactAdmin.php: Only enqueue React assets when ?react=1
- Init.php: Skip Grid.js when React active on admin pages
- Form.php, Coupon.php, Access.php: Restore classic assets when ?react=0
- Customer.php, Product.php, License.php: Add coexistence checks

Now the toggle between Classic and React versions works correctly.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
dwindown
2026-04-18 17:02:14 +07:00
parent bd9cdac02e
commit e8fbfb14c1
74973 changed files with 6658406 additions and 71 deletions

View File

@@ -0,0 +1,101 @@
/**
* Internal dependencies
*/
const {
TRANSLATION_FUNCTIONS,
getTextContentFromNode,
getTranslateFunctionName,
getTranslateFunctionArgs,
} = require( '../utils' );
const EN_DASH = '';
const HYPHEN_IN_RANGE = /(\d\s+-\s+\d)|(\d-\d)/g;
function replaceHyphenWithEnDash( string ) {
if ( string.match( HYPHEN_IN_RANGE ) ) {
return string.replace( '-', EN_DASH );
}
return string;
}
function makeFixerFunction( arg ) {
return ( fixer ) => {
switch ( arg.type ) {
case 'TemplateLiteral':
return arg.quasis.reduce( ( fixes, quasi ) => {
if (
'TemplateElement' === quasi.type &&
quasi.value.raw.match( HYPHEN_IN_RANGE )
) {
fixes.push(
fixer.replaceTextRange(
[ quasi.start, quasi.end ],
replaceHyphenWithEnDash( quasi.value.raw )
)
);
}
return fixes;
}, [] );
case 'Literal':
return [
fixer.replaceText(
arg,
replaceHyphenWithEnDash( arg.raw )
),
];
case 'BinaryExpression':
return [
...makeFixerFunction( arg.left )( fixer ),
...makeFixerFunction( arg.right )( fixer ),
];
}
};
}
module.exports = {
meta: {
type: 'problem',
schema: [],
messages: {
foundHyphen:
'Use dashes (en or em) in place of hyphens for numeric ranges.',
},
fixable: 'code',
},
create( context ) {
return {
CallExpression( node ) {
const { callee, arguments: args } = node;
const functionName = getTranslateFunctionName( callee );
if ( ! TRANSLATION_FUNCTIONS.has( functionName ) ) {
return;
}
const candidates = getTranslateFunctionArgs(
functionName,
args
);
for ( const arg of candidates ) {
const argumentString = getTextContentFromNode( arg );
if (
! argumentString ||
! argumentString.match( HYPHEN_IN_RANGE )
) {
continue;
}
context.report( {
node,
messageId: 'foundHyphen',
fix: makeFixerFunction( arg ),
} );
}
},
};
},
};