Challenge Overview
BASIC REQUIREMENTS
CHALLENGE GOAL
The goal of this challenge is to build native desktop app that allows the user to configure a set of devices that are included in a particular customer order.
PROJECT BACKGROUND
CHALLENGE ASSETS
Technology Stack
OS Requirements
IMPORTANT: Your submission need build as desktop native app that will work on these required OS:
Submission Requirements
A). Issues from Bug Hunt
Functionalities Issues
Layout Issues
Material UI Issues
Typos Issues
B). Code Quality Updates
General
Login
Locate Order
Devices Page
DeviceListHeaderBar
TopRightStats
DeviceTable
ConfigurationDialog
C). Unit Testing and Sonarqube
You need to fix these types of Issues:
You need to fix these type of Severity:
- Continue fix desktop native app by following challenge requirements
- Fix issues from previous Bug Hunts and Code Quality feedback from client
- Need remain support Sonarqube for Code quality
- Must not breaking unit testing after updates based on Sonarqube result
- Submit the updated Installer for required OS
CHALLENGE GOAL
The goal of this challenge is to build native desktop app that allows the user to configure a set of devices that are included in a particular customer order.
PROJECT BACKGROUND
- This application is used to configure a set of devices that are included in a particular customer order.
- The user starts by entering the order number.
- The application queries the API and retrieves the order details.
- These details include a list of individual devices that are used to populate the devices list. The details for each device are also fetched from the API.
- Each of these devices needs to be configured before the order is complete.
- Devices are configured by navigating to the device details page and clicking the Configure button.
CHALLENGE ASSETS
- Base submission source code: https://gitlab.com/eaton-topcoder/device-config-starter-frontend
- Mock API source code: https://gitlab.com/eaton-topcoder/device-config-starter-backend
- Mock API demo: https://thor-dc-starter.herokuapp.com/api/
Technology Stack
- Electron and the Forge: https://electronforge.io/
- ReactJS
- JSON-Server
OS Requirements
IMPORTANT: Your submission need build as desktop native app that will work on these required OS:
- Windows 7
- Windows 10
- Mac
Submission Requirements
A). Issues from Bug Hunt
Functionalities Issues
- After successfully configure the device. Click "Return to this order” button need go back to previous device list". Not to Locate Order page and need to re-enter order and item numbers.
- Back arrow on device details page doesn't take me to previous device list.
- When a user refresh the page via keyboard, page show blank error page. Need remain displayed the page. It look this problem related to the router
- Change Search dropdown should not refresh the table. Only need trigger the search if user press enter after fill the values
- Functionalities Issues from Bug Hunts: https://gitlab.com/eaton-topcoder/device-config-starter-frontend/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=Accepted&label_name[]=functionalities
Layout Issues
- We need to set minimum width and height (1366px x 768px) for all pages.
- Layout Issues from Bug Hunts: https://gitlab.com/eaton-topcoder/device-config-starter-frontend/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=Accepted&label_name[]=layout
Material UI Issues
- We need enhance all page elements as possible using standard format. Please check here for potential look and feel: https://stackblitz.com/@px-blue
- Material UI Issues from Bug Hunts: https://gitlab.com/eaton-topcoder/device-config-starter-frontend/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=Accepted&label_name[]=material-ui
Typos Issues
- There are a lot of typos in the current app. We need to use spell check utility to make sure text using good grammar.
- Typos Issues from Bug Hunts: https://gitlab.com/eaton-topcoder/device-config-starter-frontend/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=Accepted&label_name[]=typos
B). Code Quality Updates
General
- 3 Test Suites fail
- Run “yarn test”, fix all the issues based on the Test unit report
- Some typos in build file (others?)
- /build.js has typos on “successful”…lines 51, 72
- Shouldn’t need to import icons and fonts in index.html
- Icons come with material-ui and typeface-open-sans should be required in index.jsx
- Having all layouts implement the menu is weird as opposed to wrapping a single menu component around the router
- shouldComponentUpdate lifecycle hook being used when componentDidUpdate is the more appropriate choice
- Navigation drawer shouldn’t be expandable
- Redux action names could be converted to constants
Login
- Login title should use a larger variant instead of overriding size
- Why using <Input> and <InputLabel> instead of <TextField>?
- Don’t need a clear button for both inputs
- This does not match PX Blue patterns
- Forget Password should be Forgot Password
- Text is too large (refer to https://stackblitz.com/edit/pxblue-login-react )
- body1 and body2 may have swapped sizes in the latest version of material-ui
- Placement and styling of error messages is inconsistent with Material design
- Make error text display as single line
- Errors should be shown below the form fields (refer to https://stackblitz.com/edit/pxblue-form-validation-react )
- Password field should be cleared after incorrect login
Locate Order
- Errors should be presented beneath the input fields (not a modal)
- Do not hide the form when loading the devices
- Make the preloader overlay displayed above the page
- Seems like a convoluted way of setting the enabled state of the search button
- why not just disabled={!this.state.orderNumber.length || !this.state.itemNumber.length}
- Various typos in the code (occurred, appropriate)
- Src/pages/Locate/index.jsx has typos on “occurred” (line 70) and “appropriate” (line 120)
- Please check all pages
Devices Page
- Responsiveness is not very good
- Empty Search results should match the pattern at https://stackblitz.com/edit/pxblue-empty-states-react
DeviceListHeaderBar
- Should not be overriding font sizes and weights in CSS. Choose a more appropriate Typography variant
- This should be wrapped inside a Toolbar/Appbar
- This will eliminate the need for custom styling for the sticky behavior
- Why is getStructures defined in this file if it’s not used in this file?
- StructureMenu should be using a <Select> component from material-ui instead of building a custom component
- Don’t need to show the count of selected structures when a single item is selected
- FilterMenu should be using a <Select> instead of a custom component
- Selected indexes should be set to CONSTANT variables instead of hardcoding numeric values
- Why not use a regex/replace to handle non-numeric input in the search field for device ID?
- Search bar should not be a Paper it should just be a <TextField> with an adornment
- This will allow you to eliminate majority of the custom styling for this component
- Report an issue button doesn’t need to be abstracted to a component
- It should be color={‘primary’} to avoid unnecessary styling rules
TopRightStats
- We shouldn’t be storing an entire component in the redux store, just the values that support it
- Makes more sense to store the list of devices and have the Stats component do the calculations for the various pieces
DeviceTable
- Button statuses should be set as CONSTANTS for readability
- shouldComponentUpdate logic feels messy
- Can this be simplified?
- All text should be in a Typography component
- Font sizes in each column should match
- Use the same typography variant
- Lots of custom styles in the CSS. Can this be reduced?
- Configuration Details should be collapsible
- Don’t do handleActionClick based on the CSS class of the element. Use proper onClick handlers on each element
- Don’t do handleNextStepClick based on index in the list…this will break if we want to reorder the items
- Consider an onclick function in the object for each item
- Don’t use hardcoded strings for indexing into objects
- Use a <Chip> for the status indicator
- Don’t hardcode successful configuration message as default (line 294)
- Lots of custom styling rules, what can be reduced/simplified/eliminated/inlined?
- Next steps sidebar clickable areas should be full width of the container
ConfigurationDialog
- Why is there a CustomStepConnector that just return a StepConnector?
- All text elements should be in a <Typography> component
- Blue text on light blue background is strange (steps), white on blue better?
- Lots of custom styling rules, what can be reduced/simplified/eliminated/inlined?
C). Unit Testing and Sonarqube
- As part of this challenge, you need to maintain code quality for unit testing and sonarqube
- For unit testing please run “npx jest”. Fix any error displayed on the console.
- For sonarqube, please follow the instruction to run Sonarqube on ReadMe.md
- Let us know if you have any questions/clarifications about the Sonarqube.
You need to fix these types of Issues:
- Bug
- Vulnerability
- Code Smell
You need to fix these type of Severity:
- Blocker
- Critical
- Major
Final Submission Guidelines
Challenge Deliverables- Updated source code that implement the challenge requirements.
- Include Windows and Mac installer in your submission, use different version ex: 0.0.3
- Challenge winner need to send MR to our repo
- Updated README in markup format contains all deployment detail steps (if any)