Skip to content

Conversation

sawaymas
Copy link
Member

No description provided.

sawaymas and others added 30 commits September 10, 2026 15:22
Scaffold project, configure engines/base path/.gitignore, add README setup instructions.

Closes #1
…-project

feat: set up Vite + React + TypeScript project
Add Prettier config and ignore file, disable conflicting ESLint rules via eslint-config-prettier, add lint/format scripts, and format the project.

Closes #2
Add api/, components/, hooks/, types/, and utils/ folders and move App into components/.

Closes #5
Add desktop and mobile wireframes, document country card content, component responsibilities, props, and state.

Closes #4
…ucture

feat: create the basic project structure
…ent-structure

docs: add wireframes and component structure
Document countries.dev in src/api/README.md and add a small getCountriesByRegion/getCountryByAlpha implementation to verify it.

Closes #6
Add a shared QueryClient and wrap App in QueryClientProvider. Configure five-minute stale time, disable refetch on window focus, and retry failed queries once.

Closes #7
feat: install and configure TanStack Query
Add getCountriesByRegion/getCountryByAlpha with response.ok checks, error handling, and a transform into an internal Country type.

Closes #9
…ching-country-data

feat: implement a function for fetching country data
Replace temporary API types with shared response and Country models, retain only required fields, and map country codes for component use without introducing any.

Closes #8
feat: define TypeScript types for country data
Add useCountries, a TanStack Query hook wired to getCountriesByRegion with data/loading/error state.

Closes #10
…ntry-data

feat: create a query hook for country data
Add semantic header/main/footer structure to App with sections for filters, selected country, and favorites, matching the component hierarchy.

Closes #11
…n-layout

feat: create application main layout
Add accessible Loading and ErrorMessage components, and expose refetch from useCountries for retrying failed requests.

Closes #12
…ssages

feat: add loading and error message components
Display country details through props, format numbers, add flag alt text and responsive styling, handle missing API fields, and show one country at a time.

Closes #13
feat: add reusable country card
Track the selected country by ID, connect a country selector, default to the first available country, and handle changed or empty selections.

Closes #14
…ive-country

feat: implement active country state
Add reusable navigation controls with props, accessible buttons and country position. Update active country safely and disable navigation at selection boundaries.

Closes #15
…ous-and-next-country

feat: add previous and next country navigation
Extract a reusable country selector with props, an associated visible label and keyboard focus styling. Keep selection synchronized with the active country.

Closes #16
Filter European countries by subregion without mutating API data. Synchronize country selection and navigation, provide an all-regions option, and handle empty results.

Closes #28
sawaymas and others added 25 commits September 16, 2026 11:53
Adds tests for region filtering, sorting, and empty results.

Closes #45
Summarize the group's positive experience and suggest a more compact mobile layout with easier access to navigation controls.
…on-in-browsers

48 manually test the application in browsers
Test filter and sorting storage, favorite persistence and removal, restoration on startup, invalid data and unavailable storage. Clear storage between tests.

Closes #46
test: verify Web Storage persistence and restoration
Deployed a production build to the VM and verified it loads correctly at /project1.

Closes #50

Co-authored-by: Edvin Gunic <edving@stud.ntnu.no>

Co-authored-by: Felix Trommer <felixtro@stud.ntnu.no>
Confirms the app makes exactly one REST API request per session; filtering, sorting and navigation are all client-side. No query config changes needed.

Closes #49
Use role=radiogroup for the Dropdown's radio options instead of the generic group role, and give the page a descriptive <title> instead of the raw project folder name. Verified heading hierarchy, form labels, alt text, keyboard operability, focus indicators, and color contrast (all WCAG AA, computed) across the app.

Closes #37
…mance

docs: verify API calls and performance
…rovements

37 carry out accessibility improvements
Adds a snapshot test for CountryCard using fixed test data, with the useId()-generated heading id normalized so the snapshot only reflects stable content.

Closes #47
Use a light blue background with dark blue accents and white cards. Center the responsive heading, add a globe emoji and remove the decorative line.

Closes #77
style: refine page colors and header layout
Add the live app link, setup steps and documentation links to README. Document testing, Git workflow and weekly meetings while preserving PR approval rules.@
Add the live app link, setup steps and documentation links to README. Document testing, Git workflow and weekly meetings while preserving PR approval rules.
Review the project against the assignment requirements and correct inaccurate or outdated documentation. Verify linting, formatting, tests, and the production build.

Closes #53
…heck

docs: complete final project quality check
@sawaymas sawaymas requested a review from a team as a code owner September 17, 2026 17:41
Copy link
Member

@edving edving left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@sawaymas sawaymas merged commit aa871aa into main Sep 17, 2026
Sign in to join this conversation on GitHub.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants