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,120 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.dragFiles = void 0;
/**
* External dependencies
*/
const promises_1 = require("fs/promises");
const path_1 = require("path");
const mime_1 = require("mime");
/**
* Simulate dragging files from outside the current page.
*
* @param this
* @param files The files to be dragged.
* @return The methods of the drag operation.
*/
async function dragFiles(files) {
const filesList = Array.isArray(files) ? files : [files];
const fileObjects = await Promise.all(filesList.map(async (filePathOrObject) => {
if (typeof filePathOrObject !== 'string') {
return {
name: filePathOrObject.name,
mimeType: filePathOrObject.mimeType ||
(0, mime_1.getType)(filePathOrObject.name),
base64: filePathOrObject.buffer.toString('base64'),
};
}
const base64 = await (0, promises_1.readFile)(filePathOrObject, 'base64');
const name = (0, path_1.basename)(filePathOrObject);
return {
name,
mimeType: (0, mime_1.getType)(filePathOrObject),
base64,
};
}));
// CDP doesn't actually support dragging files, this is only a _good enough_
// dummy data so that it will correctly send the relevant events.
const dragData = {
items: fileObjects.map((fileObject) => ({
mimeType: fileObject.mimeType ?? 'File',
data: fileObject.base64,
})),
files: fileObjects.map((fileObject) => fileObject.name),
// Copy = 1, Link = 2, Move = 16.
dragOperationsMask: 1,
};
const cdpSession = await this.context.newCDPSession(this.page);
const position = {
x: 0,
y: 0,
};
return {
/**
* Drag the files over an element (fires `dragenter` and `dragover` events).
*
* @param selectorOrLocator A selector or a locator to search for an element.
* @param options The optional options.
* @param options.position A point to use relative to the top-left corner of element padding box. If not specified, uses some visible point of the element.
*/
dragOver: async (selectorOrLocator, options = {}) => {
const locator = typeof selectorOrLocator === 'string'
? this.page.locator(selectorOrLocator)
: selectorOrLocator;
const boundingBox = await locator.boundingBox();
if (!boundingBox) {
throw new Error('Cannot find the element or the element is not visible on the viewport.');
}
position.x =
boundingBox.x +
(options.position?.x ?? boundingBox.width / 2);
position.y =
boundingBox.y +
(options.position?.y ?? boundingBox.height / 2);
await cdpSession.send('Input.dispatchDragEvent', {
type: 'dragEnter',
...position,
data: dragData,
});
await cdpSession.send('Input.dispatchDragEvent', {
type: 'dragOver',
...position,
data: dragData,
});
},
/**
* Drop the files at the current position.
*/
drop: async () => {
const topMostElement = await this.page.evaluateHandle(({ x, y }) => {
const element = document.elementFromPoint(x, y);
if (element instanceof HTMLIFrameElement) {
const offsetBox = element.getBoundingClientRect();
return element.contentDocument.elementFromPoint(x - offsetBox.x, y - offsetBox.y);
}
return element;
}, position);
const elementHandle = topMostElement.asElement();
if (!elementHandle) {
throw new Error('Element not found.');
}
const dataTransfer = await elementHandle.evaluateHandle(async (_node, _fileObjects) => {
const dt = new DataTransfer();
const fileInstances = await Promise.all(_fileObjects.map(async (fileObject) => {
const blob = await fetch(`data:${fileObject.mimeType};base64,${fileObject.base64}`).then((res) => res.blob());
return new File([blob], fileObject.name, {
type: fileObject.mimeType ?? undefined,
});
}));
fileInstances.forEach((file) => {
dt.items.add(file);
});
return dt;
}, fileObjects);
await elementHandle.dispatchEvent('drop', { dataTransfer });
await cdpSession.detach();
},
};
}
exports.dragFiles = dragFiles;
//# sourceMappingURL=drag-files.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"drag-files.js","sourceRoot":"","sources":["../../src/page-utils/drag-files.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PageUtils = void 0;
/**
* Internal dependencies
*/
const drag_files_1 = require("./drag-files");
const is_current_url_1 = require("./is-current-url");
const press_keys_1 = require("./press-keys");
const set_browser_viewport_1 = require("./set-browser-viewport");
class PageUtils {
browser;
page;
context;
constructor({ page }) {
this.page = page;
this.context = page.context();
this.browser = this.context.browser();
}
/** @borrows dragFiles as this.dragFiles */
dragFiles = drag_files_1.dragFiles.bind(this);
/** @borrows isCurrentURL as this.isCurrentURL */
isCurrentURL = is_current_url_1.isCurrentURL.bind(this);
/** @borrows pressKeys as this.pressKeys */
pressKeys = press_keys_1.pressKeys.bind(this);
/** @borrows setBrowserViewport as this.setBrowserViewport */
setBrowserViewport = set_browser_viewport_1.setBrowserViewport.bind(this);
/** @borrows setClipboardData as this.setClipboardData */
setClipboardData = press_keys_1.setClipboardData.bind(this);
}
exports.PageUtils = PageUtils;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/page-utils/index.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,6CAAyC;AACzC,qDAAgD;AAChD,6CAA2D;AAC3D,iEAA4D;AAM5D,MAAM,SAAS;IACd,OAAO,CAAU;IACjB,IAAI,CAAO;IACX,OAAO,CAAiB;IAExB,YAAa,EAAE,IAAI,EAA6B;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAG,CAAC;IACxC,CAAC;IAED,2CAA2C;IAC3C,SAAS,GAAqB,sBAAS,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC;IACrD,iDAAiD;IACjD,YAAY,GAAwB,6BAAY,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC;IAC9D,2CAA2C;IAC3C,SAAS,GAAqB,sBAAS,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC;IACrD,6DAA6D;IAC7D,kBAAkB,GACjB,yCAAkB,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC;IACjC,yDAAyD;IACzD,gBAAgB,GAA4B,6BAAgB,CAAC,IAAI,CAAE,IAAI,CAAE,CAAC;CAC1E;AAEQ,8BAAS"}

