ivxvm / ghteam

Home Page:https://ivxvm.github.io/ghteam/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ghteam

Please create a React TypeScript app - "Create Your Engineering Team" - that allows you to:

  • Pass a GitHub user name in a form.

  • Click on a button ‘Load User' next to the from.

  • Load the user from the GitHub API (https://docs.github.com/en/rest/users/users#get-a-user).

  • Display loaded users.

  • Remove loaded users.

  • Add a role to loaded users, e.g. "Frontend Engineer".

  • The app does not have to persist data when closing the tab.

  • The app does not need to have tests.

Solution overview

To bootstrap app I used create-react-app with redux-toolkit and typescript template. RTK's createSlice, createAction, createAsyncThunk are used to define redux state tree, reducers, and actions / action creator for async thunk talking to API. I decided to choose createAsyncThunk over redux-saga or RTK Query because it's sufficiently powerful and also because there is just a single async request which doesn't even demand any special treatment. TypeScript-friendly versions of hooks useDispatch and useSelector are used in components to "talk" to redux. Project is structured using feature-folders approach, with some by-type grouping inside of feature folder. Styles are organized mostly using built-in CSS modules functionality (with role dropdown being exception because I use react-select library which is customized using inline CSS props). All components are functional components using hooks for state management, effects and synchronisation. LoadedUsersList component uses per-row render prop renderExtras for role dropdown, which isn't necessary for this simple app, but I wanted to showcase the approach (and also to remind myself how to do this).

You can see app in action at https://ivxvm.github.io/ghteam/ (uses my personal testing API token, configured to only have readonly access and only to user endpoints), if you want to run it yourself, clone repository, use npm install to install dependencies and then npm start, also make sure you have .env file at project root with github API token, like this:

REACT_APP_GITHUB_API_TOKEN = ghp_UEo2BYCcBbtU4cbG2okSZfWxzoUXa714lDyB

About

https://ivxvm.github.io/ghteam/


Languages

Language:TypeScript 70.9%Language:CSS 19.8%Language:HTML 9.3%