@wordpress/components
Version:
UI components for WordPress.
8 lines (7 loc) • 3.61 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/navigation/use-create-navigation-tree.tsx"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useNavigationTreeNodes } from './use-navigation-tree-nodes';\nexport const useCreateNavigationTree = () => {\n const {\n nodes: items,\n getNode: getItem,\n addNode: addItem,\n removeNode: removeItem\n } = useNavigationTreeNodes();\n const {\n nodes: menus,\n getNode: getMenu,\n addNode: addMenu,\n removeNode: removeMenu\n } = useNavigationTreeNodes();\n\n /**\n * Stores direct nested menus of menus\n * This makes it easy to traverse menu tree\n *\n * Key is the menu prop of the menu\n * Value is an array of menu keys\n */\n const [childMenu, setChildMenu] = useState({});\n const getChildMenu = menu => childMenu[menu] || [];\n const traverseMenu = (startMenu, callback) => {\n const visited = [];\n let queue = [startMenu];\n let current;\n while (queue.length > 0) {\n // Type cast to string is safe because of the `length > 0` check above.\n current = getMenu(queue.shift());\n if (!current || visited.includes(current.menu)) {\n continue;\n }\n visited.push(current.menu);\n queue = [...queue, ...getChildMenu(current.menu)];\n if (callback(current) === false) {\n break;\n }\n }\n };\n const isMenuEmpty = menuToCheck => {\n let isEmpty = true;\n traverseMenu(menuToCheck, current => {\n if (!current.isEmpty) {\n isEmpty = false;\n return false;\n }\n return undefined;\n });\n return isEmpty;\n };\n return {\n items,\n getItem,\n addItem,\n removeItem,\n menus,\n getMenu,\n addMenu: (key, value) => {\n setChildMenu(state => {\n const newState = {\n ...state\n };\n if (!value.parentMenu) {\n return newState;\n }\n if (!newState[value.parentMenu]) {\n newState[value.parentMenu] = [];\n }\n newState[value.parentMenu].push(key);\n return newState;\n });\n addMenu(key, value);\n },\n removeMenu,\n childMenu,\n traverseMenu,\n isMenuEmpty\n };\n};"],
"mappings": ";AAGA,SAAS,gBAAgB;AAKzB,SAAS,8BAA8B;AAChC,IAAM,0BAA0B,MAAM;AAC3C,QAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,EACd,IAAI,uBAAuB;AAC3B,QAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,EACd,IAAI,uBAAuB;AAS3B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC,CAAC;AAC7C,QAAM,eAAe,UAAQ,UAAU,IAAI,KAAK,CAAC;AACjD,QAAM,eAAe,CAAC,WAAW,aAAa;AAC5C,UAAM,UAAU,CAAC;AACjB,QAAI,QAAQ,CAAC,SAAS;AACtB,QAAI;AACJ,WAAO,MAAM,SAAS,GAAG;AAEvB,gBAAU,QAAQ,MAAM,MAAM,CAAC;AAC/B,UAAI,CAAC,WAAW,QAAQ,SAAS,QAAQ,IAAI,GAAG;AAC9C;AAAA,MACF;AACA,cAAQ,KAAK,QAAQ,IAAI;AACzB,cAAQ,CAAC,GAAG,OAAO,GAAG,aAAa,QAAQ,IAAI,CAAC;AAChD,UAAI,SAAS,OAAO,MAAM,OAAO;AAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,iBAAe;AACjC,QAAI,UAAU;AACd,iBAAa,aAAa,aAAW;AACnC,UAAI,CAAC,QAAQ,SAAS;AACpB,kBAAU;AACV,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC,KAAK,UAAU;AACvB,mBAAa,WAAS;AACpB,cAAM,WAAW;AAAA,UACf,GAAG;AAAA,QACL;AACA,YAAI,CAAC,MAAM,YAAY;AACrB,iBAAO;AAAA,QACT;AACA,YAAI,CAAC,SAAS,MAAM,UAAU,GAAG;AAC/B,mBAAS,MAAM,UAAU,IAAI,CAAC;AAAA,QAChC;AACA,iBAAS,MAAM,UAAU,EAAE,KAAK,GAAG;AACnC,eAAO;AAAA,MACT,CAAC;AACD,cAAQ,KAAK,KAAK;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
"names": []
}