View File

@@ -0,0 +1,22 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isCurrentURL = void 0;
/**
* Internal dependencies
*/
const config_1 = require("../config");
/**
* Checks if current path of the URL matches the provided path.
*
* @param this
* @param path String to be serialized as pathname.
*
* @return Boolean represents whether current URL is or not a WordPress path.
*/
function isCurrentURL(path) {
const currentURL = new URL(this.page.url());
const expectedURL = new URL(path, config_1.WP_BASE_URL);
return expectedURL.pathname === currentURL.pathname;
}
exports.isCurrentURL = isCurrentURL;
//# sourceMappingURL=is-current-url.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"is-current-url.js","sourceRoot":"","sources":["../../src/page-utils/is-current-url.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,sCAAwC;AAGxC;;;;;;;GAOG;AACH,SAAgB,YAAY,CAAmB,IAAY;IAC1D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAE,IAAI,EAAE,oBAAW,CAAE,CAAC;IAEjD,OAAO,WAAW,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;AACrD,CAAC;AALD,oCAKC"}

View File

@@ -0,0 +1,134 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.pressKeys = exports.setClipboardData = void 0;
/**
* External dependencies
*/
const change_case_1 = require("change-case");
/**
* WordPress dependencies
*/
const keycodes_1 = require("@wordpress/keycodes");
let clipboardDataHolder = {
'text/plain': '',
'text/html': '',
'rich-text': '',
};
/**
* Sets the clipboard data that can be pasted with
* `pressKeys( 'primary+v' )`.
*
* @param this
* @param clipboardData
* @param clipboardData.plainText
* @param clipboardData.html
*/
function setClipboardData({ plainText = '', html = '' }) {
clipboardDataHolder = {
'text/plain': plainText,
'text/html': html,
'rich-text': '',
};
}
exports.setClipboardData = setClipboardData;
async function emulateClipboard(page, type) {
clipboardDataHolder = await page.evaluate(([_type, _clipboardData]) => {
const canvasDoc =
// @ts-ignore
document.activeElement?.contentDocument ?? document;
const event = new ClipboardEvent(_type, {
bubbles: true,
cancelable: true,
clipboardData: new DataTransfer(),
});
if (!event.clipboardData) {
throw new Error('ClipboardEvent.clipboardData is null');
}
if (_type === 'paste') {
event.clipboardData.setData('text/plain', _clipboardData['text/plain']);
event.clipboardData.setData('text/html', _clipboardData['text/html']);
event.clipboardData.setData('rich-text', _clipboardData['rich-text']);
}
else {
const selection = canvasDoc.defaultView.getSelection();
const plainText = selection.toString();
let html = plainText;
if (selection.rangeCount) {
const range = selection.getRangeAt(0);
const fragment = range.cloneContents();
html = Array.from(fragment.childNodes)
.map((node) => node.outerHTML ??
node.nodeValue)
.join('');
}
event.clipboardData.setData('text/plain', plainText);
event.clipboardData.setData('text/html', html);
}
canvasDoc.activeElement.dispatchEvent(event);
return {
'text/plain': event.clipboardData.getData('text/plain'),
'text/html': event.clipboardData.getData('text/html'),
'rich-text': event.clipboardData.getData('rich-text'),
};
}, [type, clipboardDataHolder]);
}
const isAppleOS = () => process.platform === 'darwin';
const isWebkit = (page) => page.context().browser().browserType().name() === 'webkit';
const browserCache = new WeakMap();
const getHasNaturalTabNavigation = async (page) => {
if (!isAppleOS() || !isWebkit(page)) {
return true;
}
if (browserCache.has(page.context().browser())) {
return browserCache.get(page.context().browser());
}
const testPage = await page.context().newPage();
await testPage.setContent(`<button>1</button><button>2</button>`);
await testPage.getByText('1').focus();
await testPage.keyboard.press('Tab');
const featureDetected = await testPage
.getByText('2')
.evaluate((node) => node === document.activeElement);
browserCache.set(page.context().browser(), featureDetected);
await testPage.close();
return featureDetected;
};
const modifiers = {
...keycodes_1.modifiers,
shiftAlt: (_isApple) => _isApple() ? [keycodes_1.SHIFT, keycodes_1.ALT] : [keycodes_1.SHIFT, keycodes_1.CTRL],
};
async function pressKeys(key, { times, ...pressOptions } = {}) {
const hasNaturalTabNavigation = await getHasNaturalTabNavigation(this.page);
let command;
if (key.toLowerCase() === 'primary+c') {
command = () => emulateClipboard(this.page, 'copy');
}
else if (key.toLowerCase() === 'primary+x') {
command = () => emulateClipboard(this.page, 'cut');
}
else if (key.toLowerCase() === 'primary+v') {
command = () => emulateClipboard(this.page, 'paste');
}
else {
const keys = key.split('+').flatMap((keyCode) => {
if (Object.prototype.hasOwnProperty.call(modifiers, keyCode)) {
return modifiers[keyCode](isAppleOS).map((modifier) => modifier === keycodes_1.CTRL ? 'Control' : (0, change_case_1.capitalCase)(modifier));
}
else if (keyCode === 'Tab' && !hasNaturalTabNavigation) {
return ['Alt', 'Tab'];
}
return keyCode;
});
const normalizedKeys = keys.join('+');
command = () => this.page.keyboard.press(normalizedKeys);
}
times = times ?? 1;
for (let i = 0; i < times; i += 1) {
await command();
if (times > 1 && pressOptions.delay) {
await this.page.waitForTimeout(pressOptions.delay);
}
}
}
exports.pressKeys = pressKeys;
//# sourceMappingURL=press-keys.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"press-keys.js","sourceRoot":"","sources":["../../src/page-utils/press-keys.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,47 @@
"use strict";
/**
* Named viewport options.
*
* @typedef {"large"|"medium"|"small"} WPDimensionsName
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.setBrowserViewport = void 0;
/**
* Viewport dimensions object.
*
* @typedef {Object} WPViewportDimensions
*
* @property {number} width Width, in pixels.
* @property {number} height Height, in pixels.
*/
/**
* Predefined viewport dimensions to reference by name.
*
* @enum {WPViewportDimensions}
*
* @type {Record<WPDimensionsName, WPViewportDimensions>}
*/
const PREDEFINED_DIMENSIONS = {
large: { width: 960, height: 700 },
medium: { width: 768, height: 700 },
small: { width: 600, height: 700 },
};
/**
* Valid argument argument type from which to derive viewport dimensions.
*
* @typedef {WPDimensionsName|WPViewportDimensions} WPViewport
*/
/**
* Sets browser viewport to specified type.
*
* @this {import('./').PageUtils}
* @param {WPViewport} viewport Viewport name or dimensions object to assign.
*/
async function setBrowserViewport(viewport) {
const dimensions = typeof viewport === 'string'
? PREDEFINED_DIMENSIONS[viewport]
: viewport;
await this.page.setViewportSize(dimensions);
}
exports.setBrowserViewport = setBrowserViewport;
//# sourceMappingURL=set-browser-viewport.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"set-browser-viewport.js","sourceRoot":"","sources":["../../src/page-utils/set-browser-viewport.js"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG;IAC7B,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAClC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACnC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;CAClC,CAAC;AAEF;;;;GAIG;AAEH;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAE,QAAQ;IACjD,MAAM,UAAU,GACf,OAAO,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,qBAAqB,CAAE,QAAQ,CAAE;QACnC,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAE,UAAU,CAAE,CAAC;AAC/C,CAAC;AAPD,gDAOC"}