Skip to content

Commit

Permalink
[#26] Add initial Survey and SurveyList component with data from API
Browse files Browse the repository at this point in the history
  • Loading branch information
liamstevens111 committed Mar 13, 2023
1 parent afb622b commit 6171a2e
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 4 deletions.
21 changes: 21 additions & 0 deletions src/adapters/surveyAdapter.ts
Original file line number Diff line number Diff line change
@@ -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;
17 changes: 17 additions & 0 deletions src/components/Survey/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
type SurveyProps = {
title: string;
description: string;
coverImageUrl: string;
};

function Survey({ title, description, coverImageUrl }: SurveyProps) {
return (
<>
<img src={coverImageUrl} alt="cover" />
<p> {title}</p>
<p> {description}</p>
</>
);
}

export default Survey;
20 changes: 20 additions & 0 deletions src/components/SurveyList/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import SurveyComponent from 'components/Survey';
import { Survey } from 'types/Survey';

type SurveyListProps = { surveys: Survey[] };

function SurveyList({ surveys }: SurveyListProps) {
return (
<div>
{surveys.map((survey) => {
return (
<li key={survey.id}>
<SurveyComponent {...survey} />
</li>
);
})}
</div>
);
}

export default SurveyList;
44 changes: 43 additions & 1 deletion src/screens/Home/index.tsx
Original file line number Diff line number Diff line change
@@ -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<Survey[]>([]);

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 <h3>Loading Surveys</h3>;
}

return (
<>
<div className="my-8 text-white opacity-50" data-test-id="app-main-heading">
Home Screen
Today - Monday, June 15
</div>

{surveys.length > 0 && <SurveyList surveys={surveys} />}
</>
);
};
Expand Down
4 changes: 1 addition & 3 deletions src/screens/ResetPassword/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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');

Expand Down
7 changes: 7 additions & 0 deletions src/types/Survey.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export type Survey = {
id: string;
title: string;
description: string;
type: string;
coverImageUrl: string;
};
10 changes: 10 additions & 0 deletions src/types/SurveyResponse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export type SurveyResponse = {
id: string;
type: string;
attributes: {
title: string;
description: string;
survey_type: string;
cover_image_url: string;
};
}[];

0 comments on commit 6171a2e

Please sign in to comment.