Skip to content

Commit d8ff5bf

Browse files
author
Jovert Lota Palonpon
committed
wip
1 parent a3b85f5 commit d8ff5bf

File tree

10 files changed

+620
-21
lines changed

10 files changed

+620
-21
lines changed

app/Http/Controllers/Api/UsersController.php

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,31 @@ public function store(Request $request) : JsonResponse
3535
'type' => 'required|in:superuser,user',
3636
'firstname' => 'required|string|max:255',
3737
'lastname' => 'required|string|max:255',
38-
'email' => 'required|email|unique:users'
38+
39+
'gender' => 'nullable|in:female,male',
40+
'birthdate' =>
41+
'nullable|date:Y-m-d|before:'.now()->subYear(10)->format('Y-m-d'),
42+
'address' => 'nullable|string|max:510',
43+
44+
'email' => 'required|email|unique:users',
45+
'username' => 'nullable|unique:users'
3946
]);
4047

41-
$user = new User;
42-
$user->type = $request->input('type');
43-
$user->firstname = ($firstname = $request->input('firstname'));
44-
$user->lastname = ($lastname = $request->input('lastname'));
48+
$user = User::create([
49+
'type' => $request->input('type'),
50+
'firstname' => ($firstname = $request->input('firstname')),
51+
'middlename' => ($middlename = $request->input('middlename')),
52+
'lastname' => ($lastname = $request->input('lastname')),
53+
54+
'gender' => $request->input('gender'),
55+
'birthdate' => $request->input('birthdate'),
56+
'address' => $request->input('address'),
4557

46-
$user->name = "{$firstname} {$lastname}";
47-
$user->email = $request->input('email');
48-
$user->save();
58+
'name' => "{$firstname} {$middlename} {$lastname}",
59+
60+
'email' => $request->input('email'),
61+
'username' => $request->input('username'),
62+
]);
4963

5064
return response()->json($user, 201);
5165
}

resources/js/config/locale.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ export default {
44
'en.navigation': require('../../lang/en/navigation.php'),
55
'en.resources': require('../../lang/en/resources.php'),
66
'en.table': require('../../lang/en/table.php'),
7+
'en.validation': require('../../lang/en/validation.php'),
78

89
// Filipino
910
'fil.actions': require('../../lang/fil/actions.php'),
1011
'fil.navigation': require('../../lang/fil/navigation.php'),
1112
'fil.resources': require('../../lang/fil/resources.php'),
1213
'fil.table': require('../../lang/fil/table.php'),
14+
'fil.validation': require('../../lang/fil/validation.php'),
1315
};

resources/js/models/User.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,31 @@ export default class User {
1414
});
1515

1616
if (response.status !== 200) {
17-
return;
17+
return {};
1818
}
1919

2020
return response.data;
2121
}
2222

2323
/**
24-
* Delete a user
24+
* Store a new user.
25+
*
26+
* @param {object} attributes
27+
*
28+
* @return {object}
29+
*/
30+
static async store(attributes) {
31+
const response = await axios.post('/api/users', attributes);
32+
33+
if (response.status !== 201) {
34+
return {};
35+
}
36+
37+
return response.data;
38+
}
39+
40+
/**
41+
* Delete a user.
2542
*
2643
* @param {number} id
2744
*
@@ -31,14 +48,14 @@ export default class User {
3148
const response = await axios.delete(`/api/users/${id}`);
3249

3350
if (response.status !== 200) {
34-
return;
51+
return {};
3552
}
3653

3754
return response.data;
3855
}
3956

4057
/**
41-
* Restore a user
58+
* Restore a user.
4259
*
4360
* @param {number} id
4461
*
@@ -48,7 +65,7 @@ export default class User {
4865
const response = await axios.patch(`/api/users/${id}/restore`);
4966

5067
if (response.status !== 200) {
51-
return;
68+
return {};
5269
}
5370

5471
return response.data;

resources/js/utils/Navigation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import * as UrlUtils from '../utils/URL';
44
/**
55
* Find the route by its name.
66
*
7+
* @param {string} name
78
* @param {object} segmentParams
89
* @param {object} queryParams
9-
* @param {string} name
1010
*/
1111
export function _route(name, segmentParams = {}, queryParams = {}) {
1212
const i = ROUTES.findIndex(route => route.name === name);

resources/js/views/__backoffice/layouts/Master.js

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
withStyles,
1111
} from '@material-ui/core';
1212

13+
import * as UrlUtils from '../../../utils/URL';
1314
import { Snackbar, Modal } from '../../../ui';
1415
import { LinearDeterminate } from '../../../ui/Loaders';
1516
import { Header, Sidebar } from '../partials';
@@ -21,6 +22,7 @@ class Master extends Component {
2122
localeMenuEl: null,
2223
accountMenuOpen: false,
2324
accountMenuEl: null,
25+
message: {},
2426
};
2527

2628
/**
@@ -50,6 +52,36 @@ class Master extends Component {
5052
this.setState(prevState => ({ mobileOpen: !prevState.mobileOpen }));
5153
};
5254

55+
/**
56+
* This will setup a global message into the state coming from the URL
57+
* passed message parameters. Useful when attempting to notify actions after
58+
* a redirect by React's router.
59+
*
60+
* @return {undefined}
61+
*/
62+
setGlobalMessage = () => {
63+
const { location } = this.props;
64+
65+
const queryParams = UrlUtils._queryParams(location.search);
66+
const messageKeys = Object.keys(queryParams).filter(
67+
key => key.indexOf('_message') > -1,
68+
);
69+
70+
const message = {};
71+
72+
messageKeys.forEach(key => {
73+
message[key.match(/\[(.*)\]/).pop()] = queryParams[key];
74+
});
75+
76+
message.closed = () => this.setState({ message: {} });
77+
78+
this.setState({ message });
79+
};
80+
81+
componentDidMount() {
82+
this.setGlobalMessage();
83+
}
84+
5385
render() {
5486
const {
5587
classes,
@@ -63,7 +95,7 @@ class Master extends Component {
6395
} = this.props;
6496
const { navigating } = pageProps;
6597

66-
const { mobileOpen } = this.state;
98+
const { mobileOpen, message: globalMessage } = this.state;
6799

68100
const renderLoading = (
69101
<Grid
@@ -142,10 +174,16 @@ class Master extends Component {
142174
</div>
143175
</div>
144176

145-
{message && message.hasOwnProperty('type') > 0 && (
146-
<Snackbar {...message} />
177+
{globalMessage && globalMessage.hasOwnProperty('type') > 0 && (
178+
<Snackbar {...globalMessage} />
147179
)}
148180

181+
{!globalMessage &&
182+
message &&
183+
message.hasOwnProperty('type') > 0 && (
184+
<Snackbar {...message} />
185+
)}
186+
149187
{alert && alert.hasOwnProperty('type') > 0 && (
150188
<Modal {...alert} />
151189
)}

0 commit comments

Comments
 (0)