Skip to content

Commit 42dc52a

Browse files
committed
feat: add tsv export renderer Close #25
1 parent 96beef7 commit 42dc52a

File tree

2 files changed

+96
-19
lines changed

2 files changed

+96
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<template>
2+
<textarea
3+
:style="styles"
4+
readonly
5+
:value="textareaValue"
6+
></textarea>
7+
</template>
8+
9+
<script setup>
10+
import { defaultProps, PivotData } from '@/helper'
11+
import { computed } from 'vue'
12+
13+
const props = defineProps({
14+
...defaultProps
15+
})
16+
17+
const pivotData = computed(() => {
18+
try {
19+
return new PivotData(props)
20+
} catch (err) {
21+
console.error(err.stack)
22+
return null
23+
}
24+
})
25+
26+
const rowKeys = computed(() => pivotData.value?.getRowKeys() || [])
27+
const colKeys = computed(() => pivotData.value?.getColKeys() || [])
28+
29+
const styles = {
30+
width: '100%',
31+
height: `${window.innerHeight / 2}px`
32+
}
33+
34+
const headerRow = computed(() => {
35+
const header = [...pivotData.value.props.rows]
36+
37+
if (colKeys.value.length === 1 && colKeys.value[0].length === 0) {
38+
header.push(props.aggregatorName)
39+
} else {
40+
colKeys.value.forEach((c) => header.push(c.join('-')))
41+
}
42+
43+
return header
44+
})
45+
46+
const result = computed(() => {
47+
const data = rowKeys.value.reduce((acc, r) => {
48+
const row = [...r]
49+
colKeys.value.forEach((c) =>
50+
row.push(pivotData.value.getAggregator(r, c).value() || '')
51+
)
52+
return [...acc, row]
53+
}, [])
54+
return [headerRow.value, ...data]
55+
})
56+
57+
const textareaValue = computed(() =>
58+
result.value.map((r) => r.join('\t')).join('\n')
59+
)
60+
</script>
61+
62+
<style lang="scss" scoped></style>
+34-19
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,60 @@
11
import { defineComponent, h } from 'vue'
22
import TableRenderer from './TableRenderer.vue'
3+
import TSVExportRenderers from './TSVExportRenderers.vue'
34
import { defaultProps } from '@/helper'
45

56
export default {
67
'Table': defineComponent({
78
name: 'vue-table',
89
setup(props) {
9-
return () => h(TableRenderer, {
10-
...defaultProps,
11-
...props
12-
})
10+
return () =>
11+
h(TableRenderer, {
12+
...defaultProps,
13+
...props
14+
})
1315
}
1416
}),
1517
'Table Heatmap': defineComponent({
1618
name: 'vue-table-heatmap',
1719
setup(props) {
18-
return () => h(TableRenderer, {
19-
...defaultProps,
20-
...props,
21-
heatmapMode: 'full'
22-
})
20+
return () =>
21+
h(TableRenderer, {
22+
...defaultProps,
23+
...props,
24+
heatmapMode: 'full'
25+
})
2326
}
2427
}),
2528
'Table Col Heatmap': defineComponent({
2629
name: 'vue-table-col-heatmap',
2730
setup(props) {
28-
return () => h(TableRenderer, {
29-
...defaultProps,
30-
...props,
31-
heatmapMode: 'col'
32-
})
31+
return () =>
32+
h(TableRenderer, {
33+
...defaultProps,
34+
...props,
35+
heatmapMode: 'col'
36+
})
3337
}
3438
}),
3539
'Table Row Heatmap': defineComponent({
3640
name: 'vue-table-row-heatmap',
3741
setup(props) {
38-
return () => h(TableRenderer, {
39-
...defaultProps,
40-
...props,
41-
heatmapMode: 'row'
42-
})
42+
return () =>
43+
h(TableRenderer, {
44+
...defaultProps,
45+
...props,
46+
heatmapMode: 'row'
47+
})
48+
}
49+
}),
50+
'Export Table TSV': defineComponent({
51+
name: 'tsv-export-renderers',
52+
setup(props) {
53+
return () =>
54+
h(TSVExportRenderers, {
55+
...defaultProps,
56+
...props
57+
})
4358
}
4459
})
4560
}

0 commit comments

Comments
 (0)