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
}

public/build/js/app-c6bfcb2ec9.js renamed to public/build/js/app-66e2a3f00e.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.

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy