Skip to content

Commit 9807e74

Browse files
committed
fix: handling of methods
1 parent 6c46b0b commit 9807e74

File tree

1 file changed

+48
-25
lines changed

1 file changed

+48
-25
lines changed

src/client.js

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)