Placement of files within a project repository is important, especially as the project scales. Below are our patterns for file structure organization:
Components
Location
- Global: 
src/components - Contained/In one route only: 
src/routes/:routeName/components 
Creation
As noted in the adding features we use the component subgenerator like so:
yo react-firebase:componentHandles
- All view layout/styling
 
Patterns
- Should be stateless (just a function instead of a Class)
 
Example
src/components/SomeComponent.js:
import React, { PropTypes } from "react";
function SomeComponent({ someProp }) {
  return <div>Some Component</div>;
}
SomeComponent.propTypes = {
  someProp: PropTypes.func.isRequired,
};
export default SomeComponent;Approved file names by component
These are the only authorized files, anything that doesn’t have a clear home should go in *enhancer.js. (Need to update the generator)
| Name | Purpose | 
|---|---|
Component.enhancer.js | 
Adds data and handling to the Component, importing the following files to do so: (ALSO THE CATCHALL) | 
Component.js | 
Functional React Component | 
Component.spec.js | 
Unit tests per component | 
Component.styles.js | 
JS Styles / MUI V1 stylesheets | 
index.js | 
Exports the enhanced Component | 
Routes
Async vs Sync definitions
Location
- Route Folder: 
src/routes/SomeRoute - Components: 
src/routes/SomeRoute/components/SomeComponent/SomeComponent.js 
Creation
Create a new container name “SomeRoute” by running yo react-firebase:route SomeRoute
What they Handle
- Pages/Routes/Locations within app
 - They can contain components, and modules
 
Children
Components
components/SomeComponent/SomeComponent.js
Routes
index.js
Assets
Location
`src/static`
Patterns
Import in javascript, then use import as ref
Example
To import asset.png:
import Asset from "static/asset.png";
// Then later
<img src={Asset} />;Why
This allows Webpack to handle chunking of asset files, which means in the case of files like pngs, it can be converted to a BASE64 string when being imported. Also, it reads nice to have all dependencies/content imported with the same syntax.
Styles
Location
Global/Shared: src/theme
Patterns
Styles for components are within .styles file within the component folder