Skip to content

Commit 88af674

Browse files
committed
Implemented the fifth phase of CRUD users
- Created ApiController; - Refactored 'index' method in UsersControllers, removed list addresses; - Installed vue-resource dependency; - Created API router for get addresses; - Refactored 'table.vue' component for implement VdUserAddresses component; - Created VdUsersAddresses component; - Created VdUserAddress component; - Implemented 'bus event' for communication between the components(VdUserAddresses and VdUserAddress); - Rebuilt assets with gulp.
1 parent 376ba9d commit 88af674

File tree

12 files changed

+546
-343
lines changed

12 files changed

+546
-343
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\User;
6+
7+
class ApiController extends Controller
8+
{
9+
public function address($userId)
10+
{
11+
$user = User::find($userId);
12+
$addresses = $user->addresses;
13+
sleep(2);
14+
15+
return response()->json(['addresses' => $addresses], 200);
16+
}
17+
}

app/Http/Controllers/UsersController.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
namespace App\Http\Controllers;
44

55
use App\User;
6-
use Illuminate\Http\Request;
76

87
class UsersController extends Controller
98
{
109
public function index()
1110
{
12-
$users = User::with('addresses')->get();
11+
$users = User::all();
1312

1413
return view('users.index')->with(compact('users'));
1514
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
"lodash": "^4.16.2",
1818
"moment": "^2.18.1",
1919
"vue": "^2.0.1",
20-
"vue-resource": "^1.0.3"
20+
"vue-resource": "^1.3.4"
2121
}
2222
}
Lines changed: 220 additions & 155 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/rev-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"css/app.css": "css/app-ad87f36536.css",
33
"css/vendor.css": "css/vendor-0634183a17.css",
4-
"js/app.js": "js/app-c6bfcb2ec9.js"
4+
"js/app.js": "js/app-66e2a3f00e.js"
55
}

public/js/app.js

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

resources/assets/js/app.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ window.jQuery = window.$ = require('jquery')
44
require('bootstrap-sass')
55

66
import Vue from 'vue'
7+
import VueResource from 'vue-resource'
78

89
import PrimeiroComponente from './app/components/primeiro-componente.vue'
910
import VdUsers from './app/users/main.vue'
1011

12+
Vue.use(VueResource)
13+
1114
new Vue({
1215
el: '#app',
1316
components: {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<script>
2+
export default {
3+
props: ['address'],
4+
computed: {
5+
hasAddress () {
6+
return this.address !== undefined
7+
}
8+
},
9+
}
10+
</script>
11+
12+
<template>
13+
<div>
14+
<div class="address" v-if="hasAddress">
15+
<i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> {{ address.street }}, {{ address.number }} - {{ address.city }}, {{ address.state }}
16+
</div>
17+
</div>
18+
</template>
19+
20+
<style scoped>
21+
.address {
22+
padding: 5px;
23+
margin: 5px 5px 5px 0;
24+
background-color: #f9f7ee;
25+
border: 1px solid #f3ede5;
26+
border-radius: 5px;
27+
}
28+
</style>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<script>
2+
import bus from '../utils/events/bus'
3+
import VdUserAddress from './address.vue'
4+
export default {
5+
props: ['userid'],
6+
components: {
7+
VdUserAddress
8+
},
9+
mounted() {
10+
bus.$on('get-addresses', obj => {
11+
if (this.userid === obj.userid && this.addresses.length === 0) {
12+
this.isSearching = true
13+
this.$http
14+
.get(`api/endereco/${obj.userid}`)
15+
.then(res => {
16+
this.addresses = res.body.addresses
17+
this.isSearching = false
18+
})
19+
20+
}
21+
})
22+
},
23+
data (){
24+
return {
25+
addresses: [],
26+
isSearching: false,
27+
}
28+
},
29+
}
30+
</script>
31+
32+
<template>
33+
<div>
34+
<div class="text-center" v-show="isSearching">
35+
<i class="fa fa-cog fa-spin fa-3x fa-fw"></i>
36+
</div>
37+
<div class="row" v-show="!isSearching">
38+
<div class="col-md-6" v-for="address in addresses">
39+
<vd-user-address :address="address"></vd-user-address>
40+
</div>
41+
</div>
42+
</div>
43+
</template>

resources/assets/js/app/users/table.vue

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
<script>
22
import moment from 'moment'
33
import bus from '../utils/events/bus'
4+
import VdUserAddresses from './addresses.vue'
45
56
export default {
67
props: ['list'],
8+
components: {
9+
VdUserAddresses
10+
},
711
data() {
812
return {
913
details: [],
@@ -29,7 +33,10 @@
2933
if (this.details.length > 0) {
3034
this.details = []
3135
} else {
32-
this.details = this.users.map(user => user.id)
36+
this.details = this.users.map(user => {
37+
bus.$emit('get-addresses', {userid: user.id})
38+
return user.id
39+
})
3340
}
3441
},
3542
toggleOne (id){
@@ -38,6 +45,7 @@
3845
this.details.splice(index, 1)
3946
} else {
4047
this.details.push(id)
48+
bus.$emit('get-addresses', {userid: id})
4149
}
4250
},
4351
formatDate (date) {
@@ -99,11 +107,7 @@
99107
</tr>
100108
<tr v-show="details.includes(user.id)">
101109
<td colspan="5">
102-
<div class="row col-md-6" v-for="address in user.addresses">
103-
<div class="address">
104-
<i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> {{ address.street }}, {{ address.number }} - {{ address.city }}, {{ address.state }}
105-
</div>
106-
</div>
110+
<vd-user-addresses :userid="user.id"></vd-user-addresses>
107111
</td>
108112
</tr>
109113
</tbody>
@@ -112,13 +116,6 @@
112116
</template>
113117

114118
<style>
115-
.address {
116-
padding: 5px;
117-
margin: 5px 5px 5px 0;
118-
background-color: #f9f7ee;
119-
border: 1px solid #f3ede5;
120-
border-radius: 5px;
121-
}
122119
.green {
123120
color: red;
124121
}

0 commit comments

Comments
 (0)