@iankibetsh/vue-streamline 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/package.json +1 -1
- package/src/App.vue +12 -10
- package/src/composables/useStreamline.js +48 -53
- package/dist/vite.svg +0 -1
- package/dist/vue-streamline.es.js +0 -1714
- package/dist/vue-streamline.umd.js +0 -6
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ Vue.use(streamline, {
|
|
|
32
32
|
import { useStreamline } from '@iankibet/vue-streamline'
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
const {service:tasksService} = useStreamline('tasks')
|
|
35
|
+
const {getActionUrl, service:tasksService} = useStreamline('tasks')
|
|
36
36
|
|
|
37
37
|
// call the service methods
|
|
38
38
|
|
|
@@ -46,5 +46,5 @@ tasksServices.getTasks().then(response => {
|
|
|
46
46
|
|
|
47
47
|
You can get the url to an action/method in the service by calling the getActionUrl method on the service object passing the action name and any parameters
|
|
48
48
|
```js
|
|
49
|
-
|
|
49
|
+
getActionUrl('getTasks', 'active')
|
|
50
50
|
```
|
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import useStreamline from './composables/useStreamline.js'
|
|
3
|
-
import { ref } from 'vue'
|
|
3
|
+
import { onMounted, ref, toRefs } from 'vue'
|
|
4
4
|
|
|
5
|
-
const {loading, service:paybillService} = useStreamline('mpesa/paybill',
|
|
5
|
+
const {loading, service:paybillService, getActionUrl} = useStreamline('mpesa/paybill',3)
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
const foundPaybill = ref(null)
|
|
9
9
|
|
|
10
|
+
onMounted(()=>{
|
|
11
|
+
paybillService.callAnyMethod(3).then(res=>{
|
|
12
|
+
foundPaybill.value = res
|
|
13
|
+
})
|
|
14
|
+
})
|
|
10
15
|
const findPaybill = async ()=>{
|
|
11
|
-
foundPaybill.value = await paybillService.getPaybill(
|
|
16
|
+
foundPaybill.value = await paybillService.getPaybill(3)
|
|
17
|
+
console.log(getActionUrl('getPaybill',3))
|
|
12
18
|
}
|
|
13
19
|
</script>
|
|
14
20
|
|
|
15
21
|
<template>
|
|
16
22
|
<div>
|
|
17
|
-
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
<h1 @click="findPaybill(28)">Try Find</h1>
|
|
21
|
-
{{ paybillService.getActionUrl('addPaybill') }}
|
|
22
|
-
<h3 class="text-success" v-if="loading">Loading...</h3>
|
|
23
|
-
{{ foundPaybill }}
|
|
23
|
+
<hr/>
|
|
24
|
+
<h3 class="text-success" >Loading : {{ loading }}</h3>
|
|
25
|
+
<h1 @click="findPaybill">Get Paybill</h1>
|
|
24
26
|
</div>
|
|
25
27
|
</template>
|
|
26
28
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Axios from 'axios'
|
|
2
|
-
import { inject, reactive, ref, toRefs } from 'vue'
|
|
2
|
+
import { inject, onMounted, reactive, ref, toRefs } from 'vue'
|
|
3
3
|
|
|
4
4
|
const useStreamline = (stream, ...initialArgs) => {
|
|
5
5
|
let formData = {}
|
|
@@ -14,8 +14,33 @@ const useStreamline = (stream, ...initialArgs) => {
|
|
|
14
14
|
...streamlineHeaders
|
|
15
15
|
}
|
|
16
16
|
})
|
|
17
|
+
const handler = {
|
|
18
|
+
get(target, prop, receiver) {
|
|
19
|
+
if (prop in target) {
|
|
20
|
+
return target[prop]
|
|
21
|
+
}
|
|
22
|
+
return async (...args) => {
|
|
23
|
+
loading.value = true
|
|
24
|
+
try {
|
|
25
|
+
const response = await axios.post(streamlineUrl, {
|
|
26
|
+
action: prop,
|
|
27
|
+
stream,
|
|
28
|
+
...formData,
|
|
29
|
+
params: args
|
|
30
|
+
})
|
|
31
|
+
return response.data
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(`Error calling ${prop} on stream ${stream}`, error)
|
|
34
|
+
throw error
|
|
35
|
+
} finally {
|
|
36
|
+
loading.value = false
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
17
41
|
|
|
18
|
-
const service = reactive({
|
|
42
|
+
const service = reactive({
|
|
43
|
+
}) // Make the service object reactive
|
|
19
44
|
|
|
20
45
|
// Function to fetch the public properties of the service class
|
|
21
46
|
const fetchServiceProperties = async () => {
|
|
@@ -35,12 +60,13 @@ const useStreamline = (stream, ...initialArgs) => {
|
|
|
35
60
|
}
|
|
36
61
|
}
|
|
37
62
|
|
|
63
|
+
|
|
38
64
|
// Function to assign properties and methods to the service object
|
|
39
65
|
const assignPropertiesAndMethods = (data) => {
|
|
40
66
|
Object.assign(service, data.properties) // Assign the properties to the reactive service object
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
for (const method of data.methods) {
|
|
68
|
+
const fn = async (...args) => {
|
|
69
|
+
loading.value = true
|
|
44
70
|
try {
|
|
45
71
|
const response = await axios.post(streamlineUrl, {
|
|
46
72
|
action: method,
|
|
@@ -52,64 +78,33 @@ const useStreamline = (stream, ...initialArgs) => {
|
|
|
52
78
|
} catch (error) {
|
|
53
79
|
console.error(`Error calling ${method} on stream ${stream}`, error)
|
|
54
80
|
throw error
|
|
81
|
+
} finally {
|
|
82
|
+
loading.value = false
|
|
55
83
|
}
|
|
56
84
|
}
|
|
85
|
+
service[method] = fn
|
|
57
86
|
}
|
|
58
87
|
}
|
|
59
88
|
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
if (action in target) {
|
|
63
|
-
return target[action] // Return the reactive property if it exists
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return (...args) => {
|
|
67
|
-
const setDataActions = ['setFormData', 'setData']
|
|
68
|
-
if (setDataActions.includes(action)) {
|
|
69
|
-
formData = args[0]
|
|
70
|
-
return proxyService
|
|
71
|
-
}
|
|
72
|
-
const getMethodsActions = ['getMethods','getActions','getFunctions','getServiceMethods']
|
|
73
|
-
if(getMethodsActions.includes(action)) {
|
|
74
|
-
return Object.keys(proxyService).filter(key=>{
|
|
75
|
-
if(typeof proxyService[key] === 'function') {
|
|
76
|
-
return key
|
|
77
|
-
}
|
|
78
|
-
})
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const postBody = {
|
|
82
|
-
action,
|
|
83
|
-
stream,
|
|
84
|
-
...formData,
|
|
85
|
-
}
|
|
89
|
+
const getActionUrl = (action, ...args) => {
|
|
90
|
+
// console log all arguments to this
|
|
86
91
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (params.length > 0) {
|
|
92
|
-
postBody.params = params
|
|
93
|
-
}
|
|
94
|
-
return streamlineUrl + '?' + new URLSearchParams(postBody).toString()
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
postBody.params = args
|
|
98
|
-
return axios.post(streamlineUrl, postBody).then(response => response.data).catch(error => {
|
|
99
|
-
console.error(`Error calling ${action} on stream ${stream}`, error)
|
|
100
|
-
throw error
|
|
101
|
-
})
|
|
102
|
-
}
|
|
92
|
+
const post = {
|
|
93
|
+
action,
|
|
94
|
+
stream,
|
|
95
|
+
params: args
|
|
103
96
|
}
|
|
104
|
-
|
|
97
|
+
return streamlineUrl + '?' + new URLSearchParams(post).toString()
|
|
105
98
|
|
|
106
|
-
|
|
107
|
-
|
|
99
|
+
}
|
|
100
|
+
onMounted(()=>{
|
|
101
|
+
fetchServiceProperties()
|
|
102
|
+
})
|
|
108
103
|
|
|
109
104
|
return {
|
|
110
|
-
|
|
111
|
-
service:
|
|
112
|
-
|
|
105
|
+
loading,
|
|
106
|
+
service: new Proxy(service, handler),
|
|
107
|
+
getActionUrl
|
|
113
108
|
}
|
|
114
109
|
}
|
|
115
110
|
|
package/dist/vite.svg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|