{"id":15882171,"url":"https://github.com/another-guy/ms-react-interview-q1","last_synced_at":"2025-09-04T19:07:20.270Z","repository":{"id":233949936,"uuid":"788076086","full_name":"another-guy/ms-react-interview-q1","owner":"another-guy","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-17T18:35:03.000Z","size":397,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-21T09:46:06.515Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/another-guy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-04-17T18:20:11.000Z","updated_at":"2024-04-17T18:21:02.000Z","dependencies_parsed_at":"2024-04-17T19:51:09.534Z","dependency_job_id":null,"html_url":"https://github.com/another-guy/ms-react-interview-q1","commit_stats":null,"previous_names":["another-guy/ms-react-interview-q1"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/another-guy/ms-react-interview-q1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/another-guy%2Fms-react-interview-q1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/another-guy%2Fms-react-interview-q1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/another-guy%2Fms-react-interview-q1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/another-guy%2Fms-react-interview-q1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/another-guy","download_url":"https://codeload.github.com/another-guy/ms-react-interview-q1/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/another-guy%2Fms-react-interview-q1/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273657269,"owners_count":25145041,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-06T04:01:47.306Z","updated_at":"2025-09-04T19:07:20.219Z","avatar_url":"https://github.com/another-guy.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# react-interview-q1 -- Test Project Assignment\n\n## Candidate: **Igor Soloydenko**\n\n* LinkedIn: https://www.linkedin.com/in/igorsoloydenko/\n* GitHub: https://github.com/another-guy\n* StackOverflow: https://stackoverflow.com/users/482868/igor-soloydenko\n\n## How to run the project\n\n**❗❗❗MAKE SURE THE COMMANDS ARE EXECUTED IN `solutions` SUBDIRECTORY.**\n\nExecute commands in bash:\n\n```sh\ncd solution\npnpm install\npnpm start\n```\n\nOpen http://localhost:3000 in your browser.\n\n## What's DONE and NOT done:\n\n![Result Page](./solution/docs/page.png)\n\n**❗❗❗Please, find my comments in code by searching for `Igor's comment`.**\n\n* Responsive form with the Name and Location fields with basic validation using mock API field.\n* Table with the list of Name/Location pairs.\n* Migrated to TypeScript from JavaScript for type safety and avoiding silly bugs.\n* Libraries used:\n  * MUI — UI component library.\n  * react-hook-form — dealing with HTML forms in React.\n  * yup — HTML form validation.\n* Features NOT implemented:\n  * Application state is handled via `useContext` + `useReducer` (and `useState` is used for Component state).\n    * Would use: Redux, MobX, XState, Zustand, or others.\n  * Loading state, API caching.\n    * Would use: react-query, SWR, or alike.\n  * Error handling.\n    * Need some better UX: toasts, notification bars, etc.\n  * Human-friendly UX: a11y, i18n, l10n.\n  * Exhaustive error handling.\n  * Production-ready UX (e.g. keyboard debouncing to avoid request throttling by the server).\n* Non-feature measures:\n  * Automated testing.\n    * React testing library, Jest/Vitest.\n\n## Original Instructions\n\nFork this repo first into your own github account. Make sure to thoroughly read the instructions and implement the react component to meet the provided requirements. Send back a link to your cloned repo. You are expected to make implementation choices around customer experience and efficiency. Please make sure to explain your choices in comments.\n\n## Original Requirements\n\nPlease build the following form component\n![form component mock](./mock.png)\n\n* Name input should be validated using the provided mock API to check whether the chosen name is taken or not.\n* Name input should be validated as the user is typing.\n* Location dropdown options should be fetched using the provided mock API.\n* Component should have a responsive layout\n* Component should be appropriately styled\n* Unit tests are not required","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanother-guy%2Fms-react-interview-q1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanother-guy%2Fms-react-interview-q1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanother-guy%2Fms-react-interview-q1/lists"}