@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 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
- tasksService.getActionUrl('getTasks', 'active')
49
+ getActionUrl('getTasks', 'active')
50
50
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iankibetsh/vue-streamline",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "Vue library for streamlining laravel backend services with @iankibet/streamline composer package",
5
5
  "type": "module",
6
6
  "scripts": {
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',28)
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(28)
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
- {{ paybillService.getMethods() }}
18
- <input type="text">
19
- {{ paybillService.paybill }}
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({}) // Make the service object 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 methods = data.methods
42
- for (const method of methods) {
43
- service[method] = async (...args) => {
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 proxyService = new Proxy(service, {
61
- get(target, action) {
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
- const getUrlMethods = ['getUrl', 'getFullUrl', 'getActionUrl']
88
- if (getUrlMethods.includes(action)) {
89
- postBody.action = args[0]
90
- const params = args.slice(1)
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
- // Fetch and set the properties on initialization
107
- fetchServiceProperties()
99
+ }
100
+ onMounted(()=>{
101
+ fetchServiceProperties()
102
+ })
108
103
 
109
104
  return {
110
- ...toRefs(service), // Spread the reactive service properties and return as refs for reactivity
111
- service: proxyService, // Return the proxy service for method calls
112
- loading
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>