UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

114 lines 13.1 kB
import { PaginationParams } from '../../utility/pagination/pagination-params'; /** * The class that contains behavior common to all resource services. * * Mostly endpoint URL resolution and utility functions for response parsing. */ export class AbstractResourceService { _resourceProvider; configurationService; _SERVER_URL; resourceName; /** * @param resourceName the identifier of the desired endpoint from configuration, found in * {@link SetAuthAndResourcesAddress}.[resources]{@link Resources}. * @param _resourceProvider `ResourceProvider` instance * @param configurationService `ConfigurationService` instance */ constructor(resourceName, _resourceProvider, configurationService) { this._resourceProvider = _resourceProvider; this.configurationService = configurationService; this.resourceName = resourceName; } get SERVER_URL() { if (!this._SERVER_URL) { this._SERVER_URL = this.getResourceAddress(this.resourceName); } return this._SERVER_URL; } /** * Get URL form nae.json - resources * @param name - ID property */ getResourceAddress(name) { let URL = ''; const resourcesArray = this.configurationService.getConfigurationSubtree(['providers', 'resources']); if (resourcesArray instanceof Array) { resourcesArray.forEach(resource => { if (resource.name === name) { URL = resource.address; } }); } else if (resourcesArray && resourcesArray.name === name) { URL = resourcesArray.address; } return URL; } /** * Parses a response `response` into a {@link Page} instance * @param response - response object * @param propertiesParams - plural form of the resource name, that is used to extract the data. Eg. "cases". */ getResourcePage(response, propertiesParams) { if (!response) { return response; } const defaultPage = { number: -1, size: 0, totalPages: 0, totalElements: 0 }; return { content: this.changeType(response, propertiesParams), pagination: response.hasOwnProperty(PaginationParams.PAGE_NUMBER) ? response.page : defaultPage }; } /** * Extracts data from the response `response` into an object with better usability. * @param response - response object * @param propertiesParams - plural form of the resource name, that is used to extract the data. Eg. "cases". */ changeType(response, propertiesParams) { if (!response) { return response; } if (response.hasOwnProperty('_embedded')) { return propertiesParams && response._embedded.hasOwnProperty(propertiesParams) ? response._embedded[propertiesParams] : response._embedded; } else { return response; } } /** * Converts a Spring-style paginated response into the application's Page<T> format. * @param response The raw response from backend (Spring `PageImpl` structure). * @returns Converted Page<T> object. */ mapToPage(response) { if (!response || !response.content) { return { content: [], pagination: { size: 0, totalElements: 0, totalPages: 0, number: 0 } }; } return { content: response.content, pagination: { size: response.size, totalElements: response.totalElements, totalPages: response.totalPages, number: response.number } }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcmVzb3VyY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvcmVzb3VyY2VzL2Fic3RyYWN0LWVuZHBvaW50L2Fic3RyYWN0LXJlc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFFNUU7Ozs7R0FJRztBQUNILE1BQU0sT0FBZ0IsdUJBQXVCO0lBWVQ7SUFDQTtJQVh4QixXQUFXLENBQVM7SUFDWCxZQUFZLENBQVM7SUFFdEM7Ozs7O09BS0c7SUFDSCxZQUFzQixZQUFvQixFQUNWLGlCQUFtQyxFQUNuQyxvQkFBMEM7UUFEMUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQ3RFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFjLFVBQVU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3JDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUViLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXJHLElBQUksY0FBYyxZQUFZLEtBQUssRUFBRTtZQUNqQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM5QixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO29CQUN4QixHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztpQkFDMUI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU0sSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDdkQsR0FBRyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7U0FDaEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sZUFBZSxDQUFJLFFBQWEsRUFBRSxnQkFBd0I7UUFDaEUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLE9BQU8sUUFBUSxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxXQUFXLEdBQWU7WUFDNUIsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNWLElBQUksRUFBRSxDQUFDO1lBQ1AsVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsQ0FBQztTQUNuQixDQUFDO1FBRUYsT0FBTztZQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFXLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQztZQUM5RCxVQUFVLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVztTQUNsRyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxVQUFVLENBQUksUUFBYSxFQUFFLGdCQUF3QjtRQUMzRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTyxRQUFRLENBQUM7U0FDbkI7UUFDRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDMUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1NBQzVCO2FBQU07WUFDSCxPQUFPLFFBQVEsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sU0FBUyxDQUFJLFFBQWE7UUFDaEMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDaEMsT0FBTztnQkFDSCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxVQUFVLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLENBQUM7b0JBQ1AsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLFVBQVUsRUFBRSxDQUFDO29CQUNiLE1BQU0sRUFBRSxDQUFDO2lCQUNaO2FBQ0osQ0FBQztTQUNMO1FBRUQsT0FBTztZQUNILE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztZQUN6QixVQUFVLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7Z0JBQ3JDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDL0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2FBQzFCO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVzb3VyY2VQcm92aWRlcn0gZnJvbSAnLi4vcmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1BhZ2V9IGZyb20gJy4uL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7UGFnaW5hdGlvbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3BhZ2luYXRpb24nO1xuaW1wb3J0IHtQYWdpbmF0aW9uUGFyYW1zfSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXMnO1xuXG4vKipcbiAqIFRoZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGJlaGF2aW9yIGNvbW1vbiB0byBhbGwgcmVzb3VyY2Ugc2VydmljZXMuXG4gKlxuICogTW9zdGx5IGVuZHBvaW50IFVSTCByZXNvbHV0aW9uIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgcmVzcG9uc2UgcGFyc2luZy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVzb3VyY2VTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgX1NFUlZFUl9VUkw6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlTmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHJlc291cmNlTmFtZSB0aGUgaWRlbnRpZmllciBvZiB0aGUgZGVzaXJlZCBlbmRwb2ludCBmcm9tIGNvbmZpZ3VyYXRpb24sIGZvdW5kIGluXG4gICAgICoge0BsaW5rIFNldEF1dGhBbmRSZXNvdXJjZXNBZGRyZXNzfS5bcmVzb3VyY2VzXXtAbGluayBSZXNvdXJjZXN9LlxuICAgICAqIEBwYXJhbSBfcmVzb3VyY2VQcm92aWRlciBgUmVzb3VyY2VQcm92aWRlcmAgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblNlcnZpY2UgYENvbmZpZ3VyYXRpb25TZXJ2aWNlYCBpbnN0YW5jZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZXNvdXJjZU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9yZXNvdXJjZVByb3ZpZGVyOiBSZXNvdXJjZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMucmVzb3VyY2VOYW1lID0gcmVzb3VyY2VOYW1lO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgU0VSVkVSX1VSTCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuX1NFUlZFUl9VUkwpIHtcbiAgICAgICAgICAgIHRoaXMuX1NFUlZFUl9VUkwgPSB0aGlzLmdldFJlc291cmNlQWRkcmVzcyh0aGlzLnJlc291cmNlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX1NFUlZFUl9VUkw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IFVSTCBmb3JtIG5hZS5qc29uIC0gcmVzb3VyY2VzXG4gICAgICogQHBhcmFtIG5hbWUgLSBJRCBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRSZXNvdXJjZUFkZHJlc3MobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IFVSTCA9ICcnO1xuXG4gICAgICAgIGNvbnN0IHJlc291cmNlc0FycmF5ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRDb25maWd1cmF0aW9uU3VidHJlZShbJ3Byb3ZpZGVycycsICdyZXNvdXJjZXMnXSk7XG5cbiAgICAgICAgaWYgKHJlc291cmNlc0FycmF5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHJlc291cmNlc0FycmF5LmZvckVhY2gocmVzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIFVSTCA9IHJlc291cmNlLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzQXJyYXkgJiYgcmVzb3VyY2VzQXJyYXkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgVVJMID0gcmVzb3VyY2VzQXJyYXkuYWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVVJMO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHJlc3BvbnNlIGByZXNwb25zZWAgaW50byBhIHtAbGluayBQYWdlfSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSByZXNwb25zZSAtIHJlc3BvbnNlIG9iamVjdFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzUGFyYW1zIC0gcGx1cmFsIGZvcm0gb2YgdGhlIHJlc291cmNlIG5hbWUsIHRoYXQgaXMgdXNlZCB0byBleHRyYWN0IHRoZSBkYXRhLiBFZy4gXCJjYXNlc1wiLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRSZXNvdXJjZVBhZ2U8VD4ocmVzcG9uc2U6IGFueSwgcHJvcGVydGllc1BhcmFtczogc3RyaW5nKTogUGFnZTxUPiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0UGFnZTogUGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIG51bWJlcjogLTEsXG4gICAgICAgICAgICBzaXplOiAwLFxuICAgICAgICAgICAgdG90YWxQYWdlczogMCxcbiAgICAgICAgICAgIHRvdGFsRWxlbWVudHM6IDBcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogdGhpcy5jaGFuZ2VUeXBlPEFycmF5PFQ+PihyZXNwb25zZSwgcHJvcGVydGllc1BhcmFtcyksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShQYWdpbmF0aW9uUGFyYW1zLlBBR0VfTlVNQkVSKSA/IHJlc3BvbnNlLnBhZ2UgOiBkZWZhdWx0UGFnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIGRhdGEgZnJvbSB0aGUgcmVzcG9uc2UgYHJlc3BvbnNlYCBpbnRvIGFuIG9iamVjdCB3aXRoIGJldHRlciB1c2FiaWxpdHkuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIC0gcmVzcG9uc2Ugb2JqZWN0XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXNQYXJhbXMgLSBwbHVyYWwgZm9ybSBvZiB0aGUgcmVzb3VyY2UgbmFtZSwgdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3QgdGhlIGRhdGEuIEVnLiBcImNhc2VzXCIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNoYW5nZVR5cGU8VD4ocmVzcG9uc2U6IGFueSwgcHJvcGVydGllc1BhcmFtczogc3RyaW5nKTogVCB7XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ19lbWJlZGRlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydGllc1BhcmFtcyAmJiByZXNwb25zZS5fZW1iZWRkZWQuaGFzT3duUHJvcGVydHkocHJvcGVydGllc1BhcmFtcylcbiAgICAgICAgICAgICAgICA/IHJlc3BvbnNlLl9lbWJlZGRlZFtwcm9wZXJ0aWVzUGFyYW1zXVxuICAgICAgICAgICAgICAgIDogcmVzcG9uc2UuX2VtYmVkZGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSBTcHJpbmctc3R5bGUgcGFnaW5hdGVkIHJlc3BvbnNlIGludG8gdGhlIGFwcGxpY2F0aW9uJ3MgUGFnZTxUPiBmb3JtYXQuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIFRoZSByYXcgcmVzcG9uc2UgZnJvbSBiYWNrZW5kIChTcHJpbmcgYFBhZ2VJbXBsYCBzdHJ1Y3R1cmUpLlxuICAgICAqIEByZXR1cm5zIENvbnZlcnRlZCBQYWdlPFQ+IG9iamVjdC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWFwVG9QYWdlPFQ+KHJlc3BvbnNlOiBhbnkpOiBQYWdlPFQ+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuY29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBbXSxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsRWxlbWVudHM6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcjogMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogcmVzcG9uc2UuY29udGVudCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBzaXplOiByZXNwb25zZS5zaXplLFxuICAgICAgICAgICAgICAgIHRvdGFsRWxlbWVudHM6IHJlc3BvbnNlLnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgdG90YWxQYWdlczogcmVzcG9uc2UudG90YWxQYWdlcyxcbiAgICAgICAgICAgICAgICBudW1iZXI6IHJlc3BvbnNlLm51bWJlclxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==