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,52 @@
import { createElement } from "react";
/**
* External dependencies
*/
// eslint-disable-next-line no-restricted-imports
import * as Ariakit from '@ariakit/react';
/**
* WordPress dependencies
*/
import { forwardRef, useContext } from '@wordpress/element';
import warning from '@wordpress/warning';
/**
* Internal dependencies
*/
import ToolbarContext from '../toolbar-context';
function ToolbarItem({
children,
as: Component,
...props
}, ref) {
const accessibleToolbarStore = useContext(ToolbarContext);
const isRenderProp = typeof children === 'function';
if (!isRenderProp && !Component) {
typeof SCRIPT_DEBUG !== "undefined" && SCRIPT_DEBUG === true ? warning('`ToolbarItem` is a generic headless component. You must pass either a `children` prop as a function or an `as` prop as a component. ' + 'See https://developer.wordpress.org/block-editor/components/toolbar-item/') : void 0;
return null;
}
const allProps = {
...props,
ref,
'data-toolbar-item': true
};
if (!accessibleToolbarStore) {
if (Component) {
return createElement(Component, {
...allProps
}, children);
}
if (!isRenderProp) {
return null;
}
return children(allProps);
}
const render = isRenderProp ? children : Component && createElement(Component, null, children);
return createElement(Ariakit.ToolbarItem, {
...allProps,
store: accessibleToolbarStore,
render: render
});
}
export default forwardRef(ToolbarItem);
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["Ariakit","forwardRef","useContext","warning","ToolbarContext","ToolbarItem","children","as","Component","props","ref","accessibleToolbarStore","isRenderProp","SCRIPT_DEBUG","allProps","createElement","render","store"],"sources":["@wordpress/components/src/toolbar/toolbar-item/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\n// eslint-disable-next-line no-restricted-imports\nimport * as Ariakit from '@ariakit/react';\nimport type { ForwardedRef } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { forwardRef, useContext } from '@wordpress/element';\nimport warning from '@wordpress/warning';\n\n/**\n * Internal dependencies\n */\nimport ToolbarContext from '../toolbar-context';\nimport type { ToolbarItemProps } from './types';\n\nfunction ToolbarItem(\n\t{ children, as: Component, ...props }: ToolbarItemProps,\n\tref: ForwardedRef< any >\n) {\n\tconst accessibleToolbarStore = useContext( ToolbarContext );\n\tconst isRenderProp = typeof children === 'function';\n\n\tif ( ! isRenderProp && ! Component ) {\n\t\twarning(\n\t\t\t'`ToolbarItem` is a generic headless component. You must pass either a `children` prop as a function or an `as` prop as a component. ' +\n\t\t\t\t'See https://developer.wordpress.org/block-editor/components/toolbar-item/'\n\t\t);\n\t\treturn null;\n\t}\n\n\tconst allProps = { ...props, ref, 'data-toolbar-item': true };\n\n\tif ( ! accessibleToolbarStore ) {\n\t\tif ( Component ) {\n\t\t\treturn <Component { ...allProps }>{ children }</Component>;\n\t\t}\n\t\tif ( ! isRenderProp ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn children( allProps );\n\t}\n\n\tconst render = isRenderProp\n\t\t? children\n\t\t: Component && <Component>{ children }</Component>;\n\n\treturn (\n\t\t<Ariakit.ToolbarItem\n\t\t\t{ ...allProps }\n\t\t\tstore={ accessibleToolbarStore }\n\t\t\trender={ render }\n\t\t/>\n\t);\n}\n\nexport default forwardRef( ToolbarItem );\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AAGzC;AACA;AACA;AACA,SAASC,UAAU,EAAEC,UAAU,QAAQ,oBAAoB;AAC3D,OAAOC,OAAO,MAAM,oBAAoB;;AAExC;AACA;AACA;AACA,OAAOC,cAAc,MAAM,oBAAoB;AAG/C,SAASC,WAAWA,CACnB;EAAEC,QAAQ;EAAEC,EAAE,EAAEC,SAAS;EAAE,GAAGC;AAAwB,CAAC,EACvDC,GAAwB,EACvB;EACD,MAAMC,sBAAsB,GAAGT,UAAU,CAAEE,cAAe,CAAC;EAC3D,MAAMQ,YAAY,GAAG,OAAON,QAAQ,KAAK,UAAU;EAEnD,IAAK,CAAEM,YAAY,IAAI,CAAEJ,SAAS,EAAG;IACpC,OAAAK,YAAA,oBAAAA,YAAA,YAAAV,OAAO,CACN,sIAAsI,GACrI,2EACF,CAAC;IACD,OAAO,IAAI;EACZ;EAEA,MAAMW,QAAQ,GAAG;IAAE,GAAGL,KAAK;IAAEC,GAAG;IAAE,mBAAmB,EAAE;EAAK,CAAC;EAE7D,IAAK,CAAEC,sBAAsB,EAAG;IAC/B,IAAKH,SAAS,EAAG;MAChB,OAAOO,aAAA,CAACP,SAAS;QAAA,GAAMM;MAAQ,GAAKR,QAAqB,CAAC;IAC3D;IACA,IAAK,CAAEM,YAAY,EAAG;MACrB,OAAO,IAAI;IACZ;IACA,OAAON,QAAQ,CAAEQ,QAAS,CAAC;EAC5B;EAEA,MAAME,MAAM,GAAGJ,YAAY,GACxBN,QAAQ,GACRE,SAAS,IAAIO,aAAA,CAACP,SAAS,QAAGF,QAAqB,CAAC;EAEnD,OACCS,aAAA,CAACf,OAAO,CAACK,WAAW;IAAA,GACdS,QAAQ;IACbG,KAAK,EAAGN,sBAAwB;IAChCK,MAAM,EAAGA;EAAQ,CACjB,CAAC;AAEJ;AAEA,eAAef,UAAU,CAAEI,WAAY,CAAC"}

