@wordpress/block-library
Version:
Block library for the WordPress editor.
8 lines (7 loc) • 5.36 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/navigation/edit/use-create-navigation-menu.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { serialize } from '@wordpress/blocks';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport { useState, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useGenerateDefaultNavigationTitle from './use-generate-default-navigation-title';\n\nexport const CREATE_NAVIGATION_MENU_SUCCESS = 'success';\nexport const CREATE_NAVIGATION_MENU_ERROR = 'error';\nexport const CREATE_NAVIGATION_MENU_PENDING = 'pending';\nexport const CREATE_NAVIGATION_MENU_IDLE = 'idle';\n\nexport default function useCreateNavigationMenu( clientId ) {\n\tconst [ status, setStatus ] = useState( CREATE_NAVIGATION_MENU_IDLE );\n\tconst [ value, setValue ] = useState( null );\n\tconst [ error, setError ] = useState( null );\n\n\tconst { saveEntityRecord, editEntityRecord } = useDispatch( coreStore );\n\tconst generateDefaultTitle = useGenerateDefaultNavigationTitle( clientId );\n\n\t// This callback uses data from the two placeholder steps and only creates\n\t// a new navigation menu when the user completes the final step.\n\tconst create = useCallback(\n\t\tasync ( title = null, blocks = [], postStatus ) => {\n\t\t\t// Guard against creating Navigations without a title.\n\t\t\t// Note you can pass no title, but if one is passed it must be\n\t\t\t// a string otherwise the title may end up being empty.\n\t\t\tif ( title && typeof title !== 'string' ) {\n\t\t\t\tsetError(\n\t\t\t\t\t'Invalid title supplied when creating Navigation Menu.'\n\t\t\t\t);\n\t\t\t\tsetStatus( CREATE_NAVIGATION_MENU_ERROR );\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Value of supplied title argument was not a string.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetStatus( CREATE_NAVIGATION_MENU_PENDING );\n\t\t\tsetValue( null );\n\t\t\tsetError( null );\n\n\t\t\tif ( ! title ) {\n\t\t\t\ttitle = await generateDefaultTitle().catch( ( err ) => {\n\t\t\t\t\tsetError( err?.message );\n\t\t\t\t\tsetStatus( CREATE_NAVIGATION_MENU_ERROR );\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Failed to create title when saving new Navigation Menu.',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcause: err,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t\tconst record = {\n\t\t\t\ttitle,\n\t\t\t\tcontent: serialize( blocks ),\n\t\t\t\tstatus: postStatus,\n\t\t\t};\n\n\t\t\t// Return affords ability to await on this function directly\n\t\t\treturn saveEntityRecord( 'postType', 'wp_navigation', record )\n\t\t\t\t.then( ( response ) => {\n\t\t\t\t\tsetValue( response );\n\t\t\t\t\tsetStatus( CREATE_NAVIGATION_MENU_SUCCESS );\n\n\t\t\t\t\t// Set the status to publish so that the Navigation block\n\t\t\t\t\t// shows up in the multi entity save flow.\n\t\t\t\t\tif ( postStatus !== 'publish' ) {\n\t\t\t\t\t\teditEntityRecord(\n\t\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t\t'wp_navigation',\n\t\t\t\t\t\t\tresponse.id,\n\t\t\t\t\t\t\t{ status: 'publish' }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn response;\n\t\t\t\t} )\n\t\t\t\t.catch( ( err ) => {\n\t\t\t\t\tsetError( err?.message );\n\t\t\t\t\tsetStatus( CREATE_NAVIGATION_MENU_ERROR );\n\t\t\t\t\tthrow new Error( 'Unable to save new Navigation Menu', {\n\t\t\t\t\t\tcause: err,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t},\n\t\t[ saveEntityRecord, editEntityRecord, generateDefaultTitle ]\n\t);\n\n\treturn {\n\t\tcreate,\n\t\tstatus,\n\t\tvalue,\n\t\terror,\n\t\tisIdle: status === CREATE_NAVIGATION_MENU_IDLE,\n\t\tisPending: status === CREATE_NAVIGATION_MENU_PENDING,\n\t\tisSuccess: status === CREATE_NAVIGATION_MENU_SUCCESS,\n\t\tisError: status === CREATE_NAVIGATION_MENU_ERROR,\n\t};\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAA0B;AAC1B,uBAAmC;AACnC,kBAA4B;AAC5B,qBAAsC;AAKtC,mDAA8C;AAEvC,IAAM,iCAAiC;AACvC,IAAM,+BAA+B;AACrC,IAAM,iCAAiC;AACvC,IAAM,8BAA8B;AAE5B,SAAR,wBAA0C,UAAW;AAC3D,QAAM,CAAE,QAAQ,SAAU,QAAI,yBAAU,2BAA4B;AACpE,QAAM,CAAE,OAAO,QAAS,QAAI,yBAAU,IAAK;AAC3C,QAAM,CAAE,OAAO,QAAS,QAAI,yBAAU,IAAK;AAE3C,QAAM,EAAE,kBAAkB,iBAAiB,QAAI,yBAAa,iBAAAA,KAAU;AACtE,QAAM,2BAAuB,6CAAAC,SAAmC,QAAS;AAIzE,QAAM,aAAS;AAAA,IACd,OAAQ,QAAQ,MAAM,SAAS,CAAC,GAAG,eAAgB;AAIlD,UAAK,SAAS,OAAO,UAAU,UAAW;AACzC;AAAA,UACC;AAAA,QACD;AACA,kBAAW,4BAA6B;AACxC,cAAM,IAAI;AAAA,UACT;AAAA,QACD;AAAA,MACD;AAEA,gBAAW,8BAA+B;AAC1C,eAAU,IAAK;AACf,eAAU,IAAK;AAEf,UAAK,CAAE,OAAQ;AACd,gBAAQ,MAAM,qBAAqB,EAAE,MAAO,CAAE,QAAS;AACtD,mBAAU,KAAK,OAAQ;AACvB,oBAAW,4BAA6B;AACxC,gBAAM,IAAI;AAAA,YACT;AAAA,YACA;AAAA,cACC,OAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AACA,YAAM,SAAS;AAAA,QACd;AAAA,QACA,aAAS,yBAAW,MAAO;AAAA,QAC3B,QAAQ;AAAA,MACT;AAGA,aAAO,iBAAkB,YAAY,iBAAiB,MAAO,EAC3D,KAAM,CAAE,aAAc;AACtB,iBAAU,QAAS;AACnB,kBAAW,8BAA+B;AAI1C,YAAK,eAAe,WAAY;AAC/B;AAAA,YACC;AAAA,YACA;AAAA,YACA,SAAS;AAAA,YACT,EAAE,QAAQ,UAAU;AAAA,UACrB;AAAA,QACD;AAEA,eAAO;AAAA,MACR,CAAE,EACD,MAAO,CAAE,QAAS;AAClB,iBAAU,KAAK,OAAQ;AACvB,kBAAW,4BAA6B;AACxC,cAAM,IAAI,MAAO,sCAAsC;AAAA,UACtD,OAAO;AAAA,QACR,CAAE;AAAA,MACH,CAAE;AAAA,IACJ;AAAA,IACA,CAAE,kBAAkB,kBAAkB,oBAAqB;AAAA,EAC5D;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,WAAW;AAAA,IACnB,WAAW,WAAW;AAAA,IACtB,WAAW,WAAW;AAAA,IACtB,SAAS,WAAW;AAAA,EACrB;AACD;",
"names": ["coreStore", "useGenerateDefaultNavigationTitle"]
}