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,47 @@
import { createElement } from "react";
/**
* External dependencies
*/
/**
* Internal dependencies
*/
import { contextConnect } from '../../context';
import { Scrollable } from '../../scrollable';
import { View } from '../../view';
import { useCardBody } from './hook';
function UnconnectedCardBody(props, forwardedRef) {
const {
isScrollable,
...otherProps
} = useCardBody(props);
if (isScrollable) {
return createElement(Scrollable, {
...otherProps,
ref: forwardedRef
});
}
return createElement(View, {
...otherProps,
ref: forwardedRef
});
}
/**
* `CardBody` renders an optional content area for a `Card`.
* Multiple `CardBody` components can be used within `Card` if needed.
*
* ```jsx
* import { Card, CardBody } from `@wordpress/components`;
*
* <Card>
* <CardBody>
* ...
* </CardBody>
* </Card>
* ```
*/
export const CardBody = contextConnect(UnconnectedCardBody, 'CardBody');
export default CardBody;
//# sourceMappingURL=component.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["contextConnect","Scrollable","View","useCardBody","UnconnectedCardBody","props","forwardedRef","isScrollable","otherProps","createElement","ref","CardBody"],"sources":["@wordpress/components/src/card/card-body/component.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ForwardedRef } from 'react';\n\n/**\n * Internal dependencies\n */\nimport type { WordPressComponentProps } from '../../context';\nimport { contextConnect } from '../../context';\nimport { Scrollable } from '../../scrollable';\nimport { View } from '../../view';\nimport { useCardBody } from './hook';\nimport type { BodyProps } from '../types';\n\nfunction UnconnectedCardBody(\n\tprops: WordPressComponentProps< BodyProps, 'div' >,\n\tforwardedRef: ForwardedRef< any >\n) {\n\tconst { isScrollable, ...otherProps } = useCardBody( props );\n\n\tif ( isScrollable ) {\n\t\treturn <Scrollable { ...otherProps } ref={ forwardedRef } />;\n\t}\n\n\treturn <View { ...otherProps } ref={ forwardedRef } />;\n}\n\n/**\n * `CardBody` renders an optional content area for a `Card`.\n * Multiple `CardBody` components can be used within `Card` if needed.\n *\n * ```jsx\n * import { Card, CardBody } from `@wordpress/components`;\n *\n * <Card>\n * \t<CardBody>\n * \t\t...\n * \t</CardBody>\n * </Card>\n * ```\n */\nexport const CardBody = contextConnect( UnconnectedCardBody, 'CardBody' );\n\nexport default CardBody;\n"],"mappings":";AAAA;AACA;AACA;;AAGA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,eAAe;AAC9C,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,WAAW,QAAQ,QAAQ;AAGpC,SAASC,mBAAmBA,CAC3BC,KAAkD,EAClDC,YAAiC,EAChC;EACD,MAAM;IAAEC,YAAY;IAAE,GAAGC;EAAW,CAAC,GAAGL,WAAW,CAAEE,KAAM,CAAC;EAE5D,IAAKE,YAAY,EAAG;IACnB,OAAOE,aAAA,CAACR,UAAU;MAAA,GAAMO,UAAU;MAAGE,GAAG,EAAGJ;IAAc,CAAE,CAAC;EAC7D;EAEA,OAAOG,aAAA,CAACP,IAAI;IAAA,GAAMM,UAAU;IAAGE,GAAG,EAAGJ;EAAc,CAAE,CAAC;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,QAAQ,GAAGX,cAAc,CAAEI,mBAAmB,EAAE,UAAW,CAAC;AAEzE,eAAeO,QAAQ"}

View File

