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,102 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _reactNative = require("react-native");
var _i18n = require("@wordpress/i18n");
var _element = require("@wordpress/element");
var _compose = require("@wordpress/compose");
var _components = require("@wordpress/components");
var _bottomSheet = _interopRequireDefault(require("../bottom-sheet"));
var _styles = _interopRequireDefault(require("./styles.scss"));
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
function Separator() {
const separatorStyle = (0, _compose.usePreferredColorSchemeStyle)(_styles.default['components-picker__separator'], _styles.default['components-picker__separator--dark']);
return (0, _react.createElement)(_reactNative.View, {
style: separatorStyle
});
}
class Picker extends _element.Component {
constructor() {
super(...arguments);
this.onClose = this.onClose.bind(this);
this.onCellPress = this.onCellPress.bind(this);
this.state = {
isVisible: false
};
}
presentPicker() {
this.setState({
isVisible: true
});
}
onClose() {
this.setState({
isVisible: false
});
}
onCellPress(value) {
const {
onChange
} = this.props;
onChange(value);
this.onClose();
}
getOptions() {
const {
options,
leftAlign
} = this.props;
return options.map(option => (0, _react.createElement)(_element.Fragment, {
key: `${option.label}-${option.value}`
}, options.length > 1 && option.separated && (0, _react.createElement)(Separator, null), (0, _react.createElement)(_bottomSheet.default.Cell, {
icon: option.icon,
leftAlign: leftAlign,
label: option.label,
separatorType: 'none',
onPress: () => this.onCellPress(option.value),
disabled: option.disabled,
style: option.disabled && _styles.default['components-picker__button--disabled']
})));
}
render() {
const {
hideCancelButton,
title,
testID
} = this.props;
const {
isVisible
} = this.state;
return (0, _react.createElement)(_bottomSheet.default, {
isVisible: isVisible,
onClose: this.onClose,
hideHeader: true,
testID: testID
}, (0, _react.createElement)(_components.PanelBody, {
title: title,
style: _styles.default['components-picker__panel']
}, this.getOptions(), !hideCancelButton && (0, _react.createElement)(_components.TextControl, {
label: (0, _i18n.__)('Cancel'),
onPress: this.onClose,
separatorType: 'none'
})));
}
}
exports.default = Picker;
//# sourceMappingURL=index.android.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,94 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _reactNative = require("react-native");
var _i18n = require("@wordpress/i18n");
var _element = require("@wordpress/element");
var _data = require("@wordpress/data");
var _components = require("@wordpress/components");
var _compose = require("@wordpress/compose");
var _styles = _interopRequireDefault(require("./styles.scss"));
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
class Picker extends _element.Component {
presentPicker() {
const {
options,
onChange,
title,
destructiveButtonIndex,
disabledButtonIndices,
getAnchor,
isBottomSheetOpened,
closeBottomSheet,
onHandleClosingBottomSheet,
colorScheme
} = this.props;
const labels = options.map(({
label
}) => label);
const fullOptions = [(0, _i18n.__)('Cancel')].concat(labels);
const buttonTitleColor = colorScheme === 'light' ? _styles.default['components-picker__button-title'].color : _styles.default['components-picker__button-title--dark'].color;
_reactNative.ActionSheetIOS.showActionSheetWithOptions({
title,
options: fullOptions,
cancelButtonIndex: 0,
destructiveButtonIndex,
disabledButtonIndices,
anchor: getAnchor && getAnchor(),
tintColor: buttonTitleColor
}, buttonIndex => {
if (buttonIndex === 0) {
return;
}
const selected = options[buttonIndex - 1];
if (selected.requiresModal && isBottomSheetOpened) {
onHandleClosingBottomSheet(() => {
onChange(selected.value);
});
closeBottomSheet();
} else {
onChange(selected.value);
}
});
}
render() {
return null;
}
}
const PickerComponent = (0, _element.forwardRef)((props, ref) => {
const isBottomSheetOpened = (0, _data.useSelect)(select => select('core/edit-post').isEditorSidebarOpened());
const {
closeGeneralSidebar
} = (0, _data.useDispatch)('core/edit-post');
const {
onHandleClosingBottomSheet
} = (0, _element.useContext)(_components.BottomSheetContext);
const colorScheme = (0, _compose.usePreferredColorScheme)();
return (0, _react.createElement)(Picker, {
ref: ref,
...props,
isBottomSheetOpened: isBottomSheetOpened,
closeBottomSheet: closeGeneralSidebar,
onHandleClosingBottomSheet: onHandleClosingBottomSheet,
colorScheme: colorScheme
});
});
var _default = PickerComponent;
exports.default = _default;
//# sourceMappingURL=index.ios.js.map

File diff suppressed because one or more lines are too long