From 35fb56c3bf8c65506363e229fb69c76a603aee62 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Fri, 10 Jan 2025 09:32:09 -0500 Subject: Travel advisory, added visa page --- app/visas/HistoryModal.js | 40 ++++++++++++++++++++++++++++++++++++ app/visas/ListCountries.js | 51 ++++++++++++++++++++++++++++++++++++++++++++++ app/visas/page.js | 16 +++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 app/visas/HistoryModal.js create mode 100644 app/visas/ListCountries.js create mode 100644 app/visas/page.js (limited to 'app/visas') diff --git a/app/visas/HistoryModal.js b/app/visas/HistoryModal.js new file mode 100644 index 0000000..6d4df91 --- /dev/null +++ b/app/visas/HistoryModal.js @@ -0,0 +1,40 @@ +const HistoryModal = ({ isVisible, onClose, countries, dangerLevel, visaInfo }) => { + if (!isVisible) return null; + const handleClose = (e) => { + if(e.target.id === 'wrapper') onClose(); + } + + let historyList; + if (visaInfo && visaInfo.length > 0) { + historyList = visaInfo.map((event, index) => { + return ( +
  • {event}
  • + ) + }) + } else { + historyList =
  • No additional information for {countries}.
  • ; + } + + return ( +
    +
    +
    +
    +
    +
    +

    {countries}

    +

    {dangerLevel}

    +
    +
    +

    Additional Information

    +
      {historyList}
    +
    +
    +
    +
    +
    +
    + ) +} + +export default HistoryModal; diff --git a/app/visas/ListCountries.js b/app/visas/ListCountries.js new file mode 100644 index 0000000..6ca1863 --- /dev/null +++ b/app/visas/ListCountries.js @@ -0,0 +1,51 @@ +"use client" +import countriesData from '@/app/countries.json' assert { type: 'json' }; +import HistoryModal from "@/app/visas/HistoryModal"; +import { useState } from "react"; + +export function getDangerLevel(danger, override) { + if (danger === 0 && override !== undefined) { + danger = override; + } + + let dangerLevel; + switch (danger) { + case false: + dangerLevel = "Visa not required" + break; + case true: + dangerLevel = "Visa required" + break; + } + + return dangerLevel; +} + +export function Countries(){ + // eslint-disable-next-line react-hooks/rules-of-hooks + const [showModal, setShowModal] = useState(false); + const [selectedCountry, setSelectedCountry] = useState(null); + const [selectedDangerLevel, setSelectedDangerLevel] = useState(null); + const [selectedCountryHistory, setSelectedCountryHistory] = useState(null); + const countries = countriesData.countries; + + return countries.map((country) => { + let dangerLevel = getDangerLevel(country.visa); + + return ( +
    +
    +

    {country.name}

    +

    {dangerLevel}

    + +
    + setShowModal(false)} countries={selectedCountry} dangerLevel={selectedDangerLevel} visaInfo={selectedCountryHistory} /> +
    + ) + }) +} diff --git a/app/visas/page.js b/app/visas/page.js new file mode 100644 index 0000000..eb5ba3c --- /dev/null +++ b/app/visas/page.js @@ -0,0 +1,16 @@ +import { Countries } from "./ListCountries"; +import Header from "../components/Header"; + +export const metadata = { + title: 'Visas', + description: 'Information whether a country is required a visa or not. ', +} + +export default async function TravelAdvisory(){ + return ( +
    +
    + +
    + ) +} -- cgit v1.2.3