2023-09-21 15:26:32 +02:00
/******/ ( function ( ) { // webpackBootstrap
2023-06-27 16:24:19 +02:00
/******/ "use strict" ;
2022-04-11 14:04:30 +02:00
/******/ var _ _webpack _modules _ _ = ( {
2020-01-22 23:06:21 +01:00
2023-09-26 16:23:26 +02:00
/***/ 5360 :
/***/ ( function ( _ _unused _webpack _module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
/* harmony export */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , {
/* harmony export */ createUndoManager : function ( ) { return /* binding */ createUndoManager ; }
/* harmony export */ } ) ;
/* harmony import */ var _wordpress _is _shallow _equal _ _WEBPACK _IMPORTED _MODULE _0 _ _ = _ _webpack _require _ _ ( 9127 ) ;
/* harmony import */ var _wordpress _is _shallow _equal _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( _wordpress _is _shallow _equal _ _WEBPACK _IMPORTED _MODULE _0 _ _ ) ;
/ * *
* WordPress dependencies
* /
/** @typedef {import('./types').HistoryRecord} HistoryRecord */
/** @typedef {import('./types').HistoryChange} HistoryChange */
/** @typedef {import('./types').HistoryChanges} HistoryChanges */
/** @typedef {import('./types').UndoManager} UndoManager */
/ * *
* Merge changes for a single item into a record of changes .
*
* @ param { Record < string , HistoryChange > } changes1 Previous changes
* @ param { Record < string , HistoryChange > } changes2 NextChanges
*
* @ return { Record < string , HistoryChange > } Merged changes
* /
function mergeHistoryChanges ( changes1 , changes2 ) {
/ * *
* @ type { Record < string , HistoryChange > }
* /
const newChanges = {
... changes1
} ;
Object . entries ( changes2 ) . forEach ( ( [ key , value ] ) => {
if ( newChanges [ key ] ) {
newChanges [ key ] = {
... newChanges [ key ] ,
to : value . to
} ;
} else {
newChanges [ key ] = value ;
}
} ) ;
return newChanges ;
}
/ * *
* Adds history changes for a single item into a record of changes .
*
* @ param { HistoryRecord } record The record to merge into .
* @ param { HistoryChanges } changes The changes to merge .
* /
const addHistoryChangesIntoRecord = ( record , changes ) => {
const existingChangesIndex = record ? . findIndex ( ( {
id : recordIdentifier
} ) => {
return typeof recordIdentifier === 'string' ? recordIdentifier === changes . id : _wordpress _is _shallow _equal _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default ( ) ( recordIdentifier , changes . id ) ;
} ) ;
const nextRecord = [ ... record ] ;
if ( existingChangesIndex !== - 1 ) {
// If the edit is already in the stack leave the initial "from" value.
nextRecord [ existingChangesIndex ] = {
id : changes . id ,
changes : mergeHistoryChanges ( nextRecord [ existingChangesIndex ] . changes , changes . changes )
} ;
} else {
nextRecord . push ( changes ) ;
}
return nextRecord ;
} ;
/ * *
* Creates an undo manager .
*
* @ return { UndoManager } Undo manager .
* /
function createUndoManager ( ) {
/ * *
* @ type { HistoryRecord [ ] }
* /
let history = [ ] ;
/ * *
* @ type { HistoryRecord }
* /
let stagedRecord = [ ] ;
/ * *
* @ type { number }
* /
let offset = 0 ;
const dropPendingRedos = ( ) => {
history = history . slice ( 0 , offset || undefined ) ;
offset = 0 ;
} ;
const appendStagedRecordToLatestHistoryRecord = ( ) => {
var _history$index ;
const index = history . length === 0 ? 0 : history . length - 1 ;
let latestRecord = ( _history$index = history [ index ] ) !== null && _history$index !== void 0 ? _history$index : [ ] ;
stagedRecord . forEach ( changes => {
latestRecord = addHistoryChangesIntoRecord ( latestRecord , changes ) ;
} ) ;
stagedRecord = [ ] ;
history [ index ] = latestRecord ;
} ;
/ * *
* Checks whether a record is empty .
* A record is considered empty if it the changes keep the same values .
* Also updates to function values are ignored .
*
* @ param { HistoryRecord } record
* @ return { boolean } Whether the record is empty .
* /
const isRecordEmpty = record => {
const filteredRecord = record . filter ( ( {
changes
} ) => {
return Object . values ( changes ) . some ( ( {
from ,
to
} ) => typeof from !== 'function' && typeof to !== 'function' && ! _wordpress _is _shallow _equal _ _WEBPACK _IMPORTED _MODULE _0 _ _ _default ( ) ( from , to ) ) ;
} ) ;
return ! filteredRecord . length ;
} ;
return {
/ * *
* Record changes into the history .
*
* @ param { HistoryRecord = } record A record of changes to record .
* @ param { boolean } isStaged Whether to immediately create an undo point or not .
* /
addRecord ( record , isStaged = false ) {
const isEmpty = ! record || isRecordEmpty ( record ) ;
if ( isStaged ) {
if ( isEmpty ) {
return ;
}
record . forEach ( changes => {
stagedRecord = addHistoryChangesIntoRecord ( stagedRecord , changes ) ;
} ) ;
} else {
dropPendingRedos ( ) ;
if ( stagedRecord . length ) {
appendStagedRecordToLatestHistoryRecord ( ) ;
}
if ( isEmpty ) {
return ;
}
history . push ( record ) ;
}
} ,
undo ( ) {
if ( stagedRecord . length ) {
dropPendingRedos ( ) ;
appendStagedRecordToLatestHistoryRecord ( ) ;
}
const undoRecord = history [ history . length - 1 + offset ] ;
if ( ! undoRecord ) {
return ;
}
offset -= 1 ;
return undoRecord ;
} ,
redo ( ) {
const redoRecord = history [ history . length + offset ] ;
if ( ! redoRecord ) {
return ;
}
offset += 1 ;
return redoRecord ;
} ,
hasUndo ( ) {
return ! ! history [ history . length - 1 + offset ] ;
} ,
hasRedo ( ) {
return ! ! history [ history . length + offset ] ;
}
} ;
}
/***/ } ) ,
2022-04-11 14:04:30 +02:00
/***/ 2167 :
2023-09-21 15:26:32 +02:00
/***/ ( function ( module ) {
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function _typeof ( obj ) {
if ( typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ) {
_typeof = function ( obj ) {
return typeof obj ;
} ;
} else {
_typeof = function ( obj ) {
return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ;
} ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
return _typeof ( obj ) ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function _classCallCheck ( instance , Constructor ) {
if ( ! ( instance instanceof Constructor ) ) {
throw new TypeError ( "Cannot call a class as a function" ) ;
}
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function _defineProperties ( target , props ) {
for ( var i = 0 ; i < props . length ; i ++ ) {
var descriptor = props [ i ] ;
descriptor . enumerable = descriptor . enumerable || false ;
descriptor . configurable = true ;
if ( "value" in descriptor ) descriptor . writable = true ;
Object . defineProperty ( target , descriptor . key , descriptor ) ;
}
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function _createClass ( Constructor , protoProps , staticProps ) {
if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ;
if ( staticProps ) _defineProperties ( Constructor , staticProps ) ;
return Constructor ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
/ * *
* Given an instance of EquivalentKeyMap , returns its internal value pair tuple
* for a key , if one exists . The tuple members consist of the last reference
* value for the key ( used in efficient subsequent lookups ) and the value
* assigned for the key at the leaf node .
*
* @ param { EquivalentKeyMap } instance EquivalentKeyMap instance .
* @ param { * } key The key for which to return value pair .
*
* @ return { ? Array } Value pair , if exists .
* /
function getValuePair ( instance , key ) {
var _map = instance . _map ,
_arrayTreeMap = instance . _arrayTreeMap ,
_objectTreeMap = instance . _objectTreeMap ; // Map keeps a reference to the last object-like key used to set the
// value, which can be used to shortcut immediately to the value.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( _map . has ( key ) ) {
return _map . get ( key ) ;
} // Sort keys to ensure stable retrieval from tree.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var properties = Object . keys ( key ) . sort ( ) ; // Tree by type to avoid conflicts on numeric object keys, empty value.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var map = Array . isArray ( key ) ? _arrayTreeMap : _objectTreeMap ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
for ( var i = 0 ; i < properties . length ; i ++ ) {
var property = properties [ i ] ;
map = map . get ( property ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( map === undefined ) {
return ;
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var propertyValue = key [ property ] ;
map = map . get ( propertyValue ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( map === undefined ) {
return ;
}
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var valuePair = map . get ( '_ekm_value' ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( ! valuePair ) {
return ;
} // If reached, it implies that an object-like key was set with another
// reference, so delete the reference and replace with the current.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
_map . delete ( valuePair [ 0 ] ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
valuePair [ 0 ] = key ;
map . set ( '_ekm_value' , valuePair ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
_map . set ( key , valuePair ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
return valuePair ;
}
/ * *
* Variant of a Map object which enables lookup by equivalent ( deeply equal )
* object and array keys .
* /
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var EquivalentKeyMap =
/*#__PURE__*/
function ( ) {
/ * *
* Constructs a new instance of EquivalentKeyMap .
*
* @ param { Iterable . < * > } iterable Initial pair of key , value for map .
* /
function EquivalentKeyMap ( iterable ) {
_classCallCheck ( this , EquivalentKeyMap ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
this . clear ( ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( iterable instanceof EquivalentKeyMap ) {
// Map#forEach is only means of iterating with support for IE11.
var iterablePairs = [ ] ;
iterable . forEach ( function ( value , key ) {
iterablePairs . push ( [ key , value ] ) ;
} ) ;
iterable = iterablePairs ;
2021-05-19 17:09:27 +02:00
}
2021-05-20 14:20:04 +02:00
if ( iterable != null ) {
for ( var i = 0 ; i < iterable . length ; i ++ ) {
this . set ( iterable [ i ] [ 0 ] , iterable [ i ] [ 1 ] ) ;
}
}
}
/ * *
* Accessor property returning the number of elements .
*
* @ return { number } Number of elements .
* /
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
_createClass ( EquivalentKeyMap , [ {
key : "set" ,
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
/ * *
* Add or update an element with a specified key and value .
*
* @ param { * } key The key of the element to add .
* @ param { * } value The value of the element to add .
*
* @ return { EquivalentKeyMap } Map instance .
* /
value : function set ( key , value ) {
// Shortcut non-object-like to set on internal Map.
if ( key === null || _typeof ( key ) !== 'object' ) {
this . _map . set ( key , value ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
return this ;
} // Sort keys to ensure stable assignment into tree.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var properties = Object . keys ( key ) . sort ( ) ;
var valuePair = [ key , value ] ; // Tree by type to avoid conflicts on numeric object keys, empty value.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var map = Array . isArray ( key ) ? this . _arrayTreeMap : this . _objectTreeMap ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
for ( var i = 0 ; i < properties . length ; i ++ ) {
var property = properties [ i ] ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( ! map . has ( property ) ) {
map . set ( property , new EquivalentKeyMap ( ) ) ;
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
map = map . get ( property ) ;
var propertyValue = key [ property ] ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( ! map . has ( propertyValue ) ) {
map . set ( propertyValue , new EquivalentKeyMap ( ) ) ;
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
map = map . get ( propertyValue ) ;
} // If an _ekm_value exists, there was already an equivalent key. Before
// overriding, ensure that the old key reference is removed from map to
// avoid memory leak of accumulating equivalent keys. This is, in a
// sense, a poor man's WeakMap, while still enabling iterability.
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
var previousValuePair = map . get ( '_ekm_value' ) ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( previousValuePair ) {
this . _map . delete ( previousValuePair [ 0 ] ) ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
map . set ( '_ekm_value' , valuePair ) ;
this . _map . set ( key , valuePair ) ;
return this ;
2021-05-19 17:09:27 +02:00
}
2021-05-20 14:20:04 +02:00
/ * *
* Returns a specified element .
*
* @ param { * } key The key of the element to return .
*
* @ return { ? * } The element associated with the specified key or undefined
* if the key can ' t be found .
* /
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
} , {
key : "get" ,
value : function get ( key ) {
// Shortcut non-object-like to get from internal Map.
if ( key === null || _typeof ( key ) !== 'object' ) {
return this . _map . get ( key ) ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
var valuePair = getValuePair ( this , key ) ;
if ( valuePair ) {
return valuePair [ 1 ] ;
}
}
/ * *
* Returns a boolean indicating whether an element with the specified key
* exists or not .
*
* @ param { * } key The key of the element to test for presence .
*
* @ return { boolean } Whether an element with the specified key exists .
* /
} , {
key : "has" ,
value : function has ( key ) {
if ( key === null || _typeof ( key ) !== 'object' ) {
return this . _map . has ( key ) ;
} // Test on the _presence_ of the pair, not its value, as even undefined
// can be a valid member value for a key.
return getValuePair ( this , key ) !== undefined ;
}
/ * *
* Removes the specified element .
*
* @ param { * } key The key of the element to remove .
*
* @ return { boolean } Returns true if an element existed and has been
* removed , or false if the element does not exist .
* /
} , {
key : "delete" ,
value : function _delete ( key ) {
if ( ! this . has ( key ) ) {
return false ;
} // This naive implementation will leave orphaned child trees. A better
// implementation should traverse and remove orphans.
this . set ( key , undefined ) ;
return true ;
}
/ * *
* Executes a provided function once per each key / value pair , in insertion
* order .
*
* @ param { Function } callback Function to execute for each element .
* @ param { * } thisArg Value to use as ` this ` when executing
* ` callback ` .
* /
} , {
key : "forEach" ,
value : function forEach ( callback ) {
var _this = this ;
var thisArg = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : this ;
this . _map . forEach ( function ( value , key ) {
// Unwrap value from object-like value pair.
if ( key !== null && _typeof ( key ) === 'object' ) {
value = value [ 1 ] ;
}
callback . call ( thisArg , value , key , _this ) ;
} ) ;
}
/ * *
* Removes all elements .
* /
} , {
key : "clear" ,
value : function clear ( ) {
this . _map = new Map ( ) ;
this . _arrayTreeMap = new Map ( ) ;
this . _objectTreeMap = new Map ( ) ;
}
} , {
key : "size" ,
get : function get ( ) {
return this . _map . size ;
}
} ] ) ;
return EquivalentKeyMap ;
} ( ) ;
module . exports = EquivalentKeyMap ;
2020-01-22 23:06:21 +01:00
2023-02-07 08:04:52 +01:00
/***/ } ) ,
/***/ 5619 :
2023-09-21 15:26:32 +02:00
/***/ ( function ( module ) {
2023-02-07 08:04:52 +01:00
// do not edit .js files directly - edit src/index.jst
var envHasBigInt64Array = typeof BigInt64Array !== 'undefined' ;
module . exports = function equal ( a , b ) {
if ( a === b ) return true ;
if ( a && b && typeof a == 'object' && typeof b == 'object' ) {
if ( a . constructor !== b . constructor ) return false ;
var length , i , keys ;
if ( Array . isArray ( a ) ) {
length = a . length ;
if ( length != b . length ) return false ;
for ( i = length ; i -- !== 0 ; )
if ( ! equal ( a [ i ] , b [ i ] ) ) return false ;
return true ;
}
if ( ( a instanceof Map ) && ( b instanceof Map ) ) {
if ( a . size !== b . size ) return false ;
for ( i of a . entries ( ) )
if ( ! b . has ( i [ 0 ] ) ) return false ;
for ( i of a . entries ( ) )
if ( ! equal ( i [ 1 ] , b . get ( i [ 0 ] ) ) ) return false ;
return true ;
}
if ( ( a instanceof Set ) && ( b instanceof Set ) ) {
if ( a . size !== b . size ) return false ;
for ( i of a . entries ( ) )
if ( ! b . has ( i [ 0 ] ) ) return false ;
return true ;
}
if ( ArrayBuffer . isView ( a ) && ArrayBuffer . isView ( b ) ) {
length = a . length ;
if ( length != b . length ) return false ;
for ( i = length ; i -- !== 0 ; )
if ( a [ i ] !== b [ i ] ) return false ;
return true ;
}
if ( a . constructor === RegExp ) return a . source === b . source && a . flags === b . flags ;
if ( a . valueOf !== Object . prototype . valueOf ) return a . valueOf ( ) === b . valueOf ( ) ;
if ( a . toString !== Object . prototype . toString ) return a . toString ( ) === b . toString ( ) ;
keys = Object . keys ( a ) ;
length = keys . length ;
if ( length !== Object . keys ( b ) . length ) return false ;
for ( i = length ; i -- !== 0 ; )
if ( ! Object . prototype . hasOwnProperty . call ( b , keys [ i ] ) ) return false ;
for ( i = length ; i -- !== 0 ; ) {
var key = keys [ i ] ;
if ( ! equal ( a [ key ] , b [ key ] ) ) return false ;
}
return true ;
}
// true if both NaN, false otherwise
return a !== a && b !== b ;
} ;
2023-09-26 16:23:26 +02:00
/***/ } ) ,
/***/ 9127 :
/***/ ( function ( module ) {
module . exports = window [ "wp" ] [ "isShallowEqual" ] ;
2022-04-11 14:04:30 +02:00
/***/ } )
2019-09-19 17:19:18 +02:00
2022-04-11 14:04:30 +02:00
/******/ } ) ;
/************************************************************************/
/******/ // The module cache
/******/ var _ _webpack _module _cache _ _ = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/ // Check if module is in cache
/******/ var cachedModule = _ _webpack _module _cache _ _ [ moduleId ] ;
/******/ if ( cachedModule !== undefined ) {
/******/ return cachedModule . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = _ _webpack _module _cache _ _ [ moduleId ] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ _ _webpack _modules _ _ [ moduleId ] ( module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
2023-09-21 15:26:32 +02:00
/******/ ! function ( ) {
2022-04-11 14:04:30 +02:00
/******/ // getDefaultExport function for compatibility with non-harmony modules
2023-09-21 15:26:32 +02:00
/******/ _ _webpack _require _ _ . n = function ( module ) {
2022-04-11 14:04:30 +02:00
/******/ var getter = module && module . _ _esModule ?
2023-09-21 15:26:32 +02:00
/******/ function ( ) { return module [ 'default' ] ; } :
/******/ function ( ) { return module ; } ;
2022-04-11 14:04:30 +02:00
/******/ _ _webpack _require _ _ . d ( getter , { a : getter } ) ;
/******/ return getter ;
/******/ } ;
2023-09-21 15:26:32 +02:00
/******/ } ( ) ;
2022-04-11 14:04:30 +02:00
/******/
/******/ /* webpack/runtime/define property getters */
2023-09-21 15:26:32 +02:00
/******/ ! function ( ) {
2022-04-11 14:04:30 +02:00
/******/ // define getter functions for harmony exports
2023-09-21 15:26:32 +02:00
/******/ _ _webpack _require _ _ . d = function ( exports , definition ) {
2022-04-11 14:04:30 +02:00
/******/ for ( var key in definition ) {
/******/ if ( _ _webpack _require _ _ . o ( definition , key ) && ! _ _webpack _require _ _ . o ( exports , key ) ) {
/******/ Object . defineProperty ( exports , key , { enumerable : true , get : definition [ key ] } ) ;
/******/ }
/******/ }
/******/ } ;
2023-09-21 15:26:32 +02:00
/******/ } ( ) ;
2022-04-11 14:04:30 +02:00
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
2023-09-21 15:26:32 +02:00
/******/ ! function ( ) {
/******/ _ _webpack _require _ _ . o = function ( obj , prop ) { return Object . prototype . hasOwnProperty . call ( obj , prop ) ; }
/******/ } ( ) ;
2022-04-11 14:04:30 +02:00
/******/
/******/ /* webpack/runtime/make namespace object */
2023-09-21 15:26:32 +02:00
/******/ ! function ( ) {
2022-04-11 14:04:30 +02:00
/******/ // define __esModule on exports
2023-09-21 15:26:32 +02:00
/******/ _ _webpack _require _ _ . r = function ( exports ) {
2022-04-11 14:04:30 +02:00
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
2023-09-21 15:26:32 +02:00
/******/ } ( ) ;
2022-04-11 14:04:30 +02:00
/******/
/************************************************************************/
var _ _webpack _exports _ _ = { } ;
2023-06-27 16:24:19 +02:00
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
2023-09-21 15:26:32 +02:00
! function ( ) {
2020-06-29 13:50:29 +02:00
// ESM COMPAT FLAG
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
2020-06-29 13:50:29 +02:00
// EXPORTS
2022-04-11 14:04:30 +02:00
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , {
2023-09-21 15:26:32 +02:00
EntityProvider : function ( ) { return /* reexport */ EntityProvider ; } ,
_ _experimentalFetchLinkSuggestions : function ( ) { return /* reexport */ _experimental _fetch _link _suggestions ; } ,
_ _experimentalFetchUrlData : function ( ) { return /* reexport */ _experimental _fetch _url _data ; } ,
_ _experimentalUseEntityRecord : function ( ) { return /* reexport */ _ _experimentalUseEntityRecord ; } ,
_ _experimentalUseEntityRecords : function ( ) { return /* reexport */ _ _experimentalUseEntityRecords ; } ,
_ _experimentalUseResourcePermissions : function ( ) { return /* reexport */ _ _experimentalUseResourcePermissions ; } ,
store : function ( ) { return /* binding */ store ; } ,
useEntityBlockEditor : function ( ) { return /* reexport */ useEntityBlockEditor ; } ,
useEntityId : function ( ) { return /* reexport */ useEntityId ; } ,
useEntityProp : function ( ) { return /* reexport */ useEntityProp ; } ,
useEntityRecord : function ( ) { return /* reexport */ useEntityRecord ; } ,
useEntityRecords : function ( ) { return /* reexport */ useEntityRecords ; } ,
useResourcePermissions : function ( ) { return /* reexport */ useResourcePermissions ; }
2022-04-11 14:04:30 +02:00
} ) ;
2021-01-28 03:04:13 +01:00
2020-06-29 13:50:29 +02:00
// NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/actions.js
2019-10-15 17:37:08 +02:00
var build _module _actions _namespaceObject = { } ;
_ _webpack _require _ _ . r ( build _module _actions _namespaceObject ) ;
2022-04-11 14:04:30 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , {
2023-09-21 15:26:32 +02:00
_ _experimentalBatch : function ( ) { return _ _experimentalBatch ; } ,
_ _experimentalReceiveCurrentGlobalStylesId : function ( ) { return _ _experimentalReceiveCurrentGlobalStylesId ; } ,
_ _experimentalReceiveThemeBaseGlobalStyles : function ( ) { return _ _experimentalReceiveThemeBaseGlobalStyles ; } ,
_ _experimentalReceiveThemeGlobalStyleVariations : function ( ) { return _ _experimentalReceiveThemeGlobalStyleVariations ; } ,
_ _experimentalSaveSpecifiedEntityEdits : function ( ) { return _ _experimentalSaveSpecifiedEntityEdits ; } ,
_ _unstableCreateUndoLevel : function ( ) { return _ _unstableCreateUndoLevel ; } ,
addEntities : function ( ) { return addEntities ; } ,
deleteEntityRecord : function ( ) { return deleteEntityRecord ; } ,
editEntityRecord : function ( ) { return editEntityRecord ; } ,
receiveAutosaves : function ( ) { return receiveAutosaves ; } ,
receiveCurrentTheme : function ( ) { return receiveCurrentTheme ; } ,
receiveCurrentUser : function ( ) { return receiveCurrentUser ; } ,
receiveEmbedPreview : function ( ) { return receiveEmbedPreview ; } ,
receiveEntityRecords : function ( ) { return receiveEntityRecords ; } ,
receiveNavigationFallbackId : function ( ) { return receiveNavigationFallbackId ; } ,
receiveThemeGlobalStyleRevisions : function ( ) { return receiveThemeGlobalStyleRevisions ; } ,
receiveThemeSupports : function ( ) { return receiveThemeSupports ; } ,
receiveUploadPermissions : function ( ) { return receiveUploadPermissions ; } ,
receiveUserPermission : function ( ) { return receiveUserPermission ; } ,
receiveUserQuery : function ( ) { return receiveUserQuery ; } ,
redo : function ( ) { return redo ; } ,
saveEditedEntityRecord : function ( ) { return saveEditedEntityRecord ; } ,
saveEntityRecord : function ( ) { return saveEntityRecord ; } ,
undo : function ( ) { return undo ; }
2022-04-11 14:04:30 +02:00
} ) ;
2020-06-29 13:50:29 +02:00
// NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/selectors.js
2019-10-15 17:37:08 +02:00
var build _module _selectors _namespaceObject = { } ;
_ _webpack _require _ _ . r ( build _module _selectors _namespaceObject ) ;
2022-04-11 14:04:30 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , {
2023-09-21 15:26:32 +02:00
_ _experimentalGetCurrentGlobalStylesId : function ( ) { return _ _experimentalGetCurrentGlobalStylesId ; } ,
_ _experimentalGetCurrentThemeBaseGlobalStyles : function ( ) { return _ _experimentalGetCurrentThemeBaseGlobalStyles ; } ,
_ _experimentalGetCurrentThemeGlobalStylesVariations : function ( ) { return _ _experimentalGetCurrentThemeGlobalStylesVariations ; } ,
_ _experimentalGetDirtyEntityRecords : function ( ) { return _ _experimentalGetDirtyEntityRecords ; } ,
_ _experimentalGetEntitiesBeingSaved : function ( ) { return _ _experimentalGetEntitiesBeingSaved ; } ,
_ _experimentalGetEntityRecordNoResolver : function ( ) { return _ _experimentalGetEntityRecordNoResolver ; } ,
_ _experimentalGetTemplateForLink : function ( ) { return _ _experimentalGetTemplateForLink ; } ,
canUser : function ( ) { return canUser ; } ,
canUserEditEntityRecord : function ( ) { return canUserEditEntityRecord ; } ,
getAuthors : function ( ) { return getAuthors ; } ,
getAutosave : function ( ) { return getAutosave ; } ,
getAutosaves : function ( ) { return getAutosaves ; } ,
getBlockPatternCategories : function ( ) { return getBlockPatternCategories ; } ,
getBlockPatterns : function ( ) { return getBlockPatterns ; } ,
getCurrentTheme : function ( ) { return getCurrentTheme ; } ,
getCurrentThemeGlobalStylesRevisions : function ( ) { return getCurrentThemeGlobalStylesRevisions ; } ,
getCurrentUser : function ( ) { return getCurrentUser ; } ,
getEditedEntityRecord : function ( ) { return getEditedEntityRecord ; } ,
getEmbedPreview : function ( ) { return getEmbedPreview ; } ,
getEntitiesByKind : function ( ) { return getEntitiesByKind ; } ,
getEntitiesConfig : function ( ) { return getEntitiesConfig ; } ,
getEntity : function ( ) { return getEntity ; } ,
getEntityConfig : function ( ) { return getEntityConfig ; } ,
getEntityRecord : function ( ) { return getEntityRecord ; } ,
getEntityRecordEdits : function ( ) { return getEntityRecordEdits ; } ,
getEntityRecordNonTransientEdits : function ( ) { return getEntityRecordNonTransientEdits ; } ,
getEntityRecords : function ( ) { return getEntityRecords ; } ,
getLastEntityDeleteError : function ( ) { return getLastEntityDeleteError ; } ,
getLastEntitySaveError : function ( ) { return getLastEntitySaveError ; } ,
getRawEntityRecord : function ( ) { return getRawEntityRecord ; } ,
getRedoEdit : function ( ) { return getRedoEdit ; } ,
getReferenceByDistinctEdits : function ( ) { return getReferenceByDistinctEdits ; } ,
getThemeSupports : function ( ) { return getThemeSupports ; } ,
getUndoEdit : function ( ) { return getUndoEdit ; } ,
2023-09-26 16:23:26 +02:00
getUserPatternCategories : function ( ) { return getUserPatternCategories ; } ,
2023-09-21 15:26:32 +02:00
getUserQueryResults : function ( ) { return getUserQueryResults ; } ,
hasEditsForEntityRecord : function ( ) { return hasEditsForEntityRecord ; } ,
hasEntityRecords : function ( ) { return hasEntityRecords ; } ,
hasFetchedAutosaves : function ( ) { return hasFetchedAutosaves ; } ,
hasRedo : function ( ) { return hasRedo ; } ,
hasUndo : function ( ) { return hasUndo ; } ,
isAutosavingEntityRecord : function ( ) { return isAutosavingEntityRecord ; } ,
isDeletingEntityRecord : function ( ) { return isDeletingEntityRecord ; } ,
isPreviewEmbedFallback : function ( ) { return isPreviewEmbedFallback ; } ,
isRequestingEmbedPreview : function ( ) { return isRequestingEmbedPreview ; } ,
isSavingEntityRecord : function ( ) { return isSavingEntityRecord ; }
2022-04-11 14:04:30 +02:00
} ) ;
2020-06-29 13:50:29 +02:00
2023-09-26 16:23:26 +02:00
// NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/private-selectors.js
var private _selectors _namespaceObject = { } ;
_ _webpack _require _ _ . r ( private _selectors _namespaceObject ) ;
_ _webpack _require _ _ . d ( private _selectors _namespaceObject , {
getNavigationFallbackId : function ( ) { return getNavigationFallbackId ; } ,
getUndoManager : function ( ) { return getUndoManager ; }
} ) ;
2020-06-29 13:50:29 +02:00
// NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/resolvers.js
2019-10-15 17:37:08 +02:00
var resolvers _namespaceObject = { } ;
_ _webpack _require _ _ . r ( resolvers _namespaceObject ) ;
2022-04-11 14:04:30 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , {
2023-09-21 15:26:32 +02:00
_ _experimentalGetCurrentGlobalStylesId : function ( ) { return resolvers _experimentalGetCurrentGlobalStylesId ; } ,
_ _experimentalGetCurrentThemeBaseGlobalStyles : function ( ) { return resolvers _experimentalGetCurrentThemeBaseGlobalStyles ; } ,
_ _experimentalGetCurrentThemeGlobalStylesVariations : function ( ) { return resolvers _experimentalGetCurrentThemeGlobalStylesVariations ; } ,
_ _experimentalGetTemplateForLink : function ( ) { return resolvers _experimentalGetTemplateForLink ; } ,
canUser : function ( ) { return resolvers _canUser ; } ,
canUserEditEntityRecord : function ( ) { return resolvers _canUserEditEntityRecord ; } ,
getAuthors : function ( ) { return resolvers _getAuthors ; } ,
getAutosave : function ( ) { return resolvers _getAutosave ; } ,
getAutosaves : function ( ) { return resolvers _getAutosaves ; } ,
getBlockPatternCategories : function ( ) { return resolvers _getBlockPatternCategories ; } ,
getBlockPatterns : function ( ) { return resolvers _getBlockPatterns ; } ,
getCurrentTheme : function ( ) { return resolvers _getCurrentTheme ; } ,
getCurrentThemeGlobalStylesRevisions : function ( ) { return resolvers _getCurrentThemeGlobalStylesRevisions ; } ,
getCurrentUser : function ( ) { return resolvers _getCurrentUser ; } ,
getEditedEntityRecord : function ( ) { return resolvers _getEditedEntityRecord ; } ,
getEmbedPreview : function ( ) { return resolvers _getEmbedPreview ; } ,
getEntityRecord : function ( ) { return resolvers _getEntityRecord ; } ,
getEntityRecords : function ( ) { return resolvers _getEntityRecords ; } ,
getNavigationFallbackId : function ( ) { return resolvers _getNavigationFallbackId ; } ,
getRawEntityRecord : function ( ) { return resolvers _getRawEntityRecord ; } ,
2023-09-26 16:23:26 +02:00
getThemeSupports : function ( ) { return resolvers _getThemeSupports ; } ,
getUserPatternCategories : function ( ) { return resolvers _getUserPatternCategories ; }
2022-04-11 14:04:30 +02:00
} ) ;
; // CONCATENATED MODULE: external ["wp","data"]
2023-09-21 15:26:32 +02:00
var external _wp _data _namespaceObject = window [ "wp" ] [ "data" ] ;
2023-02-07 08:04:52 +01:00
// EXTERNAL MODULE: ./node_modules/fast-deep-equal/es6/index.js
var es6 = _ _webpack _require _ _ ( 5619 ) ;
var es6 _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( es6 ) ;
; // CONCATENATED MODULE: external ["wp","compose"]
2023-09-21 15:26:32 +02:00
var external _wp _compose _namespaceObject = window [ "wp" ] [ "compose" ] ;
2023-09-26 16:23:26 +02:00
// EXTERNAL MODULE: ./node_modules/@wordpress/undo-manager/build-module/index.js
var build _module = _ _webpack _require _ _ ( 5360 ) ;
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/if-matching-action.js
2022-04-12 17:12:47 +02:00
/** @typedef {import('../types').AnyFunction} AnyFunction */
2020-06-26 15:33:47 +02:00
/ * *
* A higher - order reducer creator which invokes the original reducer only if
* the dispatching action matches the given predicate , * * OR * * if state is
* initializing ( undefined ) .
*
2022-04-12 17:12:47 +02:00
* @ param { AnyFunction } isMatch Function predicate for allowing reducer call .
2020-06-26 15:33:47 +02:00
*
2022-04-12 17:12:47 +02:00
* @ return { AnyFunction } Higher - order reducer .
2020-06-26 15:33:47 +02:00
* /
2021-05-19 17:09:27 +02:00
const ifMatchingAction = isMatch => reducer => ( state , action ) => {
if ( state === undefined || isMatch ( action ) ) {
return reducer ( state , action ) ;
}
return state ;
2020-06-26 15:33:47 +02:00
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var if _matching _action = ( ifMatchingAction ) ;
2020-06-26 15:33:47 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/replace-action.js
2022-04-12 17:12:47 +02:00
/** @typedef {import('../types').AnyFunction} AnyFunction */
2020-06-26 15:33:47 +02:00
/ * *
* Higher - order reducer creator which substitutes the action object before
* passing to the original reducer .
*
2022-04-12 17:12:47 +02:00
* @ param { AnyFunction } replacer Function mapping original action to replacement .
2020-06-26 15:33:47 +02:00
*
2022-04-12 17:12:47 +02:00
* @ return { AnyFunction } Higher - order reducer .
2020-06-26 15:33:47 +02:00
* /
2021-05-19 17:09:27 +02:00
const replaceAction = replacer => reducer => ( state , action ) => {
return reducer ( state , replacer ( action ) ) ;
2020-06-26 15:33:47 +02:00
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var replace _action = ( replaceAction ) ;
2020-06-26 15:33:47 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/conservative-map-item.js
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* External dependencies
2018-12-14 05:41:57 +01:00
* /
2018-12-14 12:02:53 +01:00
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2022-04-12 17:12:47 +02:00
* Given the current and next item entity record , returns the minimally "modified"
2019-10-15 17:37:08 +02:00
* result of the next item , preferring value references from the original item
* if equal . If all values match , the original item is returned .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ param { Object } item Original item .
* @ param { Object } nextItem Next item .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ return { Object } Minimally modified merged item .
2018-12-14 05:41:57 +01:00
* /
2019-10-15 17:37:08 +02:00
function conservativeMapItem ( item , nextItem ) {
// Return next item in its entirety if there is no original item.
if ( ! item ) {
return nextItem ;
}
2021-05-19 17:09:27 +02:00
let hasChanges = false ;
const result = { } ;
for ( const key in nextItem ) {
2023-02-07 08:04:52 +01:00
if ( es6 _default ( ) ( item [ key ] , nextItem [ key ] ) ) {
2019-10-15 17:37:08 +02:00
result [ key ] = item [ key ] ;
} else {
hasChanges = true ;
result [ key ] = nextItem [ key ] ;
}
}
if ( ! hasChanges ) {
return item ;
2023-09-26 16:23:26 +02:00
}
// Only at this point, backfill properties from the original item which
2020-10-13 15:10:30 +02:00
// weren't explicitly set into the result above. This is an optimization
// to allow `hasChanges` to return early.
2021-05-19 17:09:27 +02:00
for ( const key in item ) {
if ( ! result . hasOwnProperty ( key ) ) {
result [ key ] = item [ key ] ;
2020-10-13 15:10:30 +02:00
}
2019-10-15 17:37:08 +02:00
}
return result ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/on-sub-key.js
2022-04-12 17:12:47 +02:00
/** @typedef {import('../types').AnyFunction} AnyFunction */
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Higher - order reducer creator which creates a combined reducer object , keyed
* by a property on the action object .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ param { string } actionProperty Action property by which to key object .
2018-12-14 05:41:57 +01:00
*
2022-04-12 17:12:47 +02:00
* @ return { AnyFunction } Higher - order reducer .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const onSubKey = actionProperty => reducer => ( state = { } , action ) => {
2021-05-19 17:09:27 +02:00
// Retrieve subkey from action. Do not track if undefined; useful for cases
// where reducer is scoped by action shape.
const key = action [ actionProperty ] ;
if ( key === undefined ) {
return state ;
2023-09-26 16:23:26 +02:00
}
2018-12-14 05:41:57 +01:00
2023-09-26 16:23:26 +02:00
// Avoid updating state if unchanged. Note that this also accounts for a
// reducer which returns undefined on a key which is not yet tracked.
2021-05-19 17:09:27 +02:00
const nextKeyState = reducer ( state [ key ] , action ) ;
if ( nextKeyState === state [ key ] ) {
return state ;
}
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ key ] : nextKeyState
2019-10-15 17:37:08 +02:00
} ;
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var on _sub _key = ( onSubKey ) ;
2018-12-18 04:14:52 +01:00
2023-06-27 16:24:19 +02:00
; // CONCATENATED MODULE: ./node_modules/tslib/tslib.es6.mjs
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Copyright ( c ) Microsoft Corporation .
Permission to use , copy , modify , and / or distribute this software for any
purpose with or without fee is hereby granted .
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS . IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL , DIRECT ,
INDIRECT , OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE , DATA OR PROFITS , WHETHER IN AN ACTION OF CONTRACT , NEGLIGENCE OR
OTHER TORTIOUS ACTION , ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/* global Reflect, Promise, SuppressedError, Symbol */
var extendStatics = function ( d , b ) {
extendStatics = Object . setPrototypeOf ||
( { _ _proto _ _ : [ ] } instanceof Array && function ( d , b ) { d . _ _proto _ _ = b ; } ) ||
function ( d , b ) { for ( var p in b ) if ( Object . prototype . hasOwnProperty . call ( b , p ) ) d [ p ] = b [ p ] ; } ;
return extendStatics ( d , b ) ;
} ;
function _ _extends ( d , b ) {
if ( typeof b !== "function" && b !== null )
throw new TypeError ( "Class extends value " + String ( b ) + " is not a constructor or null" ) ;
extendStatics ( d , b ) ;
function _ _ ( ) { this . constructor = d ; }
d . prototype = b === null ? Object . create ( b ) : ( _ _ . prototype = b . prototype , new _ _ ( ) ) ;
}
var _ _assign = function ( ) {
_ _assign = Object . assign || function _ _assign ( t ) {
for ( var s , i = 1 , n = arguments . length ; i < n ; i ++ ) {
s = arguments [ i ] ;
for ( var p in s ) if ( Object . prototype . hasOwnProperty . call ( s , p ) ) t [ p ] = s [ p ] ;
}
return t ;
}
return _ _assign . apply ( this , arguments ) ;
}
function _ _rest ( s , e ) {
var t = { } ;
for ( var p in s ) if ( Object . prototype . hasOwnProperty . call ( s , p ) && e . indexOf ( p ) < 0 )
t [ p ] = s [ p ] ;
if ( s != null && typeof Object . getOwnPropertySymbols === "function" )
for ( var i = 0 , p = Object . getOwnPropertySymbols ( s ) ; i < p . length ; i ++ ) {
if ( e . indexOf ( p [ i ] ) < 0 && Object . prototype . propertyIsEnumerable . call ( s , p [ i ] ) )
t [ p [ i ] ] = s [ p [ i ] ] ;
}
return t ;
}
function _ _decorate ( decorators , target , key , desc ) {
var c = arguments . length , r = c < 3 ? target : desc === null ? desc = Object . getOwnPropertyDescriptor ( target , key ) : desc , d ;
if ( typeof Reflect === "object" && typeof Reflect . decorate === "function" ) r = Reflect . decorate ( decorators , target , key , desc ) ;
else for ( var i = decorators . length - 1 ; i >= 0 ; i -- ) if ( d = decorators [ i ] ) r = ( c < 3 ? d ( r ) : c > 3 ? d ( target , key , r ) : d ( target , key ) ) || r ;
return c > 3 && r && Object . defineProperty ( target , key , r ) , r ;
}
function _ _param ( paramIndex , decorator ) {
return function ( target , key ) { decorator ( target , key , paramIndex ) ; }
}
function _ _esDecorate ( ctor , descriptorIn , decorators , contextIn , initializers , extraInitializers ) {
function accept ( f ) { if ( f !== void 0 && typeof f !== "function" ) throw new TypeError ( "Function expected" ) ; return f ; }
var kind = contextIn . kind , key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value" ;
var target = ! descriptorIn && ctor ? contextIn [ "static" ] ? ctor : ctor . prototype : null ;
var descriptor = descriptorIn || ( target ? Object . getOwnPropertyDescriptor ( target , contextIn . name ) : { } ) ;
var _ , done = false ;
for ( var i = decorators . length - 1 ; i >= 0 ; i -- ) {
var context = { } ;
for ( var p in contextIn ) context [ p ] = p === "access" ? { } : contextIn [ p ] ;
for ( var p in contextIn . access ) context . access [ p ] = contextIn . access [ p ] ;
context . addInitializer = function ( f ) { if ( done ) throw new TypeError ( "Cannot add initializers after decoration has completed" ) ; extraInitializers . push ( accept ( f || null ) ) ; } ;
var result = ( 0 , decorators [ i ] ) ( kind === "accessor" ? { get : descriptor . get , set : descriptor . set } : descriptor [ key ] , context ) ;
if ( kind === "accessor" ) {
if ( result === void 0 ) continue ;
if ( result === null || typeof result !== "object" ) throw new TypeError ( "Object expected" ) ;
if ( _ = accept ( result . get ) ) descriptor . get = _ ;
if ( _ = accept ( result . set ) ) descriptor . set = _ ;
if ( _ = accept ( result . init ) ) initializers . unshift ( _ ) ;
}
else if ( _ = accept ( result ) ) {
if ( kind === "field" ) initializers . unshift ( _ ) ;
else descriptor [ key ] = _ ;
}
}
if ( target ) Object . defineProperty ( target , contextIn . name , descriptor ) ;
done = true ;
} ;
function _ _runInitializers ( thisArg , initializers , value ) {
var useValue = arguments . length > 2 ;
for ( var i = 0 ; i < initializers . length ; i ++ ) {
value = useValue ? initializers [ i ] . call ( thisArg , value ) : initializers [ i ] . call ( thisArg ) ;
}
return useValue ? value : void 0 ;
} ;
function _ _propKey ( x ) {
return typeof x === "symbol" ? x : "" . concat ( x ) ;
} ;
function _ _setFunctionName ( f , name , prefix ) {
if ( typeof name === "symbol" ) name = name . description ? "[" . concat ( name . description , "]" ) : "" ;
return Object . defineProperty ( f , "name" , { configurable : true , value : prefix ? "" . concat ( prefix , " " , name ) : name } ) ;
} ;
function _ _metadata ( metadataKey , metadataValue ) {
if ( typeof Reflect === "object" && typeof Reflect . metadata === "function" ) return Reflect . metadata ( metadataKey , metadataValue ) ;
}
function _ _awaiter ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ) ; } ) ; }
return new ( P || ( P = Promise ) ) ( function ( resolve , reject ) {
function fulfilled ( value ) { try { step ( generator . next ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function rejected ( value ) { try { step ( generator [ "throw" ] ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function step ( result ) { result . done ? resolve ( result . value ) : adopt ( result . value ) . then ( fulfilled , rejected ) ; }
step ( ( generator = generator . apply ( thisArg , _arguments || [ ] ) ) . next ( ) ) ;
} ) ;
}
function _ _generator ( thisArg , body ) {
var _ = { label : 0 , sent : function ( ) { if ( t [ 0 ] & 1 ) throw t [ 1 ] ; return t [ 1 ] ; } , trys : [ ] , ops : [ ] } , f , y , t , g ;
return g = { next : verb ( 0 ) , "throw" : verb ( 1 ) , "return" : verb ( 2 ) } , typeof Symbol === "function" && ( g [ Symbol . iterator ] = function ( ) { return this ; } ) , g ;
function verb ( n ) { return function ( v ) { return step ( [ n , v ] ) ; } ; }
function step ( op ) {
if ( f ) throw new TypeError ( "Generator is already executing." ) ;
while ( g && ( g = 0 , op [ 0 ] && ( _ = 0 ) ) , _ ) try {
if ( f = 1 , y && ( t = op [ 0 ] & 2 ? y [ "return" ] : op [ 0 ] ? y [ "throw" ] || ( ( t = y [ "return" ] ) && t . call ( y ) , 0 ) : y . next ) && ! ( t = t . call ( y , op [ 1 ] ) ) . done ) return t ;
if ( y = 0 , t ) op = [ op [ 0 ] & 2 , t . value ] ;
switch ( op [ 0 ] ) {
case 0 : case 1 : t = op ; break ;
case 4 : _ . label ++ ; return { value : op [ 1 ] , done : false } ;
case 5 : _ . label ++ ; y = op [ 1 ] ; op = [ 0 ] ; continue ;
case 7 : op = _ . ops . pop ( ) ; _ . trys . pop ( ) ; continue ;
default :
if ( ! ( t = _ . trys , t = t . length > 0 && t [ t . length - 1 ] ) && ( op [ 0 ] === 6 || op [ 0 ] === 2 ) ) { _ = 0 ; continue ; }
if ( op [ 0 ] === 3 && ( ! t || ( op [ 1 ] > t [ 0 ] && op [ 1 ] < t [ 3 ] ) ) ) { _ . label = op [ 1 ] ; break ; }
if ( op [ 0 ] === 6 && _ . label < t [ 1 ] ) { _ . label = t [ 1 ] ; t = op ; break ; }
if ( t && _ . label < t [ 2 ] ) { _ . label = t [ 2 ] ; _ . ops . push ( op ) ; break ; }
if ( t [ 2 ] ) _ . ops . pop ( ) ;
_ . trys . pop ( ) ; continue ;
}
op = body . call ( thisArg , _ ) ;
} catch ( e ) { op = [ 6 , e ] ; y = 0 ; } finally { f = t = 0 ; }
if ( op [ 0 ] & 5 ) throw op [ 1 ] ; return { value : op [ 0 ] ? op [ 1 ] : void 0 , done : true } ;
}
}
var _ _createBinding = Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
var desc = Object . getOwnPropertyDescriptor ( m , k ) ;
if ( ! desc || ( "get" in desc ? ! m . _ _esModule : desc . writable || desc . configurable ) ) {
desc = { enumerable : true , get : function ( ) { return m [ k ] ; } } ;
}
Object . defineProperty ( o , k2 , desc ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ;
function _ _exportStar ( m , o ) {
for ( var p in m ) if ( p !== "default" && ! Object . prototype . hasOwnProperty . call ( o , p ) ) _ _createBinding ( o , m , p ) ;
}
function _ _values ( o ) {
var s = typeof Symbol === "function" && Symbol . iterator , m = s && o [ s ] , i = 0 ;
if ( m ) return m . call ( o ) ;
if ( o && typeof o . length === "number" ) return {
next : function ( ) {
if ( o && i >= o . length ) o = void 0 ;
return { value : o && o [ i ++ ] , done : ! o } ;
}
} ;
throw new TypeError ( s ? "Object is not iterable." : "Symbol.iterator is not defined." ) ;
}
function _ _read ( o , n ) {
var m = typeof Symbol === "function" && o [ Symbol . iterator ] ;
if ( ! m ) return o ;
var i = m . call ( o ) , r , ar = [ ] , e ;
try {
while ( ( n === void 0 || n -- > 0 ) && ! ( r = i . next ( ) ) . done ) ar . push ( r . value ) ;
}
catch ( error ) { e = { error : error } ; }
finally {
try {
if ( r && ! r . done && ( m = i [ "return" ] ) ) m . call ( i ) ;
}
finally { if ( e ) throw e . error ; }
}
return ar ;
}
/** @deprecated */
function _ _spread ( ) {
for ( var ar = [ ] , i = 0 ; i < arguments . length ; i ++ )
ar = ar . concat ( _ _read ( arguments [ i ] ) ) ;
return ar ;
}
/** @deprecated */
function _ _spreadArrays ( ) {
for ( var s = 0 , i = 0 , il = arguments . length ; i < il ; i ++ ) s += arguments [ i ] . length ;
for ( var r = Array ( s ) , k = 0 , i = 0 ; i < il ; i ++ )
for ( var a = arguments [ i ] , j = 0 , jl = a . length ; j < jl ; j ++ , k ++ )
r [ k ] = a [ j ] ;
return r ;
}
function _ _spreadArray ( to , from , pack ) {
if ( pack || arguments . length === 2 ) for ( var i = 0 , l = from . length , ar ; i < l ; i ++ ) {
if ( ar || ! ( i in from ) ) {
if ( ! ar ) ar = Array . prototype . slice . call ( from , 0 , i ) ;
ar [ i ] = from [ i ] ;
}
}
return to . concat ( ar || Array . prototype . slice . call ( from ) ) ;
}
function _ _await ( v ) {
return this instanceof _ _await ? ( this . v = v , this ) : new _ _await ( v ) ;
}
function _ _asyncGenerator ( thisArg , _arguments , generator ) {
if ( ! Symbol . asyncIterator ) throw new TypeError ( "Symbol.asyncIterator is not defined." ) ;
var g = generator . apply ( thisArg , _arguments || [ ] ) , i , q = [ ] ;
return i = { } , verb ( "next" ) , verb ( "throw" ) , verb ( "return" ) , i [ Symbol . asyncIterator ] = function ( ) { return this ; } , i ;
function verb ( n ) { if ( g [ n ] ) i [ n ] = function ( v ) { return new Promise ( function ( a , b ) { q . push ( [ n , v , a , b ] ) > 1 || resume ( n , v ) ; } ) ; } ; }
function resume ( n , v ) { try { step ( g [ n ] ( v ) ) ; } catch ( e ) { settle ( q [ 0 ] [ 3 ] , e ) ; } }
function step ( r ) { r . value instanceof _ _await ? Promise . resolve ( r . value . v ) . then ( fulfill , reject ) : settle ( q [ 0 ] [ 2 ] , r ) ; }
function fulfill ( value ) { resume ( "next" , value ) ; }
function reject ( value ) { resume ( "throw" , value ) ; }
function settle ( f , v ) { if ( f ( v ) , q . shift ( ) , q . length ) resume ( q [ 0 ] [ 0 ] , q [ 0 ] [ 1 ] ) ; }
}
function _ _asyncDelegator ( o ) {
var i , p ;
return i = { } , verb ( "next" ) , verb ( "throw" , function ( e ) { throw e ; } ) , verb ( "return" ) , i [ Symbol . iterator ] = function ( ) { return this ; } , i ;
function verb ( n , f ) { i [ n ] = o [ n ] ? function ( v ) { return ( p = ! p ) ? { value : _ _await ( o [ n ] ( v ) ) , done : false } : f ? f ( v ) : v ; } : f ; }
}
function _ _asyncValues ( o ) {
if ( ! Symbol . asyncIterator ) throw new TypeError ( "Symbol.asyncIterator is not defined." ) ;
var m = o [ Symbol . asyncIterator ] , i ;
return m ? m . call ( o ) : ( o = typeof _ _values === "function" ? _ _values ( o ) : o [ Symbol . iterator ] ( ) , i = { } , verb ( "next" ) , verb ( "throw" ) , verb ( "return" ) , i [ Symbol . asyncIterator ] = function ( ) { return this ; } , i ) ;
function verb ( n ) { i [ n ] = o [ n ] && function ( v ) { return new Promise ( function ( resolve , reject ) { v = o [ n ] ( v ) , settle ( resolve , reject , v . done , v . value ) ; } ) ; } ; }
function settle ( resolve , reject , d , v ) { Promise . resolve ( v ) . then ( function ( v ) { resolve ( { value : v , done : d } ) ; } , reject ) ; }
}
function _ _makeTemplateObject ( cooked , raw ) {
if ( Object . defineProperty ) { Object . defineProperty ( cooked , "raw" , { value : raw } ) ; } else { cooked . raw = raw ; }
return cooked ;
} ;
var _ _setModuleDefault = Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ;
function _ _importStar ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . prototype . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
}
function _ _importDefault ( mod ) {
return ( mod && mod . _ _esModule ) ? mod : { default : mod } ;
}
function _ _classPrivateFieldGet ( receiver , state , kind , f ) {
if ( kind === "a" && ! f ) throw new TypeError ( "Private accessor was defined without a getter" ) ;
if ( typeof state === "function" ? receiver !== state || ! f : ! state . has ( receiver ) ) throw new TypeError ( "Cannot read private member from an object whose class did not declare it" ) ;
return kind === "m" ? f : kind === "a" ? f . call ( receiver ) : f ? f . value : state . get ( receiver ) ;
}
function _ _classPrivateFieldSet ( receiver , state , value , kind , f ) {
if ( kind === "m" ) throw new TypeError ( "Private method is not writable" ) ;
if ( kind === "a" && ! f ) throw new TypeError ( "Private accessor was defined without a setter" ) ;
if ( typeof state === "function" ? receiver !== state || ! f : ! state . has ( receiver ) ) throw new TypeError ( "Cannot write private member to an object whose class did not declare it" ) ;
return ( kind === "a" ? f . call ( receiver , value ) : f ? f . value = value : state . set ( receiver , value ) ) , value ;
}
function _ _classPrivateFieldIn ( state , receiver ) {
if ( receiver === null || ( typeof receiver !== "object" && typeof receiver !== "function" ) ) throw new TypeError ( "Cannot use 'in' operator on non-object" ) ;
return typeof state === "function" ? receiver === state : state . has ( receiver ) ;
}
function _ _addDisposableResource ( env , value , async ) {
if ( value !== null && value !== void 0 ) {
2023-09-21 15:26:32 +02:00
if ( typeof value !== "object" && typeof value !== "function" ) throw new TypeError ( "Object expected." ) ;
2023-06-27 16:24:19 +02:00
var dispose ;
if ( async ) {
if ( ! Symbol . asyncDispose ) throw new TypeError ( "Symbol.asyncDispose is not defined." ) ;
dispose = value [ Symbol . asyncDispose ] ;
}
if ( dispose === void 0 ) {
if ( ! Symbol . dispose ) throw new TypeError ( "Symbol.dispose is not defined." ) ;
dispose = value [ Symbol . dispose ] ;
}
if ( typeof dispose !== "function" ) throw new TypeError ( "Object not disposable." ) ;
env . stack . push ( { value : value , dispose : dispose , async : async } ) ;
}
else if ( async ) {
env . stack . push ( { async : true } ) ;
}
return value ;
}
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function ( error , suppressed , message ) {
var e = new Error ( message ) ;
return e . name = "SuppressedError" , e . error = error , e . suppressed = suppressed , e ;
} ;
function _ _disposeResources ( env ) {
function fail ( e ) {
env . error = env . hasError ? new _SuppressedError ( e , env . error , "An error was suppressed during disposal." ) : e ;
env . hasError = true ;
}
function next ( ) {
while ( env . stack . length ) {
var rec = env . stack . pop ( ) ;
try {
var result = rec . dispose && rec . dispose . call ( rec . value ) ;
if ( rec . async ) return Promise . resolve ( result ) . then ( next , function ( e ) { fail ( e ) ; return next ( ) ; } ) ;
}
catch ( e ) {
fail ( e ) ;
}
}
if ( env . hasError ) throw env . error ;
}
return next ( ) ;
}
2023-09-21 15:26:32 +02:00
/* harmony default export */ var tslib _es6 = ( {
2023-06-27 16:24:19 +02:00
_ _extends ,
_ _assign ,
_ _rest ,
_ _decorate ,
_ _param ,
_ _metadata ,
_ _awaiter ,
_ _generator ,
_ _createBinding ,
_ _exportStar ,
_ _values ,
_ _read ,
_ _spread ,
_ _spreadArrays ,
_ _spreadArray ,
_ _await ,
_ _asyncGenerator ,
_ _asyncDelegator ,
_ _asyncValues ,
_ _makeTemplateObject ,
_ _importStar ,
_ _importDefault ,
_ _classPrivateFieldGet ,
_ _classPrivateFieldSet ,
_ _classPrivateFieldIn ,
_ _addDisposableResource ,
_ _disposeResources ,
} ) ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/lower-case/dist.es2015/index.js
/ * *
* Source : ftp : //ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
* /
var SUPPORTED _LOCALE = {
tr : {
regexp : /\u0130|\u0049|\u0049\u0307/g ,
map : {
İ : "\u0069" ,
I : "\u0131" ,
I ̇ : "\u0069" ,
} ,
} ,
az : {
regexp : /\u0130/g ,
map : {
İ : "\u0069" ,
I : "\u0131" ,
I ̇ : "\u0069" ,
} ,
} ,
lt : {
regexp : /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g ,
map : {
I : "\u0069\u0307" ,
J : "\u006A\u0307" ,
Į : "\u012F\u0307" ,
Ì : "\u0069\u0307\u0300" ,
Í : "\u0069\u0307\u0301" ,
Ĩ : "\u0069\u0307\u0303" ,
} ,
} ,
} ;
/ * *
* Localized lower case .
* /
function localeLowerCase ( str , locale ) {
var lang = SUPPORTED _LOCALE [ locale . toLowerCase ( ) ] ;
if ( lang )
return lowerCase ( str . replace ( lang . regexp , function ( m ) { return lang . map [ m ] ; } ) ) ;
return lowerCase ( str ) ;
}
/ * *
* Lower case as a function .
* /
function lowerCase ( str ) {
return str . toLowerCase ( ) ;
}
; // CONCATENATED MODULE: ./node_modules/no-case/dist.es2015/index.js
// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
var DEFAULT _SPLIT _REGEXP = [ /([a-z0-9])([A-Z])/g , /([A-Z])([A-Z][a-z])/g ] ;
// Remove all non-word characters.
var DEFAULT _STRIP _REGEXP = /[^A-Z0-9]+/gi ;
/ * *
* Normalize the string into something other libraries can manipulate easier .
* /
function noCase ( input , options ) {
if ( options === void 0 ) { options = { } ; }
var _a = options . splitRegexp , splitRegexp = _a === void 0 ? DEFAULT _SPLIT _REGEXP : _a , _b = options . stripRegexp , stripRegexp = _b === void 0 ? DEFAULT _STRIP _REGEXP : _b , _c = options . transform , transform = _c === void 0 ? lowerCase : _c , _d = options . delimiter , delimiter = _d === void 0 ? " " : _d ;
var result = replace ( replace ( input , splitRegexp , "$1\0$2" ) , stripRegexp , "\0" ) ;
var start = 0 ;
var end = result . length ;
// Trim the delimiter from around the output string.
while ( result . charAt ( start ) === "\0" )
start ++ ;
while ( result . charAt ( end - 1 ) === "\0" )
end -- ;
// Transform each token independently.
return result . slice ( start , end ) . split ( "\0" ) . map ( transform ) . join ( delimiter ) ;
}
/ * *
* Replace ` re ` in the input string with the replacement value .
* /
function replace ( input , re , value ) {
if ( re instanceof RegExp )
return input . replace ( re , value ) ;
return re . reduce ( function ( input , re ) { return input . replace ( re , value ) ; } , input ) ;
}
; // CONCATENATED MODULE: ./node_modules/upper-case-first/dist.es2015/index.js
/ * *
* Upper case the first character of an input string .
* /
function upperCaseFirst ( input ) {
return input . charAt ( 0 ) . toUpperCase ( ) + input . substr ( 1 ) ;
}
; // CONCATENATED MODULE: ./node_modules/capital-case/dist.es2015/index.js
function capitalCaseTransform ( input ) {
return upperCaseFirst ( input . toLowerCase ( ) ) ;
}
function capitalCase ( input , options ) {
if ( options === void 0 ) { options = { } ; }
return noCase ( input , _ _assign ( { delimiter : " " , transform : capitalCaseTransform } , options ) ) ;
}
; // CONCATENATED MODULE: ./node_modules/pascal-case/dist.es2015/index.js
function pascalCaseTransform ( input , index ) {
var firstChar = input . charAt ( 0 ) ;
var lowerChars = input . substr ( 1 ) . toLowerCase ( ) ;
if ( index > 0 && firstChar >= "0" && firstChar <= "9" ) {
return "_" + firstChar + lowerChars ;
}
return "" + firstChar . toUpperCase ( ) + lowerChars ;
}
function dist _es2015 _pascalCaseTransformMerge ( input ) {
return input . charAt ( 0 ) . toUpperCase ( ) + input . slice ( 1 ) . toLowerCase ( ) ;
}
function pascalCase ( input , options ) {
if ( options === void 0 ) { options = { } ; }
return noCase ( input , _ _assign ( { delimiter : "" , transform : pascalCaseTransform } , options ) ) ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: external ["wp","apiFetch"]
2023-09-21 15:26:32 +02:00
var external _wp _apiFetch _namespaceObject = window [ "wp" ] [ "apiFetch" ] ;
2022-04-11 14:04:30 +02:00
var external _wp _apiFetch _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( external _wp _apiFetch _namespaceObject ) ;
; // CONCATENATED MODULE: external ["wp","i18n"]
2023-09-21 15:26:32 +02:00
var external _wp _i18n _namespaceObject = window [ "wp" ] [ "i18n" ] ;
2023-09-26 16:23:26 +02:00
; // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/native.js
const randomUUID = typeof crypto !== 'undefined' && crypto . randomUUID && crypto . randomUUID . bind ( crypto ) ;
/* harmony default export */ var esm _browser _native = ( {
randomUUID
} ) ;
; // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/rng.js
2022-04-11 14:04:30 +02:00
// Unique ID creation requires a high quality random # generator. In the browser we therefore
// require the crypto API and do not support built-in fallback to lower quality random number
// generators (like Math.random()).
2023-09-26 16:23:26 +02:00
let getRandomValues ;
const rnds8 = new Uint8Array ( 16 ) ;
2022-04-11 14:04:30 +02:00
function rng ( ) {
// lazy load so that environments that need to polyfill have a chance to do so
if ( ! getRandomValues ) {
2023-09-26 16:23:26 +02:00
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
getRandomValues = typeof crypto !== 'undefined' && crypto . getRandomValues && crypto . getRandomValues . bind ( crypto ) ;
2022-04-11 14:04:30 +02:00
if ( ! getRandomValues ) {
throw new Error ( 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported' ) ;
}
}
return getRandomValues ( rnds8 ) ;
}
2023-09-26 16:23:26 +02:00
; // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/stringify.js
2022-04-11 14:04:30 +02:00
/ * *
* Convert array of 16 byte values to UUID string format of the form :
* XXXXXXXX - XXXX - XXXX - XXXX - XXXXXXXXXXXX
* /
2023-09-26 16:23:26 +02:00
const byteToHex = [ ] ;
2022-04-11 14:04:30 +02:00
2023-09-26 16:23:26 +02:00
for ( let i = 0 ; i < 256 ; ++ i ) {
byteToHex . push ( ( i + 0x100 ) . toString ( 16 ) . slice ( 1 ) ) ;
2022-04-11 14:04:30 +02:00
}
2023-09-26 16:23:26 +02:00
function unsafeStringify ( arr , offset = 0 ) {
2022-04-11 14:04:30 +02:00
// Note: Be careful editing this code! It's been tuned for performance
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
2023-09-26 16:23:26 +02:00
return byteToHex [ arr [ offset + 0 ] ] + byteToHex [ arr [ offset + 1 ] ] + byteToHex [ arr [ offset + 2 ] ] + byteToHex [ arr [ offset + 3 ] ] + '-' + byteToHex [ arr [ offset + 4 ] ] + byteToHex [ arr [ offset + 5 ] ] + '-' + byteToHex [ arr [ offset + 6 ] ] + byteToHex [ arr [ offset + 7 ] ] + '-' + byteToHex [ arr [ offset + 8 ] ] + byteToHex [ arr [ offset + 9 ] ] + '-' + byteToHex [ arr [ offset + 10 ] ] + byteToHex [ arr [ offset + 11 ] ] + byteToHex [ arr [ offset + 12 ] ] + byteToHex [ arr [ offset + 13 ] ] + byteToHex [ arr [ offset + 14 ] ] + byteToHex [ arr [ offset + 15 ] ] ;
}
function stringify ( arr , offset = 0 ) {
const uuid = unsafeStringify ( arr , offset ) ; // Consistency check for valid UUID. If this throws, it's likely due to one
2022-04-11 14:04:30 +02:00
// of the following:
// - One or more input array values don't map to a hex octet (leading to
// "undefined" in the uuid)
// - Invalid input values for the RFC `version` or `variant` fields
2023-09-26 16:23:26 +02:00
if ( ! validate ( uuid ) ) {
2022-04-11 14:04:30 +02:00
throw TypeError ( 'Stringified UUID is invalid' ) ;
}
return uuid ;
}
2023-09-26 16:23:26 +02:00
/* harmony default export */ var esm _browser _stringify = ( ( /* unused pure expression or super */ null && ( stringify ) ) ) ;
; // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v4.js
2022-04-11 14:04:30 +02:00
2022-09-23 21:55:30 +02:00
2023-08-03 06:59:37 +02:00
2022-04-11 14:04:30 +02:00
function v4 ( options , buf , offset ) {
2023-09-26 16:23:26 +02:00
if ( esm _browser _native . randomUUID && ! buf && ! options ) {
return esm _browser _native . randomUUID ( ) ;
}
2022-04-11 14:04:30 +02:00
options = options || { } ;
2023-09-26 16:23:26 +02:00
const rnds = options . random || ( options . rng || rng ) ( ) ; // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
2022-04-11 14:04:30 +02:00
rnds [ 6 ] = rnds [ 6 ] & 0x0f | 0x40 ;
rnds [ 8 ] = rnds [ 8 ] & 0x3f | 0x80 ; // Copy bytes to buffer, if provided
2021-11-08 15:29:21 +01:00
2022-04-11 14:04:30 +02:00
if ( buf ) {
offset = offset || 0 ;
2018-12-18 04:14:52 +01:00
2023-09-26 16:23:26 +02:00
for ( let i = 0 ; i < 16 ; ++ i ) {
2022-04-11 14:04:30 +02:00
buf [ offset + i ] = rnds [ i ] ;
}
2021-01-28 03:04:13 +01:00
2022-04-11 14:04:30 +02:00
return buf ;
}
2020-10-13 15:10:30 +02:00
2023-09-26 16:23:26 +02:00
return unsafeStringify ( rnds ) ;
2022-04-11 14:04:30 +02:00
}
2021-11-08 15:29:21 +01:00
2023-09-21 15:26:32 +02:00
/* harmony default export */ var esm _browser _v4 = ( v4 ) ;
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: external ["wp","url"]
2023-09-21 15:26:32 +02:00
var external _wp _url _namespaceObject = window [ "wp" ] [ "url" ] ;
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: external ["wp","deprecated"]
2023-09-21 15:26:32 +02:00
var external _wp _deprecated _namespaceObject = window [ "wp" ] [ "deprecated" ] ;
2022-04-11 14:04:30 +02:00
var external _wp _deprecated _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( external _wp _deprecated _namespaceObject ) ;
2023-09-26 16:23:26 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/set-nested-value.js
/ * *
* Sets the value at path of object .
* If a portion of path doesn ’ t exist , it ’ s created .
* Arrays are created for missing index properties while objects are created
* for all other missing properties .
*
* Path is specified as either :
* - a string of properties , separated by dots , for example : "x.y" .
* - an array of properties , for example ` [ 'x', 'y' ] ` .
*
* This function intentionally mutates the input object .
*
* Inspired by _ . set ( ) .
*
* @ see https : //lodash.com/docs/4.17.15#set
*
* @ todo Needs to be deduplicated with its copy in ` @wordpress/edit-site ` .
*
* @ param { Object } object Object to modify
* @ param { Array | string } path Path of the property to set .
* @ param { * } value Value to set .
* /
function setNestedValue ( object , path , value ) {
if ( ! object || typeof object !== 'object' ) {
return object ;
}
const normalizedPath = Array . isArray ( path ) ? path : path . split ( '.' ) ;
normalizedPath . reduce ( ( acc , key , idx ) => {
if ( acc [ key ] === undefined ) {
if ( Number . isInteger ( normalizedPath [ idx + 1 ] ) ) {
acc [ key ] = [ ] ;
} else {
acc [ key ] = { } ;
}
}
if ( idx === normalizedPath . length - 1 ) {
acc [ key ] = value ;
}
return acc [ key ] ;
} , object ) ;
return object ;
}
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/get-nested-value.js
/ * *
* Helper util to return a value from a certain path of the object .
* Path is specified as either :
* - a string of properties , separated by dots , for example : "x.y" .
* - an array of properties , for example ` [ 'x', 'y' ] ` .
* You can also specify a default value in case the result is nullish .
*
* @ param { Object } object Input object .
* @ param { string | Array } path Path to the object property .
* @ param { * } defaultValue Default value if the value at the specified path is undefined .
* @ return { * } Value of the object property at the specified path .
* /
function getNestedValue ( object , path , defaultValue ) {
if ( ! object || typeof object !== 'object' || typeof path !== 'string' && ! Array . isArray ( path ) ) {
return object ;
}
const normalizedPath = Array . isArray ( path ) ? path : path . split ( '.' ) ;
let value = object ;
normalizedPath . forEach ( fieldName => {
value = value ? . [ fieldName ] ;
} ) ;
return value !== undefined ? value : defaultValue ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/actions.js
2019-09-19 17:19:18 +02:00
/ * *
2020-06-26 15:33:47 +02:00
* Returns an action object used in signalling that items have been received .
2019-09-19 17:19:18 +02:00
*
2021-01-28 03:04:13 +01:00
* @ param { Array } items Items received .
* @ param { ? Object } edits Optional edits to reset .
2019-09-19 17:19:18 +02:00
*
2020-06-26 15:33:47 +02:00
* @ return { Object } Action object .
2019-09-19 17:19:18 +02:00
* /
2021-01-28 03:04:13 +01:00
function receiveItems ( items , edits ) {
2020-06-26 15:33:47 +02:00
return {
type : 'RECEIVE_ITEMS' ,
2023-02-07 08:04:52 +01:00
items : Array . isArray ( items ) ? items : [ items ] ,
2021-01-28 03:04:13 +01:00
persistedEdits : edits
2020-06-26 15:33:47 +02:00
} ;
2019-09-19 17:19:18 +02:00
}
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Returns an action object used in signalling that entity records have been
* deleted and they need to be removed from entities state .
*
2022-04-12 17:12:47 +02:00
* @ param { string } kind Kind of the removed entities .
* @ param { string } name Name of the removed entities .
* @ param { Array | number | string } records Record IDs of the removed entities .
* @ param { boolean } invalidateCache Controls whether we want to invalidate the cache .
2020-10-13 15:10:30 +02:00
* @ return { Object } Action object .
* /
2023-06-27 16:24:19 +02:00
function removeItems ( kind , name , records , invalidateCache = false ) {
2020-10-13 15:10:30 +02:00
return {
type : 'REMOVE_ITEMS' ,
2023-02-07 08:04:52 +01:00
itemIds : Array . isArray ( records ) ? records : [ records ] ,
2021-05-19 17:09:27 +02:00
kind ,
name ,
invalidateCache
2020-10-13 15:10:30 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2020-06-26 15:33:47 +02:00
* Returns an action object used in signalling that queried data has been
* received .
2018-12-18 04:14:52 +01:00
*
2020-06-26 15:33:47 +02:00
* @ param { Array } items Queried items received .
* @ param { ? Object } query Optional query object .
2021-01-28 03:04:13 +01:00
* @ param { ? Object } edits Optional edits to reset .
2019-10-15 17:37:08 +02:00
*
2020-06-26 15:33:47 +02:00
* @ return { Object } Action object .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
function receiveQueriedItems ( items , query = { } , edits ) {
2023-09-26 16:23:26 +02:00
return {
... receiveItems ( items , edits ) ,
2021-05-19 17:09:27 +02:00
query
} ;
2020-06-26 15:33:47 +02:00
}
2018-12-14 05:41:57 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/batch/default-processor.js
2018-12-14 05:41:57 +01:00
/ * *
2020-10-13 15:10:30 +02:00
* WordPress dependencies
2019-10-15 17:37:08 +02:00
* /
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
* Maximum number of requests to place in a single batch request . Obtained by
* sending a preflight OPTIONS request to / batch / v1 / .
*
* @ type { number ? }
* /
let maxItems = null ;
2022-09-20 17:43:29 +02:00
function chunk ( arr , chunkSize ) {
const tmp = [ ... arr ] ;
const cache = [ ] ;
while ( tmp . length ) {
cache . push ( tmp . splice ( 0 , chunkSize ) ) ;
}
return cache ;
}
2023-09-26 16:23:26 +02:00
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
/ * *
* Default batch processor . Sends its input requests to / batch / v1 .
2021-02-02 06:17:13 +01:00
*
* @ param { Array } requests List of API requests to perform at once .
*
* @ return { Promise } Promise that resolves to a list of objects containing
2023-02-07 08:04:52 +01:00
* either ` output ` ( if that request was successful ) or ` error `
2021-02-02 06:17:13 +01:00
* ( if not ) .
* /
2021-05-19 17:09:27 +02:00
async function defaultProcessor ( requests ) {
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
if ( maxItems === null ) {
const preflightResponse = await external _wp _apiFetch _default ( ) ( {
path : '/batch/v1' ,
method : 'OPTIONS'
} ) ;
maxItems = preflightResponse . endpoints [ 0 ] . args . requests . maxItems ;
2021-05-19 17:09:27 +02:00
}
2023-09-26 16:23:26 +02:00
const results = [ ] ;
2021-02-02 06:17:13 +01:00
2023-09-26 16:23:26 +02:00
// @ts-ignore We would have crashed or never gotten to this point if we hadn't received the maxItems count.
2022-09-20 17:43:29 +02:00
for ( const batchRequests of chunk ( requests , maxItems ) ) {
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
const batchResponse = await external _wp _apiFetch _default ( ) ( {
path : '/batch/v1' ,
method : 'POST' ,
data : {
validation : 'require-all-validate' ,
requests : batchRequests . map ( request => ( {
path : request . path ,
body : request . data ,
// Rename 'data' to 'body'.
method : request . method ,
headers : request . headers
} ) )
}
} ) ;
let batchResults ;
if ( batchResponse . failed ) {
batchResults = batchResponse . responses . map ( response => ( {
2023-06-27 16:24:19 +02:00
error : response ? . body
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
} ) ) ;
2021-05-19 17:09:27 +02:00
} else {
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
batchResults = batchResponse . responses . map ( response => {
const result = { } ;
if ( response . status >= 200 && response . status < 300 ) {
result . output = response . body ;
} else {
result . error = response . body ;
}
return result ;
} ) ;
2021-05-19 17:09:27 +02:00
}
Editor: Update block editor packages for WordPress 5.8.1.
The following packages were updated:
- @wordpress/a11y to `3.1.2`
- @wordpress/annotations to `2.1.6`
- @wordpress/api-fetch to `5.1.2`
- @wordpress/autop to `3.1.2`
- @wordpress/babel-preset-default to `6.2.1`
- @wordpress/blob to `3.1.2`
- @wordpress/block-directory to `2.1.21`
- @wordpress/block-editor to `6.1.14`
- @wordpress/block-library to `3.2.19`
- @wordpress/block-serialization-default-parser to `4.1.2`
- @wordpress/blocks to `9.1.8`
- @wordpress/components to `14.1.11`
- @wordpress/compose to `4.1.6`
- @wordpress/core-data to `3.1.12`
- @wordpress/customize-widgets to `1.0.20`
- @wordpress/data-controls to `2.1.6`
- @wordpress/data to `5.1.6`
- @wordpress/date to `4.1.2`
- @wordpress/deprecated to `3.1.2`
- @wordpress/dom-ready to `3.1.2`
- @wordpress/dom to `3.1.5`
- @wordpress/e2e-test-utils to `5.3.1`
- @wordpress/edit-post to `4.1.21`
- @wordpress/edit-widgets to `2.1.21`
- @wordpress/editor to `10.1.17`
- @wordpress/element to `3.1.2`
- @wordpress/escape-html to `2.1.2`
- @wordpress/format-library to `2.1.14`
- @wordpress/html-entities to `3.1.2`
- @wordpress/i18n to `4.1.2`
- @wordpress/icons to `4.0.3`
- @wordpress/interface to `3.1.12`
- @wordpress/keyboard-shortcuts to `2.1.7`
- @wordpress/keycodes to `3.1.2`
- @wordpress/list-reusable-blocks to `2.1.11`
- @wordpress/media-utils to `2.1.2`
- @wordpress/notices to `3.1.6`
- @wordpress/nux to `4.1.11`
- @wordpress/plugins to `3.1.6`
- @wordpress/primitives to `2.1.2`
- @wordpress/priority-queue to `2.1.2`
- @wordpress/react-i18n to `2.1.2`
- @wordpress/redux-routine to `4.1.2`
- @wordpress/reusable-blocks to `2.1.17`
- @wordpress/rich-text to `4.1.6`
- @wordpress/scripts to `16.1.5`
- @wordpress/server-side-render to `2.1.12`
- @wordpress/shortcode to `3.1.2`
- @wordpress/url to `3.1.2`
- @wordpress/viewport to `3.1.6`
- @wordpress/warning to `2.1.2`
- @wordpress/widgets to `1.1.19`
- @wordpress/wordcount to `3.1.2`
Props oandregal, juanmaguitar, gziolo, jblz, talldanwp, ribaricplusplus, peterwisoncc, youknowriad, paaljoachim, kreppar, ellatrix, aristath, walbo, ajlende, kevin940726, mamaduka, ntsekouras, toro_unit, mkaz, joen, noisysocks, zieladam, andraganescu, antonvlasenko, terraling, dariak, vladytimy, circlecube, desrosj.
Fixes #54052, #52818.
Built from https://develop.svn.wordpress.org/trunk@51719
git-svn-id: http://core.svn.wordpress.org/trunk@51325 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-09-01 21:08:24 +02:00
results . push ( ... batchResults ) ;
}
return results ;
2021-02-02 06:17:13 +01:00
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/batch/create-batch.js
2021-02-02 06:17:13 +01:00
/ * *
* Internal dependencies
* /
2023-09-26 16:23:26 +02:00
2021-02-02 06:17:13 +01:00
/ * *
* Creates a batch , which can be used to combine multiple API requests into one
* API request using the WordPress batch processing API ( / v 1 / b a t c h ) .
*
* ` ` `
* const batch = createBatch ( ) ;
* const dunePromise = batch . add ( {
* path : '/v1/books' ,
* method : 'POST' ,
* data : { title : 'Dune' }
* } ) ;
* const lotrPromise = batch . add ( {
* path : '/v1/books' ,
* method : 'POST' ,
* data : { title : 'Lord of the Rings' }
* } ) ;
* const isSuccess = await batch . run ( ) ; // Sends one POST to /v1/batch.
* if ( isSuccess ) {
* console . log (
* 'Saved two books:' ,
* await dunePromise ,
* await lotrPromise
* ) ;
* }
* ` ` `
*
* @ param { Function } [ processor ] Processor function . Can be used to replace the
* default functionality which is to send an API
* request to / v1 / batch . Is given an array of
* inputs and must return a promise that
* resolves to an array of objects containing
* either ` output ` or ` error ` .
* /
2023-06-27 16:24:19 +02:00
function createBatch ( processor = defaultProcessor ) {
2021-05-19 17:09:27 +02:00
let lastId = 0 ;
2022-04-12 17:12:47 +02:00
/** @type {Array<{ input: any; resolve: ( value: any ) => void; reject: ( error: any ) => void }>} */
2021-05-19 17:09:27 +02:00
let queue = [ ] ;
const pending = new ObservableSet ( ) ;
2021-02-02 06:17:13 +01:00
return {
/ * *
* Adds an input to the batch and returns a promise that is resolved or
* rejected when the input is processed by ` batch.run() ` .
*
* You may also pass a thunk which allows inputs to be added
* asychronously .
*
* ` ` `
* // Both are allowed:
* batch . add ( { path : '/v1/books' , ... } ) ;
* batch . add ( ( add ) => add ( { path : '/v1/books' , ... } ) ) ;
* ` ` `
*
* If a thunk is passed , ` batch.run() ` will pause until either :
*
* - The thunk calls its ` add ` argument , or ;
* - The thunk returns a promise and that promise resolves , or ;
* - The thunk returns a non - promise .
*
* @ param { any | Function } inputOrThunk Input to add or thunk to execute .
2021-11-08 15:29:21 +01:00
*
2021-02-02 06:17:13 +01:00
* @ return { Promise | any } If given an input , returns a promise that
* is resolved or rejected when the batch is
* processed . If given a thunk , returns the return
* value of that thunk .
* /
2021-05-19 17:09:27 +02:00
add ( inputOrThunk ) {
const id = ++ lastId ;
2021-02-02 06:17:13 +01:00
pending . add ( id ) ;
2021-05-19 17:09:27 +02:00
const add = input => new Promise ( ( resolve , reject ) => {
queue . push ( {
input ,
resolve ,
reject
2021-02-02 06:17:13 +01:00
} ) ;
2021-05-19 17:09:27 +02:00
pending . delete ( id ) ;
} ) ;
2022-09-20 17:43:29 +02:00
if ( typeof inputOrThunk === 'function' ) {
2021-05-19 17:09:27 +02:00
return Promise . resolve ( inputOrThunk ( add ) ) . finally ( ( ) => {
2021-02-02 06:17:13 +01:00
pending . delete ( id ) ;
} ) ;
}
return add ( inputOrThunk ) ;
} ,
/ * *
* Runs the batch . This calls ` batchProcessor ` and resolves or rejects
* all promises returned by ` add() ` .
*
2022-04-12 17:12:47 +02:00
* @ return { Promise < boolean > } A promise that resolves to a boolean that is true
2021-02-02 06:17:13 +01:00
* if the processor returned no errors .
* /
2021-05-19 17:09:27 +02:00
async run ( ) {
if ( pending . size ) {
await new Promise ( resolve => {
const unsubscribe = pending . subscribe ( ( ) => {
if ( ! pending . size ) {
unsubscribe ( ) ;
2022-04-12 17:12:47 +02:00
resolve ( undefined ) ;
2021-02-02 06:17:13 +01:00
}
2021-05-19 17:09:27 +02:00
} ) ;
} ) ;
}
let results ;
try {
2023-06-27 16:24:19 +02:00
results = await processor ( queue . map ( ( {
input
} ) => input ) ) ;
2021-05-19 17:09:27 +02:00
if ( results . length !== queue . length ) {
throw new Error ( 'run: Array returned by processor must be same size as input array.' ) ;
}
} catch ( error ) {
for ( const {
reject
} of queue ) {
reject ( error ) ;
}
throw error ;
}
let isSuccess = true ;
2022-09-20 17:43:29 +02:00
results . forEach ( ( result , key ) => {
const queueItem = queue [ key ] ;
2023-06-27 16:24:19 +02:00
if ( result ? . error ) {
queueItem ? . reject ( result . error ) ;
2021-05-19 17:09:27 +02:00
isSuccess = false ;
} else {
var _result$output ;
2023-06-27 16:24:19 +02:00
queueItem ? . resolve ( ( _result$output = result ? . output ) !== null && _result$output !== void 0 ? _result$output : result ) ;
2021-05-19 17:09:27 +02:00
}
2022-09-20 17:43:29 +02:00
} ) ;
2021-05-19 17:09:27 +02:00
queue = [ ] ;
2021-02-02 06:17:13 +01:00
return isSuccess ;
}
2021-05-19 17:09:27 +02:00
} ;
}
class ObservableSet {
2023-06-27 16:24:19 +02:00
constructor ( ... args ) {
2021-05-19 17:09:27 +02:00
this . set = new Set ( ... args ) ;
this . subscribers = new Set ( ) ;
}
get size ( ) {
return this . set . size ;
}
2022-04-12 17:12:47 +02:00
add ( value ) {
this . set . add ( value ) ;
2021-05-19 17:09:27 +02:00
this . subscribers . forEach ( subscriber => subscriber ( ) ) ;
return this ;
}
2022-04-12 17:12:47 +02:00
delete ( value ) {
const isSuccess = this . set . delete ( value ) ;
2021-05-19 17:09:27 +02:00
this . subscribers . forEach ( subscriber => subscriber ( ) ) ;
return isSuccess ;
}
subscribe ( subscriber ) {
this . subscribers . add ( subscriber ) ;
return ( ) => {
this . subscribers . delete ( subscriber ) ;
} ;
}
}
2021-02-02 06:17:13 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/name.js
2021-02-02 06:17:13 +01:00
/ * *
2021-11-08 15:29:21 +01:00
* The reducer key used by core data in store registration .
* This is defined in a separate file to avoid cycle - dependency
*
* @ type { string }
2021-02-02 06:17:13 +01:00
* /
2021-11-08 15:29:21 +01:00
const STORE _NAME = 'core' ;
2021-02-02 06:17:13 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/actions.js
2021-02-02 06:17:13 +01:00
/ * *
* External dependencies
* /
2023-09-26 16:23:26 +02:00
2021-02-02 06:17:13 +01:00
/ * *
* WordPress dependencies
2020-10-13 15:10:30 +02:00
* /
2019-10-15 17:37:08 +02:00
2021-01-28 03:04:13 +01:00
2021-02-02 06:17:13 +01:00
/ * *
* Internal dependencies
* /
2023-06-27 16:24:19 +02:00
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns an action object used in signalling that authors have been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ param { string } queryID Query ID .
* @ param { Array | Object } users Users received .
2018-12-14 05:41:57 +01:00
*
* @ return { Object } Action object .
* /
2019-10-15 17:37:08 +02:00
function receiveUserQuery ( queryID , users ) {
2018-12-14 05:41:57 +01:00
return {
2019-10-15 17:37:08 +02:00
type : 'RECEIVE_USER_QUERY' ,
2023-02-07 08:04:52 +01:00
users : Array . isArray ( users ) ? users : [ users ] ,
2021-05-19 17:09:27 +02:00
queryID
2018-12-14 05:41:57 +01:00
} ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns an action used in signalling that the current user has been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ param { Object } currentUser Current user object .
2018-12-14 05:41:57 +01:00
*
* @ return { Object } Action object .
* /
2019-10-15 17:37:08 +02:00
function receiveCurrentUser ( currentUser ) {
return {
type : 'RECEIVE_CURRENT_USER' ,
2021-05-19 17:09:27 +02:00
currentUser
2019-10-15 17:37:08 +02:00
} ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns an action object used in adding new entities .
*
2021-11-08 15:29:21 +01:00
* @ param { Array } entities Entities received .
2019-10-15 17:37:08 +02:00
*
* @ return { Object } Action object .
2018-12-14 05:41:57 +01:00
* /
2019-10-15 17:37:08 +02:00
function addEntities ( entities ) {
return {
type : 'ADD_ENTITIES' ,
2021-05-19 17:09:27 +02:00
entities
2019-10-15 17:37:08 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns an action object used in signalling that entity records have been received .
*
2022-04-12 17:12:47 +02:00
* @ param { string } kind Kind of the received entity record .
* @ param { string } name Name of the received entity record .
2019-10-15 17:37:08 +02:00
* @ param { Array | Object } records Records received .
* @ param { ? Object } query Query Object .
2021-01-28 03:04:13 +01:00
* @ param { ? boolean } invalidateCache Should invalidate query caches .
* @ param { ? Object } edits Edits to reset .
2019-10-15 17:37:08 +02:00
* @ return { Object } Action object .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
function receiveEntityRecords ( kind , name , records , query , invalidateCache = false , edits ) {
2019-10-15 17:37:08 +02:00
// Auto drafts should not have titles, but some plugins rely on them so we can't filter this
// on the server.
if ( kind === 'postType' ) {
2023-09-26 16:23:26 +02:00
records = ( Array . isArray ( records ) ? records : [ records ] ) . map ( record => record . status === 'auto-draft' ? {
... record ,
2021-05-19 17:09:27 +02:00
title : ''
} : record ) ;
2019-10-15 17:37:08 +02:00
}
2021-05-19 17:09:27 +02:00
let action ;
2019-10-15 17:37:08 +02:00
if ( query ) {
2021-01-28 03:04:13 +01:00
action = receiveQueriedItems ( records , query , edits ) ;
2019-10-15 17:37:08 +02:00
} else {
2021-01-28 03:04:13 +01:00
action = receiveItems ( records , edits ) ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
return {
... action ,
2021-05-19 17:09:27 +02:00
kind ,
name ,
invalidateCache
} ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Returns an action object used in signalling that the current theme has been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2020-06-26 15:33:47 +02:00
*
* @ param { Object } currentTheme The current theme .
*
* @ return { Object } Action object .
* /
function receiveCurrentTheme ( currentTheme ) {
return {
type : 'RECEIVE_CURRENT_THEME' ,
2021-05-19 17:09:27 +02:00
currentTheme
2020-06-26 15:33:47 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Returns an action object used in signalling that the current global styles id has been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2021-11-08 15:29:21 +01:00
*
* @ param { string } currentGlobalStylesId The current global styles id .
*
* @ return { Object } Action object .
* /
function _ _experimentalReceiveCurrentGlobalStylesId ( currentGlobalStylesId ) {
return {
type : 'RECEIVE_CURRENT_GLOBAL_STYLES_ID' ,
id : currentGlobalStylesId
} ;
}
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Returns an action object used in signalling that the theme base global styles have been received
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2021-11-08 15:29:21 +01:00
*
* @ param { string } stylesheet The theme ' s identifier
* @ param { Object } globalStyles The global styles object .
*
* @ return { Object } Action object .
* /
function _ _experimentalReceiveThemeBaseGlobalStyles ( stylesheet , globalStyles ) {
return {
type : 'RECEIVE_THEME_GLOBAL_STYLES' ,
stylesheet ,
globalStyles
} ;
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Returns an action object used in signalling that the theme global styles variations have been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2022-04-12 17:12:47 +02:00
*
* @ param { string } stylesheet The theme ' s identifier
* @ param { Array } variations The global styles variations .
*
* @ return { Object } Action object .
* /
function _ _experimentalReceiveThemeGlobalStyleVariations ( stylesheet , variations ) {
return {
type : 'RECEIVE_THEME_GLOBAL_STYLE_VARIATIONS' ,
stylesheet ,
variations
} ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns an action object used in signalling that the index has been received .
2018-12-14 05:41:57 +01:00
*
2021-11-08 15:29:21 +01:00
* @ deprecated since WP 5.9 , this is not useful anymore , use the selector direclty .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ return { Object } Action object .
2018-12-18 04:14:52 +01:00
* /
2021-11-08 15:29:21 +01:00
function receiveThemeSupports ( ) {
external _wp _deprecated _default ( ) ( "wp.data.dispatch( 'core' ).receiveThemeSupports" , {
since : '5.9'
} ) ;
2019-10-15 17:37:08 +02:00
return {
2021-11-08 15:29:21 +01:00
type : 'DO_NOTHING'
2019-10-15 17:37:08 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2023-06-27 16:24:19 +02:00
/ * *
* Returns an action object used in signalling that the theme global styles CPT post revisions have been received .
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
*
* @ param { number } currentId The post id .
* @ param { Array } revisions The global styles revisions .
*
* @ return { Object } Action object .
* /
function receiveThemeGlobalStyleRevisions ( currentId , revisions ) {
return {
type : 'RECEIVE_THEME_GLOBAL_STYLE_REVISIONS' ,
currentId ,
revisions
} ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns an action object used in signalling that the preview data for
* a given URl has been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2018-12-14 05:41:57 +01:00
*
2021-11-08 15:29:21 +01:00
* @ param { string } url URL to preview the embed for .
* @ param { * } preview Preview data .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ return { Object } Action object .
2018-12-14 05:41:57 +01:00
* /
2019-10-15 17:37:08 +02:00
function receiveEmbedPreview ( url , preview ) {
return {
type : 'RECEIVE_EMBED_PREVIEW' ,
2021-05-19 17:09:27 +02:00
url ,
preview
2019-10-15 17:37:08 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Action triggered to delete an entity record .
*
2022-04-12 17:12:47 +02:00
* @ param { string } kind Kind of the deleted entity .
* @ param { string } name Name of the deleted entity .
* @ param { string } recordId Record ID of the deleted entity .
* @ param { ? Object } query Special query parameters for the
* DELETE API call .
* @ param { Object } [ options ] Delete options .
* @ param { Function } [ options . _ _unstableFetch ] Internal use only . Function to
* call instead of ` apiFetch() ` .
* Must return a promise .
* @ param { boolean } [ options . throwOnError = false ] If false , this action suppresses all
* the exceptions . Defaults to false .
2020-10-13 15:10:30 +02:00
* /
2023-06-27 16:24:19 +02:00
const deleteEntityRecord = ( kind , name , recordId , query , {
_ _unstableFetch = ( external _wp _apiFetch _default ( ) ) ,
throwOnError = false
} = { } ) => async ( {
dispatch
} ) => {
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
const entityConfig = configs . find ( config => config . kind === kind && config . name === name ) ;
let error ;
let deletedRecord = false ;
if ( ! entityConfig || entityConfig ? . _ _experimentalNoFetch ) {
return ;
}
const lock = await dispatch . _ _unstableAcquireStoreLock ( STORE _NAME , [ 'entities' , 'records' , kind , name , recordId ] , {
exclusive : true
} ) ;
try {
dispatch ( {
type : 'DELETE_ENTITY_RECORD_START' ,
kind ,
name ,
recordId
2021-11-08 15:29:21 +01:00
} ) ;
2023-06-27 16:24:19 +02:00
let hasError = false ;
2021-05-19 17:09:27 +02:00
try {
2023-06-27 16:24:19 +02:00
let path = ` ${ entityConfig . baseURL } / ${ recordId } ` ;
if ( query ) {
path = ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( path , query ) ;
2021-05-19 17:09:27 +02:00
}
2023-06-27 16:24:19 +02:00
deletedRecord = await _ _unstableFetch ( {
path ,
method : 'DELETE'
2021-11-08 15:29:21 +01:00
} ) ;
2023-06-27 16:24:19 +02:00
await dispatch ( removeItems ( kind , name , recordId , true ) ) ;
} catch ( _error ) {
hasError = true ;
error = _error ;
}
dispatch ( {
type : 'DELETE_ENTITY_RECORD_FINISH' ,
kind ,
name ,
recordId ,
error
} ) ;
if ( hasError && throwOnError ) {
throw error ;
2020-10-13 15:10:30 +02:00
}
2023-06-27 16:24:19 +02:00
return deletedRecord ;
} finally {
dispatch . _ _unstableReleaseStoreLock ( lock ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns an action object that triggers an
* edit to an entity record .
*
2023-06-27 16:24:19 +02:00
* @ param { string } kind Kind of the edited entity record .
* @ param { string } name Name of the edited entity record .
* @ param { number | string } recordId Record ID of the edited entity record .
* @ param { Object } edits The edits .
* @ param { Object } options Options for the edit .
* @ param { boolean } [ options . undoIgnore ] Whether to ignore the edit in undo history or not .
2019-10-15 17:37:08 +02:00
*
* @ return { Object } Action object .
* /
2023-06-27 16:24:19 +02:00
const editEntityRecord = ( kind , name , recordId , edits , options = { } ) => ( {
select ,
dispatch
} ) => {
const entityConfig = select . getEntityConfig ( kind , name ) ;
if ( ! entityConfig ) {
throw new Error ( ` The entity being edited ( ${ kind } , ${ name } ) does not have a loaded config. ` ) ;
}
const {
mergedEdits = { }
} = entityConfig ;
const record = select . getRawEntityRecord ( kind , name , recordId ) ;
const editedRecord = select . getEditedEntityRecord ( kind , name , recordId ) ;
const edit = {
kind ,
name ,
recordId ,
// Clear edits when they are equal to their persisted counterparts
// so that the property is not considered dirty.
edits : Object . keys ( edits ) . reduce ( ( acc , key ) => {
const recordValue = record [ key ] ;
const editedRecordValue = editedRecord [ key ] ;
2023-09-26 16:23:26 +02:00
const value = mergedEdits [ key ] ? {
... editedRecordValue ,
2023-06-27 16:24:19 +02:00
... edits [ key ]
} : edits [ key ] ;
acc [ key ] = es6 _default ( ) ( recordValue , value ) ? undefined : value ;
return acc ;
2023-07-07 09:21:17 +02:00
} , { } )
2021-11-15 13:50:17 +01:00
} ;
2023-09-26 16:23:26 +02:00
if ( window . _ _experimentalEnableSync && entityConfig . syncConfig ) {
if ( false ) { }
} else {
if ( ! options . undoIgnore ) {
select . getUndoManager ( ) . addRecord ( [ {
id : {
kind ,
name ,
recordId
} ,
changes : Object . keys ( edits ) . reduce ( ( acc , key ) => {
acc [ key ] = {
from : editedRecord [ key ] ,
to : edits [ key ]
} ;
2023-06-27 16:24:19 +02:00
return acc ;
2023-09-26 16:23:26 +02:00
} , { } )
} ] , options . isCached ) ;
2023-06-27 16:24:19 +02:00
}
2023-09-26 16:23:26 +02:00
dispatch ( {
type : 'EDIT_ENTITY_RECORD' ,
... edit
} ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Action triggered to undo the last edit to
* an entity record , if any .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const undo = ( ) => ( {
select ,
dispatch
} ) => {
2023-09-26 16:23:26 +02:00
const undoRecord = select . getUndoManager ( ) . undo ( ) ;
if ( ! undoRecord ) {
2021-05-19 17:09:27 +02:00
return ;
}
2021-11-08 15:29:21 +01:00
dispatch ( {
2023-06-27 16:24:19 +02:00
type : 'UNDO' ,
2023-09-26 16:23:26 +02:00
record : undoRecord
2021-11-08 15:29:21 +01:00
} ) ;
} ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Action triggered to redo the last undoed
* edit to an entity record , if any .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const redo = ( ) => ( {
select ,
dispatch
} ) => {
2023-09-26 16:23:26 +02:00
const redoRecord = select . getUndoManager ( ) . redo ( ) ;
if ( ! redoRecord ) {
2021-05-19 17:09:27 +02:00
return ;
}
2021-11-08 15:29:21 +01:00
dispatch ( {
2023-06-27 16:24:19 +02:00
type : 'REDO' ,
2023-09-26 16:23:26 +02:00
record : redoRecord
2021-11-08 15:29:21 +01:00
} ) ;
} ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Forces the creation of a new undo level .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ return { Object } Action object .
2018-12-18 04:14:52 +01:00
* /
2023-09-26 16:23:26 +02:00
const _ _unstableCreateUndoLevel = ( ) => ( {
select
} ) => {
select . getUndoManager ( ) . addRecord ( ) ;
} ;
2018-12-18 04:14:52 +01:00
2019-10-15 17:37:08 +02:00
/ * *
* Action triggered to save an entity record .
*
2022-04-12 17:12:47 +02:00
* @ param { string } kind Kind of the received entity .
* @ param { string } name Name of the received entity .
* @ param { Object } record Record to be saved .
* @ param { Object } options Saving options .
* @ param { boolean } [ options . isAutosave = false ] Whether this is an autosave .
* @ param { Function } [ options . _ _unstableFetch ] Internal use only . Function to
* call instead of ` apiFetch() ` .
* Must return a promise .
* @ param { boolean } [ options . throwOnError = false ] If false , this action suppresses all
* the exceptions . Defaults to false .
2019-10-15 17:37:08 +02:00
* /
2023-06-27 16:24:19 +02:00
const saveEntityRecord = ( kind , name , record , {
isAutosave = false ,
_ _unstableFetch = ( external _wp _apiFetch _default ( ) ) ,
throwOnError = false
} = { } ) => async ( {
select ,
resolveSelect ,
dispatch
} ) => {
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
const entityConfig = configs . find ( config => config . kind === kind && config . name === name ) ;
if ( ! entityConfig || entityConfig ? . _ _experimentalNoFetch ) {
return ;
}
const entityIdKey = entityConfig . key || DEFAULT _ENTITY _KEY ;
const recordId = record [ entityIdKey ] ;
const lock = await dispatch . _ _unstableAcquireStoreLock ( STORE _NAME , [ 'entities' , 'records' , kind , name , recordId || esm _browser _v4 ( ) ] , {
exclusive : true
} ) ;
try {
// Evaluate optimized edits.
// (Function edits that should be evaluated on save to avoid expensive computations on every edit.)
for ( const [ key , value ] of Object . entries ( record ) ) {
if ( typeof value === 'function' ) {
const evaluatedValue = value ( select . getEditedEntityRecord ( kind , name , recordId ) ) ;
dispatch . editEntityRecord ( kind , name , recordId , {
[ key ] : evaluatedValue
} , {
undoIgnore : true
} ) ;
record [ key ] = evaluatedValue ;
}
2021-05-19 17:09:27 +02:00
}
2023-06-27 16:24:19 +02:00
dispatch ( {
type : 'SAVE_ENTITY_RECORD_START' ,
kind ,
name ,
recordId ,
isAutosave
2021-11-08 15:29:21 +01:00
} ) ;
2023-06-27 16:24:19 +02:00
let updatedRecord ;
let error ;
let hasError = false ;
2021-05-19 17:09:27 +02:00
try {
2023-06-27 16:24:19 +02:00
const path = ` ${ entityConfig . baseURL } ${ recordId ? '/' + recordId : '' } ` ;
const persistedRecord = select . getRawEntityRecord ( kind , name , recordId ) ;
if ( isAutosave ) {
// Most of this autosave logic is very specific to posts.
// This is fine for now as it is the only supported autosave,
// but ideally this should all be handled in the back end,
// so the client just sends and receives objects.
const currentUser = select . getCurrentUser ( ) ;
const currentUserId = currentUser ? currentUser . id : undefined ;
2023-09-26 16:23:26 +02:00
const autosavePost = await resolveSelect . getAutosave ( persistedRecord . type , persistedRecord . id , currentUserId ) ;
// Autosaves need all expected fields to be present.
2023-06-27 16:24:19 +02:00
// So we fallback to the previous autosave and then
// to the actual persisted entity if the edits don't
// have a value.
2023-09-26 16:23:26 +02:00
let data = {
... persistedRecord ,
2023-06-27 16:24:19 +02:00
... autosavePost ,
... record
} ;
data = Object . keys ( data ) . reduce ( ( acc , key ) => {
2023-08-01 10:01:54 +02:00
if ( [ 'title' , 'excerpt' , 'content' , 'meta' ] . includes ( key ) ) {
2023-06-27 16:24:19 +02:00
acc [ key ] = data [ key ] ;
}
return acc ;
} , {
status : data . status === 'auto-draft' ? 'draft' : data . status
} ) ;
updatedRecord = await _ _unstableFetch ( {
path : ` ${ path } /autosaves ` ,
method : 'POST' ,
data
2023-09-26 16:23:26 +02:00
} ) ;
// An autosave may be processed by the server as a regular save
2023-06-27 16:24:19 +02:00
// when its update is requested by the author and the post had
// draft or auto-draft status.
if ( persistedRecord . id === updatedRecord . id ) {
2023-09-26 16:23:26 +02:00
let newRecord = {
... persistedRecord ,
2023-06-27 16:24:19 +02:00
... data ,
... updatedRecord
2021-02-02 06:17:13 +01:00
} ;
2023-06-27 16:24:19 +02:00
newRecord = Object . keys ( newRecord ) . reduce ( ( acc , key ) => {
// These properties are persisted in autosaves.
2019-09-19 17:19:18 +02:00
if ( [ 'title' , 'excerpt' , 'content' ] . includes ( key ) ) {
2023-06-27 16:24:19 +02:00
acc [ key ] = newRecord [ key ] ;
} else if ( key === 'status' ) {
// Status is only persisted in autosaves when going from
// "auto-draft" to "draft".
acc [ key ] = persistedRecord . status === 'auto-draft' && newRecord . status === 'draft' ? newRecord . status : persistedRecord . status ;
} else {
// These properties are not persisted in autosaves.
acc [ key ] = persistedRecord [ key ] ;
2019-09-19 17:19:18 +02:00
}
return acc ;
2023-06-27 16:24:19 +02:00
} , { } ) ;
dispatch . receiveEntityRecords ( kind , name , newRecord , undefined , true ) ;
2021-05-19 17:09:27 +02:00
} else {
2023-06-27 16:24:19 +02:00
dispatch . receiveAutosaves ( persistedRecord . id , updatedRecord ) ;
2021-11-15 13:50:17 +01:00
}
2023-06-27 16:24:19 +02:00
} else {
let edits = record ;
if ( entityConfig . _ _unstablePrePersist ) {
2023-09-26 16:23:26 +02:00
edits = {
... edits ,
2023-06-27 16:24:19 +02:00
... entityConfig . _ _unstablePrePersist ( persistedRecord , edits )
} ;
}
updatedRecord = await _ _unstableFetch ( {
path ,
method : recordId ? 'PUT' : 'POST' ,
data : edits
} ) ;
dispatch . receiveEntityRecords ( kind , name , updatedRecord , undefined , true , edits ) ;
2022-04-12 17:12:47 +02:00
}
2023-06-27 16:24:19 +02:00
} catch ( _error ) {
hasError = true ;
error = _error ;
}
dispatch ( {
type : 'SAVE_ENTITY_RECORD_FINISH' ,
kind ,
name ,
recordId ,
error ,
isAutosave
} ) ;
if ( hasError && throwOnError ) {
throw error ;
2021-11-15 13:50:17 +01:00
}
2023-06-27 16:24:19 +02:00
return updatedRecord ;
} finally {
dispatch . _ _unstableReleaseStoreLock ( lock ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2021-02-02 06:17:13 +01:00
/ * *
* Runs multiple core - data actions at the same time using one API request .
*
* Example :
*
* ` ` `
* const [ savedRecord , updatedRecord , deletedRecord ] =
* await dispatch ( 'core' ) . _ _experimentalBatch ( [
* ( { saveEntityRecord } ) => saveEntityRecord ( 'root' , 'widget' , widget ) ,
* ( { saveEditedEntityRecord } ) => saveEntityRecord ( 'root' , 'widget' , 123 ) ,
* ( { deleteEntityRecord } ) => deleteEntityRecord ( 'root' , 'widget' , 123 , null ) ,
* ] ) ;
* ` ` `
*
* @ param { Array } requests Array of functions which are invoked simultaneously .
* Each function is passed an object containing
* ` saveEntityRecord ` , ` saveEditedEntityRecord ` , and
* ` deleteEntityRecord ` .
*
2022-04-12 17:12:47 +02:00
* @ return { ( thunkArgs : Object ) => Promise } A promise that resolves to an array containing the return
* values of each function given in ` requests ` .
2021-02-02 06:17:13 +01:00
* /
2023-06-27 16:24:19 +02:00
const _ _experimentalBatch = requests => async ( {
dispatch
} ) => {
2021-05-19 17:09:27 +02:00
const batch = createBatch ( ) ;
const api = {
saveEntityRecord ( kind , name , record , options ) {
2023-09-26 16:23:26 +02:00
return batch . add ( add => dispatch . saveEntityRecord ( kind , name , record , {
... options ,
2021-05-19 17:09:27 +02:00
_ _unstableFetch : add
} ) ) ;
} ,
saveEditedEntityRecord ( kind , name , recordId , options ) {
2023-09-26 16:23:26 +02:00
return batch . add ( add => dispatch . saveEditedEntityRecord ( kind , name , recordId , {
... options ,
2021-05-19 17:09:27 +02:00
_ _unstableFetch : add
} ) ) ;
} ,
deleteEntityRecord ( kind , name , recordId , query , options ) {
2023-09-26 16:23:26 +02:00
return batch . add ( add => dispatch . deleteEntityRecord ( kind , name , recordId , query , {
... options ,
2021-05-19 17:09:27 +02:00
_ _unstableFetch : add
} ) ) ;
2021-02-02 06:17:13 +01:00
}
2021-05-19 17:09:27 +02:00
} ;
const resultPromises = requests . map ( request => request ( api ) ) ;
2021-11-08 15:29:21 +01:00
const [ , ... results ] = await Promise . all ( [ batch . run ( ) , ... resultPromises ] ) ;
2021-05-19 17:09:27 +02:00
return results ;
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Action triggered to save an entity record ' s edits .
*
* @ param { string } kind Kind of the entity .
* @ param { string } name Name of the entity .
* @ param { Object } recordId ID of the record .
* @ param { Object } options Saving options .
* /
2023-06-27 16:24:19 +02:00
const saveEditedEntityRecord = ( kind , name , recordId , options ) => async ( {
select ,
dispatch
} ) => {
2021-11-08 15:29:21 +01:00
if ( ! select . hasEditsForEntityRecord ( kind , name , recordId ) ) {
return ;
}
2022-04-12 17:12:47 +02:00
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
2023-02-07 08:04:52 +01:00
const entityConfig = configs . find ( config => config . kind === kind && config . name === name ) ;
2022-04-12 17:12:47 +02:00
if ( ! entityConfig ) {
2021-05-19 17:09:27 +02:00
return ;
}
2022-04-12 17:12:47 +02:00
const entityIdKey = entityConfig . key || DEFAULT _ENTITY _KEY ;
2021-11-08 15:29:21 +01:00
const edits = select . getEntityRecordNonTransientEdits ( kind , name , recordId ) ;
2021-05-19 17:09:27 +02:00
const record = {
2021-11-08 15:29:21 +01:00
[ entityIdKey ] : recordId ,
2021-05-19 17:09:27 +02:00
... edits
} ;
2021-11-08 15:29:21 +01:00
return await dispatch . saveEntityRecord ( kind , name , record , options ) ;
} ;
2023-09-26 16:23:26 +02:00
2021-05-19 17:09:27 +02:00
/ * *
* Action triggered to save only specified properties for the entity .
*
2021-11-08 15:29:21 +01:00
* @ param { string } kind Kind of the entity .
* @ param { string } name Name of the entity .
* @ param { Object } recordId ID of the record .
2023-09-26 16:23:26 +02:00
* @ param { Array } itemsToSave List of entity properties or property paths to save .
2021-11-08 15:29:21 +01:00
* @ param { Object } options Saving options .
2021-05-19 17:09:27 +02:00
* /
2023-06-27 16:24:19 +02:00
const _ _experimentalSaveSpecifiedEntityEdits = ( kind , name , recordId , itemsToSave , options ) => async ( {
select ,
dispatch
} ) => {
2021-11-08 15:29:21 +01:00
if ( ! select . hasEditsForEntityRecord ( kind , name , recordId ) ) {
2021-05-19 17:09:27 +02:00
return ;
}
2021-11-08 15:29:21 +01:00
const edits = select . getEntityRecordNonTransientEdits ( kind , name , recordId ) ;
2021-05-19 17:09:27 +02:00
const editsToSave = { } ;
2023-09-26 16:23:26 +02:00
for ( const item of itemsToSave ) {
setNestedValue ( editsToSave , item , getNestedValue ( edits , item ) ) ;
2021-05-19 17:09:27 +02:00
}
2023-09-26 16:23:26 +02:00
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
const entityConfig = configs . find ( config => config . kind === kind && config . name === name ) ;
const entityIdKey = entityConfig ? . key || DEFAULT _ENTITY _KEY ;
2021-05-19 17:09:27 +02:00
2023-09-26 16:23:26 +02:00
// If a record key is provided then update the existing record.
// This necessitates providing `recordKey` to saveEntityRecord as part of the
// `record` argument (here called `editsToSave`) to stop that action creating
// a new record and instead cause it to update the existing record.
if ( recordId ) {
editsToSave [ entityIdKey ] = recordId ;
}
2021-11-08 15:29:21 +01:00
return await dispatch . saveEntityRecord ( kind , name , editsToSave , options ) ;
} ;
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Returns an action object used in signalling that Upload permissions have been received .
*
2022-04-12 17:12:47 +02:00
* @ deprecated since WP 5.9 , use receiveUserPermission instead .
*
2019-09-19 17:19:18 +02:00
* @ param { boolean } hasUploadPermissions Does the user have permission to upload files ?
*
* @ return { Object } Action object .
* /
function receiveUploadPermissions ( hasUploadPermissions ) {
2022-04-12 17:12:47 +02:00
external _wp _deprecated _default ( ) ( "wp.data.dispatch( 'core' ).receiveUploadPermissions" , {
since : '5.9' ,
alternative : 'receiveUserPermission'
} ) ;
return receiveUserPermission ( 'create/media' , hasUploadPermissions ) ;
2019-09-19 17:19:18 +02:00
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Returns an action object used in signalling that the current user has
* permission to perform an action on a REST resource .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2019-09-19 17:19:18 +02:00
*
* @ param { string } key A key that represents the action and REST resource .
* @ param { boolean } isAllowed Whether or not the user can perform the action .
*
* @ return { Object } Action object .
* /
function receiveUserPermission ( key , isAllowed ) {
return {
type : 'RECEIVE_USER_PERMISSION' ,
2021-05-19 17:09:27 +02:00
key ,
isAllowed
2019-09-19 17:19:18 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Returns an action object used in signalling that the autosaves for a
* post have been received .
2022-09-20 17:43:29 +02:00
* Ignored from documentation as it ' s internal to the data store .
*
* @ ignore
2019-09-19 17:19:18 +02:00
*
* @ param { number } postId The id of the post that is parent to the autosave .
* @ param { Array | Object } autosaves An array of autosaves or singular autosave object .
*
* @ return { Object } Action object .
* /
function receiveAutosaves ( postId , autosaves ) {
return {
type : 'RECEIVE_AUTOSAVES' ,
2021-05-19 17:09:27 +02:00
postId ,
2023-02-07 08:04:52 +01:00
autosaves : Array . isArray ( autosaves ) ? autosaves : [ autosaves ]
2019-09-19 17:19:18 +02:00
} ;
}
2023-09-26 16:23:26 +02:00
2023-06-27 16:24:19 +02:00
/ * *
* Returns an action object signalling that the fallback Navigation
* Menu id has been received .
*
* @ param { integer } fallbackId the id of the fallback Navigation Menu
* @ return { Object } Action object .
* /
function receiveNavigationFallbackId ( fallbackId ) {
return {
type : 'RECEIVE_NAVIGATION_FALLBACK_ID' ,
fallbackId
} ;
}
2019-09-19 17:19:18 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/entities.js
2019-09-19 17:19:18 +02:00
/ * *
* External dependencies
* /
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* WordPress dependencies
* /
2020-10-13 15:10:30 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Internal dependencies
* /
2021-05-19 17:09:27 +02:00
const DEFAULT _ENTITY _KEY = 'id' ;
2021-11-08 15:29:21 +01:00
const POST _RAW _ATTRIBUTES = [ 'title' , 'excerpt' , 'content' ] ;
2022-04-12 17:12:47 +02:00
const rootEntitiesConfig = [ {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Base' ) ,
2020-10-13 15:10:30 +02:00
kind : 'root' ,
2022-09-20 17:43:29 +02:00
name : '__unstableBase' ,
2022-04-12 17:12:47 +02:00
baseURL : '/' ,
baseURLParams : {
_fields : [ 'description' , 'gmt_offset' , 'home' , 'name' , 'site_icon' , 'site_icon_url' , 'site_logo' , 'timezone_string' , 'url' ] . join ( ',' )
2023-09-26 16:23:26 +02:00
} ,
syncConfig : {
fetch : async ( ) => {
return external _wp _apiFetch _default ( ) ( {
path : '/'
} ) ;
} ,
applyChangesToDoc : ( doc , changes ) => {
const document = doc . getMap ( 'document' ) ;
Object . entries ( changes ) . forEach ( ( [ key , value ] ) => {
if ( document . get ( key ) !== value ) {
document . set ( key , value ) ;
}
} ) ;
} ,
fromCRDTDoc : doc => {
return doc . getMap ( 'document' ) . toJSON ( ) ;
}
} ,
syncObjectType : 'root/base' ,
getSyncObjectId : ( ) => 'index'
2020-10-13 15:10:30 +02:00
} , {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Site' ) ,
2020-01-08 12:57:23 +01:00
name : 'site' ,
kind : 'root' ,
2020-06-26 15:33:47 +02:00
baseURL : '/wp/v2/settings' ,
2021-05-19 17:09:27 +02:00
getTitle : record => {
2023-06-27 16:24:19 +02:00
var _record$title ;
return ( _record$title = record ? . title ) !== null && _record$title !== void 0 ? _record$title : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Site Title' ) ;
2023-09-26 16:23:26 +02:00
} ,
syncConfig : {
fetch : async ( ) => {
return external _wp _apiFetch _default ( ) ( {
path : '/wp/v2/settings'
} ) ;
} ,
applyChangesToDoc : ( doc , changes ) => {
const document = doc . getMap ( 'document' ) ;
Object . entries ( changes ) . forEach ( ( [ key , value ] ) => {
if ( document . get ( key ) !== value ) {
document . set ( key , value ) ;
}
} ) ;
} ,
fromCRDTDoc : doc => {
return doc . getMap ( 'document' ) . toJSON ( ) ;
}
} ,
syncObjectType : 'root/site' ,
getSyncObjectId : ( ) => 'index'
2020-01-08 12:57:23 +01:00
} , {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Post Type' ) ,
2019-09-19 17:19:18 +02:00
name : 'postType' ,
kind : 'root' ,
key : 'slug' ,
2021-05-19 17:09:27 +02:00
baseURL : '/wp/v2/types' ,
baseURLParams : {
context : 'edit'
2023-09-26 16:23:26 +02:00
} ,
syncConfig : {
fetch : async id => {
return external _wp _apiFetch _default ( ) ( {
path : ` /wp/v2/types/ ${ id } ?context=edit `
} ) ;
} ,
applyChangesToDoc : ( doc , changes ) => {
const document = doc . getMap ( 'document' ) ;
Object . entries ( changes ) . forEach ( ( [ key , value ] ) => {
if ( document . get ( key ) !== value ) {
document . set ( key , value ) ;
}
} ) ;
} ,
fromCRDTDoc : doc => {
return doc . getMap ( 'document' ) . toJSON ( ) ;
}
} ,
syncObjectType : 'root/postType' ,
getSyncObjectId : id => id
2019-09-19 17:19:18 +02:00
} , {
name : 'media' ,
kind : 'root' ,
baseURL : '/wp/v2/media' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'mediaItems' ,
2022-04-12 17:12:47 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Media' ) ,
rawAttributes : [ 'caption' , 'title' , 'description' ]
2018-12-18 04:14:52 +01:00
} , {
name : 'taxonomy' ,
kind : 'root' ,
key : 'slug' ,
baseURL : '/wp/v2/taxonomies' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'taxonomies' ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Taxonomy' )
2019-09-19 17:19:18 +02:00
} , {
2020-10-13 15:10:30 +02:00
name : 'sidebar' ,
2019-09-19 17:19:18 +02:00
kind : 'root' ,
2020-10-20 15:36:16 +02:00
baseURL : '/wp/v2/sidebars' ,
2022-09-20 17:43:29 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-10-13 15:10:30 +02:00
plural : 'sidebars' ,
2020-01-08 12:57:23 +01:00
transientEdits : {
blocks : true
2020-06-26 15:33:47 +02:00
} ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Widget areas' )
2020-10-20 15:36:16 +02:00
} , {
name : 'widget' ,
kind : 'root' ,
baseURL : '/wp/v2/widgets' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-10-20 15:36:16 +02:00
plural : 'widgets' ,
transientEdits : {
blocks : true
} ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Widgets' )
2021-04-15 17:19:43 +02:00
} , {
name : 'widgetType' ,
kind : 'root' ,
baseURL : '/wp/v2/widget-types' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2021-04-15 17:19:43 +02:00
plural : 'widgetTypes' ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Widget types' )
2020-02-06 22:03:31 +01:00
} , {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'User' ) ,
2020-02-06 22:03:31 +01:00
name : 'user' ,
kind : 'root' ,
baseURL : '/wp/v2/users' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-02-06 22:03:31 +01:00
plural : 'users'
2020-06-26 15:33:47 +02:00
} , {
name : 'comment' ,
kind : 'root' ,
baseURL : '/wp/v2/comments' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'comments' ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Comment' )
2020-06-26 15:33:47 +02:00
} , {
name : 'menu' ,
kind : 'root' ,
2021-11-11 08:43:31 +01:00
baseURL : '/wp/v2/menus' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'menus' ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Menu' )
2020-06-26 15:33:47 +02:00
} , {
name : 'menuItem' ,
kind : 'root' ,
2021-11-11 08:43:31 +01:00
baseURL : '/wp/v2/menu-items' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'menuItems' ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Menu Item' ) ,
2022-09-20 17:43:29 +02:00
rawAttributes : [ 'title' ]
2020-06-26 15:33:47 +02:00
} , {
name : 'menuLocation' ,
kind : 'root' ,
2021-11-11 08:43:31 +01:00
baseURL : '/wp/v2/menu-locations' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'menuLocations' ,
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Menu Location' ) ,
2020-06-26 15:33:47 +02:00
key : 'name'
2021-11-08 15:29:21 +01:00
} , {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Global Styles' ) ,
2021-11-08 15:29:21 +01:00
name : 'globalStyles' ,
kind : 'root' ,
baseURL : '/wp/v2/global-styles' ,
baseURLParams : {
context : 'edit'
} ,
plural : 'globalStylesVariations' ,
2022-04-12 17:12:47 +02:00
// Should be different than name.
2023-06-27 16:24:19 +02:00
getTitle : record => record ? . title ? . rendered || record ? . title
2021-11-08 15:29:21 +01:00
} , {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Themes' ) ,
2021-11-08 15:29:21 +01:00
name : 'theme' ,
kind : 'root' ,
baseURL : '/wp/v2/themes' ,
baseURLParams : {
context : 'edit'
} ,
key : 'stylesheet'
2021-11-30 01:24:27 +01:00
} , {
2022-04-11 14:04:30 +02:00
label : ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( 'Plugins' ) ,
2021-11-30 01:24:27 +01:00
name : 'plugin' ,
kind : 'root' ,
baseURL : '/wp/v2/plugins' ,
baseURLParams : {
context : 'edit'
} ,
key : 'plugin'
2018-12-18 04:14:52 +01:00
} ] ;
2022-04-12 17:12:47 +02:00
const additionalEntityConfigLoaders = [ {
kind : 'postType' ,
2018-12-18 04:14:52 +01:00
loadEntities : loadPostTypeEntities
} , {
2022-04-12 17:12:47 +02:00
kind : 'taxonomy' ,
2018-12-18 04:14:52 +01:00
loadEntities : loadTaxonomyEntities
} ] ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2021-01-28 03:04:13 +01:00
* Returns a function to be used to retrieve extra edits to apply before persisting a post type .
2018-12-18 04:14:52 +01:00
*
2021-01-28 03:04:13 +01:00
* @ param { Object } persistedRecord Already persisted Post
2021-11-08 15:29:21 +01:00
* @ param { Object } edits Edits .
2021-01-28 03:04:13 +01:00
* @ return { Object } Updated edits .
2018-12-14 05:41:57 +01:00
* /
2021-05-19 17:09:27 +02:00
const prePersistPostType = ( persistedRecord , edits ) => {
const newEdits = { } ;
2023-06-27 16:24:19 +02:00
if ( persistedRecord ? . status === 'auto-draft' ) {
2021-01-28 03:04:13 +01:00
// Saving an auto-draft should create a draft by default.
if ( ! edits . status && ! newEdits . status ) {
newEdits . status = 'draft' ;
2023-09-26 16:23:26 +02:00
}
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// Fix the auto-draft default title.
2023-06-27 16:24:19 +02:00
if ( ( ! edits . title || edits . title === 'Auto Draft' ) && ! newEdits . title && ( ! persistedRecord ? . title || persistedRecord ? . title === 'Auto Draft' ) ) {
2021-01-28 03:04:13 +01:00
newEdits . title = '' ;
}
}
return newEdits ;
} ;
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Returns the list of post type entities .
*
* @ return { Promise } Entities promise
* /
2021-11-08 15:29:21 +01:00
async function loadPostTypeEntities ( ) {
const postTypes = await external _wp _apiFetch _default ( ) ( {
2022-04-12 17:12:47 +02:00
path : '/wp/v2/types?context=view'
2021-05-19 17:09:27 +02:00
} ) ;
2023-06-27 16:24:19 +02:00
return Object . entries ( postTypes !== null && postTypes !== void 0 ? postTypes : { } ) . map ( ( [ name , postType ] ) => {
2021-11-08 15:29:21 +01:00
var _postType$rest _namesp ;
2021-05-19 17:09:27 +02:00
const isTemplate = [ 'wp_template' , 'wp_template_part' ] . includes ( name ) ;
2023-06-27 16:24:19 +02:00
const namespace = ( _postType$rest _namesp = postType ? . rest _namespace ) !== null && _postType$rest _namesp !== void 0 ? _postType$rest _namesp : 'wp/v2' ;
2021-05-19 17:09:27 +02:00
return {
kind : 'postType' ,
2021-11-08 15:29:21 +01:00
baseURL : ` / ${ namespace } / ${ postType . rest _base } ` ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
name ,
2022-04-12 17:12:47 +02:00
label : postType . name ,
2021-05-19 17:09:27 +02:00
transientEdits : {
blocks : true ,
selection : true
} ,
mergedEdits : {
meta : true
} ,
2021-11-08 15:29:21 +01:00
rawAttributes : POST _RAW _ATTRIBUTES ,
2021-05-19 17:09:27 +02:00
getTitle : record => {
2023-06-27 16:24:19 +02:00
var _record$slug ;
return record ? . title ? . rendered || record ? . title || ( isTemplate ? capitalCase ( ( _record$slug = record . slug ) !== null && _record$slug !== void 0 ? _record$slug : '' ) : String ( record . id ) ) ;
2021-05-19 17:09:27 +02:00
} ,
2021-06-15 17:30:24 +02:00
_ _unstablePrePersist : isTemplate ? undefined : prePersistPostType ,
2023-09-26 16:23:26 +02:00
_ _unstable _rest _base : postType . rest _base ,
syncConfig : {
fetch : async id => {
return external _wp _apiFetch _default ( ) ( {
path : ` / ${ namespace } / ${ postType . rest _base } / ${ id } ?context=edit `
} ) ;
} ,
applyChangesToDoc : ( doc , changes ) => {
const document = doc . getMap ( 'document' ) ;
Object . entries ( changes ) . forEach ( ( [ key , value ] ) => {
if ( document . get ( key ) !== value && typeof value !== 'function' ) {
document . set ( key , value ) ;
}
} ) ;
} ,
fromCRDTDoc : doc => {
return doc . getMap ( 'document' ) . toJSON ( ) ;
}
} ,
syncObjectType : 'postType/' + postType . name ,
getSyncObjectId : id => id
2021-05-19 17:09:27 +02:00
} ;
} ) ;
2018-12-18 04:14:52 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Returns the list of the taxonomies entities .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ return { Promise } Entities promise
2018-12-14 05:41:57 +01:00
* /
2021-11-08 15:29:21 +01:00
async function loadTaxonomyEntities ( ) {
const taxonomies = await external _wp _apiFetch _default ( ) ( {
2022-04-12 17:12:47 +02:00
path : '/wp/v2/taxonomies?context=view'
2021-05-19 17:09:27 +02:00
} ) ;
2023-06-27 16:24:19 +02:00
return Object . entries ( taxonomies !== null && taxonomies !== void 0 ? taxonomies : { } ) . map ( ( [ name , taxonomy ] ) => {
2021-11-08 15:29:21 +01:00
var _taxonomy$rest _namesp ;
2023-06-27 16:24:19 +02:00
const namespace = ( _taxonomy$rest _namesp = taxonomy ? . rest _namespace ) !== null && _taxonomy$rest _namesp !== void 0 ? _taxonomy$rest _namesp : 'wp/v2' ;
2021-05-19 17:09:27 +02:00
return {
kind : 'taxonomy' ,
2021-11-08 15:29:21 +01:00
baseURL : ` / ${ namespace } / ${ taxonomy . rest _base } ` ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
name ,
2022-04-12 17:12:47 +02:00
label : taxonomy . name
2021-05-19 17:09:27 +02:00
} ;
} ) ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Returns the entity ' s getter method name given its kind and name .
2018-12-14 05:41:57 +01:00
*
2022-04-12 17:12:47 +02:00
* @ example
* ` ` ` js
* const nameSingular = getMethodName ( 'root' , 'theme' , 'get' ) ;
* // nameSingular is getRootTheme
*
* const namePlural = getMethodName ( 'root' , 'theme' , 'set' ) ;
* // namePlural is setRootThemes
* ` ` `
*
2018-12-18 04:14:52 +01:00
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { string } prefix Function prefix .
* @ param { boolean } usePlural Whether to use the plural form or not .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ return { string } Method name
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const getMethodName = ( kind , name , prefix = 'get' , usePlural = false ) => {
2023-02-07 08:04:52 +01:00
const entityConfig = rootEntitiesConfig . find ( config => config . kind === kind && config . name === name ) ;
2022-09-20 17:43:29 +02:00
const kindPrefix = kind === 'root' ? '' : pascalCase ( kind ) ;
const nameSuffix = pascalCase ( name ) + ( usePlural ? 's' : '' ) ;
2023-06-27 16:24:19 +02:00
const suffix = usePlural && 'plural' in entityConfig && entityConfig ? . plural ? pascalCase ( entityConfig . plural ) : nameSuffix ;
2021-05-19 17:09:27 +02:00
return ` ${ prefix } ${ kindPrefix } ${ suffix } ` ;
2018-12-18 04:14:52 +01:00
} ;
2023-09-26 16:23:26 +02:00
function registerSyncConfigs ( configs ) {
configs . forEach ( ( {
syncObjectType ,
syncConfig
} ) => {
getSyncProvider ( ) . register ( syncObjectType , syncConfig ) ;
const editSyncConfig = {
... syncConfig
} ;
delete editSyncConfig . fetch ;
getSyncProvider ( ) . register ( syncObjectType + '--edit' , editSyncConfig ) ;
} ) ;
}
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Loads the kind entities into the store .
2018-12-14 05:41:57 +01:00
*
2021-11-08 15:29:21 +01:00
* @ param { string } kind Kind
2018-12-14 05:41:57 +01:00
*
2022-04-12 17:12:47 +02:00
* @ return { ( thunkArgs : object ) => Promise < Array > } Entities
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const getOrLoadEntitiesConfig = kind => async ( {
select ,
dispatch
} ) => {
2022-04-12 17:12:47 +02:00
let configs = select . getEntitiesConfig ( kind ) ;
if ( configs && configs . length !== 0 ) {
2023-09-26 16:23:26 +02:00
if ( window . _ _experimentalEnableSync ) {
if ( false ) { }
}
2022-04-12 17:12:47 +02:00
return configs ;
2021-05-19 17:09:27 +02:00
}
2023-02-07 08:04:52 +01:00
const loader = additionalEntityConfigLoaders . find ( l => l . kind === kind ) ;
2022-04-12 17:12:47 +02:00
if ( ! loader ) {
2021-05-19 17:09:27 +02:00
return [ ] ;
}
2022-04-12 17:12:47 +02:00
configs = await loader . loadEntities ( ) ;
2023-09-26 16:23:26 +02:00
if ( window . _ _experimentalEnableSync ) {
if ( false ) { }
}
2022-04-12 17:12:47 +02:00
dispatch ( addEntities ( configs ) ) ;
return configs ;
2021-11-08 15:29:21 +01:00
} ;
2020-06-26 15:33:47 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/get-normalized-comma-separable.js
2020-10-13 15:10:30 +02:00
/ * *
* Given a value which can be specified as one or the other of a comma - separated
* string or an array , returns a value normalized to an array of strings , or
* null if the value cannot be interpreted as either .
*
* @ param { string | string [ ] | * } value
*
* @ return { ? ( string [ ] ) } Normalized field value .
* /
function getNormalizedCommaSeparable ( value ) {
if ( typeof value === 'string' ) {
return value . split ( ',' ) ;
} else if ( Array . isArray ( value ) ) {
return value ;
}
return null ;
}
2023-09-21 15:26:32 +02:00
/* harmony default export */ var get _normalized _comma _separable = ( getNormalizedCommaSeparable ) ;
2020-06-26 15:33:47 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/with-weak-map-cache.js
2020-06-26 15:33:47 +02:00
/ * *
* Given a function , returns an enhanced function which caches the result and
* tracks in WeakMap . The result is only cached if the original function is
* passed a valid object - like argument ( requirement for WeakMap key ) .
*
* @ param { Function } fn Original function .
*
* @ return { Function } Enhanced caching function .
* /
function withWeakMapCache ( fn ) {
2021-05-19 17:09:27 +02:00
const cache = new WeakMap ( ) ;
return key => {
let value ;
2020-06-26 15:33:47 +02:00
if ( cache . has ( key ) ) {
value = cache . get ( key ) ;
} else {
2023-09-26 16:23:26 +02:00
value = fn ( key ) ;
// Can reach here if key is not valid for WeakMap, since `has`
2020-06-26 15:33:47 +02:00
// will return false for invalid key. Since `set` will throw,
// ensure that key is valid before setting into cache.
2022-09-20 17:43:29 +02:00
if ( key !== null && typeof key === 'object' ) {
2020-06-26 15:33:47 +02:00
cache . set ( key , value ) ;
}
}
return value ;
} ;
}
2023-09-21 15:26:32 +02:00
/* harmony default export */ var with _weak _map _cache = ( withWeakMapCache ) ;
2020-06-26 15:33:47 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/get-query-parts.js
2020-06-26 15:33:47 +02:00
/ * *
* WordPress dependencies
* /
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Internal dependencies
* /
/ * *
* An object of properties describing a specific query .
*
* @ typedef { Object } WPQueriedDataQueryParts
*
2020-10-13 15:10:30 +02:00
* @ property { number } page The query page ( 1 - based index , default 1 ) .
* @ property { number } perPage Items per page for query ( default 10 ) .
* @ property { string } stableKey An encoded stable string of all non -
* pagination , non - fields query parameters .
* @ property { ? ( string [ ] ) } fields Target subset of fields to derive from
* item objects .
* @ property { ? ( number [ ] ) } include Specific item IDs to include .
2021-11-08 15:29:21 +01:00
* @ property { string } context Scope under which the request is made ;
* determines returned fields in response .
2020-06-26 15:33:47 +02:00
* /
/ * *
* Given a query object , returns an object of parts , including pagination
* details ( ` page ` and ` perPage ` , or default values ) . All other properties are
* encoded into a stable ( idempotent ) ` stableKey ` value .
*
* @ param { Object } query Optional query object .
*
* @ return { WPQueriedDataQueryParts } Query parts .
* /
function getQueryParts ( query ) {
/ * *
* @ type { WPQueriedDataQueryParts }
* /
2021-05-19 17:09:27 +02:00
const parts = {
2020-06-26 15:33:47 +02:00
stableKey : '' ,
page : 1 ,
2020-10-13 15:10:30 +02:00
perPage : 10 ,
fields : null ,
2021-06-25 17:52:22 +02:00
include : null ,
context : 'default'
2023-09-26 16:23:26 +02:00
} ;
2020-06-26 15:33:47 +02:00
2023-09-26 16:23:26 +02:00
// Ensure stable key by sorting keys. Also more efficient for iterating.
2021-05-19 17:09:27 +02:00
const keys = Object . keys ( query ) . sort ( ) ;
for ( let i = 0 ; i < keys . length ; i ++ ) {
const key = keys [ i ] ;
let value = query [ key ] ;
2020-06-26 15:33:47 +02:00
switch ( key ) {
case 'page' :
parts [ key ] = Number ( value ) ;
break ;
case 'per_page' :
parts . perPage = Number ( value ) ;
break ;
2021-06-25 17:52:22 +02:00
case 'context' :
parts . context = value ;
break ;
2020-06-26 15:33:47 +02:00
default :
2020-10-20 15:36:16 +02:00
// While in theory, we could exclude "_fields" from the stableKey
// because two request with different fields have the same results
// We're not able to ensure that because the server can decide to omit
2022-04-12 17:12:47 +02:00
// fields from the response even if we explicitly asked for it.
2020-10-20 15:36:16 +02:00
// Example: Asking for titles in posts without title support.
if ( key === '_fields' ) {
2022-04-12 17:12:47 +02:00
var _getNormalizedCommaSe ;
2023-09-26 16:23:26 +02:00
parts . fields = ( _getNormalizedCommaSe = get _normalized _comma _separable ( value ) ) !== null && _getNormalizedCommaSe !== void 0 ? _getNormalizedCommaSe : [ ] ;
// Make sure to normalize value for `stableKey`
2021-01-28 03:04:13 +01:00
value = parts . fields . join ( ) ;
2023-09-26 16:23:26 +02:00
}
2021-11-08 15:29:21 +01:00
2023-09-26 16:23:26 +02:00
// Two requests with different include values cannot have same results.
2021-11-08 15:29:21 +01:00
if ( key === 'include' ) {
2022-04-12 17:12:47 +02:00
var _getNormalizedCommaSe2 ;
2022-05-02 12:39:04 +02:00
if ( typeof value === 'number' ) {
value = value . toString ( ) ;
}
2023-09-26 16:23:26 +02:00
parts . include = ( ( _getNormalizedCommaSe2 = get _normalized _comma _separable ( value ) ) !== null && _getNormalizedCommaSe2 !== void 0 ? _getNormalizedCommaSe2 : [ ] ) . map ( Number ) ;
// Normalize value for `stableKey`.
2021-11-08 15:29:21 +01:00
value = parts . include . join ( ) ;
2023-09-26 16:23:26 +02:00
}
// While it could be any deterministic string, for simplicity's
2020-06-26 15:33:47 +02:00
// sake mimic querystring encoding for stable key.
//
// TODO: For consistency with PHP implementation, addQueryArgs
// should accept a key value pair, which may optimize its
// implementation for our use here, vs. iterating an object
// with only a single key.
2022-04-11 14:04:30 +02:00
parts . stableKey += ( parts . stableKey ? '&' : '' ) + ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '' , {
2021-05-19 17:09:27 +02:00
[ key ] : value
} ) . slice ( 1 ) ;
2018-12-18 04:14:52 +01:00
}
2020-06-26 15:33:47 +02:00
}
return parts ;
2018-12-14 05:41:57 +01:00
}
2023-09-21 15:26:32 +02:00
/* harmony default export */ var get _query _parts = ( with _weak _map _cache ( getQueryParts ) ) ;
2018-12-14 05:41:57 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/reducer.js
2019-09-19 17:19:18 +02:00
/ * *
* WordPress dependencies
* /
2018-12-18 04:14:52 +01:00
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Internal dependencies
2018-12-14 05:41:57 +01:00
* /
2021-06-25 17:52:22 +02:00
function getContextFromAction ( action ) {
const {
query
} = action ;
if ( ! query ) {
return 'default' ;
}
const queryParts = get _query _parts ( query ) ;
return queryParts . context ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Returns a merged array of item IDs , given details of the received paginated
* items . The array is sparse - like with ` undefined ` entries where holes exist .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { ? Array < number > } itemIds Original item IDs ( default empty array ) .
* @ param { number [ ] } nextItemIds Item IDs to merge .
* @ param { number } page Page of items merged .
* @ param { number } perPage Number of items per page .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ return { number [ ] } Merged array of item IDs .
2018-12-14 05:41:57 +01:00
* /
2018-12-18 04:14:52 +01:00
function getMergedItemIds ( itemIds , nextItemIds , page , perPage ) {
2022-04-12 17:12:47 +02:00
var _itemIds$length ;
2021-05-19 17:09:27 +02:00
const receivedAllIds = page === 1 && perPage === - 1 ;
2020-06-26 15:33:47 +02:00
if ( receivedAllIds ) {
return nextItemIds ;
}
2023-09-26 16:23:26 +02:00
const nextItemIdsStartIndex = ( page - 1 ) * perPage ;
2020-06-26 15:33:47 +02:00
2023-09-26 16:23:26 +02:00
// If later page has already been received, default to the larger known
2018-12-18 04:14:52 +01:00
// size of the existing array, else calculate as extending the existing.
2023-09-26 16:23:26 +02:00
const size = Math . max ( ( _itemIds$length = itemIds ? . length ) !== null && _itemIds$length !== void 0 ? _itemIds$length : 0 , nextItemIdsStartIndex + nextItemIds . length ) ;
2018-12-14 05:41:57 +01:00
2023-09-26 16:23:26 +02:00
// Preallocate array since size is known.
2021-05-19 17:09:27 +02:00
const mergedItemIds = new Array ( size ) ;
for ( let i = 0 ; i < size ; i ++ ) {
2018-12-18 04:14:52 +01:00
// Preserve existing item ID except for subset of range of next items.
2021-05-19 17:09:27 +02:00
const isInNextItemsRange = i >= nextItemIdsStartIndex && i < nextItemIdsStartIndex + nextItemIds . length ;
2023-06-27 16:24:19 +02:00
mergedItemIds [ i ] = isInNextItemsRange ? nextItemIds [ i - nextItemIdsStartIndex ] : itemIds ? . [ i ] ;
2018-12-14 05:41:57 +01:00
}
2018-12-18 04:14:52 +01:00
return mergedItemIds ;
}
2023-09-26 16:23:26 +02:00
2023-02-07 08:04:52 +01:00
/ * *
* Helper function to filter out entities with certain IDs .
* Entities are keyed by their ID .
*
* @ param { Object } entities Entity objects , keyed by entity ID .
* @ param { Array } ids Entity IDs to filter out .
*
* @ return { Object } Filtered entities .
* /
function removeEntitiesById ( entities , ids ) {
2023-06-27 16:24:19 +02:00
return Object . fromEntries ( Object . entries ( entities ) . filter ( ( [ id ] ) => ! ids . some ( itemId => {
if ( Number . isInteger ( itemId ) ) {
return itemId === + id ;
}
return itemId === id ;
} ) ) ) ;
2023-02-07 08:04:52 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Reducer tracking items state , keyed by ID . Items are assumed to be normal ,
* where identifiers are common across all queries .
2018-12-14 05:41:57 +01:00
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
2018-12-18 04:14:52 +01:00
* @ return { Object } Next state .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
function items ( state = { } , action ) {
2018-12-14 05:41:57 +01:00
switch ( action . type ) {
2018-12-18 04:14:52 +01:00
case 'RECEIVE_ITEMS' :
2021-06-25 17:52:22 +02:00
{
const context = getContextFromAction ( action ) ;
const key = action . key || DEFAULT _ENTITY _KEY ;
2023-09-26 16:23:26 +02:00
return {
... state ,
[ context ] : {
... state [ context ] ,
2021-06-25 17:52:22 +02:00
... action . items . reduce ( ( accumulator , value ) => {
const itemId = value [ key ] ;
2023-06-27 16:24:19 +02:00
accumulator [ itemId ] = conservativeMapItem ( state ? . [ context ] ? . [ itemId ] , value ) ;
2021-06-25 17:52:22 +02:00
return accumulator ;
} , { } )
}
} ;
}
2020-10-13 15:10:30 +02:00
case 'REMOVE_ITEMS' :
2023-06-27 16:24:19 +02:00
return Object . fromEntries ( Object . entries ( state ) . map ( ( [ itemId , contextState ] ) => [ itemId , removeEntitiesById ( contextState , action . itemIds ) ] ) ) ;
2018-12-14 05:41:57 +01:00
}
return state ;
}
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Reducer tracking item completeness , keyed by ID . A complete item is one for
* which all fields are known . This is used in supporting ` _fields ` queries ,
* where not all properties associated with an entity are necessarily returned .
* In such cases , completeness is used as an indication of whether it would be
* safe to use queried data for a non - ` _fields ` - limited request .
*
2022-04-12 17:12:47 +02:00
* @ param { Object < string , Object < string , boolean >> } state Current state .
* @ param { Object } action Dispatched action .
2020-10-13 15:10:30 +02:00
*
2022-04-12 17:12:47 +02:00
* @ return { Object < string , Object < string , boolean >> } Next state .
2020-10-13 15:10:30 +02:00
* /
2023-06-27 16:24:19 +02:00
function itemIsComplete ( state = { } , action ) {
2021-06-25 17:52:22 +02:00
switch ( action . type ) {
case 'RECEIVE_ITEMS' :
{
const context = getContextFromAction ( action ) ;
const {
query ,
key = DEFAULT _ENTITY _KEY
2023-09-26 16:23:26 +02:00
} = action ;
// An item is considered complete if it is received without an associated
2021-06-25 17:52:22 +02:00
// fields query. Ideally, this would be implemented in such a way where the
// complete aggregate of all fields would satisfy completeness. Since the
2022-04-12 17:12:47 +02:00
// fields are not consistent across all entities, this would require
2021-06-25 17:52:22 +02:00
// introspection on the REST schema for each entity to know which fields
// compose a complete item for that entity.
const queryParts = query ? get _query _parts ( query ) : { } ;
const isCompleteQuery = ! query || ! Array . isArray ( queryParts . fields ) ;
2023-09-26 16:23:26 +02:00
return {
... state ,
[ context ] : {
... state [ context ] ,
2021-06-25 17:52:22 +02:00
... action . items . reduce ( ( result , item ) => {
2023-09-26 16:23:26 +02:00
const itemId = item [ key ] ;
2020-10-13 15:10:30 +02:00
2023-09-26 16:23:26 +02:00
// Defer to completeness if already assigned. Technically the
// data may be outdated if receiving items for a field subset.
2023-06-27 16:24:19 +02:00
result [ itemId ] = state ? . [ context ] ? . [ itemId ] || isCompleteQuery ;
2021-06-25 17:52:22 +02:00
return result ;
} , { } )
}
} ;
}
case 'REMOVE_ITEMS' :
2023-06-27 16:24:19 +02:00
return Object . fromEntries ( Object . entries ( state ) . map ( ( [ itemId , contextState ] ) => [ itemId , removeEntitiesById ( contextState , action . itemIds ) ] ) ) ;
2021-06-25 17:52:22 +02:00
}
return state ;
2020-10-13 15:10:30 +02:00
}
2023-09-26 16:23:26 +02:00
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Reducer tracking queries state , keyed by stable query key . Each reducer
* query object includes ` itemIds ` and ` requestingPageByPerPage ` .
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
*
2018-12-18 04:14:52 +01:00
* @ return { Object } Next state .
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
* /
2023-09-26 16:23:26 +02:00
const receiveQueries = ( 0 , external _wp _compose _namespaceObject . compose ) ( [
// Limit to matching action type so we don't attempt to replace action on
2018-12-18 04:14:52 +01:00
// an unhandled action.
2023-09-26 16:23:26 +02:00
if _matching _action ( action => 'query' in action ) ,
// Inject query parts into action for use both in `onSubKey` and reducer.
2021-05-19 17:09:27 +02:00
replace _action ( action => {
2018-12-18 04:14:52 +01:00
// `ifMatchingAction` still passes on initialization, where state is
// undefined and a query is not assigned. Avoid attempting to parse
// parts. `onSubKey` will omit by lack of `stableKey`.
if ( action . query ) {
2023-09-26 16:23:26 +02:00
return {
... action ,
2021-05-19 17:09:27 +02:00
... get _query _parts ( action . query )
} ;
2018-12-18 04:14:52 +01:00
}
return action ;
2023-09-26 16:23:26 +02:00
} ) , on _sub _key ( 'context' ) ,
// Queries shape is shared, but keyed by query `stableKey` part. Original
2018-12-18 04:14:52 +01:00
// reducer tracks only a single query object.
2023-06-27 16:24:19 +02:00
on _sub _key ( 'stableKey' ) ] ) ( ( state = null , action ) => {
2021-05-19 17:09:27 +02:00
const {
type ,
page ,
perPage ,
key = DEFAULT _ENTITY _KEY
} = action ;
2018-12-18 04:14:52 +01:00
if ( type !== 'RECEIVE_ITEMS' ) {
return state ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
}
2023-02-07 08:04:52 +01:00
return getMergedItemIds ( state || [ ] , action . items . map ( item => item [ key ] ) , page , perPage ) ;
2018-12-18 04:14:52 +01:00
} ) ;
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Reducer tracking queries state .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Next state .
* /
2023-06-27 16:24:19 +02:00
const queries = ( state = { } , action ) => {
2020-10-13 15:10:30 +02:00
switch ( action . type ) {
case 'RECEIVE_ITEMS' :
return receiveQueries ( state , action ) ;
case 'REMOVE_ITEMS' :
2021-05-19 17:09:27 +02:00
const removedItems = action . itemIds . reduce ( ( result , itemId ) => {
2020-10-13 15:10:30 +02:00
result [ itemId ] = true ;
return result ;
} , { } ) ;
2023-06-27 16:24:19 +02:00
return Object . fromEntries ( Object . entries ( state ) . map ( ( [ queryGroup , contextQueries ] ) => [ queryGroup , Object . fromEntries ( Object . entries ( contextQueries ) . map ( ( [ query , queryItems ] ) => [ query , queryItems . filter ( queryId => ! removedItems [ queryId ] ) ] ) ) ] ) ) ;
2020-10-13 15:10:30 +02:00
default :
return state ;
}
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var reducer = ( ( 0 , external _wp _data _namespaceObject . combineReducers ) ( {
2022-04-11 14:04:30 +02:00
items ,
2021-05-19 17:09:27 +02:00
itemIsComplete ,
2022-04-11 14:04:30 +02:00
queries
2018-12-14 05:41:57 +01:00
} ) ) ;
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/reducer.js
2021-11-08 15:29:21 +01:00
/ * *
* External dependencies
* /
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* WordPress dependencies
* /
2021-01-28 03:04:13 +01:00
2023-02-07 08:04:52 +01:00
2021-11-08 15:29:21 +01:00
/ * *
* Internal dependencies
* /
2021-01-28 03:04:13 +01:00
2022-04-12 17:12:47 +02:00
/** @typedef {import('./types').AnyFunction} AnyFunction */
2021-11-08 15:29:21 +01:00
/ * *
* Reducer managing terms state . Keyed by taxonomy slug , the value is either
* undefined ( if no request has been made for given taxonomy ) , null ( if a
* request is in - flight for given taxonomy ) , or the array of terms for the
* taxonomy .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2023-06-27 16:24:19 +02:00
function terms ( state = { } , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_TERMS' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ action . taxonomy ] : action . terms
} ;
2018-12-18 04:14:52 +01:00
}
return state ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Reducer managing authors state . Keyed by id .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
function users ( state = {
byId : { } ,
queries : { }
} , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_USER_QUERY' :
return {
2023-09-26 16:23:26 +02:00
byId : {
... state . byId ,
2022-09-20 17:43:29 +02:00
// Key users by their ID.
2023-09-26 16:23:26 +02:00
... action . users . reduce ( ( newUsers , user ) => ( {
... newUsers ,
2022-09-20 17:43:29 +02:00
[ user . id ] : user
} ) , { } )
2021-05-19 17:09:27 +02:00
} ,
2023-09-26 16:23:26 +02:00
queries : {
... state . queries ,
2023-02-07 08:04:52 +01:00
[ action . queryID ] : action . users . map ( user => user . id )
2021-05-19 17:09:27 +02:00
}
2018-12-18 04:14:52 +01:00
} ;
}
return state ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Reducer managing current user state .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2023-06-27 16:24:19 +02:00
function currentUser ( state = { } , action ) {
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'RECEIVE_CURRENT_USER' :
return action . currentUser ;
}
return state ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Reducer managing taxonomies .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
function taxonomies ( state = [ ] , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_TAXONOMIES' :
return action . taxonomies ;
}
return state ;
}
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Reducer managing the current theme .
*
2022-04-12 17:12:47 +02:00
* @ param { string | undefined } state Current state .
* @ param { Object } action Dispatched action .
2020-06-26 15:33:47 +02:00
*
2022-04-12 17:12:47 +02:00
* @ return { string | undefined } Updated state .
2020-06-26 15:33:47 +02:00
* /
2023-06-27 16:24:19 +02:00
function currentTheme ( state = undefined , action ) {
2020-06-26 15:33:47 +02:00
switch ( action . type ) {
case 'RECEIVE_CURRENT_THEME' :
return action . currentTheme . stylesheet ;
}
return state ;
}
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
2021-11-08 15:29:21 +01:00
* Reducer managing the current global styles id .
2020-06-26 15:33:47 +02:00
*
2022-04-12 17:12:47 +02:00
* @ param { string | undefined } state Current state .
* @ param { Object } action Dispatched action .
2020-06-26 15:33:47 +02:00
*
2022-04-12 17:12:47 +02:00
* @ return { string | undefined } Updated state .
2020-06-26 15:33:47 +02:00
* /
2023-06-27 16:24:19 +02:00
function currentGlobalStylesId ( state = undefined , action ) {
2020-06-26 15:33:47 +02:00
switch ( action . type ) {
2021-11-08 15:29:21 +01:00
case 'RECEIVE_CURRENT_GLOBAL_STYLES_ID' :
return action . id ;
2020-06-26 15:33:47 +02:00
}
return state ;
}
2023-09-26 16:23:26 +02:00
2018-12-18 04:14:52 +01:00
/ * *
2021-11-08 15:29:21 +01:00
* Reducer managing the theme base global styles .
2018-12-18 04:14:52 +01:00
*
2022-04-12 17:12:47 +02:00
* @ param { Record < string , object > } state Current state .
* @ param { Object } action Dispatched action .
2018-12-18 04:14:52 +01:00
*
2022-04-12 17:12:47 +02:00
* @ return { Record < string , object > } Updated state .
2018-12-18 04:14:52 +01:00
* /
2023-06-27 16:24:19 +02:00
function themeBaseGlobalStyles ( state = { } , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
2021-11-08 15:29:21 +01:00
case 'RECEIVE_THEME_GLOBAL_STYLES' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-11-08 15:29:21 +01:00
[ action . stylesheet ] : action . globalStyles
2021-05-19 17:09:27 +02:00
} ;
2018-12-18 04:14:52 +01:00
}
return state ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Reducer managing the theme global styles variations .
*
* @ param { Record < string , object > } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Record < string , object > } Updated state .
* /
2023-06-27 16:24:19 +02:00
function themeGlobalStyleVariations ( state = { } , action ) {
2022-04-12 17:12:47 +02:00
switch ( action . type ) {
case 'RECEIVE_THEME_GLOBAL_STYLE_VARIATIONS' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2022-04-12 17:12:47 +02:00
[ action . stylesheet ] : action . variations
} ;
}
return state ;
}
2023-06-27 16:24:19 +02:00
const withMultiEntityRecordEdits = reducer => ( state , action ) => {
if ( action . type === 'UNDO' || action . type === 'REDO' ) {
const {
2023-09-26 16:23:26 +02:00
record
2023-06-27 16:24:19 +02:00
} = action ;
let newState = state ;
2023-09-26 16:23:26 +02:00
record . forEach ( ( {
id : {
kind ,
name ,
recordId
} ,
changes
2023-06-27 16:24:19 +02:00
} ) => {
newState = reducer ( newState , {
type : 'EDIT_ENTITY_RECORD' ,
kind ,
name ,
recordId ,
2023-09-26 16:23:26 +02:00
edits : Object . entries ( changes ) . reduce ( ( acc , [ key , value ] ) => {
acc [ key ] = action . type === 'UNDO' ? value . from : value . to ;
return acc ;
} , { } )
2023-06-27 16:24:19 +02:00
} ) ;
} ) ;
return newState ;
}
return reducer ( state , action ) ;
} ;
2023-09-26 16:23:26 +02:00
2018-12-18 04:14:52 +01:00
/ * *
* Higher Order Reducer for a given entity config . It supports :
*
2019-09-19 17:19:18 +02:00
* - Fetching
* - Editing
* - Saving
2018-12-18 04:14:52 +01:00
*
2021-11-08 15:29:21 +01:00
* @ param { Object } entityConfig Entity config .
2018-12-18 04:14:52 +01:00
*
2022-04-12 17:12:47 +02:00
* @ return { AnyFunction } Reducer .
2018-12-18 04:14:52 +01:00
* /
2022-04-11 14:04:30 +02:00
function entity ( entityConfig ) {
2023-09-26 16:23:26 +02:00
return ( 0 , external _wp _compose _namespaceObject . compose ) ( [ withMultiEntityRecordEdits ,
// Limit to matching action type so we don't attempt to replace action on
2018-12-18 04:14:52 +01:00
// an unhandled action.
2023-09-26 16:23:26 +02:00
if _matching _action ( action => action . name && action . kind && action . name === entityConfig . name && action . kind === entityConfig . kind ) ,
// Inject the entity config into the action.
2021-05-19 17:09:27 +02:00
replace _action ( action => {
2023-09-26 16:23:26 +02:00
return {
... action ,
2018-12-18 04:14:52 +01:00
key : entityConfig . key || DEFAULT _ENTITY _KEY
2021-05-19 17:09:27 +02:00
} ;
2022-04-11 14:04:30 +02:00
} ) ] ) ( ( 0 , external _wp _data _namespaceObject . combineReducers ) ( {
2021-05-19 17:09:27 +02:00
queriedData : reducer ,
2023-06-27 16:24:19 +02:00
edits : ( state = { } , action ) => {
var _action$query$context ;
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'RECEIVE_ITEMS' :
2023-06-27 16:24:19 +02:00
const context = ( _action$query$context = action ? . query ? . context ) !== null && _action$query$context !== void 0 ? _action$query$context : 'default' ;
2021-06-25 17:52:22 +02:00
if ( context !== 'default' ) {
return state ;
}
2023-09-26 16:23:26 +02:00
const nextState = {
... state
2021-05-19 17:09:27 +02:00
} ;
for ( const record of action . items ) {
const recordId = record [ action . key ] ;
const edits = nextState [ recordId ] ;
if ( ! edits ) {
continue ;
}
const nextEdits = Object . keys ( edits ) . reduce ( ( acc , key ) => {
2023-06-27 16:24:19 +02:00
var _record$key$raw ;
2021-05-19 17:09:27 +02:00
// If the edited value is still different to the persisted value,
// keep the edited value in edits.
2023-09-26 16:23:26 +02:00
if (
// Edits are the "raw" attribute values, but records may have
2021-05-19 17:09:27 +02:00
// objects with more properties, so we use `get` here for the
// comparison.
2023-09-26 16:23:26 +02:00
! es6 _default ( ) ( edits [ key ] , ( _record$key$raw = record [ key ] ? . raw ) !== null && _record$key$raw !== void 0 ? _record$key$raw : record [ key ] ) && (
// Sometimes the server alters the sent value which means
2021-05-19 17:09:27 +02:00
// we need to also remove the edits before the api request.
2023-02-07 08:04:52 +01:00
! action . persistedEdits || ! es6 _default ( ) ( edits [ key ] , action . persistedEdits [ key ] ) ) ) {
2021-05-19 17:09:27 +02:00
acc [ key ] = edits [ key ] ;
2019-09-19 17:19:18 +02:00
}
2021-05-19 17:09:27 +02:00
return acc ;
} , { } ) ;
if ( Object . keys ( nextEdits ) . length ) {
nextState [ recordId ] = nextEdits ;
} else {
delete nextState [ recordId ] ;
2019-09-19 17:19:18 +02:00
}
}
return nextState ;
case 'EDIT_ENTITY_RECORD' :
2023-09-26 16:23:26 +02:00
const nextEdits = {
... state [ action . recordId ] ,
2021-05-19 17:09:27 +02:00
... action . edits
} ;
Object . keys ( nextEdits ) . forEach ( key => {
2019-09-19 17:19:18 +02:00
// Delete cleared edits so that the properties
// are not considered dirty.
if ( nextEdits [ key ] === undefined ) {
delete nextEdits [ key ] ;
}
} ) ;
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ action . recordId ] : nextEdits
} ;
2019-09-19 17:19:18 +02:00
}
return state ;
} ,
2023-06-27 16:24:19 +02:00
saving : ( state = { } , action ) => {
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'SAVE_ENTITY_RECORD_START' :
case 'SAVE_ENTITY_RECORD_FINISH' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ action . recordId ] : {
pending : action . type === 'SAVE_ENTITY_RECORD_START' ,
error : action . error ,
isAutosave : action . isAutosave
}
} ;
2019-09-19 17:19:18 +02:00
}
2020-10-13 15:10:30 +02:00
return state ;
} ,
2023-06-27 16:24:19 +02:00
deleting : ( state = { } , action ) => {
2020-10-13 15:10:30 +02:00
switch ( action . type ) {
case 'DELETE_ENTITY_RECORD_START' :
case 'DELETE_ENTITY_RECORD_FINISH' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ action . recordId ] : {
pending : action . type === 'DELETE_ENTITY_RECORD_START' ,
error : action . error
}
} ;
2020-10-13 15:10:30 +02:00
}
2019-09-19 17:19:18 +02:00
return state ;
}
} ) ) ;
2018-12-18 04:14:52 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Reducer keeping track of the registered entities .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
function entitiesConfig ( state = rootEntitiesConfig , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'ADD_ENTITIES' :
2021-05-19 17:09:27 +02:00
return [ ... state , ... action . entities ] ;
2018-12-18 04:14:52 +01:00
}
return state ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* Reducer keeping track of the registered entities config and data .
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const entities = ( state = { } , action ) => {
2023-09-26 16:23:26 +02:00
const newConfig = entitiesConfig ( state . config , action ) ;
2018-12-14 05:41:57 +01:00
2023-09-26 16:23:26 +02:00
// Generates a dynamic reducer for the entities.
2021-05-19 17:09:27 +02:00
let entitiesDataReducer = state . reducer ;
2018-12-18 04:14:52 +01:00
if ( ! entitiesDataReducer || newConfig !== state . config ) {
2023-06-27 16:24:19 +02:00
const entitiesByKind = newConfig . reduce ( ( acc , record ) => {
const {
kind
} = record ;
if ( ! acc [ kind ] ) {
acc [ kind ] = [ ] ;
}
acc [ kind ] . push ( record ) ;
return acc ;
} , { } ) ;
entitiesDataReducer = ( 0 , external _wp _data _namespaceObject . combineReducers ) ( Object . entries ( entitiesByKind ) . reduce ( ( memo , [ kind , subEntities ] ) => {
2023-09-26 16:23:26 +02:00
const kindReducer = ( 0 , external _wp _data _namespaceObject . combineReducers ) ( subEntities . reduce ( ( kindMemo , entityConfig ) => ( {
... kindMemo ,
2022-04-11 14:04:30 +02:00
[ entityConfig . name ] : entity ( entityConfig )
2021-05-19 17:09:27 +02:00
} ) , { } ) ) ;
2018-12-18 04:14:52 +01:00
memo [ kind ] = kindReducer ;
return memo ;
} , { } ) ) ;
}
2022-04-12 17:12:47 +02:00
const newData = entitiesDataReducer ( state . records , action ) ;
if ( newData === state . records && newConfig === state . config && entitiesDataReducer === state . reducer ) {
2018-12-18 04:14:52 +01:00
return state ;
}
return {
reducer : entitiesDataReducer ,
2022-04-12 17:12:47 +02:00
records : newData ,
2018-12-18 04:14:52 +01:00
config : newConfig
} ;
} ;
2022-04-12 17:12:47 +02:00
/ * *
2023-09-26 16:23:26 +02:00
* @ type { UndoManager }
2019-09-19 17:19:18 +02:00
* /
2023-09-26 16:23:26 +02:00
function undoManager ( state = ( 0 , build _module . createUndoManager ) ( ) ) {
return state ;
}
function editsReference ( state = { } , action ) {
2023-06-27 16:24:19 +02:00
switch ( action . type ) {
2023-09-26 16:23:26 +02:00
case 'EDIT_ENTITY_RECORD' :
2023-06-27 16:24:19 +02:00
case 'UNDO' :
case 'REDO' :
2023-09-26 16:23:26 +02:00
return { } ;
2019-09-19 17:19:18 +02:00
}
return state ;
}
2023-09-26 16:23:26 +02:00
2018-12-18 04:14:52 +01:00
/ * *
* Reducer managing embed preview data .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2023-06-27 16:24:19 +02:00
function embedPreviews ( state = { } , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_EMBED_PREVIEW' :
2021-05-19 17:09:27 +02:00
const {
url ,
preview
} = action ;
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ url ] : preview
} ;
2018-12-18 04:14:52 +01:00
}
return state ;
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-18 04:14:52 +01:00
/ * *
2019-03-07 10:09:59 +01:00
* State which tracks whether the user can perform an action on a REST
* resource .
2018-12-18 04:14:52 +01:00
*
2021-11-08 15:29:21 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
2018-12-18 04:14:52 +01:00
*
* @ return { Object } Updated state .
* /
2023-06-27 16:24:19 +02:00
function userPermissions ( state = { } , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
2019-03-07 10:09:59 +01:00
case 'RECEIVE_USER_PERMISSION' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ action . key ] : action . isAllowed
} ;
2018-12-18 04:14:52 +01:00
}
return state ;
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Reducer returning autosaves keyed by their parent ' s post id .
*
2021-11-08 15:29:21 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
2019-09-19 17:19:18 +02:00
*
* @ return { Object } Updated state .
* /
2023-06-27 16:24:19 +02:00
function autosaves ( state = { } , action ) {
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'RECEIVE_AUTOSAVES' :
2021-05-19 17:09:27 +02:00
const {
postId ,
autosaves : autosavesData
} = action ;
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-05-19 17:09:27 +02:00
[ postId ] : autosavesData
} ;
2019-09-19 17:19:18 +02:00
}
return state ;
}
2023-06-27 16:24:19 +02:00
function blockPatterns ( state = [ ] , action ) {
2022-04-12 17:12:47 +02:00
switch ( action . type ) {
case 'RECEIVE_BLOCK_PATTERNS' :
return action . patterns ;
}
return state ;
}
2023-06-27 16:24:19 +02:00
function blockPatternCategories ( state = [ ] , action ) {
2022-04-12 17:12:47 +02:00
switch ( action . type ) {
case 'RECEIVE_BLOCK_PATTERN_CATEGORIES' :
return action . categories ;
}
2023-09-26 16:23:26 +02:00
return state ;
}
function userPatternCategories ( state = [ ] , action ) {
switch ( action . type ) {
case 'RECEIVE_USER_PATTERN_CATEGORIES' :
return action . patternCategories ;
}
2022-04-12 17:12:47 +02:00
return state ;
}
2023-06-27 16:24:19 +02:00
function navigationFallbackId ( state = null , action ) {
switch ( action . type ) {
case 'RECEIVE_NAVIGATION_FALLBACK_ID' :
return action . fallbackId ;
}
return state ;
}
2023-09-26 16:23:26 +02:00
2023-06-27 16:24:19 +02:00
/ * *
* Reducer managing the theme global styles revisions .
*
* @ param { Record < string , object > } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Record < string , object > } Updated state .
* /
function themeGlobalStyleRevisions ( state = { } , action ) {
switch ( action . type ) {
case 'RECEIVE_THEME_GLOBAL_STYLE_REVISIONS' :
2023-09-26 16:23:26 +02:00
return {
... state ,
2023-06-27 16:24:19 +02:00
[ action . currentId ] : action . revisions
} ;
}
return state ;
}
2023-09-21 15:26:32 +02:00
/* harmony default export */ var build _module _reducer = ( ( 0 , external _wp _data _namespaceObject . combineReducers ) ( {
2021-05-19 17:09:27 +02:00
terms ,
2022-04-11 14:04:30 +02:00
users ,
currentTheme ,
2021-11-08 15:29:21 +01:00
currentGlobalStylesId ,
2022-04-11 14:04:30 +02:00
currentUser ,
2022-04-12 17:12:47 +02:00
themeGlobalStyleVariations ,
2021-11-08 15:29:21 +01:00
themeBaseGlobalStyles ,
2023-06-27 16:24:19 +02:00
themeGlobalStyleRevisions ,
2022-04-11 14:04:30 +02:00
taxonomies ,
entities ,
2023-09-26 16:23:26 +02:00
editsReference ,
undoManager ,
2021-05-19 17:09:27 +02:00
embedPreviews ,
userPermissions ,
2022-04-12 17:12:47 +02:00
autosaves ,
blockPatterns ,
2023-06-27 16:24:19 +02:00
blockPatternCategories ,
2023-09-26 16:23:26 +02:00
userPatternCategories ,
2023-06-27 16:24:19 +02:00
navigationFallbackId
2018-12-18 04:14:52 +01:00
} ) ) ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/rememo/rememo.js
2019-03-07 10:09:59 +01:00
2022-09-20 17:43:29 +02:00
/** @typedef {(...args: any[]) => *[]} GetDependants */
2020-06-26 15:33:47 +02:00
2022-09-20 17:43:29 +02:00
/** @typedef {() => void} Clear */
2022-04-11 14:04:30 +02:00
2020-06-26 15:33:47 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* @ typedef { {
* getDependants : GetDependants ,
* clear : Clear
* } } EnhancedSelector
* /
/ * *
* Internal cache entry .
*
* @ typedef CacheNode
*
* @ property { ? CacheNode | undefined } [ prev ] Previous node .
* @ property { ? CacheNode | undefined } [ next ] Next node .
* @ property { * [ ] } args Function arguments for cache entry .
* @ property { * } val Function result .
* /
/ * *
* @ typedef Cache
2022-04-11 14:04:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ property { Clear } clear Function to clear cache .
* @ property { boolean } [ isUniqueByDependants ] Whether dependants are valid in
* considering cache uniqueness . A cache is unique if dependents are all arrays
* or objects .
* @ property { CacheNode ? } [ head ] Cache head .
* @ property { * [ ] } [ lastDependants ] Dependants from previous invocation .
2020-06-26 15:33:47 +02:00
* /
2020-10-13 15:10:30 +02:00
2020-06-26 15:33:47 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* Arbitrary value used as key for referencing cache object in WeakMap tree .
2022-04-11 14:04:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ type { { } }
2020-06-26 15:33:47 +02:00
* /
2022-09-20 17:43:29 +02:00
var LEAF _KEY = { } ;
2020-06-26 15:33:47 +02:00
/ * *
2022-04-11 14:04:30 +02:00
* Returns the first argument as the sole entry in an array .
2020-06-26 15:33:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ template T
*
* @ param { T } value Value to return .
2022-04-11 14:04:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return { [ T ] } Value returned as entry in array .
2020-06-26 15:33:47 +02:00
* /
2022-09-20 17:43:29 +02:00
function arrayOf ( value ) {
return [ value ] ;
2022-04-11 14:04:30 +02:00
}
2020-06-26 15:33:47 +02:00
/ * *
2022-04-11 14:04:30 +02:00
* Returns true if the value passed is object - like , or false otherwise . A value
* is object - like if it can support property assignment , e . g . object or array .
2020-06-26 15:33:47 +02:00
*
2022-04-11 14:04:30 +02:00
* @ param { * } value Value to test .
2020-06-26 15:33:47 +02:00
*
2022-04-11 14:04:30 +02:00
* @ return { boolean } Whether value is object - like .
2020-06-26 15:33:47 +02:00
* /
2022-09-20 17:43:29 +02:00
function isObjectLike ( value ) {
return ! ! value && 'object' === typeof value ;
2022-04-11 14:04:30 +02:00
}
/ * *
* Creates and returns a new cache object .
*
2022-09-20 17:43:29 +02:00
* @ return { Cache } Cache object .
2022-04-11 14:04:30 +02:00
* /
function createCache ( ) {
2022-09-20 17:43:29 +02:00
/** @type {Cache} */
2022-04-11 14:04:30 +02:00
var cache = {
2022-09-20 17:43:29 +02:00
clear : function ( ) {
2022-04-11 14:04:30 +02:00
cache . head = null ;
} ,
} ;
return cache ;
}
/ * *
* Returns true if entries within the two arrays are strictly equal by
* reference from a starting index .
*
2022-09-20 17:43:29 +02:00
* @ param { * [ ] } a First array .
* @ param { * [ ] } b Second array .
2022-04-11 14:04:30 +02:00
* @ param { number } fromIndex Index from which to start comparison .
*
* @ return { boolean } Whether arrays are shallowly equal .
* /
2022-09-20 17:43:29 +02:00
function isShallowEqual ( a , b , fromIndex ) {
2022-04-11 14:04:30 +02:00
var i ;
2022-09-20 17:43:29 +02:00
if ( a . length !== b . length ) {
2022-04-11 14:04:30 +02:00
return false ;
}
2022-09-20 17:43:29 +02:00
for ( i = fromIndex ; i < a . length ; i ++ ) {
if ( a [ i ] !== b [ i ] ) {
2022-04-11 14:04:30 +02:00
return false ;
}
}
return true ;
}
/ * *
* Returns a memoized selector function . The getDependants function argument is
* called before the memoized selector and is expected to return an immutable
* reference or array of references on which the selector depends for computing
* its own return value . The memoize cache is preserved only as long as those
* dependant references remain the same . If getDependants returns a different
* reference ( s ) , the cache is cleared and the selector value regenerated .
*
2022-09-20 17:43:29 +02:00
* @ template { ( ... args : * [ ] ) => * } S
2022-04-11 14:04:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ param { S } selector Selector function .
* @ param { GetDependants = } getDependants Dependant getter returning an array of
* references used in cache bust consideration .
2022-04-11 14:04:30 +02:00
* /
2022-09-20 17:43:29 +02:00
/* harmony default export */ function rememo ( selector , getDependants ) {
/** @type {WeakMap<*,*>} */
var rootCache ;
2022-04-11 14:04:30 +02:00
2022-09-20 17:43:29 +02:00
/** @type {GetDependants} */
var normalizedGetDependants = getDependants ? getDependants : arrayOf ;
2022-04-11 14:04:30 +02:00
/ * *
* Returns the cache for a given dependants array . When possible , a WeakMap
* will be used to create a unique cache for each set of dependants . This
* is feasible due to the nature of WeakMap in allowing garbage collection
* to occur on entries where the key object is no longer referenced . Since
* WeakMap requires the key to be an object , this is only possible when the
* dependant is object - like . The root cache is created as a hierarchy where
* each top - level key is the first entry in a dependants set , the value a
* WeakMap where each key is the next dependant , and so on . This continues
* so long as the dependants are object - like . If no dependants are object -
* like , then the cache is shared across all invocations .
*
* @ see isObjectLike
*
2022-09-20 17:43:29 +02:00
* @ param { * [ ] } dependants Selector dependants .
2022-04-11 14:04:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return { Cache } Cache object .
2022-04-11 14:04:30 +02:00
* /
2022-09-20 17:43:29 +02:00
function getCache ( dependants ) {
2022-04-11 14:04:30 +02:00
var caches = rootCache ,
isUniqueByDependants = true ,
2022-09-20 17:43:29 +02:00
i ,
dependant ,
map ,
cache ;
2022-04-11 14:04:30 +02:00
2022-09-20 17:43:29 +02:00
for ( i = 0 ; i < dependants . length ; i ++ ) {
dependant = dependants [ i ] ;
2022-04-11 14:04:30 +02:00
// Can only compose WeakMap from object-like key.
2022-09-20 17:43:29 +02:00
if ( ! isObjectLike ( dependant ) ) {
2022-04-11 14:04:30 +02:00
isUniqueByDependants = false ;
break ;
}
// Does current segment of cache already have a WeakMap?
2022-09-20 17:43:29 +02:00
if ( caches . has ( dependant ) ) {
2022-04-11 14:04:30 +02:00
// Traverse into nested WeakMap.
2022-09-20 17:43:29 +02:00
caches = caches . get ( dependant ) ;
2022-04-11 14:04:30 +02:00
} else {
// Create, set, and traverse into a new one.
map = new WeakMap ( ) ;
2022-09-20 17:43:29 +02:00
caches . set ( dependant , map ) ;
2022-04-11 14:04:30 +02:00
caches = map ;
}
}
// We use an arbitrary (but consistent) object as key for the last item
// in the WeakMap to serve as our running cache.
2022-09-20 17:43:29 +02:00
if ( ! caches . has ( LEAF _KEY ) ) {
2022-04-11 14:04:30 +02:00
cache = createCache ( ) ;
cache . isUniqueByDependants = isUniqueByDependants ;
2022-09-20 17:43:29 +02:00
caches . set ( LEAF _KEY , cache ) ;
2022-04-11 14:04:30 +02:00
}
2022-09-20 17:43:29 +02:00
return caches . get ( LEAF _KEY ) ;
2022-04-11 14:04:30 +02:00
}
/ * *
* Resets root memoization cache .
* /
function clear ( ) {
2022-09-20 17:43:29 +02:00
rootCache = new WeakMap ( ) ;
2022-04-11 14:04:30 +02:00
}
2022-09-20 17:43:29 +02:00
/* eslint-disable jsdoc/check-param-names */
2022-04-11 14:04:30 +02:00
/ * *
* The augmented selector call , considering first whether dependants have
* changed before passing it to underlying memoize function .
*
2022-09-20 17:43:29 +02:00
* @ param { * } source Source object for derivation .
* @ param { ... * } extraArgs Additional arguments to pass to selector .
2022-04-11 14:04:30 +02:00
*
* @ return { * } Selector result .
* /
2022-09-20 17:43:29 +02:00
/* eslint-enable jsdoc/check-param-names */
function callSelector ( /* source, ...extraArgs */ ) {
2022-04-11 14:04:30 +02:00
var len = arguments . length ,
2022-09-20 17:43:29 +02:00
cache ,
node ,
i ,
args ,
dependants ;
2022-04-11 14:04:30 +02:00
// Create copy of arguments (avoid leaking deoptimization).
2022-09-20 17:43:29 +02:00
args = new Array ( len ) ;
for ( i = 0 ; i < len ; i ++ ) {
args [ i ] = arguments [ i ] ;
2022-04-11 14:04:30 +02:00
}
2022-09-20 17:43:29 +02:00
dependants = normalizedGetDependants . apply ( null , args ) ;
cache = getCache ( dependants ) ;
// If not guaranteed uniqueness by dependants (primitive type), shallow
// compare against last dependants and, if references have changed,
// destroy cache to recalculate result.
if ( ! cache . isUniqueByDependants ) {
if (
cache . lastDependants &&
! isShallowEqual ( dependants , cache . lastDependants , 0 )
) {
2022-04-11 14:04:30 +02:00
cache . clear ( ) ;
}
cache . lastDependants = dependants ;
}
node = cache . head ;
2022-09-20 17:43:29 +02:00
while ( node ) {
2022-04-11 14:04:30 +02:00
// Check whether node arguments match arguments
2022-09-20 17:43:29 +02:00
if ( ! isShallowEqual ( node . args , args , 1 ) ) {
2022-04-11 14:04:30 +02:00
node = node . next ;
continue ;
}
// At this point we can assume we've found a match
// Surface matched node to head if not already
2022-09-20 17:43:29 +02:00
if ( node !== cache . head ) {
2022-04-11 14:04:30 +02:00
// Adjust siblings to point to each other.
2022-09-20 17:43:29 +02:00
/** @type {CacheNode} */ ( node . prev ) . next = node . next ;
if ( node . next ) {
2022-04-11 14:04:30 +02:00
node . next . prev = node . prev ;
}
node . next = cache . head ;
node . prev = null ;
2022-09-20 17:43:29 +02:00
/** @type {CacheNode} */ ( cache . head ) . prev = node ;
2022-04-11 14:04:30 +02:00
cache . head = node ;
}
// Return immediately
return node . val ;
}
// No cached value found. Continue to insertion phase:
2022-09-20 17:43:29 +02:00
node = /** @type {CacheNode} */ ( {
2022-04-11 14:04:30 +02:00
// Generate the result from original function
2022-09-20 17:43:29 +02:00
val : selector . apply ( null , args ) ,
} ) ;
2022-04-11 14:04:30 +02:00
// Avoid including the source object in the cache.
2022-09-20 17:43:29 +02:00
args [ 0 ] = null ;
2022-04-11 14:04:30 +02:00
node . args = args ;
// Don't need to check whether node is already head, since it would
// have been returned above already if it was
// Shift existing head down list
2022-09-20 17:43:29 +02:00
if ( cache . head ) {
2022-04-11 14:04:30 +02:00
cache . head . prev = node ;
node . next = cache . head ;
}
cache . head = node ;
return node . val ;
}
2022-09-20 17:43:29 +02:00
callSelector . getDependants = normalizedGetDependants ;
2022-04-11 14:04:30 +02:00
callSelector . clear = clear ;
clear ( ) ;
2022-09-20 17:43:29 +02:00
return /** @type {S & EnhancedSelector} */ ( callSelector ) ;
2022-04-11 14:04:30 +02:00
}
// EXTERNAL MODULE: ./node_modules/equivalent-key-map/equivalent-key-map.js
var equivalent _key _map = _ _webpack _require _ _ ( 2167 ) ;
var equivalent _key _map _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( equivalent _key _map ) ;
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/selectors.js
/ * *
* External dependencies
* /
2023-09-26 16:23:26 +02:00
2022-04-11 14:04:30 +02:00
/ * *
* Internal dependencies
* /
2023-06-27 16:24:19 +02:00
2022-04-11 14:04:30 +02:00
/ * *
* Cache of state keys to EquivalentKeyMap where the inner map tracks queries
* to their resulting items set . WeakMap allows garbage collection on expired
* state references .
*
* @ type { WeakMap < Object , EquivalentKeyMap > }
* /
const queriedItemsCacheByState = new WeakMap ( ) ;
2023-09-26 16:23:26 +02:00
2022-04-11 14:04:30 +02:00
/ * *
* Returns items for a given query , or null if the items are not known .
*
* @ param { Object } state State object .
* @ param { ? Object } query Optional query .
*
* @ return { ? Array } Query items .
* /
function getQueriedItemsUncached ( state , query ) {
2021-05-19 17:09:27 +02:00
const {
stableKey ,
page ,
perPage ,
include ,
2021-06-25 17:52:22 +02:00
fields ,
context
2021-05-19 17:09:27 +02:00
} = get _query _parts ( query ) ;
let itemIds ;
2023-06-27 16:24:19 +02:00
if ( state . queries ? . [ context ] ? . [ stableKey ] ) {
2021-06-25 17:52:22 +02:00
itemIds = state . queries [ context ] [ stableKey ] ;
2020-06-26 15:33:47 +02:00
}
if ( ! itemIds ) {
return null ;
}
2021-05-19 17:09:27 +02:00
const startOffset = perPage === - 1 ? 0 : ( page - 1 ) * perPage ;
const endOffset = perPage === - 1 ? itemIds . length : Math . min ( startOffset + perPage , itemIds . length ) ;
const items = [ ] ;
for ( let i = startOffset ; i < endOffset ; i ++ ) {
const itemId = itemIds [ i ] ;
2020-10-13 15:10:30 +02:00
if ( Array . isArray ( include ) && ! include . includes ( itemId ) ) {
continue ;
2023-09-26 16:23:26 +02:00
}
2020-10-13 15:10:30 +02:00
2023-09-26 16:23:26 +02:00
// Having a target item ID doesn't guarantee that this object has been queried.
2023-06-27 16:24:19 +02:00
if ( ! state . items [ context ] ? . hasOwnProperty ( itemId ) ) {
2020-10-13 15:10:30 +02:00
return null ;
}
2021-06-25 17:52:22 +02:00
const item = state . items [ context ] [ itemId ] ;
2021-05-19 17:09:27 +02:00
let filteredItem ;
2020-10-13 15:10:30 +02:00
if ( Array . isArray ( fields ) ) {
filteredItem = { } ;
2021-05-19 17:09:27 +02:00
for ( let f = 0 ; f < fields . length ; f ++ ) {
const field = fields [ f ] . split ( '.' ) ;
2023-06-27 16:24:19 +02:00
let value = item ;
field . forEach ( fieldName => {
2023-09-26 21:11:22 +02:00
value = value ? . [ fieldName ] ;
2023-06-27 16:24:19 +02:00
} ) ;
setNestedValue ( filteredItem , field , value ) ;
2020-10-13 15:10:30 +02:00
}
} else {
// If expecting a complete item, validate that completeness, or
// otherwise abort.
2023-06-27 16:24:19 +02:00
if ( ! state . itemIsComplete [ context ] ? . [ itemId ] ) {
2020-10-13 15:10:30 +02:00
return null ;
}
filteredItem = item ;
}
items . push ( filteredItem ) ;
2020-06-26 15:33:47 +02:00
}
return items ;
}
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Returns items for a given query , or null if the items are not known . Caches
* result both per state ( by reference ) and per query ( by deep equality ) .
* The caching approach is intended to be durable to query objects which are
* deeply but not referentially equal , since otherwise :
*
* ` getQueriedItems( state, {} ) !== getQueriedItems( state, {} ) `
*
* @ param { Object } state State object .
* @ param { ? Object } query Optional query .
*
* @ return { ? Array } Query items .
* /
2023-06-27 16:24:19 +02:00
const getQueriedItems = rememo ( ( state , query = { } ) => {
2021-05-19 17:09:27 +02:00
let queriedItemsCache = queriedItemsCacheByState . get ( state ) ;
2020-06-26 15:33:47 +02:00
if ( queriedItemsCache ) {
2021-05-19 17:09:27 +02:00
const queriedItems = queriedItemsCache . get ( query ) ;
2020-06-26 15:33:47 +02:00
if ( queriedItems !== undefined ) {
return queriedItems ;
}
} else {
2022-04-11 14:04:30 +02:00
queriedItemsCache = new ( equivalent _key _map _default ( ) ) ( ) ;
2020-06-26 15:33:47 +02:00
queriedItemsCacheByState . set ( state , queriedItemsCache ) ;
}
2021-05-19 17:09:27 +02:00
const items = getQueriedItemsUncached ( state , query ) ;
2020-06-26 15:33:47 +02:00
queriedItemsCache . set ( query , items ) ;
return items ;
} ) ;
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/is-raw-attribute.js
2021-11-08 15:29:21 +01:00
/ * *
* Checks whether the attribute is a "raw" attribute or not .
*
2022-04-12 17:12:47 +02:00
* @ param { Object } entity Entity record .
2021-11-08 15:29:21 +01:00
* @ param { string } attribute Attribute name .
*
* @ return { boolean } Is the attribute raw
* /
function isRawAttribute ( entity , attribute ) {
return ( entity . rawAttributes || [ ] ) . includes ( attribute ) ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/selectors.js
2018-12-14 05:41:57 +01:00
/ * *
* External dependencies
* /
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
* WordPress dependencies
* /
2019-03-07 10:09:59 +01:00
2021-11-08 15:29:21 +01:00
2018-12-14 05:41:57 +01:00
/ * *
* Internal dependencies
* /
2020-06-26 15:33:47 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Shared reference to an empty object for cases where it is important to avoid
* returning a new object reference on every invocation , as in a connected or
* other pure component which performs ` shouldComponentUpdate ` check on props .
* This should be used as a last resort , since the normalized data should be
* maintained by the reducer result in state .
* /
const EMPTY _OBJECT = { } ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
* Returns true if a request is in progress for embed preview data , or false
* otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param url URL the preview would be for .
2018-12-14 05:41:57 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether a request is in progress for an embed preview .
2018-12-14 05:41:57 +01:00
* /
2022-04-11 14:04:30 +02:00
const isRequestingEmbedPreview = ( 0 , external _wp _data _namespaceObject . createRegistrySelector ) ( select => ( state , url ) => {
2021-11-08 15:29:21 +01:00
return select ( STORE _NAME ) . isResolving ( 'getEmbedPreview' , [ url ] ) ;
2019-03-07 10:09:59 +01:00
} ) ;
2023-09-26 16:23:26 +02:00
2020-12-01 13:19:43 +01:00
/ * *
* Returns all available authors .
*
2021-11-08 15:29:21 +01:00
* @ deprecated since 11.3 . Callers should use ` select( 'core' ).getUsers({ who: 'authors' }) ` instead .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param query Optional object of query parameters to
* include with request . For valid query parameters see the [ Users page ] ( https : //developer.wordpress.org/rest-api/reference/users/) in the REST API Handbook and see the arguments for [List Users](https://developer.wordpress.org/rest-api/reference/users/#list-users) and [Retrieve a User](https://developer.wordpress.org/rest-api/reference/users/#retrieve-a-user).
2022-09-20 17:43:29 +02:00
* @ return Authors list .
2020-12-01 13:19:43 +01:00
* /
function getAuthors ( state , query ) {
2021-11-08 15:29:21 +01:00
external _wp _deprecated _default ( ) ( "select( 'core' ).getAuthors()" , {
since : '5.9' ,
alternative : "select( 'core' ).getUsers({ who: 'authors' })"
} ) ;
2022-04-11 14:04:30 +02:00
const path = ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp/v2/users/?who=authors&per_page=100' , query ) ;
2020-12-01 13:19:43 +01:00
return getUserQueryResults ( state , path ) ;
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
* Returns the current user .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2019-09-19 17:19:18 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Current user object .
2019-09-19 17:19:18 +02:00
* /
function getCurrentUser ( state ) {
return state . currentUser ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
* Returns all the users returned by a query ID .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param queryID Query ID .
2018-12-14 05:41:57 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return Users list .
2018-12-14 05:41:57 +01:00
* /
2022-04-11 14:04:30 +02:00
const getUserQueryResults = rememo ( ( state , queryID ) => {
2023-02-07 08:04:52 +01:00
var _state$users$queries$ ;
const queryResults = ( _state$users$queries$ = state . users . queries [ queryID ] ) !== null && _state$users$queries$ !== void 0 ? _state$users$queries$ : [ ] ;
return queryResults . map ( id => state . users . byId [ id ] ) ;
2021-05-19 17:09:27 +02:00
} , ( state , queryID ) => [ state . users . queries [ queryID ] , state . users . byId ] ) ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2022-04-12 17:12:47 +02:00
* Returns the loaded entities for the given kind .
2018-12-14 05:41:57 +01:00
*
2022-04-12 17:12:47 +02:00
* @ deprecated since WordPress 6.0 . Use getEntitiesConfig instead
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param kind Entity kind .
2018-12-14 05:41:57 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return Array of entities with config matching kind .
2018-12-14 05:41:57 +01:00
* /
function getEntitiesByKind ( state , kind ) {
2022-04-12 17:12:47 +02:00
external _wp _deprecated _default ( ) ( "wp.data.select( 'core' ).getEntitiesByKind()" , {
since : '6.0' ,
alternative : "wp.data.select( 'core' ).getEntitiesConfig()"
} ) ;
return getEntitiesConfig ( state , kind ) ;
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Returns the loaded entities for the given kind .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param kind Entity kind .
2022-04-12 17:12:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Array of entities with config matching kind .
2022-04-12 17:12:47 +02:00
* /
function getEntitiesConfig ( state , kind ) {
2023-02-07 08:04:52 +01:00
return state . entities . config . filter ( entity => entity . kind === kind ) ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2022-04-12 17:12:47 +02:00
* Returns the entity config given its kind and name .
2018-12-14 05:41:57 +01:00
*
2022-04-12 17:12:47 +02:00
* @ deprecated since WordPress 6.0 . Use getEntityConfig instead
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param kind Entity kind .
* @ param name Entity name .
2018-12-14 05:41:57 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return Entity config
2018-12-14 05:41:57 +01:00
* /
2021-05-19 17:09:27 +02:00
function getEntity ( state , kind , name ) {
2022-04-12 17:12:47 +02:00
external _wp _deprecated _default ( ) ( "wp.data.select( 'core' ).getEntity()" , {
since : '6.0' ,
alternative : "wp.data.select( 'core' ).getEntityConfig()"
} ) ;
return getEntityConfig ( state , kind , name ) ;
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Returns the entity config given its kind and name .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param kind Entity kind .
* @ param name Entity name .
2022-04-12 17:12:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Entity config
2022-04-12 17:12:47 +02:00
* /
function getEntityConfig ( state , kind , name ) {
2023-06-27 16:24:19 +02:00
return state . entities . config ? . find ( config => config . kind === kind && config . name === name ) ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2022-10-04 17:06:52 +02:00
/ * *
* GetEntityRecord is declared as a * callable interface * with
* two signatures to work around the fact that TypeScript doesn ' t
* allow currying generic functions :
*
* ` ` ` ts
* type CurriedState = F extends ( state : any , ... args : infer P ) => infer R
* ? ( ... args : P ) => R
* : F ;
* type Selector = < K extends string | number > (
* state : any ,
* kind : K ,
* key : K extends string ? 'string value' : false
* ) => K ;
* type BadlyInferredSignature = CurriedState < Selector >
* // BadlyInferredSignature evaluates to:
* // (kind: string number, key: false | "string value") => string number
* ` ` `
*
* The signature without the state parameter shipped as CurriedSignature
* is used in the return value of ` select( coreStore ) ` .
*
* See https : //github.com/WordPress/gutenberg/pull/41578 for more details.
* /
2018-12-14 05:41:57 +01:00
/ * *
2020-10-13 15:10:30 +02:00
* Returns the Entity ' s record object by key . Returns ` null ` if the value is not
* yet received , undefined if the value entity is known to not exist , or the
* entity object if it exists and is received .
2019-10-15 17:37:08 +02:00
*
2023-06-27 16:24:19 +02:00
* @ param state State tree
* @ param kind Entity kind .
* @ param name Entity name .
* @ param key Record ' s key
* @ param query Optional query . If requesting specific
* fields , fields must always include the ID . For valid query parameters see the [ Reference ] ( https : //developer.wordpress.org/rest-api/reference/) in the REST API Handbook and select the entity kind. Then see the arguments available "Retrieve a [Entity kind]".
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Record .
2019-10-15 17:37:08 +02:00
* /
2022-04-11 14:04:30 +02:00
const getEntityRecord = rememo ( ( state , kind , name , key , query ) => {
2023-06-27 16:24:19 +02:00
var _query$context ;
const queriedState = state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData ;
2020-10-13 15:10:30 +02:00
if ( ! queriedState ) {
return undefined ;
}
2023-06-27 16:24:19 +02:00
const context = ( _query$context = query ? . context ) !== null && _query$context !== void 0 ? _query$context : 'default' ;
2020-10-13 15:10:30 +02:00
if ( query === undefined ) {
// If expecting a complete item, validate that completeness.
2023-06-27 16:24:19 +02:00
if ( ! queriedState . itemIsComplete [ context ] ? . [ key ] ) {
2020-10-13 15:10:30 +02:00
return undefined ;
}
2021-06-25 17:52:22 +02:00
return queriedState . items [ context ] [ key ] ;
2020-10-13 15:10:30 +02:00
}
2023-06-27 16:24:19 +02:00
const item = queriedState . items [ context ] ? . [ key ] ;
2020-10-20 15:36:16 +02:00
if ( item && query . _fields ) {
2022-04-12 17:12:47 +02:00
var _getNormalizedCommaSe ;
2021-05-19 17:09:27 +02:00
const filteredItem = { } ;
2022-04-12 17:12:47 +02:00
const fields = ( _getNormalizedCommaSe = get _normalized _comma _separable ( query . _fields ) ) !== null && _getNormalizedCommaSe !== void 0 ? _getNormalizedCommaSe : [ ] ;
2021-05-19 17:09:27 +02:00
for ( let f = 0 ; f < fields . length ; f ++ ) {
const field = fields [ f ] . split ( '.' ) ;
2023-06-27 16:24:19 +02:00
let value = item ;
field . forEach ( fieldName => {
2023-09-26 21:11:22 +02:00
value = value ? . [ fieldName ] ;
2023-06-27 16:24:19 +02:00
} ) ;
setNestedValue ( filteredItem , field , value ) ;
2020-10-20 15:36:16 +02:00
}
return filteredItem ;
}
return item ;
2021-11-08 15:29:21 +01:00
} , ( state , kind , name , recordId , query ) => {
var _query$context2 ;
2023-06-27 16:24:19 +02:00
const context = ( _query$context2 = query ? . context ) !== null && _query$context2 !== void 0 ? _query$context2 : 'default' ;
return [ state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData ? . items [ context ] ? . [ recordId ] , state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData ? . itemIsComplete [ context ] ? . [ recordId ] ] ;
2021-11-08 15:29:21 +01:00
} ) ;
2023-09-26 16:23:26 +02:00
2020-02-06 22:03:31 +01:00
/ * *
2022-04-12 17:12:47 +02:00
* Returns the Entity 's record object by key. Doesn' t trigger a resolver nor requests the entity records from the API if the entity record isn ' t available in the local state .
2020-02-06 22:03:31 +01:00
*
2023-06-27 16:24:19 +02:00
* @ param state State tree
* @ param kind Entity kind .
* @ param name Entity name .
* @ param key Record ' s key
2020-02-06 22:03:31 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return Record .
2020-02-06 22:03:31 +01:00
* /
2020-02-10 23:33:27 +01:00
function _ _experimentalGetEntityRecordNoResolver ( state , kind , name , key ) {
2022-04-11 14:04:30 +02:00
return getEntityRecord ( state , kind , name , key ) ;
2020-02-06 22:03:31 +01:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns the entity ' s record object by key ,
* with its attributes mapped to their raw values .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param key Record ' s key .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Object with the entity ' s raw attributes .
2019-10-15 17:37:08 +02:00
* /
2022-04-11 14:04:30 +02:00
const getRawEntityRecord = rememo ( ( state , kind , name , key ) => {
const record = getEntityRecord ( state , kind , name , key ) ;
2021-05-19 17:09:27 +02:00
return record && Object . keys ( record ) . reduce ( ( accumulator , _key ) => {
2022-04-12 17:12:47 +02:00
if ( isRawAttribute ( getEntityConfig ( state , kind , name ) , _key ) ) {
2023-06-27 16:24:19 +02:00
var _record$ _key$raw ;
2021-11-08 15:29:21 +01:00
// Because edits are the "raw" attribute values,
// we return those from record selectors to make rendering,
// comparisons, and joins with edits easier.
2023-06-27 16:24:19 +02:00
accumulator [ _key ] = ( _record$ _key$raw = record [ _key ] ? . raw ) !== null && _record$ _key$raw !== void 0 ? _record$ _key$raw : record [ _key ] ;
2021-11-08 15:29:21 +01:00
} else {
accumulator [ _key ] = record [ _key ] ;
}
2020-01-08 12:57:23 +01:00
return accumulator ;
2019-10-15 17:37:08 +02:00
} , { } ) ;
2021-11-08 15:29:21 +01:00
} , ( state , kind , name , recordId , query ) => {
var _query$context3 ;
2023-06-27 16:24:19 +02:00
const context = ( _query$context3 = query ? . context ) !== null && _query$context3 !== void 0 ? _query$context3 : 'default' ;
return [ state . entities . config , state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData ? . items [ context ] ? . [ recordId ] , state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData ? . itemIsComplete [ context ] ? . [ recordId ] ] ;
2021-11-08 15:29:21 +01:00
} ) ;
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Returns true if records have been received for the given set of parameters ,
* or false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree
* @ param kind Entity kind .
* @ param name Entity name .
* @ param query Optional terms query . For valid query parameters see the [ Reference ] ( https : //developer.wordpress.org/rest-api/reference/) in the REST API Handbook and select the entity kind. Then see the arguments available for "List [Entity kind]s".
2020-10-13 15:10:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether entity records have been received .
2020-10-13 15:10:30 +02:00
* /
function hasEntityRecords ( state , kind , name , query ) {
return Array . isArray ( getEntityRecords ( state , kind , name , query ) ) ;
}
2023-09-26 16:23:26 +02:00
2022-10-04 17:06:52 +02:00
/ * *
* GetEntityRecord is declared as a * callable interface * with
* two signatures to work around the fact that TypeScript doesn ' t
* allow currying generic functions .
*
* @ see GetEntityRecord
* @ see https : //github.com/WordPress/gutenberg/pull/41578
* /
2019-10-15 17:37:08 +02:00
/ * *
* Returns the Entity ' s records .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree
* @ param kind Entity kind .
* @ param name Entity name .
* @ param query Optional terms query . If requesting specific
* fields , fields must always include the ID . For valid query parameters see the [ Reference ] ( https : //developer.wordpress.org/rest-api/reference/) in the REST API Handbook and select the entity kind. Then see the arguments available for "List [Entity kind]s".
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Records .
2019-10-15 17:37:08 +02:00
* /
2022-09-20 17:43:29 +02:00
const getEntityRecords = ( state , kind , name , query ) => {
2020-10-13 15:10:30 +02:00
// Queried data state is prepopulated for all known entities. If this is not
2022-04-12 17:12:47 +02:00
// assigned for the given parameters, then it is known to not exist.
2023-06-27 16:24:19 +02:00
const queriedState = state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData ;
2019-10-15 17:37:08 +02:00
if ( ! queriedState ) {
2022-04-12 17:12:47 +02:00
return null ;
2019-10-15 17:37:08 +02:00
}
return getQueriedItems ( queriedState , query ) ;
2022-09-20 17:43:29 +02:00
} ;
2020-01-22 23:06:21 +01:00
/ * *
2022-09-20 17:43:29 +02:00
* Returns the list of dirty entity records .
2020-01-22 23:06:21 +01:00
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
2020-01-22 23:06:21 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return The list of updated records
2020-01-22 23:06:21 +01:00
* /
2022-04-11 14:04:30 +02:00
const _ _experimentalGetDirtyEntityRecords = rememo ( state => {
2021-05-19 17:09:27 +02:00
const {
entities : {
2022-04-12 17:12:47 +02:00
records
2021-05-19 17:09:27 +02:00
}
} = state ;
const dirtyRecords = [ ] ;
2022-04-12 17:12:47 +02:00
Object . keys ( records ) . forEach ( kind => {
Object . keys ( records [ kind ] ) . forEach ( name => {
2023-09-26 16:23:26 +02:00
const primaryKeys = Object . keys ( records [ kind ] [ name ] . edits ) . filter ( primaryKey =>
// The entity record must exist (not be deleted),
2021-11-08 15:29:21 +01:00
// and it must have edits.
2022-04-11 14:04:30 +02:00
getEntityRecord ( state , kind , name , primaryKey ) && hasEditsForEntityRecord ( state , kind , name , primaryKey ) ) ;
2020-06-26 15:33:47 +02:00
if ( primaryKeys . length ) {
2022-04-12 17:12:47 +02:00
const entityConfig = getEntityConfig ( state , kind , name ) ;
2021-05-19 17:09:27 +02:00
primaryKeys . forEach ( primaryKey => {
2022-04-11 14:04:30 +02:00
const entityRecord = getEditedEntityRecord ( state , kind , name , primaryKey ) ;
2020-06-26 15:33:47 +02:00
dirtyRecords . push ( {
// We avoid using primaryKey because it's transformed into a string
// when it's used as an object key.
2022-09-20 17:43:29 +02:00
key : entityRecord ? entityRecord [ entityConfig . key || DEFAULT _ENTITY _KEY ] : undefined ,
2023-06-27 16:24:19 +02:00
title : entityConfig ? . getTitle ? . ( entityRecord ) || '' ,
2021-05-19 17:09:27 +02:00
name ,
kind
2020-06-26 15:33:47 +02:00
} ) ;
2020-01-22 23:06:21 +01:00
} ) ;
}
} ) ;
2020-06-26 15:33:47 +02:00
} ) ;
return dirtyRecords ;
2022-04-12 17:12:47 +02:00
} , state => [ state . entities . records ] ) ;
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Returns the list of entities currently being saved .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
2021-11-08 15:29:21 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return The list of records being saved .
2021-11-08 15:29:21 +01:00
* /
2022-04-11 14:04:30 +02:00
const _ _experimentalGetEntitiesBeingSaved = rememo ( state => {
2021-11-08 15:29:21 +01:00
const {
entities : {
2022-04-12 17:12:47 +02:00
records
2021-11-08 15:29:21 +01:00
}
} = state ;
const recordsBeingSaved = [ ] ;
2022-04-12 17:12:47 +02:00
Object . keys ( records ) . forEach ( kind => {
Object . keys ( records [ kind ] ) . forEach ( name => {
const primaryKeys = Object . keys ( records [ kind ] [ name ] . saving ) . filter ( primaryKey => isSavingEntityRecord ( state , kind , name , primaryKey ) ) ;
2021-11-08 15:29:21 +01:00
if ( primaryKeys . length ) {
2022-04-12 17:12:47 +02:00
const entityConfig = getEntityConfig ( state , kind , name ) ;
2021-11-08 15:29:21 +01:00
primaryKeys . forEach ( primaryKey => {
2022-04-11 14:04:30 +02:00
const entityRecord = getEditedEntityRecord ( state , kind , name , primaryKey ) ;
2021-11-08 15:29:21 +01:00
recordsBeingSaved . push ( {
// We avoid using primaryKey because it's transformed into a string
// when it's used as an object key.
2022-09-20 17:43:29 +02:00
key : entityRecord ? entityRecord [ entityConfig . key || DEFAULT _ENTITY _KEY ] : undefined ,
2023-06-27 16:24:19 +02:00
title : entityConfig ? . getTitle ? . ( entityRecord ) || '' ,
2021-11-08 15:29:21 +01:00
name ,
kind
} ) ;
} ) ;
}
} ) ;
} ) ;
return recordsBeingSaved ;
2022-04-12 17:12:47 +02:00
} , state => [ state . entities . records ] ) ;
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns the specified entity record ' s edits .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The entity record ' s edits .
2019-10-15 17:37:08 +02:00
* /
function getEntityRecordEdits ( state , kind , name , recordId ) {
2023-06-27 16:24:19 +02:00
return state . entities . records ? . [ kind ] ? . [ name ] ? . edits ? . [ recordId ] ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns the specified entity record ' s non transient edits .
*
* Transient edits don ' t create an undo level , and
* are not considered for change detection .
* They are defined in the entity ' s config .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The entity record ' s non transient edits .
2019-10-15 17:37:08 +02:00
* /
2022-04-11 14:04:30 +02:00
const getEntityRecordNonTransientEdits = rememo ( ( state , kind , name , recordId ) => {
2021-05-19 17:09:27 +02:00
const {
transientEdits
2022-04-12 17:12:47 +02:00
} = getEntityConfig ( state , kind , name ) || { } ;
2021-05-19 17:09:27 +02:00
const edits = getEntityRecordEdits ( state , kind , name , recordId ) || { } ;
2019-12-09 18:37:10 +01:00
if ( ! transientEdits ) {
return edits ;
}
2021-05-19 17:09:27 +02:00
return Object . keys ( edits ) . reduce ( ( acc , key ) => {
2019-10-15 17:37:08 +02:00
if ( ! transientEdits [ key ] ) {
acc [ key ] = edits [ key ] ;
}
return acc ;
} , { } ) ;
2023-06-27 16:24:19 +02:00
} , ( state , kind , name , recordId ) => [ state . entities . config , state . entities . records ? . [ kind ] ? . [ name ] ? . edits ? . [ recordId ] ] ) ;
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if the specified entity record has edits ,
* and false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether the entity record has edits or not .
2019-10-15 17:37:08 +02:00
* /
function hasEditsForEntityRecord ( state , kind , name , recordId ) {
return isSavingEntityRecord ( state , kind , name , recordId ) || Object . keys ( getEntityRecordNonTransientEdits ( state , kind , name , recordId ) ) . length > 0 ;
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns the specified entity record , merged with its edits .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The entity record , merged with its edits .
2019-10-15 17:37:08 +02:00
* /
2023-09-26 16:23:26 +02:00
const getEditedEntityRecord = rememo ( ( state , kind , name , recordId ) => ( {
... getRawEntityRecord ( state , kind , name , recordId ) ,
2021-05-19 17:09:27 +02:00
... getEntityRecordEdits ( state , kind , name , recordId )
2021-11-08 15:29:21 +01:00
} ) , ( state , kind , name , recordId , query ) => {
var _query$context4 ;
2023-06-27 16:24:19 +02:00
const context = ( _query$context4 = query ? . context ) !== null && _query$context4 !== void 0 ? _query$context4 : 'default' ;
return [ state . entities . config , state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData . items [ context ] ? . [ recordId ] , state . entities . records ? . [ kind ] ? . [ name ] ? . queriedData . itemIsComplete [ context ] ? . [ recordId ] , state . entities . records ? . [ kind ] ? . [ name ] ? . edits ? . [ recordId ] ] ;
2021-11-08 15:29:21 +01:00
} ) ;
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if the specified entity record is autosaving , and false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether the entity record is autosaving or not .
2019-10-15 17:37:08 +02:00
* /
function isAutosavingEntityRecord ( state , kind , name , recordId ) {
2023-06-27 16:24:19 +02:00
var _state$entities$recor ;
2021-05-19 17:09:27 +02:00
const {
pending ,
isAutosave
2023-06-27 16:24:19 +02:00
} = ( _state$entities$recor = state . entities . records ? . [ kind ] ? . [ name ] ? . saving ? . [ recordId ] ) !== null && _state$entities$recor !== void 0 ? _state$entities$recor : { } ;
2019-10-15 17:37:08 +02:00
return Boolean ( pending && isAutosave ) ;
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if the specified entity record is saving , and false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether the entity record is saving or not .
2019-10-15 17:37:08 +02:00
* /
function isSavingEntityRecord ( state , kind , name , recordId ) {
2023-06-27 16:24:19 +02:00
var _state$entities$recor2 ;
return ( _state$entities$recor2 = state . entities . records ? . [ kind ] ? . [ name ] ? . saving ? . [ recordId ] ? . pending ) !== null && _state$entities$recor2 !== void 0 ? _state$entities$recor2 : false ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Returns true if the specified entity record is deleting , and false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2020-10-13 15:10:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether the entity record is deleting or not .
2020-10-13 15:10:30 +02:00
* /
function isDeletingEntityRecord ( state , kind , name , recordId ) {
2023-06-27 16:24:19 +02:00
var _state$entities$recor3 ;
return ( _state$entities$recor3 = state . entities . records ? . [ kind ] ? . [ name ] ? . deleting ? . [ recordId ] ? . pending ) !== null && _state$entities$recor3 !== void 0 ? _state$entities$recor3 : false ;
2020-10-13 15:10:30 +02:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns the specified entity record ' s last save error .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The entity record ' s save error .
2019-10-15 17:37:08 +02:00
* /
function getLastEntitySaveError ( state , kind , name , recordId ) {
2023-06-27 16:24:19 +02:00
return state . entities . records ? . [ kind ] ? . [ name ] ? . saving ? . [ recordId ] ? . error ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2020-10-13 15:10:30 +02:00
/ * *
* Returns the specified entity record ' s last delete error .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ID .
2020-10-13 15:10:30 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The entity record ' s save error .
2020-10-13 15:10:30 +02:00
* /
function getLastEntityDeleteError ( state , kind , name , recordId ) {
2023-06-27 16:24:19 +02:00
return state . entities . records ? . [ kind ] ? . [ name ] ? . deleting ? . [ recordId ] ? . error ;
2020-10-13 15:10:30 +02:00
}
2019-10-15 17:37:08 +02:00
/ * *
* Returns the previous edit from the current undo offset
* for the entity records edits history , if any .
*
2023-06-27 16:24:19 +02:00
* @ deprecated since 6.3
*
* @ param state State tree .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The edit .
2019-10-15 17:37:08 +02:00
* /
function getUndoEdit ( state ) {
2023-06-27 16:24:19 +02:00
external _wp _deprecated _default ( ) ( "select( 'core' ).getUndoEdit()" , {
since : '6.3'
} ) ;
2023-09-26 16:23:26 +02:00
return undefined ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns the next edit from the current undo offset
* for the entity records edits history , if any .
*
2023-06-27 16:24:19 +02:00
* @ deprecated since 6.3
*
* @ param state State tree .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The edit .
2019-10-15 17:37:08 +02:00
* /
function getRedoEdit ( state ) {
2023-06-27 16:24:19 +02:00
external _wp _deprecated _default ( ) ( "select( 'core' ).getRedoEdit()" , {
since : '6.3'
} ) ;
2023-09-26 16:23:26 +02:00
return undefined ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if there is a previous edit from the current undo offset
* for the entity records edits history , and false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether there is a previous edit or not .
2019-10-15 17:37:08 +02:00
* /
function hasUndo ( state ) {
2023-09-26 16:23:26 +02:00
return state . undoManager . hasUndo ( ) ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if there is a next edit from the current undo offset
* for the entity records edits history , and false otherwise .
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether there is a next edit or not .
2019-10-15 17:37:08 +02:00
* /
function hasRedo ( state ) {
2023-09-26 16:23:26 +02:00
return state . undoManager . hasRedo ( ) ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Return the current theme .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2020-06-26 15:33:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The current theme .
2020-06-26 15:33:47 +02:00
* /
function getCurrentTheme ( state ) {
2022-04-11 14:04:30 +02:00
return getEntityRecord ( state , 'root' , 'theme' , state . currentTheme ) ;
2021-11-08 15:29:21 +01:00
}
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Return the ID of the current global styles object .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2021-11-08 15:29:21 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return The current global styles ID .
2021-11-08 15:29:21 +01:00
* /
function _ _experimentalGetCurrentGlobalStylesId ( state ) {
return state . currentGlobalStylesId ;
2020-06-26 15:33:47 +02:00
}
2023-09-26 16:23:26 +02:00
2019-10-15 17:37:08 +02:00
/ * *
* Return theme supports data in the index .
2018-12-14 05:41:57 +01:00
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2018-12-14 05:41:57 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return Index data .
2018-12-14 05:41:57 +01:00
* /
2019-10-15 17:37:08 +02:00
function getThemeSupports ( state ) {
2023-06-27 16:24:19 +02:00
var _getCurrentTheme$them ;
return ( _getCurrentTheme$them = getCurrentTheme ( state ) ? . theme _supports ) !== null && _getCurrentTheme$them !== void 0 ? _getCurrentTheme$them : EMPTY _OBJECT ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns the embed preview for the given URL .
2019-09-19 17:19:18 +02:00
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param url Embedded URL .
2019-09-19 17:19:18 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Undefined if the preview has not been fetched , otherwise , the preview fetched from the embed preview API .
2019-09-19 17:19:18 +02:00
* /
2019-10-15 17:37:08 +02:00
function getEmbedPreview ( state , url ) {
return state . embedPreviews [ url ] ;
}
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Determines if the returned preview is an oEmbed link fallback .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* WordPress can be configured to return a simple link to a URL if it is not embeddable .
* We need to be able to determine if a URL is embeddable or not , based on what we
* get back from the oEmbed preview API .
2018-12-14 05:41:57 +01:00
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param url Embedded URL .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Is the preview for the URL an oEmbed link fallback .
2018-12-14 05:41:57 +01:00
* /
2019-10-15 17:37:08 +02:00
function isPreviewEmbedFallback ( state , url ) {
2021-05-19 17:09:27 +02:00
const preview = state . embedPreviews [ url ] ;
const oEmbedLinkCheck = '<a href="' + url + '">' + url + '</a>' ;
2019-10-15 17:37:08 +02:00
if ( ! preview ) {
return false ;
2018-12-14 05:41:57 +01:00
}
2019-10-15 17:37:08 +02:00
return preview . html === oEmbedLinkCheck ;
2018-12-14 05:41:57 +01:00
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns whether the current user can perform the given action on the given
* REST resource .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* Calling this may trigger an OPTIONS request to the REST API via the
* ` canUser() ` resolver .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* https : //developer.wordpress.org/rest-api/reference/
2019-09-19 17:19:18 +02:00
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param action Action to check . One of : 'create' , 'read' , 'update' , 'delete' .
* @ param resource REST resource to check , e . g . 'media' or 'posts' .
* @ param id Optional ID of the rest resource to check .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Whether or not the user can perform the action ,
2019-10-15 17:37:08 +02:00
* or ` undefined ` if the OPTIONS request is still being made .
2019-09-19 17:19:18 +02:00
* /
2019-10-15 17:37:08 +02:00
function canUser ( state , action , resource , id ) {
2022-09-20 17:43:29 +02:00
const key = [ action , resource , id ] . filter ( Boolean ) . join ( '/' ) ;
2023-06-27 16:24:19 +02:00
return state . userPermissions [ key ] ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2021-06-15 10:52:30 +02:00
/ * *
* Returns whether the current user can edit the given entity .
*
* Calling this may trigger an OPTIONS request to the REST API via the
* ` canUser() ` resolver .
*
* https : //developer.wordpress.org/rest-api/reference/
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
* @ param kind Entity kind .
* @ param name Entity name .
* @ param recordId Record ' s id .
2022-09-20 17:43:29 +02:00
* @ return Whether or not the user can edit ,
2021-06-15 10:52:30 +02:00
* or ` undefined ` if the OPTIONS request is still being made .
* /
2021-06-15 17:30:24 +02:00
function canUserEditEntityRecord ( state , kind , name , recordId ) {
2022-04-12 17:12:47 +02:00
const entityConfig = getEntityConfig ( state , kind , name ) ;
if ( ! entityConfig ) {
2021-06-15 17:30:24 +02:00
return false ;
}
2022-04-12 17:12:47 +02:00
const resource = entityConfig . _ _unstable _rest _base ;
2021-06-15 10:52:30 +02:00
return canUser ( state , 'update' , resource , recordId ) ;
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns the latest autosaves for the post .
*
* May return multiple autosaves since the backend stores one autosave per
* author for each post .
2019-09-19 17:19:18 +02:00
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param postType The type of the parent post .
* @ param postId The id of the parent post .
2019-09-19 17:19:18 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return An array of autosaves for the post , or undefined if there is none .
2019-09-19 17:19:18 +02:00
* /
2019-10-15 17:37:08 +02:00
function getAutosaves ( state , postType , postId ) {
return state . autosaves [ postId ] ;
2019-09-19 17:19:18 +02:00
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns the autosave for the post and author .
2019-09-19 17:19:18 +02:00
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param postType The type of the parent post .
* @ param postId The id of the parent post .
* @ param authorId The id of the author .
2019-09-19 17:19:18 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The autosave for the post and author .
2019-09-19 17:19:18 +02:00
* /
2019-10-15 17:37:08 +02:00
function getAutosave ( state , postType , postId , authorId ) {
if ( authorId === undefined ) {
return ;
}
2021-05-19 17:09:27 +02:00
const autosaves = state . autosaves [ postId ] ;
2023-06-27 16:24:19 +02:00
return autosaves ? . find ( autosave => autosave . author === authorId ) ;
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns true if the REST request for autosaves has completed .
2019-09-19 17:19:18 +02:00
*
2023-06-27 16:24:19 +02:00
* @ param state State tree .
* @ param postType The type of the parent post .
* @ param postId The id of the parent post .
2019-09-19 17:19:18 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return True if the REST request was completed . False otherwise .
2019-09-19 17:19:18 +02:00
* /
2022-04-11 14:04:30 +02:00
const hasFetchedAutosaves = ( 0 , external _wp _data _namespaceObject . createRegistrySelector ) ( select => ( state , postType , postId ) => {
2021-05-19 17:09:27 +02:00
return select ( STORE _NAME ) . hasFinishedResolution ( 'getAutosaves' , [ postType , postId ] ) ;
2019-10-15 17:37:08 +02:00
} ) ;
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Returns a new reference when edited values have changed . This is useful in
* inferring where an edit has been made between states by comparison of the
* return values using strict equality .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* @ example
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* ` ` `
* const hasEditOccurred = (
* getReferenceByDistinctEdits ( beforeState ) !==
* getReferenceByDistinctEdits ( afterState )
* ) ;
* ` ` `
*
2023-06-27 16:24:19 +02:00
* @ param state Editor state .
2019-10-15 17:37:08 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return A value whose reference will change only when an edit occurs .
2019-09-19 17:19:18 +02:00
* /
2023-09-26 16:23:26 +02:00
function getReferenceByDistinctEdits ( state ) {
return state . editsReference ;
}
2019-09-19 17:19:18 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Retrieve the frontend template used for a given link .
*
2023-06-27 16:24:19 +02:00
* @ param state Editor state .
* @ param link Link .
2021-01-28 03:04:13 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return The template record .
2021-01-28 03:04:13 +01:00
* /
function _ _experimentalGetTemplateForLink ( state , link ) {
2021-05-19 17:09:27 +02:00
const records = getEntityRecords ( state , 'postType' , 'wp_template' , {
2021-01-28 03:04:13 +01:00
'find-template' : link
} ) ;
2023-06-27 16:24:19 +02:00
if ( records ? . length ) {
2022-09-20 17:43:29 +02:00
return getEditedEntityRecord ( state , 'postType' , 'wp_template' , records [ 0 ] . id ) ;
2021-05-21 12:14:23 +02:00
}
2022-09-20 17:43:29 +02:00
return null ;
2021-01-28 03:04:13 +01:00
}
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
2021-11-08 15:29:21 +01:00
* Retrieve the current theme ' s base global styles
*
2023-06-27 16:24:19 +02:00
* @ param state Editor state .
2021-11-08 15:29:21 +01:00
*
2022-09-20 17:43:29 +02:00
* @ return The Global Styles object .
2020-06-26 15:33:47 +02:00
* /
2021-11-08 15:29:21 +01:00
function _ _experimentalGetCurrentThemeBaseGlobalStyles ( state ) {
const currentTheme = getCurrentTheme ( state ) ;
if ( ! currentTheme ) {
return null ;
}
return state . themeBaseGlobalStyles [ currentTheme . stylesheet ] ;
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Return the ID of the current global styles object .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2022-04-12 17:12:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return The current global styles ID .
2022-04-12 17:12:47 +02:00
* /
function _ _experimentalGetCurrentThemeGlobalStylesVariations ( state ) {
const currentTheme = getCurrentTheme ( state ) ;
if ( ! currentTheme ) {
return null ;
}
return state . themeGlobalStyleVariations [ currentTheme . stylesheet ] ;
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Retrieve the list of registered block patterns .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2022-04-12 17:12:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Block pattern list .
2022-04-12 17:12:47 +02:00
* /
function getBlockPatterns ( state ) {
return state . blockPatterns ;
}
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
* Retrieve the list of registered block pattern categories .
*
2023-06-27 16:24:19 +02:00
* @ param state Data state .
2022-04-12 17:12:47 +02:00
*
2022-09-20 17:43:29 +02:00
* @ return Block pattern category list .
2022-04-12 17:12:47 +02:00
* /
function getBlockPatternCategories ( state ) {
return state . blockPatternCategories ;
}
2023-09-26 16:23:26 +02:00
/ * *
* Retrieve the registered user pattern categories .
*
* @ param state Data state .
*
* @ return User patterns category array .
* /
function getUserPatternCategories ( state ) {
return state . userPatternCategories ;
}
2023-06-27 16:24:19 +02:00
/ * *
* Returns the revisions of the current global styles theme .
*
* @ param state Data state .
*
* @ return The current global styles .
* /
function getCurrentThemeGlobalStylesRevisions ( state ) {
const currentGlobalStylesId = _ _experimentalGetCurrentGlobalStylesId ( state ) ;
if ( ! currentGlobalStylesId ) {
return null ;
}
return state . themeGlobalStyleRevisions [ currentGlobalStylesId ] ;
}
2021-11-08 15:29:21 +01:00
2023-09-26 16:23:26 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/private-selectors.js
/ * *
* Internal dependencies
* /
/ * *
* Returns the previous edit from the current undo offset
* for the entity records edits history , if any .
*
* @ param state State tree .
*
* @ return The undo manager .
* /
function getUndoManager ( state ) {
return state . undoManager ;
}
/ * *
* Retrieve the fallback Navigation .
*
* @ param state Data state .
* @ return The ID for the fallback Navigation post .
* /
function getNavigationFallbackId ( state ) {
return state . navigationFallbackId ;
}
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/camel-case/dist.es2015/index.js
function camelCaseTransform ( input , index ) {
if ( index === 0 )
return input . toLowerCase ( ) ;
return pascalCaseTransform ( input , index ) ;
}
function camelCaseTransformMerge ( input , index ) {
if ( index === 0 )
return input . toLowerCase ( ) ;
return pascalCaseTransformMerge ( input ) ;
}
function camelCase ( input , options ) {
if ( options === void 0 ) { options = { } ; }
return pascalCase ( input , _ _assign ( { transform : camelCaseTransform } , options ) ) ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/forward-resolver.js
2020-06-26 15:33:47 +02:00
/ * *
2021-11-08 15:29:21 +01:00
* Higher - order function which forward the resolution to another resolver with the same arguments .
2020-06-26 15:33:47 +02:00
*
2021-11-08 15:29:21 +01:00
* @ param { string } resolverName forwarded resolver .
2020-06-26 15:33:47 +02:00
*
* @ return { Function } Enhanced resolver .
* /
2023-06-27 16:24:19 +02:00
const forwardResolver = resolverName => ( ... args ) => async ( {
resolveSelect
} ) => {
await resolveSelect [ resolverName ] ( ... args ) ;
2020-06-26 15:33:47 +02:00
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var forward _resolver = ( forwardResolver ) ;
2020-06-26 15:33:47 +02:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/resolvers.js
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* External dependencies
2019-09-19 17:19:18 +02:00
* /
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* WordPress dependencies
2019-09-19 17:19:18 +02:00
* /
2021-01-28 03:04:13 +01:00
/ * *
* Internal dependencies
* /
2018-12-14 05:41:57 +01:00
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Requests authors from the REST API .
2020-12-01 13:19:43 +01:00
*
* @ param { Object | undefined } query Optional object of query parameters to
* include with request .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _getAuthors = query => async ( {
dispatch
} ) => {
2022-04-11 14:04:30 +02:00
const path = ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp/v2/users/?who=authors&per_page=100' , query ) ;
2021-11-08 15:29:21 +01:00
const users = await external _wp _apiFetch _default ( ) ( {
2021-05-19 17:09:27 +02:00
path
} ) ;
2021-11-08 15:29:21 +01:00
dispatch . receiveUserQuery ( path , users ) ;
} ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Requests the current user from the REST API .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _getCurrentUser = ( ) => async ( {
dispatch
} ) => {
2021-11-08 15:29:21 +01:00
const currentUser = await external _wp _apiFetch _default ( ) ( {
2021-05-19 17:09:27 +02:00
path : '/wp/v2/users/me'
} ) ;
2021-11-08 15:29:21 +01:00
dispatch . receiveCurrentUser ( currentUser ) ;
} ;
2023-09-26 16:23:26 +02:00
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Requests an entity ' s record from the REST API .
2019-03-07 10:09:59 +01:00
*
2020-10-13 15:10:30 +02:00
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number | string } key Record ' s key
* @ param { Object | undefined } query Optional object of query parameters to
2022-09-20 17:43:29 +02:00
* include with request . If requesting specific
* fields , fields must always include the ID .
2019-03-07 10:09:59 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _getEntityRecord = ( kind , name , key = '' , query ) => async ( {
select ,
dispatch
} ) => {
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
const entityConfig = configs . find ( config => config . name === name && config . kind === kind ) ;
if ( ! entityConfig || entityConfig ? . _ _experimentalNoFetch ) {
return ;
}
const lock = await dispatch . _ _unstableAcquireStoreLock ( STORE _NAME , [ 'entities' , 'records' , kind , name , key ] , {
exclusive : false
} ) ;
try {
2023-09-26 16:23:26 +02:00
// Entity supports configs,
// use the sync algorithm instead of the old fetch behavior.
if ( window . _ _experimentalEnableSync && entityConfig . syncConfig && ! query ) {
if ( false ) { }
} else {
if ( query !== undefined && query . _fields ) {
// If requesting specific fields, items and query association to said
// records are stored by ID reference. Thus, fields must always include
// the ID.
query = {
... query ,
_fields : [ ... new Set ( [ ... ( get _normalized _comma _separable ( query . _fields ) || [ ] ) , entityConfig . key || DEFAULT _ENTITY _KEY ] ) ] . join ( )
} ;
}
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// Disable reason: While true that an early return could leave `path`
// unused, it's important that path is derived using the query prior to
// additional query modifications in the condition below, since those
// modifications are relevant to how the data is tracked in state, and not
// for how the request is made to the REST API.
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// eslint-disable-next-line @wordpress/no-unused-vars-before-return
const path = ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( entityConfig . baseURL + ( key ? '/' + key : '' ) , {
... entityConfig . baseURLParams ,
... query
} ) ;
if ( query !== undefined ) {
query = {
... query ,
include : [ key ]
} ;
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// The resolution cache won't consider query as reusable based on the
// fields, so it's tested here, prior to initiating the REST request,
// and without causing `getEntityRecords` resolution to occur.
const hasRecords = select . hasEntityRecords ( kind , name , query ) ;
if ( hasRecords ) {
return ;
}
2019-10-15 17:37:08 +02:00
}
2023-09-26 16:23:26 +02:00
const record = await external _wp _apiFetch _default ( ) ( {
path
} ) ;
dispatch . receiveEntityRecords ( kind , name , record , query ) ;
2021-11-15 13:50:17 +01:00
}
2023-06-27 16:24:19 +02:00
} finally {
dispatch . _ _unstableReleaseStoreLock ( lock ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Requests an entity ' s record from the REST API .
* /
2021-11-08 15:29:21 +01:00
const resolvers _getRawEntityRecord = forward _resolver ( 'getEntityRecord' ) ;
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Requests an entity ' s record from the REST API .
* /
2021-11-08 15:29:21 +01:00
const resolvers _getEditedEntityRecord = forward _resolver ( 'getEntityRecord' ) ;
2023-09-26 16:23:26 +02:00
2019-03-07 10:09:59 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Requests the entity ' s records from the REST API .
2019-03-07 10:09:59 +01:00
*
2021-11-08 15:29:21 +01:00
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
2022-09-20 17:43:29 +02:00
* @ param { Object ? } query Query Object . If requesting specific fields , fields
* must always include the ID .
Block Editor: Update `@wordpress` dependencies to match Gutenberg 4.5.1.
- Update the annotations, api-fetch, block-library, blocks, components, compose, core-data, data, date, dom, edit-post, editor, element, format-library, html-entities, i18n, jest-console, jest-preset-default, keycodes, list-reusable-blocks, notices, nux, plugins, rich-text, scripts, token-lists, url, viewport packages.
- Upgrades React from 16.5.2 to 16.6.3.
- Adds a missing `wp-date` dependency to the editor script.
- Updates changed dependencies in `script-loader.php`.
- Fixes undefined notices in some blocks.
- Removes incorrect `gutenberg` textdomain.
Merges [43891], [43903], and [43919] to trunk.
Props atimmer, aduth, youknowriad, danielbachhuber.
See #45145.
Built from https://develop.svn.wordpress.org/trunk@44262
git-svn-id: http://core.svn.wordpress.org/trunk@44092 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-17 16:37:00 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _getEntityRecords = ( kind , name , query = { } ) => async ( {
dispatch
} ) => {
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
const entityConfig = configs . find ( config => config . name === name && config . kind === kind ) ;
if ( ! entityConfig || entityConfig ? . _ _experimentalNoFetch ) {
return ;
}
const lock = await dispatch . _ _unstableAcquireStoreLock ( STORE _NAME , [ 'entities' , 'records' , kind , name ] , {
exclusive : false
} ) ;
try {
if ( query . _fields ) {
// If requesting specific fields, items and query association to said
// records are stored by ID reference. Thus, fields must always include
// the ID.
2023-09-26 16:23:26 +02:00
query = {
... query ,
2023-06-27 16:24:19 +02:00
_fields : [ ... new Set ( [ ... ( get _normalized _comma _separable ( query . _fields ) || [ ] ) , entityConfig . key || DEFAULT _ENTITY _KEY ] ) ] . join ( )
} ;
2021-05-19 17:09:27 +02:00
}
2023-09-26 16:23:26 +02:00
const path = ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( entityConfig . baseURL , {
... entityConfig . baseURLParams ,
2023-06-27 16:24:19 +02:00
... query
2021-05-19 17:09:27 +02:00
} ) ;
2023-06-27 16:24:19 +02:00
let records = Object . values ( await external _wp _apiFetch _default ( ) ( {
path
2023-09-26 16:23:26 +02:00
} ) ) ;
// If we request fields but the result doesn't contain the fields,
2023-06-27 16:24:19 +02:00
// explicitly set these fields as "undefined"
// that way we consider the query "fullfilled".
if ( query . _fields ) {
records = records . map ( record => {
query . _fields . split ( ',' ) . forEach ( field => {
if ( ! record . hasOwnProperty ( field ) ) {
record [ field ] = undefined ;
}
} ) ;
return record ;
2021-05-19 17:09:27 +02:00
} ) ;
2023-06-27 16:24:19 +02:00
}
2023-09-26 16:23:26 +02:00
dispatch . receiveEntityRecords ( kind , name , records , query ) ;
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// When requesting all fields, the list of results can be used to
2023-06-27 16:24:19 +02:00
// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.
// See https://github.com/WordPress/gutenberg/pull/26575
if ( ! query ? . _fields && ! query . context ) {
const key = entityConfig . key || DEFAULT _ENTITY _KEY ;
const resolutionsArgs = records . filter ( record => record [ key ] ) . map ( record => [ kind , name , record [ key ] ] ) ;
dispatch ( {
type : 'START_RESOLUTIONS' ,
selectorName : 'getEntityRecord' ,
args : resolutionsArgs
} ) ;
dispatch ( {
type : 'FINISH_RESOLUTIONS' ,
selectorName : 'getEntityRecord' ,
args : resolutionsArgs
} ) ;
2021-01-28 03:04:13 +01:00
}
2023-06-27 16:24:19 +02:00
} finally {
dispatch . _ _unstableReleaseStoreLock ( lock ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2021-05-19 17:09:27 +02:00
resolvers _getEntityRecords . shouldInvalidate = ( action , kind , name ) => {
2021-01-28 03:04:13 +01:00
return ( action . type === 'RECEIVE_ITEMS' || action . type === 'REMOVE_ITEMS' ) && action . invalidateCache && kind === action . kind && name === action . name ;
} ;
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Requests the current theme .
* /
2023-06-27 16:24:19 +02:00
const resolvers _getCurrentTheme = ( ) => async ( {
dispatch ,
resolveSelect
} ) => {
2021-11-08 15:29:21 +01:00
const activeThemes = await resolveSelect . getEntityRecords ( 'root' , 'theme' , {
status : 'active'
2021-05-19 17:09:27 +02:00
} ) ;
2021-11-08 15:29:21 +01:00
dispatch . receiveCurrentTheme ( activeThemes [ 0 ] ) ;
} ;
2023-09-26 16:23:26 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Requests theme supports data from the index .
* /
2021-11-08 15:29:21 +01:00
const resolvers _getThemeSupports = forward _resolver ( 'getCurrentTheme' ) ;
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Requests a preview from the from the Embed API .
2019-09-19 17:19:18 +02:00
*
2021-11-08 15:29:21 +01:00
* @ param { string } url URL to get the preview for .
2019-09-19 17:19:18 +02:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _getEmbedPreview = url => async ( {
dispatch
} ) => {
2021-05-19 17:09:27 +02:00
try {
2021-11-08 15:29:21 +01:00
const embedProxyResponse = await external _wp _apiFetch _default ( ) ( {
2022-04-11 14:04:30 +02:00
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/oembed/1.0/proxy' , {
2021-05-19 17:09:27 +02:00
url
} )
} ) ;
2021-11-08 15:29:21 +01:00
dispatch . receiveEmbedPreview ( url , embedProxyResponse ) ;
2021-05-19 17:09:27 +02:00
} catch ( error ) {
// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.
2021-11-08 15:29:21 +01:00
dispatch . receiveEmbedPreview ( url , false ) ;
2021-05-19 17:09:27 +02:00
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2018-12-18 04:14:52 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Checks whether the current user can perform the given action on the given
* REST resource .
*
2022-09-20 17:43:29 +02:00
* @ param { string } requestedAction Action to check . One of : 'create' , 'read' , 'update' ,
* 'delete' .
* @ param { string } resource REST resource to check , e . g . 'media' or 'posts' .
* @ param { ? string } id ID of the rest resource to check .
2018-12-18 04:14:52 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _canUser = ( requestedAction , resource , id ) => async ( {
dispatch ,
registry
} ) => {
2022-09-20 17:43:29 +02:00
const {
hasStartedResolution
} = registry . select ( STORE _NAME ) ;
const resourcePath = id ? ` ${ resource } / ${ id } ` : resource ;
const retrievedActions = [ 'create' , 'read' , 'update' , 'delete' ] ;
if ( ! retrievedActions . includes ( requestedAction ) ) {
throw new Error ( ` ' ${ requestedAction } ' is not a valid action. ` ) ;
2023-09-26 16:23:26 +02:00
}
2022-09-20 17:43:29 +02:00
2023-09-26 16:23:26 +02:00
// Prevent resolving the same resource twice.
2022-09-20 17:43:29 +02:00
for ( const relatedAction of retrievedActions ) {
if ( relatedAction === requestedAction ) {
continue ;
}
const isAlreadyResolving = hasStartedResolution ( 'canUser' , [ relatedAction , resource , id ] ) ;
if ( isAlreadyResolving ) {
return ;
}
2021-05-19 17:09:27 +02:00
}
let response ;
try {
2021-11-08 15:29:21 +01:00
response = await external _wp _apiFetch _default ( ) ( {
2022-09-20 17:43:29 +02:00
path : ` /wp/v2/ ${ resourcePath } ` ,
2022-04-12 17:12:47 +02:00
method : 'OPTIONS' ,
2021-05-19 17:09:27 +02:00
parse : false
} ) ;
} catch ( error ) {
// Do nothing if our OPTIONS request comes back with an API error (4xx or
// 5xx). The previously determined isAllowed value will remain in the store.
return ;
2023-09-26 16:23:26 +02:00
}
// Optional chaining operator is used here because the API requests don't
2022-04-12 17:12:47 +02:00
// return the expected result in the native version. Instead, API requests
// only return the result, without including response properties like the headers.
2023-06-27 16:24:19 +02:00
const allowHeader = response . headers ? . get ( 'allow' ) ;
const allowedMethods = allowHeader ? . allow || allowHeader || '' ;
2022-09-20 17:43:29 +02:00
const permissions = { } ;
const methods = {
create : 'POST' ,
read : 'GET' ,
update : 'PUT' ,
delete : 'DELETE'
} ;
for ( const [ actionName , methodName ] of Object . entries ( methods ) ) {
permissions [ actionName ] = allowedMethods . includes ( methodName ) ;
}
for ( const action of retrievedActions ) {
dispatch . receiveUserPermission ( ` ${ action } / ${ resourcePath } ` , permissions [ action ] ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2021-06-15 10:52:30 +02:00
/ * *
* Checks whether the current user can perform the given action on the given
* REST resource .
*
2021-06-15 17:30:24 +02:00
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
2021-06-15 10:52:30 +02:00
* @ param { string } recordId Record ' s id .
* /
2023-06-27 16:24:19 +02:00
const resolvers _canUserEditEntityRecord = ( kind , name , recordId ) => async ( {
dispatch
} ) => {
2022-04-12 17:12:47 +02:00
const configs = await dispatch ( getOrLoadEntitiesConfig ( kind ) ) ;
2022-09-20 17:43:29 +02:00
const entityConfig = configs . find ( config => config . name === name && config . kind === kind ) ;
2022-04-12 17:12:47 +02:00
if ( ! entityConfig ) {
2021-06-15 17:30:24 +02:00
return ;
}
2022-04-12 17:12:47 +02:00
const resource = entityConfig . _ _unstable _rest _base ;
2021-11-08 15:29:21 +01:00
await dispatch ( resolvers _canUser ( 'update' , resource , recordId ) ) ;
} ;
2023-09-26 16:23:26 +02:00
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Request autosave data from the REST API .
*
* @ param { string } postType The type of the parent post .
* @ param { number } postId The id of the parent post .
2018-12-14 05:41:57 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _getAutosaves = ( postType , postId ) => async ( {
dispatch ,
resolveSelect
} ) => {
2021-05-19 17:09:27 +02:00
const {
2022-09-20 17:43:29 +02:00
rest _base : restBase ,
rest _namespace : restNamespace = 'wp/v2'
2021-11-08 15:29:21 +01:00
} = await resolveSelect . getPostType ( postType ) ;
const autosaves = await external _wp _apiFetch _default ( ) ( {
2022-09-20 17:43:29 +02:00
path : ` / ${ restNamespace } / ${ restBase } / ${ postId } /autosaves?context=edit `
2021-05-19 17:09:27 +02:00
} ) ;
if ( autosaves && autosaves . length ) {
2021-11-08 15:29:21 +01:00
dispatch . receiveAutosaves ( postId , autosaves ) ;
2021-05-19 17:09:27 +02:00
}
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
2019-09-19 17:19:18 +02:00
/ * *
2021-01-28 03:04:13 +01:00
* Request autosave data from the REST API .
*
* This resolver exists to ensure the underlying autosaves are fetched via
* ` getAutosaves ` when a call to the ` getAutosave ` selector is made .
*
* @ param { string } postType The type of the parent post .
* @ param { number } postId The id of the parent post .
* /
2023-06-27 16:24:19 +02:00
const resolvers _getAutosave = ( postType , postId ) => async ( {
resolveSelect
} ) => {
2021-11-08 15:29:21 +01:00
await resolveSelect . getAutosaves ( postType , postId ) ;
} ;
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Retrieve the frontend template used for a given link .
*
2021-11-08 15:29:21 +01:00
* @ param { string } link Link .
2021-01-28 03:04:13 +01:00
* /
2023-06-27 16:24:19 +02:00
const resolvers _experimentalGetTemplateForLink = link => async ( {
dispatch ,
resolveSelect
} ) => {
2021-05-19 17:09:27 +02:00
let template ;
try {
2023-06-27 16:24:19 +02:00
// This is NOT calling a REST endpoint but rather ends up with a response from
// an Ajax function which has a different shape from a WP_REST_Response.
template = await external _wp _apiFetch _default ( ) ( {
url : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( link , {
'_wp-find-template' : true
} )
} ) . then ( ( {
data
} ) => data ) ;
2023-09-26 16:23:26 +02:00
} catch ( e ) {
// For non-FSE themes, it is possible that this request returns an error.
2021-05-19 17:09:27 +02:00
}
if ( ! template ) {
return ;
}
2021-11-08 15:29:21 +01:00
const record = await resolveSelect . getEntityRecord ( 'postType' , 'wp_template' , template . id ) ;
2021-05-19 17:09:27 +02:00
if ( record ) {
2021-11-08 15:29:21 +01:00
dispatch . receiveEntityRecords ( 'postType' , 'wp_template' , [ record ] , {
2021-05-19 17:09:27 +02:00
'find-template' : link
} ) ;
}
2021-11-08 15:29:21 +01:00
} ;
2021-05-19 17:09:27 +02:00
resolvers _experimentalGetTemplateForLink . shouldInvalidate = action => {
2021-05-07 13:48:27 +02:00
return ( action . type === 'RECEIVE_ITEMS' || action . type === 'REMOVE_ITEMS' ) && action . invalidateCache && action . kind === 'postType' && action . name === 'wp_template' ;
} ;
2023-06-27 16:24:19 +02:00
const resolvers _experimentalGetCurrentGlobalStylesId = ( ) => async ( {
dispatch ,
resolveSelect
} ) => {
2021-11-08 15:29:21 +01:00
const activeThemes = await resolveSelect . getEntityRecords ( 'root' , 'theme' , {
status : 'active'
} ) ;
2023-06-27 16:24:19 +02:00
const globalStylesURL = activeThemes ? . [ 0 ] ? . _links ? . [ 'wp:user-global-styles' ] ? . [ 0 ] ? . href ;
2021-11-08 15:29:21 +01:00
if ( globalStylesURL ) {
const globalStylesObject = await external _wp _apiFetch _default ( ) ( {
url : globalStylesURL
} ) ;
dispatch . _ _experimentalReceiveCurrentGlobalStylesId ( globalStylesObject . id ) ;
}
} ;
2023-06-27 16:24:19 +02:00
const resolvers _experimentalGetCurrentThemeBaseGlobalStyles = ( ) => async ( {
resolveSelect ,
dispatch
} ) => {
2021-11-08 15:29:21 +01:00
const currentTheme = await resolveSelect . getCurrentTheme ( ) ;
const themeGlobalStyles = await external _wp _apiFetch _default ( ) ( {
path : ` /wp/v2/global-styles/themes/ ${ currentTheme . stylesheet } `
} ) ;
2022-04-12 17:12:47 +02:00
dispatch . _ _experimentalReceiveThemeBaseGlobalStyles ( currentTheme . stylesheet , themeGlobalStyles ) ;
} ;
2023-06-27 16:24:19 +02:00
const resolvers _experimentalGetCurrentThemeGlobalStylesVariations = ( ) => async ( {
resolveSelect ,
dispatch
} ) => {
2022-04-12 17:12:47 +02:00
const currentTheme = await resolveSelect . getCurrentTheme ( ) ;
const variations = await external _wp _apiFetch _default ( ) ( {
path : ` /wp/v2/global-styles/themes/ ${ currentTheme . stylesheet } /variations `
} ) ;
dispatch . _ _experimentalReceiveThemeGlobalStyleVariations ( currentTheme . stylesheet , variations ) ;
} ;
2023-09-26 16:23:26 +02:00
2023-06-27 16:24:19 +02:00
/ * *
* Fetches and returns the revisions of the current global styles theme .
* /
const resolvers _getCurrentThemeGlobalStylesRevisions = ( ) => async ( {
resolveSelect ,
dispatch
} ) => {
const globalStylesId = await resolveSelect . _ _experimentalGetCurrentGlobalStylesId ( ) ;
const record = globalStylesId ? await resolveSelect . getEntityRecord ( 'root' , 'globalStyles' , globalStylesId ) : undefined ;
const revisionsURL = record ? . _links ? . [ 'version-history' ] ? . [ 0 ] ? . href ;
if ( revisionsURL ) {
const resetRevisions = await external _wp _apiFetch _default ( ) ( {
url : revisionsURL
} ) ;
const revisions = resetRevisions ? . map ( revision => Object . fromEntries ( Object . entries ( revision ) . map ( ( [ key , value ] ) => [ camelCase ( key ) , value ] ) ) ) ;
dispatch . receiveThemeGlobalStyleRevisions ( globalStylesId , revisions ) ;
}
} ;
resolvers _getCurrentThemeGlobalStylesRevisions . shouldInvalidate = action => {
return action . type === 'SAVE_ENTITY_RECORD_FINISH' && action . kind === 'root' && ! action . error && action . name === 'globalStyles' ;
} ;
const resolvers _getBlockPatterns = ( ) => async ( {
dispatch
} ) => {
2022-04-12 17:12:47 +02:00
const restPatterns = await external _wp _apiFetch _default ( ) ( {
path : '/wp/v2/block-patterns/patterns'
} ) ;
2023-06-27 16:24:19 +02:00
const patterns = restPatterns ? . map ( pattern => Object . fromEntries ( Object . entries ( pattern ) . map ( ( [ key , value ] ) => [ camelCase ( key ) , value ] ) ) ) ;
2022-04-12 17:12:47 +02:00
dispatch ( {
type : 'RECEIVE_BLOCK_PATTERNS' ,
patterns
} ) ;
} ;
2023-06-27 16:24:19 +02:00
const resolvers _getBlockPatternCategories = ( ) => async ( {
dispatch
} ) => {
2022-04-12 17:12:47 +02:00
const categories = await external _wp _apiFetch _default ( ) ( {
path : '/wp/v2/block-patterns/categories'
} ) ;
dispatch ( {
type : 'RECEIVE_BLOCK_PATTERN_CATEGORIES' ,
categories
} ) ;
2021-11-08 15:29:21 +01:00
} ;
2023-09-26 16:23:26 +02:00
const resolvers _getUserPatternCategories = ( ) => async ( {
dispatch ,
resolveSelect
} ) => {
const patternCategories = await resolveSelect . getEntityRecords ( 'taxonomy' , 'wp_pattern_category' , {
per _page : - 1 ,
Update editor related npm packages for 6.4 RC3.
The npm packages needed update for 6.4 RC3.
Patch: https://github.com/WordPress/wordpress-develop/pull/5587.
This PR includes the following changes:
- Regression: [https://github.com/WordPress/gutenberg/pull/55553 Patterns: fix bug with authors and contributors not seeing user pattern categories].
- Bugfix: [https://github.com/WordPress/gutenberg/pull/55539 Query Loop:Disallow "enhanced pagination" with core blocks that may contain third-party blocks].
- Regression: [https://github.com/WordPress/gutenberg/pull/55667 File: Fix embedded PDF files in Safari].
- Regression: [https://github.com/WordPress/gutenberg/pull/55669 Ensure Term Description block is registered in core]
Props DAreRodz, luisherranz, poena, afercia, danieldudzic, hellofromtonya, siobhyb, mikachan, get_dave, scruffian, wildworks, glendaviesnz, ramonopoly, aaronrobertshaw.
See #59411.
Built from https://develop.svn.wordpress.org/trunk@57034
git-svn-id: http://core.svn.wordpress.org/trunk@56545 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-10-31 16:14:05 +01:00
_fields : 'id,name,description,slug' ,
context : 'view'
2023-09-26 16:23:26 +02:00
} ) ;
const mappedPatternCategories = patternCategories ? . map ( userCategory => ( {
... userCategory ,
label : userCategory . name ,
name : userCategory . slug
} ) ) || [ ] ;
dispatch ( {
type : 'RECEIVE_USER_PATTERN_CATEGORIES' ,
patternCategories : mappedPatternCategories
} ) ;
} ;
2023-06-27 16:24:19 +02:00
const resolvers _getNavigationFallbackId = ( ) => async ( {
2023-07-03 11:14:26 +02:00
dispatch ,
select
2023-06-27 16:24:19 +02:00
} ) => {
const fallback = await external _wp _apiFetch _default ( ) ( {
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp-block-editor/v1/navigation-fallback' , {
_embed : true
} )
} ) ;
const record = fallback ? . _embedded ? . self ;
dispatch . receiveNavigationFallbackId ( fallback ? . id ) ;
if ( record ) {
2023-07-03 11:14:26 +02:00
// If the fallback is already in the store, don't invalidate navigation queries.
// Otherwise, invalidate the cache for the scenario where there were no Navigation
// posts in the state and the fallback created one.
const existingFallbackEntityRecord = select . getEntityRecord ( 'postType' , 'wp_navigation' , fallback ? . id ) ;
const invalidateNavigationQueries = ! existingFallbackEntityRecord ;
2023-09-26 16:23:26 +02:00
dispatch . receiveEntityRecords ( 'postType' , 'wp_navigation' , record , undefined , invalidateNavigationQueries ) ;
2023-06-27 16:24:19 +02:00
2023-09-26 16:23:26 +02:00
// Resolve to avoid further network requests.
2023-06-27 16:24:19 +02:00
dispatch . finishResolution ( 'getEntityRecord' , [ 'postType' , 'wp_navigation' , fallback ? . id ] ) ;
}
} ;
2021-11-08 15:29:21 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/utils.js
2021-11-08 15:29:21 +01:00
function deepCopyLocksTreePath ( tree , path ) {
2023-09-26 16:23:26 +02:00
const newTree = {
... tree
2021-11-08 15:29:21 +01:00
} ;
let currentNode = newTree ;
for ( const branchName of path ) {
2023-09-26 16:23:26 +02:00
currentNode . children = {
... currentNode . children ,
2021-11-08 15:29:21 +01:00
[ branchName ] : {
locks : [ ] ,
children : { } ,
... currentNode . children [ branchName ]
}
} ;
currentNode = currentNode . children [ branchName ] ;
}
return newTree ;
}
function getNode ( tree , path ) {
let currentNode = tree ;
for ( const branchName of path ) {
const nextNode = currentNode . children [ branchName ] ;
if ( ! nextNode ) {
return null ;
}
currentNode = nextNode ;
}
return currentNode ;
}
function * iteratePath ( tree , path ) {
let currentNode = tree ;
yield currentNode ;
for ( const branchName of path ) {
const nextNode = currentNode . children [ branchName ] ;
if ( ! nextNode ) {
break ;
}
yield nextNode ;
currentNode = nextNode ;
}
}
function * iterateDescendants ( node ) {
const stack = Object . values ( node . children ) ;
while ( stack . length ) {
const childNode = stack . pop ( ) ;
yield childNode ;
stack . push ( ... Object . values ( childNode . children ) ) ;
}
}
2023-06-27 16:24:19 +02:00
function hasConflictingLock ( {
exclusive
} , locks ) {
2021-11-08 15:29:21 +01:00
if ( exclusive && locks . length ) {
return true ;
}
if ( ! exclusive && locks . filter ( lock => lock . exclusive ) . length ) {
return true ;
}
return false ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/reducer.js
2021-11-08 15:29:21 +01:00
/ * *
* Internal dependencies
* /
const DEFAULT _STATE = {
requests : [ ] ,
tree : {
locks : [ ] ,
children : { }
}
} ;
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Reducer returning locks .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2023-06-27 16:24:19 +02:00
function locks ( state = DEFAULT _STATE , action ) {
2021-11-08 15:29:21 +01:00
switch ( action . type ) {
case 'ENQUEUE_LOCK_REQUEST' :
{
const {
request
} = action ;
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-11-08 15:29:21 +01:00
requests : [ request , ... state . requests ]
} ;
}
case 'GRANT_LOCK_REQUEST' :
{
const {
lock ,
request
} = action ;
const {
store ,
path
} = request ;
const storePath = [ store , ... path ] ;
const newTree = deepCopyLocksTreePath ( state . tree , storePath ) ;
const node = getNode ( newTree , storePath ) ;
node . locks = [ ... node . locks , lock ] ;
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-11-08 15:29:21 +01:00
requests : state . requests . filter ( r => r !== request ) ,
tree : newTree
} ;
}
case 'RELEASE_LOCK' :
{
const {
lock
} = action ;
const storePath = [ lock . store , ... lock . path ] ;
const newTree = deepCopyLocksTreePath ( state . tree , storePath ) ;
const node = getNode ( newTree , storePath ) ;
node . locks = node . locks . filter ( l => l !== lock ) ;
2023-09-26 16:23:26 +02:00
return {
... state ,
2021-11-08 15:29:21 +01:00
tree : newTree
} ;
}
}
return state ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/selectors.js
2021-01-28 03:04:13 +01:00
/ * *
* Internal dependencies
* /
2021-11-08 15:29:21 +01:00
function getPendingLockRequests ( state ) {
return state . requests ;
2021-01-28 03:04:13 +01:00
}
2023-06-27 16:24:19 +02:00
function isLockAvailable ( state , store , path , {
exclusive
} ) {
2021-05-19 17:09:27 +02:00
const storePath = [ store , ... path ] ;
2023-09-26 16:23:26 +02:00
const locks = state . tree ;
2021-05-19 17:09:27 +02:00
2023-09-26 16:23:26 +02:00
// Validate all parents and the node itself
2021-05-19 17:09:27 +02:00
for ( const node of iteratePath ( locks , storePath ) ) {
if ( hasConflictingLock ( {
exclusive
} , node . locks ) ) {
return false ;
}
2023-09-26 16:23:26 +02:00
}
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// iteratePath terminates early if path is unreachable, let's
// re-fetch the node and check it exists in the tree.
2021-05-19 17:09:27 +02:00
const node = getNode ( locks , storePath ) ;
2021-01-28 03:04:13 +01:00
if ( ! node ) {
return true ;
2023-09-26 16:23:26 +02:00
}
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
// Validate all nested nodes
2021-05-19 17:09:27 +02:00
for ( const descendant of iterateDescendants ( node ) ) {
if ( hasConflictingLock ( {
exclusive
} , descendant . locks ) ) {
return false ;
2021-01-28 03:04:13 +01:00
}
}
return true ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/engine.js
2021-11-08 15:29:21 +01:00
/ * *
* Internal dependencies
* /
function createLocks ( ) {
2022-04-11 14:04:30 +02:00
let state = locks ( undefined , {
2021-11-08 15:29:21 +01:00
type : '@@INIT'
} ) ;
function processPendingLockRequests ( ) {
for ( const request of getPendingLockRequests ( state ) ) {
const {
store ,
path ,
exclusive ,
notifyAcquired
} = request ;
if ( isLockAvailable ( state , store , path , {
exclusive
} ) ) {
const lock = {
store ,
path ,
exclusive
} ;
2022-04-11 14:04:30 +02:00
state = locks ( state , {
2021-11-08 15:29:21 +01:00
type : 'GRANT_LOCK_REQUEST' ,
lock ,
request
} ) ;
notifyAcquired ( lock ) ;
}
}
}
function acquire ( store , path , exclusive ) {
return new Promise ( resolve => {
2022-04-11 14:04:30 +02:00
state = locks ( state , {
2021-11-08 15:29:21 +01:00
type : 'ENQUEUE_LOCK_REQUEST' ,
request : {
store ,
path ,
exclusive ,
notifyAcquired : resolve
}
} ) ;
processPendingLockRequests ( ) ;
} ) ;
}
function release ( lock ) {
2022-04-11 14:04:30 +02:00
state = locks ( state , {
2021-11-08 15:29:21 +01:00
type : 'RELEASE_LOCK' ,
lock
} ) ;
processPendingLockRequests ( ) ;
}
return {
acquire ,
release
} ;
}
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/actions.js
2021-11-08 15:29:21 +01:00
/ * *
* Internal dependencies
* /
function createLocksActions ( ) {
const locks = createLocks ( ) ;
2023-06-27 16:24:19 +02:00
function _ _unstableAcquireStoreLock ( store , path , {
exclusive
} ) {
2021-11-08 15:29:21 +01:00
return ( ) => locks . acquire ( store , path , exclusive ) ;
}
function _ _unstableReleaseStoreLock ( lock ) {
return ( ) => locks . release ( lock ) ;
}
return {
_ _unstableAcquireStoreLock ,
_ _unstableReleaseStoreLock
} ;
}
2023-06-27 16:24:19 +02:00
; // CONCATENATED MODULE: external ["wp","privateApis"]
2023-09-21 15:26:32 +02:00
var external _wp _privateApis _namespaceObject = window [ "wp" ] [ "privateApis" ] ;
2023-06-27 16:24:19 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/private-apis.js
/ * *
* WordPress dependencies
* /
const {
lock ,
unlock
Editor: Update npm packages ahead of 6.4 RC1.
Updates the npm packages and code for:
* [https://github.com/WordPress/gutenberg/pull/55121 List: fix forward merging of nested list]
* [https://github.com/WordPress/gutenberg/pull/55182 Update consent string for using private APIs.]
* [https://github.com/WordPress/gutenberg/pull/55204 useBlockSettings: add missing useMemo dependencies]
* [https://github.com/WordPress/gutenberg/pull/55120 Remove the lightbox filter and view file when the lightbox setting is disabled.]
* [https://github.com/WordPress/gutenberg/pull/55245 Patterns: Remove the version enforcement for npm in engines field]
* [https://github.com/WordPress/gutenberg/pull/55237 Remove `@return void` from PHP function docs]
* [https://github.com/WordPress/gutenberg/pull/55141 Image: Disable lightbox editor UI for linked images]
* [https://github.com/WordPress/gutenberg/pull/55269 Image: Stop crashing with Lightbox on image blocks without an image]
* [https://github.com/WordPress/gutenberg/pull/55021 Update fullscreen icon]
* [https://github.com/WordPress/gutenberg/pull/55217 Template Part block: Fall back to current theme if no theme attribute is given.] This change is part of fix for a performance regression re-introduced by [56818].
References:
* [https://github.com/WordPress/gutenberg/pull/55298 Gutenberg PR 55298] Cherry-pick commits
Follow-up to [56818], [56816].
Props ellatrix, peterwilsoncc, jsnajdr, afercia, gziolo, isabel_brison, artemiosans, richtabor, bernhard-reiter, flixos90, mikachan, spacedmonkey, hellofromTonya.
See #59583, #59411.
Built from https://develop.svn.wordpress.org/trunk@56849
git-svn-id: http://core.svn.wordpress.org/trunk@56361 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-10-12 15:58:15 +02:00
} = ( 0 , external _wp _privateApis _namespaceObject . _ _dangerousOptInToUnstableAPIsOnlyForCoreModules ) ( 'I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.' , '@wordpress/core-data' ) ;
2023-06-27 16:24:19 +02:00
2023-07-03 11:14:26 +02:00
; // CONCATENATED MODULE: external ["wp","element"]
2023-09-21 15:26:32 +02:00
var external _wp _element _namespaceObject = window [ "wp" ] [ "element" ] ;
2023-07-03 11:14:26 +02:00
; // CONCATENATED MODULE: external ["wp","blocks"]
2023-09-21 15:26:32 +02:00
var external _wp _blocks _namespaceObject = window [ "wp" ] [ "blocks" ] ;
2023-07-03 11:14:26 +02:00
; // CONCATENATED MODULE: external ["wp","blockEditor"]
2023-09-21 15:26:32 +02:00
var external _wp _blockEditor _namespaceObject = window [ "wp" ] [ "blockEditor" ] ;
2023-09-26 16:23:26 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/footnotes/get-rich-text-values-cached.js
/ * *
* WordPress dependencies
* /
/ * *
* Internal dependencies
* /
// TODO: The following line should have been:
//
// const unlockedApis = unlock( blockEditorPrivateApis );
//
// But there are hidden circular dependencies in RNMobile code, specifically in
// certain native components in the `components` package that depend on
// `block-editor`. What follows is a workaround that defers the `unlock` call
// to prevent native code from failing.
//
// Fix once https://github.com/WordPress/gutenberg/issues/52692 is closed.
let unlockedApis ;
const cache = new WeakMap ( ) ;
function getRichTextValuesCached ( block ) {
if ( ! unlockedApis ) {
unlockedApis = unlock ( external _wp _blockEditor _namespaceObject . privateApis ) ;
}
if ( ! cache . has ( block ) ) {
const values = unlockedApis . getRichTextValues ( [ block ] ) ;
cache . set ( block , values ) ;
}
return cache . get ( block ) ;
}
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/footnotes/get-footnotes-order.js
/ * *
* Internal dependencies
* /
const get _footnotes _order _cache = new WeakMap ( ) ;
function getBlockFootnotesOrder ( block ) {
if ( ! get _footnotes _order _cache . has ( block ) ) {
const content = getRichTextValuesCached ( block ) . join ( '' ) ;
const newOrder = [ ] ;
// https://github.com/WordPress/gutenberg/pull/43204 lands. We can then
// get the order directly from the rich text values.
if ( content . indexOf ( 'data-fn' ) !== - 1 ) {
const regex = /data-fn="([^"]+)"/g ;
let match ;
while ( ( match = regex . exec ( content ) ) !== null ) {
newOrder . push ( match [ 1 ] ) ;
}
}
get _footnotes _order _cache . set ( block , newOrder ) ;
}
return get _footnotes _order _cache . get ( block ) ;
}
function getFootnotesOrder ( blocks ) {
return blocks . flatMap ( getBlockFootnotesOrder ) ;
}
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/footnotes/index.js
/ * *
* Internal dependencies
* /
let oldFootnotes = { } ;
function updateFootnotesFromMeta ( blocks , meta ) {
const output = {
blocks
} ;
if ( ! meta ) return output ;
// If meta.footnotes is empty, it means the meta is not registered.
if ( meta . footnotes === undefined ) return output ;
const newOrder = getFootnotesOrder ( blocks ) ;
const footnotes = meta . footnotes ? JSON . parse ( meta . footnotes ) : [ ] ;
const currentOrder = footnotes . map ( fn => fn . id ) ;
if ( currentOrder . join ( '' ) === newOrder . join ( '' ) ) return output ;
const newFootnotes = newOrder . map ( fnId => footnotes . find ( fn => fn . id === fnId ) || oldFootnotes [ fnId ] || {
id : fnId ,
content : ''
} ) ;
function updateAttributes ( attributes ) {
// Only attempt to update attributes, if attributes is an object.
if ( ! attributes || Array . isArray ( attributes ) || typeof attributes !== 'object' ) {
return attributes ;
}
attributes = {
... attributes
} ;
for ( const key in attributes ) {
const value = attributes [ key ] ;
if ( Array . isArray ( value ) ) {
attributes [ key ] = value . map ( updateAttributes ) ;
continue ;
}
if ( typeof value !== 'string' ) {
continue ;
}
if ( value . indexOf ( 'data-fn' ) === - 1 ) {
continue ;
}
// When we store rich text values, this would no longer
// require a regex.
const regex = /(<sup[^>]+data-fn="([^"]+)"[^>]*><a[^>]*>)[\d*]*<\/a><\/sup>/g ;
attributes [ key ] = value . replace ( regex , ( match , opening , fnId ) => {
const index = newOrder . indexOf ( fnId ) ;
return ` ${ opening } ${ index + 1 } </a></sup> ` ;
} ) ;
const compatRegex = /<a[^>]+data-fn="([^"]+)"[^>]*>\*<\/a>/g ;
attributes [ key ] = attributes [ key ] . replace ( compatRegex , ( match , fnId ) => {
const index = newOrder . indexOf ( fnId ) ;
return ` <sup data-fn=" ${ fnId } " class="fn"><a href="# ${ fnId } " id=" ${ fnId } -link"> ${ index + 1 } </a></sup> ` ;
} ) ;
}
return attributes ;
}
function updateBlocksAttributes ( _ _blocks ) {
return _ _blocks . map ( block => {
return {
... block ,
attributes : updateAttributes ( block . attributes ) ,
innerBlocks : updateBlocksAttributes ( block . innerBlocks )
} ;
} ) ;
}
// We need to go through all block attributes deeply and update the
// footnote anchor numbering (textContent) to match the new order.
const newBlocks = updateBlocksAttributes ( blocks ) ;
oldFootnotes = {
... oldFootnotes ,
... footnotes . reduce ( ( acc , fn ) => {
if ( ! newOrder . includes ( fn . id ) ) {
acc [ fn . id ] = fn ;
}
return acc ;
} , { } )
} ;
return {
meta : {
... meta ,
footnotes : JSON . stringify ( newFootnotes )
} ,
blocks : newBlocks
} ;
}
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/entity-provider.js
2021-01-28 03:04:13 +01:00
/ * *
* WordPress dependencies
* /
2023-06-27 16:24:19 +02:00
2021-11-08 15:29:21 +01:00
/ * *
* Internal dependencies
* /
2023-06-27 16:24:19 +02:00
2022-04-12 17:12:47 +02:00
/** @typedef {import('@wordpress/blocks').WPBlock} WPBlock */
const EMPTY _ARRAY = [ ] ;
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Internal dependencies
* /
2023-09-26 16:23:26 +02:00
const entityContexts = {
... rootEntitiesConfig . reduce ( ( acc , loader ) => {
2022-04-12 17:12:47 +02:00
if ( ! acc [ loader . kind ] ) {
acc [ loader . kind ] = { } ;
2021-05-19 17:09:27 +02:00
}
2022-04-12 17:12:47 +02:00
acc [ loader . kind ] [ loader . name ] = {
context : ( 0 , external _wp _element _namespaceObject . createContext ) ( undefined )
2021-05-19 17:09:27 +02:00
} ;
return acc ;
} , { } ) ,
2022-04-12 17:12:47 +02:00
... additionalEntityConfigLoaders . reduce ( ( acc , loader ) => {
acc [ loader . kind ] = { } ;
2021-05-19 17:09:27 +02:00
return acc ;
} , { } )
} ;
2022-04-12 17:12:47 +02:00
const getEntityContext = ( kind , name ) => {
if ( ! entityContexts [ kind ] ) {
2021-05-19 17:09:27 +02:00
throw new Error ( ` Missing entity config for kind: ${ kind } . ` ) ;
2021-01-28 03:04:13 +01:00
}
2022-04-12 17:12:47 +02:00
if ( ! entityContexts [ kind ] [ name ] ) {
entityContexts [ kind ] [ name ] = {
context : ( 0 , external _wp _element _namespaceObject . createContext ) ( undefined )
2021-01-28 03:04:13 +01:00
} ;
}
2022-04-12 17:12:47 +02:00
return entityContexts [ kind ] [ name ] . context ;
2021-01-28 03:04:13 +01:00
} ;
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Context provider component for providing
2022-04-12 17:12:47 +02:00
* an entity for a specific entity .
2021-01-28 03:04:13 +01:00
*
* @ param { Object } props The component ' s props .
* @ param { string } props . kind The entity kind .
2022-04-12 17:12:47 +02:00
* @ param { string } props . type The entity name .
2021-01-28 03:04:13 +01:00
* @ param { number } props . id The entity ID .
* @ param { * } props . children The children to wrap .
*
* @ return { Object } The provided children , wrapped with
* the entity ' s context provider .
* /
2023-06-27 16:24:19 +02:00
function EntityProvider ( {
kind ,
type : name ,
id ,
children
} ) {
2022-04-12 17:12:47 +02:00
const Provider = getEntityContext ( kind , name ) . Provider ;
2022-04-11 14:04:30 +02:00
return ( 0 , external _wp _element _namespaceObject . createElement ) ( Provider , {
2021-01-28 03:04:13 +01:00
value : id
} , children ) ;
}
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Hook that returns the ID for the nearest
* provided entity of the specified type .
*
* @ param { string } kind The entity kind .
2022-04-12 17:12:47 +02:00
* @ param { string } name The entity name .
2021-01-28 03:04:13 +01:00
* /
2022-04-12 17:12:47 +02:00
function useEntityId ( kind , name ) {
return ( 0 , external _wp _element _namespaceObject . useContext ) ( getEntityContext ( kind , name ) ) ;
2021-01-28 03:04:13 +01:00
}
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Hook that returns the value and a setter for the
* specified property of the nearest provided
* entity of the specified type .
*
* @ param { string } kind The entity kind .
2022-04-12 17:12:47 +02:00
* @ param { string } name The entity name .
2021-01-28 03:04:13 +01:00
* @ param { string } prop The property name .
* @ param { string } [ _id ] An entity ID to use instead of the context - provided one .
*
2021-06-15 10:52:30 +02:00
* @ return { [ * , Function , * ] } An array where the first item is the
* property value , the second is the
* setter and the third is the full value
* object from REST API containing more
* information like ` raw ` , ` rendered ` and
* ` protected ` props .
2021-01-28 03:04:13 +01:00
* /
2022-04-12 17:12:47 +02:00
function useEntityProp ( kind , name , prop , _id ) {
const providerId = useEntityId ( kind , name ) ;
2021-05-19 17:09:27 +02:00
const id = _id !== null && _id !== void 0 ? _id : providerId ;
const {
value ,
fullValue
2022-04-11 14:04:30 +02:00
} = ( 0 , external _wp _data _namespaceObject . useSelect ) ( select => {
2021-05-19 17:09:27 +02:00
const {
getEntityRecord ,
getEditedEntityRecord
2021-11-08 15:29:21 +01:00
} = select ( STORE _NAME ) ;
2022-04-12 17:12:47 +02:00
const record = getEntityRecord ( kind , name , id ) ; // Trigger resolver.
const editedRecord = getEditedEntityRecord ( kind , name , id ) ;
return record && editedRecord ? {
value : editedRecord [ prop ] ,
fullValue : record [ prop ]
2021-01-28 03:04:13 +01:00
} : { } ;
2022-04-12 17:12:47 +02:00
} , [ kind , name , id , prop ] ) ;
2021-05-19 17:09:27 +02:00
const {
editEntityRecord
2022-04-11 14:04:30 +02:00
} = ( 0 , external _wp _data _namespaceObject . useDispatch ) ( STORE _NAME ) ;
const setValue = ( 0 , external _wp _element _namespaceObject . useCallback ) ( newValue => {
2022-04-12 17:12:47 +02:00
editEntityRecord ( kind , name , id , {
2021-05-19 17:09:27 +02:00
[ prop ] : newValue
} ) ;
2023-09-26 16:23:26 +02:00
} , [ editEntityRecord , kind , name , id , prop ] ) ;
2021-01-28 03:04:13 +01:00
return [ value , setValue , fullValue ] ;
}
2023-09-26 16:23:26 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Hook that returns block content getters and setters for
* the nearest provided entity of the specified type .
*
* The return value has the shape ` [ blocks, onInput, onChange ] ` .
* ` onInput ` is for block changes that don ' t create undo levels
* or dirty the post , non - persistent changes , and ` onChange ` is for
2023-09-26 16:23:26 +02:00
* persistent changes . They map directly to the props of a
2021-01-28 03:04:13 +01:00
* ` BlockEditorProvider ` and are intended to be used with it ,
* or similar components or hooks .
*
2021-11-08 15:29:21 +01:00
* @ param { string } kind The entity kind .
2022-04-12 17:12:47 +02:00
* @ param { string } name The entity name .
2021-01-28 03:04:13 +01:00
* @ param { Object } options
2021-11-08 15:29:21 +01:00
* @ param { string } [ options . id ] An entity ID to use instead of the context - provided one .
2021-01-28 03:04:13 +01:00
*
* @ return { [ WPBlock [ ] , Function , Function ] } The block array and setters .
* /
2023-06-27 16:24:19 +02:00
function useEntityBlockEditor ( kind , name , {
id : _id
} = { } ) {
2022-04-12 17:12:47 +02:00
const providerId = useEntityId ( kind , name ) ;
2021-05-19 17:09:27 +02:00
const id = _id !== null && _id !== void 0 ? _id : providerId ;
const {
content ,
2023-09-26 16:23:26 +02:00
editedBlocks ,
2023-07-07 09:21:17 +02:00
meta
2022-04-11 14:04:30 +02:00
} = ( 0 , external _wp _data _namespaceObject . useSelect ) ( select => {
2021-05-19 17:09:27 +02:00
const {
getEditedEntityRecord
2021-11-08 15:29:21 +01:00
} = select ( STORE _NAME ) ;
2022-04-12 17:12:47 +02:00
const editedRecord = getEditedEntityRecord ( kind , name , id ) ;
2021-01-28 03:04:13 +01:00
return {
2023-09-26 16:23:26 +02:00
editedBlocks : editedRecord . blocks ,
2023-07-07 09:21:17 +02:00
content : editedRecord . content ,
meta : editedRecord . meta
2021-01-28 03:04:13 +01:00
} ;
2022-04-12 17:12:47 +02:00
} , [ kind , name , id ] ) ;
2021-05-19 17:09:27 +02:00
const {
_ _unstableCreateUndoLevel ,
editEntityRecord
2022-04-11 14:04:30 +02:00
} = ( 0 , external _wp _data _namespaceObject . useDispatch ) ( STORE _NAME ) ;
2023-09-26 16:23:26 +02:00
const blocks = ( 0 , external _wp _element _namespaceObject . useMemo ) ( ( ) => {
if ( editedBlocks ) {
return editedBlocks ;
2023-07-11 08:59:09 +02:00
}
2023-09-26 16:23:26 +02:00
return content && typeof content !== 'function' ? ( 0 , external _wp _blocks _namespaceObject . parse ) ( content ) : EMPTY _ARRAY ;
} , [ editedBlocks , content ] ) ;
const updateFootnotes = ( 0 , external _wp _element _namespaceObject . useCallback ) ( _blocks => updateFootnotesFromMeta ( _blocks , meta ) , [ meta ] ) ;
2023-07-07 09:21:17 +02:00
const onChange = ( 0 , external _wp _element _namespaceObject . useCallback ) ( ( newBlocks , options ) => {
const noChange = blocks === newBlocks ;
2021-01-28 03:04:13 +01:00
if ( noChange ) {
2022-04-12 17:12:47 +02:00
return _ _unstableCreateUndoLevel ( kind , name , id ) ;
2023-07-07 09:21:17 +02:00
}
const {
selection
2023-09-26 16:23:26 +02:00
} = options ;
// We create a new function here on every persistent edit
2021-01-28 03:04:13 +01:00
// to make sure the edit makes the post dirty and creates
// a new undo level.
2023-07-07 09:21:17 +02:00
const edits = {
selection ,
content : ( {
blocks : blocksForSerialization = [ ]
} ) => ( 0 , external _wp _blocks _namespaceObject . _ _unstableSerializeAndClean ) ( blocksForSerialization ) ,
... updateFootnotes ( newBlocks )
} ;
editEntityRecord ( kind , name , id , edits , {
isCached : false
2023-06-27 16:24:19 +02:00
} ) ;
2023-07-07 09:21:17 +02:00
} , [ kind , name , id , blocks , updateFootnotes , _ _unstableCreateUndoLevel , editEntityRecord ] ) ;
2022-04-11 14:04:30 +02:00
const onInput = ( 0 , external _wp _element _namespaceObject . useCallback ) ( ( newBlocks , options ) => {
2021-05-19 17:09:27 +02:00
const {
selection
} = options ;
2023-07-07 09:21:17 +02:00
const footnotesChanges = updateFootnotes ( newBlocks ) ;
2021-05-19 17:09:27 +02:00
const edits = {
2023-07-07 09:21:17 +02:00
selection ,
... footnotesChanges
2021-01-28 03:04:13 +01:00
} ;
2023-07-07 09:21:17 +02:00
editEntityRecord ( kind , name , id , edits , {
isCached : true
2023-06-27 16:24:19 +02:00
} ) ;
2023-07-07 09:21:17 +02:00
} , [ kind , name , id , updateFootnotes , editEntityRecord ] ) ;
2023-09-26 16:23:26 +02:00
return [ blocks , onInput , onChange ] ;
2022-04-12 17:12:47 +02:00
}
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: external ["wp","htmlEntities"]
2023-09-21 15:26:32 +02:00
var external _wp _htmlEntities _namespaceObject = window [ "wp" ] [ "htmlEntities" ] ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/__experimental-fetch-link-suggestions.js
2022-04-12 17:12:47 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* WordPress dependencies
2022-04-12 17:12:47 +02:00
* /
2023-09-26 16:23:26 +02:00
2022-04-12 17:12:47 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* Filters the search by type
*
* @ typedef { 'attachment' | 'post' | 'term' | 'post-format' } WPLinkSearchType
2022-04-12 17:12:47 +02:00
* /
/ * *
2022-09-20 17:43:29 +02:00
* A link with an id may be of kind post - type or taxonomy
*
* @ typedef { 'post-type' | 'taxonomy' } WPKind
2022-04-12 17:12:47 +02:00
* /
2022-09-20 17:43:29 +02:00
/ * *
* @ typedef WPLinkSearchOptions
*
* @ property { boolean } [ isInitialSuggestions ] Displays initial search suggestions , when true .
* @ property { WPLinkSearchType } [ type ] Filters by search type .
* @ property { string } [ subtype ] Slug of the post - type or taxonomy .
* @ property { number } [ page ] Which page of results to return .
* @ property { number } [ perPage ] Search results per page .
* /
/ * *
* @ typedef WPLinkSearchResult
*
* @ property { number } id Post or term id .
* @ property { string } url Link url .
* @ property { string } title Title of the link .
* @ property { string } type The taxonomy or post type slug or type URL .
* @ property { WPKind } [ kind ] Link kind of post - type or taxonomy
* /
2022-04-12 17:12:47 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* @ typedef WPLinkSearchResultAugments
*
* @ property { { kind : WPKind } } [ meta ] Contains kind information .
* @ property { WPKind } [ subtype ] Optional subtype if it exists .
* /
2022-04-12 17:12:47 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* @ typedef { WPLinkSearchResult & WPLinkSearchResultAugments } WPLinkSearchResultAugmented
* /
2022-04-12 17:12:47 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* @ typedef WPEditorSettings
2021-04-15 17:19:43 +02:00
*
* @ property { boolean } [ disablePostFormats ] Disables post formats , when true .
* /
/ * *
* Fetches link suggestions from the API .
*
* @ async
* @ param { string } search
* @ param { WPLinkSearchOptions } [ searchOptions ]
* @ param { WPEditorSettings } [ settings ]
*
* @ example
* ` ` ` js
* import { _ _experimentalFetchLinkSuggestions as fetchLinkSuggestions } from '@wordpress/core-data' ;
*
* //...
*
* export function initialize ( id , settings ) {
*
* settings . _ _experimentalFetchLinkSuggestions = (
* search ,
* searchOptions
* ) => fetchLinkSuggestions ( search , searchOptions , settings ) ;
* ` ` `
* @ return { Promise < WPLinkSearchResult [ ] > } List of search suggestions
* /
2023-06-27 16:24:19 +02:00
const fetchLinkSuggestions = async ( search , searchOptions = { } , settings = { } ) => {
2021-05-19 17:09:27 +02:00
const {
isInitialSuggestions = false ,
type = undefined ,
subtype = undefined ,
page = undefined ,
perPage = isInitialSuggestions ? 3 : 20
} = searchOptions ;
const {
disablePostFormats = false
} = settings ;
2022-04-12 17:12:47 +02:00
2023-09-26 16:23:26 +02:00
/** @type {Promise<WPLinkSearchResult>[]} */
2021-05-19 17:09:27 +02:00
const queries = [ ] ;
if ( ! type || type === 'post' ) {
queries . push ( external _wp _apiFetch _default ( ) ( {
2022-04-11 14:04:30 +02:00
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp/v2/search' , {
2021-05-19 17:09:27 +02:00
search ,
2021-04-15 17:19:43 +02:00
page ,
2021-05-19 17:09:27 +02:00
per _page : perPage ,
type : 'post' ,
subtype
} )
} ) . then ( results => {
return results . map ( result => {
2023-09-26 16:23:26 +02:00
return {
... result ,
2021-05-19 17:09:27 +02:00
meta : {
kind : 'post-type' ,
subtype
}
} ;
} ) ;
2022-04-12 17:12:47 +02:00
} ) . catch ( ( ) => [ ] ) // Fail by returning no results.
2021-05-19 17:09:27 +02:00
) ;
}
2021-04-15 17:19:43 +02:00
2021-05-19 17:09:27 +02:00
if ( ! type || type === 'term' ) {
queries . push ( external _wp _apiFetch _default ( ) ( {
2022-04-11 14:04:30 +02:00
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp/v2/search' , {
2021-05-19 17:09:27 +02:00
search ,
page ,
per _page : perPage ,
type : 'term' ,
subtype
} )
} ) . then ( results => {
return results . map ( result => {
2023-09-26 16:23:26 +02:00
return {
... result ,
2021-05-19 17:09:27 +02:00
meta : {
kind : 'taxonomy' ,
subtype
}
} ;
} ) ;
2022-04-12 17:12:47 +02:00
} ) . catch ( ( ) => [ ] ) // Fail by returning no results.
) ;
2021-05-19 17:09:27 +02:00
}
2021-04-15 17:19:43 +02:00
2021-05-19 17:09:27 +02:00
if ( ! disablePostFormats && ( ! type || type === 'post-format' ) ) {
queries . push ( external _wp _apiFetch _default ( ) ( {
2022-04-11 14:04:30 +02:00
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp/v2/search' , {
2021-05-19 17:09:27 +02:00
search ,
page ,
per _page : perPage ,
type : 'post-format' ,
subtype
} )
2021-05-21 12:14:23 +02:00
} ) . then ( results => {
return results . map ( result => {
2023-09-26 16:23:26 +02:00
return {
... result ,
2021-05-21 12:14:23 +02:00
meta : {
kind : 'taxonomy' ,
subtype
}
} ;
} ) ;
2022-04-12 17:12:47 +02:00
} ) . catch ( ( ) => [ ] ) // Fail by returning no results.
) ;
}
if ( ! type || type === 'attachment' ) {
queries . push ( external _wp _apiFetch _default ( ) ( {
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '/wp/v2/media' , {
search ,
page ,
per _page : perPage
} )
} ) . then ( results => {
return results . map ( result => {
2023-09-26 16:23:26 +02:00
return {
... result ,
2022-04-12 17:12:47 +02:00
meta : {
kind : 'media'
}
} ;
} ) ;
} ) . catch ( ( ) => [ ] ) // Fail by returning no results.
) ;
2021-05-19 17:09:27 +02:00
}
2021-04-15 17:19:43 +02:00
2021-05-19 17:09:27 +02:00
return Promise . all ( queries ) . then ( results => {
2023-09-26 16:23:26 +02:00
return results . reduce ( ( /** @type {WPLinkSearchResult[]} */ accumulator , current ) => accumulator . concat ( current ) ,
// Flatten list.
2021-05-19 17:09:27 +02:00
[ ] ) . filter (
/ * *
* @ param { { id : number } } result
* /
result => {
return ! ! result . id ;
2023-09-26 16:23:26 +02:00
} ) . slice ( 0 , perPage ) . map ( ( /** @type {WPLinkSearchResultAugmented} */ result ) => {
2022-09-20 17:43:29 +02:00
const isMedia = result . type === 'attachment' ;
return {
id : result . id ,
// @ts-ignore fix when we make this a TS file
url : isMedia ? result . source _url : result . url ,
2023-09-26 16:23:26 +02:00
title : ( 0 , external _wp _htmlEntities _namespaceObject . decodeEntities ) ( isMedia ?
// @ts-ignore fix when we make this a TS file
2022-09-20 17:43:29 +02:00
result . title . rendered : result . title || '' ) || ( 0 , external _wp _i18n _namespaceObject . _ _ ) ( '(no title)' ) ,
type : result . subtype || result . type ,
2023-06-27 16:24:19 +02:00
kind : result ? . meta ? . kind
2022-09-20 17:43:29 +02:00
} ;
} ) ;
} ) ;
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var _experimental _fetch _link _suggestions = ( fetchLinkSuggestions ) ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/__experimental-fetch-url-data.js
/ * *
* WordPress dependencies
* /
2023-09-26 16:23:26 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* A simple in - memory cache for requests .
* This avoids repeat HTTP requests which may be beneficial
* for those wishing to preserve low - bandwidth .
* /
const CACHE = new Map ( ) ;
2023-09-26 16:23:26 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* @ typedef WPRemoteUrlData
*
* @ property { string } title contents of the remote URL ' s ` <title> ` tag .
* /
/ * *
* Fetches data about a remote URL .
* eg : < title > tag , favicon ... etc .
*
* @ async
* @ param { string } url the URL to request details from .
* @ param { Object ? } options any options to pass to the underlying fetch .
* @ example
* ` ` ` js
* import { _ _experimentalFetchUrlData as fetchUrlData } from '@wordpress/core-data' ;
*
* //...
*
* export function initialize ( id , settings ) {
*
* settings . _ _experimentalFetchUrlData = (
* url
* ) => fetchUrlData ( url ) ;
* ` ` `
* @ return { Promise < WPRemoteUrlData [ ] > } Remote URL data .
* /
2023-06-27 16:24:19 +02:00
const fetchUrlData = async ( url , options = { } ) => {
2022-09-20 17:43:29 +02:00
const endpoint = '/wp-block-editor/v1/url-details' ;
const args = {
url : ( 0 , external _wp _url _namespaceObject . prependHTTP ) ( url )
} ;
if ( ! ( 0 , external _wp _url _namespaceObject . isURL ) ( url ) ) {
return Promise . reject ( ` ${ url } is not a valid URL. ` ) ;
2023-09-26 16:23:26 +02:00
}
2022-09-20 17:43:29 +02:00
2023-09-26 16:23:26 +02:00
// Test for "http" based URL as it is possible for valid
// yet unusable URLs such as `tel:123456` to be passed.
2022-09-20 17:43:29 +02:00
const protocol = ( 0 , external _wp _url _namespaceObject . getProtocol ) ( url ) ;
if ( ! protocol || ! ( 0 , external _wp _url _namespaceObject . isValidProtocol ) ( protocol ) || ! protocol . startsWith ( 'http' ) || ! /^https?:\/\/[^\/\s]/i . test ( url ) ) {
return Promise . reject ( ` ${ url } does not have a valid protocol. URLs must be "http" based ` ) ;
}
if ( CACHE . has ( url ) ) {
return CACHE . get ( url ) ;
}
return external _wp _apiFetch _default ( ) ( {
path : ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( endpoint , args ) ,
... options
} ) . then ( res => {
CACHE . set ( url , res ) ;
return res ;
} ) ;
} ;
2023-09-21 15:26:32 +02:00
/* harmony default export */ var _experimental _fetch _url _data = ( fetchUrlData ) ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/index.js
2023-06-27 16:24:19 +02:00
; // CONCATENATED MODULE: ./node_modules/memize/dist/index.js
/ * *
* Memize options object .
*
* @ typedef MemizeOptions
*
* @ property { number } [ maxSize ] Maximum size of the cache .
* /
/ * *
* Internal cache entry .
*
* @ typedef MemizeCacheNode
*
* @ property { ? MemizeCacheNode | undefined } [ prev ] Previous node .
* @ property { ? MemizeCacheNode | undefined } [ next ] Next node .
* @ property { Array < * > } args Function arguments for cache
* entry .
* @ property { * } val Function result .
* /
/ * *
* Properties of the enhanced function for controlling cache .
*
* @ typedef MemizeMemoizedFunction
*
* @ property { ( ) => void } clear Clear the cache .
* /
/ * *
* Accepts a function to be memoized , and returns a new memoized function , with
* optional options .
*
* @ template { ( ... args : any [ ] ) => any } F
*
* @ param { F } fn Function to memoize .
* @ param { MemizeOptions } [ options ] Options object .
*
* @ return { ( ( ... args : Parameters < F > ) => ReturnType < F > ) & MemizeMemoizedFunction } Memoized function .
* /
function memize ( fn , options ) {
var size = 0 ;
/** @type {?MemizeCacheNode|undefined} */
var head ;
/** @type {?MemizeCacheNode|undefined} */
var tail ;
options = options || { } ;
function memoized ( /* ...args */ ) {
var node = head ,
len = arguments . length ,
args ,
i ;
searchCache : while ( node ) {
// Perform a shallow equality test to confirm that whether the node
// under test is a candidate for the arguments passed. Two arrays
// are shallowly equal if their length matches and each entry is
// strictly equal between the two sets. Avoid abstracting to a
// function which could incur an arguments leaking deoptimization.
// Check whether node arguments match arguments length
if ( node . args . length !== arguments . length ) {
node = node . next ;
continue ;
}
// Check whether node arguments match arguments values
for ( i = 0 ; i < len ; i ++ ) {
if ( node . args [ i ] !== arguments [ i ] ) {
node = node . next ;
continue searchCache ;
}
}
// At this point we can assume we've found a match
// Surface matched node to head if not already
if ( node !== head ) {
// As tail, shift to previous. Must only shift if not also
// head, since if both head and tail, there is no previous.
if ( node === tail ) {
tail = node . prev ;
}
// Adjust siblings to point to each other. If node was tail,
// this also handles new tail's empty `next` assignment.
/** @type {MemizeCacheNode} */ ( node . prev ) . next = node . next ;
if ( node . next ) {
node . next . prev = node . prev ;
}
node . next = head ;
node . prev = null ;
/** @type {MemizeCacheNode} */ ( head ) . prev = node ;
head = node ;
}
// Return immediately
return node . val ;
}
// No cached value found. Continue to insertion phase:
// Create a copy of arguments (avoid leaking deoptimization)
args = new Array ( len ) ;
for ( i = 0 ; i < len ; i ++ ) {
args [ i ] = arguments [ i ] ;
}
node = {
args : args ,
// Generate the result from original function
val : fn . apply ( null , args ) ,
} ;
// Don't need to check whether node is already head, since it would
// have been returned above already if it was
// Shift existing head down list
if ( head ) {
head . prev = node ;
node . next = head ;
} else {
// If no head, follows that there's no tail (at initial or reset)
tail = node ;
}
// Trim tail if we're reached max size and are pending cache insertion
if ( size === /** @type {MemizeOptions} */ ( options ) . maxSize ) {
tail = /** @type {MemizeCacheNode} */ ( tail ) . prev ;
/** @type {MemizeCacheNode} */ ( tail ) . next = null ;
} else {
size ++ ;
}
head = node ;
return node . val ;
}
memoized . clear = function ( ) {
head = null ;
tail = null ;
size = 0 ;
} ;
// Ignore reason: There's not a clear solution to create an intersection of
// the function with additional properties, where the goal is to retain the
// function signature of the incoming argument and add control properties
// on the return value.
// @ts-ignore
return memoized ;
}
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/memoize.js
/ * *
* External dependencies
* /
2023-09-26 16:23:26 +02:00
// re-export due to restrictive esModuleInterop setting
2023-09-21 15:26:32 +02:00
/* harmony default export */ var memoize = ( memize ) ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/constants.js
2023-09-26 16:23:26 +02:00
let Status = /*#__PURE__*/ function ( Status ) {
2022-09-20 17:43:29 +02:00
Status [ "Idle" ] = "IDLE" ;
Status [ "Resolving" ] = "RESOLVING" ;
Status [ "Error" ] = "ERROR" ;
Status [ "Success" ] = "SUCCESS" ;
2023-09-26 16:23:26 +02:00
return Status ;
} ( { } ) ;
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/use-query-select.js
/ * *
* WordPress dependencies
* /
2023-09-26 16:23:26 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* Internal dependencies
* /
const META _SELECTORS = [ 'getIsResolving' , 'hasStartedResolution' , 'hasFinishedResolution' , 'isResolving' , 'getCachedResolvers' ] ;
/ * *
* Like useSelect , but the selectors return objects containing
* both the original data AND the resolution info .
*
* @ since 6.1 . 0 Introduced in WordPress core .
* @ private
*
* @ param { Function } mapQuerySelect see useSelect
* @ param { Array } deps see useSelect
*
* @ example
* ` ` ` js
* import { useQuerySelect } from '@wordpress/data' ;
* import { store as coreDataStore } from '@wordpress/core-data' ;
*
* function PageTitleDisplay ( { id } ) {
* const { data : page , isResolving } = useQuerySelect ( ( query ) => {
* return query ( coreDataStore ) . getEntityRecord ( 'postType' , 'page' , id )
* } , [ id ] ) ;
*
* if ( isResolving ) {
* return 'Loading...' ;
* }
*
* return page . title ;
* }
*
* // Rendered in the application:
* // <PageTitleDisplay id={ 10 } />
* ` ` `
*
* In the above example , when ` PageTitleDisplay ` is rendered into an
* application , the page and the resolution details will be retrieved from
* the store state using the ` mapSelect ` callback on ` useQuerySelect ` .
*
* If the id prop changes then any page in the state for that id is
* retrieved . If the id prop doesn ' t change and other props are passed in
* that do change , the title will not change because the dependency is just
* the id .
* @ see useSelect
*
* @ return { QuerySelectResponse } Queried data .
* /
function useQuerySelect ( mapQuerySelect , deps ) {
return ( 0 , external _wp _data _namespaceObject . useSelect ) ( ( select , registry ) => {
const resolve = store => enrichSelectors ( select ( store ) ) ;
return mapQuerySelect ( resolve , registry ) ;
} , deps ) ;
}
/ * *
* Transform simple selectors into ones that return an object with the
* original return value AND the resolution info .
*
* @ param { Object } selectors Selectors to enrich
* @ return { EnrichedSelectors } Enriched selectors
* /
const enrichSelectors = memoize ( selectors => {
const resolvers = { } ;
for ( const selectorName in selectors ) {
if ( META _SELECTORS . includes ( selectorName ) ) {
continue ;
}
Object . defineProperty ( resolvers , selectorName , {
2023-06-27 16:24:19 +02:00
get : ( ) => ( ... args ) => {
2022-09-20 17:43:29 +02:00
const {
getIsResolving ,
hasFinishedResolution
} = selectors ;
const isResolving = ! ! getIsResolving ( selectorName , args ) ;
const hasResolved = ! isResolving && hasFinishedResolution ( selectorName , args ) ;
const data = selectors [ selectorName ] ( ... args ) ;
let status ;
if ( isResolving ) {
status = Status . Resolving ;
} else if ( hasResolved ) {
if ( data ) {
status = Status . Success ;
} else {
status = Status . Error ;
}
} else {
status = Status . Idle ;
}
return {
data ,
status ,
isResolving ,
hasResolved
} ;
}
2021-05-19 17:09:27 +02:00
} ) ;
2022-09-20 17:43:29 +02:00
}
return resolvers ;
} ) ;
2021-04-15 17:19:43 +02:00
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/use-entity-record.js
2021-05-19 17:09:27 +02:00
/ * *
* WordPress dependencies
* /
2021-04-15 17:19:43 +02:00
2022-09-20 17:43:29 +02:00
2023-09-26 16:23:26 +02:00
2021-11-08 15:29:21 +01:00
/ * *
2022-09-20 17:43:29 +02:00
* Internal dependencies
2021-11-08 15:29:21 +01:00
* /
2022-09-20 17:43:29 +02:00
2021-05-19 17:09:27 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* Resolves the specified entity record .
2021-05-19 17:09:27 +02:00
*
2022-09-20 17:43:29 +02:00
* @ since 6.1 . 0 Introduced in WordPress core .
*
2023-06-27 16:24:19 +02:00
* @ param kind Kind of the entity , e . g . ` root ` or a ` postType ` . See rootEntitiesConfig in . . / entities . ts for a list of available kinds .
* @ param name Name of the entity , e . g . ` plugin ` or a ` post ` . See rootEntitiesConfig in . . / entities . ts for a list of available names .
* @ param recordId ID of the requested entity record .
* @ param options Optional hook options .
2022-09-20 17:43:29 +02:00
* @ example
* ` ` ` js
* import { useEntityRecord } from '@wordpress/core-data' ;
*
* function PageTitleDisplay ( { id } ) {
* const { record , isResolving } = useEntityRecord ( 'postType' , 'page' , id ) ;
*
* if ( isResolving ) {
* return 'Loading...' ;
* }
*
* return record . title ;
* }
*
* // Rendered in the application:
* // <PageTitleDisplay id={ 1 } />
* ` ` `
*
* In the above example , when ` PageTitleDisplay ` is rendered into an
* application , the page and the resolution details will be retrieved from
* the store state using ` getEntityRecord() ` , or resolved if missing .
*
* @ example
* ` ` ` js
* import { useDispatch } from '@wordpress/data' ;
* import { useCallback } from '@wordpress/element' ;
* import { _ _ } from '@wordpress/i18n' ;
* import { TextControl } from '@wordpress/components' ;
* import { store as noticeStore } from '@wordpress/notices' ;
* import { useEntityRecord } from '@wordpress/core-data' ;
*
* function PageRenameForm ( { id } ) {
* const page = useEntityRecord ( 'postType' , 'page' , id ) ;
* const { createSuccessNotice , createErrorNotice } =
* useDispatch ( noticeStore ) ;
*
* const setTitle = useCallback ( ( title ) => {
* page . edit ( { title } ) ;
* } , [ page . edit ] ) ;
*
* if ( page . isResolving ) {
* return 'Loading...' ;
* }
*
* async function onRename ( event ) {
* event . preventDefault ( ) ;
* try {
* await page . save ( ) ;
* createSuccessNotice ( _ _ ( 'Page renamed.' ) , {
* type : 'snackbar' ,
* } ) ;
* } catch ( error ) {
* createErrorNotice ( error . message , { type : 'snackbar' } ) ;
* }
* }
*
* return (
* < form onSubmit = { onRename } >
* < TextControl
* label = { _ _ ( 'Name' ) }
* value = { page . editedRecord . title }
* onChange = { setTitle }
* / >
* < button type = "submit" > { _ _ ( 'Save' ) } < / b u t t o n >
* < / f o r m >
* ) ;
* }
*
* // Rendered in the application:
* // <PageRenameForm id={ 1 } />
* ` ` `
*
* In the above example , updating and saving the page title is handled
* via the ` edit() ` and ` save() ` mutation helpers provided by
* ` useEntityRecord() ` ;
*
* @ return Entity record data .
* @ template RecordType
* /
2023-06-27 16:24:19 +02:00
function useEntityRecord ( kind , name , recordId , options = {
enabled : true
} ) {
2022-09-20 17:43:29 +02:00
const {
editEntityRecord ,
saveEditedEntityRecord
} = ( 0 , external _wp _data _namespaceObject . useDispatch ) ( store ) ;
const mutations = ( 0 , external _wp _element _namespaceObject . useMemo ) ( ( ) => ( {
2023-09-26 16:23:26 +02:00
edit : ( record , editOptions = { } ) => editEntityRecord ( kind , name , recordId , record , editOptions ) ,
2023-06-27 16:24:19 +02:00
save : ( saveOptions = { } ) => saveEditedEntityRecord ( kind , name , recordId , {
throwOnError : true ,
... saveOptions
} )
} ) , [ editEntityRecord , kind , name , recordId , saveEditedEntityRecord ] ) ;
2022-09-20 17:43:29 +02:00
const {
editedRecord ,
2023-09-26 16:23:26 +02:00
hasEdits ,
edits
2022-09-20 17:43:29 +02:00
} = ( 0 , external _wp _data _namespaceObject . useSelect ) ( select => ( {
editedRecord : select ( store ) . getEditedEntityRecord ( kind , name , recordId ) ,
2023-09-26 16:23:26 +02:00
hasEdits : select ( store ) . hasEditsForEntityRecord ( kind , name , recordId ) ,
edits : select ( store ) . getEntityRecordNonTransientEdits ( kind , name , recordId )
2022-09-20 17:43:29 +02:00
} ) , [ kind , name , recordId ] ) ;
const {
data : record ,
... querySelectRest
} = useQuerySelect ( query => {
if ( ! options . enabled ) {
2023-06-27 16:24:19 +02:00
return {
data : null
} ;
2022-09-20 17:43:29 +02:00
}
return query ( store ) . getEntityRecord ( kind , name , recordId ) ;
} , [ kind , name , recordId , options . enabled ] ) ;
return {
record ,
editedRecord ,
hasEdits ,
2023-09-26 16:23:26 +02:00
edits ,
2022-09-20 17:43:29 +02:00
... querySelectRest ,
... mutations
} ;
}
function _ _experimentalUseEntityRecord ( kind , name , recordId , options ) {
external _wp _deprecated _default ( ) ( ` wp.data.__experimentalUseEntityRecord ` , {
alternative : 'wp.data.useEntityRecord' ,
since : '6.1'
} ) ;
return useEntityRecord ( kind , name , recordId , options ) ;
}
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/use-entity-records.js
/ * *
* WordPress dependencies
2021-05-19 17:09:27 +02:00
* /
2022-09-20 17:43:29 +02:00
2023-09-26 16:23:26 +02:00
2021-05-19 17:09:27 +02:00
/ * *
2022-09-20 17:43:29 +02:00
* Internal dependencies
* /
const use _entity _records _EMPTY _ARRAY = [ ] ;
2023-09-26 16:23:26 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* Resolves the specified entity records .
2021-05-19 17:09:27 +02:00
*
2022-09-20 17:43:29 +02:00
* @ since 6.1 . 0 Introduced in WordPress core .
*
2023-06-27 16:24:19 +02:00
* @ param kind Kind of the entity , e . g . ` root ` or a ` postType ` . See rootEntitiesConfig in . . / entities . ts for a list of available kinds .
* @ param name Name of the entity , e . g . ` plugin ` or a ` post ` . See rootEntitiesConfig in . . / entities . ts for a list of available names .
* @ param queryArgs Optional HTTP query description for how to fetch the data , passed to the requested API endpoint .
* @ param options Optional hook options .
2021-05-19 17:09:27 +02:00
* @ example
* ` ` ` js
2023-06-27 16:24:19 +02:00
* import { useEntityRecords } from '@wordpress/core-data' ;
2021-05-19 17:09:27 +02:00
*
2022-09-20 17:43:29 +02:00
* function PageTitlesList ( ) {
* const { records , isResolving } = useEntityRecords ( 'postType' , 'page' ) ;
2021-05-19 17:09:27 +02:00
*
2022-09-20 17:43:29 +02:00
* if ( isResolving ) {
* return 'Loading...' ;
* }
2021-05-20 14:20:04 +02:00
*
2022-09-20 17:43:29 +02:00
* return (
* < ul >
* { records . map ( ( page ) => (
* < li > { page . title } < / l i >
* ) ) }
* < / u l >
* ) ;
* }
*
* // Rendered in the application:
* // <PageTitlesList />
2022-04-11 14:04:30 +02:00
* ` ` `
2022-09-20 17:43:29 +02:00
*
* In the above example , when ` PageTitlesList ` is rendered into an
* application , the list of records and the resolution details will be retrieved from
* the store state using ` getEntityRecords() ` , or resolved if missing .
*
* @ return Entity records data .
* @ template RecordType
2021-05-19 17:09:27 +02:00
* /
2023-06-27 16:24:19 +02:00
function useEntityRecords ( kind , name , queryArgs = { } , options = {
enabled : true
} ) {
2022-09-20 17:43:29 +02:00
// Serialize queryArgs to a string that can be safely used as a React dep.
// We can't just pass queryArgs as one of the deps, because if it is passed
// as an object literal, then it will be a different object on each call even
// if the values remain the same.
const queryAsString = ( 0 , external _wp _url _namespaceObject . addQueryArgs ) ( '' , queryArgs ) ;
const {
data : records ,
... rest
} = useQuerySelect ( query => {
if ( ! options . enabled ) {
return {
// Avoiding returning a new reference on every execution.
data : use _entity _records _EMPTY _ARRAY
} ;
}
return query ( store ) . getEntityRecords ( kind , name , queryArgs ) ;
} , [ kind , name , queryAsString , options . enabled ] ) ;
return {
records ,
... rest
} ;
}
function _ _experimentalUseEntityRecords ( kind , name , queryArgs , options ) {
external _wp _deprecated _default ( ) ( ` wp.data.__experimentalUseEntityRecords ` , {
alternative : 'wp.data.useEntityRecords' ,
since : '6.1'
} ) ;
return useEntityRecords ( kind , name , queryArgs , options ) ;
}
2021-01-28 03:04:13 +01:00
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/use-resource-permissions.js
/ * *
* WordPress dependencies
* /
2019-09-19 17:19:18 +02:00
2023-09-26 16:23:26 +02:00
2022-09-20 17:43:29 +02:00
/ * *
* Internal dependencies
* /
2019-10-15 17:37:08 +02:00
2021-01-28 03:04:13 +01:00
2022-09-20 17:43:29 +02:00
/ * *
* Resolves resource permissions .
*
* @ since 6.1 . 0 Introduced in WordPress core .
*
2023-06-27 16:24:19 +02:00
* @ param resource The resource in question , e . g . media .
* @ param id ID of a specific resource entry , if needed , e . g . 10.
2022-09-20 17:43:29 +02:00
*
* @ example
* ` ` ` js
* import { useResourcePermissions } from '@wordpress/core-data' ;
*
* function PagesList ( ) {
* const { canCreate , isResolving } = useResourcePermissions ( 'pages' ) ;
*
* if ( isResolving ) {
* return 'Loading ...' ;
* }
*
* return (
* < div >
* { canCreate ? ( < button > + Create a new page < / b u t t o n > ) : f a l s e }
* // ...
* < / d i v >
* ) ;
* }
*
* // Rendered in the application:
* // <PagesList />
* ` ` `
*
* @ example
* ` ` ` js
* import { useResourcePermissions } from '@wordpress/core-data' ;
*
* function Page ( { pageId } ) {
* const {
* canCreate ,
* canUpdate ,
* canDelete ,
* isResolving
* } = useResourcePermissions ( 'pages' , pageId ) ;
*
* if ( isResolving ) {
* return 'Loading ...' ;
* }
*
* return (
* < div >
* { canCreate ? ( < button > + Create a new page < / b u t t o n > ) : f a l s e }
* { canUpdate ? ( < button > Edit page < / b u t t o n > ) : f a l s e }
* { canDelete ? ( < button > Delete page < / b u t t o n > ) : f a l s e }
* // ...
* < / d i v >
* ) ;
* }
*
* // Rendered in the application:
* // <Page pageId={ 15 } />
* ` ` `
*
* In the above example , when ` PagesList ` is rendered into an
* application , the appropriate permissions and the resolution details will be retrieved from
* the store state using ` canUser() ` , or resolved if missing .
*
* @ return Entity records data .
* @ template IdType
* /
function useResourcePermissions ( resource , id ) {
return useQuerySelect ( resolve => {
const {
canUser
} = resolve ( store ) ;
const create = canUser ( 'create' , resource ) ;
if ( ! id ) {
const read = canUser ( 'read' , resource ) ;
const isResolving = create . isResolving || read . isResolving ;
const hasResolved = create . hasResolved && read . hasResolved ;
let status = Status . Idle ;
if ( isResolving ) {
status = Status . Resolving ;
} else if ( hasResolved ) {
status = Status . Success ;
}
return {
status ,
isResolving ,
hasResolved ,
canCreate : create . hasResolved && create . data ,
canRead : read . hasResolved && read . data
} ;
}
const read = canUser ( 'read' , resource , id ) ;
const update = canUser ( 'update' , resource , id ) ;
const _delete = canUser ( 'delete' , resource , id ) ;
const isResolving = read . isResolving || create . isResolving || update . isResolving || _delete . isResolving ;
const hasResolved = read . hasResolved && create . hasResolved && update . hasResolved && _delete . hasResolved ;
let status = Status . Idle ;
if ( isResolving ) {
status = Status . Resolving ;
} else if ( hasResolved ) {
status = Status . Success ;
}
return {
status ,
isResolving ,
hasResolved ,
canRead : hasResolved && read . data ,
canCreate : hasResolved && create . data ,
canUpdate : hasResolved && update . data ,
canDelete : hasResolved && _delete . data
} ;
} , [ resource , id ] ) ;
}
function _ _experimentalUseResourcePermissions ( resource , id ) {
external _wp _deprecated _default ( ) ( ` wp.data.__experimentalUseResourcePermissions ` , {
alternative : 'wp.data.useResourcePermissions' ,
since : '6.1'
2022-04-11 14:04:30 +02:00
} ) ;
2022-09-20 17:43:29 +02:00
return useResourcePermissions ( resource , id ) ;
}
2021-01-28 03:04:13 +01:00
2022-09-20 17:43:29 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/hooks/index.js
2021-04-15 17:19:43 +02:00
2021-01-28 03:04:13 +01:00
2022-04-11 14:04:30 +02:00
; // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/index.js
/ * *
* WordPress dependencies
* /
2021-01-28 03:04:13 +01:00
2023-09-26 16:23:26 +02:00
2022-04-11 14:04:30 +02:00
/ * *
* Internal dependencies
* /
2021-01-28 03:04:13 +01:00
2018-12-14 05:41:57 +01:00
2019-10-15 17:37:08 +02:00
2020-02-06 22:03:31 +01:00
2019-10-15 17:37:08 +02:00
2023-07-03 11:14:26 +02:00
2023-09-26 16:23:26 +02:00
// The entity selectors/resolvers and actions are shortcuts to their generic equivalents
2022-04-12 17:12:47 +02:00
// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecords)
// Instead of getEntityRecord, the consumer could use more user-friendly named selector: getPostType, getTaxonomy...
2022-04-11 14:04:30 +02:00
// The "kind" and the "name" of the entity are combined to generate these shortcuts.
2019-10-15 17:37:08 +02:00
2022-04-12 17:12:47 +02:00
const entitySelectors = rootEntitiesConfig . reduce ( ( result , entity ) => {
2022-04-11 14:04:30 +02:00
const {
kind ,
name
} = entity ;
result [ getMethodName ( kind , name ) ] = ( state , key , query ) => getEntityRecord ( state , kind , name , key , query ) ;
2022-04-12 17:12:47 +02:00
result [ getMethodName ( kind , name , 'get' , true ) ] = ( state , query ) => getEntityRecords ( state , kind , name , query ) ;
2022-04-11 14:04:30 +02:00
return result ;
} , { } ) ;
2022-04-12 17:12:47 +02:00
const entityResolvers = rootEntitiesConfig . reduce ( ( result , entity ) => {
2022-04-11 14:04:30 +02:00
const {
kind ,
name
} = entity ;
result [ getMethodName ( kind , name ) ] = ( key , query ) => resolvers _getEntityRecord ( kind , name , key , query ) ;
const pluralMethodName = getMethodName ( kind , name , 'get' , true ) ;
2023-06-27 16:24:19 +02:00
result [ pluralMethodName ] = ( ... args ) => resolvers _getEntityRecords ( kind , name , ... args ) ;
2022-04-12 17:12:47 +02:00
result [ pluralMethodName ] . shouldInvalidate = action => resolvers _getEntityRecords . shouldInvalidate ( action , kind , name ) ;
2022-04-11 14:04:30 +02:00
return result ;
} , { } ) ;
2022-04-12 17:12:47 +02:00
const entityActions = rootEntitiesConfig . reduce ( ( result , entity ) => {
2022-04-11 14:04:30 +02:00
const {
kind ,
name
} = entity ;
result [ getMethodName ( kind , name , 'save' ) ] = key => saveEntityRecord ( kind , name , key ) ;
result [ getMethodName ( kind , name , 'delete' ) ] = ( key , query ) => deleteEntityRecord ( kind , name , key , query ) ;
return result ;
} , { } ) ;
const storeConfig = ( ) => ( {
reducer : build _module _reducer ,
2023-09-26 16:23:26 +02:00
actions : {
... build _module _actions _namespaceObject ,
2022-04-11 14:04:30 +02:00
... entityActions ,
... createLocksActions ( )
} ,
2023-09-26 16:23:26 +02:00
selectors : {
... build _module _selectors _namespaceObject ,
2022-04-11 14:04:30 +02:00
... entitySelectors
} ,
2023-09-26 16:23:26 +02:00
resolvers : {
... resolvers _namespaceObject ,
2022-04-11 14:04:30 +02:00
... entityResolvers
2022-04-12 17:12:47 +02:00
}
2022-04-11 14:04:30 +02:00
} ) ;
2023-09-26 16:23:26 +02:00
2022-04-11 14:04:30 +02:00
/ * *
* Store definition for the code data namespace .
*
* @ see https : //github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
* /
const store = ( 0 , external _wp _data _namespaceObject . createReduxStore ) ( STORE _NAME , storeConfig ( ) ) ;
2023-09-26 16:23:26 +02:00
unlock ( store ) . registerPrivateSelectors ( private _selectors _namespaceObject ) ;
2023-07-03 11:14:26 +02:00
( 0 , external _wp _data _namespaceObject . register ) ( store ) ; // Register store after unlocking private selectors to allow resolvers to use them.
2018-12-14 05:41:57 +01:00
2022-04-12 17:12:47 +02:00
2023-09-21 15:26:32 +02:00
} ( ) ;
2022-04-11 14:04:30 +02:00
( window . wp = window . wp || { } ) . coreData = _ _webpack _exports _ _ ;
/******/ } ) ( )
;