View File

@@ -0,0 +1,20 @@
/**
* WordPress dependencies
*/
import { forwardRef } from '@wordpress/element';
import warning from '@wordpress/warning';
function ToolbarItem({
children,
...props
}, ref) {
if (typeof children !== 'function') {
typeof SCRIPT_DEBUG !== "undefined" && SCRIPT_DEBUG === true ? warning('`ToolbarItem` is a generic headless component that accepts only function children props') : void 0;
return null;
}
return children({
...props,
ref
});
}
export default forwardRef(ToolbarItem);
//# sourceMappingURL=index.native.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["forwardRef","warning","ToolbarItem","children","props","ref","SCRIPT_DEBUG"],"sources":["@wordpress/components/src/toolbar/toolbar-item/index.native.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { forwardRef } from '@wordpress/element';\nimport warning from '@wordpress/warning';\n\nfunction ToolbarItem( { children, ...props }, ref ) {\n\tif ( typeof children !== 'function' ) {\n\t\twarning(\n\t\t\t'`ToolbarItem` is a generic headless component that accepts only function children props'\n\t\t);\n\t\treturn null;\n\t}\n\treturn children( { ...props, ref } );\n}\n\nexport default forwardRef( ToolbarItem );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,UAAU,QAAQ,oBAAoB;AAC/C,OAAOC,OAAO,MAAM,oBAAoB;AAExC,SAASC,WAAWA,CAAE;EAAEC,QAAQ;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,EAAG;EACnD,IAAK,OAAOF,QAAQ,KAAK,UAAU,EAAG;IACrC,OAAAG,YAAA,oBAAAA,YAAA,YAAAL,OAAO,CACN,yFACD,CAAC;IACD,OAAO,IAAI;EACZ;EACA,OAAOE,QAAQ,CAAE;IAAE,GAAGC,KAAK;IAAEC;EAAI,CAAE,CAAC;AACrC;AAEA,eAAeL,UAAU,CAAEE,WAAY,CAAC"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=types.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":[],"sources":["@wordpress/components/src/toolbar/toolbar-item/types.ts"],"sourcesContent":["/**\n * External dependencies\n */\nimport type {\n\tReactElement,\n\tReactNode,\n\tElementType,\n\tHTMLAttributes,\n\tRefAttributes,\n} from 'react';\n\nexport type ToolbarItemProps = Omit< HTMLAttributes< any >, 'children' > & {\n\t/**\n\t * Component type that will be used to render the toolbar item.\n\t */\n\tas?: ElementType;\n\t/**\n\t * A function that receives the props that should be spread onto the element\n\t * that will be rendered as a toolbar item. If the `as` prop is not provided,\n\t * this prop will accept a ReactNode instead.\n\t */\n\tchildren?:\n\t\t| ReactNode\n\t\t| ( (\n\t\t\t\tprops: HTMLAttributes< any > & RefAttributes< any >\n\t\t ) => ReactElement | null );\n};\n"],"mappings":""}