John Cowen f2accb0bd1 ui: Move routes to use data-sources (#8321)
* Add uri identifiers to all data source things and make them the same

1. Add uri identitifer to data-source service
2. Make <EventSource /> and <DataSource /> as close as possible
3. Add extra `.closed` method to get a list of inactive/closed/closing
data-sources from elsewhere

* Make the connections cleanup the least worst connection when required

* Pass the uri/request id through all the things

* Better user erroring

* Make event sources close on error

* Allow <DataLoader /> data slot to be configurable

* Allow the <DataWriter /> removed state to be configurable

* Don't error if meta is undefined

* Stitch together all the repositories into the data-source/sink

* Use data.source over repositories

* Add missing  <EventSource /> components

* Fix up the views/templates

* Disable all the old route based blocking query things

* We still need the repo for the mixin for the moment

* Don't default to default, default != ''
2020-07-17 13:43:16 +00:00

62 lines
1.6 KiB
JavaScript

import Service from '@ember/service';
import createHeaders from 'consul-ui/utils/http/create-headers';
import createXHR from 'consul-ui/utils/http/xhr';
import Request from 'consul-ui/utils/http/request';
import HTTPError from 'consul-ui/utils/http/error';
const xhr = createXHR(createHeaders());
export default Service.extend({
xhr: function(options) {
return xhr(options);
},
request: function(params) {
const request = new Request(params.method, params.url, {
['x-request-id']: params.clientHeaders['x-request-id'],
body: params.data || {},
});
const options = {
...params,
beforeSend: function(xhr) {
request.open(xhr);
},
converters: {
'text json': function(response) {
try {
return JSON.parse(response);
} catch (e) {
return response;
}
},
},
success: function(headers, response, status, statusText) {
// Response-ish
request.respond({
headers: headers,
response: response,
status: status,
statusText: statusText,
});
},
error: function(headers, response, status, statusText, err) {
let error;
if (err instanceof Error) {
error = err;
} else {
error = new HTTPError(status, response);
}
request.error(error);
},
complete: function(status) {
request.close();
},
};
request.fetch = () => {
this.xhr(options);
return request;
};
return request;
},
});