UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 9.32 kB
{"version":3,"file":"headers.mjs","names":["inject","provide","ref","watch","createRange","propsFactory","makeDataTableHeaderProps","headers","type","Array","default","VDataTableHeadersSymbol","Symbol","for","createHeaders","props","options","columns","wrapped","length","isArray","flat","flatMap","row","index","map","column","rowCount","defaultHeader","title","sortable","defaultActionHeader","width","groupBy","value","findIndex","key","unshift","rowspan","splice","showSelect","showExpand","push","fixedRows","fixedOffsets","fill","count","forEach","id","i","fixedOffset","fixed","lastFixed","seen","Set","filtered","has","add","at","deep","immediate","data","useHeaders","Error"],"sources":["../../../../src/labs/VDataTable/composables/headers.ts"],"sourcesContent":["// Utilities\nimport { inject, provide, ref, watch } from 'vue'\nimport { createRange, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableHeader, InternalDataTableHeader } from '../types'\nimport type { SortItem } from './sort'\n\nexport const makeDataTableHeaderProps = propsFactory({\n headers: {\n type: Array as PropType<DataTableHeader[] | DataTableHeader[][]>,\n default: () => ([]),\n },\n}, 'v-data-table-header')\n\nexport const VDataTableHeadersSymbol: InjectionKey<{\n headers: Ref<InternalDataTableHeader[][]>\n columns: Ref<InternalDataTableHeader[]>\n}> = Symbol.for('vuetify:data-table-headers')\n\ntype HeaderProps = {\n headers: DataTableHeader[] | DataTableHeader[][]\n}\n\nexport function createHeaders (\n props: HeaderProps,\n options?: {\n groupBy?: Ref<readonly SortItem[]>\n showSelect?: Ref<boolean>\n showExpand?: Ref<boolean>\n }\n) {\n const headers = ref<InternalDataTableHeader[][]>([])\n const columns = ref<InternalDataTableHeader[]>([])\n\n watch(() => props.headers, () => {\n const wrapped = !props.headers.length\n ? []\n : Array.isArray(props.headers[0])\n ? props.headers as DataTableHeader[][]\n : [props.headers as DataTableHeader[]]\n const flat = wrapped.flatMap((row, index) => row.map(column => ({ column, row: index })))\n\n const rowCount = wrapped.length\n const defaultHeader = { title: '', sortable: false }\n const defaultActionHeader = { ...defaultHeader, width: 48 }\n\n if (options?.groupBy?.value.length) {\n const index = flat.findIndex(({ column }) => column.key === 'data-table-group')\n if (index < 0) flat.unshift({ column: { ...defaultHeader, key: 'data-table-group', title: 'Group', rowspan: rowCount }, row: 0 })\n else flat.splice(index, 1, { column: { ...defaultHeader, ...flat[index].column }, row: flat[index].row })\n }\n\n if (options?.showSelect?.value) {\n const index = flat.findIndex(({ column }) => column.key === 'data-table-select')\n if (index < 0) flat.unshift({ column: { ...defaultActionHeader, key: 'data-table-select', rowspan: rowCount }, row: 0 })\n else flat.splice(index, 1, { column: { ...defaultActionHeader, ...flat[index].column }, row: flat[index].row })\n }\n\n if (options?.showExpand?.value) {\n const index = flat.findIndex(({ column }) => column.key === 'data-table-expand')\n if (index < 0) flat.push({ column: { ...defaultActionHeader, key: 'data-table-expand', rowspan: rowCount }, row: 0 })\n else flat.splice(index, 1, { column: { ...defaultActionHeader, ...flat[index].column }, row: flat[index].row })\n }\n\n const fixedRows: InternalDataTableHeader[][] = createRange(rowCount).map(() => [])\n const fixedOffsets = createRange(rowCount).fill(0)\n\n let count = 0\n flat.forEach(({ column, row }) => {\n const id = column.key ?? `data-table-column-${count++}`\n for (let i = row; i <= row + (column.rowspan ?? 1) - 1; i++) {\n fixedRows[i].push({\n ...column,\n key: id,\n fixedOffset: fixedOffsets[i],\n sortable: column.sortable ?? !!column.key,\n })\n\n fixedOffsets[i] += column.width ?? 0\n }\n })\n\n fixedRows.forEach(row => {\n for (let i = row.length; i--; i >= 0) {\n if (row[i].fixed) {\n row[i].lastFixed = true\n return\n }\n }\n })\n\n const seen = new Set()\n headers.value = fixedRows.map(row => {\n const filtered = []\n for (const column of row) {\n if (!seen.has(column.key)) {\n seen.add(column.key)\n filtered.push(column)\n }\n }\n\n return filtered\n })\n\n columns.value = fixedRows.at(-1) ?? []\n }, {\n deep: true,\n immediate: true,\n })\n\n const data = { headers, columns }\n\n provide(VDataTableHeadersSymbol, data)\n\n return data\n}\n\nexport function useHeaders () {\n const data = inject(VDataTableHeadersSymbol)\n\n if (!data) throw new Error('Missing headers!')\n\n return data\n}\n"],"mappings":"AAAA;AACA,SAASA,MAAM,EAAEC,OAAO,EAAEC,GAAG,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACxCC,WAAW,EAAEC,YAAY,mCAElC;AAKA,OAAO,MAAMC,wBAAwB,GAAGD,YAAY,CAAC;EACnDE,OAAO,EAAE;IACPC,IAAI,EAAEC,KAA0D;IAChEC,OAAO,EAAE,MAAO;EAClB;AACF,CAAC,EAAE,qBAAqB,CAAC;AAEzB,OAAO,MAAMC,uBAGX,GAAGC,MAAM,CAACC,GAAG,CAAC,4BAA4B,CAAC;AAM7C,OAAO,SAASC,aAAa,CAC3BC,KAAkB,EAClBC,OAIC,EACD;EACA,MAAMT,OAAO,GAAGL,GAAG,CAA8B,EAAE,CAAC;EACpD,MAAMe,OAAO,GAAGf,GAAG,CAA4B,EAAE,CAAC;EAElDC,KAAK,CAAC,MAAMY,KAAK,CAACR,OAAO,EAAE,MAAM;IAC/B,MAAMW,OAAO,GAAG,CAACH,KAAK,CAACR,OAAO,CAACY,MAAM,GACjC,EAAE,GACFV,KAAK,CAACW,OAAO,CAACL,KAAK,CAACR,OAAO,CAAC,CAAC,CAAC,CAAC,GAC7BQ,KAAK,CAACR,OAAO,GACb,CAACQ,KAAK,CAACR,OAAO,CAAsB;IAC1C,MAAMc,IAAI,GAAGH,OAAO,CAACI,OAAO,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAKD,GAAG,CAACE,GAAG,CAACC,MAAM,KAAK;MAAEA,MAAM;MAAEH,GAAG,EAAEC;IAAM,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAMG,QAAQ,GAAGT,OAAO,CAACC,MAAM;IAC/B,MAAMS,aAAa,GAAG;MAAEC,KAAK,EAAE,EAAE;MAAEC,QAAQ,EAAE;IAAM,CAAC;IACpD,MAAMC,mBAAmB,GAAG;MAAE,GAAGH,aAAa;MAAEI,KAAK,EAAE;IAAG,CAAC;IAE3D,IAAIhB,OAAO,EAAEiB,OAAO,EAAEC,KAAK,CAACf,MAAM,EAAE;MAClC,MAAMK,KAAK,GAAGH,IAAI,CAACc,SAAS,CAAC;QAAA,IAAC;UAAET;QAAO,CAAC;QAAA,OAAKA,MAAM,CAACU,GAAG,KAAK,kBAAkB;MAAA,EAAC;MAC/E,IAAIZ,KAAK,GAAG,CAAC,EAAEH,IAAI,CAACgB,OAAO,CAAC;QAAEX,MAAM,EAAE;UAAE,GAAGE,aAAa;UAAEQ,GAAG,EAAE,kBAAkB;UAAEP,KAAK,EAAE,OAAO;UAAES,OAAO,EAAEX;QAAS,CAAC;QAAEJ,GAAG,EAAE;MAAE,CAAC,CAAC,MAC5HF,IAAI,CAACkB,MAAM,CAACf,KAAK,EAAE,CAAC,EAAE;QAAEE,MAAM,EAAE;UAAE,GAAGE,aAAa;UAAE,GAAGP,IAAI,CAACG,KAAK,CAAC,CAACE;QAAO,CAAC;QAAEH,GAAG,EAAEF,IAAI,CAACG,KAAK,CAAC,CAACD;MAAI,CAAC,CAAC;IAC3G;IAEA,IAAIP,OAAO,EAAEwB,UAAU,EAAEN,KAAK,EAAE;MAC9B,MAAMV,KAAK,GAAGH,IAAI,CAACc,SAAS,CAAC;QAAA,IAAC;UAAET;QAAO,CAAC;QAAA,OAAKA,MAAM,CAACU,GAAG,KAAK,mBAAmB;MAAA,EAAC;MAChF,IAAIZ,KAAK,GAAG,CAAC,EAAEH,IAAI,CAACgB,OAAO,CAAC;QAAEX,MAAM,EAAE;UAAE,GAAGK,mBAAmB;UAAEK,GAAG,EAAE,mBAAmB;UAAEE,OAAO,EAAEX;QAAS,CAAC;QAAEJ,GAAG,EAAE;MAAE,CAAC,CAAC,MACnHF,IAAI,CAACkB,MAAM,CAACf,KAAK,EAAE,CAAC,EAAE;QAAEE,MAAM,EAAE;UAAE,GAAGK,mBAAmB;UAAE,GAAGV,IAAI,CAACG,KAAK,CAAC,CAACE;QAAO,CAAC;QAAEH,GAAG,EAAEF,IAAI,CAACG,KAAK,CAAC,CAACD;MAAI,CAAC,CAAC;IACjH;IAEA,IAAIP,OAAO,EAAEyB,UAAU,EAAEP,KAAK,EAAE;MAC9B,MAAMV,KAAK,GAAGH,IAAI,CAACc,SAAS,CAAC;QAAA,IAAC;UAAET;QAAO,CAAC;QAAA,OAAKA,MAAM,CAACU,GAAG,KAAK,mBAAmB;MAAA,EAAC;MAChF,IAAIZ,KAAK,GAAG,CAAC,EAAEH,IAAI,CAACqB,IAAI,CAAC;QAAEhB,MAAM,EAAE;UAAE,GAAGK,mBAAmB;UAAEK,GAAG,EAAE,mBAAmB;UAAEE,OAAO,EAAEX;QAAS,CAAC;QAAEJ,GAAG,EAAE;MAAE,CAAC,CAAC,MAChHF,IAAI,CAACkB,MAAM,CAACf,KAAK,EAAE,CAAC,EAAE;QAAEE,MAAM,EAAE;UAAE,GAAGK,mBAAmB;UAAE,GAAGV,IAAI,CAACG,KAAK,CAAC,CAACE;QAAO,CAAC;QAAEH,GAAG,EAAEF,IAAI,CAACG,KAAK,CAAC,CAACD;MAAI,CAAC,CAAC;IACjH;IAEA,MAAMoB,SAAsC,GAAGvC,WAAW,CAACuB,QAAQ,CAAC,CAACF,GAAG,CAAC,MAAM,EAAE,CAAC;IAClF,MAAMmB,YAAY,GAAGxC,WAAW,CAACuB,QAAQ,CAAC,CAACkB,IAAI,CAAC,CAAC,CAAC;IAElD,IAAIC,KAAK,GAAG,CAAC;IACbzB,IAAI,CAAC0B,OAAO,CAAC,SAAqB;MAAA,IAApB;QAAErB,MAAM;QAAEH;MAAI,CAAC;MAC3B,MAAMyB,EAAE,GAAGtB,MAAM,CAACU,GAAG,IAAK,qBAAoBU,KAAK,EAAG,EAAC;MACvD,KAAK,IAAIG,CAAC,GAAG1B,GAAG,EAAE0B,CAAC,IAAI1B,GAAG,IAAIG,MAAM,CAACY,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,EAAEW,CAAC,EAAE,EAAE;QAC3DN,SAAS,CAACM,CAAC,CAAC,CAACP,IAAI,CAAC;UAChB,GAAGhB,MAAM;UACTU,GAAG,EAAEY,EAAE;UACPE,WAAW,EAAEN,YAAY,CAACK,CAAC,CAAC;UAC5BnB,QAAQ,EAAEJ,MAAM,CAACI,QAAQ,IAAI,CAAC,CAACJ,MAAM,CAACU;QACxC,CAAC,CAAC;QAEFQ,YAAY,CAACK,CAAC,CAAC,IAAIvB,MAAM,CAACM,KAAK,IAAI,CAAC;MACtC;IACF,CAAC,CAAC;IAEFW,SAAS,CAACI,OAAO,CAACxB,GAAG,IAAI;MACvB,KAAK,IAAI0B,CAAC,GAAG1B,GAAG,CAACJ,MAAM,EAAE8B,CAAC,EAAE,EAAEA,CAAC,IAAI,CAAC,EAAE;QACpC,IAAI1B,GAAG,CAAC0B,CAAC,CAAC,CAACE,KAAK,EAAE;UAChB5B,GAAG,CAAC0B,CAAC,CAAC,CAACG,SAAS,GAAG,IAAI;UACvB;QACF;MACF;IACF,CAAC,CAAC;IAEF,MAAMC,IAAI,GAAG,IAAIC,GAAG,EAAE;IACtB/C,OAAO,CAAC2B,KAAK,GAAGS,SAAS,CAAClB,GAAG,CAACF,GAAG,IAAI;MACnC,MAAMgC,QAAQ,GAAG,EAAE;MACnB,KAAK,MAAM7B,MAAM,IAAIH,GAAG,EAAE;QACxB,IAAI,CAAC8B,IAAI,CAACG,GAAG,CAAC9B,MAAM,CAACU,GAAG,CAAC,EAAE;UACzBiB,IAAI,CAACI,GAAG,CAAC/B,MAAM,CAACU,GAAG,CAAC;UACpBmB,QAAQ,CAACb,IAAI,CAAChB,MAAM,CAAC;QACvB;MACF;MAEA,OAAO6B,QAAQ;IACjB,CAAC,CAAC;IAEFtC,OAAO,CAACiB,KAAK,GAAGS,SAAS,CAACe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;EACxC,CAAC,EAAE;IACDC,IAAI,EAAE,IAAI;IACVC,SAAS,EAAE;EACb,CAAC,CAAC;EAEF,MAAMC,IAAI,GAAG;IAAEtD,OAAO;IAAEU;EAAQ,CAAC;EAEjChB,OAAO,CAACU,uBAAuB,EAAEkD,IAAI,CAAC;EAEtC,OAAOA,IAAI;AACb;AAEA,OAAO,SAASC,UAAU,GAAI;EAC5B,MAAMD,IAAI,GAAG7D,MAAM,CAACW,uBAAuB,CAAC;EAE5C,IAAI,CAACkD,IAAI,EAAE,MAAM,IAAIE,KAAK,CAAC,kBAAkB,CAAC;EAE9C,OAAOF,IAAI;AACb"}