From 8a637ad90bfae9647eec7d7745c1de92fb4840a2 Mon Sep 17 00:00:00 2001 From: Savy011 <106910589+Savy011@users.noreply.github.com> Date: Sun, 28 May 2023 09:32:49 +0530 Subject: [PATCH] Finished Ex 9.17 --- .../src/routes/diaries.ts | 4 +- Part_9/flight-diary-frontend/src/App.tsx | 22 ++------ .../src/components/EntryContent.tsx | 17 +++++++ .../src/components/EntryForm.tsx | 50 +++++++++++++++++++ .../src/services/diaryService.ts | 8 ++- .../src/{services => }/utils/types.ts | 2 + 6 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 Part_9/flight-diary-frontend/src/components/EntryContent.tsx create mode 100644 Part_9/flight-diary-frontend/src/components/EntryForm.tsx rename Part_9/flight-diary-frontend/src/{services => }/utils/types.ts (86%) diff --git a/Part_9/flight-diary-backend/src/routes/diaries.ts b/Part_9/flight-diary-backend/src/routes/diaries.ts index 601b350..397cbfd 100644 --- a/Part_9/flight-diary-backend/src/routes/diaries.ts +++ b/Part_9/flight-diary-backend/src/routes/diaries.ts @@ -13,13 +13,13 @@ router.post('/', (req, res) => { const newDiaryEntry = toNewDiary(req.body); const addedEntry = diaryService.addDiary(newDiaryEntry); - res.json(addedEntry); + return res.json(addedEntry); } catch (error) { let errorMessage = 'Somethign Went Wrong'; if (error instanceof Error) { errorMessage += ' Error: ' + error.message; } - res.send(400).send(errorMessage); + return res.send(400).send(errorMessage); } }); diff --git a/Part_9/flight-diary-frontend/src/App.tsx b/Part_9/flight-diary-frontend/src/App.tsx index fa44a98..1e3769d 100644 --- a/Part_9/flight-diary-frontend/src/App.tsx +++ b/Part_9/flight-diary-frontend/src/App.tsx @@ -1,20 +1,8 @@ import { useEffect, useState } from 'react'; import { getAll } from './services/diaryService'; -import { DiaryEntry } from './services/utils/types'; - -const DiaryEntryContent = ({ diaryEntry }: { diaryEntry: DiaryEntry }): JSX.Element => { - return ( -
-

{diaryEntry.date}

-

Visibility: {diaryEntry.visibility}

-

Weather: {diaryEntry.weather}

- {diaryEntry.comment - ? (

Comment: {diaryEntry.comment}

) - : null - } -
- ) -} +import { DiaryEntry } from './utils/types'; +import EntryContent from './components/EntryContent' +import EntryForm from './components/EntryForm'; const App = (): JSX.Element => { const [entries, setEntries] = useState([]) @@ -26,10 +14,10 @@ const App = (): JSX.Element => { return (

Flight Diary

- +

Entries

{entries.map(entry => ( - + ))}
) } diff --git a/Part_9/flight-diary-frontend/src/components/EntryContent.tsx b/Part_9/flight-diary-frontend/src/components/EntryContent.tsx new file mode 100644 index 0000000..b2cf677 --- /dev/null +++ b/Part_9/flight-diary-frontend/src/components/EntryContent.tsx @@ -0,0 +1,17 @@ +import { DiaryEntry } from '../utils/types'; + +const EntryContent = ({ diaryEntry }: { diaryEntry: DiaryEntry }): JSX.Element => { + return ( +
+

{diaryEntry.date}

+

Visibility: {diaryEntry.visibility}

+

Weather: {diaryEntry.weather}

+ {diaryEntry.comment + ? (

Comment: {diaryEntry.comment}

) + : null + } +
+ ) +} + +export default EntryContent diff --git a/Part_9/flight-diary-frontend/src/components/EntryForm.tsx b/Part_9/flight-diary-frontend/src/components/EntryForm.tsx new file mode 100644 index 0000000..ddc7f8a --- /dev/null +++ b/Part_9/flight-diary-frontend/src/components/EntryForm.tsx @@ -0,0 +1,50 @@ +import React, { useState } from 'react'; +import { postEntry } from '../services/diaryService'; +import { DiaryEntry } from '../utils/types'; + +const EntryForm = ({ entries, setEntries }: { entries: DiaryEntry[], setEntries: React.Dispatch> }) => { + const [date, setDate] = useState('') + const [visibility, setVisibility] = useState('') + const [weather, setWeather] = useState('') + const [comment, setComment] = useState('') + + const handleSubmit = (event: React.SyntheticEvent) => { + event.preventDefault() + console.log('Adding Entry') + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + postEntry({ date, visibility , weather, comment}).then(newEntry => { + setEntries(entries.concat(newEntry)) + }) + setDate('') + setWeather('') + setVisibility('') + setComment('') + } + + return ( +
+
+

+ Date:   + setDate(e.target.value)} /> +

+

+ Weather:   + setWeather(e.target.value)} /> +

+

+ Visibility:   + setVisibility(e.target.value)} /> +

+

+ Comment:   + setComment(e.target.value)} /> +

+ +
+
+ ) +} + +export default EntryForm diff --git a/Part_9/flight-diary-frontend/src/services/diaryService.ts b/Part_9/flight-diary-frontend/src/services/diaryService.ts index c8282cf..0284dd6 100644 --- a/Part_9/flight-diary-frontend/src/services/diaryService.ts +++ b/Part_9/flight-diary-frontend/src/services/diaryService.ts @@ -1,5 +1,5 @@ import axios from 'axios'; -import { DiaryEntry } from './utils/types'; +import { DiaryEntry, NewDiaryEntry } from '../utils/types'; const baseUrl = 'http://localhost:3001/api/diaries' @@ -8,3 +8,9 @@ export const getAll = async () => { return response.data } + +export const postEntry = async (entryObject: NewDiaryEntry) => { + const response = await axios.post(baseUrl, entryObject) + + return response.data +} diff --git a/Part_9/flight-diary-frontend/src/services/utils/types.ts b/Part_9/flight-diary-frontend/src/utils/types.ts similarity index 86% rename from Part_9/flight-diary-frontend/src/services/utils/types.ts rename to Part_9/flight-diary-frontend/src/utils/types.ts index 2ad8715..2b71d36 100644 --- a/Part_9/flight-diary-frontend/src/services/utils/types.ts +++ b/Part_9/flight-diary-frontend/src/utils/types.ts @@ -20,3 +20,5 @@ export interface DiaryEntry { visibility: Visibility; comment?: string; } + +export type NewDiaryEntry = Omit -- 2.51.2