@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 3.16 kB
Source Map (JSON)
{"version":3,"file":"hooks.mjs","sources":["../../../components/tree/hooks.ts"],"sourcesContent":["import { isNull, toFalse } from '@vexip-ui/utils'\r\n\r\nexport interface CascadedNode {\r\n checked: boolean,\r\n partial: boolean,\r\n parent?: string | number | symbol,\r\n children: CascadedNode[],\r\n}\r\n\r\nexport function useCascadedChecked<T extends CascadedNode>(options: {\r\n getNode: (key: string | number | symbol) => T | null | undefined | void,\r\n disableNode?: (node: T) => boolean,\r\n}) {\r\n function updateCheckedUpward(key: string | number | symbol) {\r\n let node = options.getNode(key)\r\n\r\n if (!node) return\r\n\r\n while (!isNull(node.parent)) {\r\n const parentId = node.parent\r\n const parent = options.getNode(parentId)\r\n\r\n if (!parent) break\r\n\r\n if (node.checked === parent.checked && node.partial === parent.partial) {\r\n break\r\n }\r\n\r\n if (node.checked) {\r\n parent.checked = parent.children.every(item => item.checked)\r\n parent.partial = !parent.checked\r\n } else {\r\n parent.checked = false\r\n parent.partial = parent.children.some(item => item.checked || item.partial)\r\n }\r\n\r\n node = parent\r\n }\r\n }\r\n\r\n function updateCheckedDown(key: string | number | symbol) {\r\n const originNode = options.getNode(key)\r\n\r\n if (!originNode) return\r\n\r\n const disable = typeof options.disableNode === 'function' ? options.disableNode : toFalse\r\n const checked = originNode.checked\r\n const partial = originNode.partial\r\n\r\n const loop = [...(originNode.children as T[])]\r\n\r\n let node: T\r\n\r\n while (loop.length) {\r\n node = loop.shift()!\r\n\r\n if (disable(node)) continue\r\n\r\n node.checked = checked\r\n node.partial = partial\r\n\r\n if (node.children.length) {\r\n loop.push(...(node.children as T[]))\r\n }\r\n }\r\n }\r\n\r\n return {\r\n updateCheckedUpward,\r\n updateCheckedDown,\r\n }\r\n}\r\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;"}