@ng-flexy/form
Version:
Flexy components and tools to build Angular 8+ applications
97 lines • 12.6 kB
JavaScript
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==