UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 3.54 kB
{ "version": 3, "sources": ["../../../src/components/link-control/use-rich-url-data.js"], "sourcesContent": ["/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useEffect, useReducer } from '@wordpress/element';\n\nfunction reducer( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RESOLVED':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: false,\n\t\t\t\trichData: action.richData,\n\t\t\t};\n\t\tcase 'ERROR':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: false,\n\t\t\t\trichData: null,\n\t\t\t};\n\t\tcase 'LOADING':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisFetching: true,\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error( `Unexpected action type ${ action.type }` );\n\t}\n}\n\nfunction useRemoteUrlData( url ) {\n\tconst [ state, dispatch ] = useReducer( reducer, {\n\t\trichData: null,\n\t\tisFetching: false,\n\t} );\n\n\tconst { fetchRichUrlData } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\tfetchRichUrlData: getSettings().__experimentalFetchRichUrlData,\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\t// Only make the request if we have an actual URL\n\t\t// and the fetching util is available. In some editors\n\t\t// there may not be such a util.\n\t\tif (\n\t\t\turl?.length &&\n\t\t\tfetchRichUrlData &&\n\t\t\ttypeof AbortController !== 'undefined'\n\t\t) {\n\t\t\tdispatch( {\n\t\t\t\ttype: 'LOADING',\n\t\t\t} );\n\n\t\t\tconst controller = new window.AbortController();\n\n\t\t\tconst signal = controller.signal;\n\n\t\t\tfetchRichUrlData( url, {\n\t\t\t\tsignal,\n\t\t\t} )\n\t\t\t\t.then( ( urlData ) => {\n\t\t\t\t\tdispatch( {\n\t\t\t\t\t\ttype: 'RESOLVED',\n\t\t\t\t\t\trichData: urlData,\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\t// Avoid setting state on unmounted component\n\t\t\t\t\tif ( ! signal.aborted ) {\n\t\t\t\t\t\tdispatch( {\n\t\t\t\t\t\t\ttype: 'ERROR',\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t// Cleanup: when the URL changes the abort the current request.\n\t\t\treturn () => {\n\t\t\t\tcontroller.abort();\n\t\t\t};\n\t\t}\n\t}, [ url ] );\n\n\treturn state;\n}\n\nexport default useRemoteUrlData;\n"], "mappings": ";AAGA,SAAS,SAAS,wBAAwB;AAK1C,SAAS,iBAAiB;AAC1B,SAAS,WAAW,kBAAkB;AAEtC,SAAS,QAAS,OAAO,QAAS;AACjC,UAAS,OAAO,MAAO;AAAA,IACtB,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,UAAU,OAAO;AAAA,MAClB;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,UAAU;AAAA,MACX;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,YAAY;AAAA,MACb;AAAA,IACD;AACC,YAAM,IAAI,MAAO,0BAA2B,OAAO,IAAK,EAAG;AAAA,EAC7D;AACD;AAEA,SAAS,iBAAkB,KAAM;AAChC,QAAM,CAAE,OAAO,QAAS,IAAI,WAAY,SAAS;AAAA,IAChD,UAAU;AAAA,IACV,YAAY;AAAA,EACb,CAAE;AAEF,QAAM,EAAE,iBAAiB,IAAI,UAAW,CAAE,WAAY;AACrD,UAAM,EAAE,YAAY,IAAI,OAAQ,gBAAiB;AACjD,WAAO;AAAA,MACN,kBAAkB,YAAY,EAAE;AAAA,IACjC;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,YAAW,MAAM;AAIhB,QACC,KAAK,UACL,oBACA,OAAO,oBAAoB,aAC1B;AACD,eAAU;AAAA,QACT,MAAM;AAAA,MACP,CAAE;AAEF,YAAM,aAAa,IAAI,OAAO,gBAAgB;AAE9C,YAAM,SAAS,WAAW;AAE1B,uBAAkB,KAAK;AAAA,QACtB;AAAA,MACD,CAAE,EACA,KAAM,CAAE,YAAa;AACrB,iBAAU;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,QACX,CAAE;AAAA,MACH,CAAE,EACD,MAAO,MAAM;AAEb,YAAK,CAAE,OAAO,SAAU;AACvB,mBAAU;AAAA,YACT,MAAM;AAAA,UACP,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEH,aAAO,MAAM;AACZ,mBAAW,MAAM;AAAA,MAClB;AAAA,IACD;AAAA,EACD,GAAG,CAAE,GAAI,CAAE;AAEX,SAAO;AACR;AAEA,IAAO,4BAAQ;", "names": [] }