From 91b6a9342a45e43444e016ab09d1c0916998fb64 Mon Sep 17 00:00:00 2001 From: Ethan Shafran Moltz Date: Tue, 4 Jun 2024 14:51:03 -0400 Subject: [PATCH 1/4] added drag and drop component --- bun.lockb | Bin 310370 -> 311574 bytes package.json | 1 + src/App.tsx | 55 ++++++++++++++++++------------------ src/components/DropZone.tsx | 21 ++++++++++++++ 4 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 src/components/DropZone.tsx diff --git a/bun.lockb b/bun.lockb index e2dd291c6e0fc68e496f5953e2d74faf424203a9..e0e718ff51c0392059603d929882a14f0893c6a7 100755 GIT binary patch delta 50408 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 delta 49745 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 const [processedShopData, setProcessedShopData] = useState(null); @@ -29,40 +30,40 @@ function App() { // } // }, [isDataShopDataLoading, dataShopData]) - useEffect(() => { - if (isLocalSampleDataLoading) { - return; - } - if (localSampleData) { - const _processData = async () => { - const processedData = await processDataShopData(localSampleData as GlobalDataType[]) - setProcessedShopData(processedData); - } - _processData(); - } - }, [isLocalSampleDataLoading, localSampleData]) + // useEffect(() => { + // if (isLocalSampleDataLoading) { + // return; + // } + // if (localSampleData) { + // const _processData = async () => { + // const processedData = await processDataShopData(localSampleData as GlobalDataType[]) + // setProcessedShopData(processedData); + // } + // _processData(); + // } + // }, [isLocalSampleDataLoading, localSampleData]) - useEffect(() => { - const _processData = async () => { - if (pathAnalysisData) { - setProcessedPathAnalysisData(await processPathAnalysisData(convertDataTypesIncomingData(pathAnalysisData))); - } - } - _processData(); + // useEffect(() => { + // const _processData = async () => { + // if (pathAnalysisData) { + // setProcessedPathAnalysisData(await processPathAnalysisData(convertDataTypesIncomingData(pathAnalysisData))); + // } + // } + // _processData(); - }, [isPathAnalysisDataLoading, pathAnalysisData]) + // }, [isPathAnalysisDataLoading, pathAnalysisData]) - if (isPathAnalysisDataLoading || !processedPathAnalysisData || !processedShopData) { - return
Loading...
- } + // if (isPathAnalysisDataLoading || !processedPathAnalysisData || !processedShopData) { + // return
Loading...
+ // } return ( <>
{/* path analysis window */} - - + + {/* */}
diff --git a/src/components/DropZone.tsx b/src/components/DropZone.tsx new file mode 100644 index 0000000..19888c4 --- /dev/null +++ b/src/components/DropZone.tsx @@ -0,0 +1,21 @@ +import { useCallback } from 'react'; +import { useDropzone } from 'react-dropzone'; + +export default function DropZone() { + const onDrop = useCallback((acceptedFiles: any) => { + console.log(acceptedFiles); + }, []); + + const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop }) + + return ( +
+ + { + isDragActive ? +

Drop em here

: +

Drag 'n' drop some files here, or click to select files

+ } +
+ ); +} \ No newline at end of file From 91852602dc271da369d638e2f300eae8f88043e6 Mon Sep 17 00:00:00 2001 From: Ethan Shafran Moltz Date: Tue, 4 Jun 2024 15:09:00 -0400 Subject: [PATCH 2/4] added file reader --- src/components/DropZone.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/components/DropZone.tsx b/src/components/DropZone.tsx index 19888c4..7b32e65 100644 --- a/src/components/DropZone.tsx +++ b/src/components/DropZone.tsx @@ -2,9 +2,21 @@ import { useCallback } from 'react'; import { useDropzone } from 'react-dropzone'; export default function DropZone() { - const onDrop = useCallback((acceptedFiles: any) => { - console.log(acceptedFiles); - }, []); + const onDrop = useCallback((acceptedFiles: File[]) => { + acceptedFiles.forEach((file: File) => { + const reader = new FileReader() + + reader.onabort = () => console.log('file reading was aborted') + reader.onerror = () => console.log('file reading has failed') + reader.onload = () => { + // Do whatever you want with the file contents + const binaryStr = reader.result + console.log(binaryStr) + } + reader.readAsArrayBuffer(file) + }) + + }, []) const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop }) From 28b06c40a475baa4927d07b19e397ecb720efa73 Mon Sep 17 00:00:00 2001 From: Ethan Shafran Moltz Date: Thu, 6 Jun 2024 10:11:30 -0400 Subject: [PATCH 3/4] drop zone to process incoming data --- src/App.tsx | 10 ++++++---- src/components/DropZone.tsx | 35 +++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index d085c7a..6a263d5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,8 +1,8 @@ import './App.css' -import { +import { // useDataShopData, useLocalSampleData, - usePathAnalysisData + usePathAnalysisData } from '@/lib/dataFetchingHooks'; import { useEffect, useState } from 'react'; import { convertDataTypesIncomingData, processPathAnalysisData, processDataShopData } from '@/lib/dataProcessingUtils'; @@ -61,8 +61,10 @@ function App() { return ( <>
- {/* path analysis window */} - +
+ +
+ {/* */}
diff --git a/src/components/DropZone.tsx b/src/components/DropZone.tsx index 7b32e65..eabc7fb 100644 --- a/src/components/DropZone.tsx +++ b/src/components/DropZone.tsx @@ -1,33 +1,48 @@ import { useCallback } from 'react'; -import { useDropzone } from 'react-dropzone'; +import { Accept, useDropzone } from 'react-dropzone'; export default function DropZone() { const onDrop = useCallback((acceptedFiles: File[]) => { acceptedFiles.forEach((file: File) => { const reader = new FileReader() - reader.onabort = () => console.log('file reading was aborted') - reader.onerror = () => console.log('file reading has failed') + reader.onabort = () => console.warn('file reading was aborted') + reader.onerror = () => console.error('file reading has failed') reader.onload = () => { - // Do whatever you want with the file contents - const binaryStr = reader.result - console.log(binaryStr) + // Do whatever you want with the file contents after .readAsText() + const textStr = reader.result + console.log(textStr) } - reader.readAsArrayBuffer(file) + reader.readAsText(file) }) }, []) - const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop }) + const acceptedFileTypes: Accept = { + 'text/plain': ['.txt', '.csv', '.tsv', '.json'], + } + + const { getRootProps, getInputProps, isDragActive, isFocused, isDragReject } = useDropzone({ + onDrop, + accept: acceptedFileTypes, + }); return ( -
+
{ - isDragActive ? + (isDragActive && !isDragReject) ?

Drop em here

:

Drag 'n' drop some files here, or click to select files

} + { + isDragReject && +

File type not accepted, please try again

+ + }
); } \ No newline at end of file From 8dff02e5a177b7695a98365de745b33f0dc0009f Mon Sep 17 00:00:00 2001 From: Ethan Shafran Moltz Date: Thu, 6 Jun 2024 10:27:14 -0400 Subject: [PATCH 4/4] new parsing function --- bun.lockb | Bin 311574 -> 311574 bytes src/components/DropZone.tsx | 5 ++++- src/lib/utils.ts | 13 +++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index e0e718ff51c0392059603d929882a14f0893c6a7..588c8de8c04b7d7e3cb36766c523fc5494cb83f5 100755 GIT binary patch delta 47 zcmbQ%Bs{H2xS@ryg=q`(X)Sgp1~8a@NsBp=gE7v~M9)aixZPTtdAqeX%k8NEHL(nw delta 47 ycmbQ%Bs{H2xS@ryg=q`(X)SifI8!|nJ;Ujjw3rh)m>3|S-CCP@yR|mU?Wq7n;S6j5 diff --git a/src/components/DropZone.tsx b/src/components/DropZone.tsx index eabc7fb..4df743b 100644 --- a/src/components/DropZone.tsx +++ b/src/components/DropZone.tsx @@ -1,5 +1,7 @@ import { useCallback } from 'react'; import { Accept, useDropzone } from 'react-dropzone'; +import { GlobalDataType } from '@/lib/types'; +import { parseData } from '@/lib/utils'; export default function DropZone() { const onDrop = useCallback((acceptedFiles: File[]) => { @@ -11,7 +13,8 @@ export default function DropZone() { reader.onload = () => { // Do whatever you want with the file contents after .readAsText() const textStr = reader.result - console.log(textStr) + const array: GlobalDataType[] = parseData(textStr) + console.log(array) } reader.readAsText(file) }) diff --git a/src/lib/utils.ts b/src/lib/utils.ts index d084cca..aa44d82 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,6 +1,19 @@ import { type ClassValue, clsx } from "clsx" import { twMerge } from "tailwind-merge" +import { GlobalDataType } from "./types" +import Papa from "papaparse" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } + + +export function parseData(readerResult: string | ArrayBuffer | null, delimiter: "\t" | "," | "|" = "\t"): GlobalDataType[] { + const textStr = readerResult + const results = Papa.parse(textStr as string, { + header: true, + delimiter: delimiter + }) + const array: GlobalDataType[] = results.data as GlobalDataType[] + return array +} \ No newline at end of file