@things-factory/meta-ui 9.0.0-beta.8 → 9.0.0

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.
Files changed (66) hide show
  1. package/dist-client/bootstrap.d.ts +5 -5
  2. package/dist-client/bootstrap.js +20 -20
  3. package/dist-client/bootstrap.js.map +1 -1
  4. package/dist-client/component/grist/renderer/grist-renderer-meta-object-selector.js +1 -2
  5. package/dist-client/component/grist/renderer/grist-renderer-meta-object-selector.js.map +1 -1
  6. package/dist-client/component/popup/code-input-editor-popup.js +20 -20
  7. package/dist-client/component/popup/code-input-editor-popup.js.map +1 -1
  8. package/dist-client/component/popup/file-upload-popup.js +4 -1
  9. package/dist-client/component/popup/file-upload-popup.js.map +1 -1
  10. package/dist-client/component/popup/meta-object-selector-popup.js +26 -26
  11. package/dist-client/component/popup/meta-object-selector-popup.js.map +1 -1
  12. package/dist-client/component/popup/record-based-code-editor-popup.js +20 -20
  13. package/dist-client/component/popup/record-based-code-editor-popup.js.map +1 -1
  14. package/dist-client/mixin/meta-base-mixin.js +1 -2
  15. package/dist-client/mixin/meta-base-mixin.js.map +1 -1
  16. package/dist-client/mixin/meta-basic-grist-mixin.js +2 -4
  17. package/dist-client/mixin/meta-basic-grist-mixin.js.map +1 -1
  18. package/dist-client/mixin/meta-form-mixin.js +2 -2
  19. package/dist-client/mixin/meta-form-mixin.js.map +1 -1
  20. package/dist-client/mixin/meta-grist-tab-mixin.js +1 -2
  21. package/dist-client/mixin/meta-grist-tab-mixin.js.map +1 -1
  22. package/dist-client/mixin/meta-main-tab-mixin.js +1 -2
  23. package/dist-client/mixin/meta-main-tab-mixin.js.map +1 -1
  24. package/dist-client/mixin/meta-master-detail-mixin.js +1 -2
  25. package/dist-client/mixin/meta-master-detail-mixin.js.map +1 -1
  26. package/dist-client/mixin/meta-service-mixin.js +2 -4
  27. package/dist-client/mixin/meta-service-mixin.js.map +1 -1
  28. package/dist-client/mixin/meta-tab-detail-mixin.js +1 -2
  29. package/dist-client/mixin/meta-tab-detail-mixin.js.map +1 -1
  30. package/dist-client/pages/activity/meta-activity-define-page.js +10 -9
  31. package/dist-client/pages/activity/meta-activity-define-page.js.map +1 -1
  32. package/dist-client/pages/activity/meta-activity-list-page.js +22 -10
  33. package/dist-client/pages/activity/meta-activity-list-page.js.map +1 -1
  34. package/dist-client/pages/activity/meta-activiy-mixin.js +1 -2
  35. package/dist-client/pages/activity/meta-activiy-mixin.js.map +1 -1
  36. package/dist-client/pages/entity/config-entity.js +12 -10
  37. package/dist-client/pages/entity/config-entity.js.map +1 -1
  38. package/dist-client/pages/history/history-json-list-popup.js +4 -1
  39. package/dist-client/pages/history/history-json-list-popup.js.map +1 -1
  40. package/dist-client/pages/menu/dynamic-menu.js +5 -6
  41. package/dist-client/pages/menu/dynamic-menu.js.map +1 -1
  42. package/dist-client/pages/terms/config-terminology.js +10 -2
  43. package/dist-client/pages/terms/config-terminology.js.map +1 -1
  44. package/dist-client/tsconfig.tsbuildinfo +1 -1
  45. package/dist-client/utils/meta-ui-util.js +25 -17
  46. package/dist-client/utils/meta-ui-util.js.map +1 -1
  47. package/dist-client/utils/service-util.js +22 -23
  48. package/dist-client/utils/service-util.js.map +1 -1
  49. package/dist-client/utils/terms-util.js +8 -2
  50. package/dist-client/utils/terms-util.js.map +1 -1
  51. package/dist-client/utils/ui-util.js +1 -2
  52. package/dist-client/utils/ui-util.js.map +1 -1
  53. package/dist-server/service/button-role/button-role-mutation.js +24 -6
  54. package/dist-server/service/button-role/button-role-mutation.js.map +1 -1
  55. package/dist-server/service/dynamic-menu/dynamic-menu-query.js +3 -4
  56. package/dist-server/service/dynamic-menu/dynamic-menu-query.js.map +1 -1
  57. package/dist-server/service/menu-button-auth/menu-button-auth-mutation.js +24 -6
  58. package/dist-server/service/menu-button-auth/menu-button-auth-mutation.js.map +1 -1
  59. package/dist-server/service/meta-activity/meta-activity-mutation.js +15 -5
  60. package/dist-server/service/meta-activity/meta-activity-mutation.js.map +1 -1
  61. package/dist-server/service/work-code/work-code-mutation.js +27 -8
  62. package/dist-server/service/work-code/work-code-mutation.js.map +1 -1
  63. package/dist-server/service/work-code-detail/work-code-detail-mutation.js +25 -7
  64. package/dist-server/service/work-code-detail/work-code-detail-mutation.js.map +1 -1
  65. package/dist-server/tsconfig.tsbuildinfo +1 -1
  66. package/package.json +24 -24
@@ -136,7 +136,6 @@ export class ServiceUtil {
136
136
  * @return {Object}
137
137
  */
138
138
  static async getAttributeSetFor(entityName) {
139
- var _a;
140
139
  const response = await client.query({
141
140
  query: gql `
142
141
  query {
@@ -156,7 +155,7 @@ export class ServiceUtil {
156
155
  }
157
156
  `
158
157
  });
159
- return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.attributeSet) || {};
158
+ return response.data?.attributeSet || {};
160
159
  }
161
160
  /**
162
161
  * @description 현재 사용자의 권한에 맞는 메뉴 정보 요청
@@ -307,7 +306,6 @@ export class ServiceUtil {
307
306
  * @returns {Array} 메뉴 바에 표시될 메뉴 리스트
308
307
  */
