@@ -25,6 +25,10 @@ const CoCreateApi = {
2525 } ) ;
2626
2727 for ( const endPoint of Object . keys ( endPoints ) ) {
28+ socket . listen ( name + '.' + endPoint , ( data ) => {
29+ self . __response ( name , data ) ;
30+ } ) ;
31+
2832 let functions = endPoints [ endPoint ]
2933 if ( typeof functions . request !== 'function' ) {
3034 functions . request = self . __request ;
@@ -33,13 +37,12 @@ const CoCreateApi = {
3337 name : endPoint ,
3438 endEvent : endPoint ,
3539 callback : ( data ) => {
36- let params
3740 const element = data . element
38- let form = element . closest ( ' form' ) || document
41+ let form = data . form || document
3942 const selector = `[${ name } ^="${ endPoint } ."]`
4043 let el = form . querySelector ( selector )
4144 if ( ! el ) return
42- params = self . parseParams ( { name, element : el } )
45+ let params = self . parseParams ( { name, element : el } )
4346 if ( params ) {
4447 functions . request ( { name, ...params , element, form, type : 'action' } )
4548 }
@@ -97,45 +100,64 @@ const CoCreateApi = {
97100 }
98101 } ,
99102
100- __request : async function ( { name, endPoint, element } ) {
101- let form = element . closest ( 'form' ) ;
102- let data = await this . getData ( { name, endPoint, form } ) ;
103- this . send ( name , endPoint , data [ endPoint ] ) ;
103+
104+ __request : async function ( object ) {
105+ if ( object . type !== 'action' )
106+ return
107+ if ( ! object . form )
108+ object . form = element . closest ( 'form' ) ;
109+ let data = await CoCreateApi . getData ( object ) ;
110+ CoCreateApi . send ( object . name , object . endPoint , data ) ;
104111 } ,
105112
106113 __response : function ( name , data ) {
107- const { endPoint, response } = data ;
114+ const endPoint = data . method . substring ( name . length + 1 ) ;
108115 const component = this . components [ name ] ;
109116 const functions = component . endPoints [ endPoint ]
110117 if ( functions . listen !== false ) {
111118 if ( typeof functions . response === 'function' ) {
112- functions . response ( response ) ;
113- } else
114- this . setData ( { name, endPoint, data } )
119+ functions . response ( data [ name ] ) ;
120+ } else if ( data . error ) {
121+ render ( {
122+ selector : `[template*='${ name } ']` ,
123+ data : [ {
124+ type : name ,
125+ status : 'failed' ,
126+ message : data . error
127+ } ]
128+ } ) ;
129+ } else {
130+ CoCreateApi . setData ( { name, endPoint, data } )
115131
116- document . dispatchEvent ( new CustomEvent ( endPoint , {
117- detail : {
118- data : response
119- }
120- } ) ) ;
132+ document . dispatchEvent ( new CustomEvent ( endPoint , {
133+ detail : {
134+ data : data [ name ]
135+ }
136+ } ) ) ;
137+ }
121138 }
122139 } ,
123140
124141 send : function ( name , endPoint , data ) {
125142 let method = name + '.' + endPoint
126- socket . send ( { method, endPoint, data, broadcastBrowser : false } ) ;
143+ socket . send ( { method, endPoint, [ name ] : data , broadcastBrowser : false , status : 'await' } ) ;
127144 } ,
128145
129146 parseParams : function ( { name, endPoint, element } ) {
130147 let attribute = element . getAttribute ( name )
131148 if ( ! attribute )
132149 return false
133150
134- let dotNotation = attribute
135- let params = attribute . split ( '.' )
136- endPoint = params [ 0 ]
137- let key = params [ 1 ]
138- return { endPoint, key, dotNotation, params }
151+ let endPoints = this . components [ name ] . endPoints
152+ for ( let k of Object . keys ( endPoints ) ) {
153+ if ( attribute . startsWith ( k ) ) {
154+ endPoint = k
155+ break ;
156+ }
157+ }
158+
159+ let key = attribute . substring ( endPoint . length + 1 ) ;
160+ return { endPoint, key, dotNotation : attribute }
139161
140162 } ,
141163
@@ -150,9 +172,10 @@ const CoCreateApi = {
150172 elements = [ element ]
151173 for ( let el of elements ) {
152174 if ( ! el || el . closest ( '[template]' ) ) continue
153- let attribute = el . getAttribute ( name )
154- if ( attribute )
155- data [ attribute ] = await el . getValue ( )
175+ let params = this . parseParams ( { name, element : el } )
176+ if ( params . key ) {
177+ data [ params . key ] = await el . getValue ( )
178+ }
156179 }
157180
158181 return dotNotationToObject ( data ) ;
0 commit comments