import { isNull } from "../../adapters/ezworks/com-api/util";
/**
* 키, 값 오브젝트를 문자열 형식의 인수로 변환하는 함수
*
* 자동으로 매개변수의 값이 nullish 값일 경우 빈 문자열로 변경합니다.
*
* @function mkArg
* @param {string | string[]} [args.$div] - Div 객체 내부의 컴포넌트 대상으로 변환
* - 인수를 변환 변환한다. 컴포넌트는 해당하는 값을
* 가져온다.
* @param {Object} args 파라미터 구성을 위한 객체 (값으로 nexacro.Dataset 객체가 올 경우, 객체의 키와 매칭되는 컬럼의 현재 행(rowposition) 값을 가져옴)
* @returns {string} 문자열 형식의 인수
* @memberof $f
* @example
* const args = $f.mkArg({
* $div: this.div_search,
* LITERAL_STRING: "TEST",
* COMPONENT: this.div_search.form.cmb_combo,
* COLUMN_NAME: this.ds_list, // nexacro.Dataset (현재 rowposition에서 'COLUMN_NAME' 컬럼의 값을 가져옴)
* });
*
*/
export function mkArg(args) {
return Object.keys(args).reduce((acc, key, i, arr) => {
let result;
const value = args[key];
// div 처리
switch (key) {
case "$div":
let divList = value;
if (!(divList instanceof Array)) divList = [divList];
result = divList.reduce(function (acc, div) {
return acc + $comp.makeParamStr(div) + " ";
}, "");
break;
default:
if (value instanceof nexacro.Dataset) {
// 데이터셋 처리
const dsValue = value.getColumn(value.rowposition, key);
result = `${key}='${dsValue}' `;
} else if (value instanceof nexacro.Component) {
// 컴포넌트 처리
result =
key +
"='" +
(isNull(value.value) ? "" : value.value) +
"' ";
} else {
// 일반 문자열 처리
result = key + "='" + (isNull(value) ? "" : value) + "' ";
}
break;
}
return acc + result;
}, "");
}