{"version":3,"file":"effect.mjs","sources":["../../../src/cascader/core/effect.ts"],"sourcesContent":["import isNumber from 'lodash/isNumber';\nimport isFunction from 'lodash/isFunction';\nimport isArray from 'lodash/isArray';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { TreeNode, CascaderContextType, TdCascaderProps, TreeNodeValue, TreeNodeModel } from '../interface';\nimport { getFullPathLabel, getTreeValue } from './helper';\n\n/**\n * 点击item的副作用\n * @param propsTrigger\n * @param trigger\n * @param node\n * @param cascaderContext\n */\nexport function expendClickEffect(\n  propsTrigger: TdCascaderProps['trigger'],\n  trigger: TdCascaderProps['trigger'],\n  node: TreeNode,\n  cascaderContext: CascaderContextType,\n) {\n  const { checkStrictly, multiple, treeStore, setVisible, setValue, setTreeNodes, setExpend, value, max, valueType } =\n    cascaderContext;\n\n  const isDisabled = node.disabled || (multiple && (value as TreeNodeValue[]).length >= max && max !== 0);\n\n  if (isDisabled) return;\n  // 点击展开节点，设置展开状态\n  if (propsTrigger === trigger && !node.isLeaf()) {\n    const expanded = node.setExpanded(true);\n    treeStore.refreshNodes();\n    treeStore.replaceExpanded(expanded);\n    const nodes = treeStore.getNodes().filter((node: TreeNode) => node.visible);\n    setTreeNodes(nodes);\n\n    // 多选条件下手动维护expend\n    if (multiple) {\n      setExpend(expanded);\n    }\n  }\n\n  if (!multiple && (node.isLeaf() || checkStrictly) && trigger === 'click') {\n    treeStore.resetChecked();\n    const checked = node.setChecked(!node.checked);\n    const [value] = checked;\n\n    // 非受控状态下更新状态\n    setValue(valueType === 'single' ? value : node.getPath().map((item) => item.value), 'check', node.getModel());\n\n    if (!checkStrictly) {\n      setVisible(false, {});\n    }\n  }\n}\n\n/**\n * 多选状态下选中状态数据变化的副作用\n * @param node\n * @param cascaderContext\n * @returns\n */\nexport function valueChangeEffect(node: TreeNode, cascaderContext: CascaderContextType) {\n  const { disabled, max, inputVal, multiple, setVisible, setValue, treeNodes, treeStore, valueType } = cascaderContext;\n\n  if (!node || disabled || node.disabled) {\n    return;\n  }\n  const checked = node.setChecked(!node.isChecked());\n\n  if (isNumber(max) && max < 0) {\n    console.warn('TDesign Warn:', 'max should > 0');\n  }\n\n  if (checked.length > max && isNumber(max) && max > 0) {\n    return;\n  }\n\n  if (checked.length === 0) {\n    const expanded = treeStore.getExpanded();\n    setTimeout(() => {\n      treeStore.replaceExpanded(expanded);\n      treeStore.refreshNodes();\n    }, 0);\n  }\n\n  if (!multiple) {\n    setVisible(false, {});\n  }\n\n  const isSelectAll = treeNodes.every((item) => checked.indexOf(item.value) > -1);\n\n  if (inputVal && isSelectAll) {\n    setVisible(false, {});\n  }\n\n  // 处理不同数据类型\n  const resValue =\n    valueType === 'single'\n      ? checked\n      : checked.map((val) =>\n          treeStore\n            .getNode(val)\n            .getPath()\n            .map((item) => item.value),\n        );\n\n  setValue(resValue, 'check', node.getModel());\n}\n\n/**\n * closeIcon点击副作用\n * @param cascaderContext\n */\nexport function closeIconClickEffect(cascaderContext: CascaderContextType) {\n  const { setVisible, multiple, setExpend, setValue } = cascaderContext;\n\n  setVisible(false, {});\n\n  // 手动设置的展开需要去除\n  if (multiple) {\n    setExpend([]);\n  }\n\n  setValue(multiple ? [] : '', 'clear');\n}\n\n/**\n * tag 关闭按钮点击副作用\n * @param cascaderContext\n */\nexport function handleRemoveTagEffect(\n  cascaderContext: CascaderContextType,\n  index: number,\n  onRemove: TdCascaderProps['onRemove'],\n) {\n  const { disabled, setValue, value, valueType, treeStore } = cascaderContext;\n\n  if (disabled) return;\n  const newValue = cloneDeep(value) as [];\n  const res = newValue.splice(index, 1);\n  const node = treeStore.getNodes(res[0])[0];\n\n  setValue(newValue, 'uncheck', node.getModel());\n\n  const checked = node.setChecked(!node.isChecked());\n  // 处理不同数据类型\n  const resValue =\n    valueType === 'single'\n      ? checked\n      : checked.map((val) =>\n          treeStore\n            .getNode(val)\n            .getPath()\n            .map((item) => item.value),\n        );\n\n  setValue(resValue, 'uncheck', node.getModel());\n  if (isFunction(onRemove)) {\n    onRemove({ value: checked, node: node as any });\n  }\n}\n\n/**\n * input和treeStore变化的副作用\n * @param inputVal\n * @param treeStore\n * @param setTreeNodes\n * @returns\n */\nexport const treeNodesEffect = (\n  inputVal: CascaderContextType['inputVal'],\n  treeStore: CascaderContextType['treeStore'],\n  setTreeNodes: CascaderContextType['setTreeNodes'],\n  filter: CascaderContextType['filter'],\n) => {\n  if (!treeStore) return;\n  let nodes = [];\n  if (inputVal) {\n    const filterMethods = (node: TreeNode) => {\n      if (!node.isLeaf()) return;\n      if (isFunction(filter)) {\n        return filter(`${inputVal}`, node as TreeNodeModel & TreeNode);\n      }\n      const fullPathLabel = getFullPathLabel(node, '');\n      return fullPathLabel.indexOf(`${inputVal}`) > -1;\n    };\n\n    nodes = treeStore.nodes.filter(filterMethods);\n  } else {\n    nodes = treeStore.getNodes().filter((node: TreeNode) => node.visible);\n  }\n  setTreeNodes(nodes);\n};\n\n/**\n * 初始化展开阶段与展开状态副作用\n * @param treeStore\n * @param treeValue\n * @param expend\n */\nexport const treeStoreExpendEffect = (\n  treeStore: CascaderContextType['treeStore'],\n  value: CascaderContextType['value'],\n  expend: TreeNodeValue[],\n) => {\n  const treeValue = getTreeValue(value);\n\n  if (!treeStore) return;\n  // init expanded, 无expend状态时设置\n  if (isArray(treeValue) && expend.length === 0) {\n    const expandedMap = new Map();\n    const [val] = treeValue;\n    if (val) {\n      expandedMap.set(val, true);\n      const node = treeStore.getNode(val);\n      if (!node) {\n        treeStore.refreshNodes();\n        return;\n      }\n      node.getParents().forEach((tn: TreeNode) => {\n        expandedMap.set(tn.value, true);\n      });\n      const expandedArr = Array.from(expandedMap.keys());\n      treeStore.replaceExpanded(expandedArr);\n    } else {\n      treeStore.resetExpanded();\n    }\n  }\n  // 本地维护 expend，更加可控，不需要依赖于 tree 的状态\n  if (treeStore.getExpanded() && expend.length) {\n    treeStore.replaceExpanded(expend);\n  }\n  treeStore.refreshNodes();\n};\n"],"names":["treeStore","value","setValue","setVisible","console","isNumber","setTimeout","cloneDeep","isFunction","onRemove","node","val","expandedMap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,SAAA,iBAAA,CAAA,YAAA,EAAA,OAAA,EAAA,IAAA,EAAA,eAAA,EAAA;AAMC,EAAA,IAAA,aAAA,GAAA,eAAA,CAAA,aAAA;;;;;;;;;;AAGN,EAAA,IAAA,UAAA,GAAA,IAAA,CAAA,QAAA,IAAA,QAAA,IAAA,KAAA,CAAA,MAAA,IAAA,GAAA,IAAA,GAAA,KAAA,CAAA,CAAA;AAEI,EAAA,IAAA,UAAA,EAAA,OAAA;;AAGI,IAAA,IAAA,QAAA,GAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,CAAA;;AAENA,IAAAA,SAAAA,CAAAA,eAAAA,CAAAA,QAAAA,CAAAA,CAAAA;;;;;AAKA,IAAA,IAAA,QAAA,EAAA;;AAEA,KAAA;AACF,GAAA;AAEA,EAAA,IAAA,CAAA,QAAA,KAAA,IAAA,CAAA,MAAA,EAAA,IAAA,aAAA,CAAA,IAAA,OAAA,KAAA,OAAA,EAAA;;;AAGQ,IAAA,IAAA,QAAA,GAAA,cAAA,CAAA,OAAA,EAAA,CAAA,CAAA;AAACC,MAAAA,MAAAA,GAAAA,QAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAGPC,IAAAA,QAAAA,CAAAA,SAAAA,KAAAA,QAAAA,GAAAA,MAAAA,GAAAA,IAAAA,CAAAA,OAAAA,EAAAA,CAAAA,GAAAA,CAAAA,UAAAA,IAAAA,EAAAA;;;;AAGaC,MAAAA,UAAAA,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA,CAAAA;AACb,KAAA;AACF,GAAA;AACF,CAAA;AAQO,SAAA,iBAAA,CAAA,IAAA,EAAA,eAAA,EAAA;AACC,EAAA,IAAA,QAAA,GAAA,eAAA,CAAA,QAAA;;;;;;;;;;AAGJ,IAAA,OAAA;AACF,GAAA;AACA,EAAA,IAAA,OAAA,GAAA,IAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,SAAA,EAAA,CAAA,CAAA;;AAGUC,IAAAA,OAAAA,CAAAA,IAAAA,CAAAA,eAAAA,EAAAA,gBAAAA,CAAAA,CAAAA;AACV,GAAA;AAEA,EAAA,IAAA,OAAA,CAAA,MAAA,GAAA,GAAA,IAAAC,UAAA,CAAA,GAAA,CAAA,IAAA,GAAA,GAAA,CAAA,EAAA;AACE,IAAA,OAAA;AACF,GAAA;AAEI,EAAA,IAAA,OAAA,CAAA,MAAA,KAAA,CAAA,EAAA;AACI,IAAA,IAAA,QAAA,GAAA,SAAA,CAAA,WAAA,EAAA,CAAA;AACNC,IAAAA,UAAAA,CAAAA,YAAAA;AACEN,MAAAA,SAAAA,CAAAA,eAAAA,CAAAA,QAAAA,CAAAA,CAAAA;;;AAGJ,GAAA;;AAGaG,IAAAA,UAAAA,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA,CAAAA;AACb,GAAA;AAEM,EAAA,IAAA,WAAA,GAAA,SAAA,CAAA,KAAA,CAAA,UAAA,IAAA,EAAA;;;;AAGOA,IAAAA,UAAAA,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA,CAAAA;AACb,GAAA;AAGA,EAAA,IAAA,QAAA,GAAA,SAAA,KAAA,QAAA,GAAA,OAAA,GAAA,OAAA,CAAA,GAAA,CAAA,UAAA,GAAA,EAAA;AAGmB,IAAA,OAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,OAAA,EAAA,CAAA,GAAA,CAAA,UAAA,IAAA,EAAA;;;AAIgB,GAAA,CAAA,CAAA;;AAIrC,CAAA;AAMO,SAAA,oBAAA,CAAA,eAAA,EAAA;AACL,EAAA,IAAA,UAAA,GAAA,eAAA,CAAA,UAAA;;;;AAEWA,EAAAA,UAAAA,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA,CAAAA;AAGX,EAAA,IAAA,QAAA,EAAA;;AAEA,GAAA;;AAGF,CAAA;AAMO,SAAA,qBAAA,CAAA,eAAA,EAAA,KAAA,EAAA,QAAA,EAAA;AAKL,EAAA,IAAA,QAAA,GAAA,eAAA,CAAA,QAAA;;;;;AAEI,EAAA,IAAA,QAAA,EAAA,OAAA;AACE,EAAA,IAAA,QAAA,GAAAI,WAAA,CAAA,KAAA,CAAA,CAAA;;AAEN,EAAA,IAAA,IAAA,GAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAIA,EAAA,IAAA,OAAA,GAAA,IAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAEA,EAAA,IAAA,QAAA,GAAA,SAAA,KAAA,QAAA,GAAA,OAAA,GAAA,OAAA,CAAA,GAAA,CAAA,UAAA,GAAA,EAAA;AAGmB,IAAA,OAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,OAAA,EAAA,CAAA,GAAA,CAAA,UAAA,IAAA,EAAA;;;AAIgB,GAAA,CAAA,CAAA;;AAI/B,EAAA,IAAAC,YAAA,CAAA,QAAA,CAAA,EAAA;AACFC,IAAAA,QAAAA,CAAAA;AAAWR,MAAAA,KAAAA,EAAAA,OAAAA;AAAgBS,MAAAA,IAAAA,EAAAA,IAAAA;AAAkB,KAAA,CAAA,CAAA;AAC/C,GAAA;AACF,CAAA;AASO,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,QAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA;;;AAQL,EAAA,IAAA,QAAA,EAAA;AACQ,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,IAAA,EAAA;AACA,MAAA,IAAA,CAAA,IAAA,CAAA,MAAA,EAAA,EAAA,OAAA;AACA,MAAA,IAAAF,YAAA,CAAA,MAAA,CAAA,EAAA;AACK,QAAA,OAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACT,OAAA;AACM,MAAA,IAAA,aAAA,GAAA,gBAAA,CAAA,IAAA,EAAA,EAAA,CAAA,CAAA;;;;AAKV,GAAA,MAAA;;;;AAEA,GAAA;;AAEF,EAAA;AAQO,IAAA,qBAAA,GAAA,SAAA,qBAAA,CAAA,SAAA,EAAA,KAAA,EAAA,MAAA,EAAA;AAKC,EAAA,IAAA,SAAA,GAAA,YAAA,CAAA,KAAA,CAAA,CAAA;;;AAKE,IAAA,IAAA,WAAA,kBAAA,IAAA,GAAA,EAAA,CAAA;AACA,IAAA,IAAA,UAAA,GAAA,cAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAACG,MAAAA,GAAAA,GAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACP,IAAA,IAAA,GAAA,EAAA;AACcC,MAAAA,WAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACN,MAAA,IAAA,IAAA,GAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA;;;AAGJ,QAAA,OAAA;AACF,OAAA;;;AAGA,OAAA,CAAA,CAAA;;AAEAZ,MAAAA,SAAAA,CAAAA,eAAAA,CAAAA,WAAAA,CAAAA,CAAAA;AACF,KAAA,MAAA;;AAEA,KAAA;AACF,GAAA;;AAGEA,IAAAA,SAAAA,CAAAA,eAAAA,CAAAA,MAAAA,CAAAA,CAAAA;AACF,GAAA;;AAEF;;;;"}