2018-12-14 05:41:57 +01:00
this [ "wp" ] = this [ "wp" ] || { } ; this [ "wp" ] [ "coreData" ] =
/******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _webpack _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] ) {
/******/ return installedModules [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _webpack _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _webpack _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _webpack _require _ _ . c = installedModules ;
/******/
/******/ // define getter function for harmony exports
/******/ _ _webpack _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _webpack _require _ _ . o ( exports , name ) ) {
/******/ Object . defineProperty ( exports , name , { enumerable : true , get : getter } ) ;
/******/ }
/******/ } ;
/******/
/******/ // define __esModule on exports
/******/ _ _webpack _require _ _ . r = function ( exports ) {
/******/ if ( typeof Symbol !== 'undefined' && Symbol . toStringTag ) {
/******/ Object . defineProperty ( exports , Symbol . toStringTag , { value : 'Module' } ) ;
/******/ }
/******/ Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
/******/ } ;
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ _ _webpack _require _ _ . t = function ( value , mode ) {
/******/ if ( mode & 1 ) value = _ _webpack _require _ _ ( value ) ;
/******/ if ( mode & 8 ) return value ;
/******/ if ( ( mode & 4 ) && typeof value === 'object' && value && value . _ _esModule ) return value ;
/******/ var ns = Object . create ( null ) ;
/******/ _ _webpack _require _ _ . r ( ns ) ;
/******/ Object . defineProperty ( ns , 'default' , { enumerable : true , value : value } ) ;
/******/ if ( mode & 2 && typeof value != 'string' ) for ( var key in value ) _ _webpack _require _ _ . d ( ns , key , function ( key ) { return value [ key ] ; } . bind ( null , key ) ) ;
/******/ return ns ;
/******/ } ;
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _webpack _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _webpack _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _webpack _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
/******/ // __webpack_public_path__
/******/ _ _webpack _require _ _ . p = "" ;
/******/
/******/
/******/ // Load entry module and return exports
2021-05-20 14:20:04 +02:00
/******/ return _ _webpack _require _ _ ( _ _webpack _require _ _ . s = "dsJ0" ) ;
2018-12-14 05:41:57 +01:00
/******/ } )
/************************************************************************/
/******/ ( {
2021-05-20 14:20:04 +02:00
/***/ "1ZqX" :
2020-01-08 12:57:23 +01:00
/***/ ( function ( module , exports ) {
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "data" ] ; } ( ) ) ;
2021-02-02 06:17:13 +01:00
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "51Zz" :
2021-02-02 06:17:13 +01:00
/***/ ( function ( module , exports ) {
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "dataControls" ] ; } ( ) ) ;
2021-02-02 06:17:13 +01:00
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "7Cbv" :
2021-02-02 06:17:13 +01:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
2021-05-20 14:20:04 +02:00
// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/rng.js
// 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()).
var getRandomValues ;
var rnds8 = new Uint8Array ( 16 ) ;
function rng ( ) {
// lazy load so that environments that need to polyfill have a chance to do so
if ( ! getRandomValues ) {
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
// find the complete implementation of crypto (msCrypto) on IE11.
getRandomValues = typeof crypto !== 'undefined' && crypto . getRandomValues && crypto . getRandomValues . bind ( crypto ) || typeof msCrypto !== 'undefined' && typeof msCrypto . getRandomValues === 'function' && msCrypto . getRandomValues . bind ( msCrypto ) ;
2021-02-02 06:17:13 +01:00
2021-05-20 14:20:04 +02:00
if ( ! getRandomValues ) {
throw new Error ( 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported' ) ;
}
}
2021-02-02 06:17:13 +01:00
2021-05-20 14:20:04 +02:00
return getRandomValues ( rnds8 ) ;
}
// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/regex.js
/* harmony default export */ var regex = ( /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i ) ;
// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/validate.js
2020-06-26 15:33:47 +02:00
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function validate ( uuid ) {
return typeof uuid === 'string' && regex . test ( uuid ) ;
2020-01-22 23:06:21 +01:00
}
2021-05-20 14:20:04 +02:00
/* harmony default export */ var esm _browser _validate = ( validate ) ;
// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/stringify.js
2020-01-22 23:06:21 +01:00
/ * *
2021-05-20 14:20:04 +02:00
* Convert array of 16 byte values to UUID string format of the form :
* XXXXXXXX - XXXX - XXXX - XXXX - XXXXXXXXXXXX
2020-01-22 23:06:21 +01:00
* /
2021-05-20 14:20:04 +02:00
var byteToHex = [ ] ;
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
for ( var stringify _i = 0 ; stringify _i < 256 ; ++ stringify _i ) {
byteToHex . push ( ( stringify _i + 0x100 ) . toString ( 16 ) . substr ( 1 ) ) ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function stringify ( arr ) {
var offset = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 0 ;
// 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
var uuid = ( 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 ] ] ) . toLowerCase ( ) ; // Consistency check for valid UUID. If this throws, it's likely due to one
// 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
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
if ( ! esm _browser _validate ( uuid ) ) {
throw TypeError ( 'Stringified UUID is invalid' ) ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
return uuid ;
2020-01-22 23:06:21 +01:00
}
2021-05-20 14:20:04 +02:00
/* harmony default export */ var esm _browser _stringify = ( stringify ) ;
// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v4.js
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
function v4 ( options , buf , offset ) {
options = options || { } ;
var rnds = options . random || ( options . rng || rng ) ( ) ; // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
rnds [ 6 ] = rnds [ 6 ] & 0x0f | 0x40 ;
rnds [ 8 ] = rnds [ 8 ] & 0x3f | 0x80 ; // Copy bytes to buffer, if provided
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
if ( buf ) {
offset = offset || 0 ;
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
for ( var i = 0 ; i < 16 ; ++ i ) {
buf [ offset + i ] = rnds [ i ] ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
return buf ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
return esm _browser _stringify ( rnds ) ;
}
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
/* harmony default export */ var esm _browser _v4 = _ _webpack _exports _ _ [ "a" ] = ( v4 ) ;
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
/***/ } ) ,
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
/***/ "FtRg" :
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
"use strict" ;
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
2021-05-19 17:09:27 +02:00
/***/ } ) ,
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
/***/ "GRId" :
2021-05-19 17:09:27 +02:00
/***/ ( function ( module , exports ) {
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "element" ] ; } ( ) ) ;
2020-01-22 23:06:21 +01:00
2021-05-19 17:09:27 +02:00
/***/ } ) ,
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
/***/ "HSyU" :
2021-05-19 17:09:27 +02:00
/***/ ( function ( module , exports ) {
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "blocks" ] ; } ( ) ) ;
2021-05-19 17:09:27 +02:00
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "Mmq9" :
2021-05-19 17:09:27 +02:00
/***/ ( function ( module , exports ) {
2020-01-22 23:06:21 +01:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "url" ] ; } ( ) ) ;
2020-01-22 23:06:21 +01:00
2020-01-08 12:57:23 +01:00
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "YLtl" :
2021-05-19 17:09:27 +02:00
/***/ ( function ( module , exports ) {
2021-05-07 13:48:27 +02:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "lodash" ] ; } ( ) ) ;
2021-05-07 13:48:27 +02:00
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "dsJ0" :
2019-10-15 17:37:08 +02:00
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
2019-09-19 17:19:18 +02:00
2019-10-15 17:37:08 +02:00
"use strict" ;
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
2021-01-28 03:04:13 +01:00
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "store" , function ( ) { return /* binding */ build _module _store ; } ) ;
2020-06-29 13:50:29 +02:00
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "EntityProvider" , function ( ) { return /* reexport */ EntityProvider ; } ) ;
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "useEntityId" , function ( ) { return /* reexport */ useEntityId ; } ) ;
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "useEntityProp" , function ( ) { return /* reexport */ useEntityProp ; } ) ;
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "useEntityBlockEditor" , function ( ) { return /* reexport */ useEntityBlockEditor ; } ) ;
2021-04-15 17:19:43 +02:00
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "__experimentalFetchLinkSuggestions" , function ( ) { return /* reexport */ _experimental _fetch _link _suggestions ; } ) ;
2021-05-19 17:09:27 +02:00
_ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "__experimentalFetchRemoteUrlData" , function ( ) { return /* reexport */ _experimental _fetch _remote _url _data ; } ) ;
2020-06-29 13:50:29 +02:00
2021-01-28 03:04:13 +01:00
// NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/locks/actions.js
var locks _actions _namespaceObject = { } ;
_ _webpack _require _ _ . r ( locks _actions _namespaceObject ) ;
_ _webpack _require _ _ . d ( locks _actions _namespaceObject , "__unstableAcquireStoreLock" , function ( ) { return _ _unstableAcquireStoreLock ; } ) ;
_ _webpack _require _ _ . d ( locks _actions _namespaceObject , "__unstableEnqueueLockRequest" , function ( ) { return _ _unstableEnqueueLockRequest ; } ) ;
_ _webpack _require _ _ . d ( locks _actions _namespaceObject , "__unstableReleaseStoreLock" , function ( ) { return _ _unstableReleaseStoreLock ; } ) ;
_ _webpack _require _ _ . d ( locks _actions _namespaceObject , "__unstableProcessPendingLockRequests" , function ( ) { return _ _unstableProcessPendingLockRequests ; } ) ;
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 ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveUserQuery" , function ( ) { return receiveUserQuery ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveCurrentUser" , function ( ) { return receiveCurrentUser ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "addEntities" , function ( ) { return addEntities ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveEntityRecords" , function ( ) { return receiveEntityRecords ; } ) ;
2020-06-26 15:33:47 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveCurrentTheme" , function ( ) { return receiveCurrentTheme ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveThemeSupports" , function ( ) { return receiveThemeSupports ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveEmbedPreview" , function ( ) { return receiveEmbedPreview ; } ) ;
2020-10-13 15:10:30 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "deleteEntityRecord" , function ( ) { return deleteEntityRecord ; } ) ;
2020-01-08 12:57:23 +01:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "editEntityRecord" , function ( ) { return actions _editEntityRecord ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "undo" , function ( ) { return undo ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "redo" , function ( ) { return redo ; } ) ;
2021-01-28 03:04:13 +01:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "__unstableCreateUndoLevel" , function ( ) { return actions _unstableCreateUndoLevel ; } ) ;
2020-02-10 23:33:27 +01:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "saveEntityRecord" , function ( ) { return saveEntityRecord ; } ) ;
2021-02-02 06:17:13 +01:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "__experimentalBatch" , function ( ) { return _ _experimentalBatch ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "saveEditedEntityRecord" , function ( ) { return saveEditedEntityRecord ; } ) ;
2021-05-19 17:09:27 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "__experimentalSaveSpecifiedEntityEdits" , function ( ) { return _ _experimentalSaveSpecifiedEntityEdits ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveUploadPermissions" , function ( ) { return receiveUploadPermissions ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveUserPermission" , function ( ) { return receiveUserPermission ; } ) ;
_ _webpack _require _ _ . d ( build _module _actions _namespaceObject , "receiveAutosaves" , function ( ) { return receiveAutosaves ; } ) ;
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 ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "isRequestingEmbedPreview" , function ( ) { return isRequestingEmbedPreview ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getAuthors" , function ( ) { return getAuthors ; } ) ;
2020-12-01 13:19:43 +01:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "__unstableGetAuthor" , function ( ) { return _ _unstableGetAuthor ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getCurrentUser" , function ( ) { return getCurrentUser ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getUserQueryResults" , function ( ) { return getUserQueryResults ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEntitiesByKind" , function ( ) { return getEntitiesByKind ; } ) ;
2021-05-19 17:09:27 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEntity" , function ( ) { return getEntity ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEntityRecord" , function ( ) { return getEntityRecord ; } ) ;
2020-02-10 23:33:27 +01:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "__experimentalGetEntityRecordNoResolver" , function ( ) { return _ _experimentalGetEntityRecordNoResolver ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getRawEntityRecord" , function ( ) { return getRawEntityRecord ; } ) ;
2020-10-13 15:10:30 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "hasEntityRecords" , function ( ) { return hasEntityRecords ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEntityRecords" , function ( ) { return getEntityRecords ; } ) ;
2020-06-26 15:33:47 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "__experimentalGetDirtyEntityRecords" , function ( ) { return _ _experimentalGetDirtyEntityRecords ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEntityRecordEdits" , function ( ) { return getEntityRecordEdits ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEntityRecordNonTransientEdits" , function ( ) { return getEntityRecordNonTransientEdits ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "hasEditsForEntityRecord" , function ( ) { return hasEditsForEntityRecord ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEditedEntityRecord" , function ( ) { return getEditedEntityRecord ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "isAutosavingEntityRecord" , function ( ) { return isAutosavingEntityRecord ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "isSavingEntityRecord" , function ( ) { return isSavingEntityRecord ; } ) ;
2020-10-13 15:10:30 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "isDeletingEntityRecord" , function ( ) { return isDeletingEntityRecord ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getLastEntitySaveError" , function ( ) { return getLastEntitySaveError ; } ) ;
2020-10-13 15:10:30 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getLastEntityDeleteError" , function ( ) { return getLastEntityDeleteError ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getUndoEdit" , function ( ) { return getUndoEdit ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getRedoEdit" , function ( ) { return getRedoEdit ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "hasUndo" , function ( ) { return hasUndo ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "hasRedo" , function ( ) { return hasRedo ; } ) ;
2020-06-26 15:33:47 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getCurrentTheme" , function ( ) { return getCurrentTheme ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getThemeSupports" , function ( ) { return getThemeSupports ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getEmbedPreview" , function ( ) { return getEmbedPreview ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "isPreviewEmbedFallback" , function ( ) { return isPreviewEmbedFallback ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "canUser" , function ( ) { return canUser ; } ) ;
2021-06-15 10:52:30 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "canUserEditEntityRecord" , function ( ) { return canUserEditEntityRecord ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getAutosaves" , function ( ) { return getAutosaves ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getAutosave" , function ( ) { return getAutosave ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "hasFetchedAutosaves" , function ( ) { return hasFetchedAutosaves ; } ) ;
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "getReferenceByDistinctEdits" , function ( ) { return getReferenceByDistinctEdits ; } ) ;
2021-01-28 03:04:13 +01:00
_ _webpack _require _ _ . d ( build _module _selectors _namespaceObject , "__experimentalGetTemplateForLink" , function ( ) { return _ _experimentalGetTemplateForLink ; } ) ;
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 ) ;
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getAuthors" , function ( ) { return resolvers _getAuthors ; } ) ;
2020-12-01 13:19:43 +01:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "__unstableGetAuthor" , function ( ) { return resolvers _unstableGetAuthor ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getCurrentUser" , function ( ) { return resolvers _getCurrentUser ; } ) ;
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getEntityRecord" , function ( ) { return resolvers _getEntityRecord ; } ) ;
2020-06-26 15:33:47 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getRawEntityRecord" , function ( ) { return resolvers _getRawEntityRecord ; } ) ;
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getEditedEntityRecord" , function ( ) { return resolvers _getEditedEntityRecord ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getEntityRecords" , function ( ) { return resolvers _getEntityRecords ; } ) ;
2020-06-26 15:33:47 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getCurrentTheme" , function ( ) { return resolvers _getCurrentTheme ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getThemeSupports" , function ( ) { return resolvers _getThemeSupports ; } ) ;
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getEmbedPreview" , function ( ) { return resolvers _getEmbedPreview ; } ) ;
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "canUser" , function ( ) { return resolvers _canUser ; } ) ;
2021-06-15 10:52:30 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "canUserEditEntityRecord" , function ( ) { return resolvers _canUserEditEntityRecord ; } ) ;
2019-10-15 17:37:08 +02:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getAutosaves" , function ( ) { return resolvers _getAutosaves ; } ) ;
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "getAutosave" , function ( ) { return resolvers _getAutosave ; } ) ;
2021-01-28 03:04:13 +01:00
_ _webpack _require _ _ . d ( resolvers _namespaceObject , "__experimentalGetTemplateForLink" , function ( ) { return resolvers _experimentalGetTemplateForLink ; } ) ;
// NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/locks/selectors.js
var locks _selectors _namespaceObject = { } ;
_ _webpack _require _ _ . r ( locks _selectors _namespaceObject ) ;
_ _webpack _require _ _ . d ( locks _selectors _namespaceObject , "__unstableGetPendingLockRequests" , function ( ) { return _ _unstableGetPendingLockRequests ; } ) ;
_ _webpack _require _ _ . d ( locks _selectors _namespaceObject , "__unstableIsLockAvailable" , function ( ) { return _ _unstableIsLockAvailable ; } ) ;
2019-09-19 17:19:18 +02:00
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external ["wp","data"]
2021-05-20 14:20:04 +02:00
var external _wp _data _ = _ _webpack _require _ _ ( "1ZqX" ) ;
2019-09-19 17:19:18 +02:00
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external ["wp","dataControls"]
2021-05-20 14:20:04 +02:00
var external _wp _dataControls _ = _ _webpack _require _ _ ( "51Zz" ) ;
2018-12-14 12:02:53 +01:00
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external "lodash"
2021-05-20 14:20:04 +02:00
var external _lodash _ = _ _webpack _require _ _ ( "YLtl" ) ;
2019-10-15 17:37:08 +02:00
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external ["wp","isShallowEqual"]
2021-05-20 14:20:04 +02:00
var external _wp _isShallowEqual _ = _ _webpack _require _ _ ( "rl8x" ) ;
2021-01-28 03:04:13 +01:00
var external _wp _isShallowEqual _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( external _wp _isShallowEqual _ ) ;
2018-12-14 05:41:57 +01:00
2020-06-26 15:33:47 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/if-matching-action.js
/ * *
* 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 ) .
*
* @ param { Function } isMatch Function predicate for allowing reducer call .
*
* @ return { Function } Higher - order reducer .
* /
2021-05-19 17:09:27 +02:00
const ifMatchingAction = isMatch => reducer => ( state , action ) => {
if ( state === undefined || isMatch ( action ) ) {
return reducer ( state , action ) ;
}
2020-06-26 15:33:47 +02:00
2021-05-19 17:09:27 +02:00
return state ;
2020-06-26 15:33:47 +02:00
} ;
/* harmony default export */ var if _matching _action = ( ifMatchingAction ) ;
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/replace-action.js
/ * *
* Higher - order reducer creator which substitutes the action object before
* passing to the original reducer .
*
* @ param { Function } replacer Function mapping original action to replacement .
*
* @ return { Function } Higher - order reducer .
* /
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
} ;
/* harmony default export */ var replace _action = ( replaceAction ) ;
2019-10-15 17:37:08 +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
2018-12-14 05:41:57 +01:00
/ * *
2019-10-15 17:37:08 +02:00
* Given the current and next item entity , returns the minimally "modified"
* 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 = { } ;
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
for ( const key in nextItem ) {
2021-01-28 03:04:13 +01:00
if ( Object ( external _lodash _ [ "isEqual" ] ) ( 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 ;
2020-10-13 15:10:30 +02:00
} // Only at this point, backfill properties from the original item which
// 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
2019-10-15 17:37:08 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/on-sub-key.js
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
*
2019-10-15 17:37:08 +02:00
* @ return { Function } Higher - order reducer .
2018-12-14 05:41:57 +01:00
* /
2021-05-19 17:09:27 +02:00
const onSubKey = actionProperty => reducer => ( state = { } , action ) => {
// Retrieve subkey from action. Do not track if undefined; useful for cases
// where reducer is scoped by action shape.
const key = action [ actionProperty ] ;
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
if ( key === undefined ) {
return state ;
} // Avoid updating state if unchanged. Note that this also accounts for a
// reducer which returns undefined on a key which is not yet tracked.
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const nextKeyState = reducer ( state [ key ] , action ) ;
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
if ( nextKeyState === state [ key ] ) {
return state ;
}
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
return { ... state ,
[ key ] : nextKeyState
2019-10-15 17:37:08 +02:00
} ;
} ;
2021-05-19 17:09:27 +02:00
/* harmony default export */ var on _sub _key = ( onSubKey ) ;
2018-12-18 04:14:52 +01:00
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external ["wp","i18n"]
2021-05-20 14:20:04 +02:00
var external _wp _i18n _ = _ _webpack _require _ _ ( "l3Sj" ) ;
2018-12-18 04:14:52 +01:00
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: ./node_modules/uuid/dist/esm-browser/v4.js + 4 modules
2021-05-20 14:20:04 +02:00
var v4 = _ _webpack _require _ _ ( "7Cbv" ) ;
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external ["wp","url"]
2021-05-20 14:20:04 +02:00
var external _wp _url _ = _ _webpack _require _ _ ( "Mmq9" ) ;
2020-10-13 15:10:30 +02:00
2020-06-26 15:33:47 +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
* External dependencies
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' ,
2021-01-28 03:04:13 +01:00
items : Object ( external _lodash _ [ "castArray" ] ) ( items ) ,
persistedEdits : edits
2020-06-26 15:33:47 +02:00
} ;
2019-09-19 17:19:18 +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 .
*
* @ param { string } kind Kind of the removed entities .
* @ param { string } name Name of the removed entities .
* @ param { Array | number } records Record IDs of the removed entities .
* @ param { boolean } invalidateCache Controls whether we want to invalidate the cache .
* @ return { Object } Action object .
* /
2021-05-19 17:09:27 +02:00
function removeItems ( kind , name , records , invalidateCache = false ) {
2020-10-13 15:10:30 +02:00
return {
type : 'REMOVE_ITEMS' ,
2021-01-28 03:04:13 +01:00
itemIds : Object ( external _lodash _ [ "castArray" ] ) ( records ) ,
2021-05-19 17:09:27 +02:00
kind ,
name ,
invalidateCache
2020-10-13 15:10:30 +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
* /
2021-05-19 17:09:27 +02:00
function receiveQueriedItems ( items , query = { } , edits ) {
return { ... receiveItems ( items , edits ) ,
query
} ;
2020-06-26 15:33:47 +02:00
}
2018-12-14 05:41:57 +01:00
2021-01-28 03:04:13 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/actions.js
/ * *
* WordPress dependencies
* /
2021-05-19 17:09:27 +02:00
function * _ _unstableAcquireStoreLock ( store , path , {
exclusive
} ) {
const promise = yield * _ _unstableEnqueueLockRequest ( store , path , {
exclusive
} ) ;
yield * _ _unstableProcessPendingLockRequests ( ) ;
return yield Object ( external _wp _dataControls _ [ "__unstableAwaitPromise" ] ) ( promise ) ;
}
function * _ _unstableEnqueueLockRequest ( store , path , {
exclusive
} ) {
let notifyAcquired ;
const promise = new Promise ( resolve => {
notifyAcquired = resolve ;
} ) ;
yield {
type : 'ENQUEUE_LOCK_REQUEST' ,
request : {
store ,
path ,
exclusive ,
notifyAcquired
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
} ;
return promise ;
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
function * _ _unstableReleaseStoreLock ( lock ) {
yield {
type : 'RELEASE_LOCK' ,
lock
} ;
yield * _ _unstableProcessPendingLockRequests ( ) ;
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
function * _ _unstableProcessPendingLockRequests ( ) {
yield {
type : 'PROCESS_PENDING_LOCK_REQUESTS'
} ;
const lockRequests = yield external _wp _data _ [ "controls" ] . select ( 'core' , '__unstableGetPendingLockRequests' ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
for ( const request of lockRequests ) {
const {
store ,
path ,
exclusive ,
notifyAcquired
} = request ;
const isAvailable = yield external _wp _data _ [ "controls" ] . select ( 'core' , '__unstableIsLockAvailable' , store , path , {
exclusive
} ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( isAvailable ) {
const lock = {
store ,
path ,
exclusive
} ;
yield {
type : 'GRANT_LOCK_REQUEST' ,
lock ,
request
} ;
notifyAcquired ( lock ) ;
2021-01-28 03:04:13 +01:00
}
2021-02-02 06:17:13 +01:00
}
}
// EXTERNAL MODULE: external ["wp","apiFetch"]
2021-05-20 14:20:04 +02:00
var external _wp _apiFetch _ = _ _webpack _require _ _ ( "ywyh" ) ;
2021-02-02 06:17:13 +01:00
var external _wp _apiFetch _default = /*#__PURE__*/ _ _webpack _require _ _ . n ( external _wp _apiFetch _ ) ;
// 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
* /
2020-10-13 15:10:30 +02:00
/ * *
2021-02-02 06:17:13 +01:00
* Default batch processor . Sends its input requests to / v1 / batch .
*
* @ param { Array } requests List of API requests to perform at once .
*
* @ return { Promise } Promise that resolves to a list of objects containing
* either ` output ` ( if that request was succesful ) or ` error `
* ( if not ) .
* /
2021-05-19 17:09:27 +02:00
async function defaultProcessor ( requests ) {
const batchResponse = await external _wp _apiFetch _default ( ) ( {
2021-05-25 10:40:25 +02:00
path : '/batch/v1' ,
2021-05-19 17:09:27 +02:00
method : 'POST' ,
data : {
validation : 'require-all-validate' ,
requests : requests . map ( request => ( {
path : request . path ,
body : request . data ,
// Rename 'data' to 'body'.
method : request . method ,
headers : request . headers
} ) )
}
} ) ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
if ( batchResponse . failed ) {
return batchResponse . responses . map ( response => ( {
error : response === null || response === void 0 ? void 0 : response . body
} ) ) ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
return batchResponse . responses . map ( response => {
const result = { } ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
if ( response . status >= 200 && response . status < 300 ) {
result . output = response . body ;
} else {
result . error = response . body ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
return result ;
} ) ;
2021-02-02 06:17:13 +01:00
}
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/batch/create-batch.js
/ * *
* External dependencies
* /
/ * *
* Internal dependencies
* /
/ * *
* 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 ` .
* /
2021-05-19 17:09:27 +02:00
function createBatch ( processor = defaultProcessor ) {
let lastId = 0 ;
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 .
* @ 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 ) ;
} ) ;
2021-02-02 06:17:13 +01:00
if ( Object ( external _lodash _ [ "isFunction" ] ) ( inputOrThunk ) ) {
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() ` .
*
* @ return { Promise } A promise that resolves to a boolean that is true
* 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 ( ) ;
resolve ( ) ;
2021-02-02 06:17:13 +01:00
}
2021-05-19 17:09:27 +02:00
} ) ;
} ) ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
let results ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
try {
results = await processor ( queue . map ( ( {
input
} ) => input ) ) ;
2021-02-02 06:17:13 +01:00
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 ) ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
throw error ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
let isSuccess = true ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
for ( const [ result , {
resolve ,
reject
} ] of Object ( external _lodash _ [ "zip" ] ) ( results , queue ) ) {
if ( result !== null && result !== void 0 && result . error ) {
reject ( result . error ) ;
isSuccess = false ;
} else {
var _result$output ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
resolve ( ( _result$output = result === null || result === void 0 ? void 0 : result . output ) !== null && _result$output !== void 0 ? _result$output : result ) ;
}
}
2021-02-02 06:17:13 +01: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
} ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
class ObservableSet {
constructor ( ... args ) {
this . set = new Set ( ... args ) ;
this . subscribers = new Set ( ) ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
get size ( ) {
return this . set . size ;
}
add ( ... args ) {
this . set . add ( ... args ) ;
this . subscribers . forEach ( subscriber => subscriber ( ) ) ;
return this ;
}
delete ( ... args ) {
const isSuccess = this . set . delete ( ... args ) ;
this . subscribers . forEach ( subscriber => subscriber ( ) ) ;
return isSuccess ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
subscribe ( subscriber ) {
this . subscribers . add ( subscriber ) ;
return ( ) => {
this . subscribers . delete ( subscriber ) ;
} ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/controls.js
2021-02-02 06:17:13 +01:00
/ * *
* WordPress dependencies
* /
function regularFetch ( url ) {
return {
type : 'REGULAR_FETCH' ,
2021-05-19 17:09:27 +02:00
url
2021-02-02 06:17:13 +01:00
} ;
}
function getDispatch ( ) {
return {
type : 'GET_DISPATCH'
} ;
}
2021-05-19 17:09:27 +02:00
const controls = {
async REGULAR _FETCH ( {
url
} ) {
const {
data
} = await window . fetch ( url ) . then ( res => res . json ( ) ) ;
return data ;
2021-02-02 06:17:13 +01:00
} ,
2021-05-19 17:09:27 +02:00
GET _DISPATCH : Object ( external _wp _data _ [ "createRegistryControl" ] ) ( ( {
dispatch
} ) => ( ) => dispatch )
2021-02-02 06:17:13 +01:00
} ;
/* harmony default export */ var build _module _controls = ( controls ) ;
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/actions.js
/ * *
* External dependencies
* /
/ * *
* 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
* /
2019-10-15 17:37:08 +02:00
/ * *
* Returns an action object used in signalling that authors have been received .
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' ,
2021-01-28 03:04:13 +01:00
users : Object ( external _lodash _ [ "castArray" ] ) ( users ) ,
2021-05-19 17:09:27 +02:00
queryID
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 .
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
}
/ * *
2019-10-15 17:37:08 +02:00
* Returns an action object used in adding new entities .
*
* @ param { Array } entities Entities received .
*
* @ 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
} ;
}
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 .
*
* @ param { string } kind Kind of the received entity .
* @ param { string } name Name of the received entity .
* @ 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
* /
2021-05-19 17:09:27 +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' ) {
2021-05-19 17:09:27 +02:00
records = Object ( external _lodash _ [ "castArray" ] ) ( records ) . map ( record => record . status === 'auto-draft' ? { ... record ,
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
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
return { ... action ,
kind ,
name ,
invalidateCache
} ;
2019-10-15 17:37:08 +02:00
}
2020-06-26 15:33:47 +02:00
/ * *
* Returns an action object used in signalling that the current theme has been received .
*
* @ 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
} ;
}
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
*
2019-10-15 17:37:08 +02:00
* @ param { Object } themeSupports Theme support for the current theme .
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
* /
2018-12-14 05:41:57 +01:00
2019-10-15 17:37:08 +02:00
function receiveThemeSupports ( themeSupports ) {
return {
type : 'RECEIVE_THEME_SUPPORTS' ,
2021-05-19 17:09:27 +02:00
themeSupports
2019-10-15 17:37:08 +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 .
2018-12-14 05:41:57 +01:00
*
2020-01-08 12:57:23 +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
} ;
}
2020-10-13 15:10:30 +02:00
/ * *
* Action triggered to delete an entity record .
*
2021-02-02 06:17:13 +01: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 control descriptor .
2020-10-13 15:10:30 +02:00
* /
2021-05-19 17:09:27 +02:00
function * deleteEntityRecord ( kind , name , recordId , query , {
_ _unstableFetch = null
} = { } ) {
const entities = yield getKindEntities ( kind ) ;
const entity = Object ( external _lodash _ [ "find" ] ) ( entities , {
kind ,
name
} ) ;
let error ;
let deletedRecord = false ;
2020-10-13 15:10:30 +02:00
2021-05-19 17:09:27 +02:00
if ( ! entity ) {
return ;
}
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
const lock = yield * _ _unstableAcquireStoreLock ( 'core' , [ 'entities' , 'data' , kind , name , recordId ] , {
exclusive : true
} ) ;
2020-10-13 15:10:30 +02:00
2021-05-19 17:09:27 +02:00
try {
yield {
type : 'DELETE_ENTITY_RECORD_START' ,
kind ,
name ,
recordId
} ;
2020-10-13 15:10:30 +02:00
2021-05-19 17:09:27 +02:00
try {
let path = ` ${ entity . baseURL } / ${ recordId } ` ;
2020-10-13 15:10:30 +02:00
2021-05-19 17:09:27 +02:00
if ( query ) {
path = Object ( external _wp _url _ [ "addQueryArgs" ] ) ( path , query ) ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
const options = {
path ,
method : 'DELETE'
} ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( _ _unstableFetch ) {
deletedRecord = yield Object ( external _wp _dataControls _ [ "__unstableAwaitPromise" ] ) ( _ _unstableFetch ( options ) ) ;
} else {
deletedRecord = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( options ) ;
2020-10-13 15:10:30 +02:00
}
2021-05-19 17:09:27 +02:00
yield removeItems ( kind , name , recordId , true ) ;
} catch ( _error ) {
error = _error ;
2020-10-13 15:10:30 +02:00
}
2021-05-19 17:09:27 +02:00
yield {
type : 'DELETE_ENTITY_RECORD_FINISH' ,
kind ,
name ,
recordId ,
error
} ;
return deletedRecord ;
} finally {
yield * _ _unstableReleaseStoreLock ( lock ) ;
}
2020-10-13 15:10:30 +02:00
}
2019-10-15 17:37:08 +02:00
/ * *
* Returns an action object that triggers an
* edit to an entity record .
*
* @ param { string } kind Kind of the edited entity record .
* @ param { string } name Name of the edited entity record .
* @ param { number } 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 .
*
* @ return { Object } Action object .
* /
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
function * actions _editEntityRecord ( kind , name , recordId , edits , options = { } ) {
const entity = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getEntity' , kind , name ) ;
2019-12-09 18:37:10 +01:00
2021-05-19 17:09:27 +02:00
if ( ! entity ) {
throw new Error ( ` The entity being edited ( ${ kind } , ${ name } ) does not have a loaded config. ` ) ;
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const {
transientEdits = { } ,
mergedEdits = { }
} = entity ;
const record = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getRawEntityRecord' , kind , name , recordId ) ;
const editedRecord = yield external _wp _data _ [ "controls" ] . select ( 'core' , '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 ] ;
const value = mergedEdits [ key ] ? { ... editedRecordValue ,
... edits [ key ]
} : edits [ key ] ;
acc [ key ] = Object ( external _lodash _ [ "isEqual" ] ) ( recordValue , value ) ? undefined : value ;
return acc ;
} , { } ) ,
transientEdits
} ;
return {
type : 'EDIT_ENTITY_RECORD' ,
... edit ,
meta : {
undo : ! options . undoIgnore && { ... edit ,
// Send the current values for things like the first undo stack entry.
edits : Object . keys ( edits ) . reduce ( ( acc , key ) => {
acc [ key ] = editedRecord [ key ] ;
return acc ;
} , { } )
2019-10-15 17:37:08 +02:00
}
}
2021-05-19 17:09:27 +02:00
} ;
2018-12-18 04:14:52 +01: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
* /
2021-05-19 17:09:27 +02:00
function * undo ( ) {
const undoEdit = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getUndoEdit' ) ;
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
if ( ! undoEdit ) {
return ;
}
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
yield {
type : 'EDIT_ENTITY_RECORD' ,
... undoEdit ,
meta : {
isUndo : true
2019-10-15 17:37:08 +02:00
}
2021-05-19 17:09:27 +02:00
} ;
2019-10-15 17:37:08 +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
* /
2021-05-19 17:09:27 +02:00
function * redo ( ) {
const redoEdit = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getRedoEdit' ) ;
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
if ( ! redoEdit ) {
return ;
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
yield {
type : 'EDIT_ENTITY_RECORD' ,
... redoEdit ,
meta : {
isRedo : true
2019-10-15 17:37:08 +02:00
}
2021-05-19 17:09:27 +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
* /
2021-01-28 03:04:13 +01:00
function actions _unstableCreateUndoLevel ( ) {
2019-10-15 17:37:08 +02:00
return {
type : 'CREATE_UNDO_LEVEL'
} ;
}
/ * *
* Action triggered to save an entity record .
*
2021-02-02 06:17:13 +01: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 control
* descriptor .
2019-10-15 17:37:08 +02:00
* /
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
function * saveEntityRecord ( kind , name , record , {
isAutosave = false ,
_ _unstableFetch = null
} = { } ) {
const entities = yield getKindEntities ( kind ) ;
const entity = Object ( external _lodash _ [ "find" ] ) ( entities , {
kind ,
name
} ) ;
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
if ( ! entity ) {
return ;
}
2020-02-06 22:03:31 +01:00
2021-05-19 17:09:27 +02:00
const entityIdKey = entity . key || DEFAULT _ENTITY _KEY ;
const recordId = record [ entityIdKey ] ;
const lock = yield * _ _unstableAcquireStoreLock ( 'core' , [ 'entities' , 'data' , kind , name , recordId || Object ( v4 [ "a" /* default */ ] ) ( ) ] , {
exclusive : true
} ) ;
2020-02-06 22:03:31 +01:00
2021-05-19 17:09:27 +02:00
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 ( yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getEditedEntityRecord' , kind , name , recordId ) ) ;
yield actions _editEntityRecord ( kind , name , recordId , {
[ key ] : evaluatedValue
} , {
undoIgnore : true
} ) ;
record [ key ] = evaluatedValue ;
}
}
2020-02-06 22:03:31 +01:00
2021-05-19 17:09:27 +02:00
yield {
type : 'SAVE_ENTITY_RECORD_START' ,
kind ,
name ,
recordId ,
isAutosave
} ;
let updatedRecord ;
let error ;
2020-02-06 22:03:31 +01:00
2021-05-19 17:09:27 +02:00
try {
const path = ` ${ entity . baseURL } ${ recordId ? '/' + recordId : '' } ` ;
const persistedRecord = yield external _wp _data _ [ "controls" ] . select ( 'core' , '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 = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getCurrentUser' ) ;
const currentUserId = currentUser ? currentUser . id : undefined ;
const autosavePost = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getAutosave' , persistedRecord . type , persistedRecord . id , currentUserId ) ; // Autosaves need all expected fields to be present.
// So we fallback to the previous autosave and then
// to the actual persisted entity if the edits don't
// have a value.
let data = { ... persistedRecord ,
... autosavePost ,
... record
} ;
data = Object . keys ( data ) . reduce ( ( acc , key ) => {
if ( [ 'title' , 'excerpt' , 'content' ] . includes ( key ) ) {
// Edits should be the "raw" attribute values.
acc [ key ] = Object ( external _lodash _ [ "get" ] ) ( data [ key ] , 'raw' , data [ key ] ) ;
2020-02-06 22:03:31 +01:00
}
2021-05-19 17:09:27 +02:00
return acc ;
} , {
status : data . status === 'auto-draft' ? 'draft' : data . status
} ) ;
const options = {
path : ` ${ path } /autosaves ` ,
method : 'POST' ,
data
} ;
if ( _ _unstableFetch ) {
updatedRecord = yield Object ( external _wp _dataControls _ [ "__unstableAwaitPromise" ] ) ( _ _unstableFetch ( options ) ) ;
} else {
updatedRecord = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( options ) ;
} // An autosave may be processed by the server as a regular save
// when its update is requested by the author and the post had
// draft or auto-draft status.
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
if ( persistedRecord . id === updatedRecord . id ) {
let newRecord = { ... persistedRecord ,
... data ,
... updatedRecord
2021-02-02 06:17:13 +01:00
} ;
2021-05-19 17:09:27 +02:00
newRecord = Object . keys ( newRecord ) . reduce ( ( acc , key ) => {
2019-09-19 17:19:18 +02:00
// These properties are persisted in autosaves.
if ( [ 'title' , 'excerpt' , 'content' ] . includes ( key ) ) {
// Edits should be the "raw" attribute values.
2021-01-28 03:04:13 +01:00
acc [ key ] = Object ( external _lodash _ [ "get" ] ) ( newRecord [ key ] , 'raw' , newRecord [ key ] ) ;
2019-09-19 17:19:18 +02:00
} 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.
2021-01-28 03:04:13 +01:00
acc [ key ] = Object ( external _lodash _ [ "get" ] ) ( persistedRecord [ key ] , 'raw' , persistedRecord [ key ] ) ;
2019-09-19 17:19:18 +02:00
}
return acc ;
} , { } ) ;
2021-05-19 17:09:27 +02:00
yield receiveEntityRecords ( kind , name , newRecord , undefined , true ) ;
} else {
yield receiveAutosaves ( persistedRecord . id , updatedRecord ) ;
}
} else {
let edits = record ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
if ( entity . _ _unstablePrePersist ) {
edits = { ... edits ,
... entity . _ _unstablePrePersist ( persistedRecord , edits )
2019-09-19 17:19:18 +02:00
} ;
2021-05-19 17:09:27 +02:00
}
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
const options = {
path ,
method : recordId ? 'PUT' : 'POST' ,
data : edits
} ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( _ _unstableFetch ) {
updatedRecord = yield Object ( external _wp _dataControls _ [ "__unstableAwaitPromise" ] ) ( _ _unstableFetch ( options ) ) ;
} else {
updatedRecord = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( options ) ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
yield receiveEntityRecords ( kind , name , updatedRecord , undefined , true , edits ) ;
2019-09-19 17:19:18 +02:00
}
2021-05-19 17:09:27 +02:00
} catch ( _error ) {
error = _error ;
2019-09-19 17:19:18 +02:00
}
2021-05-19 17:09:27 +02:00
yield {
type : 'SAVE_ENTITY_RECORD_FINISH' ,
kind ,
name ,
recordId ,
error ,
isAutosave
} ;
return updatedRecord ;
} finally {
yield * _ _unstableReleaseStoreLock ( lock ) ;
}
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 ` .
*
* @ return { Promise } A promise that resolves to an array containing the return
* values of each function given in ` requests ` .
* /
2021-05-19 17:09:27 +02:00
function * _ _experimentalBatch ( requests ) {
const batch = createBatch ( ) ;
const dispatch = yield getDispatch ( ) ;
const api = {
saveEntityRecord ( kind , name , record , options ) {
return batch . add ( add => dispatch ( 'core' ) . saveEntityRecord ( kind , name , record , { ... options ,
_ _unstableFetch : add
} ) ) ;
} ,
saveEditedEntityRecord ( kind , name , recordId , options ) {
return batch . add ( add => dispatch ( 'core' ) . saveEditedEntityRecord ( kind , name , recordId , { ... options ,
_ _unstableFetch : add
} ) ) ;
} ,
deleteEntityRecord ( kind , name , recordId , query , options ) {
return batch . add ( add => dispatch ( 'core' ) . deleteEntityRecord ( kind , name , recordId , query , { ... options ,
_ _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 ) ) ;
const [ , ... results ] = yield Object ( external _wp _dataControls _ [ "__unstableAwaitPromise" ] ) ( Promise . all ( [ batch . run ( ) , ... resultPromises ] ) ) ;
return results ;
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 .
* /
2021-05-19 17:09:27 +02:00
function * saveEditedEntityRecord ( kind , name , recordId , options ) {
if ( ! ( yield external _wp _data _ [ "controls" ] . select ( 'core' , 'hasEditsForEntityRecord' , kind , name , recordId ) ) ) {
return ;
}
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
const edits = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getEntityRecordNonTransientEdits' , kind , name , recordId ) ;
const record = {
id : recordId ,
... edits
} ;
return yield * saveEntityRecord ( kind , name , record , options ) ;
}
/ * *
* Action triggered to save only specified properties for the entity .
*
* @ param { string } kind Kind of the entity .
* @ param { string } name Name of the entity .
* @ param { Object } recordId ID of the record .
* @ param { Array } itemsToSave List of entity properties to save .
* @ param { Object } options Saving options .
* /
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
function * _ _experimentalSaveSpecifiedEntityEdits ( kind , name , recordId , itemsToSave , options ) {
if ( ! ( yield external _wp _data _ [ "controls" ] . select ( 'core' , 'hasEditsForEntityRecord' , kind , name , recordId ) ) ) {
return ;
}
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
const edits = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getEntityRecordNonTransientEdits' , kind , name , recordId ) ;
const editsToSave = { } ;
2021-02-02 06:17:13 +01:00
2021-05-19 17:09:27 +02:00
for ( const edit in edits ) {
if ( itemsToSave . some ( item => item === edit ) ) {
editsToSave [ edit ] = edits [ edit ] ;
2019-09-19 17:19:18 +02:00
}
2021-05-19 17:09:27 +02:00
}
return yield * saveEntityRecord ( kind , name , editsToSave , options ) ;
2019-09-19 17:19:18 +02:00
}
/ * *
* Returns an action object used in signalling that Upload permissions have been received .
*
* @ param { boolean } hasUploadPermissions Does the user have permission to upload files ?
*
* @ return { Object } Action object .
* /
function receiveUploadPermissions ( hasUploadPermissions ) {
return {
type : 'RECEIVE_USER_PERMISSION' ,
key : 'create/media' ,
isAllowed : hasUploadPermissions
} ;
}
/ * *
* Returns an action object used in signalling that the current user has
* permission to perform an action on a REST resource .
*
* @ 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
} ;
}
/ * *
* Returns an action object used in signalling that the autosaves for a
* post have been received .
*
* @ 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 ,
2021-01-28 03:04:13 +01:00
autosaves : Object ( external _lodash _ [ "castArray" ] ) ( autosaves )
2019-09-19 17:19:18 +02:00
} ;
}
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/entities.js
/ * *
* External dependencies
* /
2020-06-26 15:33:47 +02:00
/ * *
* WordPress dependencies
* /
2020-10-13 15:10:30 +02:00
2021-01-28 03:04:13 +01:00
2019-09-19 17:19:18 +02:00
/ * *
* Internal dependencies
* /
2021-05-19 17:09:27 +02:00
const DEFAULT _ENTITY _KEY = 'id' ;
const defaultEntities = [ {
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Base' ) ,
2020-10-13 15:10:30 +02:00
name : '__unstableBase' ,
kind : 'root' ,
baseURL : ''
} , {
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( '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 => {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( record , [ 'title' ] , Object ( external _wp _i18n _ [ "__" ] ) ( 'Site Title' ) ) ;
2020-06-26 15:33:47 +02:00
}
2020-01-08 12:57:23 +01:00
} , {
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( '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'
}
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' ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Media' )
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' ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( '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' ,
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
} ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( '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
} ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( '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' ,
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Widget types' )
2020-02-06 22:03:31 +01:00
} , {
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( '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' ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Comment' )
2020-06-26 15:33:47 +02:00
} , {
name : 'menu' ,
kind : 'root' ,
baseURL : '/__experimental/menus' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'menus' ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Menu' )
2020-06-26 15:33:47 +02:00
} , {
name : 'menuItem' ,
kind : 'root' ,
baseURL : '/__experimental/menu-items' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'menuItems' ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Menu Item' )
2020-06-26 15:33:47 +02:00
} , {
name : 'menuLocation' ,
kind : 'root' ,
baseURL : '/__experimental/menu-locations' ,
2021-05-19 17:09:27 +02:00
baseURLParams : {
context : 'edit'
} ,
2020-06-26 15:33:47 +02:00
plural : 'menuLocations' ,
2021-01-28 03:04:13 +01:00
label : Object ( external _wp _i18n _ [ "__" ] ) ( 'Menu Location' ) ,
2020-06-26 15:33:47 +02:00
key : 'name'
2018-12-18 04:14:52 +01:00
} ] ;
2021-05-19 17:09:27 +02:00
const kinds = [ {
2018-12-18 04:14:52 +01:00
name : 'postType' ,
loadEntities : loadPostTypeEntities
} , {
name : 'taxonomy' ,
loadEntities : loadTaxonomyEntities
} ] ;
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
* @ param { Object } edits Edits .
* @ 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 = { } ;
2021-01-28 03:04:13 +01:00
if ( ( persistedRecord === null || persistedRecord === void 0 ? void 0 : persistedRecord . status ) === 'auto-draft' ) {
// Saving an auto-draft should create a draft by default.
if ( ! edits . status && ! newEdits . status ) {
newEdits . status = 'draft' ;
} // Fix the auto-draft default title.
if ( ( ! edits . title || edits . title === 'Auto Draft' ) && ! newEdits . title && ( ! ( persistedRecord !== null && persistedRecord !== void 0 && persistedRecord . title ) || ( persistedRecord === null || persistedRecord === void 0 ? void 0 : persistedRecord . title ) === 'Auto Draft' ) ) {
newEdits . title = '' ;
}
}
return newEdits ;
} ;
/ * *
* Returns the list of post type entities .
*
* @ return { Promise } Entities promise
* /
2021-05-19 17:09:27 +02:00
function * loadPostTypeEntities ( ) {
const postTypes = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : '/wp/v2/types?context=edit'
} ) ;
return Object ( external _lodash _ [ "map" ] ) ( postTypes , ( postType , name ) => {
const isTemplate = [ 'wp_template' , 'wp_template_part' ] . includes ( name ) ;
return {
kind : 'postType' ,
baseURL : '/wp/v2/' + postType . rest _base ,
baseURLParams : {
context : 'edit'
} ,
name ,
label : postType . labels . singular _name ,
transientEdits : {
blocks : true ,
selection : true
} ,
mergedEdits : {
meta : true
} ,
getTitle : record => {
var _record$title ;
return ( record === null || record === void 0 ? void 0 : ( _record$title = record . title ) === null || _record$title === void 0 ? void 0 : _record$title . rendered ) || ( record === null || record === void 0 ? void 0 : record . title ) || ( isTemplate ? Object ( external _lodash _ [ "startCase" ] ) ( record . slug ) : String ( record . id ) ) ;
} ,
2021-06-15 17:30:24 +02:00
_ _unstablePrePersist : isTemplate ? undefined : prePersistPostType ,
_ _unstable _rest _base : postType . rest _base
2021-05-19 17:09:27 +02:00
} ;
} ) ;
2018-12-18 04:14:52 +01: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-05-19 17:09:27 +02:00
function * loadTaxonomyEntities ( ) {
const taxonomies = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : '/wp/v2/taxonomies?context=edit'
} ) ;
return Object ( external _lodash _ [ "map" ] ) ( taxonomies , ( taxonomy , name ) => {
return {
kind : 'taxonomy' ,
baseURL : '/wp/v2/' + taxonomy . rest _base ,
baseURLParams : {
context : 'edit'
} ,
name ,
label : taxonomy . labels . singular _name
} ;
} ) ;
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
*
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
* /
2021-05-19 17:09:27 +02:00
const getMethodName = ( kind , name , prefix = 'get' , usePlural = false ) => {
const entity = Object ( external _lodash _ [ "find" ] ) ( defaultEntities , {
kind ,
name
2018-12-18 04:14:52 +01:00
} ) ;
2021-05-19 17:09:27 +02:00
const kindPrefix = kind === 'root' ? '' : Object ( external _lodash _ [ "upperFirst" ] ) ( Object ( external _lodash _ [ "camelCase" ] ) ( kind ) ) ;
const nameSuffix = Object ( external _lodash _ [ "upperFirst" ] ) ( Object ( external _lodash _ [ "camelCase" ] ) ( name ) ) + ( usePlural ? 's' : '' ) ;
const suffix = usePlural && entity . plural ? Object ( external _lodash _ [ "upperFirst" ] ) ( Object ( external _lodash _ [ "camelCase" ] ) ( entity . plural ) ) : nameSuffix ;
return ` ${ prefix } ${ kindPrefix } ${ suffix } ` ;
2018-12-18 04:14:52 +01:00
} ;
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
*
2018-12-18 04:14:52 +01:00
* @ param { string } kind Kind
2018-12-14 05:41:57 +01:00
*
2018-12-18 04:14:52 +01:00
* @ return { Array } Entities
2018-12-14 05:41:57 +01:00
* /
2021-05-19 17:09:27 +02:00
function * getKindEntities ( kind ) {
let entities = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getEntitiesByKind' , kind ) ;
2018-12-18 04:14:52 +01:00
2021-05-19 17:09:27 +02:00
if ( entities && entities . length !== 0 ) {
return entities ;
}
2018-12-18 04:14:52 +01:00
2021-05-19 17:09:27 +02:00
const kindConfig = Object ( external _lodash _ [ "find" ] ) ( kinds , {
name : kind
} ) ;
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
if ( ! kindConfig ) {
return [ ] ;
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
entities = yield kindConfig . loadEntities ( ) ;
yield addEntities ( entities ) ;
return entities ;
2020-06-26 15:33:47 +02:00
}
2020-10-13 15:10:30 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/get-normalized-comma-separable.js
/ * *
* 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 ;
}
/* harmony default export */ var get _normalized _comma _separable = ( getNormalizedCommaSeparable ) ;
2020-06-26 15:33:47 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/with-weak-map-cache.js
/ * *
* External dependencies
* /
/ * *
* 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 {
value = fn ( key ) ; // Can reach here if key is not valid for WeakMap, since `has`
// will return false for invalid key. Since `set` will throw,
// ensure that key is valid before setting into cache.
2021-01-28 03:04:13 +01:00
if ( Object ( external _lodash _ [ "isObjectLike" ] ) ( key ) ) {
2020-06-26 15:33:47 +02:00
cache . set ( key , value ) ;
}
}
return value ;
} ;
}
/* harmony default export */ var with _weak _map _cache = ( withWeakMapCache ) ;
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/get-query-parts.js
/ * *
* WordPress dependencies
* /
/ * *
* 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 .
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'
2020-06-26 15:33:47 +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 ( ) ;
2020-06-26 15:33:47 +02:00
2021-05-19 17:09:27 +02:00
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 ;
2020-10-13 15:10:30 +02:00
case 'include' :
parts . include = get _normalized _comma _separable ( value ) . map ( Number ) ;
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
// fields from the response even if we explicitely asked for it.
// Example: Asking for titles in posts without title support.
if ( key === '_fields' ) {
2021-01-28 03:04:13 +01:00
parts . fields = get _normalized _comma _separable ( value ) ; // Make sure to normalize value for `stableKey`
value = parts . fields . join ( ) ;
2020-10-20 15:36:16 +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.
2020-10-20 15:36:16 +02:00
2021-05-19 17:09:27 +02:00
parts . stableKey += ( parts . stableKey ? '&' : '' ) + Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '' , {
[ 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
}
2020-06-26 15:33:47 +02:00
/* harmony default export */ var get _query _parts = ( with _weak _map _cache ( getQueryParts ) ) ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/reducer.js
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +01:00
* External dependencies
2018-12-14 05:41:57 +01:00
* /
2019-09-19 17:19:18 +02:00
/ * *
* WordPress dependencies
* /
2018-12-18 04:14:52 +01: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 ;
}
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
* /
2021-06-25 17:52:22 +02:00
2018-12-18 04:14:52 +01:00
function getMergedItemIds ( itemIds , nextItemIds , page , perPage ) {
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 ;
}
2021-05-19 17:09:27 +02:00
const nextItemIdsStartIndex = ( page - 1 ) * perPage ; // 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.
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const size = Math . max ( itemIds . length , nextItemIdsStartIndex + nextItemIds . length ) ; // Preallocate array since size is known.
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const mergedItemIds = new Array ( size ) ;
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
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 ;
2018-12-18 04:14:52 +01: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 ;
}
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
* /
2021-05-19 17:09:27 +02:00
function reducer _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 ;
return { ... state ,
[ context ] : { ... state [ context ] ,
... action . items . reduce ( ( accumulator , value ) => {
var _state$context ;
const itemId = value [ key ] ;
accumulator [ itemId ] = conservativeMapItem ( state === null || state === void 0 ? void 0 : ( _state$context = state [ context ] ) === null || _state$context === void 0 ? void 0 : _state$context [ itemId ] , value ) ;
return accumulator ;
} , { } )
}
} ;
}
2020-10-13 15:10:30 +02:00
case 'REMOVE_ITEMS' :
2021-06-25 17:52:22 +02:00
return Object ( external _lodash _ [ "mapValues" ] ) ( state , contextState => Object ( external _lodash _ [ "omit" ] ) ( contextState , action . itemIds ) ) ;
2018-12-14 05:41:57 +01:00
}
return state ;
}
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 .
*
* @ param { Object < string , boolean > } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object < string , boolean > } Next state .
* /
2021-05-19 17:09:27 +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
} = action ; // An item is considered complete if it is received without an associated
// fields query. Ideally, this would be implemented in such a way where the
// complete aggregate of all fields would satisfy completeness. Since the
// fields are not consistent across all entity types, this would require
// 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 ) ;
return { ... state ,
[ context ] : { ... state [ context ] ,
... action . items . reduce ( ( result , item ) => {
var _state$context2 ;
2020-10-13 15:10:30 +02:00
2021-06-25 17:52:22 +02:00
const itemId = item [ key ] ; // Defer to completeness if already assigned. Technically the
// data may be outdated if receiving items for a field subset.
2020-10-13 15:10:30 +02:00
2021-06-25 17:52:22 +02:00
result [ itemId ] = ( state === null || state === void 0 ? void 0 : ( _state$context2 = state [ context ] ) === null || _state$context2 === void 0 ? void 0 : _state$context2 [ itemId ] ) || isCompleteQuery ;
return result ;
} , { } )
}
} ;
}
2020-10-13 15:10:30 +02:00
2021-06-25 17:52:22 +02:00
case 'REMOVE_ITEMS' :
return Object ( external _lodash _ [ "mapValues" ] ) ( state , contextState => Object ( external _lodash _ [ "omit" ] ) ( contextState , action . itemIds ) ) ;
}
2020-10-13 15:10:30 +02:00
2021-06-25 17:52:22 +02:00
return state ;
2020-10-13 15:10:30 +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
* /
2021-05-19 17:09:27 +02:00
const receiveQueries = Object ( external _lodash _ [ "flowRight" ] ) ( [ // 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.
2021-05-19 17:09:27 +02:00
if _matching _action ( action => 'query' in action ) , // Inject query parts into action for use both in `onSubKey` and reducer.
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 ) {
2021-05-19 17:09:27 +02:00
return { ... action ,
... get _query _parts ( action . query )
} ;
2018-12-18 04:14:52 +01:00
}
return action ;
2021-06-25 17:52:22 +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.
2021-05-19 17:09:27 +02:00
on _sub _key ( 'stableKey' ) ] ) ( ( state = null , action ) => {
const {
type ,
page ,
perPage ,
key = DEFAULT _ENTITY _KEY
} = 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
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
}
2021-01-28 03:04:13 +01:00
return getMergedItemIds ( state || [ ] , Object ( external _lodash _ [ "map" ] ) ( action . items , key ) , page , perPage ) ;
2018-12-18 04:14:52 +01: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 .
* /
2021-05-19 17:09:27 +02:00
const reducer _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 ;
} , { } ) ;
2021-06-25 17:52:22 +02:00
return Object ( external _lodash _ [ "mapValues" ] ) ( state , contextQueries => {
return Object ( external _lodash _ [ "mapValues" ] ) ( contextQueries , queryItems => {
return Object ( external _lodash _ [ "filter" ] ) ( queryItems , queryId => {
return ! removedItems [ queryId ] ;
} ) ;
2020-10-13 15:10:30 +02:00
} ) ;
} ) ;
default :
return state ;
}
} ;
2021-05-19 17:09:27 +02:00
/* harmony default export */ var reducer = ( Object ( external _wp _data _ [ "combineReducers" ] ) ( {
2018-12-18 04:14:52 +01:00
items : reducer _items ,
2021-05-19 17:09:27 +02:00
itemIsComplete ,
2020-10-13 15:10:30 +02:00
queries : reducer _queries
2018-12-14 05:41:57 +01:00
} ) ) ;
2021-01-28 03:04:13 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/utils.js
function deepCopyLocksTreePath ( tree , path ) {
2021-05-19 17:09:27 +02:00
const newTree = { ... tree
} ;
let currentNode = newTree ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
for ( const branchName of path ) {
currentNode . children = { ... currentNode . children ,
[ branchName ] : {
locks : [ ] ,
children : { } ,
... currentNode . children [ branchName ]
}
} ;
currentNode = currentNode . children [ branchName ] ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
return newTree ;
}
function getNode ( tree , path ) {
let currentNode = tree ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
for ( const branchName of path ) {
const nextNode = currentNode . children [ branchName ] ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( ! nextNode ) {
return null ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
currentNode = nextNode ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
return currentNode ;
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
function * iteratePath ( tree , path ) {
let currentNode = tree ;
yield currentNode ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
for ( const branchName of path ) {
const nextNode = currentNode . children [ branchName ] ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( ! nextNode ) {
break ;
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
yield nextNode ;
currentNode = nextNode ;
}
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
function * iterateDescendants ( node ) {
const stack = Object . values ( node . children ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
while ( stack . length ) {
const childNode = stack . pop ( ) ;
yield childNode ;
stack . push ( ... Object . values ( childNode . children ) ) ;
}
}
function hasConflictingLock ( {
exclusive
} , locks ) {
2021-01-28 03:04:13 +01:00
if ( exclusive && locks . length ) {
return true ;
}
2021-05-19 17:09:27 +02:00
if ( ! exclusive && locks . filter ( lock => lock . exclusive ) . length ) {
2021-01-28 03:04:13 +01:00
return true ;
}
return false ;
}
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/reducer.js
/ * *
* Internal dependencies
* /
2021-05-19 17:09:27 +02:00
const DEFAULT _STATE = {
2021-01-28 03:04:13 +01:00
requests : [ ] ,
tree : {
locks : [ ] ,
children : { }
}
} ;
/ * *
* Reducer returning locks .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2021-05-19 17:09:27 +02:00
function reducer _locks ( state = DEFAULT _STATE , action ) {
2021-01-28 03:04:13 +01:00
switch ( action . type ) {
case 'ENQUEUE_LOCK_REQUEST' :
{
2021-05-19 17:09:27 +02:00
const {
request
} = action ;
return { ... state ,
requests : [ request , ... state . requests ]
} ;
2021-01-28 03:04:13 +01:00
}
case 'GRANT_LOCK_REQUEST' :
{
2021-05-19 17:09:27 +02:00
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 ] ;
return { ... state ,
requests : state . requests . filter ( r => r !== request ) ,
2021-01-28 03:04:13 +01:00
tree : newTree
2021-05-19 17:09:27 +02:00
} ;
2021-01-28 03:04:13 +01:00
}
case 'RELEASE_LOCK' :
{
2021-05-19 17:09:27 +02:00
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 ) ;
return { ... state ,
tree : newTree
} ;
2021-01-28 03:04:13 +01:00
}
}
return state ;
}
/* harmony default export */ var locks _reducer = ( reducer _locks ) ;
2020-06-26 15:33:47 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/reducer.js
2018-12-14 05:41:57 +01:00
/ * *
* External dependencies
* /
/ * *
* WordPress dependencies
* /
2019-09-19 17:19:18 +02:00
2018-12-14 05:41:57 +01:00
/ * *
* Internal dependencies
* /
2021-01-28 03:04:13 +01:00
2018-12-14 05:41:57 +01:00
/ * *
2018-12-18 04:14:52 +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 .
2018-12-14 05:41:57 +01:00
* /
2021-05-19 17:09:27 +02:00
function terms ( state = { } , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_TERMS' :
2021-05-19 17:09:27 +02:00
return { ... state ,
[ action . taxonomy ] : action . terms
} ;
2018-12-18 04:14:52 +01:00
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return state ;
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
* /
2021-05-19 17:09:27 +02:00
function reducer _users ( state = {
byId : { } ,
queries : { }
} , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_USER_QUERY' :
return {
2021-05-19 17:09:27 +02:00
byId : { ... state . byId ,
... Object ( external _lodash _ [ "keyBy" ] ) ( action . users , 'id' )
} ,
queries : { ... state . queries ,
[ action . queryID ] : Object ( external _lodash _ [ "map" ] ) ( action . users , user => user . id )
}
2018-12-18 04:14:52 +01:00
} ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return state ;
2018-12-14 05:41:57 +01: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 .
* /
2021-05-19 17:09:27 +02:00
function reducer _currentUser ( state = { } , action ) {
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'RECEIVE_CURRENT_USER' :
return action . currentUser ;
}
return state ;
}
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
* /
2021-05-19 17:09:27 +02:00
function reducer _taxonomies ( state = [ ] , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_TAXONOMIES' :
return action . taxonomies ;
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return state ;
}
2020-06-26 15:33:47 +02:00
/ * *
* Reducer managing the current theme .
*
* @ param { string } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { string } Updated state .
* /
2021-05-19 17:09:27 +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 ;
}
/ * *
* Reducer managing installed themes .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2021-05-19 17:09:27 +02:00
function themes ( state = { } , action ) {
2020-06-26 15:33:47 +02:00
switch ( action . type ) {
case 'RECEIVE_CURRENT_THEME' :
2021-05-19 17:09:27 +02:00
return { ... state ,
[ action . currentTheme . stylesheet ] : action . currentTheme
} ;
2020-06-26 15:33:47 +02:00
}
return state ;
}
2018-12-18 04:14:52 +01:00
/ * *
* Reducer managing theme supports data .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
function themeSupports ( state = { } , action ) {
2018-12-18 04:14:52 +01:00
switch ( action . type ) {
case 'RECEIVE_THEME_SUPPORTS' :
2021-05-19 17:09:27 +02:00
return { ... state ,
... action . themeSupports
} ;
2018-12-18 04:14:52 +01:00
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return state ;
2018-12-14 05:41:57 +01: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
*
* @ param { Object } entityConfig Entity config .
*
* @ return { Function } Reducer .
* /
2018-12-14 12:02:53 +01:00
2018-12-18 04:14:52 +01:00
function reducer _entity ( entityConfig ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "flowRight" ] ) ( [ // 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.
2021-05-19 17:09:27 +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.
replace _action ( action => {
return { ... action ,
2018-12-18 04:14:52 +01:00
key : entityConfig . key || DEFAULT _ENTITY _KEY
2021-05-19 17:09:27 +02:00
} ;
2021-01-28 03:04:13 +01:00
} ) ] ) ( Object ( external _wp _data _ [ "combineReducers" ] ) ( {
2021-05-19 17:09:27 +02:00
queriedData : reducer ,
edits : ( state = { } , action ) => {
2021-06-25 17:52:22 +02:00
var _action$query$context , _action$query ;
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'RECEIVE_ITEMS' :
2021-06-25 17:52:22 +02:00
const context = ( _action$query$context = action === null || action === void 0 ? void 0 : ( _action$query = action . query ) === null || _action$query === void 0 ? void 0 : _action$query . context ) !== null && _action$query$context !== void 0 ? _action$query$context : 'default' ;
if ( context !== 'default' ) {
return state ;
}
2021-05-19 17:09:27 +02:00
const nextState = { ... state
} ;
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
for ( const record of action . items ) {
const recordId = record [ action . key ] ;
const edits = nextState [ recordId ] ;
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
if ( ! edits ) {
continue ;
}
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
const nextEdits = Object . keys ( edits ) . reduce ( ( acc , key ) => {
// If the edited value is still different to the persisted value,
// keep the edited value in edits.
if ( // Edits are the "raw" attribute values, but records may have
// objects with more properties, so we use `get` here for the
// comparison.
! Object ( external _lodash _ [ "isEqual" ] ) ( edits [ key ] , Object ( external _lodash _ [ "get" ] ) ( record [ key ] , 'raw' , record [ key ] ) ) && ( // Sometimes the server alters the sent value which means
// we need to also remove the edits before the api request.
! action . persistedEdits || ! Object ( external _lodash _ [ "isEqual" ] ) ( edits [ key ] , action . persistedEdits [ key ] ) ) ) {
acc [ key ] = edits [ key ] ;
2019-09-19 17:19:18 +02:00
}
2021-05-19 17:09:27 +02:00
return acc ;
} , { } ) ;
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
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' :
2021-05-19 17:09:27 +02:00
const nextEdits = { ... state [ action . recordId ] ,
... 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 ] ;
}
} ) ;
2021-05-19 17:09:27 +02:00
return { ... state ,
[ action . recordId ] : nextEdits
} ;
2019-09-19 17:19:18 +02:00
}
return state ;
} ,
2021-05-19 17:09:27 +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' :
2021-05-19 17:09:27 +02:00
return { ... state ,
[ 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 ;
} ,
2021-05-19 17:09:27 +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' :
2021-05-19 17:09:27 +02:00
return { ... state ,
[ 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
}
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
* /
2018-12-14 12:02:53 +01:00
2021-05-19 17:09:27 +02:00
function entitiesConfig ( state = defaultEntities , 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
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return state ;
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
* /
2021-05-19 17:09:27 +02:00
const reducer _entities = ( state = { } , action ) => {
const newConfig = entitiesConfig ( state . config , action ) ; // Generates a dynamic reducer for the entities
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
let entitiesDataReducer = state . reducer ;
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
if ( ! entitiesDataReducer || newConfig !== state . config ) {
2021-05-19 17:09:27 +02:00
const entitiesByKind = Object ( external _lodash _ [ "groupBy" ] ) ( newConfig , 'kind' ) ;
entitiesDataReducer = Object ( external _wp _data _ [ "combineReducers" ] ) ( Object . entries ( entitiesByKind ) . reduce ( ( memo , [ kind , subEntities ] ) => {
const kindReducer = Object ( external _wp _data _ [ "combineReducers" ] ) ( subEntities . reduce ( ( kindMemo , entityConfig ) => ( { ... kindMemo ,
[ entityConfig . name ] : reducer _entity ( entityConfig )
} ) , { } ) ) ;
2018-12-18 04:14:52 +01:00
memo [ kind ] = kindReducer ;
return memo ;
} , { } ) ) ;
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const newData = entitiesDataReducer ( state . data , 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
if ( newData === state . data && newConfig === state . config && entitiesDataReducer === state . reducer ) {
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
2018-12-18 04:14:52 +01:00
return {
reducer : entitiesDataReducer ,
data : newData ,
config : newConfig
} ;
} ;
2019-09-19 17:19:18 +02:00
/ * *
* Reducer keeping track of entity edit undo history .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2021-05-19 17:09:27 +02:00
const UNDO _INITIAL _STATE = [ ] ;
2019-09-19 17:19:18 +02:00
UNDO _INITIAL _STATE . offset = 0 ;
2021-05-19 17:09:27 +02:00
let lastEditAction ;
function reducer _undo ( state = UNDO _INITIAL _STATE , action ) {
2019-09-19 17:19:18 +02:00
switch ( action . type ) {
case 'EDIT_ENTITY_RECORD' :
Block Editor: Update WordPress packages to include the latest bug fixes.
Updated packages:
@wordpress/annotations@1.7.1
@wordpress/api-fetch@3.6.1
@wordpress/babel-plugin-makepot@3.2.1
@wordpress/babel-preset-default@4.6.1
@wordpress/block-directory@1.0.1
@wordpress/block-editor@3.2.1
@wordpress/block-library@2.9.1
@wordpress/blocks@6.7.1
@wordpress/components@8.3.1
@wordpress/compose@3.7.1
@wordpress/core-data@2.7.1
@wordpress/data-controls@1.3.1
@wordpress/data@4.9.1
@wordpress/docgen@1.4.1
@wordpress/dom@2.5.1
@wordpress/e2e-test-utils@2.4.1
@wordpress/e2e-tests@1.7.1
@wordpress/edit-post@3.8.1
@wordpress/editor@9.7.1
@wordpress/element@2.8.1
@wordpress/format-library@1.9.1
@wordpress/i18n@3.6.1
@wordpress/jest-console@3.3.1
@wordpress/jest-preset-default@5.1.1
@wordpress/keycodes@2.6.1
@wordpress/library-export-default-webpack-plugin@1.4.1
@wordpress/list-reusable-blocks@1.8.1
@wordpress/media-utils@1.2.1
@wordpress/notices@1.8.1
@wordpress/nux@3.7.1
@wordpress/plugins@2.7.1
@wordpress/redux-routine@3.6.1
@wordpress/rich-text@3.7.1
@wordpress/scripts@5.0.1
@wordpress/server-side-render@1.3.1
@wordpress/shortcode@2.4.1
@wordpress/token-list@1.6.1
@wordpress/viewport@2.8.1
@wordpress/wordcount@2.6.1
Props epiqueras, youknowriad, donmhico, jorgefilipecosta, soean, mcsf, noisysocks, andraganescu, gziolo, talldanwp, iseulde, nrqsnchz, mapk, karmatosed, joen, afercia, kjellr, desrosj.
Fixes #48186.
Built from https://develop.svn.wordpress.org/trunk@46364
git-svn-id: http://core.svn.wordpress.org/trunk@46163 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-30 22:07:06 +02:00
case 'CREATE_UNDO_LEVEL' :
2021-05-19 17:09:27 +02:00
let isCreateUndoLevel = action . type === 'CREATE_UNDO_LEVEL' ;
const isUndoOrRedo = ! isCreateUndoLevel && ( action . meta . isUndo || action . meta . isRedo ) ;
2019-10-15 18:17:12 +02:00
if ( isCreateUndoLevel ) {
Block Editor: Update WordPress packages to include the latest bug fixes.
Updated packages:
@wordpress/annotations@1.7.1
@wordpress/api-fetch@3.6.1
@wordpress/babel-plugin-makepot@3.2.1
@wordpress/babel-preset-default@4.6.1
@wordpress/block-directory@1.0.1
@wordpress/block-editor@3.2.1
@wordpress/block-library@2.9.1
@wordpress/blocks@6.7.1
@wordpress/components@8.3.1
@wordpress/compose@3.7.1
@wordpress/core-data@2.7.1
@wordpress/data-controls@1.3.1
@wordpress/data@4.9.1
@wordpress/docgen@1.4.1
@wordpress/dom@2.5.1
@wordpress/e2e-test-utils@2.4.1
@wordpress/e2e-tests@1.7.1
@wordpress/edit-post@3.8.1
@wordpress/editor@9.7.1
@wordpress/element@2.8.1
@wordpress/format-library@1.9.1
@wordpress/i18n@3.6.1
@wordpress/jest-console@3.3.1
@wordpress/jest-preset-default@5.1.1
@wordpress/keycodes@2.6.1
@wordpress/library-export-default-webpack-plugin@1.4.1
@wordpress/list-reusable-blocks@1.8.1
@wordpress/media-utils@1.2.1
@wordpress/notices@1.8.1
@wordpress/nux@3.7.1
@wordpress/plugins@2.7.1
@wordpress/redux-routine@3.6.1
@wordpress/rich-text@3.7.1
@wordpress/scripts@5.0.1
@wordpress/server-side-render@1.3.1
@wordpress/shortcode@2.4.1
@wordpress/token-list@1.6.1
@wordpress/viewport@2.8.1
@wordpress/wordcount@2.6.1
Props epiqueras, youknowriad, donmhico, jorgefilipecosta, soean, mcsf, noisysocks, andraganescu, gziolo, talldanwp, iseulde, nrqsnchz, mapk, karmatosed, joen, afercia, kjellr, desrosj.
Fixes #48186.
Built from https://develop.svn.wordpress.org/trunk@46364
git-svn-id: http://core.svn.wordpress.org/trunk@46163 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-30 22:07:06 +02:00
action = lastEditAction ;
2019-10-15 18:17:12 +02:00
} else if ( ! isUndoOrRedo ) {
2020-01-08 12:57:23 +01:00
// Don't lose the last edit cache if the new one only has transient edits.
// Transient edits don't create new levels so updating the cache would make
// us skip an edit later when creating levels explicitly.
2021-05-19 17:09:27 +02:00
if ( Object . keys ( action . edits ) . some ( key => ! action . transientEdits [ key ] ) ) {
2020-01-08 12:57:23 +01:00
lastEditAction = action ;
} else {
2021-05-19 17:09:27 +02:00
lastEditAction = { ... action ,
edits : { ... ( lastEditAction && lastEditAction . edits ) ,
... action . edits
}
} ;
2020-01-08 12:57:23 +01:00
}
Block Editor: Update WordPress packages to include the latest bug fixes.
Updated packages:
@wordpress/annotations@1.7.1
@wordpress/api-fetch@3.6.1
@wordpress/babel-plugin-makepot@3.2.1
@wordpress/babel-preset-default@4.6.1
@wordpress/block-directory@1.0.1
@wordpress/block-editor@3.2.1
@wordpress/block-library@2.9.1
@wordpress/blocks@6.7.1
@wordpress/components@8.3.1
@wordpress/compose@3.7.1
@wordpress/core-data@2.7.1
@wordpress/data-controls@1.3.1
@wordpress/data@4.9.1
@wordpress/docgen@1.4.1
@wordpress/dom@2.5.1
@wordpress/e2e-test-utils@2.4.1
@wordpress/e2e-tests@1.7.1
@wordpress/edit-post@3.8.1
@wordpress/editor@9.7.1
@wordpress/element@2.8.1
@wordpress/format-library@1.9.1
@wordpress/i18n@3.6.1
@wordpress/jest-console@3.3.1
@wordpress/jest-preset-default@5.1.1
@wordpress/keycodes@2.6.1
@wordpress/library-export-default-webpack-plugin@1.4.1
@wordpress/list-reusable-blocks@1.8.1
@wordpress/media-utils@1.2.1
@wordpress/notices@1.8.1
@wordpress/nux@3.7.1
@wordpress/plugins@2.7.1
@wordpress/redux-routine@3.6.1
@wordpress/rich-text@3.7.1
@wordpress/scripts@5.0.1
@wordpress/server-side-render@1.3.1
@wordpress/shortcode@2.4.1
@wordpress/token-list@1.6.1
@wordpress/viewport@2.8.1
@wordpress/wordcount@2.6.1
Props epiqueras, youknowriad, donmhico, jorgefilipecosta, soean, mcsf, noisysocks, andraganescu, gziolo, talldanwp, iseulde, nrqsnchz, mapk, karmatosed, joen, afercia, kjellr, desrosj.
Fixes #48186.
Built from https://develop.svn.wordpress.org/trunk@46364
git-svn-id: http://core.svn.wordpress.org/trunk@46163 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-30 22:07:06 +02:00
}
2021-05-19 17:09:27 +02:00
let nextState ;
2019-10-15 18:17:12 +02:00
if ( isUndoOrRedo ) {
2021-05-19 17:09:27 +02:00
nextState = [ ... state ] ;
2019-10-15 18:17:12 +02:00
nextState . offset = state . offset + ( action . meta . isUndo ? - 1 : 1 ) ;
if ( state . flattenedUndo ) {
// The first undo in a sequence of undos might happen while we have
// flattened undos in state. If this is the case, we want execution
// to continue as if we were creating an explicit undo level. This
// will result in an extra undo level being appended with the flattened
// undo values.
isCreateUndoLevel = true ;
action = lastEditAction ;
} else {
return nextState ;
}
2019-09-19 17:19:18 +02:00
}
if ( ! action . meta . undo ) {
return state ;
} // Transient edits don't create an undo level, but are
// reachable in the next meaningful edit to which they
// are merged. They are defined in the entity's config.
2021-05-19 17:09:27 +02:00
if ( ! isCreateUndoLevel && ! Object . keys ( action . edits ) . some ( key => ! action . transientEdits [ key ] ) ) {
nextState = [ ... state ] ;
nextState . flattenedUndo = { ... state . flattenedUndo ,
... action . edits
} ;
2019-10-15 18:17:12 +02:00
nextState . offset = state . offset ;
return nextState ;
2019-09-19 17:19:18 +02:00
} // Clear potential redos, because this only supports linear history.
2019-10-15 18:17:12 +02:00
nextState = nextState || state . slice ( 0 , state . offset || undefined ) ;
nextState . offset = nextState . offset || 0 ;
2019-09-19 17:19:18 +02:00
nextState . pop ( ) ;
2019-10-15 18:17:12 +02:00
if ( ! isCreateUndoLevel ) {
nextState . push ( {
kind : action . meta . undo . kind ,
name : action . meta . undo . name ,
recordId : action . meta . undo . recordId ,
2021-05-19 17:09:27 +02:00
edits : { ... state . flattenedUndo ,
... action . meta . undo . edits
}
2019-10-15 18:17:12 +02:00
} ) ;
} // When an edit is a function it's an optimization to avoid running some expensive operation.
2019-09-19 17:19:18 +02:00
// We can't rely on the function references being the same so we opt out of comparing them here.
2019-10-15 18:17:12 +02:00
2021-05-19 17:09:27 +02:00
const comparisonUndoEdits = Object . values ( action . meta . undo . edits ) . filter ( edit => typeof edit !== 'function' ) ;
const comparisonEdits = Object . values ( action . edits ) . filter ( edit => typeof edit !== 'function' ) ;
2019-09-19 17:19:18 +02:00
2021-01-28 03:04:13 +01:00
if ( ! external _wp _isShallowEqual _default ( ) ( comparisonUndoEdits , comparisonEdits ) ) {
2019-09-19 17:19:18 +02:00
nextState . push ( {
kind : action . kind ,
name : action . name ,
recordId : action . recordId ,
2021-05-19 17:09:27 +02:00
edits : isCreateUndoLevel ? { ... state . flattenedUndo ,
... action . edits
} : action . edits
2019-09-19 17:19:18 +02:00
} ) ;
}
return nextState ;
}
return state ;
}
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 .
* /
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
2021-05-19 17:09:27 +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 ;
return { ... state ,
[ url ] : preview
} ;
2018-12-18 04:14:52 +01: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
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
}
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
*
2019-03-07 10:09:59 +01:00
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
2018-12-18 04:14:52 +01:00
*
* @ return { Object } Updated state .
* /
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +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' :
2021-05-19 17:09:27 +02:00
return { ... state ,
[ action . key ] : action . isAllowed
} ;
2018-12-18 04:14:52 +01:00
}
2018-12-14 05:41:57 +01:00
2018-12-18 04:14:52 +01:00
return state ;
}
2019-09-19 17:19:18 +02:00
/ * *
* Reducer returning autosaves keyed by their parent ' s post id .
*
* @ param { Object } state Current state .
* @ param { Object } action Dispatched action .
*
* @ return { Object } Updated state .
* /
2021-05-19 17:09:27 +02:00
function reducer _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 ;
return { ... state ,
[ postId ] : autosavesData
} ;
2019-09-19 17:19:18 +02:00
}
return state ;
}
2021-01-28 03:04:13 +01:00
/* harmony default export */ var build _module _reducer = ( Object ( external _wp _data _ [ "combineReducers" ] ) ( {
2021-05-19 17:09:27 +02:00
terms ,
2018-12-18 04:14:52 +01:00
users : reducer _users ,
2021-05-19 17:09:27 +02:00
currentTheme ,
2019-09-19 17:19:18 +02:00
currentUser : reducer _currentUser ,
2018-12-18 04:14:52 +01:00
taxonomies : reducer _taxonomies ,
2021-05-19 17:09:27 +02:00
themes ,
themeSupports ,
2018-12-18 04:14:52 +01:00
entities : reducer _entities ,
2019-09-19 17:19:18 +02:00
undo : reducer _undo ,
2021-05-19 17:09:27 +02:00
embedPreviews ,
userPermissions ,
2021-01-28 03:04:13 +01:00
autosaves : reducer _autosaves ,
locks : locks _reducer
2018-12-18 04:14:52 +01:00
} ) ) ;
2020-06-26 15:33:47 +02:00
// EXTERNAL MODULE: ./node_modules/rememo/es/rememo.js
2021-05-20 14:20:04 +02:00
var rememo = _ _webpack _require _ _ ( "pPDe" ) ;
2019-03-07 10:09:59 +01:00
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/name.js
/ * *
* The reducer key used by core data in store registration .
* This is defined in a separate file to avoid cycle - dependency
*
* @ type { string }
* /
2021-05-19 17:09:27 +02:00
const STORE _NAME = 'core' ;
2018-12-14 05:41:57 +01:00
2020-06-26 15:33:47 +02:00
// EXTERNAL MODULE: ./node_modules/equivalent-key-map/equivalent-key-map.js
2021-05-20 14:20:04 +02:00
var equivalent _key _map = _ _webpack _require _ _ ( "FtRg" ) ;
2020-06-26 15:33:47 +02:00
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
* /
2020-10-13 15:10:30 +02:00
2020-06-26 15:33:47 +02:00
/ * *
* Internal dependencies
* /
/ * *
* 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 > }
* /
2021-05-19 17:09:27 +02:00
const queriedItemsCacheByState = new WeakMap ( ) ;
2020-06-26 15:33:47 +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-06-25 17:52:22 +02:00
var _state$queries , _state$queries$contex ;
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 ;
2020-10-13 15:10:30 +02:00
if ( Array . isArray ( include ) && ! stableKey ) {
// If the parsed query yields a set of IDs, but otherwise no filtering,
// it's safe to consider targeted item IDs as the include set. This
// doesn't guarantee that those objects have been queried, which is
// accounted for below in the loop `null` return.
itemIds = include ; // TODO: Avoid storing the empty stable string in reducer, since it
// can be computed dynamically here always.
2021-06-25 17:52:22 +02:00
} else if ( ( _state$queries = state . queries ) !== null && _state$queries !== void 0 && ( _state$queries$contex = _state$queries [ context ] ) !== null && _state$queries$contex !== void 0 && _state$queries$contex [ stableKey ] ) {
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 = [ ] ;
2020-06-26 15:33:47 +02:00
2021-05-19 17:09:27 +02:00
for ( let i = startOffset ; i < endOffset ; i ++ ) {
2021-06-25 17:52:22 +02:00
var _state$items$context ;
2021-05-19 17:09:27 +02:00
const itemId = itemIds [ i ] ;
2020-10-13 15:10:30 +02:00
if ( Array . isArray ( include ) && ! include . includes ( itemId ) ) {
continue ;
}
2021-06-25 17:52:22 +02:00
if ( ! ( ( _state$items$context = state . items [ context ] ) !== null && _state$items$context !== void 0 && _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 ( '.' ) ;
const value = Object ( external _lodash _ [ "get" ] ) ( item , field ) ;
2021-01-28 03:04:13 +01:00
Object ( external _lodash _ [ "set" ] ) ( filteredItem , field , value ) ;
2020-10-13 15:10:30 +02:00
}
} else {
2021-06-25 17:52:22 +02:00
var _state$itemIsComplete ;
2020-10-13 15:10:30 +02:00
// If expecting a complete item, validate that completeness, or
// otherwise abort.
2021-06-25 17:52:22 +02:00
if ( ! ( ( _state$itemIsComplete = state . itemIsComplete [ context ] ) !== null && _state$itemIsComplete !== void 0 && _state$itemIsComplete [ 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 ;
}
/ * *
* 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 .
* /
2021-05-19 17:09:27 +02:00
const getQueriedItems = Object ( rememo [ "a" /* default */ ] ) ( ( state , query = { } ) => {
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 {
queriedItemsCache = new equivalent _key _map _default . a ( ) ;
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 ;
} ) ;
2018-12-18 04:14:52 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/selectors.js
2018-12-14 05:41:57 +01:00
/ * *
* External dependencies
* /
/ * *
* WordPress dependencies
* /
2019-03-07 10:09:59 +01:00
2018-12-14 05:41:57 +01:00
/ * *
* Internal dependencies
* /
2020-06-26 15:33:47 +02:00
2020-10-20 15:36:16 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Shared reference to an empty array for cases where it is important to avoid
* returning a new array 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 .
*
* @ type { Array }
* /
2021-05-19 17:09:27 +02:00
const EMPTY _ARRAY = [ ] ;
2018-12-14 05:41:57 +01:00
/ * *
* Returns true if a request is in progress for embed preview data , or false
* otherwise .
*
* @ param { Object } state Data state .
* @ param { string } url URL the preview would be for .
*
* @ return { boolean } Whether a request is in progress for an embed preview .
* /
2021-05-19 17:09:27 +02:00
const isRequestingEmbedPreview = Object ( external _wp _data _ [ "createRegistrySelector" ] ) ( select => ( state , url ) => {
return select ( 'core/data' ) . isResolving ( STORE _NAME , 'getEmbedPreview' , [ url ] ) ;
2019-03-07 10:09:59 +01:00
} ) ;
2020-12-01 13:19:43 +01:00
/ * *
* Returns all available authors .
*
* @ param { Object } state Data state .
* @ param { Object | undefined } query Optional object of query parameters to
* include with request .
* @ return { Array } Authors list .
* /
function getAuthors ( state , query ) {
2021-05-19 17:09:27 +02:00
const path = Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '/wp/v2/users/?who=authors&per_page=100' , query ) ;
2020-12-01 13:19:43 +01:00
return getUserQueryResults ( state , path ) ;
}
2018-12-14 05:41:57 +01:00
/ * *
* Returns all available authors .
*
* @ param { Object } state Data state .
2020-12-01 13:19:43 +01:00
* @ param { number } id The author id .
2018-12-14 05:41:57 +01:00
*
* @ return { Array } Authors list .
* /
2020-12-01 13:19:43 +01:00
function _ _unstableGetAuthor ( state , id ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state , [ 'users' , 'byId' , id ] , null ) ;
2018-12-14 05:41:57 +01:00
}
2019-09-19 17:19:18 +02:00
/ * *
* Returns the current user .
*
* @ param { Object } state Data state .
*
* @ return { Object } Current user object .
* /
function getCurrentUser ( state ) {
return state . currentUser ;
}
2018-12-14 05:41:57 +01:00
/ * *
* Returns all the users returned by a query ID .
*
* @ param { Object } state Data state .
* @ param { string } queryID Query ID .
*
* @ return { Array } Users list .
* /
2021-05-19 17:09:27 +02:00
const getUserQueryResults = Object ( rememo [ "a" /* default */ ] ) ( ( state , queryID ) => {
const queryResults = state . users . queries [ queryID ] ;
return Object ( external _lodash _ [ "map" ] ) ( queryResults , id => state . users . byId [ id ] ) ;
} , ( state , queryID ) => [ state . users . queries [ queryID ] , state . users . byId ] ) ;
2018-12-14 05:41:57 +01:00
/ * *
* Returns whether the entities for the give kind are loaded .
*
* @ param { Object } state Data state .
* @ param { string } kind Entity kind .
*
2021-05-07 13:48:27 +02:00
* @ return { Array < Object > } Array of entities with config matching kind .
2018-12-14 05:41:57 +01:00
* /
function getEntitiesByKind ( state , kind ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "filter" ] ) ( state . entities . config , {
2021-05-19 17:09:27 +02:00
kind
2018-12-14 05:41:57 +01:00
} ) ;
}
/ * *
* Returns the entity object given its kind and name .
*
* @ param { Object } state Data state .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
*
* @ return { Object } Entity
* /
2021-05-19 17:09:27 +02:00
function getEntity ( state , kind , name ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "find" ] ) ( state . entities . config , {
2021-05-19 17:09:27 +02:00
kind ,
name
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
*
2020-10-13 15:10:30 +02:00
* @ param { Object } state State tree
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } key Record ' s key
* @ param { ? Object } query Optional query .
2019-10-15 17:37:08 +02:00
*
* @ return { Object ? } Record .
* /
2020-10-13 15:10:30 +02:00
function getEntityRecord ( state , kind , name , key , query ) {
2021-06-25 17:52:22 +02:00
var _query$context , _queriedState$items$c ;
2021-05-19 17:09:27 +02:00
const queriedState = Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'queriedData' ] ) ;
2020-10-13 15:10:30 +02:00
if ( ! queriedState ) {
return undefined ;
}
2021-06-25 17:52:22 +02:00
const context = ( _query$context = query === null || query === void 0 ? void 0 : query . context ) !== null && _query$context !== void 0 ? _query$context : 'default' ;
2020-10-13 15:10:30 +02:00
if ( query === undefined ) {
2021-06-25 17:52:22 +02:00
var _queriedState$itemIsC ;
2020-10-13 15:10:30 +02:00
// If expecting a complete item, validate that completeness.
2021-06-25 17:52:22 +02:00
if ( ! ( ( _queriedState$itemIsC = queriedState . itemIsComplete [ context ] ) !== null && _queriedState$itemIsC !== void 0 && _queriedState$itemIsC [ 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
}
2021-06-25 17:52:22 +02:00
const item = ( _queriedState$items$c = queriedState . items [ context ] ) === null || _queriedState$items$c === void 0 ? void 0 : _queriedState$items$c [ key ] ;
2020-10-20 15:36:16 +02:00
if ( item && query . _fields ) {
2021-05-19 17:09:27 +02:00
const filteredItem = { } ;
const fields = get _normalized _comma _separable ( query . _fields ) ;
2020-10-20 15:36:16 +02:00
2021-05-19 17:09:27 +02:00
for ( let f = 0 ; f < fields . length ; f ++ ) {
const field = fields [ f ] . split ( '.' ) ;
const value = Object ( external _lodash _ [ "get" ] ) ( item , field ) ;
2021-01-28 03:04:13 +01:00
Object ( external _lodash _ [ "set" ] ) ( filteredItem , field , value ) ;
2020-10-20 15:36:16 +02:00
}
return filteredItem ;
}
return item ;
2019-10-15 17:37:08 +02:00
}
2020-02-06 22:03:31 +01:00
/ * *
* Returns the Entity 's record object by key. Doesn' t trigger a resolver nor requests the entity from the API if the entity record isn ' t available in the local state .
*
* @ param { Object } state State tree
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } key Record ' s key
*
2020-10-13 15:10:30 +02:00
* @ return { Object | null } Record .
2020-02-06 22:03:31 +01:00
* /
2020-02-10 23:33:27 +01:00
function _ _experimentalGetEntityRecordNoResolver ( state , kind , name , key ) {
2020-02-06 22:03:31 +01:00
return getEntityRecord ( state , kind , name , key ) ;
}
2019-10-15 17:37:08 +02:00
/ * *
* Returns the entity ' s record object by key ,
* with its attributes mapped to their raw values .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } key Record ' s key .
*
* @ return { Object ? } Object with the entity ' s raw attributes .
* /
2021-05-19 17:09:27 +02:00
const getRawEntityRecord = Object ( rememo [ "a" /* default */ ] ) ( ( state , kind , name , key ) => {
const record = getEntityRecord ( state , kind , name , key ) ;
return record && Object . keys ( record ) . reduce ( ( accumulator , _key ) => {
2019-10-15 17:37:08 +02:00
// Because edits are the "raw" attribute values,
// we return those from record selectors to make rendering,
// comparisons, and joins with edits easier.
2021-01-28 03:04:13 +01:00
accumulator [ _key ] = Object ( external _lodash _ [ "get" ] ) ( record [ _key ] , 'raw' , record [ _key ] ) ;
2020-01-08 12:57:23 +01:00
return accumulator ;
2019-10-15 17:37:08 +02:00
} , { } ) ;
2021-05-19 17:09:27 +02:00
} , state => [ state . entities . data ] ) ;
2020-10-13 15:10:30 +02:00
/ * *
* Returns true if records have been received for the given set of parameters ,
* or false otherwise .
*
* @ param { Object } state State tree
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { ? Object } query Optional terms query .
*
* @ return { boolean } Whether entity records have been received .
* /
function hasEntityRecords ( state , kind , name , query ) {
return Array . isArray ( getEntityRecords ( state , kind , name , query ) ) ;
}
2019-10-15 17:37:08 +02:00
/ * *
* Returns the Entity ' s records .
*
2020-10-13 15:10:30 +02:00
* @ param { Object } state State tree
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { ? Object } query Optional terms query .
2019-10-15 17:37:08 +02:00
*
2020-06-26 15:33:47 +02:00
* @ return { ? Array } Records .
2019-10-15 17:37:08 +02:00
* /
function 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
// assigned for the given parameters, then it is known to not exist. Thus, a
// return value of an empty array is used instead of `null` (where `null` is
// otherwise used to represent an unknown state).
2021-05-19 17:09:27 +02:00
const queriedState = Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'queriedData' ] ) ;
2019-10-15 17:37:08 +02:00
if ( ! queriedState ) {
2021-01-28 03:04:13 +01:00
return EMPTY _ARRAY ;
2019-10-15 17:37:08 +02:00
}
return getQueriedItems ( queriedState , query ) ;
}
2020-01-22 23:06:21 +01:00
/ * *
2020-06-26 15:33:47 +02:00
* Returns the list of dirty entity records .
2020-01-22 23:06:21 +01:00
*
* @ param { Object } state State tree .
*
2020-06-26 15:33:47 +02:00
* @ return { [ { title : string , key : string , name : string , kind : string } ] } The list of updated records
2020-01-22 23:06:21 +01:00
* /
2021-05-19 17:09:27 +02:00
const _ _experimentalGetDirtyEntityRecords = Object ( rememo [ "a" /* default */ ] ) ( state => {
const {
entities : {
data
}
} = state ;
const dirtyRecords = [ ] ;
Object . keys ( data ) . forEach ( kind => {
Object . keys ( data [ kind ] ) . forEach ( name => {
const primaryKeys = Object . keys ( data [ kind ] [ name ] . edits ) . filter ( primaryKey => hasEditsForEntityRecord ( state , kind , name , primaryKey ) ) ;
2020-01-22 23:06:21 +01:00
2020-06-26 15:33:47 +02:00
if ( primaryKeys . length ) {
2021-05-19 17:09:27 +02:00
const entity = getEntity ( state , kind , name ) ;
primaryKeys . forEach ( primaryKey => {
2021-01-28 03:04:13 +01:00
var _entity$getTitle ;
2021-05-19 17:09:27 +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.
key : entityRecord [ entity . key || DEFAULT _ENTITY _KEY ] ,
2021-01-28 03:04:13 +01:00
title : ( entity === null || entity === void 0 ? void 0 : ( _entity$getTitle = entity . getTitle ) === null || _entity$getTitle === void 0 ? void 0 : _entity$getTitle . call ( entity , 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 ;
2021-05-19 17:09:27 +02:00
} , state => [ state . entities . data ] ) ;
2019-10-15 17:37:08 +02:00
/ * *
* Returns the specified entity record ' s edits .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { Object ? } The entity record ' s edits .
* /
function getEntityRecordEdits ( state , kind , name , recordId ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'edits' , recordId ] ) ;
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 .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { Object ? } The entity record ' s non transient edits .
* /
2021-05-19 17:09:27 +02:00
const getEntityRecordNonTransientEdits = Object ( rememo [ "a" /* default */ ] ) ( ( state , kind , name , recordId ) => {
const {
transientEdits
} = getEntity ( state , kind , name ) || { } ;
const edits = getEntityRecordEdits ( state , kind , name , recordId ) || { } ;
2019-12-09 18:37:10 +01:00
if ( ! transientEdits ) {
return edits ;
}
2019-10-15 17:37:08 +02:00
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 ;
} , { } ) ;
2021-05-19 17:09:27 +02:00
} , state => [ state . entities . config , state . entities . data ] ) ;
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if the specified entity record has edits ,
* and false otherwise .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { boolean } Whether the entity record has edits or not .
* /
function hasEditsForEntityRecord ( state , kind , name , recordId ) {
return isSavingEntityRecord ( state , kind , name , recordId ) || Object . keys ( getEntityRecordNonTransientEdits ( state , kind , name , recordId ) ) . length > 0 ;
}
/ * *
* Returns the specified entity record , merged with its edits .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { Object ? } The entity record , merged with its edits .
* /
2021-05-19 17:09:27 +02:00
const getEditedEntityRecord = Object ( rememo [ "a" /* default */ ] ) ( ( state , kind , name , recordId ) => ( { ... getRawEntityRecord ( state , kind , name , recordId ) ,
... getEntityRecordEdits ( state , kind , name , recordId )
} ) , state => [ state . entities . data ] ) ;
2019-10-15 17:37:08 +02:00
/ * *
* Returns true if the specified entity record is autosaving , and false otherwise .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { boolean } Whether the entity record is autosaving or not .
* /
function isAutosavingEntityRecord ( state , kind , name , recordId ) {
2021-05-19 17:09:27 +02:00
const {
pending ,
isAutosave
} = Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'saving' , recordId ] , { } ) ;
2019-10-15 17:37:08 +02:00
return Boolean ( pending && isAutosave ) ;
}
/ * *
* Returns true if the specified entity record is saving , and false otherwise .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { boolean } Whether the entity record is saving or not .
* /
function isSavingEntityRecord ( state , kind , name , recordId ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'saving' , recordId , 'pending' ] , false ) ;
2019-10-15 17:37:08 +02:00
}
2020-10-13 15:10:30 +02:00
/ * *
* Returns true if the specified entity record is deleting , and false otherwise .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { boolean } Whether the entity record is deleting or not .
* /
function isDeletingEntityRecord ( state , kind , name , recordId ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'deleting' , recordId , 'pending' ] , false ) ;
2020-10-13 15:10:30 +02:00
}
2019-10-15 17:37:08 +02:00
/ * *
* Returns the specified entity record ' s last save error .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { Object ? } The entity record ' s save error .
* /
function getLastEntitySaveError ( state , kind , name , recordId ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'saving' , recordId , 'error' ] ) ;
2019-10-15 17:37:08 +02:00
}
2020-10-13 15:10:30 +02:00
/ * *
* Returns the specified entity record ' s last delete error .
*
* @ param { Object } state State tree .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { number } recordId Record ID .
*
* @ return { Object ? } The entity record ' s save error .
* /
function getLastEntityDeleteError ( state , kind , name , recordId ) {
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state . entities . data , [ kind , name , 'deleting' , recordId , 'error' ] ) ;
2020-10-13 15:10:30 +02:00
}
2019-10-15 17:37:08 +02:00
/ * *
* Returns the current undo offset for the
* entity records edits history . The offset
* represents how many items from the end
* of the history stack we are at . 0 is the
* last edit , - 1 is the second last , and so on .
*
* @ param { Object } state State tree .
*
* @ return { number } The current undo offset .
* /
function getCurrentUndoOffset ( state ) {
return state . undo . offset ;
}
/ * *
* Returns the previous edit from the current undo offset
* for the entity records edits history , if any .
*
* @ param { Object } state State tree .
*
* @ return { Object ? } The edit .
* /
function getUndoEdit ( state ) {
return state . undo [ state . undo . length - 2 + getCurrentUndoOffset ( state ) ] ;
}
/ * *
* Returns the next edit from the current undo offset
* for the entity records edits history , if any .
*
* @ param { Object } state State tree .
*
* @ return { Object ? } The edit .
* /
function getRedoEdit ( state ) {
return state . undo [ state . undo . length + getCurrentUndoOffset ( state ) ] ;
}
/ * *
* Returns true if there is a previous edit from the current undo offset
* for the entity records edits history , and false otherwise .
*
* @ param { Object } state State tree .
*
* @ return { boolean } Whether there is a previous edit or not .
* /
function hasUndo ( state ) {
return Boolean ( getUndoEdit ( state ) ) ;
}
/ * *
* Returns true if there is a next edit from the current undo offset
* for the entity records edits history , and false otherwise .
*
* @ param { Object } state State tree .
*
* @ return { boolean } Whether there is a next edit or not .
* /
function hasRedo ( state ) {
return Boolean ( getRedoEdit ( state ) ) ;
}
2020-06-26 15:33:47 +02:00
/ * *
* Return the current theme .
*
* @ param { Object } state Data state .
*
* @ return { Object } The current theme .
* /
function getCurrentTheme ( state ) {
return state . themes [ state . currentTheme ] ;
}
2019-10-15 17:37:08 +02:00
/ * *
* Return theme supports data in the index .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ param { Object } state Data state .
2018-12-14 05:41:57 +01:00
*
2019-10-15 17:37:08 +02:00
* @ return { * } Index data .
2018-12-14 05:41:57 +01:00
* /
2019-10-15 17:37:08 +02:00
function getThemeSupports ( state ) {
return state . themeSupports ;
2018-12-14 05:41:57 +01: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
*
2019-10-15 17:37:08 +02:00
* @ param { Object } state Data state .
* @ param { string } url Embedded URL .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +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 ] ;
}
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
*
2019-10-15 17:37:08 +02:00
* @ param { Object } state Data state .
* @ param { string } url Embedded URL .
*
* @ return { boolean } 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>' ;
2018-12-14 05:41:57 +01:00
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
}
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
*
2019-10-15 17:37:08 +02:00
* @ param { Object } state Data state .
* @ param { string } action Action to check . One of : 'create' , 'read' , 'update' , 'delete' .
* @ param { string } resource REST resource to check , e . g . 'media' or 'posts' .
* @ param { string = } id Optional ID of the rest resource to check .
*
* @ return { boolean | undefined } Whether or not the user can perform the action ,
* 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 ) {
2021-05-19 17:09:27 +02:00
const key = Object ( external _lodash _ [ "compact" ] ) ( [ action , resource , id ] ) . join ( '/' ) ;
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "get" ] ) ( state , [ 'userPermissions' , key ] ) ;
2019-10-15 17:37:08 +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/
*
2021-06-15 17:30:24 +02:00
* @ param { Object } state Data state .
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
2021-06-15 10:52:30 +02:00
* @ param { string } recordId Record ' s id .
* @ return { boolean | undefined } Whether or not the user can edit ,
* or ` undefined ` if the OPTIONS request is still being made .
* /
2021-06-15 17:30:24 +02:00
function canUserEditEntityRecord ( state , kind , name , recordId ) {
const entity = getEntity ( state , kind , name ) ;
if ( ! entity ) {
return false ;
}
const resource = entity . _ _unstable _rest _base ;
2021-06-15 10:52:30 +02:00
return canUser ( state , 'update' , resource , recordId ) ;
}
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
*
* @ param { Object } state State tree .
2019-10-15 17:37:08 +02:00
* @ param { string } postType The type of the parent post .
* @ param { number } postId The id of the parent post .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* @ return { ? Array } 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
}
/ * *
2019-10-15 17:37:08 +02:00
* Returns the autosave for the post and author .
2019-09-19 17:19:18 +02:00
*
* @ param { Object } state State tree .
2019-10-15 17:37:08 +02:00
* @ param { string } postType The type of the parent post .
* @ param { number } postId The id of the parent post .
* @ param { number } authorId The id of the author .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* @ return { ? Object } 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 ] ;
2021-01-28 03:04:13 +01:00
return Object ( external _lodash _ [ "find" ] ) ( autosaves , {
2019-10-15 17:37:08 +02:00
author : authorId
} ) ;
}
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
*
2019-10-15 17:37:08 +02:00
* @ param { Object } state State tree .
* @ param { string } postType The type of the parent post .
* @ param { number } postId The id of the parent post .
2019-09-19 17:19:18 +02:00
*
2019-10-15 17:37:08 +02:00
* @ return { boolean } True if the REST request was completed . False otherwise .
2019-09-19 17:19:18 +02:00
* /
2021-05-19 17:09:27 +02:00
const hasFetchedAutosaves = Object ( external _wp _data _ [ "createRegistrySelector" ] ) ( select => ( state , postType , postId ) => {
return select ( STORE _NAME ) . hasFinishedResolution ( 'getAutosaves' , [ postType , postId ] ) ;
2019-10-15 17:37:08 +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 )
* ) ;
* ` ` `
*
* @ param { Object } state Editor state .
*
* @ return { * } A value whose reference will change only when an edit occurs .
2019-09-19 17:19:18 +02:00
* /
2021-05-19 17:09:27 +02:00
const getReferenceByDistinctEdits = Object ( rememo [ "a" /* default */ ] ) ( ( ) => [ ] , state => [ state . undo . length , state . undo . offset , state . undo . flattenedUndo ] ) ;
2021-01-28 03:04:13 +01:00
/ * *
* Retrieve the frontend template used for a given link .
*
* @ param { Object } state Editor state .
* @ param { string } link Link .
*
* @ return { Object ? } The template record .
* /
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
} ) ;
2021-05-21 12:14:23 +02:00
const template = records !== null && records !== void 0 && records . length ? records [ 0 ] : null ;
if ( template ) {
return getEditedEntityRecord ( state , 'postType' , 'wp_template' , template . id ) ;
}
return template ;
2021-01-28 03:04:13 +01:00
}
2020-06-26 15:33:47 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/if-not-resolved.js
/ * *
* WordPress dependencies
* /
/ * *
* Higher - order function which invokes the given resolver only if it has not
* already been resolved with the arguments passed to the enhanced function .
*
* This only considers resolution state , and notably does not support resolver
* custom ` isFulfilled ` behavior .
*
* @ param { Function } resolver Original resolver .
* @ param { string } selectorName Selector name associated with resolver .
*
* @ return { Function } Enhanced resolver .
* /
2021-05-19 17:09:27 +02:00
const ifNotResolved = ( resolver , selectorName ) =>
/ * *
* @ param { ... any } args Original resolver arguments .
* /
function * resolveIfNotResolved ( ... args ) {
const hasStartedResolution = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'hasStartedResolution' , selectorName , args ) ;
2020-06-26 15:33:47 +02:00
2021-05-19 17:09:27 +02:00
if ( ! hasStartedResolution ) {
yield * resolver ( ... args ) ;
}
2020-06-26 15:33:47 +02:00
} ;
2021-05-19 17:09:27 +02:00
/* harmony default export */ var if _not _resolved = ( ifNotResolved ) ;
2020-06-26 15:33:47 +02:00
2019-10-15 17:37:08 +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
* /
/ * *
2019-10-15 17:37:08 +02:00
* WordPress dependencies
2019-09-19 17:19:18 +02:00
* /
2020-10-13 15:10:30 +02:00
2021-01-28 03:04:13 +01:00
/ * *
* Internal dependencies
* /
2019-09-19 17:19:18 +02:00
/ * *
2019-10-15 17:37:08 +02:00
* Internal dependencies
2019-09-19 17:19:18 +02:00
* /
2018-12-14 05:41:57 +01:00
2021-01-28 03:04:13 +01: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
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getAuthors ( query ) {
const path = Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '/wp/v2/users/?who=authors&per_page=100' , query ) ;
const users = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path
} ) ;
yield receiveUserQuery ( path , users ) ;
2018-12-14 05:41:57 +01:00
}
2020-12-01 13:19:43 +01:00
/ * *
* Temporary approach to resolving editor access to author queries .
*
* @ param { number } id The author id .
* /
2021-05-19 17:09:27 +02:00
function * resolvers _unstableGetAuthor ( id ) {
const path = ` /wp/v2/users?who=authors&include= ${ id } ` ;
const users = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path
} ) ;
yield receiveUserQuery ( 'author' , users ) ;
2020-12-01 13:19:43 +01: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
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getCurrentUser ( ) {
const currentUser = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : '/wp/v2/users/me'
} ) ;
yield receiveCurrentUser ( currentUser ) ;
2018-12-14 05:41:57 +01: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
* include with request .
2019-03-07 10:09:59 +01:00
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getEntityRecord ( kind , name , key = '' , query ) {
const entities = yield getKindEntities ( kind ) ;
const entity = Object ( external _lodash _ [ "find" ] ) ( entities , {
kind ,
name
} ) ;
2020-10-13 15:10:30 +02:00
2021-05-19 17:09:27 +02:00
if ( ! entity ) {
return ;
}
2020-10-13 15:10:30 +02:00
2021-05-19 17:09:27 +02:00
const lock = yield * _ _unstableAcquireStoreLock ( 'core' , [ 'entities' , 'data' , kind , name , key ] , {
exclusive : false
} ) ;
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
try {
if ( query !== undefined && query . _fields ) {
// If requesting specific fields, items and query assocation to said
// records are stored by ID reference. Thus, fields must always include
// the ID.
query = { ... query ,
_fields : Object ( external _lodash _ [ "uniq" ] ) ( [ ... ( get _normalized _comma _separable ( query . _fields ) || [ ] ) , entity . key || DEFAULT _ENTITY _KEY ] ) . join ( )
} ;
} // 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.
// eslint-disable-next-line @wordpress/no-unused-vars-before-return
2019-10-15 17:37:08 +02:00
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
const path = Object ( external _wp _url _ [ "addQueryArgs" ] ) ( entity . baseURL + '/' + key , { ... entity . baseURLParams ,
... query
} ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( query !== undefined ) {
query = { ... query ,
include : [ key ]
} ; // 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.
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
const hasRecords = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'hasEntityRecords' , kind , name , query ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( hasRecords ) {
return ;
2019-10-15 17:37:08 +02:00
}
}
2021-05-19 17:09:27 +02:00
const record = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path
} ) ;
yield receiveEntityRecords ( kind , name , record , query ) ;
} catch ( error ) { // We need a way to handle and access REST API errors in state
// Until then, catching the error ensures the resolver is marked as resolved.
} finally {
yield * _ _unstableReleaseStoreLock ( lock ) ;
}
2019-03-07 10:09:59 +01:00
}
2020-06-26 15:33:47 +02:00
/ * *
* Requests an entity ' s record from the REST API .
* /
2021-05-19 17:09:27 +02:00
const resolvers _getRawEntityRecord = if _not _resolved ( resolvers _getEntityRecord , 'getEntityRecord' ) ;
2020-06-26 15:33:47 +02:00
/ * *
* Requests an entity ' s record from the REST API .
* /
2021-05-19 17:09:27 +02:00
const resolvers _getEditedEntityRecord = if _not _resolved ( resolvers _getRawEntityRecord , 'getRawEntityRecord' ) ;
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
*
2019-10-15 17:37:08 +02:00
* @ param { string } kind Entity kind .
* @ param { string } name Entity name .
* @ param { Object ? } query Query Object .
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
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getEntityRecords ( kind , name , query = { } ) {
const entities = yield getKindEntities ( kind ) ;
const entity = Object ( external _lodash _ [ "find" ] ) ( entities , {
kind ,
name
} ) ;
2019-09-19 17:19:18 +02:00
2021-05-19 17:09:27 +02:00
if ( ! entity ) {
return ;
}
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
const lock = yield * _ _unstableAcquireStoreLock ( 'core' , [ 'entities' , 'data' , kind , name ] , {
exclusive : false
} ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
try {
var _query ;
if ( query . _fields ) {
// If requesting specific fields, items and query assocation to said
// records are stored by ID reference. Thus, fields must always include
// the ID.
query = { ... query ,
_fields : Object ( external _lodash _ [ "uniq" ] ) ( [ ... ( get _normalized _comma _separable ( query . _fields ) || [ ] ) , entity . key || DEFAULT _ENTITY _KEY ] ) . join ( )
} ;
}
2021-01-28 03:04:13 +01:00
2021-06-25 17:52:22 +02:00
const path = Object ( external _wp _url _ [ "addQueryArgs" ] ) ( entity . baseURL , { ... entity . baseURLParams ,
... query
2021-05-19 17:09:27 +02:00
} ) ;
let records = Object . values ( yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path
} ) ) ; // If we request fields but the result doesn't contain the fields,
// explicitely 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 ;
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
} ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
return record ;
} ) ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
yield receiveEntityRecords ( kind , name , records , query ) ; // When requesting all fields, the list of results can be used to
// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.
// See https://github.com/WordPress/gutenberg/pull/26575
2021-06-25 17:52:22 +02:00
if ( ! ( ( _query = query ) !== null && _query !== void 0 && _query . _fields ) && ! query . context ) {
2021-05-19 17:09:27 +02:00
const key = entity . key || DEFAULT _ENTITY _KEY ;
const resolutionsArgs = records . filter ( record => record [ key ] ) . map ( record => [ kind , name , record [ key ] ] ) ;
yield {
type : 'START_RESOLUTIONS' ,
selectorName : 'getEntityRecord' ,
args : resolutionsArgs
} ;
yield {
type : 'FINISH_RESOLUTIONS' ,
selectorName : 'getEntityRecord' ,
args : resolutionsArgs
} ;
2021-01-28 03:04:13 +01:00
}
2021-05-19 17:09:27 +02:00
} finally {
yield * _ _unstableReleaseStoreLock ( lock ) ;
}
2021-01-28 03:04:13 +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 ;
} ;
/ * *
* Requests the current theme .
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getCurrentTheme ( ) {
const activeThemes = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : '/wp/v2/themes?status=active'
} ) ;
yield receiveCurrentTheme ( activeThemes [ 0 ] ) ;
2019-10-15 17:37:08 +02:00
}
2020-06-26 15:33:47 +02:00
/ * *
* Requests theme supports data from the index .
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getThemeSupports ( ) {
const activeThemes = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : '/wp/v2/themes?status=active'
} ) ;
yield receiveThemeSupports ( activeThemes [ 0 ] . theme _supports ) ;
2020-06-26 15:33:47 +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
*
2019-10-15 17:37:08 +02:00
* @ param { string } url URL to get the preview for .
2019-09-19 17:19:18 +02:00
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getEmbedPreview ( url ) {
try {
const embedProxyResponse = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '/oembed/1.0/proxy' , {
url
} )
} ) ;
yield receiveEmbedPreview ( url , embedProxyResponse ) ;
} catch ( error ) {
// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.
yield receiveEmbedPreview ( url , false ) ;
}
2019-10-15 17:37:08 +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 .
*
* @ param { string } action 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
* /
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
function * resolvers _canUser ( action , resource , id ) {
const methods = {
create : 'POST' ,
read : 'GET' ,
update : 'PUT' ,
delete : 'DELETE'
} ;
const method = methods [ action ] ;
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
if ( ! method ) {
throw new Error ( ` ' ${ action } ' is not a valid action. ` ) ;
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const path = id ? ` /wp/v2/ ${ resource } / ${ id } ` : ` /wp/v2/ ${ resource } ` ;
let response ;
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
try {
response = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path ,
// Ideally this would always be an OPTIONS request, but unfortunately there's
// a bug in the REST API which causes the Allow header to not be sent on
// OPTIONS requests to /posts/:id routes.
// https://core.trac.wordpress.org/ticket/45753
method : id ? 'GET' : 'OPTIONS' ,
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 ;
}
let allowHeader ;
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
if ( Object ( external _lodash _ [ "hasIn" ] ) ( response , [ 'headers' , 'get' ] ) ) {
// If the request is fetched using the fetch api, the header can be
// retrieved using the 'get' method.
allowHeader = response . headers . get ( 'allow' ) ;
} else {
// If the request was preloaded server-side and is returned by the
// preloading middleware, the header will be a simple property.
allowHeader = Object ( external _lodash _ [ "get" ] ) ( response , [ 'headers' , 'Allow' ] , '' ) ;
}
2018-12-14 05:41:57 +01:00
2021-05-19 17:09:27 +02:00
const key = Object ( external _lodash _ [ "compact" ] ) ( [ action , resource , id ] ) . join ( '/' ) ;
const isAllowed = Object ( external _lodash _ [ "includes" ] ) ( allowHeader , method ) ;
yield receiveUserPermission ( key , isAllowed ) ;
2019-10-15 17:37:08 +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 .
* /
2021-06-15 17:30:24 +02:00
function * resolvers _canUserEditEntityRecord ( kind , name , recordId ) {
const entities = yield getKindEntities ( kind ) ;
const entity = Object ( external _lodash _ [ "find" ] ) ( entities , {
kind ,
name
} ) ;
if ( ! entity ) {
return ;
}
const resource = entity . _ _unstable _rest _base ;
2021-06-15 10:52:30 +02:00
yield resolvers _canUser ( 'update' , resource , recordId ) ;
}
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
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getAutosaves ( postType , postId ) {
const {
rest _base : restBase
} = yield external _wp _data _ [ "controls" ] . resolveSelect ( 'core' , 'getPostType' , postType ) ;
const autosaves = yield Object ( external _wp _dataControls _ [ "apiFetch" ] ) ( {
path : ` /wp/v2/ ${ restBase } / ${ postId } /autosaves?context=edit `
} ) ;
2019-10-15 17:37:08 +02:00
2021-05-19 17:09:27 +02:00
if ( autosaves && autosaves . length ) {
yield receiveAutosaves ( postId , autosaves ) ;
}
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 .
* /
2021-05-19 17:09:27 +02:00
function * resolvers _getAutosave ( postType , postId ) {
yield external _wp _data _ [ "controls" ] . resolveSelect ( 'core' , 'getAutosaves' , postType , postId ) ;
2021-01-28 03:04:13 +01:00
}
/ * *
* Retrieve the frontend template used for a given link .
*
* @ param { string } link Link .
* /
2021-05-19 17:09:27 +02:00
function * resolvers _experimentalGetTemplateForLink ( link ) {
// Ideally this should be using an apiFetch call
// We could potentially do so by adding a "filter" to the `wp_template` end point.
// Also it seems the returned object is not a regular REST API post type.
let template ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
try {
template = yield regularFetch ( Object ( external _wp _url _ [ "addQueryArgs" ] ) ( link , {
'_wp-find-template' : true
} ) ) ;
} catch ( e ) { // For non-FSE themes, it is possible that this request returns an error.
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( ! template ) {
return ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
yield resolvers _getEntityRecord ( 'postType' , 'wp_template' , template . id ) ;
const record = yield external _wp _data _ [ "controls" ] . select ( 'core' , 'getEntityRecord' , 'postType' , 'wp_template' , template . id ) ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
if ( record ) {
yield receiveEntityRecords ( 'postType' , 'wp_template' , [ record ] , {
'find-template' : link
} ) ;
}
2021-01-28 03:04:13 +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' ;
} ;
2021-01-28 03:04:13 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/selectors.js
/ * *
* Internal dependencies
* /
function _ _unstableGetPendingLockRequests ( state ) {
return state . locks . requests ;
}
2021-05-19 17:09:27 +02:00
function _ _unstableIsLockAvailable ( state , store , path , {
exclusive
} ) {
const storePath = [ store , ... path ] ;
const locks = state . locks . tree ; // Validate all parents and the node itself
for ( const node of iteratePath ( locks , storePath ) ) {
if ( hasConflictingLock ( {
exclusive
} , node . locks ) ) {
return false ;
}
} // iteratePath terminates early if path is unreachable, let's
// re-fetch the node and check it exists in the tree.
2021-01-28 03:04:13 +01:00
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 ;
} // 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 ;
}
// EXTERNAL MODULE: external ["wp","element"]
2021-05-20 14:20:04 +02:00
var external _wp _element _ = _ _webpack _require _ _ ( "GRId" ) ;
2021-01-28 03:04:13 +01:00
// EXTERNAL MODULE: external ["wp","blocks"]
2021-05-20 14:20:04 +02:00
var external _wp _blocks _ = _ _webpack _require _ _ ( "HSyU" ) ;
2021-01-28 03:04:13 +01:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/entity-provider.js
/ * *
* WordPress dependencies
* /
2021-05-19 17:09:27 +02:00
const entity _provider _EMPTY _ARRAY = [ ] ;
2021-01-28 03:04:13 +01:00
/ * *
* Internal dependencies
* /
2021-05-19 17:09:27 +02:00
const entity _provider _entities = { ... defaultEntities . reduce ( ( acc , entity ) => {
if ( ! acc [ entity . kind ] ) {
acc [ entity . kind ] = { } ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
acc [ entity . kind ] [ entity . name ] = {
context : Object ( external _wp _element _ [ "createContext" ] ) ( )
} ;
return acc ;
} , { } ) ,
... kinds . reduce ( ( acc , kind ) => {
acc [ kind . name ] = { } ;
return acc ;
} , { } )
} ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
const entity _provider _getEntity = ( kind , type ) => {
2021-01-28 03:04:13 +01:00
if ( ! entity _provider _entities [ 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
}
if ( ! entity _provider _entities [ kind ] [ type ] ) {
entity _provider _entities [ kind ] [ type ] = {
context : Object ( external _wp _element _ [ "createContext" ] ) ( )
} ;
}
return entity _provider _entities [ kind ] [ type ] ;
} ;
/ * *
* Context provider component for providing
* an entity for a specific entity type .
*
* @ param { Object } props The component ' s props .
* @ param { string } props . kind The entity kind .
* @ param { string } props . type The entity type .
* @ 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 .
* /
2021-05-19 17:09:27 +02:00
function EntityProvider ( {
kind ,
type ,
id ,
children
} ) {
const Provider = entity _provider _getEntity ( kind , type ) . context . Provider ;
2021-01-28 03:04:13 +01:00
return Object ( external _wp _element _ [ "createElement" ] ) ( Provider , {
value : id
} , children ) ;
}
/ * *
* Hook that returns the ID for the nearest
* provided entity of the specified type .
*
* @ param { string } kind The entity kind .
* @ param { string } type The entity type .
* /
function useEntityId ( kind , type ) {
return Object ( external _wp _element _ [ "useContext" ] ) ( entity _provider _getEntity ( kind , type ) . context ) ;
}
/ * *
* 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 .
* @ param { string } type The entity type .
* @ 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
* /
function useEntityProp ( kind , type , prop , _id ) {
2021-05-19 17:09:27 +02:00
const providerId = useEntityId ( kind , type ) ;
const id = _id !== null && _id !== void 0 ? _id : providerId ;
const {
value ,
fullValue
} = Object ( external _wp _data _ [ "useSelect" ] ) ( select => {
const {
getEntityRecord ,
getEditedEntityRecord
} = select ( 'core' ) ;
const entity = getEntityRecord ( kind , type , id ) ; // Trigger resolver.
const editedEntity = getEditedEntityRecord ( kind , type , id ) ;
2021-01-28 03:04:13 +01:00
return entity && editedEntity ? {
value : editedEntity [ prop ] ,
fullValue : entity [ prop ]
} : { } ;
2021-05-19 17:09:27 +02:00
} , [ kind , type , id , prop ] ) ;
const {
editEntityRecord
} = Object ( external _wp _data _ [ "useDispatch" ] ) ( 'core' ) ;
const setValue = Object ( external _wp _element _ [ "useCallback" ] ) ( newValue => {
editEntityRecord ( kind , type , id , {
[ prop ] : newValue
} ) ;
2021-01-28 03:04:13 +01:00
} , [ kind , type , id , prop ] ) ;
return [ value , setValue , fullValue ] ;
}
/ * *
* 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
* peristent changes . They map directly to the props of a
* ` BlockEditorProvider ` and are intended to be used with it ,
* or similar components or hooks .
*
* @ param { string } kind The entity kind .
* @ param { string } type The entity type .
* @ param { Object } options
* @ param { string } [ options . id ] An entity ID to use instead of the context - provided one .
*
* @ return { [ WPBlock [ ] , Function , Function ] } The block array and setters .
* /
2021-05-19 17:09:27 +02:00
function useEntityBlockEditor ( kind , type , {
id : _id
} = { } ) {
const providerId = useEntityId ( kind , type ) ;
const id = _id !== null && _id !== void 0 ? _id : providerId ;
const {
content ,
blocks
} = Object ( external _wp _data _ [ "useSelect" ] ) ( select => {
const {
getEditedEntityRecord
} = select ( 'core' ) ;
const editedEntity = getEditedEntityRecord ( kind , type , id ) ;
2021-01-28 03:04:13 +01:00
return {
blocks : editedEntity . blocks ,
content : editedEntity . content
} ;
2021-05-19 17:09:27 +02:00
} , [ kind , type , id ] ) ;
const {
_ _unstableCreateUndoLevel ,
editEntityRecord
} = Object ( external _wp _data _ [ "useDispatch" ] ) ( 'core' ) ;
Object ( external _wp _element _ [ "useEffect" ] ) ( ( ) => {
2021-01-28 03:04:13 +01:00
// Load the blocks from the content if not already in state
// Guard against other instances that might have
// set content to a function already or the blocks are already in state.
if ( content && typeof content !== 'function' && ! blocks ) {
2021-05-19 17:09:27 +02:00
const parsedContent = Object ( external _wp _blocks _ [ "parse" ] ) ( content ) ;
2021-01-28 03:04:13 +01:00
editEntityRecord ( kind , type , id , {
blocks : parsedContent
} , {
undoIgnore : true
} ) ;
}
} , [ content ] ) ;
2021-05-19 17:09:27 +02:00
const onChange = Object ( external _wp _element _ [ "useCallback" ] ) ( ( newBlocks , options ) => {
const {
selection
} = options ;
const edits = {
2021-01-28 03:04:13 +01:00
blocks : newBlocks ,
2021-05-19 17:09:27 +02:00
selection
2021-01-28 03:04:13 +01:00
} ;
2021-05-19 17:09:27 +02:00
const noChange = blocks === edits . blocks ;
2021-01-28 03:04:13 +01:00
if ( noChange ) {
return _ _unstableCreateUndoLevel ( kind , type , id ) ;
} // We create a new function here on every persistent edit
// to make sure the edit makes the post dirty and creates
// a new undo level.
2021-05-19 17:09:27 +02:00
edits . content = ( {
blocks : blocksForSerialization = [ ]
} ) => Object ( external _wp _blocks _ [ "__unstableSerializeAndClean" ] ) ( blocksForSerialization ) ;
2021-01-28 03:04:13 +01:00
editEntityRecord ( kind , type , id , edits ) ;
} , [ kind , type , id , blocks ] ) ;
2021-05-19 17:09:27 +02:00
const onInput = Object ( external _wp _element _ [ "useCallback" ] ) ( ( newBlocks , options ) => {
const {
selection
} = options ;
const edits = {
2021-01-28 03:04:13 +01:00
blocks : newBlocks ,
2021-05-19 17:09:27 +02:00
selection
2021-01-28 03:04:13 +01:00
} ;
editEntityRecord ( kind , type , id , edits ) ;
} , [ kind , type , id ] ) ;
return [ blocks !== null && blocks !== void 0 ? blocks : entity _provider _EMPTY _ARRAY , onInput , onChange ] ;
}
2021-04-15 17:19:43 +02:00
// EXTERNAL MODULE: external ["wp","htmlEntities"]
2021-05-20 14:20:04 +02:00
var external _wp _htmlEntities _ = _ _webpack _require _ _ ( "rmEH" ) ;
2021-04-15 17:19:43 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/__experimental-fetch-link-suggestions.js
/ * *
* WordPress dependencies
* /
/ * *
* Filters the search by type
*
* @ typedef { 'post' | 'term' | 'post-format' } WPLinkSearchType
* /
2021-05-07 13:48:27 +02:00
/ * *
* A link with an id may be of kind post - type or taxonomy
*
* @ typedef { 'post-type' | 'taxonomy' } WPKind
* /
2021-04-15 17:19:43 +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 .
2021-05-07 13:48:27 +02:00
* @ property { WPKind } [ kind ] Link kind of post - type or taxonomy
2021-04-15 17:19:43 +02:00
* /
/ * *
* @ typedef WPEditorSettings
*
* @ 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
* /
2021-05-19 17:09:27 +02:00
const fetchLinkSuggestions = async ( search , searchOptions = { } , settings = { } ) => {
const {
isInitialSuggestions = false ,
type = undefined ,
subtype = undefined ,
page = undefined ,
perPage = isInitialSuggestions ? 3 : 20
} = searchOptions ;
const {
disablePostFormats = false
} = settings ;
const queries = [ ] ;
if ( ! type || type === 'post' ) {
queries . push ( external _wp _apiFetch _default ( ) ( {
path : Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '/wp/v2/search' , {
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 => {
return { ... result ,
meta : {
kind : 'post-type' ,
subtype
}
} ;
} ) ;
} ) . catch ( ( ) => [ ] ) // fail by returning no results
) ;
}
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 ( ) ( {
path : Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '/wp/v2/search' , {
search ,
page ,
per _page : perPage ,
type : 'term' ,
subtype
} )
} ) . then ( results => {
return results . map ( result => {
return { ... result ,
meta : {
kind : 'taxonomy' ,
subtype
}
} ;
} ) ;
} ) . catch ( ( ) => [ ] ) ) ;
}
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 ( ) ( {
path : Object ( external _wp _url _ [ "addQueryArgs" ] ) ( '/wp/v2/search' , {
search ,
page ,
per _page : perPage ,
type : 'post-format' ,
subtype
} )
2021-05-21 12:14:23 +02:00
} ) . then ( results => {
return results . map ( result => {
return { ... result ,
meta : {
kind : 'taxonomy' ,
subtype
}
} ;
} ) ;
2021-05-19 17:09:27 +02:00
} ) . catch ( ( ) => [ ] ) ) ;
}
2021-04-15 17:19:43 +02:00
2021-05-19 17:09:27 +02:00
return Promise . all ( queries ) . then ( results => {
return results . reduce ( ( accumulator , current ) => accumulator . concat ( current ) , //flatten list
[ ] ) . filter (
/ * *
* @ param { { id : number } } result
* /
result => {
return ! ! result . id ;
} ) . slice ( 0 , perPage ) . map (
/ * *
* @ param { { id : number , url : string , title ? : string , subtype ? : string , type ? : string } } result
* /
result => {
var _result$meta ;
2021-04-15 17:19:43 +02:00
2021-05-19 17:09:27 +02:00
return {
id : result . id ,
url : result . url ,
title : Object ( external _wp _htmlEntities _ [ "decodeEntities" ] ) ( result . title || '' ) || Object ( external _wp _i18n _ [ "__" ] ) ( '(no title)' ) ,
type : result . subtype || result . type ,
kind : result === null || result === void 0 ? void 0 : ( _result$meta = result . meta ) === null || _result$meta === void 0 ? void 0 : _result$meta . kind
} ;
} ) ;
} ) ;
} ;
2021-04-15 17:19:43 +02:00
/* harmony default export */ var _experimental _fetch _link _suggestions = ( fetchLinkSuggestions ) ;
2021-05-19 17:09:27 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/__experimental-fetch-remote-url-data.js
/ * *
* WordPress dependencies
* /
2021-04-15 17:19:43 +02:00
2021-05-19 17:09:27 +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
*
* @ example
* ` ` ` js
* import { _ _experimentalFetchRemoteUrlData as fetchRemoteUrlData } from '@wordpress/core-data' ;
*
* //...
*
* export function initialize ( id , settings ) {
*
* settings . _ _experimentalFetchRemoteUrlData = (
* url
* ) => fetchRemoteUrlData ( url ) ;
* ` ` `
* @ return { Promise < WPRemoteUrlData [ ] > } Remote URL data .
* /
const fetchRemoteUrlData = async url => {
const endpoint = '/__experimental/url-details' ;
const args = {
url : Object ( external _wp _url _ [ "prependHTTP" ] ) ( url )
} ;
return external _wp _apiFetch _default ( ) ( {
path : Object ( external _wp _url _ [ "addQueryArgs" ] ) ( endpoint , args )
} ) ;
} ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
/* harmony default export */ var _experimental _fetch _remote _url _data = ( fetchRemoteUrlData ) ;
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/index.js
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
// CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/index.js
2021-01-28 03:04:13 +01:00
/ * *
* WordPress dependencies
* /
/ * *
* Internal dependencies
* /
// The entity selectors/resolvers and actions are shortcuts to their generic equivalents
// (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecordss)
// Instead of getEntityRecord, the consumer could use more user-frieldly named selector: getPostType, getTaxonomy...
// The "kind" and the "name" of the entity are combined to generate these shortcuts.
2021-05-19 17:09:27 +02:00
const entitySelectors = defaultEntities . reduce ( ( result , entity ) => {
const {
kind ,
name
} = entity ;
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
result [ getMethodName ( kind , name ) ] = ( state , key ) => getEntityRecord ( state , kind , name , key ) ;
result [ getMethodName ( kind , name , 'get' , true ) ] = ( state , ... args ) => getEntityRecords ( state , kind , name , ... args ) ;
return result ;
} , { } ) ;
const entityResolvers = defaultEntities . reduce ( ( result , entity ) => {
const {
kind ,
name
} = entity ;
result [ getMethodName ( kind , name ) ] = key => resolvers _getEntityRecord ( kind , name , key ) ;
const pluralMethodName = getMethodName ( kind , name , 'get' , true ) ;
result [ pluralMethodName ] = ( ... args ) => resolvers _getEntityRecords ( kind , name , ... args ) ;
result [ pluralMethodName ] . shouldInvalidate = ( action , ... args ) => resolvers _getEntityRecords . shouldInvalidate ( action , kind , name , ... args ) ;
return result ;
} , { } ) ;
const entityActions = defaultEntities . reduce ( ( result , entity ) => {
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 ,
controls : { ... build _module _controls ,
... external _wp _dataControls _ [ "controls" ]
} ,
actions : { ... build _module _actions _namespaceObject ,
... entityActions ,
... locks _actions _namespaceObject
} ,
selectors : { ... build _module _selectors _namespaceObject ,
... entitySelectors ,
... locks _selectors _namespaceObject
} ,
resolvers : { ... resolvers _namespaceObject ,
... entityResolvers
}
} ;
/ * *
* Store definition for the code data namespace .
*
* @ see https : //github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
*
* @ type { Object }
* /
const build _module _store = Object ( external _wp _data _ [ "createReduxStore" ] ) ( STORE _NAME , storeConfig ) ;
Object ( external _wp _data _ [ "register" ] ) ( build _module _store ) ;
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "l3Sj" :
2021-05-19 17:09:27 +02:00
/***/ ( function ( module , exports ) {
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "i18n" ] ; } ( ) ) ;
2021-05-19 17:09:27 +02:00
/***/ } ) ,
2021-05-20 14:20:04 +02:00
/***/ "pPDe" :
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
2021-05-19 17:09:27 +02:00
"use strict" ;
2021-05-20 14:20:04 +02:00
var LEAF _KEY , hasWeakMap ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
/ * *
* Arbitrary value used as key for referencing cache object in WeakMap tree .
*
* @ type { Object }
* /
LEAF _KEY = { } ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
/ * *
* Whether environment supports WeakMap .
*
* @ type { boolean }
* /
hasWeakMap = typeof WeakMap !== 'undefined' ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
/ * *
* Returns the first argument as the sole entry in an array .
*
* @ param { * } value Value to return .
*
* @ return { Array } Value returned as entry in array .
* /
function arrayOf ( value ) {
return [ value ] ;
2021-05-19 17:09:27 +02:00
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
/ * *
2021-05-20 14:20:04 +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 .
2021-05-19 17:09:27 +02:00
*
2021-05-20 14:20:04 +02:00
* @ param { * } value Value to test .
2021-05-19 17:09:27 +02:00
*
2021-05-20 14:20:04 +02:00
* @ return { boolean } Whether value is object - like .
2021-05-19 17:09:27 +02:00
* /
2021-05-20 14:20:04 +02:00
function isObjectLike ( value ) {
return ! ! value && 'object' === typeof value ;
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
/ * *
* Creates and returns a new cache object .
*
* @ return { Object } Cache object .
* /
function createCache ( ) {
var cache = {
clear : function ( ) {
cache . head = null ;
} ,
} ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
return cache ;
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
/ * *
* Returns true if entries within the two arrays are strictly equal by
* reference from a starting index .
*
* @ param { Array } a First array .
* @ param { Array } b Second array .
* @ param { number } fromIndex Index from which to start comparison .
*
* @ return { boolean } Whether arrays are shallowly equal .
* /
function isShallowEqual ( a , b , fromIndex ) {
var i ;
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
if ( a . length !== b . length ) {
return false ;
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
for ( i = fromIndex ; i < a . length ; i ++ ) {
if ( a [ i ] !== b [ i ] ) {
return false ;
}
}
2021-05-19 17:09:27 +02:00
2021-05-20 14:20:04 +02:00
return true ;
}
2021-01-28 03:04:13 +01:00
2021-05-19 17:09:27 +02:00
/ * *
2021-05-20 14:20:04 +02:00
* 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 .
*
* @ param { Function } selector Selector function .
* @ param { Function } getDependants Dependant getter returning an immutable
* reference or array of reference used in
* cache bust consideration .
*
* @ return { Function } Memoized selector .
2021-05-19 17:09:27 +02:00
* /
2021-05-20 14:20:04 +02:00
/* harmony default export */ _ _webpack _exports _ _ [ "a" ] = ( function ( selector , getDependants ) {
var rootCache , getCache ;
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
// Use object source as dependant if getter not provided
if ( ! getDependants ) {
getDependants = arrayOf ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
/ * *
* Returns the root cache . If WeakMap is supported , this is assigned to the
* root WeakMap cache set , otherwise it is a shared instance of the default
* cache object .
*
* @ return { ( WeakMap | Object ) } Root cache object .
* /
function getRootCache ( ) {
return rootCache ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +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
*
* @ param { Array } dependants Selector dependants .
*
* @ return { Object } Cache object .
* /
function getWeakMapCache ( dependants ) {
var caches = rootCache ,
isUniqueByDependants = true ,
i , dependant , map , cache ;
2019-09-19 17:19:18 +02:00
2021-05-20 14:20:04 +02:00
for ( i = 0 ; i < dependants . length ; i ++ ) {
dependant = dependants [ i ] ;
2019-10-15 17:37:08 +02:00
2021-05-20 14:20:04 +02:00
// Can only compose WeakMap from object-like key.
if ( ! isObjectLike ( dependant ) ) {
isUniqueByDependants = false ;
break ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
// Does current segment of cache already have a WeakMap?
if ( caches . has ( dependant ) ) {
// Traverse into nested WeakMap.
caches = caches . get ( dependant ) ;
} else {
// Create, set, and traverse into a new one.
map = new WeakMap ( ) ;
caches . set ( dependant , map ) ;
caches = map ;
}
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
// We use an arbitrary (but consistent) object as key for the last item
// in the WeakMap to serve as our running cache.
if ( ! caches . has ( LEAF _KEY ) ) {
cache = createCache ( ) ;
cache . isUniqueByDependants = isUniqueByDependants ;
caches . set ( LEAF _KEY , cache ) ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
return caches . get ( LEAF _KEY ) ;
}
2021-04-15 17:19:43 +02:00
2021-05-20 14:20:04 +02:00
// Assign cache handler by availability of WeakMap
getCache = hasWeakMap ? getWeakMapCache : getRootCache ;
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
/ * *
* Resets root memoization cache .
* /
function clear ( ) {
rootCache = hasWeakMap ? new WeakMap ( ) : createCache ( ) ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
// eslint-disable-next-line jsdoc/check-param-names
/ * *
* The augmented selector call , considering first whether dependants have
* changed before passing it to underlying memoize function .
*
* @ param { Object } source Source object for derivation .
* @ param { ... * } extraArgs Additional arguments to pass to selector .
*
* @ return { * } Selector result .
* /
function callSelector ( /* source, ...extraArgs */ ) {
var len = arguments . length ,
cache , node , i , args , dependants ;
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
// Create copy of arguments (avoid leaking deoptimization).
args = new Array ( len ) ;
for ( i = 0 ; i < len ; i ++ ) {
args [ i ] = arguments [ i ] ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
dependants = getDependants . apply ( null , args ) ;
cache = getCache ( dependants ) ;
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
// If not guaranteed uniqueness by dependants (primitive type or lack
// of WeakMap support), 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 ) ) {
cache . clear ( ) ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
cache . lastDependants = dependants ;
}
2021-01-28 03:04:13 +01:00
2021-05-20 14:20:04 +02:00
node = cache . head ;
while ( node ) {
// Check whether node arguments match arguments
if ( ! isShallowEqual ( node . args , args , 1 ) ) {
node = node . next ;
continue ;
}
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
// At this point we can assume we've found a match
2019-10-15 17:37:08 +02:00
2021-05-20 14:20:04 +02:00
// Surface matched node to head if not already
if ( node !== cache . head ) {
// Adjust siblings to point to each other.
node . prev . next = node . next ;
if ( node . next ) {
node . next . prev = node . prev ;
}
2020-02-06 22:03:31 +01:00
2021-05-20 14:20:04 +02:00
node . next = cache . head ;
node . prev = null ;
cache . head . prev = node ;
cache . head = node ;
}
2019-10-15 17:37:08 +02:00
2021-05-20 14:20:04 +02:00
// Return immediately
return node . val ;
}
2019-10-15 17:37:08 +02:00
2021-05-20 14:20:04 +02:00
// No cached value found. Continue to insertion phase:
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
node = {
// Generate the result from original function
val : selector . apply ( null , args ) ,
} ;
2020-01-08 12:57:23 +01:00
2021-05-20 14:20:04 +02:00
// Avoid including the source object in the cache.
args [ 0 ] = null ;
node . args = args ;
2020-02-06 22:03:31 +01:00
2021-05-20 14:20:04 +02:00
// Don't need to check whether node is already head, since it would
// have been returned above already if it was
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
// Shift existing head down list
if ( cache . head ) {
cache . head . prev = node ;
node . next = cache . head ;
}
2020-01-08 12:57:23 +01:00
2021-05-20 14:20:04 +02:00
cache . head = node ;
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
return node . val ;
}
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
callSelector . getDependants = getDependants ;
callSelector . clear = clear ;
clear ( ) ;
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
return callSelector ;
} ) ;
2018-12-18 04:14:52 +01:00
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
/***/ } ) ,
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
/***/ "rl8x" :
/***/ ( function ( module , exports ) {
2021-04-15 17:19:43 +02:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "isShallowEqual" ] ; } ( ) ) ;
2021-04-15 17:19:43 +02:00
2021-05-20 14:20:04 +02:00
/***/ } ) ,
2021-04-15 17:19:43 +02:00
2021-05-20 14:20:04 +02:00
/***/ "rmEH" :
/***/ ( function ( module , exports ) {
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "htmlEntities" ] ; } ( ) ) ;
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
/***/ } ) ,
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
/***/ "ywyh" :
/***/ ( function ( module , exports ) {
2018-12-14 05:41:57 +01:00
2021-05-20 14:20:04 +02:00
( function ( ) { module . exports = window [ "wp" ] [ "apiFetch" ] ; } ( ) ) ;
2018-12-14 05:41:57 +01:00
/***/ } )
2018-12-18 04:14:52 +01:00
/******/ } ) ;