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 (
+
+ )
+}
+
+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