Files
redash/client/app/services/data-source.js
Levko Kravets b0b4d5e26a Convert Angular services to CommonJS-style and use them in React components instead of injecting (#3331)
* Refine Auth service: remove dead code and fix race condition
* Export services in CommonJS style
* Refine Users, Events and OfflineListener services
* Refactor Notifications service - rewrite to CommonJS
* Replace Angular service injection with imports in React components
* Fix Footer tests
* Events service -> recordEvent function
* CR1
2019-01-24 16:24:58 +02:00

56 lines
1.3 KiB
JavaScript

export const SCHEMA_NOT_SUPPORTED = 1;
export const SCHEMA_LOAD_ERROR = 2;
export let DataSource = null; // eslint-disable-line import/no-mutable-exports
function DataSourceService($q, $resource, $http) {
function fetchSchema(dataSourceId, refresh = false) {
const params = {};
if (refresh) {
params.refresh = true;
}
return $http.get(`api/data_sources/${dataSourceId}/schema`, { params });
}
const actions = {
get: { method: 'GET', cache: false, isArray: false },
query: { method: 'GET', cache: false, isArray: true },
test: {
method: 'POST',
cache: false,
isArray: false,
url: 'api/data_sources/:id/test',
},
};
const DataSourceResource = $resource('api/data_sources/:id', { id: '@id' }, actions);
DataSourceResource.prototype.getSchema = function getSchema(refresh = false) {
if (this._schema === undefined || refresh) {
return fetchSchema(this.id, refresh).then((response) => {
const data = response.data;
this._schema = data;
return data;
});
}
return $q.resolve(this._schema);
};
return DataSourceResource;
}
export default function init(ngModule) {
ngModule.factory('DataSource', DataSourceService);
ngModule.run(($injector) => {
DataSource = $injector.get('DataSource');
});
}
init.init = true;