{"version":3,"file":"select.mjs","sources":["../../../../../../../packages/components/select/src/select.tsx"],"sourcesContent":["import {\n  type ExtractPropTypes,\n  type PropType,\n  computed,\n  defineComponent,\n  nextTick,\n  ref,\n  watch,\n} from 'vue'\n\n// Utils\nimport {\n  type Numeric,\n  extend,\n  isSameValue,\n  makeArrayProp,\n  makeNumericProp,\n  makeStringProp,\n  pick,\n  preventDefault,\n  truthProp,\n  unitToPx,\n} from '@xzx-design/utils'\n\n// Composables\nimport {\n  useChildren,\n  useEventListener,\n  useExpose,\n  useParent,\n} from '@xzx-design/hooks'\n\n// Components\nimport { Loading } from '@xzx-design/components/loading'\nimport Column, { PICKER_KEY } from './select-column'\nimport Toolbar, {\n  selectToolbarPropKeys,\n  selectToolbarProps,\n  selectToolbarSlots,\n} from './select-toolbar'\n\n// Types\nimport {\n  assignDefaultFields,\n  bem,\n  findOptionByValue,\n  formatCascadeColumns,\n  getColumnsType,\n  getFirstEnabledOption,\n  isOptionExist,\n  name,\n} from './utils'\nimport { PICKER_GROUP_KEY } from './select-group'\nimport type {\n  SelectColumn,\n  SelectExpose,\n  SelectFieldNames,\n  SelectOption,\n  SelectToolbarPosition,\n} from './types'\n\nexport const selectSharedProps = extend(\n  {\n    loading: Boolean,\n    readonly: Boolean,\n    allowHtml: Boolean,\n    optionHeight: makeNumericProp(40),\n    showToolbar: truthProp,\n    swipeDuration: makeNumericProp(1000),\n    visibleOptionNum: makeNumericProp(6),\n  },\n  selectToolbarProps\n)\n\nexport const selectProps = extend({}, selectSharedProps, {\n  columns: makeArrayProp<SelectOption | SelectColumn>(),\n  modelValue: makeArrayProp<Numeric>(),\n  toolbarPosition: makeStringProp<SelectToolbarPosition>('top'),\n  columnsFieldNames: Object as PropType<SelectFieldNames>,\n})\n\nexport type SelectProps = ExtractPropTypes<typeof selectProps>\n\nexport default defineComponent({\n  name,\n\n  props: selectProps,\n\n  emits: [\n    'confirm',\n    'cancel',\n    'change',\n    'scrollInto',\n    'clickOption',\n    'update:modelValue',\n  ],\n\n  setup(props, { emit, slots }) {\n    const columnsRef = ref<HTMLElement>()\n    const selectedValues = ref(props.modelValue.slice(0))\n\n    const { parent } = useParent(PICKER_GROUP_KEY)\n    const { children, linkChildren } = useChildren(PICKER_KEY)\n\n    linkChildren()\n\n    const fields = computed(() => assignDefaultFields(props.columnsFieldNames))\n    const optionHeight = computed(() => unitToPx(props.optionHeight))\n    const columnsType = computed(() =>\n      getColumnsType(props.columns, fields.value)\n    )\n\n    const currentColumns = computed<SelectColumn[]>(() => {\n      const { columns } = props\n      switch (columnsType.value) {\n        case 'multiple':\n          return columns as SelectColumn[]\n        case 'cascade':\n          return formatCascadeColumns(columns, fields.value, selectedValues)\n        default:\n          return [columns]\n      }\n    })\n\n    const hasOptions = computed(() =>\n      currentColumns.value.some((options) => options.length)\n    )\n\n    const selectedOptions = computed(() =>\n      currentColumns.value.map((options, index) =>\n        findOptionByValue(options, selectedValues.value[index], fields.value)\n      )\n    )\n\n    const selectedIndexes = computed(() =>\n      currentColumns.value.map((options, index) =>\n        options.findIndex(\n          (option) => option[fields.value.value] === selectedValues.value[index]\n        )\n      )\n    )\n\n    const setValue = (index: number, value: Numeric) => {\n      if (selectedValues.value[index] !== value) {\n        const newValues = selectedValues.value.slice(0)\n        newValues[index] = value\n        selectedValues.value = newValues\n      }\n    }\n\n    const getEventParams = () => ({\n      selectedValues: selectedValues.value.slice(0),\n      selectedOptions: selectedOptions.value,\n      selectedIndexes: selectedIndexes.value,\n    })\n\n    const onChange = (value: Numeric, columnIndex: number) => {\n      setValue(columnIndex, value)\n\n      if (columnsType.value === 'cascade') {\n        // reset values after cascading\n        selectedValues.value.forEach((value, index) => {\n          const options = currentColumns.value[index]\n          if (!isOptionExist(options, value, fields.value)) {\n            setValue(\n              index,\n              options.length ? options[0][fields.value.value] : undefined\n            )\n          }\n        })\n      }\n\n      nextTick(() => {\n        emit('change', extend({ columnIndex }, getEventParams()))\n      })\n    }\n\n    const onClickOption = (\n      currentOption: SelectOption,\n      columnIndex: number\n    ) => {\n      const params = { columnIndex, currentOption }\n      emit('clickOption', extend(getEventParams(), params))\n      emit('scrollInto', params)\n    }\n\n    const confirm = () => {\n      children.forEach((child) => child.stopMomentum())\n      const params = getEventParams()\n\n      // wait nextTick to ensure the model value is update to date\n      // when confirm event is emitted\n      nextTick(() => {\n        emit('confirm', params)\n      })\n\n      return params\n    }\n\n    const cancel = () => emit('cancel', getEventParams())\n\n    const renderColumnItems = () =>\n      currentColumns.value.map((options, columnIndex) => (\n        <Column\n          v-slots={{ option: slots.option }}\n          value={selectedValues.value[columnIndex]}\n          fields={fields.value}\n          options={options}\n          readonly={props.readonly}\n          allowHtml={props.allowHtml}\n          optionHeight={optionHeight.value}\n          swipeDuration={props.swipeDuration}\n          visibleOptionNum={props.visibleOptionNum}\n          onChange={(value: Numeric) => onChange(value, columnIndex)}\n          onClickOption={(option: SelectOption) =>\n            onClickOption(option, columnIndex)\n          }\n          onScrollInto={(option: SelectOption) => {\n            emit('scrollInto', {\n              currentOption: option,\n              columnIndex,\n            })\n          }}\n        />\n      ))\n\n    const renderMask = (wrapHeight: number) => {\n      if (hasOptions.value) {\n        const frameStyle = { height: `${optionHeight.value}px` }\n        const maskStyle = {\n          backgroundSize: `100% ${(wrapHeight - optionHeight.value) / 2}px`,\n        }\n        return [\n          <div class={bem('mask')} style={maskStyle} />,\n          <div class={[bem('frame')]} style={frameStyle} />,\n        ]\n      }\n    }\n\n    const renderColumns = () => {\n      const { columns, visibleOptionNum, loading } = props\n      const wrapHeight = optionHeight.value * +visibleOptionNum\n      const columnsStyle = { height: `${wrapHeight}px` }\n\n      if (!loading && !hasOptions.value && slots.empty) {\n        return slots.empty()\n      }\n\n      return (\n        <div ref={columnsRef} class={bem('columns')} style={columnsStyle}>\n          <div v-show={columns?.length > 0} class={bem('active-bg')} />\n          {renderColumnItems()}\n          {renderMask(wrapHeight)}\n        </div>\n      )\n    }\n\n    const renderToolbar = () => {\n      if (props.showToolbar && !parent) {\n        return (\n          <Toolbar\n            v-slots={pick(slots, selectToolbarSlots)}\n            {...pick(props, selectToolbarPropKeys)}\n            onConfirm={confirm}\n            onCancel={cancel}\n          />\n        )\n      }\n    }\n\n    watch(\n      currentColumns,\n      (columns) => {\n        columns.forEach((options, index) => {\n          if (\n            options.length &&\n            !isOptionExist(options, selectedValues.value[index], fields.value)\n          ) {\n            setValue(index, getFirstEnabledOption(options)![fields.value.value])\n          }\n        })\n      },\n      { immediate: true }\n    )\n\n    // preserve last emitted model value\n    // when props.modelValue is updated by parent component,\n    // the new value should be compared with the last emitted value\n    let lastEmittedModelValue: Numeric[]\n    watch(\n      () => props.modelValue,\n      (newValues) => {\n        if (\n          !isSameValue(newValues, selectedValues.value) &&\n          !isSameValue(newValues, lastEmittedModelValue)\n        ) {\n          selectedValues.value = newValues.slice(0)\n          lastEmittedModelValue = newValues.slice(0)\n        }\n      },\n      { deep: true }\n    )\n    watch(\n      selectedValues,\n      (newValues) => {\n        if (!isSameValue(newValues, props.modelValue)) {\n          lastEmittedModelValue = newValues.slice(0)\n          emit('update:modelValue', lastEmittedModelValue)\n        }\n      },\n      { immediate: true }\n    )\n\n    // useEventListener will set passive to `false` to eliminate the warning of Chrome\n    useEventListener('touchmove', preventDefault, {\n      target: columnsRef,\n    })\n\n    const getSelectedOptions = () => selectedOptions.value\n\n    useExpose<SelectExpose>({ confirm, getSelectedOptions })\n\n    return () => (\n      <div class={bem()}>\n        {props.toolbarPosition === 'top' ? renderToolbar() : null}\n        {props.loading ? <Loading class={bem('loading')} /> : null}\n        {slots['columns-top']?.()}\n        {renderColumns()}\n        {slots['columns-bottom']?.()}\n        {props.toolbarPosition === 'bottom' ? renderToolbar() : null}\n      </div>\n    )\n  },\n})\n"],"names":["selectSharedProps","extend","loading","Boolean","readonly","allowHtml","optionHeight","makeNumericProp","showToolbar","truthProp","swipeDuration","visibleOptionNum","selectToolbarProps","selectProps","columns","makeArrayProp","modelValue","toolbarPosition","makeStringProp","columnsFieldNames","Object","defineComponent","name","props","emits","setup","emit","slots","columnsRef","ref","selectedValues","slice","parent","useParent","PICKER_GROUP_KEY","children","linkChildren","useChildren","PICKER_KEY","fields","computed","assignDefaultFields","unitToPx","columnsType","getColumnsType","value","currentColumns","formatCascadeColumns","hasOptions","some","options","length","selectedOptions","map","index","findOptionByValue","selectedIndexes","findIndex","option","setValue","newValues","getEventParams","onChange","columnIndex","forEach","isOptionExist","undefined","nextTick","onClickOption","currentOption","params","confirm","child","stopMomentum","cancel","renderColumnItems","_createVNode","Column","renderMask","wrapHeight","frameStyle","height","maskStyle","backgroundSize","bem","renderColumns","columnsStyle","empty","_withDirectives","_vShow","renderToolbar","Toolbar","_mergeProps","pick","selectToolbarPropKeys","selectToolbarSlots","watch","getFirstEnabledOption","immediate","lastEmittedModelValue","isSameValue","deep","useEventListener","preventDefault","target","getSelectedOptions","useExpose","Loading"],"mappings":"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"}