This challenge is part of the hiring process for some of the Software Engineer positions at MUI.
https://github.com/mui/tech-challenge-react.git
This challenge is part of the hiring process for some of the Software Engineer positions at MUI. The idea is to make as much progress as possible under a given time constraint (3-4 hours).
At MUI, because we are a DevTools company, you'll make product decisions. You will flesh out product requirements and turn them into a technical design and implementation. This challenge simulates that, we will review the product decisions you make, the quality of the code, as well as how you approach diving into a complex codebase. We want to get a glimpse of how you will perform in the role.
MUI's objective is to become the UI toolkit for React developers. We're unifying the fragmented ecosystem of dependencies into a single set of simple, beautiful, consistent, and accessible React components.
Our mission is, ultimately, to make building great UIs and web apps a breeze โฏ quicker, simpler, and accessible to more people. At the end of the day, it's about writing less code.
Head to our Handbook to learn more.
Your challenge is split into two phases:
A Combo Box is a component that combines a text box with a dropdown list, allowing the users to choose among a long list of mutually exclusive values. For instance, Chrome's URL bar:
The goal of this first phase is to implement the above component:
<datalist>, without pre-made React componentsany and @ts-ignore are accepted but need to be justified (comments)yarn prettier && yarn eslint && yarn typescript)To save you time, a working environment was created with Next.js/TypeScript/eslint/prettier/testing-library/Babel, etc. It's a reproduction of the mui/material-ui repository. You can install this environment by following these steps:
git clone git@github.com:mui/tech-challenge-react.gityarnyarn startdocs/pages/components/phase1.tsx, it already contains a data set of 248 countries.
You can find the existing test to make pass at docs/pages/components/ComboBox.test.js.
The tests in the file can be run with this command: yarn t ComboBox.
Congratulations, you have completed the first implementation of the component in the first phase. Now, it's time to push it to production!
Fast forward months and hours of iteration on the component, you might reach a state close to the same Combo Box component that we were running in production around January 2021.
This second phase is about handling a fake GitHub issue a developer has just opened.
Developers rarely spend the time to explain the pain point they face in detail nor provide context. Lucky for us, we received a reproduction we can leverage:
Hi, I'm facing problem, please help.
> #### Steps to reproduce ๐น
> 1. Open https://codesandbox.io/s/recursing-mclean-2dub0?file=/demo.tsx
2. Type 1 in the textbox. Once the options are loaded, the component displays options filtered by input value. The callbackonHighlightChangelog correct valueoption 1 1.
3. Then type 2 in the textbox. The textbox now contains12. The component displays options filtered by input value. The callbackonHighlightChangelog wrong valueoption 1 1instead ofoption 2 12.
> #### Environment
>@material-ui/core@5.0.0-alpha.15
The repository you have cloned in the beginning includes a simplified version of https://github.com/mui/material-ui on v5.0.0-alpha.15.
packages/material-ui/src/Autocomplete/Autocomplete.test.jsyarn t Autocomplete.The goal of this second phase is to improve the component from v5.0.0-alpha.15 and hopefully solve most of the pain points of this developer.
Instructions:
/_node_modules_/ and /docs/.next/ folders.