diff --git a/src/components/TableDialog.vue b/src/components/TableDialog.vue index 8a6a8cfd..60f923cb 100644 --- a/src/components/TableDialog.vue +++ b/src/components/TableDialog.vue @@ -1,7 +1,7 @@ @@ -139,6 +197,22 @@ export default defineComponent({ }, }, setup(props, { emit }) { + // Stepper control + const step: Ref = ref(1); + const rowSample: Ref> = ref([]); + const headers = computed(() => { + if (rowSample.value.length === 0) { + return []; + } + + const keys = Object.keys(rowSample.value[0]); + + return keys.map((key) => ({ + text: key, + value: key, + })); + }); + // Type recommendation const columnType: Ref<{[key: string]: CSVColumnType}> = ref({}); @@ -165,9 +239,11 @@ export default defineComponent({ } const typeRecs = await csvFileTypeRecommendations(file); - columnType.value = Array.from(typeRecs.keys()).reduce( - (acc, key) => ({ ...acc, [key]: typeRecs.get(key) }), {}, + columnType.value = Array.from(typeRecs.typeRecs.keys()).reduce( + (acc, key) => ({ ...acc, [key]: typeRecs.typeRecs.get(key) }), {}, ); + + rowSample.value = [...typeRecs.rowSample]; } // Upload options @@ -217,6 +293,9 @@ export default defineComponent({ } return { + step, + headers, + rowSample, columnType, multinetTypes, fileName, @@ -241,4 +320,8 @@ export default defineComponent({ margin: 49px 10px 0 0; z-index: 1; } +.upload-preview table th { + background-color: #1976d2 !important; + color: #fff !important; +} diff --git a/src/utils/files.ts b/src/utils/files.ts index 6e5986ca..78795e0c 100644 --- a/src/utils/files.ts +++ b/src/utils/files.ts @@ -46,10 +46,16 @@ interface TypeScore { total: number; } -async function csvFileTypeRecommendations(file: File): Promise> { - const parsePromise: Promise> = new Promise((resolve) => { +interface Recommendation { + typeRecs: Map; + rowSample: Array<{}>; +} + +async function csvFileTypeRecommendations(file: File): Promise { + const parsePromise: Promise = new Promise((resolve) => { const columnTypes = new Map(); const typeRecs = new Map(); + const rowSample = [] as Array<{}>; Papa.parse(file, { header: true, @@ -58,6 +64,10 @@ async function csvFileTypeRecommendations(file: File): Promise { if (!columnTypes.has(key)) { columnTypes.set(key, { @@ -121,7 +131,10 @@ async function csvFileTypeRecommendations(file: File): Promise