add funcParam builder with sorting by required

This commit is contained in:
2021-01-23 15:11:14 -07:00
parent 17deed412a
commit 8e8c587c85
2 changed files with 43 additions and 4 deletions

View File

@ -1,4 +1,4 @@
import {EndpointDef} from "../systemGenService"; import {ColumnDef, EndpointDef, Filter} from "../systemGenService";
import {lowercaseFirstLetter} from "./helpers"; import {lowercaseFirstLetter} from "./helpers";
import {buildMapperFunctionName} from "./mapper-creator"; import {buildMapperFunctionName} from "./mapper-creator";
@ -12,9 +12,7 @@ function buildServiceFunction(view: EndpointDef): string {
let func: string = ''; let func: string = '';
let isListOrSearch: boolean = view.type === 'list' || view.type === 'search'; let isListOrSearch: boolean = view.type === 'list' || view.type === 'search';
let funcName: string = buildServiceFunctionName(view); let funcName: string = buildServiceFunctionName(view);
// there should never be an 'undefined' item in funcParams but the compiler complained that it was possible let funcParams: string[] = getFuncParams(view);
// TODO: funcParams should be sorted by 'required' so the optional params can come last and be left off when calling
let funcParams: (string | undefined)[] = (view.columns?.filter(column => column.param).map(column => column.param) || []).concat(view.filters?.filter(filter => filter.param).map(filter => filter.param) || []);
let columnParams: string[] = view.columns?.filter(column => column.param).map(column => { return '\n ' + column.param + ': ' + column.param; }); let columnParams: string[] = view.columns?.filter(column => column.param).map(column => { return '\n ' + column.param + ': ' + column.param; });
let filterParams: string[] = view.filters?.filter(filter => filter.param).map(filter => { return '\n ' + filter.param + ': ' + filter.param; }) || []; let filterParams: string[] = view.filters?.filter(filter => filter.param).map(filter => { return '\n ' + filter.param + ': ' + filter.param; }) || [];
@ -33,6 +31,41 @@ function buildServiceFunction(view: EndpointDef): string {
return func; return func;
} }
function getFuncParams(view: EndpointDef): string[] {
let filters = view.filters || [];
let columnList: ParamDef[] = view.columns?.filter((column) => {return column.param;}).map((column) => {
return {
param: column.param,
required: column.required
};
});
let filterList: ParamDef[] = filters.filter((column) => {return column.param;}).map((filter) => {
return {
param: filter.param,
required: filter.required
};
});
// funcParams should be sorted by 'required' so the optional params can come last and be left off when calling
let combinedList = columnList.concat(filterList).sort((a, b) => {
if (a.required && b.required) {
return 0;
}
if (a.required) {
return -1;
}
if (b.required) {
return 1;
}
return 0;
});
return combinedList.map((param) => {
return param.param || '';
});
}
function buildServiceFunctionName(view: EndpointDef): string { function buildServiceFunctionName(view: EndpointDef): string {
return buildMapperFunctionName(view); // the functions should have the same name... I'm pretty sure... return buildMapperFunctionName(view); // the functions should have the same name... I'm pretty sure...
} }
@ -41,6 +74,11 @@ function mapperInstance(view: EndpointDef): string {
return `${lowercaseFirstLetter(view.component)}Mapper`; return `${lowercaseFirstLetter(view.component)}Mapper`;
} }
interface ParamDef {
param?: string;
required?: boolean;
}
export { export {
createServiceFunc createServiceFunc
} }

View File

@ -47,6 +47,7 @@ function createComponent(component: ComponentDef, systemDef: SystemDef) {
componentResolve(); componentResolve();
}); });
} }
// TODO: remove {{component}} folder that hasn't been used
}); });
}); });
} }