@wordpress/core-data 4.0.1 → 4.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -7
- package/build/actions.js +178 -122
- package/build/actions.js.map +1 -1
- package/build/batch/default-processor.js +58 -27
- package/build/batch/default-processor.js.map +1 -1
- package/build/entities.js +70 -23
- package/build/entities.js.map +1 -1
- package/build/fetch/__experimental-fetch-url-data.js +1 -1
- package/build/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build/index.js +9 -17
- package/build/index.js.map +1 -1
- package/build/locks/actions.js +17 -77
- package/build/locks/actions.js.map +1 -1
- package/build/locks/engine.js +77 -0
- package/build/locks/engine.js.map +1 -0
- package/build/locks/reducer.js +1 -5
- package/build/locks/reducer.js.map +1 -1
- package/build/locks/selectors.js +6 -6
- package/build/locks/selectors.js.map +1 -1
- package/build/queried-data/get-query-parts.js +9 -4
- package/build/queried-data/get-query-parts.js.map +1 -1
- package/build/queried-data/selectors.js +3 -9
- package/build/queried-data/selectors.js.map +1 -1
- package/build/reducer.js +17 -22
- package/build/reducer.js.map +1 -1
- package/build/resolvers.js +151 -97
- package/build/resolvers.js.map +1 -1
- package/build/selectors.js +79 -14
- package/build/selectors.js.map +1 -1
- package/build/utils/forward-resolver.js +23 -0
- package/build/utils/forward-resolver.js.map +1 -0
- package/build/utils/index.js +11 -3
- package/build/utils/index.js.map +1 -1
- package/build/utils/is-raw-attribute.js +19 -0
- package/build/utils/is-raw-attribute.js.map +1 -0
- package/build-module/actions.js +155 -112
- package/build-module/actions.js.map +1 -1
- package/build-module/batch/default-processor.js +57 -27
- package/build-module/batch/default-processor.js.map +1 -1
- package/build-module/entities.js +65 -19
- package/build-module/entities.js.map +1 -1
- package/build-module/fetch/__experimental-fetch-url-data.js +1 -1
- package/build-module/fetch/__experimental-fetch-url-data.js.map +1 -1
- package/build-module/index.js +10 -14
- package/build-module/index.js.map +1 -1
- package/build-module/locks/actions.js +14 -68
- package/build-module/locks/actions.js.map +1 -1
- package/build-module/locks/engine.js +66 -0
- package/build-module/locks/engine.js.map +1 -0
- package/build-module/locks/reducer.js +1 -2
- package/build-module/locks/reducer.js.map +1 -1
- package/build-module/locks/selectors.js +4 -4
- package/build-module/locks/selectors.js.map +1 -1
- package/build-module/queried-data/get-query-parts.js +9 -4
- package/build-module/queried-data/get-query-parts.js.map +1 -1
- package/build-module/queried-data/selectors.js +3 -9
- package/build-module/queried-data/selectors.js.map +1 -1
- package/build-module/reducer.js +15 -19
- package/build-module/reducer.js.map +1 -1
- package/build-module/resolvers.js +123 -81
- package/build-module/resolvers.js.map +1 -1
- package/build-module/selectors.js +74 -13
- package/build-module/selectors.js.map +1 -1
- package/build-module/utils/forward-resolver.js +15 -0
- package/build-module/utils/forward-resolver.js.map +1 -0
- package/build-module/utils/index.js +2 -1
- package/build-module/utils/index.js.map +1 -1
- package/build-module/utils/is-raw-attribute.js +12 -0
- package/build-module/utils/is-raw-attribute.js.map +1 -0
- package/package.json +10 -11
- package/src/actions.js +163 -194
- package/src/batch/default-processor.js +57 -26
- package/src/batch/test/default-processor.js +53 -26
- package/src/entities.js +47 -19
- package/src/fetch/__experimental-fetch-url-data.js +1 -1
- package/src/index.js +7 -10
- package/src/locks/actions.js +10 -61
- package/src/locks/engine.js +43 -0
- package/src/locks/reducer.js +1 -3
- package/src/locks/selectors.js +4 -4
- package/src/locks/test/engine.js +135 -0
- package/src/locks/test/reducer.js +1 -1
- package/src/locks/test/selectors.js +105 -124
- package/src/queried-data/get-query-parts.js +11 -6
- package/src/queried-data/selectors.js +2 -9
- package/src/queried-data/test/get-query-parts.js +1 -1
- package/src/queried-data/test/selectors.js +1 -0
- package/src/reducer.js +14 -19
- package/src/resolvers.js +132 -120
- package/src/selectors.js +156 -44
- package/src/test/actions.js +330 -170
- package/src/test/entities.js +40 -26
- package/src/test/resolvers.js +270 -223
- package/src/test/selectors.js +127 -1
- package/src/utils/forward-resolver.js +14 -0
- package/src/utils/index.js +2 -1
- package/src/utils/is-raw-attribute.js +11 -0
- package/src/utils/test/is-raw-attribute.js +22 -0
- package/build/controls.js +0 -44
- package/build/controls.js.map +0 -1
- package/build/locks/index.js +0 -47
- package/build/locks/index.js.map +0 -1
- package/build/utils/if-not-resolved.js +0 -46
- package/build/utils/if-not-resolved.js.map +0 -1
- package/build-module/controls.js +0 -31
- package/build-module/controls.js.map +0 -1
- package/build-module/locks/index.js +0 -4
- package/build-module/locks/index.js.map +0 -1
- package/build-module/utils/if-not-resolved.js +0 -36
- package/build-module/utils/if-not-resolved.js.map +0 -1
- package/src/controls.js +0 -31
- package/src/locks/index.js +0 -3
- package/src/locks/test/actions.js +0 -307
- package/src/test/integration.js +0 -264
- package/src/utils/if-not-resolved.js +0 -40
- package/src/utils/test/if-not-resolved.js +0 -75
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["keyBy","map","groupBy","flowRight","isEqual","get","combineReducers","isShallowEqual","ifMatchingAction","replaceAction","reducer","queriedDataReducer","defaultEntities","DEFAULT_ENTITY_KEY","locksReducer","terms","state","action","type","taxonomy","users","byId","queries","queryID","user","id","currentUser","taxonomies","currentTheme","undefined","stylesheet","themes","themeSupports","entity","entityConfig","name","kind","key","queriedData","edits","context","query","nextState","record","items","recordId","nextEdits","Object","keys","reduce","acc","persistedEdits","length","forEach","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","entries","memo","subEntities","kindReducer","kindMemo","newData","data","UNDO_INITIAL_STATE","offset","lastEditAction","undo","isCreateUndoLevel","isUndoOrRedo","meta","isUndo","isRedo","some","transientEdits","flattenedUndo","slice","pop","push","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","locks"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { keyBy, map, groupBy, flowRight, isEqual, get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { defaultEntities, DEFAULT_ENTITY_KEY } from './entities';\nimport { reducer as locksReducer } from './locks';\n\n/**\n * Reducer managing terms state. Keyed by taxonomy slug, the value is either\n * undefined (if no request has been made for given taxonomy), null (if a\n * request is in-flight for given taxonomy), or the array of terms for the\n * taxonomy.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function terms( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TERMS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.taxonomy ]: action.terms,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t...keyBy( action.users, 'id' ),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: map(\n\t\t\t\t\t\taction.users,\n\t\t\t\t\t\t( user ) => user.id\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing taxonomies.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function taxonomies( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TAXONOMIES':\n\t\t\treturn action.taxonomies;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing installed themes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function themes( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentTheme.stylesheet ]: action.currentTheme,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing theme supports data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function themeSupports( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_SUPPORTS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.themeSupports,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {Function} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn flowRight( [\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\tget(\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\t'raw',\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = defaultEntities, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a dynamic reducer for the entities\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = groupBy( newConfig, 'kind' );\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.entries( entitiesByKind ).reduce(\n\t\t\t\t( memo, [ kind, subEntities ] ) => {\n\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\tsubEntities.reduce(\n\t\t\t\t\t\t\t( kindMemo, entityConfig ) => ( {\n\t\t\t\t\t\t\t\t...kindMemo,\n\t\t\t\t\t\t\t\t[ entityConfig.name ]: entity( entityConfig ),\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tmemo[ kind ] = kindReducer;\n\t\t\t\t\treturn memo;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.data, action );\n\n\tif (\n\t\tnewData === state.data &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\tdata: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * Reducer keeping track of entity edit undo history.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nconst UNDO_INITIAL_STATE = [];\nUNDO_INITIAL_STATE.offset = 0;\nlet lastEditAction;\nexport function undo( state = UNDO_INITIAL_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\tlet isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';\n\t\t\tconst isUndoOrRedo =\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t( action.meta.isUndo || action.meta.isRedo );\n\t\t\tif ( isCreateUndoLevel ) {\n\t\t\t\taction = lastEditAction;\n\t\t\t} else if ( ! isUndoOrRedo ) {\n\t\t\t\t// Don't lose the last edit cache if the new one only has transient edits.\n\t\t\t\t// Transient edits don't create new levels so updating the cache would make\n\t\t\t\t// us skip an edit later when creating levels explicitly.\n\t\t\t\tif (\n\t\t\t\t\tObject.keys( action.edits ).some(\n\t\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlastEditAction = action;\n\t\t\t\t} else {\n\t\t\t\t\tlastEditAction = {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tedits: {\n\t\t\t\t\t\t\t...( lastEditAction && lastEditAction.edits ),\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet nextState;\n\t\t\tif ( isUndoOrRedo ) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.offset =\n\t\t\t\t\tstate.offset + ( action.meta.isUndo ? -1 : 1 );\n\n\t\t\t\tif ( state.flattenedUndo ) {\n\t\t\t\t\t// The first undo in a sequence of undos might happen while we have\n\t\t\t\t\t// flattened undos in state. If this is the case, we want execution\n\t\t\t\t\t// to continue as if we were creating an explicit undo level. This\n\t\t\t\t\t// will result in an extra undo level being appended with the flattened\n\t\t\t\t\t// undo values.\n\t\t\t\t\tisCreateUndoLevel = true;\n\t\t\t\t\taction = lastEditAction;\n\t\t\t\t} else {\n\t\t\t\t\treturn nextState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Transient edits don't create an undo level, but are\n\t\t\t// reachable in the next meaningful edit to which they\n\t\t\t// are merged. They are defined in the entity's config.\n\t\t\tif (\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t! Object.keys( action.edits ).some(\n\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.flattenedUndo = {\n\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t...action.edits,\n\t\t\t\t};\n\t\t\t\tnextState.offset = state.offset;\n\t\t\t\treturn nextState;\n\t\t\t}\n\n\t\t\t// Clear potential redos, because this only supports linear history.\n\t\t\tnextState =\n\t\t\t\tnextState || state.slice( 0, state.offset || undefined );\n\t\t\tnextState.offset = nextState.offset || 0;\n\t\t\tnextState.pop();\n\t\t\tif ( ! isCreateUndoLevel ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.meta.undo.kind,\n\t\t\t\t\tname: action.meta.undo.name,\n\t\t\t\t\trecordId: action.meta.undo.recordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t\t...action.meta.undo.edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t\t// When an edit is a function it's an optimization to avoid running some expensive operation.\n\t\t\t// We can't rely on the function references being the same so we opt out of comparing them here.\n\t\t\tconst comparisonUndoEdits = Object.values(\n\t\t\t\taction.meta.undo.edits\n\t\t\t).filter( ( edit ) => typeof edit !== 'function' );\n\t\t\tconst comparisonEdits = Object.values( action.edits ).filter(\n\t\t\t\t( edit ) => typeof edit !== 'function'\n\t\t\t);\n\t\t\tif ( ! isShallowEqual( comparisonUndoEdits, comparisonEdits ) ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.kind,\n\t\t\t\t\tname: action.name,\n\t\t\t\t\trecordId: action.recordId,\n\t\t\t\t\tedits: isCreateUndoLevel\n\t\t\t\t\t\t? { ...state.flattenedUndo, ...action.edits }\n\t\t\t\t\t\t: action.edits,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentUser,\n\ttaxonomies,\n\tthemes,\n\tthemeSupports,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tlocks: locksReducer,\n} );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["keyBy","map","groupBy","flowRight","isEqual","get","combineReducers","isShallowEqual","ifMatchingAction","replaceAction","reducer","queriedDataReducer","defaultEntities","DEFAULT_ENTITY_KEY","terms","state","action","type","taxonomy","users","byId","queries","queryID","user","id","currentUser","taxonomies","currentTheme","undefined","stylesheet","currentGlobalStylesId","themeBaseGlobalStyles","globalStyles","entity","entityConfig","name","kind","key","queriedData","edits","context","query","nextState","record","items","recordId","nextEdits","Object","keys","reduce","acc","persistedEdits","length","forEach","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","entries","memo","subEntities","kindReducer","kindMemo","newData","data","UNDO_INITIAL_STATE","offset","lastEditAction","undo","isCreateUndoLevel","isUndoOrRedo","meta","isUndo","isRedo","some","transientEdits","flattenedUndo","slice","pop","push","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { keyBy, map, groupBy, flowRight, isEqual, get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { defaultEntities, DEFAULT_ENTITY_KEY } from './entities';\n\n/**\n * Reducer managing terms state. Keyed by taxonomy slug, the value is either\n * undefined (if no request has been made for given taxonomy), null (if a\n * request is in-flight for given taxonomy), or the array of terms for the\n * taxonomy.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function terms( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TERMS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.taxonomy ]: action.terms,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t...keyBy( action.users, 'id' ),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: map(\n\t\t\t\t\t\taction.users,\n\t\t\t\t\t\t( user ) => user.id\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing taxonomies.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function taxonomies( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TAXONOMIES':\n\t\t\treturn action.taxonomies;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current global styles id.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function currentGlobalStylesId( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_GLOBAL_STYLES_ID':\n\t\t\treturn action.id;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the theme base global styles.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function themeBaseGlobalStyles( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_GLOBAL_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.stylesheet ]: action.globalStyles,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {Function} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn flowRight( [\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\tget(\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\t'raw',\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = defaultEntities, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a dynamic reducer for the entities\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = groupBy( newConfig, 'kind' );\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.entries( entitiesByKind ).reduce(\n\t\t\t\t( memo, [ kind, subEntities ] ) => {\n\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\tsubEntities.reduce(\n\t\t\t\t\t\t\t( kindMemo, entityConfig ) => ( {\n\t\t\t\t\t\t\t\t...kindMemo,\n\t\t\t\t\t\t\t\t[ entityConfig.name ]: entity( entityConfig ),\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tmemo[ kind ] = kindReducer;\n\t\t\t\t\treturn memo;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.data, action );\n\n\tif (\n\t\tnewData === state.data &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\tdata: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * Reducer keeping track of entity edit undo history.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nconst UNDO_INITIAL_STATE = [];\nUNDO_INITIAL_STATE.offset = 0;\nlet lastEditAction;\nexport function undo( state = UNDO_INITIAL_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\tlet isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';\n\t\t\tconst isUndoOrRedo =\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t( action.meta.isUndo || action.meta.isRedo );\n\t\t\tif ( isCreateUndoLevel ) {\n\t\t\t\taction = lastEditAction;\n\t\t\t} else if ( ! isUndoOrRedo ) {\n\t\t\t\t// Don't lose the last edit cache if the new one only has transient edits.\n\t\t\t\t// Transient edits don't create new levels so updating the cache would make\n\t\t\t\t// us skip an edit later when creating levels explicitly.\n\t\t\t\tif (\n\t\t\t\t\tObject.keys( action.edits ).some(\n\t\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlastEditAction = action;\n\t\t\t\t} else {\n\t\t\t\t\tlastEditAction = {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tedits: {\n\t\t\t\t\t\t\t...( lastEditAction && lastEditAction.edits ),\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet nextState;\n\t\t\tif ( isUndoOrRedo ) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.offset =\n\t\t\t\t\tstate.offset + ( action.meta.isUndo ? -1 : 1 );\n\n\t\t\t\tif ( state.flattenedUndo ) {\n\t\t\t\t\t// The first undo in a sequence of undos might happen while we have\n\t\t\t\t\t// flattened undos in state. If this is the case, we want execution\n\t\t\t\t\t// to continue as if we were creating an explicit undo level. This\n\t\t\t\t\t// will result in an extra undo level being appended with the flattened\n\t\t\t\t\t// undo values.\n\t\t\t\t\tisCreateUndoLevel = true;\n\t\t\t\t\taction = lastEditAction;\n\t\t\t\t} else {\n\t\t\t\t\treturn nextState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Transient edits don't create an undo level, but are\n\t\t\t// reachable in the next meaningful edit to which they\n\t\t\t// are merged. They are defined in the entity's config.\n\t\t\tif (\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t! Object.keys( action.edits ).some(\n\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.flattenedUndo = {\n\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t...action.edits,\n\t\t\t\t};\n\t\t\t\tnextState.offset = state.offset;\n\t\t\t\treturn nextState;\n\t\t\t}\n\n\t\t\t// Clear potential redos, because this only supports linear history.\n\t\t\tnextState =\n\t\t\t\tnextState || state.slice( 0, state.offset || undefined );\n\t\t\tnextState.offset = nextState.offset || 0;\n\t\t\tnextState.pop();\n\t\t\tif ( ! isCreateUndoLevel ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.meta.undo.kind,\n\t\t\t\t\tname: action.meta.undo.name,\n\t\t\t\t\trecordId: action.meta.undo.recordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t\t...action.meta.undo.edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t\t// When an edit is a function it's an optimization to avoid running some expensive operation.\n\t\t\t// We can't rely on the function references being the same so we opt out of comparing them here.\n\t\t\tconst comparisonUndoEdits = Object.values(\n\t\t\t\taction.meta.undo.edits\n\t\t\t).filter( ( edit ) => typeof edit !== 'function' );\n\t\t\tconst comparisonEdits = Object.values( action.edits ).filter(\n\t\t\t\t( edit ) => typeof edit !== 'function'\n\t\t\t);\n\t\t\tif ( ! isShallowEqual( comparisonUndoEdits, comparisonEdits ) ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.kind,\n\t\t\t\t\tname: action.name,\n\t\t\t\t\trecordId: action.recordId,\n\t\t\t\t\tedits: isCreateUndoLevel\n\t\t\t\t\t\t? { ...state.flattenedUndo, ...action.edits }\n\t\t\t\t\t\t: action.edits,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentGlobalStylesId,\n\tcurrentUser,\n\tthemeBaseGlobalStyles,\n\ttaxonomies,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n} );\n"]}
|
|
@@ -7,22 +7,14 @@ import { find, includes, get, hasIn, compact, uniq } from 'lodash';
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { addQueryArgs } from '@wordpress/url';
|
|
10
|
-
import
|
|
11
|
-
import { apiFetch } from '@wordpress/data-controls';
|
|
10
|
+
import apiFetch from '@wordpress/api-fetch';
|
|
12
11
|
/**
|
|
13
12
|
* Internal dependencies
|
|
14
13
|
*/
|
|
15
14
|
|
|
16
|
-
import { regularFetch } from './controls';
|
|
17
15
|
import { STORE_NAME } from './name';
|
|
18
|
-
/**
|
|
19
|
-
* Internal dependencies
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
import { receiveUserQuery, receiveCurrentTheme, receiveCurrentUser, receiveEntityRecords, receiveThemeSupports, receiveEmbedPreview, receiveUserPermission, receiveAutosaves } from './actions';
|
|
23
16
|
import { getKindEntities, DEFAULT_ENTITY_KEY } from './entities';
|
|
24
|
-
import {
|
|
25
|
-
import { __unstableAcquireStoreLock, __unstableReleaseStoreLock } from './locks';
|
|
17
|
+
import { forwardResolver, getNormalizedCommaSeparable } from './utils';
|
|
26
18
|
/**
|
|
27
19
|
* Requests authors from the REST API.
|
|
28
20
|
*
|
|
@@ -30,23 +22,27 @@ import { __unstableAcquireStoreLock, __unstableReleaseStoreLock } from './locks'
|
|
|
30
22
|
* include with request.
|
|
31
23
|
*/
|
|
32
24
|
|
|
33
|
-
export
|
|
25
|
+
export const getAuthors = query => async ({
|
|
26
|
+
dispatch
|
|
27
|
+
}) => {
|
|
34
28
|
const path = addQueryArgs('/wp/v2/users/?who=authors&per_page=100', query);
|
|
35
|
-
const users =
|
|
29
|
+
const users = await apiFetch({
|
|
36
30
|
path
|
|
37
31
|
});
|
|
38
|
-
|
|
39
|
-
}
|
|
32
|
+
dispatch.receiveUserQuery(path, users);
|
|
33
|
+
};
|
|
40
34
|
/**
|
|
41
35
|
* Requests the current user from the REST API.
|
|
42
36
|
*/
|
|
43
37
|
|
|
44
|
-
export
|
|
45
|
-
|
|
38
|
+
export const getCurrentUser = () => async ({
|
|
39
|
+
dispatch
|
|
40
|
+
}) => {
|
|
41
|
+
const currentUser = await apiFetch({
|
|
46
42
|
path: '/wp/v2/users/me'
|
|
47
43
|
});
|
|
48
|
-
|
|
49
|
-
}
|
|
44
|
+
dispatch.receiveCurrentUser(currentUser);
|
|
45
|
+
};
|
|
50
46
|
/**
|
|
51
47
|
* Requests an entity's record from the REST API.
|
|
52
48
|
*
|
|
@@ -57,18 +53,21 @@ export function* getCurrentUser() {
|
|
|
57
53
|
* include with request.
|
|
58
54
|
*/
|
|
59
55
|
|
|
60
|
-
export
|
|
61
|
-
|
|
56
|
+
export const getEntityRecord = (kind, name, key = '', query) => async ({
|
|
57
|
+
select,
|
|
58
|
+
dispatch
|
|
59
|
+
}) => {
|
|
60
|
+
const entities = await dispatch(getKindEntities(kind));
|
|
62
61
|
const entity = find(entities, {
|
|
63
62
|
kind,
|
|
64
63
|
name
|
|
65
64
|
});
|
|
66
65
|
|
|
67
|
-
if (!entity) {
|
|
66
|
+
if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
|
|
68
67
|
return;
|
|
69
68
|
}
|
|
70
69
|
|
|
71
|
-
const lock =
|
|
70
|
+
const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'data', kind, name, key], {
|
|
72
71
|
exclusive: false
|
|
73
72
|
});
|
|
74
73
|
|
|
@@ -88,7 +87,7 @@ export function* getEntityRecord(kind, name, key = '', query) {
|
|
|
88
87
|
// eslint-disable-next-line @wordpress/no-unused-vars-before-return
|
|
89
88
|
|
|
90
89
|
|
|
91
|
-
const path = addQueryArgs(entity.baseURL + '/' + key, { ...entity.baseURLParams,
|
|
90
|
+
const path = addQueryArgs(entity.baseURL + (key ? '/' + key : ''), { ...entity.baseURLParams,
|
|
92
91
|
...query
|
|
93
92
|
});
|
|
94
93
|
|
|
@@ -99,33 +98,33 @@ export function* getEntityRecord(kind, name, key = '', query) {
|
|
|
99
98
|
// fields, so it's tested here, prior to initiating the REST request,
|
|
100
99
|
// and without causing `getEntityRecords` resolution to occur.
|
|
101
100
|
|
|
102
|
-
const hasRecords =
|
|
101
|
+
const hasRecords = select.hasEntityRecords(kind, name, query);
|
|
103
102
|
|
|
104
103
|
if (hasRecords) {
|
|
105
104
|
return;
|
|
106
105
|
}
|
|
107
106
|
}
|
|
108
107
|
|
|
109
|
-
const record =
|
|
108
|
+
const record = await apiFetch({
|
|
110
109
|
path
|
|
111
110
|
});
|
|
112
|
-
|
|
111
|
+
dispatch.receiveEntityRecords(kind, name, record, query);
|
|
113
112
|
} catch (error) {// We need a way to handle and access REST API errors in state
|
|
114
113
|
// Until then, catching the error ensures the resolver is marked as resolved.
|
|
115
114
|
} finally {
|
|
116
|
-
|
|
115
|
+
dispatch.__unstableReleaseStoreLock(lock);
|
|
117
116
|
}
|
|
118
|
-
}
|
|
117
|
+
};
|
|
119
118
|
/**
|
|
120
119
|
* Requests an entity's record from the REST API.
|
|
121
120
|
*/
|
|
122
121
|
|
|
123
|
-
export const getRawEntityRecord =
|
|
122
|
+
export const getRawEntityRecord = forwardResolver('getEntityRecord');
|
|
124
123
|
/**
|
|
125
124
|
* Requests an entity's record from the REST API.
|
|
126
125
|
*/
|
|
127
126
|
|
|
128
|
-
export const getEditedEntityRecord =
|
|
127
|
+
export const getEditedEntityRecord = forwardResolver('getEntityRecord');
|
|
129
128
|
/**
|
|
130
129
|
* Requests the entity's records from the REST API.
|
|
131
130
|
*
|
|
@@ -134,18 +133,20 @@ export const getEditedEntityRecord = ifNotResolved(getRawEntityRecord, 'getRawEn
|
|
|
134
133
|
* @param {Object?} query Query Object.
|
|
135
134
|
*/
|
|
136
135
|
|
|
137
|
-
export
|
|
138
|
-
|
|
136
|
+
export const getEntityRecords = (kind, name, query = {}) => async ({
|
|
137
|
+
dispatch
|
|
138
|
+
}) => {
|
|
139
|
+
const entities = await dispatch(getKindEntities(kind));
|
|
139
140
|
const entity = find(entities, {
|
|
140
141
|
kind,
|
|
141
142
|
name
|
|
142
143
|
});
|
|
143
144
|
|
|
144
|
-
if (!entity) {
|
|
145
|
+
if (!entity || entity !== null && entity !== void 0 && entity.__experimentalNoFetch) {
|
|
145
146
|
return;
|
|
146
147
|
}
|
|
147
148
|
|
|
148
|
-
const lock =
|
|
149
|
+
const lock = await dispatch.__unstableAcquireStoreLock(STORE_NAME, ['entities', 'data', kind, name], {
|
|
149
150
|
exclusive: false
|
|
150
151
|
});
|
|
151
152
|
|
|
@@ -164,7 +165,7 @@ export function* getEntityRecords(kind, name, query = {}) {
|
|
|
164
165
|
const path = addQueryArgs(entity.baseURL, { ...entity.baseURLParams,
|
|
165
166
|
...query
|
|
166
167
|
});
|
|
167
|
-
let records = Object.values(
|
|
168
|
+
let records = Object.values(await apiFetch({
|
|
168
169
|
path
|
|
169
170
|
})); // If we request fields but the result doesn't contain the fields,
|
|
170
171
|
// explicitely set these fields as "undefined"
|
|
@@ -182,28 +183,28 @@ export function* getEntityRecords(kind, name, query = {}) {
|
|
|
182
183
|
});
|
|
183
184
|
}
|
|
184
185
|
|
|
185
|
-
|
|
186
|
+
dispatch.receiveEntityRecords(kind, name, records, query); // When requesting all fields, the list of results can be used to
|
|
186
187
|
// resolve the `getEntityRecord` selector in addition to `getEntityRecords`.
|
|
187
188
|
// See https://github.com/WordPress/gutenberg/pull/26575
|
|
188
189
|
|
|
189
190
|
if (!((_query = query) !== null && _query !== void 0 && _query._fields) && !query.context) {
|
|
190
191
|
const key = entity.key || DEFAULT_ENTITY_KEY;
|
|
191
192
|
const resolutionsArgs = records.filter(record => record[key]).map(record => [kind, name, record[key]]);
|
|
192
|
-
|
|
193
|
+
dispatch({
|
|
193
194
|
type: 'START_RESOLUTIONS',
|
|
194
195
|
selectorName: 'getEntityRecord',
|
|
195
196
|
args: resolutionsArgs
|
|
196
|
-
};
|
|
197
|
-
|
|
197
|
+
});
|
|
198
|
+
dispatch({
|
|
198
199
|
type: 'FINISH_RESOLUTIONS',
|
|
199
200
|
selectorName: 'getEntityRecord',
|
|
200
201
|
args: resolutionsArgs
|
|
201
|
-
};
|
|
202
|
+
});
|
|
202
203
|
}
|
|
203
204
|
} finally {
|
|
204
|
-
|
|
205
|
+
dispatch.__unstableReleaseStoreLock(lock);
|
|
205
206
|
}
|
|
206
|
-
}
|
|
207
|
+
};
|
|
207
208
|
|
|
208
209
|
getEntityRecords.shouldInvalidate = (action, kind, name) => {
|
|
209
210
|
return (action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS') && action.invalidateCache && kind === action.kind && name === action.name;
|
|
@@ -213,41 +214,41 @@ getEntityRecords.shouldInvalidate = (action, kind, name) => {
|
|
|
213
214
|
*/
|
|
214
215
|
|
|
215
216
|
|
|
216
|
-
export
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
export const getCurrentTheme = () => async ({
|
|
218
|
+
dispatch,
|
|
219
|
+
resolveSelect
|
|
220
|
+
}) => {
|
|
221
|
+
const activeThemes = await resolveSelect.getEntityRecords('root', 'theme', {
|
|
222
|
+
status: 'active'
|
|
219
223
|
});
|
|
220
|
-
|
|
221
|
-
}
|
|
224
|
+
dispatch.receiveCurrentTheme(activeThemes[0]);
|
|
225
|
+
};
|
|
222
226
|
/**
|
|
223
227
|
* Requests theme supports data from the index.
|
|
224
228
|
*/
|
|
225
229
|
|
|
226
|
-
export
|
|
227
|
-
const activeThemes = yield apiFetch({
|
|
228
|
-
path: '/wp/v2/themes?status=active'
|
|
229
|
-
});
|
|
230
|
-
yield receiveThemeSupports(activeThemes[0].theme_supports);
|
|
231
|
-
}
|
|
230
|
+
export const getThemeSupports = forwardResolver('getCurrentTheme');
|
|
232
231
|
/**
|
|
233
232
|
* Requests a preview from the from the Embed API.
|
|
234
233
|
*
|
|
235
234
|
* @param {string} url URL to get the preview for.
|
|
236
235
|
*/
|
|
237
236
|
|
|
238
|
-
export
|
|
237
|
+
export const getEmbedPreview = url => async ({
|
|
238
|
+
dispatch
|
|
239
|
+
}) => {
|
|
239
240
|
try {
|
|
240
|
-
const embedProxyResponse =
|
|
241
|
+
const embedProxyResponse = await apiFetch({
|
|
241
242
|
path: addQueryArgs('/oembed/1.0/proxy', {
|
|
242
243
|
url
|
|
243
244
|
})
|
|
244
245
|
});
|
|
245
|
-
|
|
246
|
+
dispatch.receiveEmbedPreview(url, embedProxyResponse);
|
|
246
247
|
} catch (error) {
|
|
247
248
|
// Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.
|
|
248
|
-
|
|
249
|
+
dispatch.receiveEmbedPreview(url, false);
|
|
249
250
|
}
|
|
250
|
-
}
|
|
251
|
+
};
|
|
251
252
|
/**
|
|
252
253
|
* Checks whether the current user can perform the given action on the given
|
|
253
254
|
* REST resource.
|
|
@@ -258,7 +259,9 @@ export function* getEmbedPreview(url) {
|
|
|
258
259
|
* @param {?string} id ID of the rest resource to check.
|
|
259
260
|
*/
|
|
260
261
|
|
|
261
|
-
export
|
|
262
|
+
export const canUser = (action, resource, id) => async ({
|
|
263
|
+
dispatch
|
|
264
|
+
}) => {
|
|
262
265
|
const methods = {
|
|
263
266
|
create: 'POST',
|
|
264
267
|
read: 'GET',
|
|
@@ -275,7 +278,7 @@ export function* canUser(action, resource, id) {
|
|
|
275
278
|
let response;
|
|
276
279
|
|
|
277
280
|
try {
|
|
278
|
-
response =
|
|
281
|
+
response = await apiFetch({
|
|
279
282
|
path,
|
|
280
283
|
// Ideally this would always be an OPTIONS request, but unfortunately there's
|
|
281
284
|
// a bug in the REST API which causes the Allow header to not be sent on
|
|
@@ -304,8 +307,8 @@ export function* canUser(action, resource, id) {
|
|
|
304
307
|
|
|
305
308
|
const key = compact([action, resource, id]).join('/');
|
|
306
309
|
const isAllowed = includes(allowHeader, method);
|
|
307
|
-
|
|
308
|
-
}
|
|
310
|
+
dispatch.receiveUserPermission(key, isAllowed);
|
|
311
|
+
};
|
|
309
312
|
/**
|
|
310
313
|
* Checks whether the current user can perform the given action on the given
|
|
311
314
|
* REST resource.
|
|
@@ -315,8 +318,10 @@ export function* canUser(action, resource, id) {
|
|
|
315
318
|
* @param {string} recordId Record's id.
|
|
316
319
|
*/
|
|
317
320
|
|
|
318
|
-
export
|
|
319
|
-
|
|
321
|
+
export const canUserEditEntityRecord = (kind, name, recordId) => async ({
|
|
322
|
+
dispatch
|
|
323
|
+
}) => {
|
|
324
|
+
const entities = await dispatch(getKindEntities(kind));
|
|
320
325
|
const entity = find(entities, {
|
|
321
326
|
kind,
|
|
322
327
|
name
|
|
@@ -327,8 +332,8 @@ export function* canUserEditEntityRecord(kind, name, recordId) {
|
|
|
327
332
|
}
|
|
328
333
|
|
|
329
334
|
const resource = entity.__unstable_rest_base;
|
|
330
|
-
|
|
331
|
-
}
|
|
335
|
+
await dispatch(canUser('update', resource, recordId));
|
|
336
|
+
};
|
|
332
337
|
/**
|
|
333
338
|
* Request autosave data from the REST API.
|
|
334
339
|
*
|
|
@@ -336,18 +341,21 @@ export function* canUserEditEntityRecord(kind, name, recordId) {
|
|
|
336
341
|
* @param {number} postId The id of the parent post.
|
|
337
342
|
*/
|
|
338
343
|
|
|
339
|
-
export
|
|
344
|
+
export const getAutosaves = (postType, postId) => async ({
|
|
345
|
+
dispatch,
|
|
346
|
+
resolveSelect
|
|
347
|
+
}) => {
|
|
340
348
|
const {
|
|
341
349
|
rest_base: restBase
|
|
342
|
-
} =
|
|
343
|
-
const autosaves =
|
|
350
|
+
} = await resolveSelect.getPostType(postType);
|
|
351
|
+
const autosaves = await apiFetch({
|
|
344
352
|
path: `/wp/v2/${restBase}/${postId}/autosaves?context=edit`
|
|
345
353
|
});
|
|
346
354
|
|
|
347
355
|
if (autosaves && autosaves.length) {
|
|
348
|
-
|
|
356
|
+
dispatch.receiveAutosaves(postId, autosaves);
|
|
349
357
|
}
|
|
350
|
-
}
|
|
358
|
+
};
|
|
351
359
|
/**
|
|
352
360
|
* Request autosave data from the REST API.
|
|
353
361
|
*
|
|
@@ -358,25 +366,32 @@ export function* getAutosaves(postType, postId) {
|
|
|
358
366
|
* @param {number} postId The id of the parent post.
|
|
359
367
|
*/
|
|
360
368
|
|
|
361
|
-
export
|
|
362
|
-
|
|
363
|
-
}
|
|
369
|
+
export const getAutosave = (postType, postId) => async ({
|
|
370
|
+
resolveSelect
|
|
371
|
+
}) => {
|
|
372
|
+
await resolveSelect.getAutosaves(postType, postId);
|
|
373
|
+
};
|
|
364
374
|
/**
|
|
365
375
|
* Retrieve the frontend template used for a given link.
|
|
366
376
|
*
|
|
367
377
|
* @param {string} link Link.
|
|
368
378
|
*/
|
|
369
379
|
|
|
370
|
-
export
|
|
380
|
+
export const __experimentalGetTemplateForLink = link => async ({
|
|
381
|
+
dispatch,
|
|
382
|
+
resolveSelect
|
|
383
|
+
}) => {
|
|
371
384
|
// Ideally this should be using an apiFetch call
|
|
372
385
|
// We could potentially do so by adding a "filter" to the `wp_template` end point.
|
|
373
386
|
// Also it seems the returned object is not a regular REST API post type.
|
|
374
387
|
let template;
|
|
375
388
|
|
|
376
389
|
try {
|
|
377
|
-
template =
|
|
390
|
+
template = await window.fetch(addQueryArgs(link, {
|
|
378
391
|
'_wp-find-template': true
|
|
379
|
-
}))
|
|
392
|
+
})).then(res => res.json()).then(({
|
|
393
|
+
data
|
|
394
|
+
}) => data);
|
|
380
395
|
} catch (e) {// For non-FSE themes, it is possible that this request returns an error.
|
|
381
396
|
}
|
|
382
397
|
|
|
@@ -384,17 +399,44 @@ export function* __experimentalGetTemplateForLink(link) {
|
|
|
384
399
|
return;
|
|
385
400
|
}
|
|
386
401
|
|
|
387
|
-
|
|
388
|
-
const record = yield controls.select(STORE_NAME, 'getEntityRecord', 'postType', 'wp_template', template.id);
|
|
402
|
+
const record = await resolveSelect.getEntityRecord('postType', 'wp_template', template.id);
|
|
389
403
|
|
|
390
404
|
if (record) {
|
|
391
|
-
|
|
405
|
+
dispatch.receiveEntityRecords('postType', 'wp_template', [record], {
|
|
392
406
|
'find-template': link
|
|
393
407
|
});
|
|
394
408
|
}
|
|
395
|
-
}
|
|
409
|
+
};
|
|
396
410
|
|
|
397
411
|
__experimentalGetTemplateForLink.shouldInvalidate = action => {
|
|
398
412
|
return (action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS') && action.invalidateCache && action.kind === 'postType' && action.name === 'wp_template';
|
|
399
413
|
};
|
|
414
|
+
|
|
415
|
+
export const __experimentalGetCurrentGlobalStylesId = () => async ({
|
|
416
|
+
dispatch,
|
|
417
|
+
resolveSelect
|
|
418
|
+
}) => {
|
|
419
|
+
const activeThemes = await resolveSelect.getEntityRecords('root', 'theme', {
|
|
420
|
+
status: 'active'
|
|
421
|
+
});
|
|
422
|
+
const globalStylesURL = get(activeThemes, [0, '_links', 'wp:user-global-styles', 0, 'href']);
|
|
423
|
+
|
|
424
|
+
if (globalStylesURL) {
|
|
425
|
+
const globalStylesObject = await apiFetch({
|
|
426
|
+
url: globalStylesURL
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
dispatch.__experimentalReceiveCurrentGlobalStylesId(globalStylesObject.id);
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
export const __experimentalGetCurrentThemeBaseGlobalStyles = () => async ({
|
|
433
|
+
resolveSelect,
|
|
434
|
+
dispatch
|
|
435
|
+
}) => {
|
|
436
|
+
const currentTheme = await resolveSelect.getCurrentTheme();
|
|
437
|
+
const themeGlobalStyles = await apiFetch({
|
|
438
|
+
path: `/wp/v2/global-styles/themes/${currentTheme.stylesheet}`
|
|
439
|
+
});
|
|
440
|
+
await dispatch.__experimentalReceiveThemeBaseGlobalStyles(currentTheme.stylesheet, themeGlobalStyles);
|
|
441
|
+
};
|
|
400
442
|
//# sourceMappingURL=resolvers.js.map
|