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>
159 lines
5.3 KiB
JavaScript
159 lines
5.3 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.QueryControls = QueryControls;
|
|
exports.default = void 0;
|
|
var _react = require("react");
|
|
var _i18n = require("@wordpress/i18n");
|
|
var _authorSelect = _interopRequireDefault(require("./author-select"));
|
|
var _categorySelect = _interopRequireDefault(require("./category-select"));
|
|
var _formTokenField = _interopRequireDefault(require("../form-token-field"));
|
|
var _rangeControl = _interopRequireDefault(require("../range-control"));
|
|
var _selectControl = _interopRequireDefault(require("../select-control"));
|
|
var _vStack = require("../v-stack");
|
|
/**
|
|
* WordPress dependencies
|
|
*/
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
|
|
const DEFAULT_MIN_ITEMS = 1;
|
|
const DEFAULT_MAX_ITEMS = 100;
|
|
const MAX_CATEGORIES_SUGGESTIONS = 20;
|
|
function isSingleCategorySelection(props) {
|
|
return 'categoriesList' in props;
|
|
}
|
|
function isMultipleCategorySelection(props) {
|
|
return 'categorySuggestions' in props;
|
|
}
|
|
|
|
/**
|
|
* Controls to query for posts.
|
|
*
|
|
* ```jsx
|
|
* const MyQueryControls = () => (
|
|
* <QueryControls
|
|
* { ...{ maxItems, minItems, numberOfItems, order, orderBy } }
|
|
* onOrderByChange={ ( newOrderBy ) => {
|
|
* updateQuery( { orderBy: newOrderBy } )
|
|
* }
|
|
* onOrderChange={ ( newOrder ) => {
|
|
* updateQuery( { order: newOrder } )
|
|
* }
|
|
* categoriesList={ categories }
|
|
* selectedCategoryId={ category }
|
|
* onCategoryChange={ ( newCategory ) => {
|
|
* updateQuery( { category: newCategory } )
|
|
* }
|
|
* onNumberOfItemsChange={ ( newNumberOfItems ) => {
|
|
* updateQuery( { numberOfItems: newNumberOfItems } )
|
|
* } }
|
|
* />
|
|
* );
|
|
* ```
|
|
*/
|
|
function QueryControls({
|
|
__next40pxDefaultSize = false,
|
|
authorList,
|
|
selectedAuthorId,
|
|
numberOfItems,
|
|
order,
|
|
orderBy,
|
|
maxItems = DEFAULT_MAX_ITEMS,
|
|
minItems = DEFAULT_MIN_ITEMS,
|
|
onAuthorChange,
|
|
onNumberOfItemsChange,
|
|
onOrderChange,
|
|
onOrderByChange,
|
|
// Props for single OR multiple category selection are not destructured here,
|
|
// but instead are destructured inline where necessary.
|
|
...props
|
|
}) {
|
|
return (0, _react.createElement)(_vStack.VStack, {
|
|
spacing: "4",
|
|
className: "components-query-controls"
|
|
}, [onOrderChange && onOrderByChange && (0, _react.createElement)(_selectControl.default, {
|
|
__nextHasNoMarginBottom: true,
|
|
__next40pxDefaultSize: __next40pxDefaultSize,
|
|
key: "query-controls-order-select",
|
|
label: (0, _i18n.__)('Order by'),
|
|
value: `${orderBy}/${order}`,
|
|
options: [{
|
|
label: (0, _i18n.__)('Newest to oldest'),
|
|
value: 'date/desc'
|
|
}, {
|
|
label: (0, _i18n.__)('Oldest to newest'),
|
|
value: 'date/asc'
|
|
}, {
|
|
/* translators: label for ordering posts by title in ascending order */
|
|
label: (0, _i18n.__)('A → Z'),
|
|
value: 'title/asc'
|
|
}, {
|
|
/* translators: label for ordering posts by title in descending order */
|
|
label: (0, _i18n.__)('Z → A'),
|
|
value: 'title/desc'
|
|
}],
|
|
onChange: value => {
|
|
if (typeof value !== 'string') {
|
|
return;
|
|
}
|
|
const [newOrderBy, newOrder] = value.split('/');
|
|
if (newOrder !== order) {
|
|
onOrderChange(newOrder);
|
|
}
|
|
if (newOrderBy !== orderBy) {
|
|
onOrderByChange(newOrderBy);
|
|
}
|
|
}
|
|
}), isSingleCategorySelection(props) && props.categoriesList && props.onCategoryChange && (0, _react.createElement)(_categorySelect.default, {
|
|
__next40pxDefaultSize: __next40pxDefaultSize,
|
|
key: "query-controls-category-select",
|
|
categoriesList: props.categoriesList,
|
|
label: (0, _i18n.__)('Category'),
|
|
noOptionLabel: (0, _i18n.__)('All'),
|
|
selectedCategoryId: props.selectedCategoryId,
|
|
onChange: props.onCategoryChange
|
|
}), isMultipleCategorySelection(props) && props.categorySuggestions && props.onCategoryChange && (0, _react.createElement)(_formTokenField.default, {
|
|
__next40pxDefaultSize: __next40pxDefaultSize,
|
|
__nextHasNoMarginBottom: true,
|
|
key: "query-controls-categories-select",
|
|
label: (0, _i18n.__)('Categories'),
|
|
value: props.selectedCategories && props.selectedCategories.map(item => ({
|
|
id: item.id,
|
|
// Keeping the fallback to `item.value` for legacy reasons,
|
|
// even if items of `selectedCategories` should not have a
|
|
// `value` property.
|
|
// @ts-expect-error
|
|
value: item.name || item.value
|
|
})),
|
|
suggestions: Object.keys(props.categorySuggestions),
|
|
onChange: props.onCategoryChange,
|
|
maxSuggestions: MAX_CATEGORIES_SUGGESTIONS
|
|
}), onAuthorChange && (0, _react.createElement)(_authorSelect.default, {
|
|
__next40pxDefaultSize: __next40pxDefaultSize,
|
|
key: "query-controls-author-select",
|
|
authorList: authorList,
|
|
label: (0, _i18n.__)('Author'),
|
|
noOptionLabel: (0, _i18n.__)('All'),
|
|
selectedAuthorId: selectedAuthorId,
|
|
onChange: onAuthorChange
|
|
}), onNumberOfItemsChange && (0, _react.createElement)(_rangeControl.default, {
|
|
__nextHasNoMarginBottom: true,
|
|
__next40pxDefaultSize: __next40pxDefaultSize,
|
|
key: "query-controls-range-control",
|
|
label: (0, _i18n.__)('Number of items'),
|
|
value: numberOfItems,
|
|
onChange: onNumberOfItemsChange,
|
|
min: minItems,
|
|
max: maxItems,
|
|
required: true
|
|
})]);
|
|
}
|
|
var _default = QueryControls;
|
|
exports.default = _default;
|
|
//# sourceMappingURL=index.js.map
|