{"version":3,"file":"use-columns.mjs","names":[],"sources":["../../../../../../../packages/components/table-v2/src/composables/use-columns.ts"],"sourcesContent":["import { computed, unref } from 'vue'\nimport { isObject } from '@element-plus/utils'\nimport { SortOrder, oppositeOrderMap } from '../constants'\nimport { placeholderSign } from '../private'\nimport { calcColumnStyle } from './utils'\n\nimport type { CSSProperties, Ref } from 'vue'\nimport type { TableV2Props } from '../table'\nimport type { AnyColumns, Column, KeyType } from '../types'\n\nfunction useColumns(\n  props: TableV2Props,\n  columns: Ref<AnyColumns>,\n  fixed: Ref<boolean>\n) {\n  const _columns = computed(() =>\n    unref(columns).map((column, index) => ({\n      ...column,\n      key: column.key ?? column.dataKey ?? index,\n    }))\n  )\n\n  const visibleColumns = computed(() => {\n    return unref(_columns).filter((column) => !column.hidden)\n  })\n\n  const fixedColumnsOnLeft = computed(() =>\n    unref(visibleColumns).filter(\n      (column) => column.fixed === 'left' || column.fixed === true\n    )\n  )\n\n  const fixedColumnsOnRight = computed(() =>\n    unref(visibleColumns).filter((column) => column.fixed === 'right')\n  )\n\n  const normalColumns = computed(() =>\n    unref(visibleColumns).filter((column) => !column.fixed)\n  )\n\n  const mainColumns = computed(() => {\n    const ret: AnyColumns = []\n\n    unref(fixedColumnsOnLeft).forEach((column) => {\n      ret.push({\n        ...column,\n        placeholderSign,\n      })\n    })\n\n    unref(normalColumns).forEach((column) => {\n      ret.push(column)\n    })\n\n    unref(fixedColumnsOnRight).forEach((column) => {\n      ret.push({\n        ...column,\n        placeholderSign,\n      })\n    })\n\n    return ret\n  })\n\n  const hasFixedColumns = computed(() => {\n    return unref(fixedColumnsOnLeft).length || unref(fixedColumnsOnRight).length\n  })\n\n  const columnsStyles = computed(() => {\n    return unref(_columns).reduce<Record<KeyType, CSSProperties>>(\n      (style, column) => {\n        style[column.key] = calcColumnStyle(column, unref(fixed), props.fixed)\n        return style\n      },\n      {}\n    )\n  })\n\n  const columnsTotalWidth = computed(() => {\n    return unref(visibleColumns).reduce(\n      (width, column) => width + column.width,\n      0\n    )\n  })\n\n  const getColumn = (key: KeyType) => {\n    return unref(_columns).find((column) => column.key === key)\n  }\n\n  const getColumnStyle = (key: KeyType) => {\n    return unref(columnsStyles)[key]\n  }\n\n  const updateColumnWidth = (column: Column<any>, width: number) => {\n    column.width = width\n  }\n\n  function onColumnSorted(e: MouseEvent) {\n    const { key } = (e.currentTarget as HTMLElement).dataset\n    if (!key) return\n    const { sortState, sortBy } = props\n\n    let order = SortOrder.ASC\n\n    if (isObject(sortState)) {\n      order = oppositeOrderMap[sortState[key]]\n    } else {\n      order = oppositeOrderMap[sortBy.order]\n    }\n\n    props.onColumnSort?.({ column: getColumn(key)!, key, order })\n  }\n\n  return {\n    columns: _columns,\n    columnsStyles,\n    columnsTotalWidth,\n    fixedColumnsOnLeft,\n    fixedColumnsOnRight,\n    hasFixedColumns,\n    mainColumns,\n    normalColumns,\n    visibleColumns,\n\n    getColumn,\n    getColumnStyle,\n    updateColumnWidth,\n    onColumnSorted,\n  }\n}\n\nexport { useColumns }\nexport type UseColumnsReturn = ReturnType<typeof useColumns>\n"],"mappings":";;;;;;;AAUA,SAAS,WACP,OACA,SACA,OACA;CACA,MAAM,WAAW,eACf,MAAM,QAAQ,CAAC,KAAK,QAAQ,WAAW;EACrC,GAAG;EACH,KAAK,OAAO,OAAO,OAAO,WAAW;EACtC,EAAE,CACJ;CAED,MAAM,iBAAiB,eAAe;AACpC,SAAO,MAAM,SAAS,CAAC,QAAQ,WAAW,CAAC,OAAO,OAAO;GACzD;CAEF,MAAM,qBAAqB,eACzB,MAAM,eAAe,CAAC,QACnB,WAAW,OAAO,UAAU,UAAU,OAAO,UAAU,KACzD,CACF;CAED,MAAM,sBAAsB,eAC1B,MAAM,eAAe,CAAC,QAAQ,WAAW,OAAO,UAAU,QAAQ,CACnE;CAED,MAAM,gBAAgB,eACpB,MAAM,eAAe,CAAC,QAAQ,WAAW,CAAC,OAAO,MAAM,CACxD;CAED,MAAM,cAAc,eAAe;EACjC,MAAM,MAAkB,EAAE;AAE1B,QAAM,mBAAmB,CAAC,SAAS,WAAW;AAC5C,OAAI,KAAK;IACP,GAAG;IACH;IACD,CAAC;IACF;AAEF,QAAM,cAAc,CAAC,SAAS,WAAW;AACvC,OAAI,KAAK,OAAO;IAChB;AAEF,QAAM,oBAAoB,CAAC,SAAS,WAAW;AAC7C,OAAI,KAAK;IACP,GAAG;IACH;IACD,CAAC;IACF;AAEF,SAAO;GACP;CAEF,MAAM,kBAAkB,eAAe;AACrC,SAAO,MAAM,mBAAmB,CAAC,UAAU,MAAM,oBAAoB,CAAC;GACtE;CAEF,MAAM,gBAAgB,eAAe;AACnC,SAAO,MAAM,SAAS,CAAC,QACpB,OAAO,WAAW;AACjB,SAAM,OAAO,OAAO,gBAAgB,QAAQ,MAAM,MAAM,EAAE,MAAM,MAAM;AACtE,UAAO;KAET,EAAE,CACH;GACD;CAEF,MAAM,oBAAoB,eAAe;AACvC,SAAO,MAAM,eAAe,CAAC,QAC1B,OAAO,WAAW,QAAQ,OAAO,OAClC,EACD;GACD;CAEF,MAAM,aAAa,QAAiB;AAClC,SAAO,MAAM,SAAS,CAAC,MAAM,WAAW,OAAO,QAAQ,IAAI;;CAG7D,MAAM,kBAAkB,QAAiB;AACvC,SAAO,MAAM,cAAc,CAAC;;CAG9B,MAAM,qBAAqB,QAAqB,UAAkB;AAChE,SAAO,QAAQ;;CAGjB,SAAS,eAAe,GAAe;EACrC,MAAM,EAAE,QAAS,EAAE,cAA8B;AACjD,MAAI,CAAC,IAAK;EACV,MAAM,EAAE,WAAW,WAAW;EAE9B,IAAI,QAAQ,UAAU;AAEtB,MAAI,SAAS,UAAU,CACrB,SAAQ,iBAAiB,UAAU;MAEnC,SAAQ,iBAAiB,OAAO;AAGlC,QAAM,eAAe;GAAE,QAAQ,UAAU,IAAI;GAAG;GAAK;GAAO,CAAC;;AAG/D,QAAO;EACL,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACD"}