@@ -0,0 +1,31 @@
/**
* WordPress dependencies
*/
import { useMemo } from '@wordpress/element';
/**
* Internal dependencies
*/
import { useContextSystem } from '../../context';
import * as styles from '../styles';
import { useCx } from '../../utils/hooks/use-cx';
export function useCardBody(props) {
const {
className,
isScrollable = false,
isShady = false,
size = 'medium',
...otherProps
} = useContextSystem(props, 'CardBody');
const cx = useCx();
const classes = useMemo(() => cx(styles.Body, styles.borderRadius, styles.cardPaddings[size], isShady && styles.shady,
// This classname is added for legacy compatibility reasons.
'components-card__body', className), [className, cx, isShady, size]);
return {
...otherProps,
className: classes,
isScrollable
};
}
//# sourceMappingURL=hook.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["useMemo","useContextSystem","styles","useCx","useCardBody","props","className","isScrollable","isShady","size","otherProps","cx","classes","Body","borderRadius","cardPaddings","shady"],"sources":["@wordpress/components/src/card/card-body/hook.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { WordPressComponentProps } from '../../context';\nimport { useContextSystem } from '../../context';\nimport * as styles from '../styles';\nimport { useCx } from '../../utils/hooks/use-cx';\nimport type { BodyProps } from '../types';\n\nexport function useCardBody(\n\tprops: WordPressComponentProps< BodyProps, 'div' >\n) {\n\tconst {\n\t\tclassName,\n\t\tisScrollable = false,\n\t\tisShady = false,\n\t\tsize = 'medium',\n\t\t...otherProps\n\t} = useContextSystem( props, 'CardBody' );\n\n\tconst cx = useCx();\n\n\tconst classes = useMemo(\n\t\t() =>\n\t\t\tcx(\n\t\t\t\tstyles.Body,\n\t\t\t\tstyles.borderRadius,\n\t\t\t\tstyles.cardPaddings[ size ],\n\t\t\t\tisShady && styles.shady,\n\t\t\t\t// This classname is added for legacy compatibility reasons.\n\t\t\t\t'components-card__body',\n\t\t\t\tclassName\n\t\t\t),\n\t\t[ className, cx, isShady, size ]\n\t);\n\n\treturn {\n\t\t...otherProps,\n\t\tclassName: classes,\n\t\tisScrollable,\n\t};\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;;AAE5C;AACA;AACA;;AAEA,SAASC,gBAAgB,QAAQ,eAAe;AAChD,OAAO,KAAKC,MAAM,MAAM,WAAW;AACnC,SAASC,KAAK,QAAQ,0BAA0B;AAGhD,OAAO,SAASC,WAAWA,CAC1BC,KAAkD,EACjD;EACD,MAAM;IACLC,SAAS;IACTC,YAAY,GAAG,KAAK;IACpBC,OAAO,GAAG,KAAK;IACfC,IAAI,GAAG,QAAQ;IACf,GAAGC;EACJ,CAAC,GAAGT,gBAAgB,CAAEI,KAAK,EAAE,UAAW,CAAC;EAEzC,MAAMM,EAAE,GAAGR,KAAK,CAAC,CAAC;EAElB,MAAMS,OAAO,GAAGZ,OAAO,CACtB,MACCW,EAAE,CACDT,MAAM,CAACW,IAAI,EACXX,MAAM,CAACY,YAAY,EACnBZ,MAAM,CAACa,YAAY,CAAEN,IAAI,CAAE,EAC3BD,OAAO,IAAIN,MAAM,CAACc,KAAK;EACvB;EACA,uBAAuB,EACvBV,SACD,CAAC,EACF,CAAEA,SAAS,EAAEK,EAAE,EAAEH,OAAO,EAAEC,IAAI,CAC/B,CAAC;EAED,OAAO;IACN,GAAGC,UAAU;IACbJ,SAAS,EAAEM,OAAO;IAClBL;EACD,CAAC;AACF"}

View File

@@ -0,0 +1,3 @@
export { default } from './component';
export { useCardBody } from './hook';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["default","useCardBody"],"sources":["@wordpress/components/src/card/card-body/index.ts"],"sourcesContent":["export { default } from './component';\nexport { useCardBody } from './hook';\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,aAAa;AACrC,SAASC,WAAW,QAAQ,QAAQ"}