utils_common_mk-arg.js

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;
    }, "");
}