UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 2.97 kB
{"version":3,"file":"hooks.cjs","sources":["../../../components/tree/hooks.ts"],"sourcesContent":["import { isNull, toFalse } from '@vexip-ui/utils'\n\nexport interface CascadedNode {\n checked: boolean,\n partial: boolean,\n parent?: string | number | symbol,\n children: CascadedNode[],\n}\n\nexport function useCascadedChecked<T extends CascadedNode>(options: {\n getNode: (key: string | number | symbol) => T | null | undefined | void,\n disableNode?: (node: T) => boolean,\n}) {\n function updateCheckedUpward(key: string | number | symbol) {\n let node = options.getNode(key)\n\n if (!node) return\n\n while (!isNull(node.parent)) {\n const parentId = node.parent\n const parent = options.getNode(parentId)\n\n if (!parent) break\n\n if (node.checked === parent.checked && node.partial === parent.partial) {\n break\n }\n\n if (node.checked) {\n parent.checked = parent.children.every(item => item.checked)\n parent.partial = !parent.checked\n } else {\n parent.checked = false\n parent.partial = parent.children.some(item => item.checked || item.partial)\n }\n\n node = parent\n }\n }\n\n function updateCheckedDown(key: string | number | symbol) {\n const originNode = options.getNode(key)\n\n if (!originNode) return\n\n const disable = typeof options.disableNode === 'function' ? options.disableNode : toFalse\n const checked = originNode.checked\n const partial = originNode.partial\n\n const loop = [...(originNode.children as T[])]\n\n let node: T\n\n while (loop.length) {\n node = loop.shift()!\n\n if (disable(node)) continue\n\n node.checked = checked\n node.partial = partial\n\n if (node.children.length) {\n loop.push(...(node.children as T[]))\n }\n }\n }\n\n return {\n updateCheckedUpward,\n updateCheckedDown,\n }\n}\n"],"names":["useCascadedChecked","options","updateCheckedUpward","key","node","isNull","parentId","parent","item","updateCheckedDown","originNode","disable","toFalse","checked","partial","loop"],"mappings":"mHASO,SAASA,EAA2CC,EAGxD,CACD,SAASC,EAAoBC,EAA+B,CACtD,IAAAC,EAAOH,EAAQ,QAAQE,CAAG,EAE9B,GAAKC,EAEL,KAAO,CAACC,EAAA,OAAOD,EAAK,MAAM,GAAG,CAC3B,MAAME,EAAWF,EAAK,OAChBG,EAASN,EAAQ,QAAQK,CAAQ,EAIvC,GAFI,CAACC,GAEDH,EAAK,UAAYG,EAAO,SAAWH,EAAK,UAAYG,EAAO,QAC7D,MAGEH,EAAK,SACPG,EAAO,QAAUA,EAAO,SAAS,MAAMC,GAAQA,EAAK,OAAO,EACpDD,EAAA,QAAU,CAACA,EAAO,UAEzBA,EAAO,QAAU,GACVA,EAAA,QAAUA,EAAO,SAAS,QAAaC,EAAK,SAAWA,EAAK,OAAO,GAGrEJ,EAAAG,CAAA,CACT,CAGF,SAASE,EAAkBN,EAA+B,CAClD,MAAAO,EAAaT,EAAQ,QAAQE,CAAG,EAEtC,GAAI,CAACO,EAAY,OAEjB,MAAMC,EAAU,OAAOV,EAAQ,aAAgB,WAAaA,EAAQ,YAAcW,EAAA,QAC5EC,EAAUH,EAAW,QACrBI,EAAUJ,EAAW,QAErBK,EAAO,CAAC,GAAIL,EAAW,QAAgB,EAEzC,IAAAN,EAEJ,KAAOW,EAAK,QACVX,EAAOW,EAAK,MAAM,EAEd,CAAAJ,EAAQP,CAAI,IAEhBA,EAAK,QAAUS,EACfT,EAAK,QAAUU,EAEXV,EAAK,SAAS,QACXW,EAAA,KAAK,GAAIX,EAAK,QAAgB,EAEvC,CAGK,MAAA,CACL,oBAAAF,EACA,kBAAAO,CACF,CACF"}