From dbdf698f8143743d459f776b205404ee4d1c97f9 Mon Sep 17 00:00:00 2001
From: Liam Stevens <8955671+liamstevens111@users.noreply.github.com>
Date: Fri, 10 Mar 2023 15:17:27 +0700
Subject: [PATCH] [#26] Add initial Survey and SurveyList component with data
from API
---
src/adapters/surveyAdapter.ts | 21 ++++++++++++++
src/components/Survey/index.tsx | 17 +++++++++++
src/components/SurveyList/index.tsx | 20 +++++++++++++
src/screens/Home/index.tsx | 44 ++++++++++++++++++++++++++++-
src/screens/ResetPassword/index.tsx | 4 +--
src/types/Survey.ts | 7 +++++
src/types/SurveyResponse.ts | 10 +++++++
7 files changed, 119 insertions(+), 4 deletions(-)
create mode 100644 src/adapters/surveyAdapter.ts
create mode 100644 src/components/Survey/index.tsx
create mode 100644 src/components/SurveyList/index.tsx
create mode 100644 src/types/Survey.ts
create mode 100644 src/types/SurveyResponse.ts
diff --git a/src/adapters/surveyAdapter.ts b/src/adapters/surveyAdapter.ts
new file mode 100644
index 0000000..654ee00
--- /dev/null
+++ b/src/adapters/surveyAdapter.ts
@@ -0,0 +1,21 @@
+import { getItem } from 'helpers/localStorage';
+
+import BaseAdapter from './baseAdapter.';
+
+/* eslint-disable camelcase */
+export const commonParams = {
+ access_token: getItem('UserProfile')?.auth?.access_token,
+};
+/* eslint-enable camelcase */
+
+class SurveyAdapter extends BaseAdapter {
+ static list() {
+ const requestParams = {
+ ...commonParams,
+ };
+
+ return this.prototype.getRequest('surveys', { data: requestParams });
+ }
+}
+
+export default SurveyAdapter;
diff --git a/src/components/Survey/index.tsx b/src/components/Survey/index.tsx
new file mode 100644
index 0000000..2b77c7f
--- /dev/null
+++ b/src/components/Survey/index.tsx
@@ -0,0 +1,17 @@
+type SurveyProps = {
+ title: string;
+ description: string;
+ coverImageUrl: string;
+};
+
+function Survey({ title, description, coverImageUrl }: SurveyProps) {
+ return (
+ <>
+
+
{title}
+ {description}
+ >
+ );
+}
+
+export default Survey;
diff --git a/src/components/SurveyList/index.tsx b/src/components/SurveyList/index.tsx
new file mode 100644
index 0000000..b9131a5
--- /dev/null
+++ b/src/components/SurveyList/index.tsx
@@ -0,0 +1,20 @@
+import SurveyComponent from 'components/Survey';
+import { Survey } from 'types/Survey';
+
+type SurveyListProps = { surveys: Survey[] };
+
+function SurveyList({ surveys }: SurveyListProps) {
+ return (
+
+ {surveys.map((survey) => {
+ return (
+
+
+
+ );
+ })}
+
+ );
+}
+
+export default SurveyList;
diff --git a/src/screens/Home/index.tsx b/src/screens/Home/index.tsx
index c87cb3e..f73763c 100644
--- a/src/screens/Home/index.tsx
+++ b/src/screens/Home/index.tsx
@@ -1,9 +1,51 @@
+import { useState, useEffect } from 'react';
+
+import SurveyAdapter from 'adapters/surveyAdapter';
+import { Survey } from 'types/Survey';
+import { SurveyResponse } from 'types/SurveyResponse';
+
+import SurveyList from '../../components/SurveyList';
+
const HomeScreen = (): JSX.Element => {
+ const [loaded, setLoaded] = useState(false);
+ const [surveys, setSurveys] = useState([]);
+
+ useEffect(() => {
+ const fetchSurveys = async () => {
+ const surveyResponse = await SurveyAdapter.list();
+
+ const surveyData: SurveyResponse = await surveyResponse.data;
+
+ const parsedSurveys: Survey[] = [];
+
+ surveyData.forEach((survey) => {
+ parsedSurveys.push({
+ id: survey.id,
+ title: survey.attributes.title,
+ description: survey.attributes.description,
+ coverImageUrl: survey.attributes.cover_image_url,
+ type: survey.attributes.survey_type,
+ });
+ });
+
+ setSurveys(parsedSurveys);
+
+ setLoaded(true);
+ };
+ fetchSurveys();
+ }, []);
+
+ if (!loaded) {
+ return Loading Surveys
;
+ }
+
return (
<>
- Home Screen
+ Today - Monday, June 15
+
+ {surveys.length > 0 && }
>
);
};
diff --git a/src/screens/ResetPassword/index.tsx b/src/screens/ResetPassword/index.tsx
index f03fcbe..c6deb33 100644
--- a/src/screens/ResetPassword/index.tsx
+++ b/src/screens/ResetPassword/index.tsx
@@ -23,9 +23,7 @@ function ResetPasswordScreen() {
const performPasswordReset = async () => {
try {
- const resetPasswordResponse = await AuthAdapter.resetPassword(email);
-
- console.log(resetPasswordResponse);
+ await AuthAdapter.resetPassword(email);
} catch (error) {
let errorMessage = t('login.generic-server-error');
diff --git a/src/types/Survey.ts b/src/types/Survey.ts
new file mode 100644
index 0000000..46734e8
--- /dev/null
+++ b/src/types/Survey.ts
@@ -0,0 +1,7 @@
+export type Survey = {
+ id: string;
+ title: string;
+ description: string;
+ type: string;
+ coverImageUrl: string;
+};
diff --git a/src/types/SurveyResponse.ts b/src/types/SurveyResponse.ts
new file mode 100644
index 0000000..ad57c53
--- /dev/null
+++ b/src/types/SurveyResponse.ts
@@ -0,0 +1,10 @@
+export type SurveyResponse = {
+ id: string;
+ type: string;
+ attributes: {
+ title: string;
+ description: string;
+ survey_type: string;
+ cover_image_url: string;
+ };
+}[];