Skip to content

Commit e002272

Browse files
committed
applied dry on fetchCsvData
1 parent 6fe6a22 commit e002272

File tree

4 files changed

+13
-50
lines changed

4 files changed

+13
-50
lines changed

src/UtilityFunctions/FetchCsvData.ts

+4-41
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,21 @@
11
import { parse, ParseResult } from 'papaparse';
2-
import { Author, Book, Magazine } from './dtos';
32

43

5-
export const parseCsvFromBookUrl = async (url: string) => {
6-
const parseFile = (url: string): Promise<Book[]> => {
4+
export const parseCsvFromUrl = async <T>(url: string): Promise<T[]> => {
5+
const parseFile = (url: string): Promise<T[]> => {
76
return new Promise(resolve => {
87
parse(url, {
98
download: true,
109
header: true,
1110
dynamicTyping: true,
1211
skipEmptyLines: true,
13-
complete: function (results: ParseResult<Book>) {
12+
complete: function (results: ParseResult<T>) {
1413
console.log(results.data);
1514
resolve(results.data);
1615
}
1716
});
1817
});
1918
};
20-
let parsedData: Book[] = await parseFile(url);
19+
let parsedData: T[] = await parseFile(url);
2120
return parsedData;
2221
}
23-
export const parseCsvFromMagazineUrl = async (url: string) => {
24-
const parseFile = (url: string): Promise<Magazine[]> => {
25-
return new Promise(resolve => {
26-
parse(url, {
27-
download: true,
28-
header: true,
29-
dynamicTyping: true,
30-
skipEmptyLines: true,
31-
complete: function (results: ParseResult<Magazine>) {
32-
console.log(results.data);
33-
resolve(results.data);
34-
}
35-
});
36-
});
37-
};
38-
let parsedData: Magazine[] = await parseFile(url);
39-
return parsedData;
40-
}
41-
export const parseCsvFromAuthorUrl = async (url: string) => {
42-
const parseFile = (url: string): Promise<Author[]> => {
43-
return new Promise(resolve => {
44-
parse(url, {
45-
download: true,
46-
header: true,
47-
dynamicTyping: true,
48-
skipEmptyLines: true,
49-
complete: function (results: ParseResult<Author>) {
50-
console.log(results.data);
51-
resolve(results.data);
52-
}
53-
});
54-
});
55-
};
56-
let parsedData: Author[] = await parseFile(url);
57-
return parsedData;
58-
}

src/components/DisplayTables/AuthorsTable.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from 'react'
22
import { Table } from 'antd';
33
import type { ColumnsType, TableProps } from 'antd/es/table';
4-
import { parseCsvFromAuthorUrl } from '../../UtilityFunctions/FetchCsvData';
4+
import { parseCsvFromUrl } from '../../UtilityFunctions/FetchCsvData';
55
import { Author } from '../../UtilityFunctions/dtos';
66

77
interface DataType {
@@ -32,9 +32,9 @@ const AuthorTable = () => {
3232
console.log('params', pagination, filters, sorter, extra);
3333
};
3434
const fetchMagazines = async () => {
35-
const parsedMagazines: Author[] = await parseCsvFromAuthorUrl(AUTHORS_CSV_URL);
36-
console.log(parsedMagazines)
37-
setMagazines(parsedMagazines);
35+
const parsedAuthors: Author[] = await parseCsvFromUrl<Author>(AUTHORS_CSV_URL);
36+
console.log(parsedAuthors)
37+
setMagazines(parsedAuthors);
3838
}
3939

4040
useEffect(() => {

src/components/DisplayTables/BooksTable.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from 'react'
22
import { Table } from 'antd';
33
import type { ColumnsType, TableProps } from 'antd/es/table';
4-
import { parseCsvFromBookUrl } from '../../UtilityFunctions/FetchCsvData';
4+
import { parseCsvFromUrl } from '../../UtilityFunctions/FetchCsvData';
55
import { Book } from '../../UtilityFunctions/dtos';
66

77
interface DataType {
@@ -18,7 +18,7 @@ const columns: ColumnsType<DataType> = [
1818
{
1919
title: 'Isbn',
2020
dataIndex: 'isbn',
21-
width:200
21+
width: 200
2222
},
2323
{
2424
title: 'Authors',
@@ -39,7 +39,7 @@ const BooksTable = () => {
3939
console.log('params', pagination, filters, sorter, extra);
4040
};
4141
const fetchBooks = async () => {
42-
const parsedBooks: Book[] = await parseCsvFromBookUrl(BOOKS_CSV_URL);
42+
const parsedBooks: Book[] = await parseCsvFromUrl<Book>(BOOKS_CSV_URL);
4343
console.log(parsedBooks)
4444
setBooks(parsedBooks);
4545
}

src/components/DisplayTables/MagazineTable.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from 'react'
22
import { Table } from 'antd';
33
import type { ColumnsType, TableProps } from 'antd/es/table';
4-
import { parseCsvFromMagazineUrl } from '../../UtilityFunctions/FetchCsvData';
4+
import { parseCsvFromUrl } from '../../UtilityFunctions/FetchCsvData';
55
import { Magazine } from '../../UtilityFunctions/dtos';
66

77
interface DataType {
@@ -40,7 +40,7 @@ const MagazineTable = () => {
4040
console.log('params', pagination, filters, sorter, extra);
4141
};
4242
const fetchMagazines = async () => {
43-
const parsedMagazines: Magazine[] = await parseCsvFromMagazineUrl(MagazineS_CSV_URL);
43+
const parsedMagazines: Magazine[] = await parseCsvFromUrl<Magazine>(MagazineS_CSV_URL);
4444
console.log(parsedMagazines)
4545
setMagazines(parsedMagazines);
4646
}

0 commit comments

Comments
 (0)