UNPKG

vexip-ui

Version:

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

1 lines 3.02 kB
{"version":3,"file":"hooks.mjs","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":";AASO,SAASA,EAA2CC,GAGxD;AACD,WAASC,EAAoBC,GAA+B;AACtD,QAAAC,IAAOH,EAAQ,QAAQE,CAAG;AAE9B,QAAKC;AAEL,aAAO,CAACC,EAAOD,EAAK,MAAM,KAAG;AAC3B,cAAME,IAAWF,EAAK,QAChBG,IAASN,EAAQ,QAAQK,CAAQ;AAIvC,YAFI,CAACC,KAEDH,EAAK,YAAYG,EAAO,WAAWH,EAAK,YAAYG,EAAO;AAC7D;AAGF,QAAIH,EAAK,WACPG,EAAO,UAAUA,EAAO,SAAS,MAAM,CAAAC,MAAQA,EAAK,OAAO,GACpDD,EAAA,UAAU,CAACA,EAAO,YAEzBA,EAAO,UAAU,IACVA,EAAA,UAAUA,EAAO,SAAS,KAAK,OAAQC,EAAK,WAAWA,EAAK,OAAO,IAGrEJ,IAAAG;AAAA,MAAA;AAAA,EACT;AAGF,WAASE,EAAkBN,GAA+B;AAClD,UAAAO,IAAaT,EAAQ,QAAQE,CAAG;AAEtC,QAAI,CAACO,EAAY;AAEjB,UAAMC,IAAU,OAAOV,EAAQ,eAAgB,aAAaA,EAAQ,cAAcW,GAC5EC,IAAUH,EAAW,SACrBI,IAAUJ,EAAW,SAErBK,IAAO,CAAC,GAAIL,EAAW,QAAgB;AAEzC,QAAAN;AAEJ,WAAOW,EAAK;AAGN,MAFJX,IAAOW,EAAK,MAAM,GAEd,CAAAJ,EAAQP,CAAI,MAEhBA,EAAK,UAAUS,GACfT,EAAK,UAAUU,GAEXV,EAAK,SAAS,UACXW,EAAA,KAAK,GAAIX,EAAK,QAAgB;AAAA,EAEvC;AAGK,SAAA;AAAA,IACL,qBAAAF;AAAA,IACA,mBAAAO;AAAA,EACF;AACF;"}