@things-factory/meta-ui 9.0.0-beta.79 → 9.0.0-beta.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/component/grist/renderer/grist-renderer-meta-object-selector.js +1 -2
- package/dist-client/component/grist/renderer/grist-renderer-meta-object-selector.js.map +1 -1
- package/dist-client/component/popup/code-input-editor-popup.js +20 -20
- package/dist-client/component/popup/code-input-editor-popup.js.map +1 -1
- package/dist-client/component/popup/file-upload-popup.js +4 -1
- package/dist-client/component/popup/file-upload-popup.js.map +1 -1
- package/dist-client/component/popup/meta-object-selector-popup.js +26 -26
- package/dist-client/component/popup/meta-object-selector-popup.js.map +1 -1
- package/dist-client/component/popup/record-based-code-editor-popup.js +20 -20
- package/dist-client/component/popup/record-based-code-editor-popup.js.map +1 -1
- package/dist-client/mixin/meta-base-mixin.js +1 -2
- package/dist-client/mixin/meta-base-mixin.js.map +1 -1
- package/dist-client/mixin/meta-basic-grist-mixin.js +2 -4
- package/dist-client/mixin/meta-basic-grist-mixin.js.map +1 -1
- package/dist-client/mixin/meta-form-mixin.js +2 -2
- package/dist-client/mixin/meta-form-mixin.js.map +1 -1
- package/dist-client/mixin/meta-grist-tab-mixin.js +1 -2
- package/dist-client/mixin/meta-grist-tab-mixin.js.map +1 -1
- package/dist-client/mixin/meta-main-tab-mixin.js +1 -2
- package/dist-client/mixin/meta-main-tab-mixin.js.map +1 -1
- package/dist-client/mixin/meta-master-detail-mixin.js +1 -2
- package/dist-client/mixin/meta-master-detail-mixin.js.map +1 -1
- package/dist-client/mixin/meta-service-mixin.js +2 -4
- package/dist-client/mixin/meta-service-mixin.js.map +1 -1
- package/dist-client/mixin/meta-tab-detail-mixin.js +1 -2
- package/dist-client/mixin/meta-tab-detail-mixin.js.map +1 -1
- package/dist-client/pages/activity/meta-activity-define-page.js +10 -9
- package/dist-client/pages/activity/meta-activity-define-page.js.map +1 -1
- package/dist-client/pages/activity/meta-activity-list-page.js +22 -10
- package/dist-client/pages/activity/meta-activity-list-page.js.map +1 -1
- package/dist-client/pages/activity/meta-activiy-mixin.js +1 -2
- package/dist-client/pages/activity/meta-activiy-mixin.js.map +1 -1
- package/dist-client/pages/entity/config-entity.js +12 -10
- package/dist-client/pages/entity/config-entity.js.map +1 -1
- package/dist-client/pages/history/history-json-list-popup.js +4 -1
- package/dist-client/pages/history/history-json-list-popup.js.map +1 -1
- package/dist-client/pages/menu/dynamic-menu.js +5 -6
- package/dist-client/pages/menu/dynamic-menu.js.map +1 -1
- package/dist-client/pages/terms/config-terminology.js +10 -2
- package/dist-client/pages/terms/config-terminology.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/utils/meta-ui-util.js +25 -17
- package/dist-client/utils/meta-ui-util.js.map +1 -1
- package/dist-client/utils/service-util.js +22 -23
- package/dist-client/utils/service-util.js.map +1 -1
- package/dist-client/utils/terms-util.js +8 -2
- package/dist-client/utils/terms-util.js.map +1 -1
- package/dist-client/utils/ui-util.js +1 -2
- package/dist-client/utils/ui-util.js.map +1 -1
- package/dist-server/service/button-role/button-role-mutation.js +24 -6
- package/dist-server/service/button-role/button-role-mutation.js.map +1 -1
- package/dist-server/service/dynamic-menu/dynamic-menu-query.js +3 -4
- package/dist-server/service/dynamic-menu/dynamic-menu-query.js.map +1 -1
- package/dist-server/service/menu-button-auth/menu-button-auth-mutation.js +24 -6
- package/dist-server/service/menu-button-auth/menu-button-auth-mutation.js.map +1 -1
- package/dist-server/service/meta-activity/meta-activity-mutation.js +15 -5
- package/dist-server/service/meta-activity/meta-activity-mutation.js.map +1 -1
- package/dist-server/service/work-code/work-code-mutation.js +27 -8
- package/dist-server/service/work-code/work-code-mutation.js.map +1 -1
- package/dist-server/service/work-code-detail/work-code-detail-mutation.js +25 -7
- package/dist-server/service/work-code-detail/work-code-detail-mutation.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-ui-util.js","sourceRoot":"","sources":["../../client/utils/meta-ui-util.js"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist/ox-record-creator.js'\nimport 'ses'\n\nimport { css, html, render, nothing } from 'lit'\n\nimport { getEditor, getRenderer } from '@operato/data-grist'\nimport { getValueGenerators } from '@operato/time-calculator'\nimport moment from '@operato/moment-timezone-es'\nimport {\n ScrollbarStyles,\n CommonGristStyles,\n CommonButtonStyles,\n ButtonContainerStyles,\n CommonHeaderStyles\n} from '@operato/styles'\n\nimport { MetaCrypto } from './meta-crypto'\nimport { TermsUtil } from './terms-util'\nimport { ValueUtil } from './value-util'\nimport { ServiceUtil } from './service-util'\nimport { UiUtil } from './ui-util'\nimport { MetaApi } from './meta-api'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop shortstop@hatiolab.com\n * @description 메타 UI에서 필요한 유틸리티 함수 정의\n */\nexport class MetaUiUtil {\n /**\n * @description 메뉴 ID 정보로 메뉴 메타 정보 조회\n ********************************************\n * @param {String} menuId 메뉴 ID 값\n * @returns {Object} 메뉴 메타 정보\n */\n static async findMenuMeta(menuId) {\n let menu = await ServiceUtil.findOne('menu', menuId, 'template')\n\n if (!menu) {\n throw new Error(TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${menuId}` }))\n }\n\n if (!menu.template) {\n throw new Error(\n TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${TermsUtil.tLabel('model')}` })\n )\n }\n\n this.menuId = menuId\n return JSON.parse(menu.template)\n }\n\n /**\n * @description 메뉴 라우팅 정보로 메뉴 메타 정보 조회\n **********************************************\n * @param {String} menuRouting 메뉴 route 값\n * @returns {Object} 메뉴 메타 정보 (암호)\n */\n static async getMenuMetaData(menuRouting) {\n let filters = [{ name: 'routing', operator: 'eq', value: menuRouting }]\n let data = await ServiceUtil.searchByPagination('menus', filters, null, 0, 0, 'id,template')\n return data\n }\n\n /**\n * @description 메뉴 라우팅 정보로 메뉴 메타 정보 조회\n **********************************************\n * @param {Object} pageView\n * @param {String} menuRouting 메뉴 route 값\n * @returns {Object} 메뉴 메타 정보\n */\n static async findMenuMetaByRouting(pageView, menuRouting) {\n let data = await MetaUiUtil.getMenuMetaData(menuRouting)\n let menu = undefined\n\n if (!data || !data.records || data.records.length == 0) {\n if (pageView.defaultPageConfig) {\n menu = { id: menuRouting, template: pageView.defaultPageConfig }\n }\n } else {\n menu = data.records[0]\n if (!menu.template && pageView.defaultPageConfig) {\n menu.template = pageView.defaultPageConfig\n }\n }\n\n if (!menu) {\n throw new Error(TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${menuRouting}` }))\n } else if (!menu.template) {\n throw new Error(\n TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${TermsUtil.tLabel('model')}` })\n )\n }\n\n pageView.menuId = menu.id\n return JSON.parse(MetaCrypto.dec(menu.template))\n }\n\n /**\n * @description 기본 그리스트 페이지 프로퍼티 리턴\n *******************************************\n * @returns {Object} 기본 그리스트 페이지 프로퍼티\n */\n static getBasicGristPageProperties() {\n return {\n /* 메뉴 메타 정보 */\n menuInfo: Object, // 메뉴 기본 정보\n gridConfig: Object, // 그리드 구성 정보\n gridColumnConfig: Array, // 그리드 컬럼 정보\n formColumnConfig: Array, // form 컬럼 정보\n buttonConfig: Array, // 버튼 구성 정보\n searchConfig: Array, // 서치폼 구성 정보\n gqlInfo: String, // GraphQL 정보\n gqlFetchField: String, // GraphQL 조회 필드\n searchFormElement: String, // 화면에서 사용 되는 서치폼 (grist, filter, not)\n useFilterForm: Boolean, // 그리드내 filter 폼 사용 여부\n\n /* 화면 구성 */\n gristConfigSet: Object, // 메타정보에서 변환된 그리드 구성 정보\n formConfigSet: Array, // 메타정보에서 변환된 폼 구성 정보\n useButtonExport: Boolean, // 내보내기 버튼 사용 여부\n useButtonImport: Boolean, // 가져오기 버튼 사용 여부\n useButtonAdd: Boolean, // 추가 버튼 사용 여부\n gridMobileMode: String, // 모바일 기기에서 그리드 뷰\n gridDeskMode: String, // 데스크탑에서 그리드 뷰\n gridViewOptions: Array, // 그리드 뷰 옵션\n gridMode: String, // 현재 그리드 뷰 모드\n infinityPage: true, // 페이지 사용시 false\n\n route_name: String, // Element 로드시 화면을 그릴 메뉴 정보,\n parent_id: String, // 상세 폼 뷰 상위 데이터 ID\n\n /* 속성 ? */\n is_detail: {\n // 페이지 컴포넌트 여부\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n },\n\n is_popup: {\n // 팝업 여부\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n },\n\n is_activity: {\n // 작업 결재 관련 화면에서 호출 여부\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n },\n\n is_readonly: {\n // 수정 불가 페이지\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n }\n }\n }\n\n /**\n * @description 메뉴 메타 정보를 조회한 후 파싱...\n ********************************************\n * @param {HTMLElement} pageView\n * @returns {Object} 메뉴 메타 정보\n */\n static async getMenuMeta(pageView) {\n // 1. 라우팅 추출 및 메뉴 메타 정보 조회\n let currentRouting = pageView.isPage ? UiUtil.currentRouting() : pageView.route_name\n pageView.currentRouting = currentRouting\n let menuMetaData = await MetaUiUtil.findMenuMetaByRouting(pageView, currentRouting)\n\n // 2. Activity 여부에 따라 버튼 / 검색 삭제\n if (pageView.is_activity === true) {\n menuMetaData.grid.option.grid_refresh_when_page_activated = false\n menuMetaData.grid.option.use_row_checker = false\n menuMetaData.grid.option.pages = 'unlimited'\n menuMetaData.grid.use_filter_form = false\n menuMetaData.grid.button = []\n menuMetaData.button = menuMetaData.button.filter(x => x.name == 'add')\n }\n\n // 3. 화면이 읽기 전용인 경우 그리드 Configuration 처리\n if (pageView.is_readonly === true) {\n menuMetaData.grid_column.forEach(x => {\n x.editable = false\n })\n menuMetaData.button = menuMetaData.button.filter(x => x.name != 'add')\n }\n\n // 4. 필터 폼 사용 여부 강제 설정\n if (pageView.use_filter_form === false) {\n menuMetaData.grid.use_filter_form = false\n }\n\n // 5. 필드 변경 이벤트 처리자 설정\n menuMetaData.grid_column\n .filter(x => x.change_event_handler)\n .forEach(x => {\n if (!pageView.fieldChangeHandlers) pageView.fieldChangeHandlers = {}\n pageView.fieldChangeHandlers[x.name] = x.change_event_handler\n })\n\n // 6. 그리드 타입 통합 처리 : object, resource-object -> meta-object-selector, resource-code-selector -> meta-code-selector\n menuMetaData.grid_column.forEach(x => {\n if (['resource-object', 'object'].includes(x.type)) {\n x.type = 'meta-object-selector'\n } else if (['resource-code-selector'].includes(x.type)) {\n x.type = 'meta-code-selector'\n }\n })\n\n // 7. 검색 필드의 검색 Operator가 in인 경우 디폴트 값을 배열로 변경\n if (menuMetaData.search && menuMetaData.search.length > 0) {\n menuMetaData.search.forEach(c => {\n let value = c.value\n if (value && c.operator == 'in' && value.indexOf(',') > 0) {\n c.value = value.split(',')\n }\n })\n }\n\n // 8. 메뉴 메타 정보 리턴\n return menuMetaData\n }\n\n /**\n * @description 파라미터로 받은 pageLimits로 페이지네이션 페이지 수를 표시\n ***************************************************************\n * @param {Array} 페이지네이션 페이지 수 배열\n * @returns {Object} 페이지네이션 페이지 수\n */\n static getGristPaginationCustomConfig(...pageLimits) {\n return { pages: pageLimits }\n }\n\n /**\n * @description 그리스트 기본 gutter 설정 리턴\n ********************************************\n * @param {Boolean} useRowSelector 행 선택 기능 사용 여부\n * @param {Boolean} multiple 여러 행 선택 가능 여부\n * @returns {Object} 그리스트 기본 gutter 설정\n */\n static getGristGuttersConfig(useRowSelector, multiple) {\n let configList = [\n { type: 'gutter', gutterName: 'dirty' },\n { type: 'gutter', gutterName: 'sequence' }\n ]\n\n if (useRowSelector) {\n configList.push({ type: 'gutter', gutterName: 'row-selector', multiple: multiple })\n }\n\n return configList\n }\n\n /**\n * @description 그리스트 선택 모드 설정\n ***************************************\n * @returns {Object} 그리스트 선택 모드 설정\n */\n static getGristSelectableConfig(multiple) {\n return { selectable: { multiple: multiple } }\n }\n\n /**\n * @description 메뉴 메타 정보를 기반으로 그리드 설정 셋을 파싱하여 리턴\n ************************************************************\n * @param {Object} pageView 페이지\n * @returns {Object} 그리드 설정 셋\n */\n static async parseGridConfigSet(pageView) {\n // 0. GraphQL 예외 처리를 위한 오브젝트 초기 화\n if (!pageView.gqlInfo) pageView.gqlInfo = {}\n if (!pageView.gqlInfo.query) pageView.gqlInfo.query = {}\n if (!pageView.gqlInfo.query.after_set_fields) pageView.gqlInfo.query.after_set_fields = {}\n\n if (!pageView.gqlInfo.mutation) pageView.gqlInfo.mutation = {}\n if (!pageView.gqlInfo.mutation.multiple) pageView.gqlInfo.mutation.multiple = {}\n if (!pageView.gqlInfo.mutation.multiple.skip_fields) pageView.gqlInfo.mutation.multiple.skip_fields = []\n\n // 1. 그리드 옵션\n let gridOption = MetaUiUtil.getGridOptionSet(pageView)\n\n // 2. 그리드 리스트 설정\n let gridList = MetaUiUtil.getGridListSet(pageView)\n\n // 3. 그리드 row 설정\n let gridRow = MetaUiUtil.getGridRowSet(pageView)\n\n // 4. 그리드 버튼 설정\n let gridButton = MetaUiUtil.getGridButtonSet(pageView)\n\n // 5. 그리드 컬럼 설정\n let gridColumns = await MetaUiUtil.getGridColumnSet(pageView)\n\n // 6. 그리드 meta-object-selector 타입이면서 검색 조건에 해당하는 컬럼을 찾아 숨김 컬럼으로 등록\n gridColumns\n .filter(x => ['meta-object-selector'].includes(x.type))\n .forEach(col => {\n pageView.searchConfig\n .filter(x => x.name == col.name)\n .forEach(x => {\n const options = col.record.options\n // 6.1. 검색 필드 명 설정\n const filterName = options.referenceField ? options.referenceField : `${col.name}Id`\n\n // 6.2. 검색 필드 설정 찾기\n const filterIdx = pageView.searchConfig.findIndex(item => {\n return item.name == col.name\n })\n\n // 6.3. 검색 필드를 그리드 컬럼 리스트에 추가\n gridColumns.push({\n type: 'meta-object-selector',\n header: col.header,\n name: filterName,\n hidden: true,\n record: {\n editable: false,\n mandatory: false,\n options: options\n },\n unusable: true\n })\n\n // 6.4. 조회시 skip 필드 추가\n pageView.gqlInfo.query.after_set_fields[filterName] = 'x'\n\n // 6.5. 저장시 skip 필드 추가\n pageView.gqlInfo.mutation.multiple.skip_fields.push(filterName)\n\n // 6.6. 검색 설정 이름 변경\n pageView.searchConfig[filterIdx].name = filterName\n pageView.searchConfig[filterIdx].type = 'meta-object-selector'\n })\n })\n\n // 7. 누적 계산 설정 컬럼 추출\n let accumulatorCols = gridColumns.filter(col => (col.accumulator ? true : false))\n if (accumulatorCols && accumulatorCols.length > 0) {\n gridRow.accumulator = true\n }\n\n // 8. default 그리드 gutter\n let gutterConfigs = MetaUiUtil.getGristGuttersConfig(gridOption.use_row_checker, gridRow.selectable.multiple)\n\n // 9. 필터 폼에 검색 조건 필드 정의\n if (pageView.useFilterForm == true) {\n gridColumns = MetaUiUtil.setGridColumnSearchOption(pageView, gridColumns)\n }\n\n // 10. 그리드 강조 설정\n if (pageView.gridEmphasized) {\n // 10.1. 그리드 row\n if (pageView.gridEmphasized && pageView.gridEmphasized.row && pageView.gridEmphasized.row.length > 0) {\n gridRow.classifier = function (recordData, rowIdx) {\n let settings = pageView.gridEmphasized.row\n\n for (let idx = 0; idx < settings.length; idx++) {\n const logic = settings[idx].logic\n const c = new Compartment({ record: recordData, rowIdx })\n const evalFunc = c.evaluate(`(record, rowIdx) => {\n ${logic}\n }`)\n if (evalFunc(recordData, rowIdx)) {\n return {\n emphasized: [settings[idx].backgroundColor, settings[idx].fontColor]\n }\n }\n }\n }\n }\n\n // 10.2. 그리드 column\n if (pageView.gridEmphasized && pageView.gridEmphasized.column) {\n let columSetting = pageView.gridEmphasized.column\n\n Object.keys(columSetting).forEach(key => {\n let settings = columSetting[key]\n let colIdx = gridColumns.findIndex(x => x.name == key)\n if (!gridColumns[colIdx].record) gridColumns[colIdx].record = {}\n\n gridColumns[colIdx].record.classifier = function (recordData, rowIdx) {\n for (let idx = 0; idx < settings.length; idx++) {\n const logic = settings[idx].logic\n const c = new Compartment({ record: recordData, rowIdx })\n const evalFunc = c.evaluate(`(record, rowIdx) => {\n ${logic}\n }`)\n if (evalFunc(recordData, rowIdx)) {\n return {\n emphasized: [settings[idx].backgroundColor, settings[idx].fontColor]\n }\n }\n }\n }\n })\n }\n }\n\n // 11. 그리드 최종 Configuration\n return {\n list: gridList,\n pagination: gridOption.pages,\n sorters: gridOption.sorters,\n rows: gridRow,\n columns: [...gutterConfigs, ...gridButton, ...gridColumns]\n }\n }\n\n /**\n * @description 메뉴 메타 정보를 기반으로 폼 설정 셋을 파싱하여 리턴\n ********************************************************\n * @param {Object} pageView 페이지\n * @returns {Object} 폼 설정 셋\n */\n static async parseFormConfigSet(pageView) {\n let formColumnConfig = pageView.formColumnConfig\n let columns = []\n let defaultValueGenerators = Object.keys(getValueGenerators())\n\n for (let idx = 0; idx < formColumnConfig.length; idx++) {\n let {\n type = 'string',\n name = undefined,\n header = undefined,\n hidden = false,\n editable = true,\n mandatory = false,\n align = 'left',\n select_opt = undefined,\n object_opt = undefined,\n default_value = undefined\n } = formColumnConfig[idx]\n\n // 컬럼 config 으로 변경 및 문자열 처리\n let column = {\n type: type,\n name: name,\n header_txt: ValueUtil.isEmpty(header) ? TermsUtil.tLabel(name) : TermsUtil.tLabel(header),\n header: {\n renderer: function (column) {\n return column.header_txt\n }\n },\n hidden: hidden,\n record: {\n editable: editable,\n mandatory: mandatory,\n align: align,\n classifier: function () {},\n renderer: getRenderer(type)\n }\n }\n\n if (editable) {\n column.record.editor = getEditor(type)\n }\n\n if (default_value) {\n let defaultSet = default_value.split(',')\n let defaultName = defaultSet[0]\n\n if (defaultValueGenerators.includes(defaultName)) {\n column.record.defaultValue =\n defaultSet.length == 1 ? { name: defaultName } : { name: defaultName, params: { calc: defaultSet[1] } }\n } else {\n column.record.defaultValue = type === 'number' ? Number(default_value) : default_value\n }\n }\n\n if (type == 'boolean-all') {\n column.type = 'boolean'\n }\n\n // meta- 로 시작 되는 타입은 공통으로 메뉴를 조회 template 을 가져간다.\n if (type.startsWith('meta-') && object_opt && object_opt.menu) {\n object_opt = await MetaUiUtil.getGristMetaObjectOptions(type, object_opt)\n }\n\n // select-option\n if (type === 'select' && ValueUtil.isNotEmpty(select_opt)) {\n if (Array.isArray(select_opt)) {\n column.record.options = select_opt\n } else {\n if (select_opt.type === 'code') {\n // 공통 코드\n column.record.options = await ServiceUtil.getCodeSelectorData(\n select_opt.values ? select_opt.values : select_opt.name\n )\n } else if (select_opt.type === 'scenario') {\n // 시나리오\n column.record.options = await ServiceUtil.getCodeByScenario(select_opt.name, select_opt.args)\n } else if (select_opt.type === 'entity') {\n // 엔티티\n column.record.options = await ServiceUtil.getCodeByEntity(select_opt.args)\n }\n }\n }\n\n if (type === 'meta-object-selector' && ValueUtil.isNotEmpty(object_opt)) {\n column.record.options = { ...object_opt }\n } else if (type === 'meta-code-selector' && ValueUtil.isNotEmpty(object_opt)) {\n if (object_opt.dispField) {\n object_opt.codes = await ServiceUtil.getCodeByEntity(object_opt)\n }\n column.record.options = { ...object_opt }\n }\n columns.push(column)\n }\n\n return columns\n }\n\n /**\n * @description 메타 설정에서 그리드 옵션을 추출\n *****************************************\n * @param {Object} pageView\n * @returns {Object}\n */\n static getGridOptionSet(pageView) {\n let gridConfig = pageView.gridConfig\n pageView.useFilterForm = gridConfig && gridConfig.use_filter_form != undefined ? gridConfig.use_filter_form : true\n\n let {\n mobile_mode = 'LIST',\n desk_mode = 'GRID',\n view_mode = [],\n use_row_checker = true,\n sorters = [],\n pages = [50, 100, 500, 1000]\n } = ValueUtil.isEmpty(gridConfig.option) ? {} : gridConfig.option\n\n // 페이지 설정 변환\n if (pages === 'unlimited' || pages === '-1') {\n pageView.infinityPage = true\n pages = { infinite: true }\n } else {\n pageView.infinityPage = false\n pages.sort(function (a, b) {\n return a - b\n })\n pages = { pages: pages }\n }\n\n // 모바일 데스크 뷰 모드\n if (ValueUtil.isNotEmpty(view_mode)) {\n if (view_mode.length == 1) {\n desk_mode = view_mode[0]\n mobile_mode = view_mode[0]\n } else if (view_mode.length >= 2) {\n if (!view_mode.includes(mobile_mode)) {\n mobile_mode = view_mode[1]\n }\n\n if (!view_mode.includes(desk_mode)) {\n desk_mode = view_mode[0]\n }\n }\n }\n\n pageView.gridMobileMode = mobile_mode\n pageView.gridDeskMode = desk_mode\n pageView.gridViewOptions = view_mode\n pageView.gridMode = UiUtil.isMobileEnv() ? pageView.gridMobileMode : pageView.gridDeskMode\n\n return {\n use_row_checker: use_row_checker,\n sorters: sorters,\n pages: pages\n }\n }\n\n /**\n * @description 메타 설정에서 그리드 리스트 설정을 추출\n ***********************************************\n * @param {Object} pageView\n * @returns {Object}\n */\n static getGridListSet(pageView) {\n let gridList = {\n fields: [ValueUtil.getParams(pageView.menuInfo, 'name'), ValueUtil.getParams(pageView.menuInfo, 'desc')]\n }\n\n // 기본 리스트 설정과 메타에서 가져온 설정 merge\n if (pageView.gridConfig.list) {\n Object.assign(gridList, pageView.gridConfig.list)\n }\n\n return gridList\n }\n\n /**\n * @description 메타 설정에서 그리드 Row 옵션을 추출\n *********************************************\n * @param {Object} pageView\n * @returns {Object}\n */\n static getGridRowSet(pageView) {\n // 기본 옵션, 메타와 상관없이 그리드 로우 멀티 셀렉트는 false, click 이벤트는 없다.\n let { multiple_select = false, click = undefined } = ValueUtil.isEmpty(pageView.gridConfig.row)\n ? {}\n : pageView.gridConfig.row\n\n let retObject = {\n selectable: { multiple: multiple_select },\n appendable: pageView.useButtonAdd\n }\n\n if (ValueUtil.isNotEmpty(click)) {\n retObject.handlers = { click: click }\n }\n\n return retObject\n }\n\n /**\n * @description 메타 설정에서 그리드 버튼 옵션을 추출\n *********************************************\n * @param {Object} pageView\n * @returns {Array}\n */\n static getGridButtonSet(pageView) {\n let gridButtons = pageView.gridConfig.button\n return ValueUtil.isEmpty(gridButtons)\n ? []\n : // 그리드 버튼 정보로 버튼 설정 정보를 구성하여 리턴\n gridButtons.map(btn => {\n // 기본 그리드 버튼\n let button = { type: 'gutter', gutterName: 'button' }\n\n // 레코드 특정 필드 값 조건에 따라서 아이콘을 변경 ...\n if (ValueUtil.isNotEmpty(btn.icon)) {\n // 아이콘이 Array 타입\n if (Array.isArray(btn.icon)) {\n // 지정 된 조건에 따라 아이콘을 바꾼다.\n button.icon = record => {\n if (ValueUtil.isNotEmpty(record)) {\n // 지정된 조건 Loop\n for (let i = 0; i < btn.icon.length; i++) {\n let logic = btn.icon[i]\n let useIcon = ValueUtil.compareObjectValues(\n logic,\n record,\n Object.keys(logic).filter(key => key != 'icon')\n )\n if (useIcon === true) {\n return logic.icon\n }\n }\n }\n }\n } else {\n button.icon = btn.icon\n }\n }\n\n // 이름이 지정되어 있으면 변환\n if (ValueUtil.isNotEmpty(btn.name)) {\n button.name = btn.name\n }\n // Tooltip\n if (ValueUtil.isNotEmpty(btn.label)) {\n button.title = TermsUtil.tButton(btn.label)\n }\n\n // 버튼 유형이 기본이면 ( 그리스트 기본 제공 기능 및 추가 기능 )\n if (btn.type === 'basic') {\n let logicTxt = ValueUtil.getParams(btn, 'logic')\n\n if (['history_copy', 'history_json'].includes(logicTxt)) {\n button.handlers = {\n click: (_columns, _data, _column, record, _rowIdx) => {\n if (record.id) {\n let action = {\n title: 'data_history_list',\n type: 'popup',\n tagname: logicTxt == 'history_copy' ? 'history-copy-list-popup' : 'history-json-list-popup',\n location:\n logicTxt == 'history_copy'\n ? 'pages/hgistory/history-copy-list-popup.js'\n : 'pages/hgistory/history-json-list-popup.js',\n menu: pageView.currentRouting,\n size: 'large',\n popup_field: 'open_param',\n parent_field: 'id'\n }\n\n let params = {\n ...record,\n gqlFunc: ValueUtil.getParams(pageView.gqlInfo, 'query', 'find_one_func'),\n gristConfig: JSON.parse(JSON.stringify(pageView.grist.config))\n }\n\n MetaUiUtil.gristButtonHandler(pageView, { logic: action }, params)\n }\n }\n }\n } else {\n button.handlers = { click: logicTxt }\n }\n\n // 버튼 유형이 커스텀이면 ...\n } else {\n button.handlers = {\n click: (_columns, _data, _column, record, _rowIdx) => {\n if (record.id) {\n MetaUiUtil.gristButtonHandler(pageView, btn, record)\n }\n }\n }\n }\n\n return button\n })\n }\n\n /**\n * @description 메타 데이터에서 그리드 렌더링 config 을 생성\n ***************************************************\n * @param {Object} pageView 페이지\n * @returns {Array} 그리드 컬럼 설정 리스트\n */\n static async getGridColumnSet(pageView) {\n let gridColumnConfig = pageView.gridColumnConfig\n\n // 메타에 그리드 컬럼 정보가 없으면\n if (ValueUtil.isEmpty(gridColumnConfig)) {\n return []\n }\n\n // CARD, LIST인 경우 컬럼 정보를 표시하기 위한 컬럼들 추출\n let mobileDisplayColumns =\n UiUtil.isMobileEnv() && pageView.etcConfig && pageView.etcConfig.mobile_display_columns\n ? pageView.etcConfig.mobile_display_columns.split(',')\n : []\n\n let defaultValueGenerators = Object.keys(getValueGenerators())\n let columns = []\n for (let idx = 0; idx < gridColumnConfig.length; idx++) {\n let {\n type = 'string',\n name = undefined,\n header = undefined,\n hidden = false,\n editable = true,\n mandatory = false,\n sortable = false,\n align = 'left',\n width = 0,\n exportable = false,\n select_opt = undefined,\n object_opt = undefined,\n format = undefined,\n default_value = undefined,\n accumulator = undefined,\n fixed = false\n } = gridColumnConfig[idx]\n\n // 컬럼 config 으로 변경 및 문자열 처리\n let column = {\n type: type,\n name: name,\n header: ValueUtil.isEmpty(header) ? '' : TermsUtil.tLabel(header),\n hidden: hidden,\n sortable: sortable,\n width: width,\n fixed: fixed,\n record: { editable: editable, mandatory: mandatory, align: align, format: format }\n }\n\n // accumulator 설정이 있고 type이 number이면 accumulator 설정 추가\n if (type.indexOf('number') >= 0 && accumulator) {\n column.accumulator = accumulator\n }\n\n if (default_value) {\n let defaultSet = default_value.split(',')\n let defaultName = defaultSet[0]\n\n if (defaultValueGenerators.includes(defaultName)) {\n column.record.defaultValue =\n defaultSet.length == 1 ? { name: defaultName } : { name: defaultName, params: { calc: defaultSet[1] } }\n } else {\n column.record.defaultValue = type === 'number' ? Number(default_value) : default_value\n }\n }\n\n if (type == 'boolean-all') {\n column.type = 'boolean'\n let colHeaderTxt = column.header\n column.header = {\n renderer: function (col) {\n return html`\n <span>${colHeaderTxt}\n <input type='checkbox'\n @change=${e => {\n e.stopPropagation()\n\n let targetElement = e.target\n let selected = targetElement.checked\n let grist = pageView.grist\n\n if (grist._data && grist._data.records) {\n let records = grist._data.records\n for (let idx = 0; idx < records.length; idx++) {\n targetElement.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: records[idx][col.name],\n after: selected,\n record: records[idx],\n column: col,\n row: idx\n }\n })\n )\n }\n }\n }}\n ></input>\n </span>\n `\n }\n }\n }\n\n // meta- 로 시작 되는 타입은 공통으로 메뉴를 조회 template 을 가져간다.\n if (type.startsWith('meta-') && object_opt && object_opt.menu) {\n object_opt = await MetaUiUtil.getGristMetaObjectOptions(type, object_opt)\n }\n\n // select-option\n if (type === 'select' && ValueUtil.isNotEmpty(select_opt)) {\n if (Array.isArray(select_opt)) {\n column.record.options = select_opt\n } else {\n // 공통 코드\n if (select_opt.type === 'code') {\n column.record.options = await ServiceUtil.getCodeSelectorData(\n select_opt.values ? select_opt.values : select_opt.name\n )\n // 시나리오\n } else if (select_opt.type === 'scenario') {\n column.record.options = await ServiceUtil.getCodeByScenario(select_opt.name, select_opt.args)\n // 엔티티\n } else if (select_opt.type === 'entity') {\n column.record.options = await ServiceUtil.getCodeByEntity(select_opt.args)\n }\n }\n }\n\n // object-option\n if (type === 'meta-object-selector' && ValueUtil.isNotEmpty(object_opt)) {\n column.record.options = { ...object_opt }\n } else if (type === 'meta-code-selector' && ValueUtil.isNotEmpty(object_opt)) {\n if (object_opt.dispField) {\n object_opt.codes = await ServiceUtil.getCodeByEntity(object_opt)\n }\n column.record.options = { ...object_opt }\n }\n\n // attributes (확장 속성)\n if (type === 'attributes' && format) {\n column.record.options = await ServiceUtil.getAttributeSetOptionFor(format)\n }\n\n // mask\n if (type == 'mask') {\n column.record.renderer = (value, column, record, rowIndex, field) => {\n let maskVal = ''\n if (value) {\n let valCount = value.length\n for (let i = 1; i <= valCount; i++) {\n maskVal += '*'\n }\n } else {\n maskVal = '********'\n }\n return maskVal\n }\n }\n\n // LIST, CARD 에서 컬럼 정보 표시\n if (mobileDisplayColumns.includes(name)) {\n column.record.renderer = (value, column, record, rowIndex, field) => {\n return TermsUtil.tLabel(header) + ': ' + value\n }\n }\n\n // 내보내기 버튼 사용, 컬럼 내보내기 옵션\n if (pageView.useButtonExport === true && exportable === true) {\n column.imex = { header: column.header, key: column.name, width: column.width / 6, type: column.type }\n }\n\n columns.push(column)\n }\n\n if (this.is_activity !== true) {\n return columns\n }\n\n return columns\n }\n\n /**\n * @description meta-object, meta-code에 대한 설정을 가져온다. (menu or 설정)\n ***********************************************************************\n * @param {String} type 컬럼 타입\n * @param {Object} options 컬럼 오브젝트 설정\n * @returns {Object} 메타 변경 결과\n */\n static async getGristMetaObjectOptions(type, options) {\n let data = await MetaUiUtil.getMenuMetaData(options.menu)\n\n if (data && data.records && data.records.length > 0 && data.records[0].template) {\n let menu = data.records[0]\n let menu_template = JSON.parse(MetaCrypto.dec(menu.template))\n\n if (!options.queryName) {\n options.queryName = menu_template.gql.query.list_func\n }\n\n if (!options.select) {\n options.select = menu_template.grid_column\n }\n\n if (!options.filterFields || options.filterFields.length == 0) {\n options.filterFields = menu_template.search\n }\n\n if (!options.selectorName) {\n options.selectorName = menu_template.menu.title\n }\n\n if (!options.filters) {\n options.filters = menu_template.gql.query.filters || []\n }\n\n if (type.includes('-object-')) {\n if (!options.nameField) {\n options.nameField = menu_template.menu.name || 'name'\n }\n } else if (type.includes('-code-')) {\n if (!options.codeField) {\n options.codeField = menu_template.menu.name || 'code'\n }\n\n if (!options.dispField) {\n options.dispField = menu_template.menu.desc || undefined\n }\n }\n }\n\n return options\n }\n\n /**\n * @description 필터 폼에 검색 조건 필드 정의\n *****************************************\n * @param {HTMLElement} pageView 페이지\n * @param {Array} gridColumns 그리드 컬럼 설정\n * @returns\n */\n static setGridColumnSearchOption(pageView, gridColumns) {\n let searchConfig = pageView.searchConfig\n\n if (searchConfig) {\n searchConfig.forEach(config => {\n if (typeof config === 'string') {\n gridColumns\n .filter(col => col.name == config)\n .forEach(col => {\n col.filter = 'search'\n })\n } else if (typeof config === 'object') {\n gridColumns\n .filter(col => col.name == config.name)\n .forEach(col => {\n col.filter = config\n col.filter.type = col.type === 'datetime' && config.operator == 'eq' ? 'datetime-local' : col.type\n let defValue = col.filter.value\n let dateKeywords = ['today', 'year', 'month', 'date', 'hour', 'min', 'sec']\n\n if (\n defValue &&\n typeof defValue == 'string' &&\n dateKeywords.filter(x => defValue.startsWith(x)).length > 0\n ) {\n let defRes = []\n let dateFormat = { date: 'YYYY-MM-DD', datetime: 'YYYY-MM-DD HH:mm:ss' }\n let durationType = {\n today: 'day',\n year: 'year',\n month: 'month',\n date: 'day',\n hour: 'hour',\n min: 'minute',\n sec: 'second'\n }\n let defDates = defValue.split(',')\n\n defDates.forEach(x => {\n const todayMoment = moment()\n\n if (dateKeywords.includes(x)) {\n defRes.push(todayMoment.startOf(durationType[x]).format(dateFormat[col.type]))\n } else if (x.includes('-')) {\n let wordSplits = x.split('-')\n let key = wordSplits[0]\n let value = wordSplits[1]\n defRes.push(\n todayMoment\n .subtract(value, durationType[key])\n .startOf(durationType[key])\n .format(dateFormat[col.type])\n )\n } else if (x.includes('+')) {\n let wordSplits = x.split('+')\n let key = wordSplits[0]\n let value = wordSplits[1]\n defRes.push(\n todayMoment.add(value, durationType[key]).startOf(durationType[key]).format(dateFormat[col.type])\n )\n }\n })\n\n if (defRes.length > 0) col.filter.value = defRes.length == 1 ? defRes[0] : defRes\n }\n })\n }\n })\n }\n\n return gridColumns\n }\n\n /**\n * @description 컨텍스트 오브젝트 리턴\n **********************************\n * @param {Object} pageView\n * @returns {Object} 컨텍스트 오브젝트\n */\n static getContextObject(pageView) {\n let ctx =\n pageView && pageView.menuInfo\n ? {\n title: TermsUtil.tTitle(pageView.menuInfo.title),\n help: pageView.menuInfo.help || '',\n actions: [...MetaUiUtil.getContextButtons(pageView)]\n }\n : {}\n\n // export 버튼\n if (pageView.useButtonExport) {\n ctx.exportable = {\n name: ctx.title,\n data: pageView.export.bind(pageView)\n }\n }\n\n // import 버튼\n if (pageView.useButtonImport) {\n ctx.importable = {\n handler: pageView.import.bind(pageView)\n }\n }\n\n // Context\n return ctx\n }\n\n /**\n * @description 메뉴 컨텍스트에서 사용할 버튼 정보 추출\n **********************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {Array} 버튼 엘리먼트 리스트\n */\n static getContextButtons(pageView) {\n let buttonConfig = pageView.buttonConfig\n return ValueUtil.isEmpty(buttonConfig)\n ? []\n : buttonConfig\n .filter(b => b.name != 'export' && b.name != 'import' && b.name != 'add')\n .map(btn => {\n let {\n name = undefined,\n label = undefined,\n style = undefined,\n type = 'basic',\n action = undefined,\n logic = undefined\n } = btn\n\n if (ValueUtil.isEmpty(name)) {\n return { title: '-1' }\n }\n\n if (ValueUtil.isEmpty(label)) label = name\n if (ValueUtil.isEmpty(style)) style = name\n if (ValueUtil.isEmpty(action)) action = name\n\n let btnStylecss = ValueUtil.isNotEmpty(style)\n ? CommonButtonStyles[style] || {\n icon: style,\n emphasis: {\n raised: true,\n outlined: false,\n dense: false,\n danger: false\n }\n }\n : {}\n\n return {\n title: TermsUtil.tButton(label),\n action: MetaUiUtil.getButtonActionHandler(pageView, type, action, logic),\n ...btnStylecss\n }\n })\n .filter(btn => btn.title != '-1')\n }\n\n /**\n * @description element로 로드시 버튼 element를 container에 직접 추가\n ****************************************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {Array} 버튼 엘리먼트 리스트\n */\n static getContainerButtons(pageView) {\n let buttonConfig = pageView && pageView.buttonConfig ? pageView.buttonConfig : null\n return !buttonConfig\n ? []\n : buttonConfig\n .filter(b => b.name != 'add')\n .map(b => {\n let {\n name = undefined,\n label = undefined,\n style = undefined,\n type = 'basic',\n action = undefined,\n logic = undefined\n } = b\n\n if (ValueUtil.isEmpty(label)) label = name\n if (ValueUtil.isEmpty(style)) style = name\n if (ValueUtil.isEmpty(action)) action = name\n\n let btn = MetaUiUtil.createButtonElement(TermsUtil.tButton(label), style)\n btn.onclick = MetaUiUtil.getButtonActionHandler(pageView, type, action, logic)\n return btn\n })\n }\n\n /**\n * @description 버튼 엘리먼트를 생성\n ********************************\n * @param {String} buttonName\n * @param {String} style\n * @returns {HTMLElement} 버튼 엘리먼트\n */\n static createButtonElement(buttonName, style) {\n let btnStyle = CommonButtonStyles[style] || {\n icon: style,\n emphasis: {\n raised: true,\n outlined: false,\n dense: false,\n danger: false\n }\n }\n\n const { raised, outlined, dense, danger, icon } = btnStyle.emphasis\n\n const template = html`\n <button ?dense=${dense} ?raised=${raised} ?outlined=${outlined} ?danger=${danger}>\n <md-icon>${icon || 'done'}</md-icon>\n ${buttonName}\n </button>\n `\n\n const container = document.createElement('div')\n render(template, container)\n\n const element = container.firstElementChild\n return container.removeChild(element)\n }\n\n /**\n * @description 버튼과 연결할 핸들러를 리턴\n *************************************\n * @param {Object} pageView 화면\n * @param {String} type 버튼 유형 (기본, 커스텀, 그리드 버튼)\n * @param {String} action 버튼 명\n * @param {Object} logic 버튼 로직 (String || JSON)\n * @returns {Function} 버튼 클릭시 실행될 액션 핸들러\n */\n static getButtonActionHandler(pageView, type, action, logic) {\n if (type == 'basic') {\n if (pageView[action]) {\n return pageView[action].bind(pageView)\n }\n } else if (type == 'custom') {\n return () => MetaUiUtil.customButtonHandler(pageView, action, logic)\n }\n\n // 버튼과 연결된 함수가 없습니다.\n return () => {\n UiUtil.showAlertPopup('title.warning', 'text.button_bind_func_is_not_exist', 'info', 'confirm')\n }\n }\n\n /**\n * @description 그리스트 버튼 (그리드에 추가된 버튼)에 대한 커스텀 액션 분기\n ***************************************************************\n * @param {Object} pageView\n * @param {Object} actionInfo\n * @param {Object} record\n */\n static async gristButtonHandler(pageView, actionInfo, record) {\n let action = ValueUtil.getParams(actionInfo, 'logic')\n let buttonName = ValueUtil.getParams(actionInfo, 'name')\n let eventType = ValueUtil.getParams(action, 'type')\n\n // 폼 팝업\n if (eventType === 'form') {\n // 상세 폼 뷰는 기본 정의된 로직으로 셋팅\n action.tagname = 'meta-form-element'\n action.location = 'pages/meta-form-element.js'\n action.parent_field = 'id'\n await MetaUiUtil.commonButtonOpenPopup(pageView, action, record)\n\n // 다른 객체로 파라미터 전달\n } else if (eventType === 'pass_param') {\n MetaUiUtil.gristButtonPassParam(pageView, action, record)\n\n // 페이지 이동\n } else if (eventType === 'page') {\n let passParams = action.param_field ? {} : record\n\n if (action.param_field) {\n Object.keys(record)\n .filter(x => Object.keys(action.param_field).includes(x))\n .map(x => {\n if (Object.keys(action.param_field).includes(x)) {\n let data = record[x]\n passParams[action.param_field[x]] =\n Array.isArray(data) === false && typeof data === 'object' && data.id ? { id: data.id } : data\n }\n })\n }\n\n UiUtil.pageNavigate(action.url, [passParams])\n\n // 팝업 실행\n } else if (eventType === 'popup') {\n await MetaUiUtil.commonButtonOpenPopup(pageView, action, record)\n\n // 서비스 호출\n } else if (eventType === 'graphql') {\n await MetaUiUtil.commonButtonCallService(pageView, action, record, record)\n\n // 시나리오 호출\n } else if (eventType === 'scenario') {\n await MetaUiUtil.commonButtonCallScenario(pageView, buttonName, action, record)\n\n // 설정된 조건에 따라 커스텀 로직 처리\n } else if (eventType === 'value_reference') {\n await MetaUiUtil.gristButtonValueReference(pageView, action, record)\n\n // 첨부파일 다운로드 처리\n } else if (eventType === 'download') {\n MetaUiUtil.downloadFile(action, record)\n }\n }\n\n /**\n * @description 폼 화면에서의 커스텀 버튼에 대한 액션\n *********************************************\n * @param {Object} pageView\n * @param {String} buttonName\n * @param {Object} logic\n */\n static async formScreenCustomButtonHandler(pageView, buttonName, logic) {\n if (ValueUtil.isEmpty(logic)) return\n\n // TODO 현재 폼 엘리먼트에 검색 폼 기능이 없으므로 추후 추가 필요 && gristButtonHandler 함수와 거의 동일하게 로직이 처리되어야 하는데 로직이 약간 다름...\n let formData = pageView.currentData\n let eventType = ValueUtil.getParams(logic, 'type')\n let paramInfo = ValueUtil.getParams(logic, 'param')\n let params = { form: paramInfo && paramInfo.includes('form_changed') ? pageView.patchData() : formData }\n\n /**\n * data 정보가 있는 경우 폼 데이터로 부터 아래 구조대로 변형 처리\n * data: {\n * \"id\": \"$id\",\n * \"name\": \"$name\",\n * \"description\": \"$description\",\n * \"activeFlag\": true,\n * \"cuFlag\": \"M\"\n * }\n */\n let dataSchema = ValueUtil.getParams(logic, 'data')\n // data schema (데이터 형태) 추출\n if (ValueUtil.isNotEmpty(dataSchema)) {\n params.form = ValueUtil.replaceVariableObject(dataSchema, formData)\n }\n\n // 페이지 이동\n if (eventType === 'page') {\n UiUtil.pageNavigate(logic.url, [params.form])\n\n // 팝업 오픈\n } else if (eventType === 'popup') {\n await MetaUiUtil.commonButtonOpenPopup(pageView, logic, params)\n\n // 서비스 호출\n } else if (eventType === 'graphql') {\n await MetaUiUtil.commonButtonCallService(pageView, logic, params.filter, params.form)\n\n // 시나리오 호출\n } else if (eventType === 'scenario') {\n await MetaUiUtil.commonButtonCallScenario(pageView, buttonName, logic, params)\n }\n }\n\n /**\n * @description 그리드 화면에서의 커스텀 버튼에 대한 액션\n ************************************************\n * @param {Object} pageView 화면\n * @param {String} buttonName 버튼 명\n * @param {Object} logic 버튼 커스텀 로직 JSON\n */\n static async gristScreenCustomButtonHandler(pageView, buttonName, logic) {\n if (ValueUtil.isEmpty(logic)) return\n\n let grist = pageView.grist\n let filterForm = pageView.filterForm\n\n let eventType = ValueUtil.getParams(logic, 'type')\n let paramInfo = ValueUtil.getParams(logic, 'param')\n let includeGristParams = paramInfo.filter(p => p.startsWith('grist'))\n\n // 오류 메시지 처리\n if (ValueUtil.isNotEmpty(includeGristParams)) {\n // 그리스트 존재 여부\n if (!grist) {\n // 그리드가 없습니다.\n UiUtil.showAlertPopup('title.info', 'text.grid_is_not_exist', 'info', 'confirm')\n return\n }\n\n // 그리스트 데이터 존재 여부 (편집중 데이터도 체크)\n if ((grist?.data?.records || []).length == 0 && (grist?.dirtyData?.records || []).length == 0) {\n // 비어있는 그리드 입니다.\n UiUtil.showAlertPopup('title.info', 'text.grid_data_is_empty', 'info', 'confirm')\n return\n }\n\n if (paramInfo.includes('grist_one') || paramInfo.includes('grist_selected')) {\n // 선택된 행이 있는지 확인\n let selectedRows = grist.selected\n\n if (ValueUtil.isEmpty(selectedRows)) {\n // 선택된 항목이 없습니다.\n UiUtil.showAlertPopup('text.nothing_selected', 'text.there_is_no_selected_items', 'info', 'confirm')\n return\n }\n\n if (paramInfo.includes('grist_one')) {\n // 하나의 행만 선택 되었는지 확인\n if (selectedRows.length > 1) {\n // 하나의 항목만 선택해주세요.\n UiUtil.showAlertPopup('title.info', 'text.please_select_only_one', 'info', 'confirm')\n return\n }\n }\n }\n }\n\n let params = {}\n\n if (paramInfo.includes('filter')) {\n if (!filterForm) {\n // 서치폼이 없습니다.\n UiUtil.showAlertPopup('title.info', 'text.search_form_is_not_exist', 'info', 'confirm')\n return\n }\n\n let filterValues = filterForm ? await filterForm.getQueryFilters() : []\n params['filter'] = filterValues\n }\n\n if (paramInfo.includes('grist_all')) {\n params['grist'] = grist.data.records\n } else if (paramInfo.includes('grist_one')) {\n params['grist'] = grist.selected[0]\n } else if (paramInfo.includes('grist_selected')) {\n params['grist'] = grist.selected\n } else if (paramInfo.includes('grist_changed')) {\n let changedList = ServiceUtil.patchesForUpdateMultiple(grist)\n if (!changedList) {\n return\n }\n\n // 화면이 팝업 화면이라면 부모 ID를 레코드에 추가한다.\n let pId = pageView.parent_id ? pageView.parent_id : null\n let parentIdField = ValueUtil.getParams(logic, 'parent_field')\n\n changedList.forEach(item => {\n if (pId && parentIdField && !item[parentIdField]) {\n item[parentIdField] = pId\n }\n })\n\n params['grist'] = changedList\n }\n\n // 페이지 이동\n if (eventType === 'page') {\n let records = Array.isArray(params['grist']) ? params['grist'] : [params['grist']]\n let passParams = logic.param_field ? null : records\n\n if (logic.param_field) {\n passParams = records.map(record => {\n let recordParams = {}\n Object.keys(record)\n .filter(x => Object.keys(logic.param_field).includes(x))\n .map(x => {\n if (Object.keys(logic.param_field).includes(x)) {\n let data = record[x]\n recordParams[logic.param_field[x]] =\n Array.isArray(data) === false && typeof data === 'object' && data.id ? { id: data.id } : data\n }\n })\n return recordParams\n })\n }\n\n UiUtil.pageNavigate(logic.url, passParams)\n\n // 팝업 오픈\n } else if (eventType === 'popup') {\n let convParam = {\n ...(params['grist'] ? params['grist'] : {}),\n ...(params['filter'] ? params['filter'] : {})\n }\n await MetaUiUtil.commonButtonOpenPopup(pageView, logic, convParam)\n\n // 서비스 호출\n } else if (eventType === 'graphql') {\n let filterParam = params['filter'] ? params['filter'] : {}\n let dataParams = params['grist'] ? params['grist'] : filterParam\n await MetaUiUtil.commonButtonCallService(pageView, logic, filterParam, dataParams)\n\n // 시나리오 호출\n } else if (eventType === 'scenario') {\n await MetaUiUtil.commonButtonCallScenario(pageView, buttonName, logic, params)\n\n // 첨부파일 다운로드 처리\n } else if (eventType == 'download' && paramInfo.includes('grist_one')) {\n MetaUiUtil.downloadFile(logic, params['grist'])\n }\n }\n\n /**\n * @description 커스텀 버튼에 대한 액션 처리\n **************************************\n * @param {Object} pageView 화면\n * @param {String} buttonName 버튼 명\n * @param {Object} logic 커스텀 버튼 로직 JSON\n */\n static async customButtonHandler(pageView, buttonName, logic) {\n // 폼 화면의 버튼 핸들링인지 그리드 계열 화면의 버튼 핸들링 인지 구분\n if (pageView.localName.startsWith('meta-form')) {\n await MetaUiUtil.formScreenCustomButtonHandler(pageView, buttonName, logic)\n } else {\n await MetaUiUtil.gristScreenCustomButtonHandler(pageView, buttonName, logic)\n }\n }\n\n /**\n * @description 파라미터 전달 버튼 처리\n **********************************\n * @param {Object} pageView\n * @param {Object} action\n * @param {Object} record\n */\n static gristButtonPassParam(pageView, action, record) {\n // 파라미터 전달 정보\n let passInfoAll = action.pass_field\n let elementTagName = pageView.tagName.toLowerCase()\n let pageElement = pageView\n let passInfo =\n elementTagName.startsWith('meta-grist-tab-') || elementTagName.startsWith('meta-master-detail-')\n ? passInfoAll.detail\n ? { ...passInfoAll } // 그리스트 탭 페이지는 하단으로 보내는 이벤트만 허용\n : { detail: { ...passInfoAll } }\n : { ...passInfoAll } // tab+tab or tab+etc or main-tab\n\n Object.keys(passInfo).forEach(tab => {\n if (tab == 'master') {\n pageElement = pageView.rootElement.masterElement\n } else if (tab == 'detail') {\n pageElement = pageView.rootElement ? pageView.rootElement.detailElement : pageView.detailElement\n } else if (tab == 'self') {\n pageElement = pageView\n }\n\n if (pageElement) {\n if (pageElement.tagName.toLowerCase().startsWith('meta-tab-element')) {\n // Object Key로 Element 검색.\n Object.keys(passInfo[tab]).forEach(elementId => {\n let targetElement = pageElement.shadowRoot.querySelector(`#${elementId}`)\n // 상위 데이터 ID\n if (record.id) {\n targetElement.setParentId(record.id)\n }\n\n // 대상 엘리먼트에 매치할 필드 정보\n let matchInfo = passInfo[tab][elementId]\n\n // 필드 정보 Loop tField : target , sField : source\n Object.keys(matchInfo).forEach(tField => {\n let sField = matchInfo[tField]\n // param 값이 * 이면 record 전체\n let param = sField === '*' ? record : record[sField]\n // tElement.tField에 파라미터 set\n targetElement[tField] = param\n })\n })\n } else {\n let targetElement = pageElement\n // 상위 데이터 ID\n if (record.id) {\n targetElement.setParentId(record.id)\n }\n\n // 대상 엘리먼트에 매치할 필드 정보\n let matchInfo = passInfo[tab]\n\n // 필드 정보 Loop tField : target , sField : source\n Object.keys(matchInfo).forEach(tField => {\n let sField = matchInfo[tField]\n // param 값이 * 이면 record 전체\n let param = sField === '*' ? record : record[sField]\n // tElement.tField에 파라미터 set\n targetElement[tField] = param\n })\n }\n }\n })\n }\n\n /**\n * @description 팝업 오픈 버튼 처리\n ********************************\n * @param {Object} pageView\n * @param {Object} action\n * @param {Object} record\n */\n static async commonButtonOpenPopup(pageView, action, record) {\n // 타이틀 변환\n let title = TermsUtil.tTitle(action.title)\n\n // 타이틀 상세 필드 정의 확인\n if (ValueUtil.isNotEmpty(action.title_detail)) {\n title = `${title}(${ValueUtil.getParams(record, ...action.title_detail.split('.'))})`\n }\n\n // closeCallback\n let closeCallback =\n action.after && typeof action.after === 'string' && action.after === 'fetch' && pageView && pageView.fetch\n ? pageView.fetch.bind(pageView)\n : undefined\n\n // 팝업 오픈\n UiUtil.openDynamicPopup(title, action, record, closeCallback)\n }\n\n /**\n * @description 서비스 호출 버튼 처리\n *************************************\n * @param {Object} pageView 페이지 뷰\n * @param {Object} action 액션\n * @param {Object or Array} filterParam 필터 파라미터\n * @param {Object or Array} records 선택 레코드\n */\n static async commonButtonCallService(pageView, action, filterParam, records) {\n // Graphql 서비스 호출\n let response = await ServiceUtil.callService(pageView, action, filterParam, records)\n\n // 후 처리 액션 처리\n if (!response.errors && action.after && ValueUtil.isNotEmpty(action.after)) {\n let afterParams = null\n\n if (typeof action.after === 'object') {\n afterParams = Array.isArray(response) ? response : [response]\n }\n\n await MetaUiUtil.afterActionHandler(pageView, action, afterParams)\n }\n }\n\n /**\n * @description 시나리오 호출 버튼 처리\n ***********************************\n * @param {Object} pageView\n * @param {String} buttonName\n * @param {Object} action\n * @param {Object or Array} params\n */\n static async commonButtonCallScenario(pageView, buttonName, action, params) {\n // 시나리오 호출\n let response = await ServiceUtil.callScenario(buttonName, action.name, params)\n\n // 처리 중 에러가 발생했거나 시나리오 호출 후 처리가 없으면 return\n if (!response.errors && action.after && ValueUtil.isNotEmpty(action.after)) {\n let afterParams = null\n\n // after가 오브젝트이면 후 처리 로직\n if (typeof action.after === 'object') {\n let after = action.after\n afterParams = ValueUtil.getParams(response.data.runScenario.result, ...after.result_name.split('.'))\n\n if (Array.isArray(afterParams) == false) {\n afterParams = [afterParams]\n }\n }\n\n // 후 처리 처리\n await MetaUiUtil.afterActionHandler(pageView, action, afterParams)\n }\n }\n\n /**\n * @description 버튼 처리 후 처리\n *******************************\n * @param {Object} pageView\n * @param {Object} action\n * @param {Object or Array} afterParams\n */\n static async afterActionHandler(pageView, action, afterParams) {\n // after가 오브젝트이면 후 처리 로직\n if (typeof action.after === 'object') {\n let after = action.after\n\n // 상세 폼 뷰 팝업 실행\n if (after.type === 'form') {\n after.tagname = 'meta-form-element'\n after.location = 'pages/meta-form-element.js'\n after.parent_field = 'id'\n afterParams = afterParams[0]\n await MetaUiUtil.commonButtonOpenPopup(pageView, after, afterParams)\n\n // 페이지 이동 처리\n } else if (after.type === 'page') {\n let records = afterParams\n let passParams = after.param_field ? null : records\n\n if (after.param_field) {\n passParams = records.map(record => {\n let recordParams = {}\n Object.keys(record)\n .filter(x => Object.keys(after.param_field).includes(x))\n .map(x => {\n if (Object.keys(after.param_field).includes(x)) {\n let data = record[x]\n recordParams[after.param_field[x]] =\n Array.isArray(data) === false && typeof data === 'object' && data.id ? { id: data.id } : data\n }\n })\n return recordParams\n })\n }\n\n UiUtil.pageNavigate(after.url, passParams)\n\n // 다른 객체로 파라미터 전달\n } else if (after.type === 'pass_param') {\n afterParams = afterParams[0]\n MetaUiUtil.gristButtonPassParam(pageView, after, afterParams)\n\n // 팝업 오픈\n } else if (after.type === 'popup') {\n afterParams = afterParams[0]\n await MetaUiUtil.commonButtonOpenPopup(pageView, after, afterParams)\n\n // 설정된 조건에 따라 커스텀 로직 처리\n } else if (after.type === 'value_reference') {\n afterParams = afterParams[0]\n await MetaUiUtil.gristButtonValueReference(pageView, after, afterParams)\n }\n\n // after가 fetch이면 리프레쉬\n } else if (action.after === 'fetch') {\n pageView.fetch()\n\n // after가 close이면 팝업 닫기\n } else if (action.after == 'close') {\n UiUtil.closePopupBy(pageView)\n }\n }\n\n /**\n * @description UI에서 파일 다운로드 처리\n *************************************\n * @param {Object} config 설정\n * @param {Object} record 레코드\n */\n static downloadFile(config, record) {\n let attachmentRoot = config.attachment_root\n let attachColumn = config.attachment_column\n let downloadColumn = config.download_name_column ? config.download_name_column : null\n\n if (!attachColumn) {\n throw new Error('attachmentColumn 정보가 없습니다.')\n }\n\n let attachColumns = attachColumn.split('.')\n let fileData = record[attachColumns[0]]\n let fileName = attachColumns.length == 1 ? fileData : fileData[attachColumns[1]]\n let downloadName = downloadColumn ? record[downloadColumn] : fileName\n\n const link = document.createElement('a')\n link.setAttribute('href', `./${attachmentRoot}/${fileName}`)\n link.setAttribute('download', downloadName)\n document.body.appendChild(link)\n link.click()\n link.parentNode.removeChild(link)\n }\n\n /**\n * @description 설정된 조건과 record 의 값을 비교. 로직 처리\n ****************************************************\n * @param {Object} pageView\n * @param {Object} config\n * @param {Object} record\n */\n static async gristButtonValueReference(pageView, config, record) {\n // 지정된 조건 Loop\n for (let idx = 0; idx < config.relation.length; idx++) {\n let relation = config.relation[idx]\n let useRelation = ValueUtil.compareObjectValues(\n relation,\n record,\n Object.keys(relation).filter(key => key != 'logic')\n )\n if (useRelation === true) {\n // 조건 체크 후 버튼 핸들러 호출\n await MetaUiUtil.gristButtonHandler(pageView, relation, record)\n }\n }\n }\n\n /**\n * @description 그리스트 Hidden 컬럼 설정\n *************************************\n * @param {String} type\n * @param {String} name\n * @returns {Object} 그리스트 Hidden 컬럼 설정\n */\n static getGristHiddenColumnConfig(type, name) {\n return {\n type: type,\n name: name,\n sortable: false,\n hidden: true\n }\n }\n\n /**\n * @description 그리스트 기본 컬럼 설정\n ***********************************\n * @param {String} type\n * @param {String} name\n * @param {String} align\n * @param {Boolean} editable\n * @param {Boolean} sortable\n * @param {Number} width\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristColumnConfig(type, name, align, editable, sortable, width) {\n let dispName = TermsUtil.tLabel(name)\n return {\n type: type,\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: editable\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: type,\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 컬럼 설정\n *******************************\n * @param {String} type\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} editable\n * @param {Boolean} sortable\n * @param {Number} width\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristColumnConfig2(type, name, displayName, align, editable, sortable, width) {\n let dispName = TermsUtil.tLabel(displayName)\n return {\n type: type,\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: editable\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: type,\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 컬럼 설정\n *******************************\n * @param {String} type\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} editable\n * @param {Boolean} sortable\n * @param {Boolean} mandatory\n * @param {Number} width\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristColumnConfig3(type, name, displayName, align, editable, sortable, mandatory, width) {\n let dispName = TermsUtil.tLabel(displayName)\n return {\n type: type,\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: editable,\n mandatory: mandatory\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: type,\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 Selector 컬럼 설정\n ***************************************\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} sortable\n * @param {Number} width\n * @param {Boolean} mandatory\n * @param {Array} optionValues\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristSelectorColumnConfig(name, displayName, align, sortable, width, mandatory, optionValues) {\n let dispName = TermsUtil.tLabel(displayName)\n return {\n type: 'select',\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: true,\n mandatory: mandatory,\n options: optionValues\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: 'string',\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 Code Selector 컬럼 설정\n ********************************************\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} sortable\n * @param {Number} width\n * @param {Boolean} mandatory\n * @param {String} codeName\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static async getGristCodeSelectorColumnConfig(name, displayName, align, sortable, width, mandatory, codeName) {\n let optionValue = await ServiceUtil.getCodeSelectorData(codeName)\n return MetaUiUtil.getGristSelectorColumnConfig(name, displayName, align, sortable, width, mandatory, optionValue)\n }\n\n /**\n * @description 그리스트 검색 편집기 설정\n ************************************\n * @param {String} name\n * @param {String} type\n * @param {String} label\n * @param {String} operator\n * @param {Array} optionValues\n * @returns {Object} 그리스트 검색 편집기 설정\n */\n static getGristSearchColumnConfig(name, type, label, operator, optionValues) {\n let dispName = TermsUtil.tLabel(label)\n let column = {\n name: name,\n type: type,\n label: dispName,\n operator: operator,\n imex: {\n width: 16,\n header: dispName,\n type: type,\n key: name\n }\n }\n\n if (optionValues) {\n column.options = optionValues\n }\n\n return column\n }\n\n /**\n * @description 그리스트 검색 코드 편집기 설정\n ***************************************\n * @param {String} name 검색 필드 명\n * @param {String} type 검색 편집기 유형\n * @param {String} label 검색 필드 라벨명\n * @param {String} operator 검색 연산자\n * @param {String} codeName 코드 이름\n * @returns {Object} 그리스트 검색 코드 편집기 설정\n */\n static async getGristSearchCodeColumnConfig(name, type, label, operator, codeName) {\n let optionValues = await ServiceUtil.getCodeSelectorData(codeName)\n return MetaUiUtil.getGristSearchColumnConfig(name, type, label, operator, optionValues)\n }\n\n /**\n * @description 기본 컨텍스트 버튼이 아닌 커스텀 버튼 컨테이너 스타일\n *********************************************************\n * @returns {Array} 커스텀 버튼 컨테이너 CSS 리턴\n */\n static getCustomButtonContainerStyles() {\n return [ButtonContainerStyles]\n }\n\n /**\n * @description 그리스트 강조 스타일 리턴\n ************************************\n * @returns {Array} 그리스트 강조 스타일 CSS\n */\n static getGristEmphasizedStyles() {\n return [\n css`\n :host {\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n `\n ]\n }\n\n /**\n * @description 기본 그리스트 스타일 리턴\n ************************************\n * @returns {Array} 기본 그리스트 스타일 CSS 리턴\n */\n static getBasicGristStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 그리스트 탭 스타일 리턴\n **************************************\n * @returns {Array} 기본 그리스트 탭 스타일 CSS 리턴\n */\n static getBasicGristTabStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 마스터 디테일 스타일 리턴\n ****************************************\n * @returns {Array} 기본 마스터 디테일 스타일 CSS 리턴\n */\n static getBasicMasterDetailStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 TAB 디테일 스타일 리턴\n **************************************\n * @returns {Array} 기본 TAB 디테일 스타일 CSS 리턴\n */\n static getBasicTabDetailStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 MAIN TAB 스타일 리턴\n **************************************\n * @returns {Array} 기본 MAIN TAB 스타일 CSS 리턴\n */\n static getBasicMainTabStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 마스터 디테일 그리스트 스타일 리턴\n *********************************************************\n * @param {String} masterDetailType top-down / left-right\n * @returns {Array} 마스터 디테일 그리스트 스타일 CSS\n */\n static getBasicMasterDetailGristStyle(masterDetailType) {\n if (masterDetailType == 'top-down') {\n return MetaUiUtil.getMasterDetailTopDownGristStyle()\n } else {\n return MetaUiUtil.getMasterDetailLeftRightGristStyle()\n }\n }\n\n /**\n * @description top-down 형태의 마스터 디테일 그리스트 스타일 리턴\n ************************************************************\n * @returns {Array} top-down 형태의 마스터 디테일 그리스트 스타일 CSS\n */\n static getMasterDetailTopDownGristStyle() {\n return [\n ButtonContainerStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: auto;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n grid-template-rows: 50% 50%;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `\n ]\n }\n\n /**\n * @description left-rigth 형태의 마스터 디테일 그리스트 스타일 리턴\n **************************************************************\n * @returns {Array} left-rigth 형태의 마스터 디테일 그리스트 스타일 CSS\n */\n static getMasterDetailLeftRightGristStyle() {\n return [\n ButtonContainerStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: auto;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n grid-template-columns: 50% 50%;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `\n ]\n }\n\n /**\n * @description 기본 폼 스타일 리턴\n ************************************\n * @returns {Array} 기본 폼 스타일 CSS 리턴\n */\n static getBasicFormStyles() {\n return [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n display: grid;\n grid-auto-rows: min-content;\n grid-gap: var(--record-view-gap);\n padding: var(--record-view-padding);\n overflow-y: auto;\n height: 100%;\n border-bottom: var(--record-view-border-bottom);\n }\n\n .root_container {\n display: flex;\n flex: 1;\n flex-direction: column;\n padding: var(--record-view-padding);\n overflow-y: auto;\n height: 100%;\n border-bottom: var(--record-view-border-bottom);\n }\n\n .content_container {\n display: grid;\n grid-auto-rows: min-content;\n grid-gap: var(--record-view-gap);\n padding: var(--record-view-padding);\n }\n\n h2 {\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n margin: var(--grist-title-margin);\n padding-bottom: var(--grist-title-with-grid-padding);\n padding-top: var(--grist-title-with-grid-padding);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n label {\n display: flex;\n align-items: center;\n position: relative;\n text-transform: capitalize;\n\n padding: var(--record-view-item-padding);\n border-bottom: var(--record-view-border-bottom);\n font: var(--record-view-label-font);\n color: var(--record-view-label-color);\n }\n\n label md-icon {\n display: none;\n }\n\n label[editable] md-icon {\n --md-icon-size: var(--record-view-label-icon-size);\n display: inline-block;\n opacity: 0.5;\n }\n\n ox-grid-field {\n border-top: none;\n border-bottom: var(--record-view-border-bottom);\n font: var(--record-view-font);\n color: var(--record-view-color);\n background-color: transparent;\n margin-right: 10px;\n }\n\n ox-grid-field[editing='true'] {\n border-bottom: var(--record-view-edit-border-bottom);\n }\n `,\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 탭 스타일 리턴\n ************************************\n * @returns {Array} 기본 탭 스타일 CSS 리턴\n */\n static getBasicTabStyles() {\n return [\n css`\n :host {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .tabs {\n display: flex;\n padding: 0 0 0 var(--spacing-medium);\n border-bottom: 1px solid var(--md-sys-color-primary);\n }\n\n .tab {\n background-color: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n margin-top: var(--spacing-medium);\n padding: var(--spacing-small) var(--spacing-large) 0 var(--spacing-large);\n border-radius: 9px 9px 0 0;\n border-right: 1px solid rgba(0, 0, 0, 0.4);\n text-transform: capitalize;\n opacity: 0.7;\n font-size: 15px;\n cursor: pointer;\n }\n\n .tab[activate] {\n background-color: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n box-shadow: 2px -2px 2px 0px rgba(0, 0, 0, 0.15);\n opacity: 1;\n font-weight: bold;\n }\n\n .tab > md-icon {\n width: 15px;\n height: 20px;\n padding: 0;\n margin: 0;\n --md-icon-size: 15px;\n vertical-align: middle;\n }\n\n .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: var(--md-sys-color-surface);\n border-radius: 0 var(--border-radius) var(--border-radius) var(--border-radius);\n border: var(--border-dim-color);\n border-width: 0 1px 1px 1px;\n box-shadow: var(--box-shadow);\n overflow: auto;\n }\n\n .tab-contents {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n `\n ]\n }\n\n /**\n * @description 그리드 설정에 버튼 이름이 buttonName인 버튼이 있는지 체크\n **************************************************************\n * @param {Object} buttonConfig 버튼 설정\n * @param {String} buttonName 버튼 명\n * @returns\n */\n static isButtonExist(buttonConfig, buttonName) {\n let button = buttonConfig\n ? buttonConfig.find(b => {\n return b.name == buttonName\n })\n : null\n return button ? true : false\n }\n\n /**\n * @description 그리드 설정에 버튼 이름이 buttonName인 버튼이 있는지 체크\n **************************************************************\n * @param {Object} gridConfig 그리드 설정\n * @param {String} buttonName 버튼 명\n * @returns\n */\n static isGridButtonExist(gridConfig, buttonName) {\n let button =\n gridConfig && gridConfig.button\n ? gridConfig.button.find(b => {\n return b.name == buttonName\n })\n : null\n return button ? true : false\n }\n\n /**\n * @description 그리드 설정에서 셀렉트 컬럼을 추출\n *******************************************\n * @param {Array} gridColumns 그리드 컬럼 설정\n * @returns {String} 셀렉트 필드 정보\n */\n static getSelectColumns(gridColumns) {\n let fields = ''\n\n gridColumns\n .filter(x => x.type != 'gutter')\n .forEach(c => {\n fields += '\\n'\n fields += ['meta-object-selector', 'object', 'resource-object'].includes(c.type)\n ? `${c.name}\\n{${MetaUiUtil.getObjctColumnSelectFields(c)}}`\n : c.type == 'board'\n ? `${c.name}\\n{${'\\nid\\nname\\nthumbnail'}}`\n : c.name\n })\n\n return fields\n }\n\n /**\n * Object 타입의 컬럼에 대한 셀렉트 필드 추출 후 리턴\n ********************************************\n * @param {Object} gridCol\n * @returns {String} Object 타입의 필드 문자열\n */\n static getObjctColumnSelectFields(gridCol) {\n let colStr = ''\n\n if (\n ValueUtil.isNotEmpty(gridCol.record) &&\n ValueUtil.isNotEmpty(gridCol.record.options) &&\n ValueUtil.isNotEmpty(gridCol.record.options.select)\n ) {\n // 설정에 정의가 되어 있으면\n gridCol.record.options.select.forEach(x => {\n if (x.name && x.name !== '') {\n if (['meta-object-selector', 'object', 'resource-object'].includes(x.type)) {\n colStr += `\\n${x.name} { ${MetaUiUtil.getObjctColumnSelectFields(x)} \\n }`\n } else {\n colStr += `\\n${x.name}`\n }\n }\n })\n }\n\n if (colStr == '') {\n // 설정에 정의가 되어 있지 않으면 기본 id, name, description 필드\n colStr += '\\nid\\nname\\ndescription'\n }\n\n return colStr\n }\n\n /**\n * @description pageView의 그리드 정보로 기본 그리스트 Html을 생성하여 리턴\n *****************************************************************\n * @param {String} pageView 페이지 뷰\n * @returns {HTMLElement} 그리스트 HTML\n */\n static getBasicGristHtml(pageView) {\n let gristConfigSet = pageView.gristConfigSet\n if (!gristConfigSet) {\n return html``\n } else {\n let gristElementId = pageView.gristId ? pageView.gristId : 'ox-grist'\n let gridMode = pageView.gridMode\n return html`\n <ox-grist\n id=${gristElementId}\n .config=${gristConfigSet}\n .mode=${gridMode}\n auto-fetch\n .personalConfigProvider=${pageView.getPagePreferenceProvider(gristElementId)}\n .fetchHandler=${pageView.fetchHandler.bind(pageView)}\n >\n ${MetaUiUtil.getGridDetailHtml(pageView)}\n\n <ox-grist-personalizer slot=\"setting\"></ox-grist-personalizer>\n </ox-grist>\n `\n }\n }\n\n /**\n * @description pageView의 폼 정보로 기본 폼 Html을 생성하여 리턴\n *********************************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 폼을 HTML\n */\n static getBasicFormHtml(pageView) {\n if (!pageView) return html``\n if (!pageView.formConfigSet) return html``\n\n let cols = pageView.formConfigSet\n let record = pageView.record || {}\n let columns = cols.filter(x => x.hidden == false)\n\n // 폼 렌더링 옵션 여부\n if (ValueUtil.isEmpty(pageView.formRenderConfig)) {\n return MetaUiUtil.getBasicFormHtmlNoOption(pageView, columns, record)\n } else {\n return MetaUiUtil.getBasicFormHtmlOnOption(pageView, columns, record)\n }\n }\n\n /**\n * @description pageView의 폼 정보로 폼렌더링 옵션을 적용한 폼 Html을 생성하여 리턴\n ***********************************************************************\n * @param {Object} pageView 페이지 뷰\n * @param {Array} columns 구성 컬럼\n * @param {Object} record 표현 데이터\n * @returns {HTMLElement} 폼을 HTML\n */\n static getBasicFormHtmlOnOption(pageView, columns, record) {\n let renderConfig = pageView.formRenderConfig\n\n return html`\n <div class=\"root_container\">\n ${renderConfig.map(config => {\n let renderCols = []\n\n config.column_list.forEach(x => {\n let columnInfo = columns.filter(col => x == col.name) || []\n\n if (columnInfo.length > 0) {\n renderCols.push(columnInfo[0])\n }\n })\n\n // 그리드 구분 스타일\n let divStyle = 'height:auto;grid-template-columns:'\n for (let i = 0; i < config.column; i++) {\n divStyle += ' 1fr 2fr'\n }\n\n divStyle += ';'\n let rowIndex = 0\n return html`\n <h2><md-icon>list_alt</md-icon>${TermsUtil.tTitle(config.display)}</h2>\n <div id=\"content_container\" class=\"content_container\" style=\"${divStyle}\">\n ${renderCols.map(column => {\n let { editable = false, mandatory = false } = column.record\n let dirtyFields = record['__dirtyfields__'] || {}\n\n return html`\n <label ?editable=${editable}\n ><span>${mandatory ? '*' : ''}${column.header_txt}</span>\n ${editable ? html`<md-icon>edit</md-icon>` : ''}\n </label>\n <ox-grid-field\n .rowIndex=${rowIndex}\n .column=${column}\n .record=${record}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n })}\n </div>\n `\n })}\n </div>\n ${pageView.isPage ? html`` : MetaUiUtil.getButtonContainer(pageView)}\n `\n }\n\n /**\n * @description pageView의 폼 정보로 기본 폼 Html을 생성하여 리턴\n *********************************************************\n * @param {Object} pageView 페이지 뷰\n * @param {Array} columns 구성 컬럼\n * @param {Object} record 표현 데이터\n * @returns {HTMLElement} 폼을 HTML\n */\n static getBasicFormHtmlNoOption(pageView, columns, record) {\n // 그리드 구분 스타일\n let divStyle = 'grid-template-columns:'\n if (!pageView.column || pageView.column == 0) {\n pageView.column = 1\n }\n\n pageView.column = parseInt((pageView.etcConfig || {}).default_form_column || pageView.column)\n\n for (let i = 0; i < pageView.column; i++) {\n divStyle += ' 1fr 2fr'\n }\n\n divStyle += ';'\n let rowIndex = 0\n\n return html`\n <div id=\"container\" class=\"container\" style=\"${divStyle}\">\n ${columns.map(column => {\n let { editable = false, mandatory = false } = column.record\n let dirtyFields = record['__dirtyfields__'] || {}\n\n return html`\n <label ?editable=${editable}\n ><span>${mandatory ? '*' : ''}${column.header_txt}</span>\n ${editable ? html`<md-icon>edit</md-icon>` : ''}\n </label>\n <ox-grid-field\n .rowIndex=${rowIndex}\n .column=${column}\n .record=${record}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n })}\n </div>\n ${pageView.isPage ? html`` : MetaUiUtil.getButtonContainer(pageView)}\n `\n }\n\n /**\n * @description pageView의 탭 정보로 기본 탭 Html을 생성하여 리턴\n **********************************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getBasicTabHtml(pageView) {\n if (!pageView) return html``\n if (!pageView.tabRenderConfig) return html``\n\n let tabs = pageView.tabRenderConfig\n if (!pageView.currentTabKey) pageView.currentTabKey = tabs[0]?.name || undefined\n\n return html`\n <div class=\"tabs\">\n ${tabs.map(tab => {\n let label = TermsUtil.tLabel(tab.display)\n let key = tab.name\n\n return html`\n <div\n class=\"tab\"\n ?activate=\"${key === pageView.currentTabKey}\"\n @click=\"${() => (pageView.currentTabKey = key)}\"\n >\n ${tab.icon ? html`<md-icon>${tab.icon}</md-icon>` : html``}\n <span>${label}</span>\n </div>\n `\n })}\n </div>\n <div class=\"content-container\">\n ${tabs.map(tab => {\n let displayStyle = 'display:none'\n let key = tab.name\n if (key == pageView.currentTabKey) {\n displayStyle = 'display:flex'\n }\n\n return html`\n <div class=\"tab-contents\" style=\"${displayStyle}\">${MetaUiUtil.getBasicTabContent(pageView, tab)}</div>\n `\n })}\n </div>\n `\n }\n\n /**\n * @description Grist 탭 Html을 생성하여 리턴\n *****************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getGristTabHtml(pageView) {\n let type = (pageView.etcConfig || {}).master_detail_type || 'top_bottom'\n let size = (pageView.etcConfig || {}).master_detail_size || '50% 50%'\n\n let layoutContainerStyle = type == 'left_right' ? `grid-template-columns:${size};` : `grid-template-rows:${size};`\n let currentRouting = pageView.isPage ? UiUtil.currentRouting() : pageView.route_name\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.grist?.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\" style=\"${layoutContainerStyle}\">\n <div class=\"container_detail\">\n ${MetaApi.getBasicGristHtml(pageView)} ${MetaUiUtil.getButtonContainer(pageView)}\n </div>\n <div class=\"container_detail\">\n ${pageView.is_activity === true\n ? html`${pageView.is_readonly === true\n ? html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n .activityDataSet=${(pageView.activityDataSet || {}).detail}\n is_readonly=\"true\"\n is_activity=\"true\"\n is_detail=\"true\"\n >\n </meta-tab-element>`\n : html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n .activityDataSet=${(pageView.activityDataSet || {}).detail}\n is_activity=\"true\"\n is_detail=\"true\"\n >\n </meta-tab-element>`}`\n : html`${pageView.is_readonly === true\n ? html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n is_readonly=\"true\"\n is_detail=\"true\"\n ></meta-tab-element>`\n : html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n is_detail=\"true\"\n ></meta-tab-element>`}`}\n </div>\n </div>\n `\n }\n\n /**\n * @description Tab Detail Html을 생성하여 리턴\n ********************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getTabDetailHtml(pageView) {\n let type = pageView.etcConfig.master_detail_type || 'top_bottom'\n let size = pageView.etcConfig.master_detail_size || '50% 50%'\n let detailInfoTxt = pageView.etcConfig.master_detail_element\n let detailInfo = JSON.parse(detailInfoTxt || '{}')\n let layoutContainerStyle = type == 'left_right' ? `grid-template-columns:${size};` : `grid-template-rows:${size};`\n\n MetaUiUtil.createMasterElement(pageView)\n MetaUiUtil.createDetailElement(pageView, detailInfo)\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\" style=\"${layoutContainerStyle}\">\n <div class=\"container_detail\">${pageView.masterElement}</div>\n <div class=\"container_detail\">\n ${detailInfo.tagname == '' || detailInfo.tagname == 'meta-tab-element'\n ? html``\n : html`<h2 id=\"detail_title\"><md-icon>list_alt</md-icon>${TermsUtil.tTitle(`${detailInfo.display}`)}</h2>`}\n ${pageView.detailElement}\n </div>\n </div>\n `\n }\n\n /**\n * @description 메인 탭 Html을 생성하여 리턴\n ***************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getMainTabHtml(pageView) {\n MetaUiUtil.createMasterElement(pageView)\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\">${pageView.masterElement}</div>\n `\n }\n\n /**\n * @description 마스터 디테일 Html을 생성하여 리턴\n ********************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getMasterDetailHtml(pageView) {\n let type = pageView.etcConfig.master_detail_type || 'top_bottom'\n let size = pageView.etcConfig.master_detail_size || '50% 50%'\n let masterDisplay = (pageView.masterOption || {}).display\n let detailInfoTxt = pageView.etcConfig.master_detail_element\n let detailInfo = JSON.parse(detailInfoTxt || '{}')\n let layoutContainerStyle = type == 'left_right' ? `grid-template-columns:${size};` : `grid-template-rows:${size};`\n MetaUiUtil.createDetailElement(pageView, detailInfo)\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.grist?.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\" style=\"${layoutContainerStyle}\">\n <div class=\"container_detail\">\n ${pageView.useFilterForm\n ? masterDisplay\n ? html`<h2 id=\"detail_title\"><md-icon>list_alt</md-icon>${TermsUtil.tTitle(`${masterDisplay}`)}</h2>`\n : html``\n : html``}\n ${MetaApi.getBasicGristHtml(pageView)} ${MetaUiUtil.getButtonContainer(pageView)}\n </div>\n <div class=\"container_detail\">\n ${detailInfo.tagname == '' || detailInfo.tagname == 'meta-tab-element'\n ? html``\n : detailInfo.display\n ? html`<h2 id=\"detail_title\"><md-icon>list_alt</md-icon>${TermsUtil.tTitle(`${detailInfo.display}`)}</h2>`\n : html``}\n ${pageView.detailElement}\n </div>\n </div>\n `\n }\n\n /**\n * @descrtiption 디테일 엘리먼트 렌더링\n **********************************\n * @param {Object} pageView\n * @param {Object} detailInfo\n * @returns htmlElement\n */\n static createDetailElement(pageView, detailInfo) {\n if (!pageView.detailElement) {\n let name = detailInfo.name ? detailInfo.name : 'detail'\n let elementTxt = `<${detailInfo.tagname} id=\"${name}\" name=\"${name}\" route_name=\"${detailInfo.routing}\" ${\n pageView.is_activity === true ? 'is_activity=true' : ''\n } ${pageView.is_readonly === true ? 'is_readonly=true' : ''} is_detail=true style=\"flex:1;\"></${detailInfo.tagname}>`\n pageView.detailElement = UiUtil.htmlToElement(elementTxt)\n pageView.detailElement.activityDataSet = (pageView.activityDataSet || {}).detail\n\n if (pageView.tagName.toLowerCase().startsWith('meta-tab-detail-')) {\n pageView.detailElement.rootElement = pageView\n }\n }\n }\n /**\n * @descrtiption 마스터 엘리먼트 렌더링\n **********************************\n * @param {Object} pageView\n * @returns {HTMLElement} 마스터 엘리먼트 HTML\n */\n static createMasterElement(pageView) {\n if (!pageView.masterElement && pageView.filterForm) {\n let name = 'master'\n let elementTxt = `<meta-tab-element id=\"${name}\" name=\"${name}\" route_name=\"${pageView.currentRouting}\" ${\n pageView.is_activity === true ? 'is_activity=true' : ''\n } ${pageView.is_readonly === true ? 'is_readonly=true' : ''} is_detail=true style=\"flex:1;\"></meta-tab-element>`\n pageView.masterElement = UiUtil.htmlToElement(elementTxt)\n pageView.masterElement.activityDataSet = (pageView.activityDataSet || {}).master\n pageView.masterElement.includeMainList = true\n pageView.masterElement.mainFilterForm = pageView.filterForm\n pageView.masterElement.rootElement = pageView\n }\n }\n\n /**\n * @descrtiption 기본 탭 컨텐트 리턴\n ********************************\n * @param {Object} pageView\n * @param {Object} tabConfig\n * @returns {HTMLElement} 탭 컨텐트 HTML\n */\n static getBasicTabContent(pageView, tabConfig) {\n if (!pageView.tabElements) {\n pageView.tabElements = {}\n }\n\n if (Object.keys(pageView.tabElements).filter(key => key == tabConfig.name).length > 0) {\n return pageView.tabElements[tabConfig.name]\n }\n\n let htmlText = `<${tabConfig.tagname} id='${tabConfig.name}' route_name='${tabConfig.menu}' style=\"flex:1;\" ${\n pageView.is_activity === true ? 'is_activity=true' : ''\n } ${pageView.is_readonly === true ? 'is_readonly=true' : ''} is_detail=true></${tabConfig.tagname}>`\n let tabElement = UiUtil.htmlToElement(htmlText)\n tabElement.activityDataSet = (pageView.activityDataSet || {})[tabConfig.name]\n\n if (pageView.parent_id) {\n tabElement.parent_id = pageView.parent_id\n }\n\n if (pageView.rootElement) {\n tabElement.rootElement = pageView.rootElement\n } else {\n tabElement.detailElement = pageView\n }\n\n if (tabConfig.filter_from === false) {\n tabElement.use_filter_form = false\n }\n\n if (tabConfig.main_filter_form) {\n tabElement.mainFilterForm = tabConfig.main_filter_form\n }\n\n pageView.tabElements[tabConfig.name] = tabElement\n return tabElement\n }\n\n /**\n * @description 그리드 상세 내용 HTML 생성\n **************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 그리드 상세 내용 HTML\n */\n static getGridDetailHtml(pageView) {\n let useAddButton = pageView.useButtonAdd\n let useFilterForm = pageView.useFilterForm\n let useFilterAddButton = JSON.parse((pageView.etcConfig || {}).use_filter_add_button || 'false')\n let recordCreationCallback = pageView.recordCreationCallback\n let useSortButton = JSON.parse((pageView.etcConfig || {}).use_grid_sort_button || 'false')\n useFilterAddButton = useFilterAddButton === true && useAddButton === true\n\n return html`\n ${useFilterForm\n ? html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n ${useSortButton\n ? html`\n <div id=\"sorters\">\n <md-icon\n @click=${e => {\n const target = e.currentTarget\n target.nextElementSibling.open({\n right: 0,\n top: target.offsetTop + target.offsetHeight\n })\n }}\n >sort</md-icon\n >\n <ox-popup id=\"sorter-control\">\n <ox-sorters-control></ox-sorters-control>\n </ox-popup>\n </div>\n `\n : nothing}\n ${MetaUiUtil.getGridViewOption(pageView)}\n <ox-record-creator id=\"add\" ?hidden=\"${!useFilterAddButton}\" .callback=${recordCreationCallback}>\n <button style=\"display: flex; justify-content: center\">\n <md-icon>add</md-icon>\n </button>\n </ox-record-creator>\n </div>\n </div>\n `\n : nothing}\n `\n }\n\n /**\n * @description 그리드 보기 옵션 버튼을 그린다.\n ****************************************\n * @param {Object} pageView 페이지 뷰\n * @return {HTMLElement} 그리드 뷰 옵션 HTML\n */\n static getGridViewOption(pageView) {\n if (ValueUtil.isEmpty(pageView.gridViewOptions) || pageView.gridViewOptions.length == 1) {\n return html``\n } else {\n return html`\n <div id=\"modes\">\n ${pageView.gridViewOptions.includes('GRID')\n ? html`<md-icon @click=\"${() => (pageView.gridMode = 'GRID')}\" ?active=\"${pageView.gridMode == 'GRID'}\"\n >grid_on</md-icon\n >`\n : ``}\n ${pageView.gridViewOptions.includes('LIST')\n ? html`<md-icon @click=\"${() => (pageView.gridMode = 'LIST')}\" ?active=\"${pageView.gridMode == 'LIST'}\"\n >format_list_bulleted</md-icon\n >`\n : ``}\n ${pageView.gridViewOptions.includes('CARD')\n ? html`<md-icon @click=\"${() => (pageView.gridMode = 'CARD')}\" ?active=\"${pageView.gridMode == 'CARD'}\"\n >apps</md-icon\n >`\n : ``}\n </div>\n `\n }\n }\n\n /**\n * @description 버튼 컨테이너 엘리먼트 생성\n *************************************\n * @param {Object} pageView\n * @returns {HTMLElement}\n */\n static getButtonContainer(pageView) {\n return html`<div class=\"button-container\">${MetaUiUtil.getContainerButtons(pageView)}</div>`\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"meta-ui-util.js","sourceRoot":"","sources":["../../client/utils/meta-ui-util.js"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist/ox-record-creator.js'\nimport 'ses'\n\nimport { css, html, render, nothing } from 'lit'\n\nimport { getEditor, getRenderer } from '@operato/data-grist'\nimport { getValueGenerators } from '@operato/time-calculator'\nimport moment from '@operato/moment-timezone-es'\nimport {\n ScrollbarStyles,\n CommonGristStyles,\n CommonButtonStyles,\n ButtonContainerStyles,\n CommonHeaderStyles\n} from '@operato/styles'\n\nimport { MetaCrypto } from './meta-crypto'\nimport { TermsUtil } from './terms-util'\nimport { ValueUtil } from './value-util'\nimport { ServiceUtil } from './service-util'\nimport { UiUtil } from './ui-util'\nimport { MetaApi } from './meta-api'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop shortstop@hatiolab.com\n * @description 메타 UI에서 필요한 유틸리티 함수 정의\n */\nexport class MetaUiUtil {\n /**\n * @description 메뉴 ID 정보로 메뉴 메타 정보 조회\n ********************************************\n * @param {String} menuId 메뉴 ID 값\n * @returns {Object} 메뉴 메타 정보\n */\n static async findMenuMeta(menuId) {\n let menu = await ServiceUtil.findOne('menu', menuId, 'template')\n\n if (!menu) {\n throw new Error(TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${menuId}` }))\n }\n\n if (!menu.template) {\n throw new Error(\n TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${TermsUtil.tLabel('model')}` })\n )\n }\n\n this.menuId = menuId\n return JSON.parse(menu.template)\n }\n\n /**\n * @description 메뉴 라우팅 정보로 메뉴 메타 정보 조회\n **********************************************\n * @param {String} menuRouting 메뉴 route 값\n * @returns {Object} 메뉴 메타 정보 (암호)\n */\n static async getMenuMetaData(menuRouting) {\n let filters = [{ name: 'routing', operator: 'eq', value: menuRouting }]\n let data = await ServiceUtil.searchByPagination('menus', filters, null, 0, 0, 'id,template')\n return data\n }\n\n /**\n * @description 메뉴 라우팅 정보로 메뉴 메타 정보 조회\n **********************************************\n * @param {Object} pageView\n * @param {String} menuRouting 메뉴 route 값\n * @returns {Object} 메뉴 메타 정보\n */\n static async findMenuMetaByRouting(pageView, menuRouting) {\n let data = await MetaUiUtil.getMenuMetaData(menuRouting)\n let menu = undefined\n\n if (!data || !data.records || data.records.length == 0) {\n if (pageView.defaultPageConfig) {\n menu = { id: menuRouting, template: pageView.defaultPageConfig }\n }\n } else {\n menu = data.records[0]\n if (!menu.template && pageView.defaultPageConfig) {\n menu.template = pageView.defaultPageConfig\n }\n }\n\n if (!menu) {\n throw new Error(TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${menuRouting}` }))\n } else if (!menu.template) {\n throw new Error(\n TermsUtil.tText('value_is_not_exist', { value: `${TermsUtil.tMenu('menu')} ${TermsUtil.tLabel('model')}` })\n )\n }\n\n pageView.menuId = menu.id\n return JSON.parse(MetaCrypto.dec(menu.template))\n }\n\n /**\n * @description 기본 그리스트 페이지 프로퍼티 리턴\n *******************************************\n * @returns {Object} 기본 그리스트 페이지 프로퍼티\n */\n static getBasicGristPageProperties() {\n return {\n /* 메뉴 메타 정보 */\n menuInfo: Object, // 메뉴 기본 정보\n gridConfig: Object, // 그리드 구성 정보\n gridColumnConfig: Array, // 그리드 컬럼 정보\n formColumnConfig: Array, // form 컬럼 정보\n buttonConfig: Array, // 버튼 구성 정보\n searchConfig: Array, // 서치폼 구성 정보\n gqlInfo: String, // GraphQL 정보\n gqlFetchField: String, // GraphQL 조회 필드\n searchFormElement: String, // 화면에서 사용 되는 서치폼 (grist, filter, not)\n useFilterForm: Boolean, // 그리드내 filter 폼 사용 여부\n\n /* 화면 구성 */\n gristConfigSet: Object, // 메타정보에서 변환된 그리드 구성 정보\n formConfigSet: Array, // 메타정보에서 변환된 폼 구성 정보\n useButtonExport: Boolean, // 내보내기 버튼 사용 여부\n useButtonImport: Boolean, // 가져오기 버튼 사용 여부\n useButtonAdd: Boolean, // 추가 버튼 사용 여부\n gridMobileMode: String, // 모바일 기기에서 그리드 뷰\n gridDeskMode: String, // 데스크탑에서 그리드 뷰\n gridViewOptions: Array, // 그리드 뷰 옵션\n gridMode: String, // 현재 그리드 뷰 모드\n infinityPage: true, // 페이지 사용시 false\n\n route_name: String, // Element 로드시 화면을 그릴 메뉴 정보,\n parent_id: String, // 상세 폼 뷰 상위 데이터 ID\n\n /* 속성 ? */\n is_detail: {\n // 페이지 컴포넌트 여부\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n },\n\n is_popup: {\n // 팝업 여부\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n },\n\n is_activity: {\n // 작업 결재 관련 화면에서 호출 여부\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n },\n\n is_readonly: {\n // 수정 불가 페이지\n type: Boolean,\n converter(value) {\n let retVal = Boolean(value)\n return retVal\n }\n }\n }\n }\n\n /**\n * @description 메뉴 메타 정보를 조회한 후 파싱...\n ********************************************\n * @param {HTMLElement} pageView\n * @returns {Object} 메뉴 메타 정보\n */\n static async getMenuMeta(pageView) {\n // 1. 라우팅 추출 및 메뉴 메타 정보 조회\n let currentRouting = pageView.isPage ? UiUtil.currentRouting() : pageView.route_name\n pageView.currentRouting = currentRouting\n let menuMetaData = await MetaUiUtil.findMenuMetaByRouting(pageView, currentRouting)\n\n // 2. Activity 여부에 따라 버튼 / 검색 삭제\n if (pageView.is_activity === true) {\n menuMetaData.grid.option.grid_refresh_when_page_activated = false\n menuMetaData.grid.option.use_row_checker = false\n menuMetaData.grid.option.pages = 'unlimited'\n menuMetaData.grid.use_filter_form = false\n menuMetaData.grid.button = []\n menuMetaData.button = menuMetaData.button.filter(x => x.name == 'add')\n }\n\n // 3. 화면이 읽기 전용인 경우 그리드 Configuration 처리\n if (pageView.is_readonly === true) {\n menuMetaData.grid_column.forEach(x => {\n x.editable = false\n })\n menuMetaData.button = menuMetaData.button.filter(x => x.name != 'add')\n }\n\n // 4. 필터 폼 사용 여부 강제 설정\n if (pageView.use_filter_form === false) {\n menuMetaData.grid.use_filter_form = false\n }\n\n // 5. 필드 변경 이벤트 처리자 설정\n menuMetaData.grid_column\n .filter(x => x.change_event_handler)\n .forEach(x => {\n if (!pageView.fieldChangeHandlers) pageView.fieldChangeHandlers = {}\n pageView.fieldChangeHandlers[x.name] = x.change_event_handler\n })\n\n // 6. 그리드 타입 통합 처리 : object, resource-object -> meta-object-selector, resource-code-selector -> meta-code-selector\n menuMetaData.grid_column.forEach(x => {\n if (['resource-object', 'object'].includes(x.type)) {\n x.type = 'meta-object-selector'\n } else if (['resource-code-selector'].includes(x.type)) {\n x.type = 'meta-code-selector'\n }\n })\n\n // 7. 검색 필드의 검색 Operator가 in인 경우 디폴트 값을 배열로 변경\n if (menuMetaData.search && menuMetaData.search.length > 0) {\n menuMetaData.search.forEach(c => {\n let value = c.value\n if (value && c.operator == 'in' && value.indexOf(',') > 0) {\n c.value = value.split(',')\n }\n })\n }\n\n // 8. 메뉴 메타 정보 리턴\n return menuMetaData\n }\n\n /**\n * @description 파라미터로 받은 pageLimits로 페이지네이션 페이지 수를 표시\n ***************************************************************\n * @param {Array} 페이지네이션 페이지 수 배열\n * @returns {Object} 페이지네이션 페이지 수\n */\n static getGristPaginationCustomConfig(...pageLimits) {\n return { pages: pageLimits }\n }\n\n /**\n * @description 그리스트 기본 gutter 설정 리턴\n ********************************************\n * @param {Boolean} useRowSelector 행 선택 기능 사용 여부\n * @param {Boolean} multiple 여러 행 선택 가능 여부\n * @returns {Object} 그리스트 기본 gutter 설정\n */\n static getGristGuttersConfig(useRowSelector, multiple) {\n let configList = [\n { type: 'gutter', gutterName: 'dirty' },\n { type: 'gutter', gutterName: 'sequence' }\n ]\n\n if (useRowSelector) {\n configList.push({ type: 'gutter', gutterName: 'row-selector', multiple: multiple })\n }\n\n return configList\n }\n\n /**\n * @description 그리스트 선택 모드 설정\n ***************************************\n * @returns {Object} 그리스트 선택 모드 설정\n */\n static getGristSelectableConfig(multiple) {\n return { selectable: { multiple: multiple } }\n }\n\n /**\n * @description 메뉴 메타 정보를 기반으로 그리드 설정 셋을 파싱하여 리턴\n ************************************************************\n * @param {Object} pageView 페이지\n * @returns {Object} 그리드 설정 셋\n */\n static async parseGridConfigSet(pageView) {\n // 0. GraphQL 예외 처리를 위한 오브젝트 초기 화\n if (!pageView.gqlInfo) pageView.gqlInfo = {}\n if (!pageView.gqlInfo.query) pageView.gqlInfo.query = {}\n if (!pageView.gqlInfo.query.after_set_fields) pageView.gqlInfo.query.after_set_fields = {}\n\n if (!pageView.gqlInfo.mutation) pageView.gqlInfo.mutation = {}\n if (!pageView.gqlInfo.mutation.multiple) pageView.gqlInfo.mutation.multiple = {}\n if (!pageView.gqlInfo.mutation.multiple.skip_fields) pageView.gqlInfo.mutation.multiple.skip_fields = []\n\n // 1. 그리드 옵션\n let gridOption = MetaUiUtil.getGridOptionSet(pageView)\n\n // 2. 그리드 리스트 설정\n let gridList = MetaUiUtil.getGridListSet(pageView)\n\n // 3. 그리드 row 설정\n let gridRow = MetaUiUtil.getGridRowSet(pageView)\n\n // 4. 그리드 버튼 설정\n let gridButton = MetaUiUtil.getGridButtonSet(pageView)\n\n // 5. 그리드 컬럼 설정\n let gridColumns = await MetaUiUtil.getGridColumnSet(pageView)\n\n // 6. 그리드 meta-object-selector 타입이면서 검색 조건에 해당하는 컬럼을 찾아 숨김 컬럼으로 등록\n gridColumns\n .filter(x => ['meta-object-selector'].includes(x.type))\n .forEach(col => {\n pageView.searchConfig\n .filter(x => x.name == col.name)\n .forEach(x => {\n const options = col.record.options\n // 6.1. 검색 필드 명 설정\n const filterName = options.referenceField ? options.referenceField : `${col.name}Id`\n\n // 6.2. 검색 필드 설정 찾기\n const filterIdx = pageView.searchConfig.findIndex(item => {\n return item.name == col.name\n })\n\n // 6.3. 검색 필드를 그리드 컬럼 리스트에 추가\n gridColumns.push({\n type: 'meta-object-selector',\n header: col.header,\n name: filterName,\n hidden: true,\n record: {\n editable: false,\n mandatory: false,\n options: options\n },\n unusable: true\n })\n\n // 6.4. 조회시 skip 필드 추가\n pageView.gqlInfo.query.after_set_fields[filterName] = 'x'\n\n // 6.5. 저장시 skip 필드 추가\n pageView.gqlInfo.mutation.multiple.skip_fields.push(filterName)\n\n // 6.6. 검색 설정 이름 변경\n pageView.searchConfig[filterIdx].name = filterName\n pageView.searchConfig[filterIdx].type = 'meta-object-selector'\n })\n })\n\n // 7. 누적 계산 설정 컬럼 추출\n let accumulatorCols = gridColumns.filter(col => (col.accumulator ? true : false))\n if (accumulatorCols && accumulatorCols.length > 0) {\n gridRow.accumulator = true\n }\n\n // 8. default 그리드 gutter\n let gutterConfigs = MetaUiUtil.getGristGuttersConfig(gridOption.use_row_checker, gridRow.selectable.multiple)\n\n // 9. 필터 폼에 검색 조건 필드 정의\n if (pageView.useFilterForm == true) {\n gridColumns = MetaUiUtil.setGridColumnSearchOption(pageView, gridColumns)\n }\n\n // 10. 그리드 강조 설정\n if (pageView.gridEmphasized) {\n // 10.1. 그리드 row\n if (pageView.gridEmphasized && pageView.gridEmphasized.row && pageView.gridEmphasized.row.length > 0) {\n gridRow.classifier = function (recordData, rowIdx) {\n let settings = pageView.gridEmphasized.row\n\n for (let idx = 0; idx < settings.length; idx++) {\n const logic = settings[idx].logic\n const c = new Compartment({ record: recordData, rowIdx })\n const evalFunc = c.evaluate(`(record, rowIdx) => {\n ${logic}\n }`)\n if (evalFunc(recordData, rowIdx)) {\n return {\n emphasized: [settings[idx].backgroundColor, settings[idx].fontColor]\n }\n }\n }\n }\n }\n\n // 10.2. 그리드 column\n if (pageView.gridEmphasized && pageView.gridEmphasized.column) {\n let columSetting = pageView.gridEmphasized.column\n\n Object.keys(columSetting).forEach(key => {\n let settings = columSetting[key]\n let colIdx = gridColumns.findIndex(x => x.name == key)\n if (!gridColumns[colIdx].record) gridColumns[colIdx].record = {}\n\n gridColumns[colIdx].record.classifier = function (recordData, rowIdx) {\n for (let idx = 0; idx < settings.length; idx++) {\n const logic = settings[idx].logic\n const c = new Compartment({ record: recordData, rowIdx })\n const evalFunc = c.evaluate(`(record, rowIdx) => {\n ${logic}\n }`)\n if (evalFunc(recordData, rowIdx)) {\n return {\n emphasized: [settings[idx].backgroundColor, settings[idx].fontColor]\n }\n }\n }\n }\n })\n }\n }\n\n // 11. 그리드 최종 Configuration\n return {\n list: gridList,\n pagination: gridOption.pages,\n sorters: gridOption.sorters,\n rows: gridRow,\n columns: [...gutterConfigs, ...gridButton, ...gridColumns]\n }\n }\n\n /**\n * @description 메뉴 메타 정보를 기반으로 폼 설정 셋을 파싱하여 리턴\n ********************************************************\n * @param {Object} pageView 페이지\n * @returns {Object} 폼 설정 셋\n */\n static async parseFormConfigSet(pageView) {\n let formColumnConfig = pageView.formColumnConfig\n let columns = []\n let defaultValueGenerators = Object.keys(getValueGenerators())\n\n for (let idx = 0; idx < formColumnConfig.length; idx++) {\n let {\n type = 'string',\n name = undefined,\n header = undefined,\n hidden = false,\n editable = true,\n mandatory = false,\n align = 'left',\n select_opt = undefined,\n object_opt = undefined,\n default_value = undefined\n } = formColumnConfig[idx]\n\n // 컬럼 config 으로 변경 및 문자열 처리\n let column = {\n type: type,\n name: name,\n header_txt: ValueUtil.isEmpty(header) ? TermsUtil.tLabel(name) : TermsUtil.tLabel(header),\n header: {\n renderer: function (column) {\n return column.header_txt\n }\n },\n hidden: hidden,\n record: {\n editable: editable,\n mandatory: mandatory,\n align: align,\n classifier: function () {},\n renderer: getRenderer(type)\n }\n }\n\n if (editable) {\n column.record.editor = getEditor(type)\n }\n\n if (default_value) {\n let defaultSet = default_value.split(',')\n let defaultName = defaultSet[0]\n\n if (defaultValueGenerators.includes(defaultName)) {\n column.record.defaultValue =\n defaultSet.length == 1 ? { name: defaultName } : { name: defaultName, params: { calc: defaultSet[1] } }\n } else {\n column.record.defaultValue = type === 'number' ? Number(default_value) : default_value\n }\n }\n\n if (type == 'boolean-all') {\n column.type = 'boolean'\n }\n\n // meta- 로 시작 되는 타입은 공통으로 메뉴를 조회 template 을 가져간다.\n if (type.startsWith('meta-') && object_opt && object_opt.menu) {\n object_opt = await MetaUiUtil.getGristMetaObjectOptions(type, object_opt)\n }\n\n // select-option\n if (type === 'select' && ValueUtil.isNotEmpty(select_opt)) {\n if (Array.isArray(select_opt)) {\n column.record.options = select_opt\n } else {\n if (select_opt.type === 'code') {\n // 공통 코드\n column.record.options = await ServiceUtil.getCodeSelectorData(\n select_opt.values ? select_opt.values : select_opt.name\n )\n } else if (select_opt.type === 'scenario') {\n // 시나리오\n column.record.options = await ServiceUtil.getCodeByScenario(select_opt.name, select_opt.args)\n } else if (select_opt.type === 'entity') {\n // 엔티티\n column.record.options = await ServiceUtil.getCodeByEntity(select_opt.args)\n }\n }\n }\n\n if (type === 'meta-object-selector' && ValueUtil.isNotEmpty(object_opt)) {\n column.record.options = { ...object_opt }\n } else if (type === 'meta-code-selector' && ValueUtil.isNotEmpty(object_opt)) {\n if (object_opt.dispField) {\n object_opt.codes = await ServiceUtil.getCodeByEntity(object_opt)\n }\n column.record.options = { ...object_opt }\n }\n columns.push(column)\n }\n\n return columns\n }\n\n /**\n * @description 메타 설정에서 그리드 옵션을 추출\n *****************************************\n * @param {Object} pageView\n * @returns {Object}\n */\n static getGridOptionSet(pageView) {\n let gridConfig = pageView.gridConfig\n pageView.useFilterForm = gridConfig && gridConfig.use_filter_form != undefined ? gridConfig.use_filter_form : true\n\n let {\n mobile_mode = 'LIST',\n desk_mode = 'GRID',\n view_mode = [],\n use_row_checker = true,\n sorters = [],\n pages = [50, 100, 500, 1000]\n } = ValueUtil.isEmpty(gridConfig.option) ? {} : gridConfig.option\n\n // 페이지 설정 변환\n if (pages === 'unlimited' || pages === '-1') {\n pageView.infinityPage = true\n pages = { infinite: true }\n } else {\n pageView.infinityPage = false\n pages.sort(function (a, b) {\n return a - b\n })\n pages = { pages: pages }\n }\n\n // 모바일 데스크 뷰 모드\n if (ValueUtil.isNotEmpty(view_mode)) {\n if (view_mode.length == 1) {\n desk_mode = view_mode[0]\n mobile_mode = view_mode[0]\n } else if (view_mode.length >= 2) {\n if (!view_mode.includes(mobile_mode)) {\n mobile_mode = view_mode[1]\n }\n\n if (!view_mode.includes(desk_mode)) {\n desk_mode = view_mode[0]\n }\n }\n }\n\n pageView.gridMobileMode = mobile_mode\n pageView.gridDeskMode = desk_mode\n pageView.gridViewOptions = view_mode\n pageView.gridMode = UiUtil.isMobileEnv() ? pageView.gridMobileMode : pageView.gridDeskMode\n\n return {\n use_row_checker: use_row_checker,\n sorters: sorters,\n pages: pages\n }\n }\n\n /**\n * @description 메타 설정에서 그리드 리스트 설정을 추출\n ***********************************************\n * @param {Object} pageView\n * @returns {Object}\n */\n static getGridListSet(pageView) {\n let gridList = {\n fields: [ValueUtil.getParams(pageView.menuInfo, 'name'), ValueUtil.getParams(pageView.menuInfo, 'desc')]\n }\n\n // 기본 리스트 설정과 메타에서 가져온 설정 merge\n if (pageView.gridConfig.list) {\n Object.assign(gridList, pageView.gridConfig.list)\n }\n\n return gridList\n }\n\n /**\n * @description 메타 설정에서 그리드 Row 옵션을 추출\n *********************************************\n * @param {Object} pageView\n * @returns {Object}\n */\n static getGridRowSet(pageView) {\n // 기본 옵션, 메타와 상관없이 그리드 로우 멀티 셀렉트는 false, click 이벤트는 없다.\n let { multiple_select = false, click = undefined } = ValueUtil.isEmpty(pageView.gridConfig.row)\n ? {}\n : pageView.gridConfig.row\n\n let retObject = {\n selectable: { multiple: multiple_select },\n appendable: pageView.useButtonAdd\n }\n\n if (ValueUtil.isNotEmpty(click)) {\n retObject.handlers = { click: click }\n }\n\n return retObject\n }\n\n /**\n * @description 메타 설정에서 그리드 버튼 옵션을 추출\n *********************************************\n * @param {Object} pageView\n * @returns {Array}\n */\n static getGridButtonSet(pageView) {\n let gridButtons = pageView.gridConfig.button\n return ValueUtil.isEmpty(gridButtons)\n ? []\n : // 그리드 버튼 정보로 버튼 설정 정보를 구성하여 리턴\n gridButtons.map(btn => {\n // 기본 그리드 버튼\n let button = { type: 'gutter', gutterName: 'button' }\n\n // 레코드 특정 필드 값 조건에 따라서 아이콘을 변경 ...\n if (ValueUtil.isNotEmpty(btn.icon)) {\n // 아이콘이 Array 타입\n if (Array.isArray(btn.icon)) {\n // 지정 된 조건에 따라 아이콘을 바꾼다.\n button.icon = record => {\n if (ValueUtil.isNotEmpty(record)) {\n // 지정된 조건 Loop\n for (let i = 0; i < btn.icon.length; i++) {\n let logic = btn.icon[i]\n let useIcon = ValueUtil.compareObjectValues(\n logic,\n record,\n Object.keys(logic).filter(key => key != 'icon')\n )\n if (useIcon === true) {\n return logic.icon\n }\n }\n }\n }\n } else {\n button.icon = btn.icon\n }\n }\n\n // 이름이 지정되어 있으면 변환\n if (ValueUtil.isNotEmpty(btn.name)) {\n button.name = btn.name\n }\n // Tooltip\n if (ValueUtil.isNotEmpty(btn.label)) {\n button.title = TermsUtil.tButton(btn.label)\n }\n\n // 버튼 유형이 기본이면 ( 그리스트 기본 제공 기능 및 추가 기능 )\n if (btn.type === 'basic') {\n let logicTxt = ValueUtil.getParams(btn, 'logic')\n\n if (['history_copy', 'history_json'].includes(logicTxt)) {\n button.handlers = {\n click: (_columns, _data, _column, record, _rowIdx) => {\n if (record.id) {\n let action = {\n title: 'data_history_list',\n type: 'popup',\n tagname: logicTxt == 'history_copy' ? 'history-copy-list-popup' : 'history-json-list-popup',\n location:\n logicTxt == 'history_copy'\n ? 'pages/hgistory/history-copy-list-popup.js'\n : 'pages/hgistory/history-json-list-popup.js',\n menu: pageView.currentRouting,\n size: 'large',\n popup_field: 'open_param',\n parent_field: 'id'\n }\n\n let params = {\n ...record,\n gqlFunc: ValueUtil.getParams(pageView.gqlInfo, 'query', 'find_one_func'),\n gristConfig: JSON.parse(JSON.stringify(pageView.grist.config))\n }\n\n MetaUiUtil.gristButtonHandler(pageView, { logic: action }, params)\n }\n }\n }\n } else {\n button.handlers = { click: logicTxt }\n }\n\n // 버튼 유형이 커스텀이면 ...\n } else {\n button.handlers = {\n click: (_columns, _data, _column, record, _rowIdx) => {\n if (record.id) {\n MetaUiUtil.gristButtonHandler(pageView, btn, record)\n }\n }\n }\n }\n\n return button\n })\n }\n\n /**\n * @description 메타 데이터에서 그리드 렌더링 config 을 생성\n ***************************************************\n * @param {Object} pageView 페이지\n * @returns {Array} 그리드 컬럼 설정 리스트\n */\n static async getGridColumnSet(pageView) {\n let gridColumnConfig = pageView.gridColumnConfig\n\n // 메타에 그리드 컬럼 정보가 없으면\n if (ValueUtil.isEmpty(gridColumnConfig)) {\n return []\n }\n\n // CARD, LIST인 경우 컬럼 정보를 표시하기 위한 컬럼들 추출\n let mobileDisplayColumns =\n UiUtil.isMobileEnv() && pageView.etcConfig && pageView.etcConfig.mobile_display_columns\n ? pageView.etcConfig.mobile_display_columns.split(',')\n : []\n\n let defaultValueGenerators = Object.keys(getValueGenerators())\n let columns = []\n for (let idx = 0; idx < gridColumnConfig.length; idx++) {\n let {\n type = 'string',\n name = undefined,\n header = undefined,\n hidden = false,\n editable = true,\n mandatory = false,\n sortable = false,\n align = 'left',\n width = 0,\n exportable = false,\n select_opt = undefined,\n object_opt = undefined,\n format = undefined,\n default_value = undefined,\n accumulator = undefined,\n fixed = false\n } = gridColumnConfig[idx]\n\n // 컬럼 config 으로 변경 및 문자열 처리\n let column = {\n type: type,\n name: name,\n header: ValueUtil.isEmpty(header) ? '' : TermsUtil.tLabel(header),\n hidden: hidden,\n sortable: sortable,\n width: width,\n fixed: fixed,\n record: { editable: editable, mandatory: mandatory, align: align, format: format }\n }\n\n // accumulator 설정이 있고 type이 number이면 accumulator 설정 추가\n if (type.indexOf('number') >= 0 && accumulator) {\n column.accumulator = accumulator\n }\n\n if (default_value) {\n let defaultSet = default_value.split(',')\n let defaultName = defaultSet[0]\n\n if (defaultValueGenerators.includes(defaultName)) {\n column.record.defaultValue =\n defaultSet.length == 1 ? { name: defaultName } : { name: defaultName, params: { calc: defaultSet[1] } }\n } else {\n column.record.defaultValue = type === 'number' ? Number(default_value) : default_value\n }\n }\n\n if (type == 'boolean-all') {\n column.type = 'boolean'\n let colHeaderTxt = column.header\n column.header = {\n renderer: function (col) {\n return html`\n <span>${colHeaderTxt}\n <input type='checkbox'\n @change=${e => {\n e.stopPropagation()\n\n let targetElement = e.target\n let selected = targetElement.checked\n let grist = pageView.grist\n\n if (grist._data && grist._data.records) {\n let records = grist._data.records\n for (let idx = 0; idx < records.length; idx++) {\n targetElement.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: records[idx][col.name],\n after: selected,\n record: records[idx],\n column: col,\n row: idx\n }\n })\n )\n }\n }\n }}\n ></input>\n </span>\n `\n }\n }\n }\n\n // meta- 로 시작 되는 타입은 공통으로 메뉴를 조회 template 을 가져간다.\n if (type.startsWith('meta-') && object_opt && object_opt.menu) {\n object_opt = await MetaUiUtil.getGristMetaObjectOptions(type, object_opt)\n }\n\n // select-option\n if (type === 'select' && ValueUtil.isNotEmpty(select_opt)) {\n if (Array.isArray(select_opt)) {\n column.record.options = select_opt\n } else {\n // 공통 코드\n if (select_opt.type === 'code') {\n column.record.options = await ServiceUtil.getCodeSelectorData(\n select_opt.values ? select_opt.values : select_opt.name\n )\n // 시나리오\n } else if (select_opt.type === 'scenario') {\n column.record.options = await ServiceUtil.getCodeByScenario(select_opt.name, select_opt.args)\n // 엔티티\n } else if (select_opt.type === 'entity') {\n column.record.options = await ServiceUtil.getCodeByEntity(select_opt.args)\n }\n }\n }\n\n // object-option\n if (type === 'meta-object-selector' && ValueUtil.isNotEmpty(object_opt)) {\n column.record.options = { ...object_opt }\n } else if (type === 'meta-code-selector' && ValueUtil.isNotEmpty(object_opt)) {\n if (object_opt.dispField) {\n object_opt.codes = await ServiceUtil.getCodeByEntity(object_opt)\n }\n column.record.options = { ...object_opt }\n }\n\n // attributes (확장 속성)\n if (type === 'attributes' && format) {\n column.record.options = await ServiceUtil.getAttributeSetOptionFor(format)\n }\n\n // mask\n if (type == 'mask') {\n column.record.renderer = (value, column, record, rowIndex, field) => {\n let maskVal = ''\n if (value) {\n let valCount = value.length\n for (let i = 1; i <= valCount; i++) {\n maskVal += '*'\n }\n } else {\n maskVal = '********'\n }\n return maskVal\n }\n }\n\n // LIST, CARD 에서 컬럼 정보 표시\n if (mobileDisplayColumns.includes(name)) {\n column.record.renderer = (value, column, record, rowIndex, field) => {\n return TermsUtil.tLabel(header) + ': ' + value\n }\n }\n\n // 내보내기 버튼 사용, 컬럼 내보내기 옵션\n if (pageView.useButtonExport === true && exportable === true) {\n column.imex = { header: column.header, key: column.name, width: column.width / 6, type: column.type }\n }\n\n columns.push(column)\n }\n\n if (this.is_activity !== true) {\n return columns\n }\n\n return columns\n }\n\n /**\n * @description meta-object, meta-code에 대한 설정을 가져온다. (menu or 설정)\n ***********************************************************************\n * @param {String} type 컬럼 타입\n * @param {Object} options 컬럼 오브젝트 설정\n * @returns {Object} 메타 변경 결과\n */\n static async getGristMetaObjectOptions(type, options) {\n let data = await MetaUiUtil.getMenuMetaData(options.menu)\n\n if (data && data.records && data.records.length > 0 && data.records[0].template) {\n let menu = data.records[0]\n let menu_template = JSON.parse(MetaCrypto.dec(menu.template))\n\n if (!options.queryName) {\n options.queryName = menu_template.gql.query.list_func\n }\n\n if (!options.select) {\n options.select = menu_template.grid_column\n }\n\n if (!options.filterFields || options.filterFields.length == 0) {\n options.filterFields = menu_template.search\n }\n\n if (!options.selectorName) {\n options.selectorName = menu_template.menu.title\n }\n\n if (!options.filters) {\n options.filters = menu_template.gql.query.filters || []\n }\n\n if (type.includes('-object-')) {\n if (!options.nameField) {\n options.nameField = menu_template.menu.name || 'name'\n }\n } else if (type.includes('-code-')) {\n if (!options.codeField) {\n options.codeField = menu_template.menu.name || 'code'\n }\n\n if (!options.dispField) {\n options.dispField = menu_template.menu.desc || undefined\n }\n }\n }\n\n return options\n }\n\n /**\n * @description 필터 폼에 검색 조건 필드 정의\n *****************************************\n * @param {HTMLElement} pageView 페이지\n * @param {Array} gridColumns 그리드 컬럼 설정\n * @returns\n */\n static setGridColumnSearchOption(pageView, gridColumns) {\n let searchConfig = pageView.searchConfig\n\n if (searchConfig) {\n searchConfig.forEach(config => {\n if (typeof config === 'string') {\n gridColumns\n .filter(col => col.name == config)\n .forEach(col => {\n col.filter = 'search'\n })\n } else if (typeof config === 'object') {\n gridColumns\n .filter(col => col.name == config.name)\n .forEach(col => {\n col.filter = config\n col.filter.type = col.type === 'datetime' && config.operator == 'eq' ? 'datetime-local' : col.type\n let defValue = col.filter.value\n let dateKeywords = ['today', 'year', 'month', 'date', 'hour', 'min', 'sec']\n\n if (\n defValue &&\n typeof defValue == 'string' &&\n dateKeywords.filter(x => defValue.startsWith(x)).length > 0\n ) {\n let defRes = []\n let dateFormat = { date: 'YYYY-MM-DD', datetime: 'YYYY-MM-DD HH:mm:ss' }\n let durationType = {\n today: 'day',\n year: 'year',\n month: 'month',\n date: 'day',\n hour: 'hour',\n min: 'minute',\n sec: 'second'\n }\n let defDates = defValue.split(',')\n\n defDates.forEach(x => {\n const todayMoment = moment()\n\n if (dateKeywords.includes(x)) {\n defRes.push(todayMoment.startOf(durationType[x]).format(dateFormat[col.type]))\n } else if (x.includes('-')) {\n let wordSplits = x.split('-')\n let key = wordSplits[0]\n let value = wordSplits[1]\n defRes.push(\n todayMoment\n .subtract(value, durationType[key])\n .startOf(durationType[key])\n .format(dateFormat[col.type])\n )\n } else if (x.includes('+')) {\n let wordSplits = x.split('+')\n let key = wordSplits[0]\n let value = wordSplits[1]\n defRes.push(\n todayMoment.add(value, durationType[key]).startOf(durationType[key]).format(dateFormat[col.type])\n )\n }\n })\n\n if (defRes.length > 0) col.filter.value = defRes.length == 1 ? defRes[0] : defRes\n }\n })\n }\n })\n }\n\n return gridColumns\n }\n\n /**\n * @description 컨텍스트 오브젝트 리턴\n **********************************\n * @param {Object} pageView\n * @returns {Object} 컨텍스트 오브젝트\n */\n static getContextObject(pageView) {\n let ctx =\n pageView && pageView.menuInfo\n ? {\n title: TermsUtil.tTitle(pageView.menuInfo.title),\n help: pageView.menuInfo.help || '',\n actions: [...MetaUiUtil.getContextButtons(pageView)]\n }\n : {}\n\n // export 버튼\n if (pageView.useButtonExport) {\n ctx.exportable = {\n name: ctx.title,\n data: pageView.export.bind(pageView)\n }\n }\n\n // import 버튼\n if (pageView.useButtonImport) {\n ctx.importable = {\n handler: pageView.import.bind(pageView)\n }\n }\n\n // Context\n return ctx\n }\n\n /**\n * @description 메뉴 컨텍스트에서 사용할 버튼 정보 추출\n **********************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {Array} 버튼 엘리먼트 리스트\n */\n static getContextButtons(pageView) {\n let buttonConfig = pageView.buttonConfig\n return ValueUtil.isEmpty(buttonConfig)\n ? []\n : buttonConfig\n .filter(b => b.name != 'export' && b.name != 'import' && b.name != 'add')\n .map(btn => {\n let {\n name = undefined,\n label = undefined,\n style = undefined,\n type = 'basic',\n action = undefined,\n logic = undefined\n } = btn\n\n if (ValueUtil.isEmpty(name)) {\n return { title: '-1' }\n }\n\n if (ValueUtil.isEmpty(label)) label = name\n if (ValueUtil.isEmpty(style)) style = name\n if (ValueUtil.isEmpty(action)) action = name\n\n let btnStylecss = ValueUtil.isNotEmpty(style)\n ? CommonButtonStyles[style] || {\n icon: style,\n emphasis: {\n raised: true,\n outlined: false,\n dense: false,\n danger: false\n }\n }\n : {}\n\n return {\n title: TermsUtil.tButton(label),\n action: MetaUiUtil.getButtonActionHandler(pageView, type, action, logic),\n ...btnStylecss\n }\n })\n .filter(btn => btn.title != '-1')\n }\n\n /**\n * @description element로 로드시 버튼 element를 container에 직접 추가\n ****************************************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {Array} 버튼 엘리먼트 리스트\n */\n static getContainerButtons(pageView) {\n let buttonConfig = pageView && pageView.buttonConfig ? pageView.buttonConfig : null\n return !buttonConfig\n ? []\n : buttonConfig\n .filter(b => b.name != 'add')\n .map(b => {\n let {\n name = undefined,\n label = undefined,\n style = undefined,\n type = 'basic',\n action = undefined,\n logic = undefined\n } = b\n\n if (ValueUtil.isEmpty(label)) label = name\n if (ValueUtil.isEmpty(style)) style = name\n if (ValueUtil.isEmpty(action)) action = name\n\n let btn = MetaUiUtil.createButtonElement(TermsUtil.tButton(label), style)\n btn.onclick = MetaUiUtil.getButtonActionHandler(pageView, type, action, logic)\n return btn\n })\n }\n\n /**\n * @description 버튼 엘리먼트를 생성\n ********************************\n * @param {String} buttonName\n * @param {String} style\n * @returns {HTMLElement} 버튼 엘리먼트\n */\n static createButtonElement(buttonName, style) {\n let btnStyle = CommonButtonStyles[style] || {\n icon: style,\n emphasis: {\n raised: true,\n outlined: false,\n dense: false,\n danger: false\n }\n }\n\n const { raised, outlined, dense, danger, icon } = btnStyle.emphasis\n\n const template = html`\n <button ?dense=${dense} ?raised=${raised} ?outlined=${outlined} ?danger=${danger}>\n <md-icon>${icon || 'done'}</md-icon>\n ${buttonName}\n </button>\n `\n\n const container = document.createElement('div')\n render(template, container)\n\n const element = container.firstElementChild\n return container.removeChild(element)\n }\n\n /**\n * @description 버튼과 연결할 핸들러를 리턴\n *************************************\n * @param {Object} pageView 화면\n * @param {String} type 버튼 유형 (기본, 커스텀, 그리드 버튼)\n * @param {String} action 버튼 명\n * @param {Object} logic 버튼 로직 (String || JSON)\n * @returns {Function} 버튼 클릭시 실행될 액션 핸들러\n */\n static getButtonActionHandler(pageView, type, action, logic) {\n if (type == 'basic') {\n if (pageView[action]) {\n return pageView[action].bind(pageView)\n }\n } else if (type == 'custom') {\n return () => MetaUiUtil.customButtonHandler(pageView, action, logic)\n }\n\n // 버튼과 연결된 함수가 없습니다.\n return () => {\n UiUtil.showAlertPopup('title.warning', 'text.button_bind_func_is_not_exist', 'info', 'confirm')\n }\n }\n\n /**\n * @description 그리스트 버튼 (그리드에 추가된 버튼)에 대한 커스텀 액션 분기\n ***************************************************************\n * @param {Object} pageView\n * @param {Object} actionInfo\n * @param {Object} record\n */\n static async gristButtonHandler(pageView, actionInfo, record) {\n let action = ValueUtil.getParams(actionInfo, 'logic')\n let buttonName = ValueUtil.getParams(actionInfo, 'name')\n let eventType = ValueUtil.getParams(action, 'type')\n\n // 폼 팝업\n if (eventType === 'form') {\n // 상세 폼 뷰는 기본 정의된 로직으로 셋팅\n action.tagname = 'meta-form-element'\n action.location = 'pages/meta-form-element.js'\n action.parent_field = 'id'\n await MetaUiUtil.commonButtonOpenPopup(pageView, action, record)\n\n // 다른 객체로 파라미터 전달\n } else if (eventType === 'pass_param') {\n MetaUiUtil.gristButtonPassParam(pageView, action, record)\n\n // 페이지 이동\n } else if (eventType === 'page') {\n let passParams = action.param_field ? {} : record\n\n if (action.param_field) {\n Object.keys(record)\n .filter(x => Object.keys(action.param_field).includes(x))\n .map(x => {\n if (Object.keys(action.param_field).includes(x)) {\n let data = record[x]\n passParams[action.param_field[x]] =\n Array.isArray(data) === false && typeof data === 'object' && data.id ? { id: data.id } : data\n }\n })\n }\n\n UiUtil.pageNavigate(action.url, [passParams])\n\n // 팝업 실행\n } else if (eventType === 'popup') {\n await MetaUiUtil.commonButtonOpenPopup(pageView, action, record)\n\n // 서비스 호출\n } else if (eventType === 'graphql') {\n await MetaUiUtil.commonButtonCallService(pageView, action, record, record)\n\n // 시나리오 호출\n } else if (eventType === 'scenario') {\n await MetaUiUtil.commonButtonCallScenario(pageView, buttonName, action, record)\n\n // 설정된 조건에 따라 커스텀 로직 처리\n } else if (eventType === 'value_reference') {\n await MetaUiUtil.gristButtonValueReference(pageView, action, record)\n\n // 첨부파일 다운로드 처리\n } else if (eventType === 'download') {\n MetaUiUtil.downloadFile(action, record)\n }\n }\n\n /**\n * @description 폼 화면에서의 커스텀 버튼에 대한 액션\n *********************************************\n * @param {Object} pageView\n * @param {String} buttonName\n * @param {Object} logic\n */\n static async formScreenCustomButtonHandler(pageView, buttonName, logic) {\n if (ValueUtil.isEmpty(logic)) return\n\n // TODO 현재 폼 엘리먼트에 검색 폼 기능이 없으므로 추후 추가 필요 && gristButtonHandler 함수와 거의 동일하게 로직이 처리되어야 하는데 로직이 약간 다름...\n let formData = pageView.currentData\n let eventType = ValueUtil.getParams(logic, 'type')\n let paramInfo = ValueUtil.getParams(logic, 'param')\n let params = { form: paramInfo && paramInfo.includes('form_changed') ? pageView.patchData() : formData }\n\n /**\n * data 정보가 있는 경우 폼 데이터로 부터 아래 구조대로 변형 처리\n * data: {\n * \"id\": \"$id\",\n * \"name\": \"$name\",\n * \"description\": \"$description\",\n * \"activeFlag\": true,\n * \"cuFlag\": \"M\"\n * }\n */\n let dataSchema = ValueUtil.getParams(logic, 'data')\n // data schema (데이터 형태) 추출\n if (ValueUtil.isNotEmpty(dataSchema)) {\n params.form = ValueUtil.replaceVariableObject(dataSchema, formData)\n }\n\n // 페이지 이동\n if (eventType === 'page') {\n UiUtil.pageNavigate(logic.url, [params.form])\n\n // 팝업 오픈\n } else if (eventType === 'popup') {\n await MetaUiUtil.commonButtonOpenPopup(pageView, logic, params)\n\n // 서비스 호출\n } else if (eventType === 'graphql') {\n await MetaUiUtil.commonButtonCallService(pageView, logic, params.filter, params.form)\n\n // 시나리오 호출\n } else if (eventType === 'scenario') {\n await MetaUiUtil.commonButtonCallScenario(pageView, buttonName, logic, params)\n }\n }\n\n /**\n * @description 그리드 화면에서의 커스텀 버튼에 대한 액션\n ************************************************\n * @param {Object} pageView 화면\n * @param {String} buttonName 버튼 명\n * @param {Object} logic 버튼 커스텀 로직 JSON\n */\n static async gristScreenCustomButtonHandler(pageView, buttonName, logic) {\n if (ValueUtil.isEmpty(logic)) return\n\n let grist = pageView.grist\n let filterForm = pageView.filterForm\n\n let eventType = ValueUtil.getParams(logic, 'type')\n let paramInfo = ValueUtil.getParams(logic, 'param')\n let includeGristParams = paramInfo.filter(p => p.startsWith('grist'))\n\n // 오류 메시지 처리\n if (ValueUtil.isNotEmpty(includeGristParams)) {\n // 그리스트 존재 여부\n if (!grist) {\n // 그리드가 없습니다.\n UiUtil.showAlertPopup('title.info', 'text.grid_is_not_exist', 'info', 'confirm')\n return\n }\n\n // 그리스트 데이터 존재 여부 (편집중 데이터도 체크)\n if ((grist?.data?.records || []).length == 0 && (grist?.dirtyData?.records || []).length == 0) {\n // 비어있는 그리드 입니다.\n UiUtil.showAlertPopup('title.info', 'text.grid_data_is_empty', 'info', 'confirm')\n return\n }\n\n if (paramInfo.includes('grist_one') || paramInfo.includes('grist_selected')) {\n // 선택된 행이 있는지 확인\n let selectedRows = grist.selected\n\n if (ValueUtil.isEmpty(selectedRows)) {\n // 선택된 항목이 없습니다.\n UiUtil.showAlertPopup('text.nothing_selected', 'text.there_is_no_selected_items', 'info', 'confirm')\n return\n }\n\n if (paramInfo.includes('grist_one')) {\n // 하나의 행만 선택 되었는지 확인\n if (selectedRows.length > 1) {\n // 하나의 항목만 선택해주세요.\n UiUtil.showAlertPopup('title.info', 'text.please_select_only_one', 'info', 'confirm')\n return\n }\n }\n }\n }\n\n let params = {}\n\n if (paramInfo.includes('filter')) {\n if (!filterForm) {\n // 서치폼이 없습니다.\n UiUtil.showAlertPopup('title.info', 'text.search_form_is_not_exist', 'info', 'confirm')\n return\n }\n\n let filterValues = filterForm ? await filterForm.getQueryFilters() : []\n params['filter'] = filterValues\n }\n\n if (paramInfo.includes('grist_all')) {\n params['grist'] = grist.data.records\n } else if (paramInfo.includes('grist_one')) {\n params['grist'] = grist.selected[0]\n } else if (paramInfo.includes('grist_selected')) {\n params['grist'] = grist.selected\n } else if (paramInfo.includes('grist_changed')) {\n let changedList = ServiceUtil.patchesForUpdateMultiple(grist)\n if (!changedList) {\n return\n }\n\n // 화면이 팝업 화면이라면 부모 ID를 레코드에 추가한다.\n let pId = pageView.parent_id ? pageView.parent_id : null\n let parentIdField = ValueUtil.getParams(logic, 'parent_field')\n\n changedList.forEach(item => {\n if (pId && parentIdField && !item[parentIdField]) {\n item[parentIdField] = pId\n }\n })\n\n params['grist'] = changedList\n }\n\n // 페이지 이동\n if (eventType === 'page') {\n let records = Array.isArray(params['grist']) ? params['grist'] : [params['grist']]\n let passParams = logic.param_field ? null : records\n\n if (logic.param_field) {\n passParams = records.map(record => {\n let recordParams = {}\n Object.keys(record)\n .filter(x => Object.keys(logic.param_field).includes(x))\n .map(x => {\n if (Object.keys(logic.param_field).includes(x)) {\n let data = record[x]\n recordParams[logic.param_field[x]] =\n Array.isArray(data) === false && typeof data === 'object' && data.id ? { id: data.id } : data\n }\n })\n return recordParams\n })\n }\n\n UiUtil.pageNavigate(logic.url, passParams)\n\n // 팝업 오픈\n } else if (eventType === 'popup') {\n let convParam = {\n ...(params['grist'] ? params['grist'] : {}),\n ...(params['filter'] ? params['filter'] : {})\n }\n await MetaUiUtil.commonButtonOpenPopup(pageView, logic, convParam)\n\n // 서비스 호출\n } else if (eventType === 'graphql') {\n let filterParam = params['filter'] ? params['filter'] : {}\n let dataParams = params['grist'] ? params['grist'] : filterParam\n await MetaUiUtil.commonButtonCallService(pageView, logic, filterParam, dataParams)\n\n // 시나리오 호출\n } else if (eventType === 'scenario') {\n await MetaUiUtil.commonButtonCallScenario(pageView, buttonName, logic, params)\n\n // 첨부파일 다운로드 처리\n } else if (eventType == 'download' && paramInfo.includes('grist_one')) {\n MetaUiUtil.downloadFile(logic, params['grist'])\n }\n }\n\n /**\n * @description 커스텀 버튼에 대한 액션 처리\n **************************************\n * @param {Object} pageView 화면\n * @param {String} buttonName 버튼 명\n * @param {Object} logic 커스텀 버튼 로직 JSON\n */\n static async customButtonHandler(pageView, buttonName, logic) {\n // 폼 화면의 버튼 핸들링인지 그리드 계열 화면의 버튼 핸들링 인지 구분\n if (pageView.localName.startsWith('meta-form')) {\n await MetaUiUtil.formScreenCustomButtonHandler(pageView, buttonName, logic)\n } else {\n await MetaUiUtil.gristScreenCustomButtonHandler(pageView, buttonName, logic)\n }\n }\n\n /**\n * @description 파라미터 전달 버튼 처리\n **********************************\n * @param {Object} pageView\n * @param {Object} action\n * @param {Object} record\n */\n static gristButtonPassParam(pageView, action, record) {\n // 파라미터 전달 정보\n let passInfoAll = action.pass_field\n let elementTagName = pageView.tagName.toLowerCase()\n let pageElement = pageView\n let passInfo =\n elementTagName.startsWith('meta-grist-tab-') || elementTagName.startsWith('meta-master-detail-')\n ? passInfoAll.detail\n ? { ...passInfoAll } // 그리스트 탭 페이지는 하단으로 보내는 이벤트만 허용\n : { detail: { ...passInfoAll } }\n : { ...passInfoAll } // tab+tab or tab+etc or main-tab\n\n Object.keys(passInfo).forEach(tab => {\n if (tab == 'master') {\n pageElement = pageView.rootElement.masterElement\n } else if (tab == 'detail') {\n pageElement = pageView.rootElement ? pageView.rootElement.detailElement : pageView.detailElement\n } else if (tab == 'self') {\n pageElement = pageView\n }\n\n if (pageElement) {\n if (pageElement.tagName.toLowerCase().startsWith('meta-tab-element')) {\n // Object Key로 Element 검색.\n Object.keys(passInfo[tab]).forEach(elementId => {\n let targetElement = pageElement.shadowRoot.querySelector(`#${elementId}`)\n // 상위 데이터 ID\n if (record.id) {\n targetElement.setParentId(record.id)\n }\n\n // 대상 엘리먼트에 매치할 필드 정보\n let matchInfo = passInfo[tab][elementId]\n\n // 필드 정보 Loop tField : target , sField : source\n Object.keys(matchInfo).forEach(tField => {\n let sField = matchInfo[tField]\n // param 값이 * 이면 record 전체\n let param = sField === '*' ? record : record[sField]\n // tElement.tField에 파라미터 set\n targetElement[tField] = param\n })\n })\n } else {\n let targetElement = pageElement\n // 상위 데이터 ID\n if (record.id) {\n targetElement.setParentId(record.id)\n }\n\n // 대상 엘리먼트에 매치할 필드 정보\n let matchInfo = passInfo[tab]\n\n // 필드 정보 Loop tField : target , sField : source\n Object.keys(matchInfo).forEach(tField => {\n let sField = matchInfo[tField]\n // param 값이 * 이면 record 전체\n let param = sField === '*' ? record : record[sField]\n // tElement.tField에 파라미터 set\n targetElement[tField] = param\n })\n }\n }\n })\n }\n\n /**\n * @description 팝업 오픈 버튼 처리\n ********************************\n * @param {Object} pageView\n * @param {Object} action\n * @param {Object} record\n */\n static async commonButtonOpenPopup(pageView, action, record) {\n // 타이틀 변환\n let title = TermsUtil.tTitle(action.title)\n\n // 타이틀 상세 필드 정의 확인\n if (ValueUtil.isNotEmpty(action.title_detail)) {\n title = `${title}(${ValueUtil.getParams(record, ...action.title_detail.split('.'))})`\n }\n\n // closeCallback\n let closeCallback =\n action.after && typeof action.after === 'string' && action.after === 'fetch' && pageView && pageView.fetch\n ? pageView.fetch.bind(pageView)\n : undefined\n\n // 팝업 오픈\n UiUtil.openDynamicPopup(title, action, record, closeCallback)\n }\n\n /**\n * @description 서비스 호출 버튼 처리\n *************************************\n * @param {Object} pageView 페이지 뷰\n * @param {Object} action 액션\n * @param {Object or Array} filterParam 필터 파라미터\n * @param {Object or Array} records 선택 레코드\n */\n static async commonButtonCallService(pageView, action, filterParam, records) {\n // Graphql 서비스 호출\n let response = await ServiceUtil.callService(pageView, action, filterParam, records)\n\n // 후 처리 액션 처리\n if (!response.errors && action.after && ValueUtil.isNotEmpty(action.after)) {\n let afterParams = null\n\n if (typeof action.after === 'object') {\n afterParams = Array.isArray(response) ? response : [response]\n }\n\n await MetaUiUtil.afterActionHandler(pageView, action, afterParams)\n }\n }\n\n /**\n * @description 시나리오 호출 버튼 처리\n ***********************************\n * @param {Object} pageView\n * @param {String} buttonName\n * @param {Object} action\n * @param {Object or Array} params\n */\n static async commonButtonCallScenario(pageView, buttonName, action, params) {\n // 시나리오 호출\n let response = await ServiceUtil.callScenario(buttonName, action.name, params)\n\n // 처리 중 에러가 발생했거나 시나리오 호출 후 처리가 없으면 return\n if (!response.errors && action.after && ValueUtil.isNotEmpty(action.after)) {\n let afterParams = null\n\n // after가 오브젝트이면 후 처리 로직\n if (typeof action.after === 'object') {\n let after = action.after\n afterParams = ValueUtil.getParams(response.data.runScenario.result, ...after.result_name.split('.'))\n\n if (Array.isArray(afterParams) == false) {\n afterParams = [afterParams]\n }\n }\n\n // 후 처리 처리\n await MetaUiUtil.afterActionHandler(pageView, action, afterParams)\n }\n }\n\n /**\n * @description 버튼 처리 후 처리\n *******************************\n * @param {Object} pageView\n * @param {Object} action\n * @param {Object or Array} afterParams\n */\n static async afterActionHandler(pageView, action, afterParams) {\n // after가 오브젝트이면 후 처리 로직\n if (typeof action.after === 'object') {\n let after = action.after\n\n // 상세 폼 뷰 팝업 실행\n if (after.type === 'form') {\n after.tagname = 'meta-form-element'\n after.location = 'pages/meta-form-element.js'\n after.parent_field = 'id'\n afterParams = afterParams[0]\n await MetaUiUtil.commonButtonOpenPopup(pageView, after, afterParams)\n\n // 페이지 이동 처리\n } else if (after.type === 'page') {\n let records = afterParams\n let passParams = after.param_field ? null : records\n\n if (after.param_field) {\n passParams = records.map(record => {\n let recordParams = {}\n Object.keys(record)\n .filter(x => Object.keys(after.param_field).includes(x))\n .map(x => {\n if (Object.keys(after.param_field).includes(x)) {\n let data = record[x]\n recordParams[after.param_field[x]] =\n Array.isArray(data) === false && typeof data === 'object' && data.id ? { id: data.id } : data\n }\n })\n return recordParams\n })\n }\n\n UiUtil.pageNavigate(after.url, passParams)\n\n // 다른 객체로 파라미터 전달\n } else if (after.type === 'pass_param') {\n afterParams = afterParams[0]\n MetaUiUtil.gristButtonPassParam(pageView, after, afterParams)\n\n // 팝업 오픈\n } else if (after.type === 'popup') {\n afterParams = afterParams[0]\n await MetaUiUtil.commonButtonOpenPopup(pageView, after, afterParams)\n\n // 설정된 조건에 따라 커스텀 로직 처리\n } else if (after.type === 'value_reference') {\n afterParams = afterParams[0]\n await MetaUiUtil.gristButtonValueReference(pageView, after, afterParams)\n }\n\n // after가 fetch이면 리프레쉬\n } else if (action.after === 'fetch') {\n pageView.fetch()\n\n // after가 close이면 팝업 닫기\n } else if (action.after == 'close') {\n UiUtil.closePopupBy(pageView)\n }\n }\n\n /**\n * @description UI에서 파일 다운로드 처리\n *************************************\n * @param {Object} config 설정\n * @param {Object} record 레코드\n */\n static downloadFile(config, record) {\n let attachmentRoot = config.attachment_root\n let attachColumn = config.attachment_column\n let downloadColumn = config.download_name_column ? config.download_name_column : null\n\n if (!attachColumn) {\n throw new Error('attachmentColumn 정보가 없습니다.')\n }\n\n let attachColumns = attachColumn.split('.')\n let fileData = record[attachColumns[0]]\n let fileName = attachColumns.length == 1 ? fileData : fileData[attachColumns[1]]\n let downloadName = downloadColumn ? record[downloadColumn] : fileName\n\n const link = document.createElement('a')\n link.setAttribute('href', `./${attachmentRoot}/${fileName}`)\n link.setAttribute('download', downloadName)\n document.body.appendChild(link)\n link.click()\n link.parentNode.removeChild(link)\n }\n\n /**\n * @description 설정된 조건과 record 의 값을 비교. 로직 처리\n ****************************************************\n * @param {Object} pageView\n * @param {Object} config\n * @param {Object} record\n */\n static async gristButtonValueReference(pageView, config, record) {\n // 지정된 조건 Loop\n for (let idx = 0; idx < config.relation.length; idx++) {\n let relation = config.relation[idx]\n let useRelation = ValueUtil.compareObjectValues(\n relation,\n record,\n Object.keys(relation).filter(key => key != 'logic')\n )\n if (useRelation === true) {\n // 조건 체크 후 버튼 핸들러 호출\n await MetaUiUtil.gristButtonHandler(pageView, relation, record)\n }\n }\n }\n\n /**\n * @description 그리스트 Hidden 컬럼 설정\n *************************************\n * @param {String} type\n * @param {String} name\n * @returns {Object} 그리스트 Hidden 컬럼 설정\n */\n static getGristHiddenColumnConfig(type, name) {\n return {\n type: type,\n name: name,\n sortable: false,\n hidden: true\n }\n }\n\n /**\n * @description 그리스트 기본 컬럼 설정\n ***********************************\n * @param {String} type\n * @param {String} name\n * @param {String} align\n * @param {Boolean} editable\n * @param {Boolean} sortable\n * @param {Number} width\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristColumnConfig(type, name, align, editable, sortable, width) {\n let dispName = TermsUtil.tLabel(name)\n return {\n type: type,\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: editable\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: type,\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 컬럼 설정\n *******************************\n * @param {String} type\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} editable\n * @param {Boolean} sortable\n * @param {Number} width\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristColumnConfig2(type, name, displayName, align, editable, sortable, width) {\n let dispName = TermsUtil.tLabel(displayName)\n return {\n type: type,\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: editable\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: type,\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 컬럼 설정\n *******************************\n * @param {String} type\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} editable\n * @param {Boolean} sortable\n * @param {Boolean} mandatory\n * @param {Number} width\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristColumnConfig3(type, name, displayName, align, editable, sortable, mandatory, width) {\n let dispName = TermsUtil.tLabel(displayName)\n return {\n type: type,\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: editable,\n mandatory: mandatory\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: type,\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 Selector 컬럼 설정\n ***************************************\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} sortable\n * @param {Number} width\n * @param {Boolean} mandatory\n * @param {Array} optionValues\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static getGristSelectorColumnConfig(name, displayName, align, sortable, width, mandatory, optionValues) {\n let dispName = TermsUtil.tLabel(displayName)\n return {\n type: 'select',\n name: name,\n header: dispName,\n record: {\n align: align,\n editable: true,\n mandatory: mandatory,\n options: optionValues\n },\n sortable: sortable,\n width: width,\n imex: {\n width: Math.floor(width / 6),\n header: dispName,\n type: 'string',\n key: name\n }\n }\n }\n\n /**\n * @description 그리스트 Code Selector 컬럼 설정\n ********************************************\n * @param {String} name\n * @param {String} displayName\n * @param {String} align\n * @param {Boolean} sortable\n * @param {Number} width\n * @param {Boolean} mandatory\n * @param {String} codeName\n * @returns {Object} 그리스트 기본 컬럼 설정\n */\n static async getGristCodeSelectorColumnConfig(name, displayName, align, sortable, width, mandatory, codeName) {\n let optionValue = await ServiceUtil.getCodeSelectorData(codeName)\n return MetaUiUtil.getGristSelectorColumnConfig(name, displayName, align, sortable, width, mandatory, optionValue)\n }\n\n /**\n * @description 그리스트 검색 편집기 설정\n ************************************\n * @param {String} name\n * @param {String} type\n * @param {String} label\n * @param {String} operator\n * @param {Array} optionValues\n * @returns {Object} 그리스트 검색 편집기 설정\n */\n static getGristSearchColumnConfig(name, type, label, operator, optionValues) {\n let dispName = TermsUtil.tLabel(label)\n let column = {\n name: name,\n type: type,\n label: dispName,\n operator: operator,\n imex: {\n width: 16,\n header: dispName,\n type: type,\n key: name\n }\n }\n\n if (optionValues) {\n column.options = optionValues\n }\n\n return column\n }\n\n /**\n * @description 그리스트 검색 코드 편집기 설정\n ***************************************\n * @param {String} name 검색 필드 명\n * @param {String} type 검색 편집기 유형\n * @param {String} label 검색 필드 라벨명\n * @param {String} operator 검색 연산자\n * @param {String} codeName 코드 이름\n * @returns {Object} 그리스트 검색 코드 편집기 설정\n */\n static async getGristSearchCodeColumnConfig(name, type, label, operator, codeName) {\n let optionValues = await ServiceUtil.getCodeSelectorData(codeName)\n return MetaUiUtil.getGristSearchColumnConfig(name, type, label, operator, optionValues)\n }\n\n /**\n * @description 기본 컨텍스트 버튼이 아닌 커스텀 버튼 컨테이너 스타일\n *********************************************************\n * @returns {Array} 커스텀 버튼 컨테이너 CSS 리턴\n */\n static getCustomButtonContainerStyles() {\n return [ButtonContainerStyles]\n }\n\n /**\n * @description 그리스트 강조 스타일 리턴\n ************************************\n * @returns {Array} 그리스트 강조 스타일 CSS\n */\n static getGristEmphasizedStyles() {\n return [\n css`\n :host {\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n `\n ]\n }\n\n /**\n * @description 기본 그리스트 스타일 리턴\n ************************************\n * @returns {Array} 기본 그리스트 스타일 CSS 리턴\n */\n static getBasicGristStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 그리스트 탭 스타일 리턴\n **************************************\n * @returns {Array} 기본 그리스트 탭 스타일 CSS 리턴\n */\n static getBasicGristTabStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 마스터 디테일 스타일 리턴\n ****************************************\n * @returns {Array} 기본 마스터 디테일 스타일 CSS 리턴\n */\n static getBasicMasterDetailStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 TAB 디테일 스타일 리턴\n **************************************\n * @returns {Array} 기본 TAB 디테일 스타일 CSS 리턴\n */\n static getBasicTabDetailStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 MAIN TAB 스타일 리턴\n **************************************\n * @returns {Array} 기본 MAIN TAB 스타일 CSS 리턴\n */\n static getBasicMainTabStyles() {\n return [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `,\n ...MetaUiUtil.getGristEmphasizedStyles(),\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 마스터 디테일 그리스트 스타일 리턴\n *********************************************************\n * @param {String} masterDetailType top-down / left-right\n * @returns {Array} 마스터 디테일 그리스트 스타일 CSS\n */\n static getBasicMasterDetailGristStyle(masterDetailType) {\n if (masterDetailType == 'top-down') {\n return MetaUiUtil.getMasterDetailTopDownGristStyle()\n } else {\n return MetaUiUtil.getMasterDetailLeftRightGristStyle()\n }\n }\n\n /**\n * @description top-down 형태의 마스터 디테일 그리스트 스타일 리턴\n ************************************************************\n * @returns {Array} top-down 형태의 마스터 디테일 그리스트 스타일 CSS\n */\n static getMasterDetailTopDownGristStyle() {\n return [\n ButtonContainerStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: auto;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n grid-template-rows: 50% 50%;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `\n ]\n }\n\n /**\n * @description left-rigth 형태의 마스터 디테일 그리스트 스타일 리턴\n **************************************************************\n * @returns {Array} left-rigth 형태의 마스터 디테일 그리스트 스타일 CSS\n */\n static getMasterDetailLeftRightGristStyle() {\n return [\n ButtonContainerStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: auto;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n grid-template-columns: 50% 50%;\n }\n\n .container_detail {\n background-color: var(--md-sys-color-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `\n ]\n }\n\n /**\n * @description 기본 폼 스타일 리턴\n ************************************\n * @returns {Array} 기본 폼 스타일 CSS 리턴\n */\n static getBasicFormStyles() {\n return [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .container {\n display: grid;\n grid-auto-rows: min-content;\n grid-gap: var(--record-view-gap);\n padding: var(--record-view-padding);\n overflow-y: auto;\n height: 100%;\n border-bottom: var(--record-view-border-bottom);\n }\n\n .root_container {\n display: flex;\n flex: 1;\n flex-direction: column;\n padding: var(--record-view-padding);\n overflow-y: auto;\n height: 100%;\n border-bottom: var(--record-view-border-bottom);\n }\n\n .content_container {\n display: grid;\n grid-auto-rows: min-content;\n grid-gap: var(--record-view-gap);\n padding: var(--record-view-padding);\n }\n\n h2 {\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--md-sys-color-secondary);\n margin: var(--grist-title-margin);\n padding-bottom: var(--grist-title-with-grid-padding);\n padding-top: var(--grist-title-with-grid-padding);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n label {\n display: flex;\n align-items: center;\n position: relative;\n text-transform: capitalize;\n\n padding: var(--record-view-item-padding);\n border-bottom: var(--record-view-border-bottom);\n font: var(--record-view-label-font);\n color: var(--record-view-label-color);\n }\n\n label md-icon {\n display: none;\n }\n\n label[editable] md-icon {\n --md-icon-size: var(--record-view-label-icon-size);\n display: inline-block;\n opacity: 0.5;\n }\n\n ox-grid-field {\n border-top: none;\n border-bottom: var(--record-view-border-bottom);\n font: var(--record-view-font);\n color: var(--record-view-color);\n background-color: transparent;\n margin-right: 10px;\n }\n\n ox-grid-field[editing='true'] {\n border-bottom: var(--record-view-edit-border-bottom);\n }\n `,\n ...MetaUiUtil.getCustomButtonContainerStyles()\n ]\n }\n\n /**\n * @description 기본 탭 스타일 리턴\n ************************************\n * @returns {Array} 기본 탭 스타일 CSS 리턴\n */\n static getBasicTabStyles() {\n return [\n css`\n :host {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n\n .tabs {\n display: flex;\n padding: 0 0 0 var(--spacing-medium);\n border-bottom: 1px solid var(--md-sys-color-primary);\n }\n\n .tab {\n background-color: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n margin-top: var(--spacing-medium);\n padding: var(--spacing-small) var(--spacing-large) 0 var(--spacing-large);\n border-radius: 9px 9px 0 0;\n border-right: 1px solid rgba(0, 0, 0, 0.4);\n text-transform: capitalize;\n opacity: 0.7;\n font-size: 15px;\n cursor: pointer;\n }\n\n .tab[activate] {\n background-color: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n box-shadow: 2px -2px 2px 0px rgba(0, 0, 0, 0.15);\n opacity: 1;\n font-weight: bold;\n }\n\n .tab > md-icon {\n width: 15px;\n height: 20px;\n padding: 0;\n margin: 0;\n --md-icon-size: 15px;\n vertical-align: middle;\n }\n\n .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: var(--md-sys-color-surface);\n border-radius: 0 var(--border-radius) var(--border-radius) var(--border-radius);\n border: var(--border-dim-color);\n border-width: 0 1px 1px 1px;\n box-shadow: var(--box-shadow);\n overflow: auto;\n }\n\n .tab-contents {\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: overlay;\n background-color: var(--md-sys-color-background);\n }\n `\n ]\n }\n\n /**\n * @description 그리드 설정에 버튼 이름이 buttonName인 버튼이 있는지 체크\n **************************************************************\n * @param {Object} buttonConfig 버튼 설정\n * @param {String} buttonName 버튼 명\n * @returns\n */\n static isButtonExist(buttonConfig, buttonName) {\n let button = buttonConfig\n ? buttonConfig.find(b => {\n return b.name == buttonName\n })\n : null\n return button ? true : false\n }\n\n /**\n * @description 그리드 설정에 버튼 이름이 buttonName인 버튼이 있는지 체크\n **************************************************************\n * @param {Object} gridConfig 그리드 설정\n * @param {String} buttonName 버튼 명\n * @returns\n */\n static isGridButtonExist(gridConfig, buttonName) {\n let button =\n gridConfig && gridConfig.button\n ? gridConfig.button.find(b => {\n return b.name == buttonName\n })\n : null\n return button ? true : false\n }\n\n /**\n * @description 그리드 설정에서 셀렉트 컬럼을 추출\n *******************************************\n * @param {Array} gridColumns 그리드 컬럼 설정\n * @returns {String} 셀렉트 필드 정보\n */\n static getSelectColumns(gridColumns) {\n let fields = ''\n\n gridColumns\n .filter(x => x.type != 'gutter')\n .forEach(c => {\n fields += '\\n'\n fields += ['meta-object-selector', 'object', 'resource-object'].includes(c.type)\n ? `${c.name}\\n{${MetaUiUtil.getObjctColumnSelectFields(c)}}`\n : c.type == 'board'\n ? `${c.name}\\n{${'\\nid\\nname\\nthumbnail'}}`\n : c.name\n })\n\n return fields\n }\n\n /**\n * Object 타입의 컬럼에 대한 셀렉트 필드 추출 후 리턴\n ********************************************\n * @param {Object} gridCol\n * @returns {String} Object 타입의 필드 문자열\n */\n static getObjctColumnSelectFields(gridCol) {\n let colStr = ''\n\n if (\n ValueUtil.isNotEmpty(gridCol.record) &&\n ValueUtil.isNotEmpty(gridCol.record.options) &&\n ValueUtil.isNotEmpty(gridCol.record.options.select)\n ) {\n // 설정에 정의가 되어 있으면\n gridCol.record.options.select.forEach(x => {\n if (x.name && x.name !== '') {\n if (['meta-object-selector', 'object', 'resource-object'].includes(x.type)) {\n colStr += `\\n${x.name} { ${MetaUiUtil.getObjctColumnSelectFields(x)} \\n }`\n } else {\n colStr += `\\n${x.name}`\n }\n }\n })\n }\n\n if (colStr == '') {\n // 설정에 정의가 되어 있지 않으면 기본 id, name, description 필드\n colStr += '\\nid\\nname\\ndescription'\n }\n\n return colStr\n }\n\n /**\n * @description pageView의 그리드 정보로 기본 그리스트 Html을 생성하여 리턴\n *****************************************************************\n * @param {String} pageView 페이지 뷰\n * @returns {HTMLElement} 그리스트 HTML\n */\n static getBasicGristHtml(pageView) {\n let gristConfigSet = pageView.gristConfigSet\n if (!gristConfigSet) {\n return html``\n } else {\n let gristElementId = pageView.gristId ? pageView.gristId : 'ox-grist'\n let gridMode = pageView.gridMode\n return html`\n <ox-grist\n id=${gristElementId}\n .config=${gristConfigSet}\n .mode=${gridMode}\n auto-fetch\n .personalConfigProvider=${pageView.getPagePreferenceProvider(gristElementId)}\n .fetchHandler=${pageView.fetchHandler.bind(pageView)}\n >\n ${MetaUiUtil.getGridDetailHtml(pageView)}\n\n <ox-grist-personalizer slot=\"setting\"></ox-grist-personalizer>\n </ox-grist>\n `\n }\n }\n\n /**\n * @description pageView의 폼 정보로 기본 폼 Html을 생성하여 리턴\n *********************************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 폼을 HTML\n */\n static getBasicFormHtml(pageView) {\n if (!pageView) return html``\n if (!pageView.formConfigSet) return html``\n\n let cols = pageView.formConfigSet\n let record = pageView.record || {}\n let columns = cols.filter(x => x.hidden == false)\n\n // 폼 렌더링 옵션 여부\n if (ValueUtil.isEmpty(pageView.formRenderConfig)) {\n return MetaUiUtil.getBasicFormHtmlNoOption(pageView, columns, record)\n } else {\n return MetaUiUtil.getBasicFormHtmlOnOption(pageView, columns, record)\n }\n }\n\n /**\n * @description pageView의 폼 정보로 폼렌더링 옵션을 적용한 폼 Html을 생성하여 리턴\n ***********************************************************************\n * @param {Object} pageView 페이지 뷰\n * @param {Array} columns 구성 컬럼\n * @param {Object} record 표현 데이터\n * @returns {HTMLElement} 폼을 HTML\n */\n static getBasicFormHtmlOnOption(pageView, columns, record) {\n let renderConfig = pageView.formRenderConfig\n\n return html`\n <div class=\"root_container\">\n ${renderConfig.map(config => {\n let renderCols = []\n\n config.column_list.forEach(x => {\n let columnInfo = columns.filter(col => x == col.name) || []\n\n if (columnInfo.length > 0) {\n renderCols.push(columnInfo[0])\n }\n })\n\n // 그리드 구분 스타일\n let divStyle = 'height:auto;grid-template-columns:'\n for (let i = 0; i < config.column; i++) {\n divStyle += ' 1fr 2fr'\n }\n\n divStyle += ';'\n let rowIndex = 0\n return html`\n <h2><md-icon>list_alt</md-icon>${TermsUtil.tTitle(config.display)}</h2>\n <div id=\"content_container\" class=\"content_container\" style=\"${divStyle}\">\n ${renderCols.map(column => {\n let { editable = false, mandatory = false } = column.record\n let dirtyFields = record['__dirtyfields__'] || {}\n\n return html`\n <label ?editable=${editable}\n ><span>${mandatory ? '*' : ''}${column.header_txt}</span>\n ${editable ? html`<md-icon>edit</md-icon>` : ''}\n </label>\n <ox-grid-field\n .rowIndex=${rowIndex}\n .column=${column}\n .record=${record}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n })}\n </div>\n `\n })}\n </div>\n ${pageView.isPage ? html`` : MetaUiUtil.getButtonContainer(pageView)}\n `\n }\n\n /**\n * @description pageView의 폼 정보로 기본 폼 Html을 생성하여 리턴\n *********************************************************\n * @param {Object} pageView 페이지 뷰\n * @param {Array} columns 구성 컬럼\n * @param {Object} record 표현 데이터\n * @returns {HTMLElement} 폼을 HTML\n */\n static getBasicFormHtmlNoOption(pageView, columns, record) {\n // 그리드 구분 스타일\n let divStyle = 'grid-template-columns:'\n if (!pageView.column || pageView.column == 0) {\n pageView.column = 1\n }\n\n pageView.column = parseInt((pageView.etcConfig || {}).default_form_column || pageView.column)\n\n for (let i = 0; i < pageView.column; i++) {\n divStyle += ' 1fr 2fr'\n }\n\n divStyle += ';'\n let rowIndex = 0\n\n return html`\n <div id=\"container\" class=\"container\" style=\"${divStyle}\">\n ${columns.map(column => {\n let { editable = false, mandatory = false } = column.record\n let dirtyFields = record['__dirtyfields__'] || {}\n\n return html`\n <label ?editable=${editable}\n ><span>${mandatory ? '*' : ''}${column.header_txt}</span>\n ${editable ? html`<md-icon>edit</md-icon>` : ''}\n </label>\n <ox-grid-field\n .rowIndex=${rowIndex}\n .column=${column}\n .record=${record}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n })}\n </div>\n ${pageView.isPage ? html`` : MetaUiUtil.getButtonContainer(pageView)}\n `\n }\n\n /**\n * @description pageView의 탭 정보로 기본 탭 Html을 생성하여 리턴\n **********************************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getBasicTabHtml(pageView) {\n if (!pageView) return html``\n if (!pageView.tabRenderConfig) return html``\n\n let tabs = pageView.tabRenderConfig\n if (!pageView.currentTabKey) pageView.currentTabKey = tabs[0]?.name || undefined\n\n return html`\n <div class=\"tabs\">\n ${tabs.map(tab => {\n let label = TermsUtil.tLabel(tab.display)\n let key = tab.name\n\n return html`\n <div\n class=\"tab\"\n ?activate=\"${key === pageView.currentTabKey}\"\n @click=\"${() => (pageView.currentTabKey = key)}\"\n >\n ${tab.icon ? html`<md-icon>${tab.icon}</md-icon>` : html``}\n <span>${label}</span>\n </div>\n `\n })}\n </div>\n <div class=\"content-container\">\n ${tabs.map(tab => {\n let displayStyle = 'display:none'\n let key = tab.name\n if (key == pageView.currentTabKey) {\n displayStyle = 'display:flex'\n }\n\n return html`\n <div class=\"tab-contents\" style=\"${displayStyle}\">${MetaUiUtil.getBasicTabContent(pageView, tab)}</div>\n `\n })}\n </div>\n `\n }\n\n /**\n * @description Grist 탭 Html을 생성하여 리턴\n *****************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getGristTabHtml(pageView) {\n let type = (pageView.etcConfig || {}).master_detail_type || 'top_bottom'\n let size = (pageView.etcConfig || {}).master_detail_size || '50% 50%'\n\n let layoutContainerStyle = type == 'left_right' ? `grid-template-columns:${size};` : `grid-template-rows:${size};`\n let currentRouting = pageView.isPage ? UiUtil.currentRouting() : pageView.route_name\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.grist?.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\" style=\"${layoutContainerStyle}\">\n <div class=\"container_detail\">\n ${MetaApi.getBasicGristHtml(pageView)} ${MetaUiUtil.getButtonContainer(pageView)}\n </div>\n <div class=\"container_detail\">\n ${pageView.is_activity === true\n ? html`${pageView.is_readonly === true\n ? html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n .activityDataSet=${(pageView.activityDataSet || {}).detail}\n is_readonly=\"true\"\n is_activity=\"true\"\n is_detail=\"true\"\n >\n </meta-tab-element>`\n : html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n .activityDataSet=${(pageView.activityDataSet || {}).detail}\n is_activity=\"true\"\n is_detail=\"true\"\n >\n </meta-tab-element>`}`\n : html`${pageView.is_readonly === true\n ? html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n is_readonly=\"true\"\n is_detail=\"true\"\n ></meta-tab-element>`\n : html`<meta-tab-element\n id=\"detail\"\n route_name=\"${currentRouting}\"\n is_detail=\"true\"\n ></meta-tab-element>`}`}\n </div>\n </div>\n `\n }\n\n /**\n * @description Tab Detail Html을 생성하여 리턴\n ********************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getTabDetailHtml(pageView) {\n let type = pageView.etcConfig.master_detail_type || 'top_bottom'\n let size = pageView.etcConfig.master_detail_size || '50% 50%'\n let detailInfoTxt = pageView.etcConfig.master_detail_element\n let detailInfo = JSON.parse(detailInfoTxt || '{}')\n let layoutContainerStyle = type == 'left_right' ? `grid-template-columns:${size};` : `grid-template-rows:${size};`\n\n MetaUiUtil.createMasterElement(pageView)\n MetaUiUtil.createDetailElement(pageView, detailInfo)\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\" style=\"${layoutContainerStyle}\">\n <div class=\"container_detail\">${pageView.masterElement}</div>\n <div class=\"container_detail\">\n ${detailInfo.tagname == '' || detailInfo.tagname == 'meta-tab-element'\n ? html``\n : html`<h2 id=\"detail_title\"><md-icon>list_alt</md-icon>${TermsUtil.tTitle(`${detailInfo.display}`)}</h2>`}\n ${pageView.detailElement}\n </div>\n </div>\n `\n }\n\n /**\n * @description 메인 탭 Html을 생성하여 리턴\n ***************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getMainTabHtml(pageView) {\n MetaUiUtil.createMasterElement(pageView)\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\">${pageView.masterElement}</div>\n `\n }\n\n /**\n * @description 마스터 디테일 Html을 생성하여 리턴\n ********************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 탭 HTML\n */\n static getMasterDetailHtml(pageView) {\n let type = pageView.etcConfig.master_detail_type || 'top_bottom'\n let size = pageView.etcConfig.master_detail_size || '50% 50%'\n let masterDisplay = (pageView.masterOption || {}).display\n let detailInfoTxt = pageView.etcConfig.master_detail_element\n let detailInfo = JSON.parse(detailInfoTxt || '{}')\n let layoutContainerStyle = type == 'left_right' ? `grid-template-columns:${size};` : `grid-template-rows:${size};`\n MetaUiUtil.createDetailElement(pageView, detailInfo)\n\n return html`\n ${pageView.useMasterFilterForm == false\n ? html``\n : html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form-base\n id=\"ox-filters-form\"\n .filters=${pageView.searchFields || []}\n .value=${pageView.searchFieldValues || []}\n @filters-change=${e => {\n pageView.grist?.fetch()\n }}\n ></ox-filters-form-base>\n </div>\n </div>\n `}\n <div id=\"container\" class=\"container\" style=\"${layoutContainerStyle}\">\n <div class=\"container_detail\">\n ${pageView.useFilterForm\n ? masterDisplay\n ? html`<h2 id=\"detail_title\"><md-icon>list_alt</md-icon>${TermsUtil.tTitle(`${masterDisplay}`)}</h2>`\n : html``\n : html``}\n ${MetaApi.getBasicGristHtml(pageView)} ${MetaUiUtil.getButtonContainer(pageView)}\n </div>\n <div class=\"container_detail\">\n ${detailInfo.tagname == '' || detailInfo.tagname == 'meta-tab-element'\n ? html``\n : detailInfo.display\n ? html`<h2 id=\"detail_title\"><md-icon>list_alt</md-icon>${TermsUtil.tTitle(`${detailInfo.display}`)}</h2>`\n : html``}\n ${pageView.detailElement}\n </div>\n </div>\n `\n }\n\n /**\n * @descrtiption 디테일 엘리먼트 렌더링\n **********************************\n * @param {Object} pageView\n * @param {Object} detailInfo\n * @returns htmlElement\n */\n static createDetailElement(pageView, detailInfo) {\n if (!pageView.detailElement) {\n let name = detailInfo.name ? detailInfo.name : 'detail'\n let elementTxt = `<${detailInfo.tagname} id=\"${name}\" name=\"${name}\" route_name=\"${detailInfo.routing}\" ${\n pageView.is_activity === true ? 'is_activity=true' : ''\n } ${pageView.is_readonly === true ? 'is_readonly=true' : ''} is_detail=true style=\"flex:1;\"></${detailInfo.tagname}>`\n pageView.detailElement = UiUtil.htmlToElement(elementTxt)\n pageView.detailElement.activityDataSet = (pageView.activityDataSet || {}).detail\n\n if (pageView.tagName.toLowerCase().startsWith('meta-tab-detail-')) {\n pageView.detailElement.rootElement = pageView\n }\n }\n }\n /**\n * @descrtiption 마스터 엘리먼트 렌더링\n **********************************\n * @param {Object} pageView\n * @returns {HTMLElement} 마스터 엘리먼트 HTML\n */\n static createMasterElement(pageView) {\n if (!pageView.masterElement && pageView.filterForm) {\n let name = 'master'\n let elementTxt = `<meta-tab-element id=\"${name}\" name=\"${name}\" route_name=\"${pageView.currentRouting}\" ${\n pageView.is_activity === true ? 'is_activity=true' : ''\n } ${pageView.is_readonly === true ? 'is_readonly=true' : ''} is_detail=true style=\"flex:1;\"></meta-tab-element>`\n pageView.masterElement = UiUtil.htmlToElement(elementTxt)\n pageView.masterElement.activityDataSet = (pageView.activityDataSet || {}).master\n pageView.masterElement.includeMainList = true\n pageView.masterElement.mainFilterForm = pageView.filterForm\n pageView.masterElement.rootElement = pageView\n }\n }\n\n /**\n * @descrtiption 기본 탭 컨텐트 리턴\n ********************************\n * @param {Object} pageView\n * @param {Object} tabConfig\n * @returns {HTMLElement} 탭 컨텐트 HTML\n */\n static getBasicTabContent(pageView, tabConfig) {\n if (!pageView.tabElements) {\n pageView.tabElements = {}\n }\n\n if (Object.keys(pageView.tabElements).filter(key => key == tabConfig.name).length > 0) {\n return pageView.tabElements[tabConfig.name]\n }\n\n let htmlText = `<${tabConfig.tagname} id='${tabConfig.name}' route_name='${tabConfig.menu}' style=\"flex:1;\" ${\n pageView.is_activity === true ? 'is_activity=true' : ''\n } ${pageView.is_readonly === true ? 'is_readonly=true' : ''} is_detail=true></${tabConfig.tagname}>`\n let tabElement = UiUtil.htmlToElement(htmlText)\n tabElement.activityDataSet = (pageView.activityDataSet || {})[tabConfig.name]\n\n if (pageView.parent_id) {\n tabElement.parent_id = pageView.parent_id\n }\n\n if (pageView.rootElement) {\n tabElement.rootElement = pageView.rootElement\n } else {\n tabElement.detailElement = pageView\n }\n\n if (tabConfig.filter_from === false) {\n tabElement.use_filter_form = false\n }\n\n if (tabConfig.main_filter_form) {\n tabElement.mainFilterForm = tabConfig.main_filter_form\n }\n\n pageView.tabElements[tabConfig.name] = tabElement\n return tabElement\n }\n\n /**\n * @description 그리드 상세 내용 HTML 생성\n **************************************\n * @param {Object} pageView 페이지 뷰\n * @returns {HTMLElement} 그리드 상세 내용 HTML\n */\n static getGridDetailHtml(pageView) {\n let useAddButton = pageView.useButtonAdd\n let useFilterForm = pageView.useFilterForm\n let useFilterAddButton = JSON.parse((pageView.etcConfig || {}).use_filter_add_button || 'false')\n let recordCreationCallback = pageView.recordCreationCallback\n let useSortButton = JSON.parse((pageView.etcConfig || {}).use_grid_sort_button || 'false')\n useFilterAddButton = useFilterAddButton === true && useAddButton === true\n\n return html`\n ${useFilterForm\n ? html`\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n ${useSortButton\n ? html`\n <div id=\"sorters\">\n <md-icon\n @click=${e => {\n const target = e.currentTarget\n target.nextElementSibling.open({\n right: 0,\n top: target.offsetTop + target.offsetHeight\n })\n }}\n >sort</md-icon\n >\n <ox-popup id=\"sorter-control\">\n <ox-sorters-control></ox-sorters-control>\n </ox-popup>\n </div>\n `\n : nothing}\n ${MetaUiUtil.getGridViewOption(pageView)}\n <ox-record-creator id=\"add\" ?hidden=\"${!useFilterAddButton}\" .callback=${recordCreationCallback}>\n <button style=\"display: flex; justify-content: center\">\n <md-icon>add</md-icon>\n </button>\n </ox-record-creator>\n </div>\n </div>\n `\n : nothing}\n `\n }\n\n /**\n * @description 그리드 보기 옵션 버튼을 그린다.\n ****************************************\n * @param {Object} pageView 페이지 뷰\n * @return {HTMLElement} 그리드 뷰 옵션 HTML\n */\n static getGridViewOption(pageView) {\n if (ValueUtil.isEmpty(pageView.gridViewOptions) || pageView.gridViewOptions.length == 1) {\n return html``\n } else {\n return html`\n <div id=\"modes\">\n ${pageView.gridViewOptions.includes('GRID')\n ? html`<md-icon @click=\"${() => (pageView.gridMode = 'GRID')}\" ?active=\"${pageView.gridMode == 'GRID'}\"\n >grid_on</md-icon\n >`\n : ``}\n ${pageView.gridViewOptions.includes('LIST')\n ? html`<md-icon @click=\"${() => (pageView.gridMode = 'LIST')}\" ?active=\"${pageView.gridMode == 'LIST'}\"\n >format_list_bulleted</md-icon\n >`\n : ``}\n ${pageView.gridViewOptions.includes('CARD')\n ? html`<md-icon @click=\"${() => (pageView.gridMode = 'CARD')}\" ?active=\"${pageView.gridMode == 'CARD'}\"\n >apps</md-icon\n >`\n : ``}\n </div>\n `\n }\n }\n\n /**\n * @description 버튼 컨테이너 엘리먼트 생성\n *************************************\n * @param {Object} pageView\n * @returns {HTMLElement}\n */\n static getButtonContainer(pageView) {\n return html`<div class=\"button-container\">${MetaUiUtil.getContainerButtons(pageView)}</div>`\n }\n}\n"]}
|