309
308
  static async searchMyDynamicMenus() {
310
- var _a;
311
309
  const response = await client.query({
312
310
  query: gql `
313
311
  query MyMenus($sortings: [Sorting!], $filters: [Filter!]) {
@@ -361,7 +359,7 @@ export class ServiceUtil {
361
359
  sortings: [{ name: 'rank' }]
362
360
  }
363
361
  });
364
- return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.myMenus.items) || [];
362
+ return response.data?.myMenus.items || [];
365
363
  }
366
364
  /**
367
365
  * @description 응답이 처리된 후 Graphql Error 메시지 표시
@@ -413,25 +411,26 @@ export class ServiceUtil {
413
411
  // 2. 그리드에 표시된 데이터 추출
414
412
  let records = grist.data.records;
415
413
  var data = records.map(item => {
416
- return Object.assign({}, grist._config.columns
417
- .filter(column => column.type !== 'gutter' &&
418
- column.record !== undefined &&
419
- column.imex !== undefined &&
420
- column.hidden !== true)
421
- .reduce((record, column) => {
422
- record[column.imex.key] = column.imex.key.split('.').reduce((obj, key) => {
423
- var _a, _b, _c;
424
- const val = obj && obj[key] !== 'undefined' ? obj[key] : undefined;
425
- if (column.type == 'select') {
426
- return (_c = (_b = (_a = column === null || column === void 0 ? void 0 : column.record) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.find(option => option.value == val)) === null || _c === void 0 ? void 0 : _c.display;
427
- }
428
- else if (column.type.includes('object')) {
429
- return val === null || val === void 0 ? void 0 : val.name;
430
- }
431
- return val;
432
- }, item);
433
- return record;
434
- }, {}));
414
+ return {
415
+ ...grist._config.columns
416
+ .filter(column => column.type !== 'gutter' &&
417
+ column.record !== undefined &&
418
+ column.imex !== undefined &&
419
+ column.hidden !== true)
420
+ .reduce((record, column) => {
421
+ record[column.imex.key] = column.imex.key.split('.').reduce((obj, key) => {
422
+ const val = obj && obj[key] !== 'undefined' ? obj[key] : undefined;
423
+ if (column.type == 'select') {
424
+ return column?.record?.options?.find(option => option.value == val)?.display;
425
+ }
426
+ else if (column.type.includes('object')) {
427
+ return val?.name;
428
+ }
429
+ return val;
430
+ }, item);
431
+ return record;
432
+ }, {})
433
+ };
435
434
  });
436
435
  // element로 호출된 경우 리턴 없이 바로 xlsx 내보내기
437
436
  if (isElement) {
@@ -1 +1 @@
1
- {"version":3,"file":"service-util.js","sourceRoot":"","sources":["../../client/utils/service-util.js"],"names":[],"mappings":"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","sourcesContent":["import gql from 'graphql-tag'\n\nimport { asyncReplace } from 'lit/directives/async-replace.js'\n\nimport { store } from '@operato/shell'\nimport { getCodeByName } from '@things-factory/code-base'\nimport { EXPORT } from '@things-factory/export-base'\nimport { gqlBuilder } from '@things-factory/utils'\nimport { generateActivitySummary, startSubscribeActivitySummary } from '@things-factory/worklist'\n\nimport { client } from '@operato/graphql'\n\nimport { TermsUtil } from './terms-util'\nimport { UiUtil } from './ui-util'\nimport { ValueUtil } from './value-util'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop <shortstop@hatiolab.com>\n * @description 서버 측 서비스 핸들링 유틸리티 함수 정의\n */\nexport class ServiceUtil {\n /**\n * @description 공통 코드 명으로 공통 코드 리스트 조회 후 리턴\n *****************************************************\n * @param {String, Array} codeSet 공통 코드 명 또는 표현될 Array\n * @returns {Array} 코드 리스트\n */\n static async codeItems(codeSet) {\n // CodeSet 이 Array 일때 (설정 값을 셀렉터로 변환)\n if (Array.isArray(codeSet)) {\n let codes = codeSet.map(codeValue => {\n if (typeof codeValue === 'object') {\n return { name: codeValue.value, description: codeValue.display }\n } else {\n return { name: codeValue, description: codeValue }\n }\n })\n\n return codes\n }\n\n // codeSet이 문자이면 코드 조회\n return await getCodeByName(codeSet)\n }\n\n /**\n * @description code selector 에디터를 위한 공통 코드 조회\n *****************************************************\n * @param {String, Array} codeSet 공통 코드 명 또는 표현될 Array\n * @returns {Array} 설정값 클리어를 위해 빈 값이 추가된 코드 리스트\n */\n static async getCodeSelectorData(codeSet) {\n let codeItems = await ServiceUtil.codeItems(codeSet)\n let codeSelectors = codeItems.map(c => {\n return {\n value: c.name,\n display: c.description\n }\n })\n codeSelectors.unshift({ value: '', display: '' })\n return codeSelectors\n }\n\n /**\n * 시나리오를 호출해 코드 정보를 가져온다.\n *********************************\n * @description 시나리오에서는 name, description 필드를 리턴해 줘야 한다.\n * @param {String} scenarioName\n * @param {Array} variables\n */\n static async getCodeByScenario(scenarioName, variables) {\n let response = await ServiceUtil.callScenario(null, scenarioName, variables, false)\n if (\n response &&\n response.data &&\n response.data.runScenario &&\n response.data.runScenario.result &&\n response.data.runScenario.result.result\n ) {\n let codes = response.data.runScenario.result.result\n codes.unshift({ value: '', display: '' })\n return codes.map(x => {\n return {\n value: x.name,\n display: x.description\n }\n })\n } else {\n return []\n }\n }\n\n /**\n * 엔티티 쿼리를 호출해 코드 정보를 가져온다.\n ***********************************\n * @description\n * @param {Object} variables\n */\n static async getCodeByEntity({ queryName = undefined, codeField = 'name', dispField, filters = [], sorters = [] }) {\n let dispFields = dispField.split(',')\n\n let selectFields = `\n ${codeField}\n ${dispField ? dispFields.join('\\n') : ''}\n `\n\n let result = await ServiceUtil.searchByPagination(queryName, filters, sorters, 0, 0, selectFields)\n let codes = [{ value: '', display: '' }]\n\n result.records.forEach(x => {\n let disp = x[codeField]\n\n if (dispField) {\n let fields = dispField.split(',')\n disp = x[fields[0]]\n\n if (fields.length > 1) {\n disp += `(${fields\n .splice(1)\n .map(field => {\n return x[field]\n })\n .join(',')})`\n }\n }\n\n codes.push({\n value: x[codeField],\n display: disp\n })\n })\n\n return codes\n }\n\n /**\n * @description 확장 속성 옵션 정보를 리턴\n *************************************\n * @param {String} entityName\n * @return {Object}\n */\n static async getAttributeSetOptionFor(entityName) {\n return {\n objectified: true,\n attributeSet: await ServiceUtil.getAttributeSetFor(entityName)\n }\n }\n\n /**\n * @description 확장 속성 메타 정보를 조회\n *************************************\n * @param {String} entityName\n * @return {Object}\n */\n static async getAttributeSetFor(entityName) {\n const response = await client.query({\n query: gql`\n query {\n attributeSet: attributeSetByEntity(entity: \"${entityName}\") {\n entity\n description\n items {\n name\n description\n tag\n type\n active\n hidden\n options\n }\n }\n }\n `\n })\n\n return response.data?.attributeSet || {}\n }\n\n /**\n * @description 현재 사용자의 권한에 맞는 메뉴 정보 요청\n ***********************************************\n * @returns {Array} 메뉴 바에 표시될 메뉴 리스트\n */\n static async myDynamicMenus() {\n let menuItems = await ServiceUtil.searchMyDynamicMenus()\n return menuItems != null ? ServiceUtil.arrangeMenuRoutes(menuItems) : null\n }\n\n /**\n * @description 메뉴 틀에 맞게 재 배치\n **************************************\n * @param {Array} menuData 메뉴 정보에서 조회한 메뉴 리스트\n * @returns {Object} 메뉴 바 틀에 맞게 재 배치된 메뉴 & 라우팅 정보\n */\n static arrangeMenuRoutes(resMenuData) {\n let menuData = []\n\n /**\n * name : 메뉴 명 (DynamicMenu)\n * category : 태그 명 (dynamic-menu)\n * routing : 라우팅 (dynamic_menu)\n * resourceUrl : 페이지 위치 (./pages/menu/dynamic-menu)\n */\n resMenuData.forEach(item => {\n menuData.push(item)\n\n if (item.children) {\n item.children.sort(function (a, b) {\n return a.rank - b.rank\n })\n\n item.children.forEach(subItem => {\n if (subItem.hiddenFlag != true) {\n subItem.parent = item\n menuData.push(subItem)\n }\n })\n }\n })\n\n // 1. 서버에서 조회한 메뉴 정보 중에 메인 메뉴를 추출\n let mainMenus = menuData\n .map(item => {\n if (item.menuType == 'GROUP' || item.menuType == 'MENU') {\n let pMenu = {\n id: item.id,\n parent: true,\n name: TermsUtil.tMenu(item.name),\n icon: item.iconPath,\n type: item.menuType == 'GROUP' ? 'group' : '',\n menus: []\n }\n\n if (item.routing) {\n pMenu.path = item.routing\n }\n\n return pMenu\n } else {\n return { id: '0' }\n }\n })\n .filter(i => i.id != '0')\n\n // 2. 메인 메뉴 하위에 서브 메뉴를 추가\n let routes = menuData\n .map(item => {\n if (item.menuType == 'SCREEN' || item.menuType == 'HIDDEN-PAGE') {\n // 2.1 메뉴가 SCREEN 유형이라면 자신의 부모 메뉴를 찾아서\n let parentMenu = mainMenus.find(main => main.id == item.parent.id)\n if (parentMenu) {\n let title = TermsUtil.tMenu(item.name)\n\n // 2.2 좌측 메뉴에 표시되도록 부모 메뉴의 하위 메뉴로 추가하여 메뉴 트리 구성\n if (item.menuType == 'SCREEN') {\n parentMenu.menus.push({\n id: item.id,\n name: title,\n path: item.routing,\n icon: item.iconPath\n })\n }\n\n // 2.3 애플리케이션 라우팅 정보를 모아 routes 정보로 사용\n return {\n id: item.id,\n parent: false,\n parent_id: parentMenu.id,\n title: title,\n tagname: item.category,\n page: item.routing,\n template: item.resourceUrl,\n routing_type: item.routingType\n }\n } else {\n return { id: '0' }\n }\n } else if (item.menuType == 'HOME') {\n return {\n id: item.id,\n parent: true,\n parent_id: null,\n title: TermsUtil.tMenu(item.name),\n tagname: item.category,\n page: item.routing,\n template: item.resourceUrl,\n routing_type: item.routingType\n }\n } else {\n return { id: '0' }\n }\n })\n .filter(i => i != undefined && i.id != '0')\n\n // 3. 메뉴 그룹 하위에 해당 하는 페이지 정렬\n mainMenus\n .filter(x => x.type == 'group' && x.menus && x.menus.length > 0)\n .forEach(groupMenu => {\n let groupIdx = mainMenus.findIndex(m => m.id == groupMenu.id) + 1\n mainMenus.splice(groupIdx, 0, ...groupMenu.menus)\n })\n\n // 4. 업무, 결재 관련 메뉴 확인 및 badge 등록\n let badgeCnt = 0\n mainMenus.forEach(menu => {\n if (menu.path == 'todo-list') {\n // 내 업무함\n badgeCnt++\n menu.badge = () => asyncReplace(generateActivitySummary('numberOfToDos'))\n menu.active = ({ path }) => /^activity\\//.test(path)\n } else if (menu.path == 'approval-pending-list') {\n // 내 결재함\n badgeCnt++\n menu.badge = () => asyncReplace(generateActivitySummary('numberOfApprovalPendings'))\n menu.active = ({ path }) => /^activity\\//.test(path)\n } else if (menu.path == 'draft-list') {\n // 작성 중 업무\n badgeCnt++\n menu.badge = () => asyncReplace(generateActivitySummary('numberOfDrafts'))\n }\n })\n\n if (badgeCnt > 0) {\n startSubscribeActivitySummary()\n }\n\n // 5. 메뉴 데이터 리턴\n return { menus: mainMenus, routes: routes }\n }\n\n /**\n * @description 현재 사용자의 권한에 맞는 메뉴 정보 요청\n ***********************************************\n * @returns {Array} 메뉴 바에 표시될 메뉴 리스트\n */\n static async searchMyDynamicMenus() {\n const response = await client.query({\n query: gql`\n query MyMenus($sortings: [Sorting!], $filters: [Filter!]) {\n myMenus(sortings: $sortings, filters: $filters) {\n items {\n id\n parent {\n id\n name\n }\n children(permittedOnly: true) {\n id\n name\n description\n menuType\n category\n routingType\n routing\n resourceUrl\n iconPath\n hiddenFlag\n rank\n }\n name\n description\n menuType\n category\n routingType\n routing\n resourceUrl\n iconPath\n }\n total\n }\n }\n `,\n variables: {\n filters: [\n {\n name: 'hiddenFlag',\n operator: 'noteq',\n value: true\n },\n {\n // name: 'menuType', operator: 'in', value: ['HOME', 'MENU', 'GROUP', 'SCREEN', 'HIDDEN-PAGE']\n name: 'menuType',\n operator: 'in',\n value: ['HOME', 'MENU', 'GROUP']\n }\n ],\n sortings: [{ name: 'rank' }]\n }\n })\n\n return response.data?.myMenus.items || []\n }\n\n /**\n * @description 응답이 처리된 후 Graphql Error 메시지 표시\n ****************************************************\n * @param {Object} response 응답\n */\n static async showGraphqlErrorResponse(response) {\n if (response.errors && response.errors.length > 0) {\n let error = response.errors[0]\n let errContent = error.message\n let errTitle = error.message\n\n if (error.extensions) {\n let errExt = error.extensions\n errTitle = errExt.code\n }\n\n await UiUtil.showAlertPopup(errTitle, errContent, 'error', 'confirm')\n }\n }\n\n /**\n * @description Graphql 실행 시 Exception 표시\n ********************************************\n * @param {Object} exception graphql 에러\n */\n static async showGraphqlException(exception) {\n if (exception) {\n if (exception.networkError && exception.networkError.result) {\n await ServiceUtil.showGraphqlErrorResponse(exception.networkError.result)\n } else {\n await UiUtil.showAlertPopup('Graphql Error', exception.message, 'error', 'confirm')\n }\n }\n }\n\n /**\n * @description 그리드 데이터 내보내기\n *********************************\n * @param {Boolean} isElement 팝업으로 실행 중인지 여부\n * @param {String} exportTitle 그리드 내보내기 용 타이틀\n * @param {Grist} grist 그리드 오브젝트\n * @returns {Object} { header: headerSetting, data: data } or Not\n */\n static async exportableData(isElement, exportTitle, grist) {\n // 1. 헤더 설정\n var headerSetting = grist._config.columns\n .filter(\n column =>\n column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined && column.hidden !== true\n )\n .map(column => {\n return column.imex\n })\n\n // 2. 그리드에 표시된 데이터 추출\n let records = grist.data.records\n var data = records.map(item => {\n return {\n ...grist._config.columns\n .filter(\n column =>\n column.type !== 'gutter' &&\n column.record !== undefined &&\n column.imex !== undefined &&\n column.hidden !== true\n )\n .reduce((record, column) => {\n record[column.imex.key] = column.imex.key.split('.').reduce((obj, key) => {\n const val = obj && obj[key] !== 'undefined' ? obj[key] : undefined\n\n if (column.type == 'select') {\n return column?.record?.options?.find(option => option.value == val)?.display\n } else if (column.type.includes('object')) {\n return val?.name\n }\n\n return val\n }, item)\n return record\n }, {})\n }\n })\n\n // element로 호출된 경우 리턴 없이 바로 xlsx 내보내기\n if (isElement) {\n store.dispatch({\n type: EXPORT,\n exportable: {\n extension: 'xlsx',\n name: exportTitle,\n data: { header: headerSetting, data: data }\n }\n })\n } else {\n return { header: headerSetting, data: data }\n }\n }\n\n /**\n * @description 서버 사이드를 거쳐 그리드 데이터 내보내기\n ************************************************\n * @param {String} exportFileName 그리드 내보내기 용 타이틀 (파일명)\n * @param {String} exportQueryName 서버 사이드 GraphQL 쿼리명\n * @param {Grist} grist 그리드 오브젝트\n * @returns {Object} { header: headerSetting, data: data } or Not\n */\n static async exportableDataByServer(exportFileName, exportQueryName, grist) {\n // 1. 내보내기 graphQL 요청\n const response = await client.query({\n query: gql`\n query Query($filters: [Filter!]!) {\n responses: ${exportQueryName}(filters: $filters)\n }\n `,\n variables: {\n filters: grist.filters\n }\n })\n\n // 2. 응답 처리\n const data = response.data.responses\n const bufferData = Buffer.from(data, 'base64')\n const blob = new Blob([bufferData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })\n\n const a = document.createElement('a')\n a.href = window.URL.createObjectURL(blob)\n a.download = `${exportFileName}.xlsx`\n document.body.appendChild(a)\n a.click()\n a.remove()\n }\n\n /**\n * @description 데이터 리스트 페이지네이션 조회\n ****************************************\n * @param {String} queryFunc 쿼리 함수\n * @param {Array} filters 조회 조건\n * @param {Array} sortings 소팅 조건\n * @param {Number|undefined} page 현재 페이지\n * @param {Number} limit 페이지 당 표시할 레코드 건수\n * @param {String} selectFields 조회할 필드 리스트\n * @returns {Array} 조회 결과 { records : [{...}], total : 100 }\n */\n static async searchByPagination(queryFunc, filters, sortings, page = 1, limit, selectFields) {\n try {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n ${queryFunc}(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n ${selectFields}\n }\n total\n }\n }\n `,\n variables: { filters, sortings, pagination: { page, limit } }\n })\n\n if (!response.errors) {\n return {\n records: response.data[queryFunc].items,\n total: response.data[queryFunc].total\n }\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 레코드의 id를 이용해 데이터 한 건 조회\n **********************************************\n * @param {String} queryFunc 조회할 query 함수명\n * @param {String} id 레코드 ID\n * @param {String} selectFields 조회할 필드 리스트\n * @return {Object} 조회한 레코드\n */\n static async findOne(queryFunc, id, selectFields) {\n try {\n let response = await client.query({\n query: gql`\n query ($id: String!) {\n ${queryFunc}(id: $id) {\n ${selectFields}\n }\n }\n `,\n variables: { id: id }\n })\n\n if (!response.errors) {\n return response.data[queryFunc] || {}\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 필터 정보를 이용해 데이터 한 건 조회\n *********************************************\n * @param {String} queryFunc 조회할 query 함수명\n * @param {String} selectFields 조회할 필드 리스트\n * @param {Array} filters 필터\n * @return {Object} 조회한 레코드\n */\n static async findByFilters(queryFunc, selectFields, filters) {\n try {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!]) {\n ${queryFunc}(filters: $filters) {\n ${selectFields}\n }\n }\n `,\n variables: { filters }\n })\n\n if (!response.errors) {\n return response.data[queryFunc] || {}\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 필터 정보를 이용해 데이터 한 건 조회\n *********************************************\n * @param {String} queryFunc 조회할 query 함수명\n * @param {String} selectFields 조회할 필드 리스트\n * @param {Array} filters 필터\n * @return {Object} 조회한 레코드\n */\n static async searchByFilters(queryFunc, selectFields, filters) {\n try {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $sortings: [Sorting!]) {\n ${queryFunc}(filters: $filters, sortings: $sortings) {\n items {\n ${selectFields}\n }\n }\n }\n `,\n variables: { filters }\n })\n\n if (!response.errors) {\n return response.data[queryFunc].items || []\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 그리드에서 선택된 행의 ID 리턴\n ****************************************\n * @param {Object} grist 그리스트\n * @param {Boolean} alertWhenEmpty 선택된 행이 없는 경우 팝업을 실행할 것인지 여부\n * @returns {Array} 선택 ID 리스트\n */\n static getSelectedIdList(grist, alertWhenEmpty) {\n const ids = grist.selected.map(record => record.id)\n\n if (ValueUtil.isEmpty(ids) && alertWhenEmpty == true) {\n UiUtil.showAlertPopup('text.nothing_selected', 'text.there_is_nothing_to_delete', 'info', 'confirm')\n }\n\n return ids\n }\n\n /**\n * @description 그리스트의 선택된 레코드 삭제 처리\n ******************************************\n * @param {Object} grist 그리스트\n * @param {Object} mutationFunc 삭제 처리할 함수 명\n * @returns {Boolean} 삭제 성공 여부\n */\n static async deleteListByGristSelected(grist, mutationFunc) {\n let ids = ServiceUtil.getSelectedIdList(grist, true)\n\n if (ValueUtil.isNotEmpty(ids)) {\n let result = await ServiceUtil.deleteListByIds(ids, mutationFunc)\n if (result) {\n grist.fetch()\n }\n }\n }\n\n /**\n * @description ID 배열로 레코드 삭제 처리\n **************************************\n * @param {Array} ids 삭제할 레코드 ID 리스트\n * @param {Object} mutationFunc 삭제 처리할 함수\n * @returns {Boolean} 삭제 성공 여부\n */\n static async deleteListByIds(ids, mutationFunc) {\n const answer = await UiUtil.showAlertPopup('button.delete', 'text.are_you_sure', 'question', 'delete', 'cancel')\n if (answer.value) {\n try {\n const response = await client.query({\n query: gql`\n mutation {\n ${mutationFunc}(${gqlBuilder.buildArgs({ ids })})\n }`\n })\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to delete'))\n return true\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n }\n\n return false\n }\n\n /**\n * @description 그리스트에서 변경, 추가된 여러 데이터를 한 꺼번에 업데이트\n *************************************************************\n * @param {Object} grist 그리스트\n * @param {String} mutationFunc updateMultiple을 위한 서버 측 mutation 함수 명\n * @returns {Boolean} 업데이트 성공 여부\n */\n static async updateMultipleData(grist, mutationFunc) {\n let patches = ServiceUtil.patchesForUpdateMultiple(grist)\n\n if (ValueUtil.isNotEmpty(patches)) {\n let result = await ServiceUtil.updateMultiple(mutationFunc, patches)\n if (result) {\n grist.fetch()\n return result\n }\n }\n\n return false\n }\n\n /**\n * @description 변경, 추가된 여러 데이터를 한 꺼번에 업데이트\n ***************************************************\n * @param {String} mutationFunc updateMultiple을 위한 서버 측 mutation 함수 명\n * @param {Array} patches 변경, 추가된 여러 데이터\n * @returns {Boolean} 업데이트 성공 여부\n */\n static async updateMultiple(mutationFunc, patches) {\n try {\n const response = await client.query({\n query: gql`\n mutation {\n ${mutationFunc}(${gqlBuilder.buildArgs({ patches })}) {\n id\n }\n }`,\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to save'))\n return true\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return false\n }\n\n /**\n * @description 그리스트에서 변경, 추가된 내용 추출\n ********************************************\n * @param {Object} grist 그리스트\n * @param {Boolean} isObjectOrigin\n * @returns {Array} 그리스트에서 변경, 추가된 데이터 리스트\n */\n static patchesForUpdateMultiple(grist, isObjectOrigin = false) {\n // 그리드 변경 리스트\n let cudRecords = grist.dirtyRecords\n // 필수 입력 컬럼\n let mandatoryColumns = {}\n\n ;((grist.config || {}).columns || [])\n .filter(x => (x.record || {}).mandatory === true)\n .forEach(x => {\n mandatoryColumns[x.name] = x.header\n })\n\n // 코드 인풋 타입\n let codeInputColumns = ((grist.config || {}).columns || []).filter(x => x.type === 'code-input').map(x => x.name)\n\n // 변경 없음\n if (!cudRecords || cudRecords.length == 0) {\n UiUtil.showAlertPopup('text.nothing_changed', 'text.NOTHING_CHANGED', 'info', 'confirm')\n return\n }\n\n let patchList = []\n\n // root records\n for (let idx in cudRecords) {\n let record = cudRecords[idx]\n let patchData = record.id ? { id: record.id } : {}\n\n // 필수 입력 값 체크\n for (let key in mandatoryColumns) {\n if (record[key] === undefined || record[key] == '') {\n console.log(record)\n UiUtil.showAlertPopup(\n 'text.check-mandatory',\n TermsUtil.tText('check-mandatory-field', { x: mandatoryColumns[key] }),\n 'info',\n 'confirm'\n )\n return\n }\n }\n\n // 레코드 정보에서 저장 가능 유형으로 변환\n for (let key in record) {\n if (\n ![\n 'creator',\n 'updater',\n 'createdAt',\n 'updatedAt',\n '__dirty__',\n '__dirtyfields__',\n '__origin__',\n '__seq__',\n '__selected__'\n ].includes(key)\n ) {\n // code-input 타입은 오브젝트 값을 가지지만 id 만 가져가지 않는다. 예외 처리\n if (\n codeInputColumns.includes(key) == false &&\n record[key] &&\n typeof record[key] === 'object' &&\n isObjectOrigin == false\n ) {\n patchData[key] = { id: record[key].id }\n } else {\n patchData[key] = record[key]\n }\n }\n }\n\n patchData.cuFlag = record.__dirty__\n patchList.push(patchData)\n }\n\n return patchList\n }\n\n /**\n * @description 한 건 레코드 업데이트\n *********************************\n * @param {String} mutationFunc 서버 측 업데이트 mutation 함수 명\n * @param {String} id 변경할 레코드의 id\n * @param {Object} patch 변경할 레코드\n * @returns {Boolean} 업데이트 성공 여부\n */\n static async updateOne(mutationFunc, id, patch) {\n try {\n let gqlStr = gql`\n mutation {\n ${mutationFunc}(id: \"${id}\", ${gqlBuilder.buildArgs({ patch })}) {\n id\n }\n }`\n\n const response = await client.query({\n query: gqlStr,\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to save'))\n return true\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return false\n }\n\n /**\n * @description Graphql 서비스 호출\n ***********************************\n * @param {Object} pageView 호출 페이지 뷰\n * @param {Object} action 서비스 설정 정보\n * @param {Object} filterParam 필터용 파라미터\n * @param {Object} dataParams 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callService(pageView, action, filterParam, dataParams) {\n if (action.graphql_type == 'query') {\n return await ServiceUtil.callQueryService(action, filterParam, dataParams)\n } else if (action.graphql_type == 'export') {\n return await ServiceUtil.exportableDataByServer(action.export_file_name, action.query_name, pageView.grist)\n } else {\n return await ServiceUtil.callMutationService(action, filterParam, dataParams)\n }\n }\n\n /**\n * @description Graphql Query 서비스 호출\n ***************************************\n * @param {Object} action 서비스 액션\n * @param {Object} filterParam 필터용 파라미터\n * @param {Object} dataParams 데이터 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callQueryService(action, filterParam, dataParams) {\n // 1. GraphQL 설정 추출\n let queryType = action.query_type\n let queryFunc = action.query_name\n let selectFields = action.select\n let filters = action.filters\n let sorters = action.sorters\n\n // 2. Filter 정보가 존재한다면 filterParam 정보로 부터 값 변수 치환\n if (filters && filters.length > 0 && filterParam) {\n let filterParamKeys = Object.keys(filterParam)\n\n filters.forEach(filter => {\n let value = filter.value\n if (typeof value == 'string' && value.startsWith('$')) {\n let valueField = value.replace('$', '')\n if (filterParamKeys.includes(valueField)) {\n filter.value = filterParam[valueField]\n }\n }\n })\n }\n\n // 3. dataParams 정보가 존재한다면 데이터 dataParams 정보로 부터 값 변수 치환\n if (filters && filters.length > 0 && dataParams) {\n let dataParam = Array.isArray(dataParams) ? dataParams[0] : dataParams\n let dataParamKeys = Object.keys(dataParam)\n\n filters.forEach(filter => {\n let value = filter.value\n if (typeof value == 'string' && value.startsWith('$')) {\n let valueField = value.replace('$', '')\n if (dataParamKeys.includes(valueField)) {\n filter.value = dataParam[valueField]\n }\n }\n })\n }\n\n // 4. ID로 하나의 데이터만 조회\n if (queryType == 'singleById') {\n // ID값 추출\n let idField = action.id_field\n let idValue = filterParam[idField]\n if (!idValue) {\n idValue = Array.isArray(dataParams) ? dataParams[0][idField] : dataParams[idField]\n }\n\n if (!idValue) {\n throw new Error('id_value_not_found')\n }\n\n // ID값이 있다면 ID 값으로 조회\n return await ServiceUtil.findOne(queryFunc, idValue, selectFields)\n\n // 5. filter 정보로 하나의 데이터만 조회\n } else if (queryType == 'singleByFilters') {\n return await ServiceUtil.findByFilters(queryFunc, selectFields, filters)\n\n // 6. 화면이 grid이면서 페이지네이션을 사용하지 않는 경우\n } else if (queryType == 'multi') {\n return await ServiceUtil.searchByFilters(queryFunc, selectFields, filters)\n\n // 7. 화면이 grid이면서 페이지네이션을 사용하는 경우\n } else if (queryType == 'pagination') {\n let page = 1\n let limit = action.limit\n return await ServiceUtil.searchByPagination(queryFunc, filters, sorters, page, limit, selectFields)\n } else {\n throw new Error('invalid queryType [' + queryType + ']')\n }\n }\n\n /**\n * @description Graphql Mutation 서비스 호출\n ******************************************\n * @param {Object} action 서비스 액션\n * @param {Object} filterParam 필터용 파라미터\n * @param {Object} dataParams 데이터 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationService(action, filterParam, dataParams) {\n // 1. 필수 정보 체크\n if (!action.mutation_name) {\n throw new Error('mutation name not found!')\n }\n\n if (!action.mutation_type) {\n throw new Error('mutation type not found!')\n }\n\n // 2. GraphQL 설정 추출\n let data = action.data\n let mutationParams = Array.isArray(dataParams) ? [] : {}\n\n if (data) {\n // 3. 파라미터 정보로 부터 변수 치환 처리\n if (Array.isArray(mutationParams)) {\n if (ValueUtil.isNotEmpty(dataParams)) {\n dataParams.forEach(dp => {\n let sourceData = JSON.parse(JSON.stringify(data))\n let dataParam = ValueUtil.replaceVariableObject(sourceData, dp)\n mutationParams.push(dataParam)\n })\n }\n } else {\n if (ValueUtil.isNotEmpty(dataParams)) {\n mutationParams = ValueUtil.replaceVariableObject(data, dataParams)\n }\n }\n\n // 4. 파라미터 정보가 없다면 필터 정보로 변수 처리\n if (ValueUtil.isEmpty(mutationParams)) {\n mutationParams = ValueUtil.replaceVariableObject(data, filterParam)\n }\n }\n\n try {\n // 5. ID 값 추출\n let idValue = action.id_field\n ? ValueUtil.isNotEmpty(filterParam)\n ? filterParam[action.id_field]\n : Array.isArray(dataParams)\n ? dataParams[0][action.id_field]\n : dataParams[action.id_field]\n : null\n // 6. Mutation 호출\n let response = await ServiceUtil.callMutation(\n action,\n idValue,\n ValueUtil.isEmpty(mutationParams) ? dataParams : mutationParams\n )\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to process'))\n return response\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n }\n\n /**\n * @description Graphql Mutation 서비스 호출\n ******************************************\n * @param {Object} action 서비스 액션\n * @param {String} idValue ID 값\n * @param {Object} data 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutation(action, idValue, data) {\n // mutation Type 추출\n let mutationType = action.mutation_type\n\n // 1. 파라미터가 id 뿐인 경우\n if (mutationType == 'id') {\n return await ServiceUtil.callMutationById(action, idValue)\n\n // 2. 파라미터가 id 배열인 경우\n } else if (mutationType == 'ids') {\n return await ServiceUtil.callMutationByIds(action, data)\n\n // 3. 파라미터가 id, data인 경우\n } else if (mutationType == 'id-data') {\n return await ServiceUtil.callMutationByIdData(action, idValue, data)\n\n // 4. 파라미터가 data인 경우\n } else if (mutationType == 'data') {\n return await ServiceUtil.callMutationByData(action, data)\n }\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 ID\n *******************************************************\n * @param {Object} action 서비스 액션\n * @param {Object} idValue ID 값\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationById(action, idValue) {\n // ID 값이 없으면 에러\n if (!idValue) {\n throw new Error('id_value_not_found')\n }\n\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($id: String!) {\n ${mutationName}(id: $id) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { id: idValue }\n })\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 ID\n *******************************************************\n * @param {Object} action 서비스 액션\n * @param {Array} dataList 데이터 배열\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationByIds(action, dataList) {\n let paramName = action.param_name\n\n // 파라미터 이름이 없으면 에러\n if (!paramName) {\n throw new Error('param name not found')\n }\n\n let ids = dataList.map(d => {\n return d[action.id_field]\n })\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($ids: [String!]!) {\n ${mutationName}(${paramName}: $ids) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { ids: ids }\n })\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 ID, Data\n *************************************************************\n * @param {Object} action 서비스 액션\n * @param {String} idValue ID 값\n * @param {Object} data 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationByIdData(action, idValue, data) {\n let paramName = action.param_name\n let paramType = action.param_type\n\n // 파라미터 타입이 없으면 에러\n if (!paramType) {\n throw new Error('param type not found')\n }\n\n // 파라미터 이름이 없으면 에러\n if (!paramName) {\n throw new Error('param name not found')\n }\n\n // ID 값이 있다면 ID 값으로 조회\n if (!idValue) {\n idValue = data[action.id_field]\n }\n\n if (!idValue) {\n throw new Error('id_value_not_found')\n }\n\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($id: String!, $patch: ${paramType}!) {\n ${mutationName}(id: $id, ${paramName}: $patch) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { id: idValue, patch: data }\n })\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 Data\n ********************************************************\n * @param {Object} action 서비스 액션\n * @param {Object} data 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationByData(action, data) {\n let paramType = action.param_type\n let paramName = action.param_name\n\n // 파라미터 타입이 없으면 에러\n if (!paramType) {\n throw new Error('param type not found')\n }\n\n // 파라미터 이름이 없으면 에러\n if (!paramName) {\n throw new Error('param name not found')\n }\n\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($patch: ${paramType}!) {\n ${mutationName}(${paramName}: $patch) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { patch: data }\n })\n }\n\n /**\n * @description 시나리오 서비스를 호출\n **********************************\n * @param {String} buttonName 시나리오 호출할 버튼 명, 버튼 명이 없다면 사용자에게 확인 과정을 생략한다.\n * @param {String} scenarioName 호출할 시나리오 명\n * @param {Object} variables 시나리오 호출 변수\n * @param {Object} useMessage 컨펌, 완료 메시지 사용 여부\n * @returns {Object | Boolean} 시나리오 호출 response or false\n */\n static async callScenario(buttonName, scenarioName, variables, useMessage = true) {\n let confirm = true\n\n if (buttonName && useMessage === true) {\n const anwer = await UiUtil.showAlertPopup(\n 'button.' + buttonName,\n 'text.are_you_sure',\n 'question',\n 'confirm',\n 'cancel'\n )\n confirm = anwer.value\n }\n\n if (confirm) {\n try {\n const response = await client.query({\n query: gql`\n mutation ($scenarioName: String!, $variables: Object) {\n runScenario(scenarioName: $scenarioName, variables: $variables) {\n state\n message\n result\n __typename\n }\n }\n `,\n variables: { scenarioName: scenarioName, variables: variables }\n })\n\n if (!response.errors) {\n if (ServiceUtil.checkClientError(response)) {\n if (useMessage === true) UiUtil.showToast('info', TermsUtil.tText('success to process'))\n return response\n }\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n }\n\n return false\n }\n\n /**\n * @description 시나리오 서비스 리턴값에 에러가 포함되어 있는지 체크\n *******************************************************\n * @param {Object} response 시나리오 서비스 호출 리턴 값, 리턴 형태 error : {type : 'error', title : '에러 타이틀 (다국어 가능)', message : '에러 메시지 (다국어 가능)'}\n * @returns {Boolean} 에러가 없으면 true 그렇지 않으면 false\n */\n static checkClientError(response) {\n if (\n response &&\n response.data &&\n response.data.runScenario &&\n response.data.runScenario.result &&\n response.data.runScenario.result.error\n ) {\n let scenarioError = response.data.runScenario.result.error\n UiUtil.showAlertPopup(scenarioError.title, scenarioError.message, 'error', 'confirm')\n return false\n } else {\n return true\n }\n }\n}\n"]}
1
+ {"version":3,"file":"service-util.js","sourceRoot":"","sources":["../../client/utils/service-util.js"],"names":[],"mappings":"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","sourcesContent":["import gql from 'graphql-tag'\n\nimport { asyncReplace } from 'lit/directives/async-replace.js'\n\nimport { store } from '@operato/shell'\nimport { getCodeByName } from '@things-factory/code-base'\nimport { EXPORT } from '@things-factory/export-base'\nimport { gqlBuilder } from '@things-factory/utils'\nimport { generateActivitySummary, startSubscribeActivitySummary } from '@things-factory/worklist'\n\nimport { client } from '@operato/graphql'\n\nimport { TermsUtil } from './terms-util'\nimport { UiUtil } from './ui-util'\nimport { ValueUtil } from './value-util'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop <shortstop@hatiolab.com>\n * @description 서버 측 서비스 핸들링 유틸리티 함수 정의\n */\nexport class ServiceUtil {\n /**\n * @description 공통 코드 명으로 공통 코드 리스트 조회 후 리턴\n *****************************************************\n * @param {String, Array} codeSet 공통 코드 명 또는 표현될 Array\n * @returns {Array} 코드 리스트\n */\n static async codeItems(codeSet) {\n // CodeSet 이 Array 일때 (설정 값을 셀렉터로 변환)\n if (Array.isArray(codeSet)) {\n let codes = codeSet.map(codeValue => {\n if (typeof codeValue === 'object') {\n return { name: codeValue.value, description: codeValue.display }\n } else {\n return { name: codeValue, description: codeValue }\n }\n })\n\n return codes\n }\n\n // codeSet이 문자이면 코드 조회\n return await getCodeByName(codeSet)\n }\n\n /**\n * @description code selector 에디터를 위한 공통 코드 조회\n *****************************************************\n * @param {String, Array} codeSet 공통 코드 명 또는 표현될 Array\n * @returns {Array} 설정값 클리어를 위해 빈 값이 추가된 코드 리스트\n */\n static async getCodeSelectorData(codeSet) {\n let codeItems = await ServiceUtil.codeItems(codeSet)\n let codeSelectors = codeItems.map(c => {\n return {\n value: c.name,\n display: c.description\n }\n })\n codeSelectors.unshift({ value: '', display: '' })\n return codeSelectors\n }\n\n /**\n * 시나리오를 호출해 코드 정보를 가져온다.\n *********************************\n * @description 시나리오에서는 name, description 필드를 리턴해 줘야 한다.\n * @param {String} scenarioName\n * @param {Array} variables\n */\n static async getCodeByScenario(scenarioName, variables) {\n let response = await ServiceUtil.callScenario(null, scenarioName, variables, false)\n if (\n response &&\n response.data &&\n response.data.runScenario &&\n response.data.runScenario.result &&\n response.data.runScenario.result.result\n ) {\n let codes = response.data.runScenario.result.result\n codes.unshift({ value: '', display: '' })\n return codes.map(x => {\n return {\n value: x.name,\n display: x.description\n }\n })\n } else {\n return []\n }\n }\n\n /**\n * 엔티티 쿼리를 호출해 코드 정보를 가져온다.\n ***********************************\n * @description\n * @param {Object} variables\n */\n static async getCodeByEntity({ queryName = undefined, codeField = 'name', dispField, filters = [], sorters = [] }) {\n let dispFields = dispField.split(',')\n\n let selectFields = `\n ${codeField}\n ${dispField ? dispFields.join('\\n') : ''}\n `\n\n let result = await ServiceUtil.searchByPagination(queryName, filters, sorters, 0, 0, selectFields)\n let codes = [{ value: '', display: '' }]\n\n result.records.forEach(x => {\n let disp = x[codeField]\n\n if (dispField) {\n let fields = dispField.split(',')\n disp = x[fields[0]]\n\n if (fields.length > 1) {\n disp += `(${fields\n .splice(1)\n .map(field => {\n return x[field]\n })\n .join(',')})`\n }\n }\n\n codes.push({\n value: x[codeField],\n display: disp\n })\n })\n\n return codes\n }\n\n /**\n * @description 확장 속성 옵션 정보를 리턴\n *************************************\n * @param {String} entityName\n * @return {Object}\n */\n static async getAttributeSetOptionFor(entityName) {\n return {\n objectified: true,\n attributeSet: await ServiceUtil.getAttributeSetFor(entityName)\n }\n }\n\n /**\n * @description 확장 속성 메타 정보를 조회\n *************************************\n * @param {String} entityName\n * @return {Object}\n */\n static async getAttributeSetFor(entityName) {\n const response = await client.query({\n query: gql`\n query {\n attributeSet: attributeSetByEntity(entity: \"${entityName}\") {\n entity\n description\n items {\n name\n description\n tag\n type\n active\n hidden\n options\n }\n }\n }\n `\n })\n\n return response.data?.attributeSet || {}\n }\n\n /**\n * @description 현재 사용자의 권한에 맞는 메뉴 정보 요청\n ***********************************************\n * @returns {Array} 메뉴 바에 표시될 메뉴 리스트\n */\n static async myDynamicMenus() {\n let menuItems = await ServiceUtil.searchMyDynamicMenus()\n return menuItems != null ? ServiceUtil.arrangeMenuRoutes(menuItems) : null\n }\n\n /**\n * @description 메뉴 틀에 맞게 재 배치\n **************************************\n * @param {Array} menuData 메뉴 정보에서 조회한 메뉴 리스트\n * @returns {Object} 메뉴 바 틀에 맞게 재 배치된 메뉴 & 라우팅 정보\n */\n static arrangeMenuRoutes(resMenuData) {\n let menuData = []\n\n /**\n * name : 메뉴 명 (DynamicMenu)\n * category : 태그 명 (dynamic-menu)\n * routing : 라우팅 (dynamic_menu)\n * resourceUrl : 페이지 위치 (./pages/menu/dynamic-menu)\n */\n resMenuData.forEach(item => {\n menuData.push(item)\n\n if (item.children) {\n item.children.sort(function (a, b) {\n return a.rank - b.rank\n })\n\n item.children.forEach(subItem => {\n if (subItem.hiddenFlag != true) {\n subItem.parent = item\n menuData.push(subItem)\n }\n })\n }\n })\n\n // 1. 서버에서 조회한 메뉴 정보 중에 메인 메뉴를 추출\n let mainMenus = menuData\n .map(item => {\n if (item.menuType == 'GROUP' || item.menuType == 'MENU') {\n let pMenu = {\n id: item.id,\n parent: true,\n name: TermsUtil.tMenu(item.name),\n icon: item.iconPath,\n type: item.menuType == 'GROUP' ? 'group' : '',\n menus: []\n }\n\n if (item.routing) {\n pMenu.path = item.routing\n }\n\n return pMenu\n } else {\n return { id: '0' }\n }\n })\n .filter(i => i.id != '0')\n\n // 2. 메인 메뉴 하위에 서브 메뉴를 추가\n let routes = menuData\n .map(item => {\n if (item.menuType == 'SCREEN' || item.menuType == 'HIDDEN-PAGE') {\n // 2.1 메뉴가 SCREEN 유형이라면 자신의 부모 메뉴를 찾아서\n let parentMenu = mainMenus.find(main => main.id == item.parent.id)\n if (parentMenu) {\n let title = TermsUtil.tMenu(item.name)\n\n // 2.2 좌측 메뉴에 표시되도록 부모 메뉴의 하위 메뉴로 추가하여 메뉴 트리 구성\n if (item.menuType == 'SCREEN') {\n parentMenu.menus.push({\n id: item.id,\n name: title,\n path: item.routing,\n icon: item.iconPath\n })\n }\n\n // 2.3 애플리케이션 라우팅 정보를 모아 routes 정보로 사용\n return {\n id: item.id,\n parent: false,\n parent_id: parentMenu.id,\n title: title,\n tagname: item.category,\n page: item.routing,\n template: item.resourceUrl,\n routing_type: item.routingType\n }\n } else {\n return { id: '0' }\n }\n } else if (item.menuType == 'HOME') {\n return {\n id: item.id,\n parent: true,\n parent_id: null,\n title: TermsUtil.tMenu(item.name),\n tagname: item.category,\n page: item.routing,\n template: item.resourceUrl,\n routing_type: item.routingType\n }\n } else {\n return { id: '0' }\n }\n })\n .filter(i => i != undefined && i.id != '0')\n\n // 3. 메뉴 그룹 하위에 해당 하는 페이지 정렬\n mainMenus\n .filter(x => x.type == 'group' && x.menus && x.menus.length > 0)\n .forEach(groupMenu => {\n let groupIdx = mainMenus.findIndex(m => m.id == groupMenu.id) + 1\n mainMenus.splice(groupIdx, 0, ...groupMenu.menus)\n })\n\n // 4. 업무, 결재 관련 메뉴 확인 및 badge 등록\n let badgeCnt = 0\n mainMenus.forEach(menu => {\n if (menu.path == 'todo-list') {\n // 내 업무함\n badgeCnt++\n menu.badge = () => asyncReplace(generateActivitySummary('numberOfToDos'))\n menu.active = ({ path }) => /^activity\\//.test(path)\n } else if (menu.path == 'approval-pending-list') {\n // 내 결재함\n badgeCnt++\n menu.badge = () => asyncReplace(generateActivitySummary('numberOfApprovalPendings'))\n menu.active = ({ path }) => /^activity\\//.test(path)\n } else if (menu.path == 'draft-list') {\n // 작성 중 업무\n badgeCnt++\n menu.badge = () => asyncReplace(generateActivitySummary('numberOfDrafts'))\n }\n })\n\n if (badgeCnt > 0) {\n startSubscribeActivitySummary()\n }\n\n // 5. 메뉴 데이터 리턴\n return { menus: mainMenus, routes: routes }\n }\n\n /**\n * @description 현재 사용자의 권한에 맞는 메뉴 정보 요청\n ***********************************************\n * @returns {Array} 메뉴 바에 표시될 메뉴 리스트\n */\n static async searchMyDynamicMenus() {\n const response = await client.query({\n query: gql`\n query MyMenus($sortings: [Sorting!], $filters: [Filter!]) {\n myMenus(sortings: $sortings, filters: $filters) {\n items {\n id\n parent {\n id\n name\n }\n children(permittedOnly: true) {\n id\n name\n description\n menuType\n category\n routingType\n routing\n resourceUrl\n iconPath\n hiddenFlag\n rank\n }\n name\n description\n menuType\n category\n routingType\n routing\n resourceUrl\n iconPath\n }\n total\n }\n }\n `,\n variables: {\n filters: [\n {\n name: 'hiddenFlag',\n operator: 'noteq',\n value: true\n },\n {\n // name: 'menuType', operator: 'in', value: ['HOME', 'MENU', 'GROUP', 'SCREEN', 'HIDDEN-PAGE']\n name: 'menuType',\n operator: 'in',\n value: ['HOME', 'MENU', 'GROUP']\n }\n ],\n sortings: [{ name: 'rank' }]\n }\n })\n\n return response.data?.myMenus.items || []\n }\n\n /**\n * @description 응답이 처리된 후 Graphql Error 메시지 표시\n ****************************************************\n * @param {Object} response 응답\n */\n static async showGraphqlErrorResponse(response) {\n if (response.errors && response.errors.length > 0) {\n let error = response.errors[0]\n let errContent = error.message\n let errTitle = error.message\n\n if (error.extensions) {\n let errExt = error.extensions\n errTitle = errExt.code\n }\n\n await UiUtil.showAlertPopup(errTitle, errContent, 'error', 'confirm')\n }\n }\n\n /**\n * @description Graphql 실행 시 Exception 표시\n ********************************************\n * @param {Object} exception graphql 에러\n */\n static async showGraphqlException(exception) {\n if (exception) {\n if (exception.networkError && exception.networkError.result) {\n await ServiceUtil.showGraphqlErrorResponse(exception.networkError.result)\n } else {\n await UiUtil.showAlertPopup('Graphql Error', exception.message, 'error', 'confirm')\n }\n }\n }\n\n /**\n * @description 그리드 데이터 내보내기\n *********************************\n * @param {Boolean} isElement 팝업으로 실행 중인지 여부\n * @param {String} exportTitle 그리드 내보내기 용 타이틀\n * @param {Grist} grist 그리드 오브젝트\n * @returns {Object} { header: headerSetting, data: data } or Not\n */\n static async exportableData(isElement, exportTitle, grist) {\n // 1. 헤더 설정\n var headerSetting = grist._config.columns\n .filter(\n column =>\n column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined && column.hidden !== true\n )\n .map(column => {\n return column.imex\n })\n\n // 2. 그리드에 표시된 데이터 추출\n let records = grist.data.records\n var data = records.map(item => {\n return {\n ...grist._config.columns\n .filter(\n column =>\n column.type !== 'gutter' &&\n column.record !== undefined &&\n column.imex !== undefined &&\n column.hidden !== true\n )\n .reduce((record, column) => {\n record[column.imex.key] = column.imex.key.split('.').reduce((obj, key) => {\n const val = obj && obj[key] !== 'undefined' ? obj[key] : undefined\n\n if (column.type == 'select') {\n return column?.record?.options?.find(option => option.value == val)?.display\n } else if (column.type.includes('object')) {\n return val?.name\n }\n\n return val\n }, item)\n return record\n }, {})\n }\n })\n\n // element로 호출된 경우 리턴 없이 바로 xlsx 내보내기\n if (isElement) {\n store.dispatch({\n type: EXPORT,\n exportable: {\n extension: 'xlsx',\n name: exportTitle,\n data: { header: headerSetting, data: data }\n }\n })\n } else {\n return { header: headerSetting, data: data }\n }\n }\n\n /**\n * @description 서버 사이드를 거쳐 그리드 데이터 내보내기\n ************************************************\n * @param {String} exportFileName 그리드 내보내기 용 타이틀 (파일명)\n * @param {String} exportQueryName 서버 사이드 GraphQL 쿼리명\n * @param {Grist} grist 그리드 오브젝트\n * @returns {Object} { header: headerSetting, data: data } or Not\n */\n static async exportableDataByServer(exportFileName, exportQueryName, grist) {\n // 1. 내보내기 graphQL 요청\n const response = await client.query({\n query: gql`\n query Query($filters: [Filter!]!) {\n responses: ${exportQueryName}(filters: $filters)\n }\n `,\n variables: {\n filters: grist.filters\n }\n })\n\n // 2. 응답 처리\n const data = response.data.responses\n const bufferData = Buffer.from(data, 'base64')\n const blob = new Blob([bufferData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })\n\n const a = document.createElement('a')\n a.href = window.URL.createObjectURL(blob)\n a.download = `${exportFileName}.xlsx`\n document.body.appendChild(a)\n a.click()\n a.remove()\n }\n\n /**\n * @description 데이터 리스트 페이지네이션 조회\n ****************************************\n * @param {String} queryFunc 쿼리 함수\n * @param {Array} filters 조회 조건\n * @param {Array} sortings 소팅 조건\n * @param {Number|undefined} page 현재 페이지\n * @param {Number} limit 페이지 당 표시할 레코드 건수\n * @param {String} selectFields 조회할 필드 리스트\n * @returns {Array} 조회 결과 { records : [{...}], total : 100 }\n */\n static async searchByPagination(queryFunc, filters, sortings, page = 1, limit, selectFields) {\n try {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n ${queryFunc}(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n ${selectFields}\n }\n total\n }\n }\n `,\n variables: { filters, sortings, pagination: { page, limit } }\n })\n\n if (!response.errors) {\n return {\n records: response.data[queryFunc].items,\n total: response.data[queryFunc].total\n }\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 레코드의 id를 이용해 데이터 한 건 조회\n **********************************************\n * @param {String} queryFunc 조회할 query 함수명\n * @param {String} id 레코드 ID\n * @param {String} selectFields 조회할 필드 리스트\n * @return {Object} 조회한 레코드\n */\n static async findOne(queryFunc, id, selectFields) {\n try {\n let response = await client.query({\n query: gql`\n query ($id: String!) {\n ${queryFunc}(id: $id) {\n ${selectFields}\n }\n }\n `,\n variables: { id: id }\n })\n\n if (!response.errors) {\n return response.data[queryFunc] || {}\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 필터 정보를 이용해 데이터 한 건 조회\n *********************************************\n * @param {String} queryFunc 조회할 query 함수명\n * @param {String} selectFields 조회할 필드 리스트\n * @param {Array} filters 필터\n * @return {Object} 조회한 레코드\n */\n static async findByFilters(queryFunc, selectFields, filters) {\n try {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!]) {\n ${queryFunc}(filters: $filters) {\n ${selectFields}\n }\n }\n `,\n variables: { filters }\n })\n\n if (!response.errors) {\n return response.data[queryFunc] || {}\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 필터 정보를 이용해 데이터 한 건 조회\n *********************************************\n * @param {String} queryFunc 조회할 query 함수명\n * @param {String} selectFields 조회할 필드 리스트\n * @param {Array} filters 필터\n * @return {Object} 조회한 레코드\n */\n static async searchByFilters(queryFunc, selectFields, filters) {\n try {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $sortings: [Sorting!]) {\n ${queryFunc}(filters: $filters, sortings: $sortings) {\n items {\n ${selectFields}\n }\n }\n }\n `,\n variables: { filters }\n })\n\n if (!response.errors) {\n return response.data[queryFunc].items || []\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return null\n }\n\n /**\n * @description 그리드에서 선택된 행의 ID 리턴\n ****************************************\n * @param {Object} grist 그리스트\n * @param {Boolean} alertWhenEmpty 선택된 행이 없는 경우 팝업을 실행할 것인지 여부\n * @returns {Array} 선택 ID 리스트\n */\n static getSelectedIdList(grist, alertWhenEmpty) {\n const ids = grist.selected.map(record => record.id)\n\n if (ValueUtil.isEmpty(ids) && alertWhenEmpty == true) {\n UiUtil.showAlertPopup('text.nothing_selected', 'text.there_is_nothing_to_delete', 'info', 'confirm')\n }\n\n return ids\n }\n\n /**\n * @description 그리스트의 선택된 레코드 삭제 처리\n ******************************************\n * @param {Object} grist 그리스트\n * @param {Object} mutationFunc 삭제 처리할 함수 명\n * @returns {Boolean} 삭제 성공 여부\n */\n static async deleteListByGristSelected(grist, mutationFunc) {\n let ids = ServiceUtil.getSelectedIdList(grist, true)\n\n if (ValueUtil.isNotEmpty(ids)) {\n let result = await ServiceUtil.deleteListByIds(ids, mutationFunc)\n if (result) {\n grist.fetch()\n }\n }\n }\n\n /**\n * @description ID 배열로 레코드 삭제 처리\n **************************************\n * @param {Array} ids 삭제할 레코드 ID 리스트\n * @param {Object} mutationFunc 삭제 처리할 함수\n * @returns {Boolean} 삭제 성공 여부\n */\n static async deleteListByIds(ids, mutationFunc) {\n const answer = await UiUtil.showAlertPopup('button.delete', 'text.are_you_sure', 'question', 'delete', 'cancel')\n if (answer.value) {\n try {\n const response = await client.query({\n query: gql`\n mutation {\n ${mutationFunc}(${gqlBuilder.buildArgs({ ids })})\n }`\n })\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to delete'))\n return true\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n }\n\n return false\n }\n\n /**\n * @description 그리스트에서 변경, 추가된 여러 데이터를 한 꺼번에 업데이트\n *************************************************************\n * @param {Object} grist 그리스트\n * @param {String} mutationFunc updateMultiple을 위한 서버 측 mutation 함수 명\n * @returns {Boolean} 업데이트 성공 여부\n */\n static async updateMultipleData(grist, mutationFunc) {\n let patches = ServiceUtil.patchesForUpdateMultiple(grist)\n\n if (ValueUtil.isNotEmpty(patches)) {\n let result = await ServiceUtil.updateMultiple(mutationFunc, patches)\n if (result) {\n grist.fetch()\n return result\n }\n }\n\n return false\n }\n\n /**\n * @description 변경, 추가된 여러 데이터를 한 꺼번에 업데이트\n ***************************************************\n * @param {String} mutationFunc updateMultiple을 위한 서버 측 mutation 함수 명\n * @param {Array} patches 변경, 추가된 여러 데이터\n * @returns {Boolean} 업데이트 성공 여부\n */\n static async updateMultiple(mutationFunc, patches) {\n try {\n const response = await client.query({\n query: gql`\n mutation {\n ${mutationFunc}(${gqlBuilder.buildArgs({ patches })}) {\n id\n }\n }`,\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to save'))\n return true\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return false\n }\n\n /**\n * @description 그리스트에서 변경, 추가된 내용 추출\n ********************************************\n * @param {Object} grist 그리스트\n * @param {Boolean} isObjectOrigin\n * @returns {Array} 그리스트에서 변경, 추가된 데이터 리스트\n */\n static patchesForUpdateMultiple(grist, isObjectOrigin = false) {\n // 그리드 변경 리스트\n let cudRecords = grist.dirtyRecords\n // 필수 입력 컬럼\n let mandatoryColumns = {}\n\n ;((grist.config || {}).columns || [])\n .filter(x => (x.record || {}).mandatory === true)\n .forEach(x => {\n mandatoryColumns[x.name] = x.header\n })\n\n // 코드 인풋 타입\n let codeInputColumns = ((grist.config || {}).columns || []).filter(x => x.type === 'code-input').map(x => x.name)\n\n // 변경 없음\n if (!cudRecords || cudRecords.length == 0) {\n UiUtil.showAlertPopup('text.nothing_changed', 'text.NOTHING_CHANGED', 'info', 'confirm')\n return\n }\n\n let patchList = []\n\n // root records\n for (let idx in cudRecords) {\n let record = cudRecords[idx]\n let patchData = record.id ? { id: record.id } : {}\n\n // 필수 입력 값 체크\n for (let key in mandatoryColumns) {\n if (record[key] === undefined || record[key] == '') {\n console.log(record)\n UiUtil.showAlertPopup(\n 'text.check-mandatory',\n TermsUtil.tText('check-mandatory-field', { x: mandatoryColumns[key] }),\n 'info',\n 'confirm'\n )\n return\n }\n }\n\n // 레코드 정보에서 저장 가능 유형으로 변환\n for (let key in record) {\n if (\n ![\n 'creator',\n 'updater',\n 'createdAt',\n 'updatedAt',\n '__dirty__',\n '__dirtyfields__',\n '__origin__',\n '__seq__',\n '__selected__'\n ].includes(key)\n ) {\n // code-input 타입은 오브젝트 값을 가지지만 id 만 가져가지 않는다. 예외 처리\n if (\n codeInputColumns.includes(key) == false &&\n record[key] &&\n typeof record[key] === 'object' &&\n isObjectOrigin == false\n ) {\n patchData[key] = { id: record[key].id }\n } else {\n patchData[key] = record[key]\n }\n }\n }\n\n patchData.cuFlag = record.__dirty__\n patchList.push(patchData)\n }\n\n return patchList\n }\n\n /**\n * @description 한 건 레코드 업데이트\n *********************************\n * @param {String} mutationFunc 서버 측 업데이트 mutation 함수 명\n * @param {String} id 변경할 레코드의 id\n * @param {Object} patch 변경할 레코드\n * @returns {Boolean} 업데이트 성공 여부\n */\n static async updateOne(mutationFunc, id, patch) {\n try {\n let gqlStr = gql`\n mutation {\n ${mutationFunc}(id: \"${id}\", ${gqlBuilder.buildArgs({ patch })}) {\n id\n }\n }`\n\n const response = await client.query({\n query: gqlStr,\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to save'))\n return true\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n\n return false\n }\n\n /**\n * @description Graphql 서비스 호출\n ***********************************\n * @param {Object} pageView 호출 페이지 뷰\n * @param {Object} action 서비스 설정 정보\n * @param {Object} filterParam 필터용 파라미터\n * @param {Object} dataParams 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callService(pageView, action, filterParam, dataParams) {\n if (action.graphql_type == 'query') {\n return await ServiceUtil.callQueryService(action, filterParam, dataParams)\n } else if (action.graphql_type == 'export') {\n return await ServiceUtil.exportableDataByServer(action.export_file_name, action.query_name, pageView.grist)\n } else {\n return await ServiceUtil.callMutationService(action, filterParam, dataParams)\n }\n }\n\n /**\n * @description Graphql Query 서비스 호출\n ***************************************\n * @param {Object} action 서비스 액션\n * @param {Object} filterParam 필터용 파라미터\n * @param {Object} dataParams 데이터 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callQueryService(action, filterParam, dataParams) {\n // 1. GraphQL 설정 추출\n let queryType = action.query_type\n let queryFunc = action.query_name\n let selectFields = action.select\n let filters = action.filters\n let sorters = action.sorters\n\n // 2. Filter 정보가 존재한다면 filterParam 정보로 부터 값 변수 치환\n if (filters && filters.length > 0 && filterParam) {\n let filterParamKeys = Object.keys(filterParam)\n\n filters.forEach(filter => {\n let value = filter.value\n if (typeof value == 'string' && value.startsWith('$')) {\n let valueField = value.replace('$', '')\n if (filterParamKeys.includes(valueField)) {\n filter.value = filterParam[valueField]\n }\n }\n })\n }\n\n // 3. dataParams 정보가 존재한다면 데이터 dataParams 정보로 부터 값 변수 치환\n if (filters && filters.length > 0 && dataParams) {\n let dataParam = Array.isArray(dataParams) ? dataParams[0] : dataParams\n let dataParamKeys = Object.keys(dataParam)\n\n filters.forEach(filter => {\n let value = filter.value\n if (typeof value == 'string' && value.startsWith('$')) {\n let valueField = value.replace('$', '')\n if (dataParamKeys.includes(valueField)) {\n filter.value = dataParam[valueField]\n }\n }\n })\n }\n\n // 4. ID로 하나의 데이터만 조회\n if (queryType == 'singleById') {\n // ID값 추출\n let idField = action.id_field\n let idValue = filterParam[idField]\n if (!idValue) {\n idValue = Array.isArray(dataParams) ? dataParams[0][idField] : dataParams[idField]\n }\n\n if (!idValue) {\n throw new Error('id_value_not_found')\n }\n\n // ID값이 있다면 ID 값으로 조회\n return await ServiceUtil.findOne(queryFunc, idValue, selectFields)\n\n // 5. filter 정보로 하나의 데이터만 조회\n } else if (queryType == 'singleByFilters') {\n return await ServiceUtil.findByFilters(queryFunc, selectFields, filters)\n\n // 6. 화면이 grid이면서 페이지네이션을 사용하지 않는 경우\n } else if (queryType == 'multi') {\n return await ServiceUtil.searchByFilters(queryFunc, selectFields, filters)\n\n // 7. 화면이 grid이면서 페이지네이션을 사용하는 경우\n } else if (queryType == 'pagination') {\n let page = 1\n let limit = action.limit\n return await ServiceUtil.searchByPagination(queryFunc, filters, sorters, page, limit, selectFields)\n } else {\n throw new Error('invalid queryType [' + queryType + ']')\n }\n }\n\n /**\n * @description Graphql Mutation 서비스 호출\n ******************************************\n * @param {Object} action 서비스 액션\n * @param {Object} filterParam 필터용 파라미터\n * @param {Object} dataParams 데이터 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationService(action, filterParam, dataParams) {\n // 1. 필수 정보 체크\n if (!action.mutation_name) {\n throw new Error('mutation name not found!')\n }\n\n if (!action.mutation_type) {\n throw new Error('mutation type not found!')\n }\n\n // 2. GraphQL 설정 추출\n let data = action.data\n let mutationParams = Array.isArray(dataParams) ? [] : {}\n\n if (data) {\n // 3. 파라미터 정보로 부터 변수 치환 처리\n if (Array.isArray(mutationParams)) {\n if (ValueUtil.isNotEmpty(dataParams)) {\n dataParams.forEach(dp => {\n let sourceData = JSON.parse(JSON.stringify(data))\n let dataParam = ValueUtil.replaceVariableObject(sourceData, dp)\n mutationParams.push(dataParam)\n })\n }\n } else {\n if (ValueUtil.isNotEmpty(dataParams)) {\n mutationParams = ValueUtil.replaceVariableObject(data, dataParams)\n }\n }\n\n // 4. 파라미터 정보가 없다면 필터 정보로 변수 처리\n if (ValueUtil.isEmpty(mutationParams)) {\n mutationParams = ValueUtil.replaceVariableObject(data, filterParam)\n }\n }\n\n try {\n // 5. ID 값 추출\n let idValue = action.id_field\n ? ValueUtil.isNotEmpty(filterParam)\n ? filterParam[action.id_field]\n : Array.isArray(dataParams)\n ? dataParams[0][action.id_field]\n : dataParams[action.id_field]\n : null\n // 6. Mutation 호출\n let response = await ServiceUtil.callMutation(\n action,\n idValue,\n ValueUtil.isEmpty(mutationParams) ? dataParams : mutationParams\n )\n\n if (!response.errors) {\n UiUtil.showToast('info', TermsUtil.tText('success to process'))\n return response\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n }\n\n /**\n * @description Graphql Mutation 서비스 호출\n ******************************************\n * @param {Object} action 서비스 액션\n * @param {String} idValue ID 값\n * @param {Object} data 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutation(action, idValue, data) {\n // mutation Type 추출\n let mutationType = action.mutation_type\n\n // 1. 파라미터가 id 뿐인 경우\n if (mutationType == 'id') {\n return await ServiceUtil.callMutationById(action, idValue)\n\n // 2. 파라미터가 id 배열인 경우\n } else if (mutationType == 'ids') {\n return await ServiceUtil.callMutationByIds(action, data)\n\n // 3. 파라미터가 id, data인 경우\n } else if (mutationType == 'id-data') {\n return await ServiceUtil.callMutationByIdData(action, idValue, data)\n\n // 4. 파라미터가 data인 경우\n } else if (mutationType == 'data') {\n return await ServiceUtil.callMutationByData(action, data)\n }\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 ID\n *******************************************************\n * @param {Object} action 서비스 액션\n * @param {Object} idValue ID 값\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationById(action, idValue) {\n // ID 값이 없으면 에러\n if (!idValue) {\n throw new Error('id_value_not_found')\n }\n\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($id: String!) {\n ${mutationName}(id: $id) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { id: idValue }\n })\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 ID\n *******************************************************\n * @param {Object} action 서비스 액션\n * @param {Array} dataList 데이터 배열\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationByIds(action, dataList) {\n let paramName = action.param_name\n\n // 파라미터 이름이 없으면 에러\n if (!paramName) {\n throw new Error('param name not found')\n }\n\n let ids = dataList.map(d => {\n return d[action.id_field]\n })\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($ids: [String!]!) {\n ${mutationName}(${paramName}: $ids) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { ids: ids }\n })\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 ID, Data\n *************************************************************\n * @param {Object} action 서비스 액션\n * @param {String} idValue ID 값\n * @param {Object} data 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationByIdData(action, idValue, data) {\n let paramName = action.param_name\n let paramType = action.param_type\n\n // 파라미터 타입이 없으면 에러\n if (!paramType) {\n throw new Error('param type not found')\n }\n\n // 파라미터 이름이 없으면 에러\n if (!paramName) {\n throw new Error('param name not found')\n }\n\n // ID 값이 있다면 ID 값으로 조회\n if (!idValue) {\n idValue = data[action.id_field]\n }\n\n if (!idValue) {\n throw new Error('id_value_not_found')\n }\n\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($id: String!, $patch: ${paramType}!) {\n ${mutationName}(id: $id, ${paramName}: $patch) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { id: idValue, patch: data }\n })\n }\n\n /**\n * @description Graphql Mutation 서비스 호출 - 파라미터는 Data\n ********************************************************\n * @param {Object} action 서비스 액션\n * @param {Object} data 파라미터\n * @returns {Object} 서비스 호출 결과\n */\n static async callMutationByData(action, data) {\n let paramType = action.param_type\n let paramName = action.param_name\n\n // 파라미터 타입이 없으면 에러\n if (!paramType) {\n throw new Error('param type not found')\n }\n\n // 파라미터 이름이 없으면 에러\n if (!paramName) {\n throw new Error('param name not found')\n }\n\n let mutationName = action.mutation_name\n let returnFields = action.return_fields\n\n return await client.query({\n query: gql`\n mutation ($patch: ${paramType}!) {\n ${mutationName}(${paramName}: $patch) \n ${returnFields ? '{' + returnFields + '}' : ''}\n }`,\n variables: { patch: data }\n })\n }\n\n /**\n * @description 시나리오 서비스를 호출\n **********************************\n * @param {String} buttonName 시나리오 호출할 버튼 명, 버튼 명이 없다면 사용자에게 확인 과정을 생략한다.\n * @param {String} scenarioName 호출할 시나리오 명\n * @param {Object} variables 시나리오 호출 변수\n * @param {Object} useMessage 컨펌, 완료 메시지 사용 여부\n * @returns {Object | Boolean} 시나리오 호출 response or false\n */\n static async callScenario(buttonName, scenarioName, variables, useMessage = true) {\n let confirm = true\n\n if (buttonName && useMessage === true) {\n const anwer = await UiUtil.showAlertPopup(\n 'button.' + buttonName,\n 'text.are_you_sure',\n 'question',\n 'confirm',\n 'cancel'\n )\n confirm = anwer.value\n }\n\n if (confirm) {\n try {\n const response = await client.query({\n query: gql`\n mutation ($scenarioName: String!, $variables: Object) {\n runScenario(scenarioName: $scenarioName, variables: $variables) {\n state\n message\n result\n __typename\n }\n }\n `,\n variables: { scenarioName: scenarioName, variables: variables }\n })\n\n if (!response.errors) {\n if (ServiceUtil.checkClientError(response)) {\n if (useMessage === true) UiUtil.showToast('info', TermsUtil.tText('success to process'))\n return response\n }\n } else {\n ServiceUtil.showGraphqlErrorResponse(response)\n }\n } catch (e) {\n ServiceUtil.showGraphqlException(e)\n }\n }\n\n return false\n }\n\n /**\n * @description 시나리오 서비스 리턴값에 에러가 포함되어 있는지 체크\n *******************************************************\n * @param {Object} response 시나리오 서비스 호출 리턴 값, 리턴 형태 error : {type : 'error', title : '에러 타이틀 (다국어 가능)', message : '에러 메시지 (다국어 가능)'}\n * @returns {Boolean} 에러가 없으면 true 그렇지 않으면 false\n */\n static checkClientError(response) {\n if (\n response &&\n response.data &&\n response.data.runScenario &&\n response.data.runScenario.result &&\n response.data.runScenario.result.error\n ) {\n let scenarioError = response.data.runScenario.result.error\n UiUtil.showAlertPopup(scenarioError.title, scenarioError.message, 'error', 'confirm')\n return false\n } else {\n return true\n }\n }\n}\n"]}
@@ -88,7 +88,10 @@ export class TermsUtil {
88
88
  * @returns termKey 다국어 변환 값
89
89
  */
90
90
  static translate(termCategory, termName, parameters, defaultValue) {
91
- return i18next.t(`${termCategory}.${termName}`, Object.assign(Object.assign({}, parameters), { defaultValue: defaultValue || termName }));
91
+ return i18next.t(`${termCategory}.${termName}`, {
92
+ ...parameters,
93
+ defaultValue: defaultValue || termName
94
+ });
92
95
  }
93
96
  /**
94
97
  * @description termKey로 다국어 변환하여 parameters로 파라미터 처리하여 리턴, 변환값이 없다면 defaultValue 리턴, defaultValue가 없다면 null 리턴
@@ -99,7 +102,10 @@ export class TermsUtil {
99
102
  * @returns termKey 다국어 변환 값
100
103
  */
101
104
  static t(termKey, parameters, defaultValue) {
102
- return i18next.t(termKey, Object.assign(Object.assign({}, parameters), { defaultValue: defaultValue || termKey }));
105
+ return i18next.t(termKey, {
106
+ ...parameters,
107
+ defaultValue: defaultValue || termKey
108
+ });
103
109
  }
104
110
  }
105
111
  //# sourceMappingURL=terms-util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terms-util.js","sourceRoot":"","sources":["../../client/utils/terms-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,OAAO,SAAS;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7F,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,UAAkB;QAC/B,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IACpE,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,QAAgB;QAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC3D,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACvF,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,QAAgB,EAAE,MAAY;QACzC,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,CAAC,YAAoB,EAAE,QAAgB,EAAE,UAAgB,EAAE,YAAqB;QAC9F,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,QAAQ,EAAE,kCACzC,UAAU,KACb,YAAY,EAAE,YAAY,IAAI,QAAQ,IAC5B,CAAA;IACd,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,CAAC,CAAC,OAAe,EAAE,UAAe,EAAE,YAAoB;QAC7D,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,kCACnB,UAAU,KACb,YAAY,EAAE,YAAY,IAAI,OAAO,IAC3B,CAAA;IACd,CAAC;CACF","sourcesContent":["import { i18next } from '@operato/i18n'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop <shortstop@hatiolab.com>\n * @description 용어 처리 유틸리티\n */\nexport class TermsUtil {\n /**\n * @description 라벨 (필드) labelName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} labelName\n * @param {Object} params\n * @returns 번역된 라벨 (필드) 명\n */\n static tLabel(labelName: string, params?: any) {\n let labelValue = TermsUtil.translate('label', labelName, params)\n return labelValue ? labelValue : TermsUtil.translate('field', labelName, params, labelName)\n }\n\n /**\n * @description 필드 fieldName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} fieldName\n * @param {Object} params\n * @returns 번역된 필드 명\n */\n static tField(fieldName: string, params?: any) {\n let fieldValue = TermsUtil.translate('field', fieldName, params)\n return fieldValue ? fieldValue : TermsUtil.translate('field', fieldName, params, fieldName)\n }\n\n /**\n * @description 버튼 buttonName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} buttonName\n * @returns 번역된 버튼 명\n */\n static tButton(buttonName: string) {\n return TermsUtil.translate('button', buttonName, null, buttonName)\n }\n\n /**\n * @description 타이틀 titleName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} titleName\n * @param {Object} params\n * @returns 번역된 타이틀 명\n */\n static tTitle(titleName: string, params?: any) {\n let titleValue = TermsUtil.translate('title', titleName, params)\n return titleValue ? titleValue : TermsUtil.translate('menu', titleName, params, titleName)\n }\n\n /**\n * @description 메뉴 menuName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} menuName\n * @returns 번역된 메뉴 명\n */\n static tMenu(menuName: string) {\n let menuValue = TermsUtil.translate('menu', menuName, null)\n return menuValue ? menuValue : TermsUtil.translate('title', menuName, null, menuName)\n }\n\n /**\n * @description 텍스트 textName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} textName\n * @param {Object} params\n * @returns 번역된 텍스트 값\n */\n static tText(textName: string, params?: any) {\n return TermsUtil.translate('text', textName, params, textName)\n }\n\n /**\n * @description 에러 errorName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} errorName\n * @param {Object} params\n * @returns 번역된 에러 메시지\n */\n static tError(errorName: string, params?: any) {\n return TermsUtil.translate('error', errorName, params, errorName)\n }\n\n /**\n * @description termKey로 다국어 변환하여 parameters로 파라미터 처리하여 리턴, 변환값이 없다면 defaultValue 리턴, defaultValue가 없다면 null 리턴\n ***********************************************\n * @param {String} termCategory 용어 카테고리 (label, field, title, menu, button, text, error, ...)\n * @param {String} termName 용어 이름\n * @param {Object} parameters 용어 이름에 파라미터가 있는 경우 파라미터 치환 처리할 오브젝트 데이터 {key1 : value1, key2 : value2} 형식 ...\n * @param {String} defaultValue\n * @returns termKey 다국어 변환 값\n */\n static translate(termCategory: string, termName: string, parameters?: any, defaultValue?: string): string {\n return i18next.t(`${termCategory}.${termName}`, {\n ...parameters,\n defaultValue: defaultValue || termName\n }) as string\n }\n\n /**\n * @description termKey로 다국어 변환하여 parameters로 파라미터 처리하여 리턴, 변환값이 없다면 defaultValue 리턴, defaultValue가 없다면 null 리턴\n ***********************************************\n * @param {String} termKey 용어 키 : {용어 카테고리}'.'{용어 이름}\n * @param {Object} parameters 용어 이름에 파라미터가 있는 경우 파라미터 치환 처리할 오브젝트 데이터 {key1 : value1, key2 : value2} 형식 ...\n * @param {String} defaultValue\n * @returns termKey 다국어 변환 값\n */\n static t(termKey: string, parameters: any, defaultValue: string): string {\n return i18next.t(termKey, {\n ...parameters,\n defaultValue: defaultValue || termKey\n }) as string\n }\n}\n"]}
1
+ {"version":3,"file":"terms-util.js","sourceRoot":"","sources":["../../client/utils/terms-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,OAAO,SAAS;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7F,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC7F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,UAAkB;QAC/B,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IACpE,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,QAAgB;QAC3B,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC3D,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACvF,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,QAAgB,EAAE,MAAY;QACzC,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAY;QAC3C,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,CAAC,YAAoB,EAAE,QAAgB,EAAE,UAAgB,EAAE,YAAqB;QAC9F,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,QAAQ,EAAE,EAAE;YAC9C,GAAG,UAAU;YACb,YAAY,EAAE,YAAY,IAAI,QAAQ;SACvC,CAAW,CAAA;IACd,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,CAAC,CAAC,OAAe,EAAE,UAAe,EAAE,YAAoB;QAC7D,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE;YACxB,GAAG,UAAU;YACb,YAAY,EAAE,YAAY,IAAI,OAAO;SACtC,CAAW,CAAA;IACd,CAAC;CACF","sourcesContent":["import { i18next } from '@operato/i18n'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop <shortstop@hatiolab.com>\n * @description 용어 처리 유틸리티\n */\nexport class TermsUtil {\n /**\n * @description 라벨 (필드) labelName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} labelName\n * @param {Object} params\n * @returns 번역된 라벨 (필드) 명\n */\n static tLabel(labelName: string, params?: any) {\n let labelValue = TermsUtil.translate('label', labelName, params)\n return labelValue ? labelValue : TermsUtil.translate('field', labelName, params, labelName)\n }\n\n /**\n * @description 필드 fieldName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} fieldName\n * @param {Object} params\n * @returns 번역된 필드 명\n */\n static tField(fieldName: string, params?: any) {\n let fieldValue = TermsUtil.translate('field', fieldName, params)\n return fieldValue ? fieldValue : TermsUtil.translate('field', fieldName, params, fieldName)\n }\n\n /**\n * @description 버튼 buttonName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} buttonName\n * @returns 번역된 버튼 명\n */\n static tButton(buttonName: string) {\n return TermsUtil.translate('button', buttonName, null, buttonName)\n }\n\n /**\n * @description 타이틀 titleName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} titleName\n * @param {Object} params\n * @returns 번역된 타이틀 명\n */\n static tTitle(titleName: string, params?: any) {\n let titleValue = TermsUtil.translate('title', titleName, params)\n return titleValue ? titleValue : TermsUtil.translate('menu', titleName, params, titleName)\n }\n\n /**\n * @description 메뉴 menuName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} menuName\n * @returns 번역된 메뉴 명\n */\n static tMenu(menuName: string) {\n let menuValue = TermsUtil.translate('menu', menuName, null)\n return menuValue ? menuValue : TermsUtil.translate('title', menuName, null, menuName)\n }\n\n /**\n * @description 텍스트 textName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} textName\n * @param {Object} params\n * @returns 번역된 텍스트 값\n */\n static tText(textName: string, params?: any) {\n return TermsUtil.translate('text', textName, params, textName)\n }\n\n /**\n * @description 에러 errorName을 다국어 변환하여 리턴\n ***********************************************\n * @param {String} errorName\n * @param {Object} params\n * @returns 번역된 에러 메시지\n */\n static tError(errorName: string, params?: any) {\n return TermsUtil.translate('error', errorName, params, errorName)\n }\n\n /**\n * @description termKey로 다국어 변환하여 parameters로 파라미터 처리하여 리턴, 변환값이 없다면 defaultValue 리턴, defaultValue가 없다면 null 리턴\n ***********************************************\n * @param {String} termCategory 용어 카테고리 (label, field, title, menu, button, text, error, ...)\n * @param {String} termName 용어 이름\n * @param {Object} parameters 용어 이름에 파라미터가 있는 경우 파라미터 치환 처리할 오브젝트 데이터 {key1 : value1, key2 : value2} 형식 ...\n * @param {String} defaultValue\n * @returns termKey 다국어 변환 값\n */\n static translate(termCategory: string, termName: string, parameters?: any, defaultValue?: string): string {\n return i18next.t(`${termCategory}.${termName}`, {\n ...parameters,\n defaultValue: defaultValue || termName\n }) as string\n }\n\n /**\n * @description termKey로 다국어 변환하여 parameters로 파라미터 처리하여 리턴, 변환값이 없다면 defaultValue 리턴, defaultValue가 없다면 null 리턴\n ***********************************************\n * @param {String} termKey 용어 키 : {용어 카테고리}'.'{용어 이름}\n * @param {Object} parameters 용어 이름에 파라미터가 있는 경우 파라미터 치환 처리할 오브젝트 데이터 {key1 : value1, key2 : value2} 형식 ...\n * @param {String} defaultValue\n * @returns termKey 다국어 변환 값\n */\n static t(termKey: string, parameters: any, defaultValue: string): string {\n return i18next.t(termKey, {\n ...parameters,\n defaultValue: defaultValue || termKey\n }) as string\n }\n}\n"]}
@@ -249,9 +249,8 @@ export class UiUtil {
249
249
  * @param {Object} value 설정할 값
250
250
  */
251
251
  static setSearchFormEditorValue(filterForm, name, value) {
252
- var _a;
253
252
  if (ValueUtil.isNotEmpty(filterForm)) {
254
- let editor = (_a = filterForm.renderRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`[name='${name}']`);
253
+ let editor = filterForm.renderRoot?.querySelector(`[name='${name}']`);
255
254
  if (ValueUtil.isNotEmpty(editor)) {
256
255
  editor.value = value;
257
256
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ui-util.js","sourceRoot":"","sources":["../../client/utils/ui-util.js"],"names":[],"mappings":"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","sourcesContent":["import { store, CustomAlert, navigate } from '@things-factory/shell'\n\nimport { openPopup } from '@operato/layout'\nimport { closePopup } from '@operato/popup'\nimport { isMobileDevice } from '@operato/utils'\nimport { getEditor } from '@operato/data-grist'\n\nimport { TermsUtil } from './terms-util'\nimport { ValueUtil } from './value-util'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop <shortstop@hatiolab.com>\n * @description UI 관련 유틸리티 함수 정의\n */\nexport class UiUtil {\n /**\n * @description 현재 디바이스가 모바일 장비인지 체크\n **************************************\n * @returns {Boolean} 모바일 장비 여부\n */\n static isMobileEnv() {\n return isMobileDevice()\n }\n\n /**\n * @description 현재 로케일 정보 리턴\n **************************************\n * @returns {String} 현재 브라우저의 로케일 정보\n */\n static currentLocale() {\n let cookie = document.cookie\n cookie = cookie.substring(cookie.indexOf('i18next'))\n if (cookie.indexOf(';') > -1) {\n cookie = cookie.substring(0, cookie.indexOf(';'))\n }\n cookie = cookie.replace('i18next=', '')\n if (cookie == 'ko') return 'ko-KR'\n else return cookie\n }\n\n /**\n * @description 최종 애플리케이션 모듈 정보 리턴\n *****************************************\n * @returns {Object} 최종 애플리케이션 모듈\n */\n static getApplicationModuleInfo() {\n let modules = store.getState().app.modules\n return modules[modules.length - 1]\n }\n\n /**\n * @description 현재 액티브 된 화면의 라우팅 정보\n **************************************\n * @returns {String} 현재 액티브 된 화면의 라우팅 정보\n */\n static currentRouting() {\n return store.getState().route.page\n }\n\n /**\n * @description popup 닫기\n ************************\n * @param {HTML} popup\n */\n static closePopupBy(popup) {\n closePopup(popup)\n }\n\n /**\n * @description 오픈하고자 하는 엘리먼트를 받아 팝업 오픈\n *************************************************\n * @param {String} popupTitle 팝업 타이틀\n * @param {String} popupSize 팝업 사이즈 ex) 'large', 'medium', 'small'\n * @param {HTMLElement} element 팝업에 표시할 엘리먼트\n * @param {Boolean} backdrop 백드롭 여부\n * @param {String} help help 파일 경로\n * @returns {Object} popup\n */\n static openPopupByElement(popupTitle, popupSize, element, backdrop, help = '') {\n if (popupSize === 'full') {\n element.style.height = '95dvh'\n }\n\n return openPopup(element, {\n backdrop: true,\n hovering: popupSize === 'full' ? 'edge' : 'center',\n size: popupSize === 'full' ? 'large' : popupSize,\n title: popupTitle,\n backdrop: backdrop,\n help: help\n })\n }\n\n /**\n * @description popupConfig에 포함된 element 정보를 이용해 팝업을 연다\n **************************************************************\n * @param {String} title 팝업 타이틀\n * @param {Object} popupConfig 팝업 구성을 위한 설정 정보 ex) { module: '', location: '', tagname: '', size : '', popup_field: '', parent_field: ''}\n * @param {Object} paramData 팝업에 넘겨 줄 파라미터\n * @param {Function} popupCloseCallback 팝업 닫을 때 실행되기 위한 콜백 함수\n */\n static async openDynamicPopup(title, popupConfig, paramData, popupCloseCallback) {\n // 부모 필드\n let parentValue = ValueUtil.isNotEmpty(popupConfig.parent_field)\n ? ValueUtil.getParams(paramData, ...popupConfig.parent_field.split('.'))\n : undefined\n\n // 팝업 엘리먼트 생성\n let htmlText = `<${popupConfig.tagname} route_name='${popupConfig.menu}' parent_id='${parentValue}' is_popup=true></${popupConfig.tagname}>`\n let htmlElements = UiUtil.htmlToElement(htmlText)\n htmlElements.config = popupConfig\n\n // 파라미터 설정\n if (ValueUtil.isNotEmpty(popupConfig.popup_field)) {\n htmlElements[popupConfig.popup_field] = paramData\n }\n\n // 팝업 오픈\n let popup = UiUtil.openPopupByElement(title, popupConfig.size, htmlElements, true, popupConfig.help)\n\n // 팝업 클로즈 핸들러\n if (popupCloseCallback) {\n popup.onclosed = popupCloseCallback\n }\n }\n\n /**\n * @description tagname, routing으로 커스텀 엘리먼트 생성\n ****************************************************\n * @param {String} tagname 팝업에 포함할 태그 명\n * @param {String} routing 라우팅\n * @returns {HTMLElement} 커스텀 엘리먼트\n */\n static createCustomElement(tagname, routing) {\n let htmlStr = `<${tagname} route_name='${routing}'></${tagname}>`\n return UiUtil.htmlToElement(htmlStr)\n }\n\n /**\n * @description HTML 문자열을 elements로 변환\n **************************************\n * @param {String} htmlString html 문자열\n * @returns {HTMLElement} 커스텀 엘리먼트\n */\n static htmlToElement(htmlString) {\n var template = document.createElement('template')\n template.innerHTML = htmlString\n var elements = template.content.childNodes\n var element = elements[0]\n template.content.removeChild(element)\n return element\n }\n\n /**\n * @description 페이지 이동\n **************************************\n * @param {String} url 페이지 URL (route 값)\n * @param {Object} params 페이지 파라미터, null 가능\n */\n static pageNavigate(url, params) {\n let paramStr = params ? '?' : ''\n\n if (params) {\n paramStr += 'pass=' + JSON.stringify(params)\n }\n\n navigate(`${url}${paramStr}`)\n }\n\n /**\n * @description store의 정보 추출\n ****************************************************\n * @param {String} accessor1 스토어 액세서 1, 빈 값 가능\n * @param {String} accessor2 스토어 액세서 2, 빈 값 가능\n * @param {String} accessor3 스토어 액세서 3, 빈 값 가능\n * @returns {Object} store 정보\n */\n static getStore(accessor1, accessor2, accessor3) {\n let store = store.getState()\n\n if (accessor1 && accessor2 && accessor3) {\n return store[accessor1][accessor2][accessor3]\n } else if (accessor1 && accessor2) {\n return store[accessor1][accessor2]\n } else if (accessor1) {\n return store[accessor1]\n } else {\n return store\n }\n }\n\n /**\n * @description 커스텀 이벤트 전파\n *************************************\n * @param {String} eventName 이벤트 이름\n * @param {Object} eventDetail 이벤트 상세 정보\n */\n static fireCustomEvent(eventName, eventDetail) {\n document.dispatchEvent(\n new CustomEvent(eventName, {\n detail: eventDetail\n })\n )\n }\n\n /**\n * @description 토스트 메시지 표시\n *************************************\n * @param {String} type 토스트 타입\n * @param {String} message 메시지\n */\n static showToast(type, message) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: { type, message }\n })\n )\n }\n\n /**\n * @description Alert 메시지 창 표시\n *************************************\n * @param {String} titleCode Alert 제목 표시를 위한 용어 이름, 예) title.confirm\n * @param {String} textCode Alert 텍스트 표시를 위한 용어 이름 예) text.are_you_sure\n * @param {String} type Alert 창 유형 - info, error, warning ...\n * @param {String} confirmButtonCode 확인 버튼 표시를 위한 용어 이름 예) confirm\n * @param {String} [cancelButtonCode] 취소 버튼 표시를 위한 용어 이름 예) cancel\n * @returns {Object} Alert 팝업\n */\n static async showAlertPopup(titleCode, textCode, type, confirmButtonCode, cancelButtonCode) {\n let popupTitle = TermsUtil.t(titleCode) || titleCode\n let popupText = TermsUtil.t(textCode) || textCode\n let alert = { title: popupTitle, text: popupText }\n\n if (type) {\n alert['type'] = type\n }\n\n if (confirmButtonCode) {\n alert['confirmButton'] = TermsUtil.tButton(confirmButtonCode)\n }\n\n if (cancelButtonCode) {\n alert['cancelButton'] = TermsUtil.tButton(cancelButtonCode)\n }\n\n return await CustomAlert(alert)\n }\n\n /**\n * @description 필터 폼 내의 에디터들이 가지고 있는 값을 키-값 형태로 추출\n *******************************************************\n * @param {Object} filterForm 그리드 필터 폼\n * @returns {Object} 필터 폼 내의 에디터들이 가지고 있는 값을 키-값 형태로 추출\n */\n static getFilterFormData(filterForm) {\n let formValues = {}\n\n if (ValueUtil.isNotEmpty(filterForm)) {\n let filters = filterForm.filters()\n\n if (ValueUtil.isNotEmpty(filters)) {\n filters.forEach(f => {\n if (ValueUtil.isNotEmpty(f.value)) {\n item[f.name] = f.value ? f.value : null\n }\n })\n }\n }\n\n return formValues\n }\n\n /**\n * @description name으로 필터 폼 내 에디터를 찾아 값을 셋팅\n *****************************************************\n * @param {Object} filterForm 그리스트 필터 폼\n * @param {String} name 그리스트 필터 폼 내 에디터의 이름\n * @param {Object} value 설정할 값\n */\n static setSearchFormEditorValue(filterForm, name, value) {\n if (ValueUtil.isNotEmpty(filterForm)) {\n let editor = filterForm.renderRoot?.querySelector(`[name='${name}']`)\n\n if (ValueUtil.isNotEmpty(editor)) {\n editor.value = value\n }\n }\n }\n\n /**\n * @description 파라미터를 기준으로 유형에 맞는 에디터를 생성한다.\n ******************************************************\n * @param {String} editorType 에디터 유형\n * @param {Object} column 컬럼 Object\n * @param {Object} record 레코드 Object\n * @param {Number} rowIndex 추가할 열 Index\n * @returns {HTMLElement} HTML 에디터\n */\n static createEditorHtml(editorType, column, record, rowIndex) {\n return getEditor(editorType)('', column, record, rowIndex, {})\n }\n\n /**\n * @description 에디터에 값을 설정한다.\n *********************************\n * @param {Object} editor 에디터\n * @param {String} newValue 설정할 값\n */\n static setValueToEditor(editor, newValue) {\n let input = UiUtil.getLeafInput(editor)\n input.value = newValue\n }\n\n /**\n * @description 엘리먼트 내 최 하단 Input Element를 추출\n ************************************************\n * @param {Object} editor 에디터\n * @returns {HTMLElement} 엘리먼트 내 최 하단 Input Element\n */\n static getLeafInput(editor) {\n let editorType = editor.getType()\n\n if (editorType == 'code-editor') {\n return editor.renderRoot.querySelector('ox-input-code')\n } else if (editorType == 'textarea') {\n return editor.renderRoot.querySelector('textarea')\n } else if (editorType == 'select-combo') {\n return editor.renderRoot.querySelector('ox-select').firstElementChild\n } else if (editorType == 'barcode') {\n return editor.renderRoot.querySelector('ox-input-barcode').renderRoot.querySelector('input')\n } else {\n return editor.renderRoot.firstElementChild.editor\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ui-util.js","sourceRoot":"","sources":["../../client/utils/ui-util.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;GAKG;AACH,MAAM,OAAO,MAAM;IACjB;;;;OAIG;IACH,MAAM,CAAC,WAAW;QAChB,OAAO,cAAc,EAAE,CAAA;IACzB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa;QAClB,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC5B,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;QACpD,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QACnD,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QACvC,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,OAAO,CAAA;;YAC7B,OAAO,MAAM,CAAA;IACpB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,wBAAwB;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAA;QAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc;QACnB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK;QACvB,UAAU,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE;QAC3E,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAA;QAChC,CAAC;QAED,OAAO,SAAS,CAAC,OAAO,EAAE;YACxB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;YAClD,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAChD,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB;QAC7E,QAAQ;QACR,IAAI,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;YAC9D,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxE,CAAC,CAAC,SAAS,CAAA;QAEb,aAAa;QACb,IAAI,QAAQ,GAAG,IAAI,WAAW,CAAC,OAAO,gBAAgB,WAAW,CAAC,IAAI,gBAAgB,WAAW,qBAAqB,WAAW,CAAC,OAAO,GAAG,CAAA;QAC5I,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACjD,YAAY,CAAC,MAAM,GAAG,WAAW,CAAA;QAEjC,UAAU;QACV,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;QACnD,CAAC;QAED,QAAQ;QACR,IAAI,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;QAEpG,aAAa;QACb,IAAI,kBAAkB,EAAE,CAAC;YACvB,KAAK,CAAC,QAAQ,GAAG,kBAAkB,CAAA;QACrC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO;QACzC,IAAI,OAAO,GAAG,IAAI,OAAO,gBAAgB,OAAO,OAAO,OAAO,GAAG,CAAA;QACjE,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU;QAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QACjD,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAA;QAC/B,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAA;QAC1C,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACrC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM;QAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAEhC,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC9C,CAAC;QAED,QAAQ,CAAC,GAAG,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS;QAC7C,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE5B,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW;QAC3C,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,SAAS,EAAE;YACzB,MAAM,EAAE,WAAW;SACpB,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO;QAC5B,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SAC1B,CAAC,CACH,CAAA;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,gBAAgB;QACxF,IAAI,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,SAAS,CAAA;QACpD,IAAI,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;QACjD,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAElD,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;QACtB,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACtB,KAAK,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC7D,CAAC;QAED,OAAO,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAU;QACjC,IAAI,UAAU,GAAG,EAAE,CAAA;QAEnB,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,CAAA;YAElC,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAClB,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wBAClC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;oBACzC,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK;QACrD,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,CAAA;YAErE,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;QAC1D,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;IAChE,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ;QACtC,IAAI,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACvC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAA;IACxB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM;QACxB,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;QAEjC,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;QACzD,CAAC;aAAM,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QACpD,CAAC;aAAM,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAA;QACvE,CAAC;aAAM,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC9F,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAA;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["import { store, CustomAlert, navigate } from '@things-factory/shell'\n\nimport { openPopup } from '@operato/layout'\nimport { closePopup } from '@operato/popup'\nimport { isMobileDevice } from '@operato/utils'\nimport { getEditor } from '@operato/data-grist'\n\nimport { TermsUtil } from './terms-util'\nimport { ValueUtil } from './value-util'\n\n/**\n * @license\n * Copyright © HatioLab Inc. All rights reserved.\n * @author Shortstop <shortstop@hatiolab.com>\n * @description UI 관련 유틸리티 함수 정의\n */\nexport class UiUtil {\n /**\n * @description 현재 디바이스가 모바일 장비인지 체크\n **************************************\n * @returns {Boolean} 모바일 장비 여부\n */\n static isMobileEnv() {\n return isMobileDevice()\n }\n\n /**\n * @description 현재 로케일 정보 리턴\n **************************************\n * @returns {String} 현재 브라우저의 로케일 정보\n */\n static currentLocale() {\n let cookie = document.cookie\n cookie = cookie.substring(cookie.indexOf('i18next'))\n if (cookie.indexOf(';') > -1) {\n cookie = cookie.substring(0, cookie.indexOf(';'))\n }\n cookie = cookie.replace('i18next=', '')\n if (cookie == 'ko') return 'ko-KR'\n else return cookie\n }\n\n /**\n * @description 최종 애플리케이션 모듈 정보 리턴\n *****************************************\n * @returns {Object} 최종 애플리케이션 모듈\n */\n static getApplicationModuleInfo() {\n let modules = store.getState().app.modules\n return modules[modules.length - 1]\n }\n\n /**\n * @description 현재 액티브 된 화면의 라우팅 정보\n **************************************\n * @returns {String} 현재 액티브 된 화면의 라우팅 정보\n */\n static currentRouting() {\n return store.getState().route.page\n }\n\n /**\n * @description popup 닫기\n ************************\n * @param {HTML} popup\n */\n static closePopupBy(popup) {\n closePopup(popup)\n }\n\n /**\n * @description 오픈하고자 하는 엘리먼트를 받아 팝업 오픈\n *************************************************\n * @param {String} popupTitle 팝업 타이틀\n * @param {String} popupSize 팝업 사이즈 ex) 'large', 'medium', 'small'\n * @param {HTMLElement} element 팝업에 표시할 엘리먼트\n * @param {Boolean} backdrop 백드롭 여부\n * @param {String} help help 파일 경로\n * @returns {Object} popup\n */\n static openPopupByElement(popupTitle, popupSize, element, backdrop, help = '') {\n if (popupSize === 'full') {\n element.style.height = '95dvh'\n }\n\n return openPopup(element, {\n backdrop: true,\n hovering: popupSize === 'full' ? 'edge' : 'center',\n size: popupSize === 'full' ? 'large' : popupSize,\n title: popupTitle,\n backdrop: backdrop,\n help: help\n })\n }\n\n /**\n * @description popupConfig에 포함된 element 정보를 이용해 팝업을 연다\n **************************************************************\n * @param {String} title 팝업 타이틀\n * @param {Object} popupConfig 팝업 구성을 위한 설정 정보 ex) { module: '', location: '', tagname: '', size : '', popup_field: '', parent_field: ''}\n * @param {Object} paramData 팝업에 넘겨 줄 파라미터\n * @param {Function} popupCloseCallback 팝업 닫을 때 실행되기 위한 콜백 함수\n */\n static async openDynamicPopup(title, popupConfig, paramData, popupCloseCallback) {\n // 부모 필드\n let parentValue = ValueUtil.isNotEmpty(popupConfig.parent_field)\n ? ValueUtil.getParams(paramData, ...popupConfig.parent_field.split('.'))\n : undefined\n\n // 팝업 엘리먼트 생성\n let htmlText = `<${popupConfig.tagname} route_name='${popupConfig.menu}' parent_id='${parentValue}' is_popup=true></${popupConfig.tagname}>`\n let htmlElements = UiUtil.htmlToElement(htmlText)\n htmlElements.config = popupConfig\n\n // 파라미터 설정\n if (ValueUtil.isNotEmpty(popupConfig.popup_field)) {\n htmlElements[popupConfig.popup_field] = paramData\n }\n\n // 팝업 오픈\n let popup = UiUtil.openPopupByElement(title, popupConfig.size, htmlElements, true, popupConfig.help)\n\n // 팝업 클로즈 핸들러\n if (popupCloseCallback) {\n popup.onclosed = popupCloseCallback\n }\n }\n\n /**\n * @description tagname, routing으로 커스텀 엘리먼트 생성\n ****************************************************\n * @param {String} tagname 팝업에 포함할 태그 명\n * @param {String} routing 라우팅\n * @returns {HTMLElement} 커스텀 엘리먼트\n */\n static createCustomElement(tagname, routing) {\n let htmlStr = `<${tagname} route_name='${routing}'></${tagname}>`\n return UiUtil.htmlToElement(htmlStr)\n }\n\n /**\n * @description HTML 문자열을 elements로 변환\n **************************************\n * @param {String} htmlString html 문자열\n * @returns {HTMLElement} 커스텀 엘리먼트\n */\n static htmlToElement(htmlString) {\n var template = document.createElement('template')\n template.innerHTML = htmlString\n var elements = template.content.childNodes\n var element = elements[0]\n template.content.removeChild(element)\n return element\n }\n\n /**\n * @description 페이지 이동\n **************************************\n * @param {String} url 페이지 URL (route 값)\n * @param {Object} params 페이지 파라미터, null 가능\n */\n static pageNavigate(url, params) {\n let paramStr = params ? '?' : ''\n\n if (params) {\n paramStr += 'pass=' + JSON.stringify(params)\n }\n\n navigate(`${url}${paramStr}`)\n }\n\n /**\n * @description store의 정보 추출\n ****************************************************\n * @param {String} accessor1 스토어 액세서 1, 빈 값 가능\n * @param {String} accessor2 스토어 액세서 2, 빈 값 가능\n * @param {String} accessor3 스토어 액세서 3, 빈 값 가능\n * @returns {Object} store 정보\n */\n static getStore(accessor1, accessor2, accessor3) {\n let store = store.getState()\n\n if (accessor1 && accessor2 && accessor3) {\n return store[accessor1][accessor2][accessor3]\n } else if (accessor1 && accessor2) {\n return store[accessor1][accessor2]\n } else if (accessor1) {\n return store[accessor1]\n } else {\n return store\n }\n }\n\n /**\n * @description 커스텀 이벤트 전파\n *************************************\n * @param {String} eventName 이벤트 이름\n * @param {Object} eventDetail 이벤트 상세 정보\n */\n static fireCustomEvent(eventName, eventDetail) {\n document.dispatchEvent(\n new CustomEvent(eventName, {\n detail: eventDetail\n })\n )\n }\n\n /**\n * @description 토스트 메시지 표시\n *************************************\n * @param {String} type 토스트 타입\n * @param {String} message 메시지\n */\n static showToast(type, message) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: { type, message }\n })\n )\n }\n\n /**\n * @description Alert 메시지 창 표시\n *************************************\n * @param {String} titleCode Alert 제목 표시를 위한 용어 이름, 예) title.confirm\n * @param {String} textCode Alert 텍스트 표시를 위한 용어 이름 예) text.are_you_sure\n * @param {String} type Alert 창 유형 - info, error, warning ...\n * @param {String} confirmButtonCode 확인 버튼 표시를 위한 용어 이름 예) confirm\n * @param {String} [cancelButtonCode] 취소 버튼 표시를 위한 용어 이름 예) cancel\n * @returns {Object} Alert 팝업\n */\n static async showAlertPopup(titleCode, textCode, type, confirmButtonCode, cancelButtonCode) {\n let popupTitle = TermsUtil.t(titleCode) || titleCode\n let popupText = TermsUtil.t(textCode) || textCode\n let alert = { title: popupTitle, text: popupText }\n\n if (type) {\n alert['type'] = type\n }\n\n if (confirmButtonCode) {\n alert['confirmButton'] = TermsUtil.tButton(confirmButtonCode)\n }\n\n if (cancelButtonCode) {\n alert['cancelButton'] = TermsUtil.tButton(cancelButtonCode)\n }\n\n return await CustomAlert(alert)\n }\n\n /**\n * @description 필터 폼 내의 에디터들이 가지고 있는 값을 키-값 형태로 추출\n *******************************************************\n * @param {Object} filterForm 그리드 필터 폼\n * @returns {Object} 필터 폼 내의 에디터들이 가지고 있는 값을 키-값 형태로 추출\n */\n static getFilterFormData(filterForm) {\n let formValues = {}\n\n if (ValueUtil.isNotEmpty(filterForm)) {\n let filters = filterForm.filters()\n\n if (ValueUtil.isNotEmpty(filters)) {\n filters.forEach(f => {\n if (ValueUtil.isNotEmpty(f.value)) {\n item[f.name] = f.value ? f.value : null\n }\n })\n }\n }\n\n return formValues\n }\n\n /**\n * @description name으로 필터 폼 내 에디터를 찾아 값을 셋팅\n *****************************************************\n * @param {Object} filterForm 그리스트 필터 폼\n * @param {String} name 그리스트 필터 폼 내 에디터의 이름\n * @param {Object} value 설정할 값\n */\n static setSearchFormEditorValue(filterForm, name, value) {\n if (ValueUtil.isNotEmpty(filterForm)) {\n let editor = filterForm.renderRoot?.querySelector(`[name='${name}']`)\n\n if (ValueUtil.isNotEmpty(editor)) {\n editor.value = value\n }\n }\n }\n\n /**\n * @description 파라미터를 기준으로 유형에 맞는 에디터를 생성한다.\n ******************************************************\n * @param {String} editorType 에디터 유형\n * @param {Object} column 컬럼 Object\n * @param {Object} record 레코드 Object\n * @param {Number} rowIndex 추가할 열 Index\n * @returns {HTMLElement} HTML 에디터\n */\n static createEditorHtml(editorType, column, record, rowIndex) {\n return getEditor(editorType)('', column, record, rowIndex, {})\n }\n\n /**\n * @description 에디터에 값을 설정한다.\n *********************************\n * @param {Object} editor 에디터\n * @param {String} newValue 설정할 값\n */\n static setValueToEditor(editor, newValue) {\n let input = UiUtil.getLeafInput(editor)\n input.value = newValue\n }\n\n /**\n * @description 엘리먼트 내 최 하단 Input Element를 추출\n ************************************************\n * @param {Object} editor 에디터\n * @returns {HTMLElement} 엘리먼트 내 최 하단 Input Element\n */\n static getLeafInput(editor) {\n let editorType = editor.getType()\n\n if (editorType == 'code-editor') {\n return editor.renderRoot.querySelector('ox-input-code')\n } else if (editorType == 'textarea') {\n return editor.renderRoot.querySelector('textarea')\n } else if (editorType == 'select-combo') {\n return editor.renderRoot.querySelector('ox-select').firstElementChild\n } else if (editorType == 'barcode') {\n return editor.renderRoot.querySelector('ox-input-barcode').renderRoot.querySelector('input')\n } else {\n return editor.renderRoot.firstElementChild.editor\n }\n }\n}\n"]}