add /:username/sketches links to username sketches
This commit is contained in:
parent
e823e383e7
commit
bca59a6233
8 changed files with 40 additions and 8 deletions
|
@ -4,9 +4,15 @@ import axios from 'axios';
|
||||||
|
|
||||||
const ROOT_URL = location.href.indexOf('localhost') > 0 ? 'http://localhost:8000/api' : '/api';
|
const ROOT_URL = location.href.indexOf('localhost') > 0 ? 'http://localhost:8000/api' : '/api';
|
||||||
|
|
||||||
export function getProjects() {
|
export function getProjects(username) {
|
||||||
return (dispatch) => {
|
return (dispatch) => {
|
||||||
axios.get(`${ROOT_URL}/projects`, { withCredentials: true })
|
let url;
|
||||||
|
if (username) {
|
||||||
|
url = `${ROOT_URL}/${username}/projects`;
|
||||||
|
} else {
|
||||||
|
url = `${ROOT_URL}/projects`;
|
||||||
|
}
|
||||||
|
axios.get(url, { withCredentials: true })
|
||||||
.then(response => {
|
.then(response => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ActionTypes.SET_PROJECTS,
|
type: ActionTypes.SET_PROJECTS,
|
||||||
|
|
|
@ -10,7 +10,7 @@ const exitUrl = require('../../../images/exit.svg');
|
||||||
|
|
||||||
class SketchList extends React.Component {
|
class SketchList extends React.Component {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.props.getProjects();
|
this.props.getProjects(this.props.username);
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
@ -51,7 +51,8 @@ SketchList.propTypes = {
|
||||||
user: PropTypes.object.isRequired,
|
user: PropTypes.object.isRequired,
|
||||||
getProjects: PropTypes.func.isRequired,
|
getProjects: PropTypes.func.isRequired,
|
||||||
sketches: PropTypes.array.isRequired,
|
sketches: PropTypes.array.isRequired,
|
||||||
closeSketchList: PropTypes.func.isRequired
|
closeSketchList: PropTypes.func.isRequired,
|
||||||
|
username: PropTypes.string
|
||||||
};
|
};
|
||||||
|
|
||||||
function mapStateToProps(state) {
|
function mapStateToProps(state) {
|
||||||
|
|
|
@ -235,10 +235,10 @@ class IDEView extends React.Component {
|
||||||
return '';
|
return '';
|
||||||
})()}
|
})()}
|
||||||
{(() => { // eslint-disable-line
|
{(() => { // eslint-disable-line
|
||||||
if (this.props.location.pathname === '/sketches') {
|
if (this.props.location.pathname.match(/sketches$/)) {
|
||||||
return (
|
return (
|
||||||
<Overlay>
|
<Overlay>
|
||||||
<SketchList />
|
<SketchList username={this.props.params.username} />
|
||||||
</Overlay>
|
</Overlay>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,8 @@ class IDEView extends React.Component {
|
||||||
|
|
||||||
IDEView.propTypes = {
|
IDEView.propTypes = {
|
||||||
params: PropTypes.shape({
|
params: PropTypes.shape({
|
||||||
project_id: PropTypes.string
|
project_id: PropTypes.string,
|
||||||
|
username: PropTypes.string
|
||||||
}),
|
}),
|
||||||
location: PropTypes.shape({
|
location: PropTypes.shape({
|
||||||
pathname: PropTypes.string
|
pathname: PropTypes.string
|
||||||
|
|
|
@ -19,6 +19,7 @@ const routes = (store) =>
|
||||||
<Route path="/signup" component={SignupView} />
|
<Route path="/signup" component={SignupView} />
|
||||||
<Route path="/projects/:project_id" component={IDEView} />
|
<Route path="/projects/:project_id" component={IDEView} />
|
||||||
<Route path="/sketches" component={IDEView} />
|
<Route path="/sketches" component={IDEView} />
|
||||||
|
<Route path="/:username/sketches" component={IDEView} />
|
||||||
</Route>
|
</Route>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: #{10 / $base-font-size}rem 0;
|
padding: #{10 / $base-font-size}rem 0;
|
||||||
padding-left: #{20 / $base-font-size}rem;
|
padding-left: #{20 / $base-font-size}rem;
|
||||||
height: 100%;
|
max-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sketches-table__row {
|
.sketches-table__row {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import Project from '../models/project';
|
import Project from '../models/project';
|
||||||
|
import User from '../models/user';
|
||||||
|
|
||||||
export function createProject(req, res) {
|
export function createProject(req, res) {
|
||||||
let projectValues = {
|
let projectValues = {
|
||||||
|
@ -56,3 +57,19 @@ export function getProjects(req, res) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getProjectsForUser(req, res) {
|
||||||
|
if (req.params.username) {
|
||||||
|
User.findOne({ username: req.params.username }, (err, user) => {
|
||||||
|
Project.find({user: user._id}) // eslint-disable-line no-underscore-dangle
|
||||||
|
.sort('-createdAt')
|
||||||
|
.select('name files id createdAt updatedAt')
|
||||||
|
.exec((err, projects) => {
|
||||||
|
res.json(projects);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// could just move this to client side
|
||||||
|
return res.json([]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -11,4 +11,6 @@ router.route('/projects/:project_id').get(ProjectController.getProject);
|
||||||
|
|
||||||
router.route('/projects').get(ProjectController.getProjects);
|
router.route('/projects').get(ProjectController.getProjects);
|
||||||
|
|
||||||
|
router.route('/:username/projects').get(ProjectController.getProjectsForUser);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -25,4 +25,8 @@ router.route('/sketches').get((req, res) => {
|
||||||
res.sendFile(path.resolve(`${__dirname}/../../index.html`));
|
res.sendFile(path.resolve(`${__dirname}/../../index.html`));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.route('/:username/sketches').get((req, res) => {
|
||||||
|
res.sendFile(path.resolve(`${__dirname}/../../index.html`));
|
||||||
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
Loading…
Reference in a new issue