Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Various Routing changes/fixes #72

Merged
merged 3 commits into from
Feb 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions fe/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,13 @@ const App = () => {
justifyContent: 'center',
}}
>
{location.pathname !== '/' && location.pathname !== '/en' && (
{location.pathname !== '/' && (
<>
<Button
sx={{ m: 1 }}
size='large'
onClick={() =>
navigate(location.pathname.startsWith('/en') ? '/en' : '/')
navigate('/')
}
>
{t('page.main.title')}
Expand Down
83 changes: 24 additions & 59 deletions fe/src/components/Data.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { FC } from 'react';
import { Box } from '@mui/material';
import { DataNode } from '../interfaces/TreeNode';
import BankData from './data/BankData';
Expand All @@ -18,68 +19,32 @@ import VpnData from './data/VpnData';
import ContainerPharmacyData from './data/ContainerPharmacyData';
import { DataType } from '../variables/TreeNode';

const pageMappings: Record<string, FC<{value: any}>> = {
[DataType.BANK_ACCOUNT_DONATION]: BankData,
[DataType.BENEFICIAL_ARTICLES]: ArticleData,
[DataType.BLOOD_DONATION_LIST]: BloodDonationData,
[DataType.CITY_ACCOMMODATION]: CityAccommodation,
[DataType.CREDIT_CARD_DONATION]: CreditCardData,
[DataType.INTERNATIONAL_BANK_ACCOUNT_DONATION]: BankData,
[DataType.INTERNATIONAL_URL_DONATION]: URLData,
[DataType.NEW_GATHERING_LIST]: GatheringData,
[DataType.HELP_ITEM_LIST]: HelpItemData,
[DataType.PHONE_NUMBER_LIST]: TelephoneData,
[DataType.SMS_DONATION]: SMSData,
[DataType.URL_DONATION]: URLData,
[DataType.USEFUL_LINKS]: UsefulLinksData,
[DataType.STEM_CELL_DONATION]: StemCellData,
[DataType.DATA_VET]: VetData,
[DataType.FOOD_ITEMS]: FoodDistributionData,
[DataType.VPN]: VpnData,
[DataType.CONTAINER_PHARMACY]: ContainerPharmacyData,
}

export default function Data({ dataNode }: { dataNode: DataNode }) {
const renderData = () => {
const dataType = dataNode.data.dataType as DataType;

switch (dataType) {
case DataType.BANK_ACCOUNT_DONATION:
return <BankData value={dataNode.data as any} />;

case DataType.BENEFICIAL_ARTICLES:
return <ArticleData value={dataNode.data as any} />;

case DataType.BLOOD_DONATION_LIST:
return <BloodDonationData value={dataNode.data as any} />;

case DataType.CITY_ACCOMMODATION:
return <CityAccommodation value={dataNode.data as any} />;

case DataType.CREDIT_CARD_DONATION:
return <CreditCardData value={dataNode.data as any} />;

case DataType.INTERNATIONAL_BANK_ACCOUNT_DONATION:
return <BankData value={dataNode.data as any} />;

case DataType.INTERNATIONAL_URL_DONATION:
return <URLData value={dataNode.data as any} />;

case DataType.NEW_GATHERING_LIST:
return <GatheringData value={dataNode.data as any} />;

case DataType.HELP_ITEM_LIST:
return <HelpItemData value={dataNode.data as any} />;

case DataType.PHONE_NUMBER_LIST:
return <TelephoneData value={dataNode.data as any} />;

case DataType.SMS_DONATION:
return <SMSData value={dataNode.data as any} />;

case DataType.URL_DONATION:
return <URLData value={dataNode.data as any} />;

case DataType.USEFUL_LINKS:
return <UsefulLinksData value={dataNode.data as any} />;

case DataType.STEM_CELL_DONATION:
return <StemCellData value={dataNode.data as any} />;

case DataType.DATA_VET:
return <VetData value={dataNode.data as any} />;

case DataType.FOOD_ITEMS:
return <FoodDistributionData value={dataNode.data as any} />;

case DataType.VPN:
return <VpnData value={dataNode.data as any} />;

case DataType.CONTAINER_PHARMACY:
return <ContainerPharmacyData value={dataNode.data as any} />;
const Page = pageMappings[dataNode.data.dataType];

default:
return <></>;
}
return Page ? <Page value={dataNode.data} /> : <>Not found</>;
};

return (
Expand Down
26 changes: 21 additions & 5 deletions fe/src/components/Question.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,27 @@ export default function Question({ paths }: { paths: string[] }) {

const { data: selectedNode, isLoading } = useQuestionData(paths);

if (isLoading || !selectedNode) {
if (isLoading) {
return <></>;
}

if (!selectedNode) {
return <Box>
<Box
sx={{
textAlign: 'center',
display: 'flex',
flexFlow: 'column nowrap',
justifyContent: 'center',
}}
>
<Typography variant='h4'>
{t('notFound')}
</Typography>
</Box>
</Box>;
}

if (selectedNode.type !== TreeNodeType.NODE_TYPE_QUESTION) {
return <Data dataNode={selectedNode as any} />;
}
Expand Down Expand Up @@ -162,12 +179,11 @@ export default function Question({ paths }: { paths: string[] }) {
}}
>
{renderOptions()}
{selectedNode.externalData &&
selectedNode.externalData.usefulLinks?.length > 0 && (
{selectedNode.externalData?.usefulLinks?.length > 0 && (
<Box width='100%' mt={8}>
<Typography variant='h4'>
{selectedNode.externalData?.[`text_${i18n.language}`] ||
selectedNode.externalData?.text}
{selectedNode.externalData[`text_${i18n.language}`] ||
selectedNode.externalData.text}
</Typography>
<UsefulLinksData value={selectedNode.externalData} noTitle />
</Box>
Expand Down
1 change: 1 addition & 0 deletions fe/src/utils/locales/ar/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"data.vpn.subtitle": "تتيح لك الشّبكة الافْتراضيّة الخَاصَّة الوصول إلى المواقع الإلكترونية المحجوبة",
"data.container_pharmacy": "صيدليات الحاويات",

"notFound": "لم يتم العثور على الصفحة",
"button.back": "السابق",
"button.language": "تغيير",
"button.google_maps": "رابط خرائط جوجل",
Expand Down
1 change: 1 addition & 0 deletions fe/src/utils/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"data.vpn.subtitle": "VPN allows you to access blocked sites.",
"data.container_pharmacy": "Container Pharmacy",

"notFound": "Page not found",
"button.back": "Back",
"button.language": "Change Language",
"button.google_maps": "Google Maps Link",
Expand Down
1 change: 1 addition & 0 deletions fe/src/utils/locales/ku/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"data.vpn.subtitle": " VPN dihêle hûn bigihîjin malperên astengkirî.",
"data.container_pharmacy": "Dermanxaneyên Seyare",

"notFound": "Rûpel nehat dîtin",
"button.back": "paş",
"button.language": "Ziman biguherîne",
"button.google_maps": "Girêdana Google Mapsê ",
Expand Down
1 change: 1 addition & 0 deletions fe/src/utils/locales/tr/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"data.vpn.title": "İnternete bağlanmak için aşağıdaki ücretsiz VPN'leri kullanabilirsiniz.",
"data.vpn.subtitle": "VPN bloklanan sitelere girmenizi sağlar.",

"notFound": "Sayfa bulunamadı",
"button.back": "Geri",
"button.language": "Dili Değiştir",
"button.google_maps": "Google Maps Linki",
Expand Down