UNPKG

@ng-flexy/form

Version:

Flexy components and tools to build Angular 8+ applications

97 lines 12.6 kB
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { FlexyLoggerService } from '@ng-flexy/core'; import { map } from 'rxjs/operators'; import { template, get } from 'lodash'; import * as jsonata_ from 'jsonata'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; import * as i2 from "@ng-flexy/core"; const jsonata = jsonata_; export class FlexyFormControlOptionsService { constructor(httpClient, logger) { this.httpClient = httpClient; this.logger = logger; } loadOptions(optionsUrl, optionsMapper = null, optionsPath) { if (optionsUrl) { return this.httpClient.get(optionsUrl).pipe(map(data => { if (data && optionsPath) { data = get(data, optionsPath); } const options = []; if (data && Array.isArray(data) && optionsMapper) { if (typeof optionsMapper === 'string') { options.push(...this._jsonataMapperOptions(optionsMapper, data)); } else { options.push(...this._optionsMapper(optionsMapper, data)); } } else if (!optionsMapper) { this.logger.warn('Options loader: optionsMapper is required'); } return options; })); } } _jsonataMapperOptions(optionsMapper, data) { const options = []; try { const compiled = jsonata(optionsMapper); const jsonOptions = compiled.evaluate({ optionsData: data }); if (jsonOptions && Array.isArray(jsonOptions) && jsonOptions.length && jsonOptions[0].hasOwnProperty('text') && jsonOptions[0].hasOwnProperty('value')) { options.push(...jsonOptions); } else { this.logger.debug('Jsonata error debug', jsonOptions, optionsMapper, data); this.logger.warn('Wrong jsonata mapping'); } } catch (e) { this.logger.error('Wrong jsonata expresion', optionsMapper, e); } return options; } _optionsMapper(optionsMapper, data) { const textTemplate = this._mapperTemplate(optionsMapper.text); const valueTemplate = this._mapperTemplate(optionsMapper.value); const prefixTemplate = this._mapperTemplate(optionsMapper.prefixHtml); const options = []; if (data && data.length) { data.forEach(item => { options.push({ text: item && textTemplate ? textTemplate(item) : '' + get(item, optionsMapper.text), value: item && valueTemplate ? valueTemplate(item) : get(item, optionsMapper.value), prefixHtml: item && prefixTemplate ? prefixTemplate(item) : get(item, optionsMapper.prefixHtml), _raw: item }); }); } return options; } _mapperTemplate(mapper) { if (!mapper) { return; } // check if template? if (mapper.includes('<%')) { return template(mapper); } } } FlexyFormControlOptionsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FlexyFormControlOptionsService_Factory() { return new FlexyFormControlOptionsService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.FlexyLoggerService)); }, token: FlexyFormControlOptionsService, providedIn: "root" }); FlexyFormControlOptionsService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; FlexyFormControlOptionsService.ctorParameters = () => [ { type: HttpClient }, { type: FlexyLoggerService } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLW9wdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0vc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLWNvbnRyb2wtb3B0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2QyxPQUFPLEtBQUssUUFBUSxNQUFNLFNBQVMsQ0FBQzs7OztBQUVwQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFLekIsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxZQUFvQixVQUFzQixFQUFVLE1BQTBCO1FBQTFELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFvQjtJQUFHLENBQUM7SUFFbEYsV0FBVyxDQUFDLFVBQWtCLEVBQUUsZ0JBQTZDLElBQUksRUFBRSxXQUFvQjtRQUNyRyxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFO29CQUN2QixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDL0I7Z0JBQ0QsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLElBQUksS0FB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QUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQztvQkFDL0YsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYztRQUNwQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBQ0QscUJBQXFCO1FBQ3JCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7Ozs7WUE5RUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFYUSxVQUFVO1lBQ1Ysa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEZsZXh5TG9nZ2VyU2VydmljZSB9IGZyb20gJ0BuZy1mbGV4eS9jb3JlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRlbXBsYXRlLCBnZXQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uLCBTZWxlY3RPcHRpb25NYXBwZXIgfSBmcm9tICcuLi9tb2RlbHMvc2VsZWN0LW9wdGlvbi5kYXRhJztcbmltcG9ydCAqIGFzIGpzb25hdGFfIGZyb20gJ2pzb25hdGEnO1xuXG5jb25zdCBqc29uYXRhID0ganNvbmF0YV87XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZsZXh5Rm9ybUNvbnRyb2xPcHRpb25zU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCwgcHJpdmF0ZSBsb2dnZXI6IEZsZXh5TG9nZ2VyU2VydmljZSkge31cblxuICBsb2FkT3B0aW9ucyhvcHRpb25zVXJsOiBzdHJpbmcsIG9wdGlvbnNNYXBwZXI6IFNlbGVjdE9wdGlvbk1hcHBlciB8IHN0cmluZyA9IG51bGwsIG9wdGlvbnNQYXRoPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXT4ge1xuICAgIGlmIChvcHRpb25zVXJsKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChvcHRpb25zVXJsKS5waXBlKFxuICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgJiYgb3B0aW9uc1BhdGgpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXQoZGF0YSwgb3B0aW9uc1BhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAgICAgICAgIGlmIChkYXRhICYmIEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgb3B0aW9uc01hcHBlcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zTWFwcGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBvcHRpb25zLnB1c2goLi4udGhpcy5fanNvbmF0YU1hcHBlck9wdGlvbnMob3B0aW9uc01hcHBlciwgZGF0YSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKC4uLnRoaXMuX29wdGlvbnNNYXBwZXIob3B0aW9uc01hcHBlciBhcyBTZWxlY3RPcHRpb25NYXBwZXIsIGRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zTWFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdPcHRpb25zIGxvYWRlcjogb3B0aW9uc01hcHBlciBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfanNvbmF0YU1hcHBlck9wdGlvbnMob3B0aW9uc01hcHBlcjogc3RyaW5nLCBkYXRhOiBBcnJheTxhbnk+KTogU2VsZWN0T3B0aW9uW10ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBpbGVkID0ganNvbmF0YShvcHRpb25zTWFwcGVyKTtcbiAgICAgIGNvbnN0IGpzb25PcHRpb25zID0gY29tcGlsZWQuZXZhbHVhdGUoeyBvcHRpb25zRGF0YTogZGF0YSB9KSBhcyBTZWxlY3RPcHRpb25bXTtcbiAgICAgIGlmIChcbiAgICAgICAganNvbk9wdGlvbnMgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShqc29uT3B0aW9ucykgJiZcbiAgICAgICAganNvbk9wdGlvbnMubGVuZ3RoICYmXG4gICAgICAgIGpzb25PcHRpb25zWzBdLmhhc093blByb3BlcnR5KCd0ZXh0JykgJiZcbiAgICAgICAganNvbk9wdGlvbnNbMF0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJylcbiAgICAgICkge1xuICAgICAgICBvcHRpb25zLnB1c2goLi4uanNvbk9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0pzb25hdGEgZXJyb3IgZGVidWcnLCBqc29uT3B0aW9ucywgb3B0aW9uc01hcHBlciwgZGF0YSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1dyb25nIGpzb25hdGEgbWFwcGluZycpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdXcm9uZyBqc29uYXRhIGV4cHJlc2lvbicsIG9wdGlvbnNNYXBwZXIsIGUpO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgX29wdGlvbnNNYXBwZXIob3B0aW9uc01hcHBlcjogU2VsZWN0T3B0aW9uTWFwcGVyLCBkYXRhOiBhbnlbXSkge1xuICAgIGNvbnN0IHRleHRUZW1wbGF0ZSA9IHRoaXMuX21hcHBlclRlbXBsYXRlKG9wdGlvbnNNYXBwZXIudGV4dCk7XG4gICAgY29uc3QgdmFsdWVUZW1wbGF0ZSA9IHRoaXMuX21hcHBlclRlbXBsYXRlKG9wdGlvbnNNYXBwZXIudmFsdWUpO1xuICAgIGNvbnN0IHByZWZpeFRlbXBsYXRlID0gdGhpcy5fbWFwcGVyVGVtcGxhdGUob3B0aW9uc01hcHBlci5wcmVmaXhIdG1sKTtcbiAgICBjb25zdCBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgdGV4dDogaXRlbSAmJiB0ZXh0VGVtcGxhdGUgPyB0ZXh0VGVtcGxhdGUoaXRlbSkgOiAnJyArIGdldChpdGVtLCBvcHRpb25zTWFwcGVyLnRleHQpLFxuICAgICAgICAgIHZhbHVlOiBpdGVtICYmIHZhbHVlVGVtcGxhdGUgPyB2YWx1ZVRlbXBsYXRlKGl0ZW0pIDogZ2V0KGl0ZW0sIG9wdGlvbnNNYXBwZXIudmFsdWUpLFxuICAgICAgICAgIHByZWZpeEh0bWw6IGl0ZW0gJiYgcHJlZml4VGVtcGxhdGUgPyBwcmVmaXhUZW1wbGF0ZShpdGVtKSA6IGdldChpdGVtLCBvcHRpb25zTWFwcGVyLnByZWZpeEh0bWwpLFxuICAgICAgICAgIF9yYXc6IGl0ZW1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIF9tYXBwZXJUZW1wbGF0ZShtYXBwZXI6IHN0cmluZyk6ICh2YWw6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgICBpZiAoIW1hcHBlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiB0ZW1wbGF0ZT9cbiAgICBpZiAobWFwcGVyLmluY2x1ZGVzKCc8JScpKSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUobWFwcGVyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==