{
  "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": []
}
