Ensure that removing content in table editor properly clears the spreadsheet import panel

This commit is contained in:
Joshen Lim committed 2021-12-21 16:04:59 +07:00
1 parent 4723b8c231
commit e4cead0e33
3 files changed
+35 -8

No files matched your search

@@ -1,5 +1,14 @@
import { SpreadsheetData } from './SpreadsheetImport.types'
export const UPLOAD_FILE_TYPES = [
'text/csv',
'text/tab-separated-values',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
]
export const EMPTY_SPREADSHEET_DATA: SpreadsheetData = {
headers: [],
rows: [],
rowCount: 0,
columnTypeMap: {},
}
@@ -1,14 +1,15 @@
import { useCallback, useState, FC } from 'react'
import { useCallback, useState, FC, useEffect } from 'react'
import { debounce, includes } from 'lodash'
import { SidePanel, Typography } from '@supabase/ui'
import { useStore } from 'hooks'
import Telemetry from 'lib/telemetry'
import ActionBar from '../../ActionBar'
import { parseSpreadsheet, parseSpreadsheetText } from './SpreadsheetImport.utils'
import { UPLOAD_FILE_TYPES } from './SpreadsheetImport.constants'
import SpreadSheetTextInput from './SpreadSheetTextInput'
import SpreadSheetFileUpload from './SpreadSheetFileUpload'
import { SpreadsheetData } from './SpreadsheetImport.types'
import { parseSpreadsheet, parseSpreadsheetText } from './SpreadsheetImport.utils'
import { UPLOAD_FILE_TYPES, EMPTY_SPREADSHEET_DATA } from './SpreadsheetImport.constants'
interface Props {
debounceDuration?: number
@@ -29,7 +30,16 @@ const SpreadsheetImport: FC<Props> = ({
}) => {
const { ui } = useStore()
const [spreadsheetData, setSpreadsheetData] = useState<any>({
useEffect(() => {
if (visible) {
if (headers.length === 0) {
setSpreadsheetData(EMPTY_SPREADSHEET_DATA)
setUploadedFile(null)
}
}
}, [visible])
const [spreadsheetData, setSpreadsheetData] = useState<SpreadsheetData>({
headers: headers,
rows: rows,
rowCount: 0,
@@ -81,11 +91,11 @@ const SpreadsheetImport: FC<Props> = ({
}
const removeUploadedFile = () => {
setSpreadsheetData({ headers: [], rows: [], rowCount: 0, columnTypeMap: {} })
setSpreadsheetData(EMPTY_SPREADSHEET_DATA)
setUploadedFile(null)
}
const readInputSpreadsheet = async (text: string) => {
const readSpreadsheetText = async (text: string) => {
if (text.length > 0) {
const { headers, rows, errors } = await parseSpreadsheetText(text)
if (errors.length <= 5) {
@@ -105,11 +115,11 @@ const SpreadsheetImport: FC<Props> = ({
}
setSpreadsheetData({ headers, rows, rowCount: rows.length, columnTypeMap: {} })
} else {
setSpreadsheetData({ headers: [], rows: [], rowCount: 0, columnTypeMap: {} })
setSpreadsheetData(EMPTY_SPREADSHEET_DATA)
}
}
const handler = useCallback(debounce(readInputSpreadsheet, debounceDuration), [])
const handler = useCallback(debounce(readSpreadsheetText, debounceDuration), [])
const onInputChange = (event: any) => {
setInput(event.target.value)
handler(event.target.value)
@@ -0,0 +1,8 @@
import { Dictionary } from '@supabase/grid'
export interface SpreadsheetData {
headers: string[]
rows: any[]
rowCount: number
columnTypeMap: Dictionary<string>
}