Skip to content

Commit c9e33ee

Browse files
committed
upgrade to version 2
1 parent c5a13cc commit c9e33ee

File tree

4 files changed

+62
-69
lines changed

4 files changed

+62
-69
lines changed

README.md

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,57 +32,61 @@ Example:
3232
```html
3333
<div class="form">
3434
<label for="search">Search</label>
35-
<input id="search" v-model="search" type="text" />
35+
<input id="search" v-model="queries.search" type="text" />
3636
<label for="user_id">User Id</label>
37-
<input id="user_id" v-model="user_id" type="number" />
37+
<input id="user_id" v-model="queries.user_id" type="number" />
3838

3939
<div class="pagination">
40-
<a @click="page > 1 ? page-- : page=1">&laquo;</a>
41-
<a v-for="i in 6" :key="i" @click="page=i" :class="{active: page == i }">{{i}}</a>
42-
<a @click="page < 6 ? page++ : page=6">&raquo;</a>
40+
<a @click="queries.page > 1 ? queries.page-- : queries.page=1">&laquo;</a>
41+
<a v-for="i in 6" :key="i" @click="queries.page=i" :class="{active: queries.page == i }">{{i}}</a>
42+
<a @click="queries.page < 6 ? queries.page++ : queries.page=6">&raquo;</a>
4343
</div>
4444
<div>
4545
<h5>Queries As Object: {{$route.query}}</h5>
4646
<h5>Queries As Url: {{queriesAsUrl}}</h5>
4747
</div>
4848
</div>
4949
```
50+
##### With Vue2 option api:
5051
```js
5152
import { SfpService } from "vue-sfp-services";
5253

53-
const queries = {
54-
page: 1,
55-
search: '',
56-
user_id: 1,
57-
// .. any data you want
58-
}
5954
export default {
6055
data(){
6156
return {
62-
...new SfpService(this.$router, this.$route, queries).queries
57+
queries:{
58+
page: 1,
59+
search: "",
60+
user_id: 1,
61+
// .. any data you want
62+
}
6363
}
64-
}
64+
},
65+
created(){
66+
new SfpService(this.$router, this.$route, this.queries)
67+
},
6568
}
6669
```
67-
##### With composition api:
70+
##### With composition api Vue3:
6871
```js
72+
import { reactive } from "vue"
6973
import { useRouter, useRoute } from 'vue-router'
7074
//...
7175
//..
7276
setup() {
7377
const router = useRouter()
7478
const route = useRoute()
75-
const queries = {
79+
const queries = reactive({
7680
page: 1,
7781
search: '',
7882
user_id: 1,
7983
// .. any data you want
80-
}
84+
})
8185

82-
const sfp = new SfpService(router, route, queries)
86+
new SfpService(router, route, queries)
8387

8488
return {
85-
...sfp.queries
89+
queries
8690
};
8791
},
8892
```

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-sfp-services",
3-
"version": "1.0.0",
3+
"version": "2.0.0",
44
"description": "Package allows us to use pagination, search and filter easily made with VueJS",
55
"author": {
66
"name": "Sohaib Alslamat",

src/components/HelloSfp.vue

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@
2020
</header>
2121
<div class="form">
2222
<label for="search">Search</label>
23-
<input id="search" v-model="search" type="text" />
23+
<input id="search" v-model="queries.search" type="text" />
2424
<label for="user_id">User Id</label>
25-
<input id="user_id" v-model="user_id" type="number" />
25+
<input id="user_id" v-model="queries.user_id" type="number" />
2626

2727
<div class="pagination">
28-
<a @click="page > 1 ? page-- : (page = 1)">&laquo;</a>
29-
<a v-for="i in 6" :key="i" @click="page = i" :class="{ active: page == i }">{{
28+
<a @click="queries.page > 1 ? queries.page-- : (queries.page = 1)">&laquo;</a>
29+
<a v-for="i in 6" :key="i" @click="queries.page = i" :class="{ active: queries.page == i }">{{
3030
i
3131
}}</a>
32-
<a @click="page < 6 ? page++ : (page = 6)">&raquo;</a>
32+
<a @click="queries.page < 6 ? queries.page++ : (queries.page = 6)">&raquo;</a>
3333
</div>
3434
<div>
3535
<h5>Queries As Object: {{ JSON.stringify($route.query) }}</h5>
@@ -40,19 +40,22 @@
4040
</template>
4141
<script>
4242
import { defineComponent } from "vue";
43-
// import { SfpService } from "../lib/main";
44-
import { SfpService } from "../../dist/vue-sfp-services.es";
45-
const queries = {
46-
page: 1,
47-
search: "",
48-
user_id: 1,
49-
};
43+
import { SfpService } from "../lib/main";
44+
// import { SfpService } from "../../dist/vue-sfp-services.es";
45+
5046
export default defineComponent({
5147
data() {
5248
return {
53-
...new SfpService(this.$router, this.$route, queries).queries,
49+
queries:{
50+
page: 1,
51+
search: "",
52+
user_id: 1,
53+
}
5454
};
5555
},
56+
created(){
57+
new SfpService(this.$router, this.$route, this.queries)
58+
},
5659
computed: {
5760
queriesAsUrl() {
5861
const paramObj = this.$route.query;
@@ -62,17 +65,6 @@ export default defineComponent({
6265
return qs;
6366
},
6467
},
65-
setup() {
66-
// const queries = {
67-
// page: 1,
68-
// search: '',
69-
// user_id: 1
70-
// }
71-
// const sfp = new SfpService(router, route, queries)
72-
// return {
73-
// ...sfp.queries
74-
// };
75-
},
7668
});
7769
</script>
7870
<style>

src/lib/sfp-service.ts

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,43 @@
1-
/* eslint-disable @typescript-eslint/no-this-alias */
21
/* eslint-disable @typescript-eslint/no-explicit-any */
3-
import { ref, watch } from "vue"
2+
import { computed, watch } from "vue"
43

54
export default class SfpService {
65
private _router: any
7-
private _queries: {[key:string]:any}
6+
private routeQueries: {[key:string]:any}
87

98
constructor(router: any, route: any, queries: {[key:string]:any}) {
109
this._router = router
11-
12-
const self:{[key:string]:any} = this
13-
14-
const initQueries = () => {
15-
const returnQueries: {[key:string]:any} = {}
16-
for (const [key,query] of Object.entries(queries)) {
17-
self[key] = ref(route.query[key] ? route.query[key] : query)
18-
watch(self[key], () =>{
19-
this._setQuery(this._queries)
20-
})
21-
returnQueries[key] = self[key]
22-
}
23-
return returnQueries
24-
}
10+
this.routeQueries = computed(()=>{
11+
return route.query
12+
})
2513

26-
this._queries = initQueries()
27-
28-
}
29-
/// return queries as data
30-
get queries(): any {
31-
return this._queries
32-
}
14+
this._getQueryFromUrl(queries,this.routeQueries.value)
3315

16+
watch(this.routeQueries,(val)=>{
17+
this._getQueryFromUrl(queries,val)
18+
})
19+
watch(queries, (val)=>{
20+
this._setQuery(val)
21+
})
22+
}
23+
3424
/// set queries in route in url
3525
private _setQuery(queries: {[key:string]:any}) {
3626
this._router.replace({ path: '', query: { ...this._fixQueriesToSet(queries) } })
3727
}
3828

29+
/// get queries from url
30+
private _getQueryFromUrl(queries: {[key:string]:any}, routeQueries: {[key:string]:any}) {
31+
for (const [key,query] of Object.entries(queries)) {
32+
queries[key] = routeQueries[key] ? routeQueries[key] : query
33+
}
34+
}
35+
3936
/// fix queries before send
40-
private _fixQueriesToSet(queries: {[key:string]:any}): {[key:string]:any} {
37+
private _fixQueriesToSet(queries: {[key:string]:any}) {
4138
const x:{[key:string]:any} = {...queries}
4239
Object.keys(x).forEach(function(key) {
43-
x[key].value ? x[key] = x[key].value : delete x[key]
40+
if(!x[key]) delete x[key]
4441
})
4542

4643
return x

0 commit comments

Comments
 (0)