Skip to content

Commit 3e8592d

Browse files
author
Jovert Lota Palonpon
committed
[Users] Restoration
1 parent e21cc0a commit 3e8592d

File tree

13 files changed

+75278
-202
lines changed

13 files changed

+75278
-202
lines changed

app/Http/Controllers/Api/UsersController.php

Lines changed: 3 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -91,63 +91,23 @@ public function destroy(Request $request, User $user) : JsonResponse
9191
return response()->json($this->paginatedQuery($request));
9292
}
9393

94-
/**
95-
* Destroy multiple resources.
96-
*
97-
* @param Illuminate\Http\Request $request
98-
* @param string $idCollectionString
99-
*
100-
* @return Illuminate\Http\JsonResponse
101-
*/
102-
public function destroyMultiple(Request $request, string $idCollectionString)
103-
{
104-
$idCollection = explode(',', $idCollectionString);
105-
106-
foreach ($idCollection as $id) {
107-
User::where('id', $id)->delete();
108-
}
109-
110-
return response()->json($this->paginatedQuery($request));
111-
}
112-
11394
/**
11495
* Restore a resource.
11596
*
11697
* @param Illuminate\Http\Request $request
117-
* @param string $userId
98+
* @param string $id
11899
*
119100
* @return Illuminate\Http\JsonResponse
120101
*/
121-
public function restore(Request $request, $userId)
102+
public function restore(Request $request, $id)
122103
{
123-
$user = User::withTrashed()->where('id', $userId)->first();
104+
$user = User::withTrashed()->where('id', $id)->first();
124105
$user->deleted_at = null;
125106
$user->update();
126107

127108
return response()->json($this->paginatedQuery($request));
128109
}
129110

130-
/**
131-
* Restore multiple resources.
132-
*
133-
* @param Illuminate\Http\Request $request
134-
* @param string $idCollectionString
135-
*
136-
* @return Illuminate\Http\JsonResponse
137-
*/
138-
public function restoreMultiple(Request $request, string $idCollectionString)
139-
{
140-
$idCollection = explode(',', $idCollectionString);
141-
142-
foreach ($idCollection as $id) {
143-
User::withTrashed()->where('id', $id)->update([
144-
'deleted_at' => null
145-
]);
146-
}
147-
148-
return response()->json($this->paginatedQuery($request));
149-
}
150-
151111
/**
152112
* Get the paginated resource query.
153113
*
@@ -162,10 +122,6 @@ protected function paginatedQuery(Request $request) : LengthAwarePaginator
162122
$request->input('sortType') ?? 'ASC'
163123
);
164124

165-
if ($id = $request->input('id')) {
166-
$this->filter($users, 'id', $id);
167-
}
168-
169125
if ($type = $request->input('type')) {
170126
$this->filter($users, 'type', $type);
171127
}
@@ -178,10 +134,6 @@ protected function paginatedQuery(Request $request) : LengthAwarePaginator
178134
$this->filter($users, 'email', $email);
179135
}
180136

181-
if ($last_signin = $request->input('last_signin')) {
182-
$this->filter($users, 'last_signin', $last_signin);
183-
}
184-
185137
return $users->paginate($request->input('perPage') ?? 10);
186138
}
187139

public/assets.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"js/backoffice.js": "js/backoffice.bundle.4f26014a924451720488.js",
3-
"js/vendor.js": "js/vendor.bundle.fe9518cbecd64dd5305d.js"
2+
"js/backoffice.js": "js/backoffice.bundle.ac4678226aa6fc94f0dd.js",
3+
"js/vendor.js": "js/vendor.bundle.60bab7ed0c4b898e6cd4.js"
44
}

public/js/backoffice.bundle.4f26014a924451720488.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

public/js/backoffice.bundle.ac4678226aa6fc94f0dd.js

Lines changed: 879 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/vendor.bundle.60bab7ed0c4b898e6cd4.js

Lines changed: 74270 additions & 0 deletions
Large diffs are not rendered by default.

public/js/vendor.bundle.fe9518cbecd64dd5305d.js

Lines changed: 0 additions & 134 deletions
This file was deleted.

resources/js/models/User.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default class User {
2323
/**
2424
* Delete a user
2525
*
26-
* @param {number}
26+
* @param {number} id
2727
*
2828
* @return {object}
2929
*/
@@ -36,4 +36,21 @@ export default class User {
3636

3737
return response.data;
3838
}
39+
40+
/**
41+
* Restore a user
42+
*
43+
* @param {number} id
44+
*
45+
* @return {object}
46+
*/
47+
static async restore(id) {
48+
const response = await axios.patch(`/api/users/${id}/restore`);
49+
50+
if (response.status !== 200) {
51+
return;
52+
}
53+
54+
return response.data;
55+
}
3956
}

resources/js/views/__backoffice/users/List.js

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class List extends Component {
1919
},
2020
filters: {},
2121
selectedResources: [],
22-
activeResourceId: 0,
2322
message: {},
2423
alert: {},
2524
};
@@ -34,7 +33,6 @@ class List extends Component {
3433
*/
3534
handleDeleteClick = resourceId => {
3635
this.setState({
37-
activeResourceId: resourceId,
3836
alert: {
3937
type: 'confirmation',
4038
title: Lang.get('resources.delete_confirmation_title', {
@@ -194,6 +192,48 @@ class List extends Component {
194192
history.push(`${location.pathname}${queryString}`);
195193
}
196194

195+
/**
196+
* This should send an API request to restore a deleted resource.
197+
*
198+
* @param {string} resourceId
199+
*
200+
* @return {undefined}
201+
*/
202+
restoreUser = async resourceId => {
203+
this.setState({ loading: true });
204+
205+
try {
206+
const pagination = await User.restore(resourceId);
207+
208+
this.setState({
209+
loading: false,
210+
pagination,
211+
alert: {},
212+
message: {
213+
type: 'success',
214+
body: Lang.get('resources.restored', {
215+
name: 'User',
216+
}),
217+
closed: () => this.setState({ message: {} }),
218+
},
219+
});
220+
} catch (error) {
221+
this.setState({
222+
loading: false,
223+
alert: {},
224+
message: {
225+
type: 'error',
226+
body: Lang.get('resources.not_restored', {
227+
name: 'User',
228+
}),
229+
closed: () => this.setState({ message: {} }),
230+
actionText: Lang.get('actions.retry'),
231+
action: async () => await this.restoreUser(resourceId),
232+
},
233+
});
234+
}
235+
};
236+
197237
/**
198238
* This should send an API request to delete a resource.
199239
*
@@ -213,23 +253,26 @@ class List extends Component {
213253
alert: {},
214254
message: {
215255
type: 'success',
216-
body: 'User successfully deleted!',
256+
body: Lang.get('resources.deleted', {
257+
name: 'User',
258+
}),
217259
closed: () => this.setState({ message: {} }),
218260
actionText: Lang.get('actions.undo'),
219-
action: () => alert('Recovering...'),
261+
action: async () => this.restoreUser(resourceId),
220262
},
221263
});
222264
} catch (error) {
223-
const { activeResourceId } = this.state;
224-
225265
this.setState({
226266
loading: false,
267+
alert: {},
227268
message: {
228269
type: 'error',
229-
body: 'Error deleting user!',
270+
body: Lang.get('resources.not_deleted', {
271+
name: 'User',
272+
}),
230273
closed: () => this.setState({ message: {} }),
231274
actionText: Lang.get('actions.retry'),
232-
action: async () => await this.deleteUser(activeResourceId),
275+
action: async () => await this.deleteUser(resourceId),
233276
},
234277
});
235278
}

resources/lang/en/resources.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@
1818

1919
'delete_confirmation_title' => 'You are deleting a :name',
2020
'delete_confirmation_body' => "If not undone, the :name won't be recovered anymore.",
21+
22+
'deleted' => ':name successfully deleted!',
23+
'not_deleted' => 'Error deleting :name!',
24+
'restored' => ':name successfully restored!',
25+
'not_restored' => 'Error restoring :name!',
2126
];

resources/lang/fil/actions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
'cancel' => 'I-cancel',
1616
'continue' => 'Ituloy',
1717
'retry' => 'Ulitin',
18+
'undo' => 'I-balik',
1819
];

0 commit comments

Comments
 (0)