{"version":3,"file":"useKeyboard.cjs","sources":["../../../../../../../packages/vue-components/vc-cascader/src/OptionList/useKeyboard.ts"],"sourcesContent":["import type { Key } from '@antdv/types';\nimport type { Ref, SetupContext } from 'vue';\nimport type { RefOptionListProps } from '../../../vc-select/src/OptionList';\nimport type { DefaultOptionType, InternalFieldNames, SingleValueType } from '../Cascader';\nimport { KeyCode } from '@antdv/utils';\nimport { computed, ref, watchEffect } from 'vue';\nimport useBaseProps from '../../../vc-select/src/hooks/useBaseProps';\nimport { SEARCH_MARK } from '../hooks/useSearchOptions';\n\nexport default (\n  context: SetupContext,\n  options: Ref<DefaultOptionType[]>,\n  fieldNames: Ref<InternalFieldNames>,\n  activeValueCells: Ref<Key[]>,\n  setActiveValueCells: (activeValueCells: Key[]) => void,\n  // containerRef: Ref<HTMLElement>,\n  onKeyBoardSelect: (valueCells: SingleValueType, option: DefaultOptionType) => void,\n) => {\n  const baseProps = useBaseProps();\n  const rtl = computed(() => baseProps.direction === 'rtl');\n  const [validActiveValueCells, lastActiveIndex, lastActiveOptions] = [\n    ref<Key[]>([]),\n    ref<number>(),\n    ref<DefaultOptionType[]>([]),\n  ];\n  watchEffect(() => {\n    let activeIndex = -1;\n    let currentOptions = options.value;\n\n    const mergedActiveIndexes: number[] = [];\n    const mergedActiveValueCells: Key[] = [];\n\n    const len = activeValueCells.value.length;\n    // Fill validate active value cells and index\n    for (let i = 0; i < len && currentOptions; i += 1) {\n      // Mark the active index for current options\n      const nextActiveIndex = currentOptions.findIndex(\n        option => option[fieldNames.value.value] === activeValueCells.value[i],\n      );\n\n      if (nextActiveIndex === -1)\n        break;\n\n      activeIndex = nextActiveIndex;\n      mergedActiveIndexes.push(activeIndex);\n      mergedActiveValueCells.push(activeValueCells.value[i]);\n\n      currentOptions = currentOptions[activeIndex][fieldNames.value.children];\n    }\n\n    // Fill last active options\n    let activeOptions = options.value;\n    for (let i = 0; i < mergedActiveIndexes.length - 1; i += 1)\n      activeOptions = activeOptions[mergedActiveIndexes[i]][fieldNames.value.children];\n\n    [validActiveValueCells.value, lastActiveIndex.value, lastActiveOptions.value] = [\n      mergedActiveValueCells,\n      activeIndex,\n      activeOptions,\n    ];\n  });\n\n  // Update active value cells and scroll to target element\n  const internalSetActiveValueCells = (next: Key[]) => {\n    setActiveValueCells(next);\n  };\n\n  // Same options offset\n  const offsetActiveOption = (offset: number) => {\n    const len = lastActiveOptions.value.length;\n\n    let currentIndex = lastActiveIndex.value;\n    if (currentIndex === -1 && offset < 0)\n      currentIndex = len;\n\n    for (let i = 0; i < len; i += 1) {\n      currentIndex = (currentIndex + offset + len) % len;\n      const option = lastActiveOptions.value[currentIndex];\n\n      if (option && !option.disabled) {\n        const value = option[fieldNames.value.value];\n        const nextActiveCells = validActiveValueCells.value.slice(0, -1).concat(value);\n        internalSetActiveValueCells(nextActiveCells);\n        return;\n      }\n    }\n  };\n\n  // Different options offset\n  const prevColumn = () => {\n    if (validActiveValueCells.value.length > 1) {\n      const nextActiveCells = validActiveValueCells.value.slice(0, -1);\n      internalSetActiveValueCells(nextActiveCells);\n    } else {\n      baseProps.toggleOpen(false);\n    }\n  };\n\n  const nextColumn = () => {\n    const nextOptions: DefaultOptionType[]\n      = lastActiveOptions.value[lastActiveIndex.value]?.[fieldNames.value.children] || [];\n\n    const nextOption = nextOptions.find(option => !option.disabled);\n\n    if (nextOption) {\n      const nextActiveCells = [...validActiveValueCells.value, nextOption[fieldNames.value.value]];\n      internalSetActiveValueCells(nextActiveCells);\n    }\n  };\n\n  context.expose({\n    // scrollTo: treeRef.current?.scrollTo,\n    onKeydown: (event) => {\n      const { which } = event;\n\n      switch (which) {\n        // >>> Arrow keys\n        case KeyCode.UP:\n        case KeyCode.DOWN: {\n          let offset = 0;\n          if (which === KeyCode.UP)\n            offset = -1;\n          else if (which === KeyCode.DOWN)\n            offset = 1;\n\n          if (offset !== 0)\n            offsetActiveOption(offset);\n\n          break;\n        }\n\n        case KeyCode.LEFT: {\n          if (rtl.value)\n            nextColumn();\n          else\n            prevColumn();\n\n          break;\n        }\n\n        case KeyCode.RIGHT: {\n          if (rtl.value)\n            prevColumn();\n          else\n            nextColumn();\n\n          break;\n        }\n\n        case KeyCode.BACKSPACE: {\n          if (!baseProps.searchValue)\n            prevColumn();\n\n          break;\n        }\n\n        // >>> Select\n        case KeyCode.ENTER: {\n          if (validActiveValueCells.value.length) {\n            const option = lastActiveOptions.value[lastActiveIndex.value];\n\n            // Search option should revert back of origin options\n            const originOptions: DefaultOptionType[] = option?.[SEARCH_MARK] || [];\n            if (originOptions.length) {\n              onKeyBoardSelect(\n                originOptions.map(opt => opt[fieldNames.value.value]),\n                originOptions[originOptions.length - 1],\n              );\n            } else {\n              onKeyBoardSelect(validActiveValueCells.value, option);\n            }\n          }\n          break;\n        }\n\n        // >>> Close\n        case KeyCode.ESC: {\n          baseProps.toggleOpen(false);\n\n          if (open)\n            event.stopPropagation();\n        }\n      }\n    },\n    onKeyup: () => {},\n  } as RefOptionListProps);\n};\n"],"names":["useBaseProps","computed","ref","watchEffect","KeyCode","SEARCH_MARK"],"mappings":"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"}