Browse Source

Add New clients page

master
Garrit Franke 4 years ago
parent
commit
022b52ccbc
  1. 2
      client/app.js
  2. 6
      client/routes/clients.js
  3. 80
      client/views/clients/New.jsx
  4. 15
      server/app.js
  5. 3
      server/routes/clients.js

2
client/app.js

@ -29,7 +29,7 @@ app.use("/auth", require("./routes/auth"));
// Attach user
app.use((req, res, next) => {
const token = req.cookies.token;
req.user = jwt.decode(token);
req.user = { ...jwt.decode(token), token };
next();
});

6
client/routes/clients.js

@ -21,4 +21,10 @@ router.get("/", async (req, res) => {
});
});
router.get("/new", async (req, res) => {
res.render("clients/New", {
user: req.user,
});
});
module.exports = router;

80
client/views/clients/New.jsx

@ -0,0 +1,80 @@
import React from "react";
import Layout from "../layouts/Main";
import { base } from "../../../server/model/User";
const basePath = process.env.API_BASE_PATH;
const frontendBasePath = process.env.FRONTEND_BASE_PATH;
export default function Clients({ user }) {
return (
<Layout user={user}>
<form
action={
basePath +
"/clients" +
"?token=" +
user.token +
"&redirect=" +
encodeURIComponent(frontendBasePath) +
"/clients"
}
method="POST"
>
<div className="row">
<div className="col-lg-6">
<div className="form-group">
<label for="name">Name</label>
<input
type="name"
name="name"
className="form-control"
id="name"
/>
</div>
<div className="form-group">
<label for="email">E-Mail</label>
<input
type="email"
name="email"
className="form-control"
id="email"
/>
</div>
<div class="form-group">
<label for="status">Current Status</label>
<select class="form-control" id="status">
<option value="potential">Potential</option>
<option value="active">Active</option>
<option value="on_hold">On Hold</option>
<option value="inactive">Inactive</option>
</select>
</div>
</div>
<div className="col-lg-6">
<div className="form-group">
<label for="address">Address</label>
<input
type="address"
name="address"
className="form-control"
id="address"
/>
</div>
<div className="form-group">
<label for="telephone">Phone</label>
<input
type="tel"
name="telephone"
className="form-control"
id="telephone"
/>
</div>
</div>
</div>
<button type="submit" className="btn btn-primary">
Submit
</button>
</form>
</Layout>
);
}

15
server/app.js

@ -15,7 +15,6 @@ app.use(require("express-form-data").parse());
app.use(require("cors")());
app.use((req, res, next) => {
console.log(req.query);
req.body = { ...req.body, ...req.query };
next();
});
@ -32,10 +31,18 @@ app.use((req, res, next) => {
return next();
const authHeader = req.header("Authorization");
if ((authHeader || "").split(" ")[0] !== "Bearer")
return res.status(401).send("Invalid token");
const token = authHeader.replace("Bearer ", "");
let token = authHeader?.replace("Bearer ", "");
// Try to get token if request is from frontend
if (!token) {
token = req.cookies?.token;
}
// Try to get token from body
if (!token) {
token = req.body.token;
}
if (!token) return res.status(401).send("Invalid token");

3
server/routes/clients.js

@ -44,7 +44,8 @@ router.post("/", async (req, res) => {
await client
.save()
.then((client) => {
res.json(client);
if (req.body.redirect) res.redirect(req.body.redirect);
else res.json(client);
})
.catch((err) => res.status(400).send(err));
});

Loading…
Cancel
Save