@things-factory/meta-ui 8.0.40 → 9.0.0-9.0.0-beta.59.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 (118) 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/tsconfig.tsbuildinfo +1 -1
  5. package/dist-client/utils/service-util.d.ts +2 -2
  6. package/dist-client/utils/service-util.js +4 -4
  7. package/dist-client/utils/service-util.js.map +1 -1
  8. package/dist-server/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +24 -24
  10. package/client/bootstrap.ts +0 -170
  11. package/client/component/filter/filter-form-meta-code-select.ts +0 -102
  12. package/client/component/filter/filter-form-meta-object-select.ts +0 -107
  13. package/client/component/filter/filter-grist-meta-code-select.ts +0 -97
  14. package/client/component/filter/filter-grist-meta-object-select.ts +0 -102
  15. package/client/component/grist/editor/grist-editor-code-input.js +0 -96
  16. package/client/component/grist/editor/grist-editor-meta-code-selector.js +0 -157
  17. package/client/component/grist/editor/grist-editor-meta-object-selector.js +0 -122
  18. package/client/component/grist/renderer/grist-renderer-code-input.js +0 -20
  19. package/client/component/grist/renderer/grist-renderer-meta-code-selector.js +0 -28
  20. package/client/component/grist/renderer/grist-renderer-meta-object-selector.js +0 -25
  21. package/client/component/popup/code-input-editor-popup.js +0 -111
  22. package/client/component/popup/file-upload-popup.js +0 -129
  23. package/client/component/popup/meta-object-selector-popup.ts +0 -356
  24. package/client/component/popup/record-based-code-editor-popup.ts +0 -141
  25. package/client/dynamic-menus.ts +0 -38
  26. package/client/index.ts +0 -18
  27. package/client/load-components.ts +0 -17
  28. package/client/mixin/meta-base-mixin.js +0 -323
  29. package/client/mixin/meta-basic-grist-mixin.js +0 -283
  30. package/client/mixin/meta-button-mixin.js +0 -116
  31. package/client/mixin/meta-form-mixin.js +0 -435
  32. package/client/mixin/meta-grist-tab-mixin.js +0 -335
  33. package/client/mixin/meta-main-tab-mixin.js +0 -267
  34. package/client/mixin/meta-master-detail-mixin.js +0 -395
  35. package/client/mixin/meta-service-mixin.js +0 -306
  36. package/client/mixin/meta-tab-detail-mixin.js +0 -283
  37. package/client/mixin/meta-tab-mixin.js +0 -190
  38. package/client/pages/activity/meta-activity-define-page.js +0 -422
  39. package/client/pages/activity/meta-activity-list-page.js +0 -262
  40. package/client/pages/activity/meta-activity-viewer-element.js +0 -35
  41. package/client/pages/activity/meta-activity-writer-element.js +0 -48
  42. package/client/pages/activity/meta-activiy-mixin.js +0 -79
  43. package/client/pages/button-role/button-role-detail.js +0 -50
  44. package/client/pages/button-role/button-role-page.js +0 -25
  45. package/client/pages/doc-number/doc-number-page.js +0 -24
  46. package/client/pages/doc-number/next-doc-number-popup.js +0 -25
  47. package/client/pages/entity/config-entity.js +0 -955
  48. package/client/pages/entity/main-menu-selector.js +0 -245
  49. package/client/pages/history/history-copy-list-popup.js +0 -145
  50. package/client/pages/history/history-json-list-popup.js +0 -159
  51. package/client/pages/menu/dynamic-menu-template.js +0 -92
  52. package/client/pages/menu/dynamic-menu.ts +0 -744
  53. package/client/pages/menu/export-menu-popup.js +0 -468
  54. package/client/pages/meta-form-element.js +0 -9
  55. package/client/pages/meta-grist-element.js +0 -12
  56. package/client/pages/meta-grist-page.js +0 -16
  57. package/client/pages/meta-grist-tab-element.js +0 -16
  58. package/client/pages/meta-grist-tab-page.js +0 -16
  59. package/client/pages/meta-main-tab-element.js +0 -12
  60. package/client/pages/meta-main-tab-page.js +0 -16
  61. package/client/pages/meta-master-detail-element.js +0 -12
  62. package/client/pages/meta-master-detail-page.js +0 -16
  63. package/client/pages/meta-tab-detail-element.js +0 -12
  64. package/client/pages/meta-tab-detail-page.js +0 -16
  65. package/client/pages/meta-tab-element.js +0 -15
  66. package/client/pages/printer-device/printer-device-page.js +0 -24
  67. package/client/pages/template/doc-template-page.js +0 -24
  68. package/client/pages/template/template-file-page.js +0 -24
  69. package/client/pages/terms/config-terminology.js +0 -214
  70. package/client/pages/work-code/work-code-detail-popup.js +0 -16
  71. package/client/pages/work-code/work-code-page.js +0 -23
  72. package/client/route.ts +0 -36
  73. package/client/tsconfig.json +0 -13
  74. package/client/utils/grist-default-value.js +0 -36
  75. package/client/utils/meta-api.js +0 -811
  76. package/client/utils/meta-crypto.js +0 -52
  77. package/client/utils/meta-ui-util.js +0 -3304
  78. package/client/utils/rest-service-util.js +0 -328
  79. package/client/utils/service-util.js +0 -1327
  80. package/client/utils/terms-util.ts +0 -119
  81. package/client/utils/ui-util.js +0 -338
  82. package/client/utils/value-util.js +0 -234
  83. package/server/activity/CommonActivity.ts +0 -68
  84. package/server/index.ts +0 -3
  85. package/server/routes.ts +0 -61
  86. package/server/service/button-role/button-role-mutation.ts +0 -105
  87. package/server/service/button-role/button-role-query.ts +0 -53
  88. package/server/service/button-role/button-role-type.ts +0 -39
  89. package/server/service/button-role/button-role.ts +0 -61
  90. package/server/service/button-role/index.ts +0 -7
  91. package/server/service/dynamic-menu/dynamic-menu-query.ts +0 -270
  92. package/server/service/dynamic-menu/dynamic-menu-type.ts +0 -74
  93. package/server/service/dynamic-menu/index.ts +0 -3
  94. package/server/service/entity-event-subscriber/entity-event-subscriber.ts +0 -80
  95. package/server/service/entity-event-subscriber/index.ts +0 -3
  96. package/server/service/index.ts +0 -41
  97. package/server/service/menu-button-auth/index.ts +0 -7
  98. package/server/service/menu-button-auth/menu-button-auth-mutation.ts +0 -133
  99. package/server/service/menu-button-auth/menu-button-auth-query.ts +0 -138
  100. package/server/service/menu-button-auth/menu-button-auth-type.ts +0 -63
  101. package/server/service/menu-button-auth/menu-button-auth.ts +0 -92
  102. package/server/service/meta-activity/index.ts +0 -5
  103. package/server/service/meta-activity/meta-activity-mutation.ts +0 -191
  104. package/server/service/meta-activity/meta-activity-query.ts +0 -43
  105. package/server/service/meta-activity/meta-activity-type.ts +0 -56
  106. package/server/service/set-translations/index.ts +0 -3
  107. package/server/service/set-translations/set-translation-resolver.ts +0 -63
  108. package/server/service/work-code/index.ts +0 -6
  109. package/server/service/work-code/work-code-mutation.ts +0 -147
  110. package/server/service/work-code/work-code-query.ts +0 -67
  111. package/server/service/work-code/work-code-type.ts +0 -60
  112. package/server/service/work-code/work-code.ts +0 -83
  113. package/server/service/work-code-detail/index.ts +0 -6
  114. package/server/service/work-code-detail/work-code-detail-mutation.ts +0 -149
  115. package/server/service/work-code-detail/work-code-detail-query.ts +0 -59
  116. package/server/service/work-code-detail/work-code-detail-type.ts +0 -50
  117. package/server/service/work-code-detail/work-code-detail.ts +0 -82
  118. package/server/tsconfig.json +0 -9
@@ -96,10 +96,10 @@ export class ServiceUtil {
96
96
  ************************************************
97
97
  * @param {String} exportFileName 그리드 내보내기 용 타이틀 (파일명)
98
98
  * @param {String} exportQueryName 서버 사이드 GraphQL 쿼리명
99
- * @param {Object} filterParam 필터용 파라미터
99
+ * @param {Grist} grist 그리드 오브젝트
100
100
  * @returns {Object} { header: headerSetting, data: data } or Not
101
101
  */
102
- static exportableDataByServer(exportFileName: string, exportQueryName: string, filterParam: any): any;
102
+ static exportableDataByServer(exportFileName: string, exportQueryName: string, grist: Grist): any;
103
103
  /**
104
104
  * @description 데이터 리스트 페이지네이션 조회
105
105
  ****************************************
@@ -453,10 +453,10 @@ export class ServiceUtil {
453
453
  ************************************************
454
454
  * @param {String} exportFileName 그리드 내보내기 용 타이틀 (파일명)
455
455
  * @param {String} exportQueryName 서버 사이드 GraphQL 쿼리명
456
- * @param {Object} filterParam 필터용 파라미터
456
+ * @param {Grist} grist 그리드 오브젝트
457
457
  * @returns {Object} { header: headerSetting, data: data } or Not
458
458
  */
459
- static async exportableDataByServer(exportFileName, exportQueryName, filterParam) {
459
+ static async exportableDataByServer(exportFileName, exportQueryName, grist) {
460
460
  // 1. 내보내기 graphQL 요청
461
461
  const response = await client.query({
462
462
  query: gql `
@@ -465,7 +465,7 @@ export class ServiceUtil {
465
465
  }
466
466
  `,
467
467
  variables: {
468
- filters: filterParam
468
+ filters: grist.filters
469
469
  }
470
470
  });
471
471
  // 2. 응답 처리
@@ -846,7 +846,7 @@ export class ServiceUtil {
846
846
  return await ServiceUtil.callQueryService(action, filterParam, dataParams);
847
847
  }
848
848
  else if (action.graphql_type == 'export') {
849
- return await ServiceUtil.exportableDataByServer(action.export_file_name, action.query_name, filterParam);
849
+ return await ServiceUtil.exportableDataByServer(action.export_file_name, action.query_name, pageView.grist);
850
850
  }
851
851
  else {
852
852
  return await ServiceUtil.callMutationService(action, filterParam, dataParams);
@@ -1 +1 @@
1
- {"version":3,"file":"service-util.js","sourceRoot":"","sources":["../../client/utils/service-util.js"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAA;AAEjG,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACtB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO;QAC5B,qCAAqC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE,CAAA;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAA;gBACpD,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,KAAK,CAAA;QACd,CAAC;QAED,sBAAsB;QACtB,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO;QACtC,IAAI,SAAS,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACpD,IAAI,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACpC,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,OAAO,EAAE,CAAC,CAAC,WAAW;aACvB,CAAA;QACH,CAAC,CAAC,CAAA;QACF,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;QACjD,OAAO,aAAa,CAAA;IACtB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS;QACpD,IAAI,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QACnF,IACE,QAAQ;YACR,QAAQ,CAAC,IAAI;YACb,QAAQ,CAAC,IAAI,CAAC,WAAW;YACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM;YAChC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EACvC,CAAC;YACD,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAA;YACnD,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YACzC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACnB,OAAO;oBACL,KAAK,EAAE,CAAC,CAAC,IAAI;oBACb,OAAO,EAAE,CAAC,CAAC,WAAW;iBACvB,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE;QAC/G,IAAI,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAErC,IAAI,YAAY,GAAG;QACf,SAAS;QACT,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;KACzC,CAAA;QAED,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAA;QAClG,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;QAExC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACzB,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;YAEvB,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEnB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,IAAI,IAAI,MAAM;yBACf,MAAM,CAAC,CAAC,CAAC;yBACT,GAAG,CAAC,KAAK,CAAC,EAAE;wBACX,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;oBACjB,CAAC,CAAC;yBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;gBACjB,CAAC;YACH,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,UAAU;QAC9C,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,MAAM,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC;SAC/D,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU;;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;wDAEwC,UAAU;;;;;;;;;;;;;;OAc3D;SACF,CAAC,CAAA;QAEF,OAAO,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,YAAY,KAAI,EAAE,CAAA;IAC1C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc;QACzB,IAAI,SAAS,GAAG,MAAM,WAAW,CAAC,oBAAoB,EAAE,CAAA;QACxD,OAAO,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5E,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CAAC,WAAW;QAClC,IAAI,QAAQ,GAAG,EAAE,CAAA;QAEjB;;;;;WAKG;QACH,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAA;gBACxB,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC9B,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;wBAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAA;wBACrB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACxB,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,iCAAiC;QACjC,IAAI,SAAS,GAAG,QAAQ;aACrB,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;gBACxD,IAAI,KAAK,GAAG;oBACV,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM,EAAE,IAAI;oBACZ,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAChC,IAAI,EAAE,IAAI,CAAC,QAAQ;oBACnB,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAC7C,KAAK,EAAE,EAAE;iBACV,CAAA;gBAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAA;gBAC3B,CAAC;gBAED,OAAO,KAAK,CAAA;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAA;YACpB,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;QAE3B,yBAAyB;QACzB,IAAI,MAAM,GAAG,QAAQ;aAClB,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,aAAa,EAAE,CAAC;gBAChE,sCAAsC;gBACtC,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAClE,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAEtC,+CAA+C;oBAC/C,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;wBAC9B,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;4BACpB,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,IAAI,EAAE,KAAK;4BACX,IAAI,EAAE,IAAI,CAAC,OAAO;4BAClB,IAAI,EAAE,IAAI,CAAC,QAAQ;yBACpB,CAAC,CAAA;oBACJ,CAAC;oBAED,sCAAsC;oBACtC,OAAO;wBACL,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,MAAM,EAAE,KAAK;wBACb,SAAS,EAAE,UAAU,CAAC,EAAE;wBACxB,KAAK,EAAE,KAAK;wBACZ,OAAO,EAAE,IAAI,CAAC,QAAQ;wBACtB,IAAI,EAAE,IAAI,CAAC,OAAO;wBAClB,QAAQ,EAAE,IAAI,CAAC,WAAW;wBAC1B,YAAY,EAAE,IAAI,CAAC,WAAW;qBAC/B,CAAA;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;gBACnC,OAAO;oBACL,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBACjC,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,IAAI,EAAE,IAAI,CAAC,OAAO;oBAClB,QAAQ,EAAE,IAAI,CAAC,WAAW;oBAC1B,YAAY,EAAE,IAAI,CAAC,WAAW;iBAC/B,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAA;YACpB,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;QAE7C,4BAA4B;QAC5B,SAAS;aACN,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aAC/D,OAAO,CAAC,SAAS,CAAC,EAAE;YACnB,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;YACjE,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEJ,gCAAgC;QAChC,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC7B,QAAQ;gBACR,QAAQ,EAAE,CAAA;gBACV,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAA;gBACzE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;gBAChD,QAAQ;gBACR,QAAQ,EAAE,CAAA;gBACV,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,0BAA0B,CAAC,CAAC,CAAA;gBACpF,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;gBACrC,UAAU;gBACV,QAAQ,EAAE,CAAA;gBACV,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,6BAA6B,EAAE,CAAA;QACjC,CAAC;QAED,eAAe;QACf,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAC7C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,oBAAoB;;QAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCT;YACD,SAAS,EAAE;gBACT,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,YAAY;wBAClB,QAAQ,EAAE,OAAO;wBACjB,KAAK,EAAE,IAAI;qBACZ;oBACD;wBACE,8FAA8F;wBAC9F,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;qBACjC;iBACF;gBACD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAC7B;SACF,CAAC,CAAA;QAEF,OAAO,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,OAAO,CAAC,KAAK,KAAI,EAAE,CAAA;IAC3C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ;QAC5C,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAC9B,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAA;YAC9B,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAA;YAE5B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAA;gBAC7B,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;YACxB,CAAC;YAED,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,SAAS;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC5D,MAAM,WAAW,CAAC,wBAAwB,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK;QACvD,WAAW;QACX,IAAI,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO;aACtC,MAAM,CACL,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CACjH;aACA,GAAG,CAAC,MAAM,CAAC,EAAE;YACZ,OAAO,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC,CAAC,CAAA;QAEJ,qBAAqB;QACrB,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAA;QAChC,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC5B,yBACK,KAAK,CAAC,OAAO,CAAC,OAAO;iBACrB,MAAM,CACL,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACxB,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC3B,MAAM,CAAC,IAAI,KAAK,SAAS;gBACzB,MAAM,CAAC,MAAM,KAAK,IAAI,CACzB;iBACA,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;gBACzB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;;oBACvE,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;oBAElE,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;wBAC5B,OAAO,MAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,0CAAE,OAAO,0CAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,0CAAE,OAAO,CAAA;oBAC9E,CAAC;yBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC1C,OAAO,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAA;oBAClB,CAAC;oBAED,OAAO,GAAG,CAAA;gBACZ,CAAC,EAAE,IAAI,CAAC,CAAA;gBACR,OAAO,MAAM,CAAA;YACf,CAAC,EAAE,EAAE,CAAC,EACT;QACH,CAAC,CAAC,CAAA;QAEF,qCAAqC;QACrC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,QAAQ,CAAC;gBACb,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE;oBACV,SAAS,EAAE,MAAM;oBACjB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;iBAC5C;aACF,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;QAC9C,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,cAAc,EAAE,eAAe,EAAE,WAAW;QAC9E,qBAAqB;QACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;uBAEO,eAAe;;OAE/B;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,WAAW;aACrB;SACF,CAAC,CAAA;QAEF,WAAW;QACX,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAA;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,mEAAmE,EAAE,CAAC,CAAA;QAElH,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACzC,CAAC,CAAC,QAAQ,GAAG,GAAG,cAAc,OAAO,CAAA;QACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC,CAAC,KAAK,EAAE,CAAA;QACT,CAAC,CAAC,MAAM,EAAE,CAAA;IACZ,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY;QACzF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAA;;cAEJ,SAAS;;kBAEL,YAAY;;;;;SAKrB;gBACD,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;aAC9D,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO;oBACL,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK;oBACvC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK;iBACtC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,YAAY;QAC9C,IAAI,CAAC;YACH,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAChC,KAAK,EAAE,GAAG,CAAA;;cAEJ,SAAS;gBACP,YAAY;;;SAGnB;gBACD,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;aACtB,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO;QACzD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAA;;cAEJ,SAAS;gBACP,YAAY;;;SAGnB;gBACD,SAAS,EAAE,EAAE,OAAO,EAAE;aACvB,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO;QAC3D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAA;;cAEJ,SAAS;;kBAEL,YAAY;;;;SAIrB;gBACD,SAAS,EAAE,EAAE,OAAO,EAAE;aACvB,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,cAAc;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEnD,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YACrD,MAAM,CAAC,cAAc,CAAC,uBAAuB,EAAE,iCAAiC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;QACtG,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,EAAE,YAAY;QACxD,IAAI,GAAG,GAAG,WAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAEpD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;YACjE,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,KAAK,EAAE,CAAA;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,YAAY;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAChH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;oBAClC,KAAK,EAAE,GAAG,CAAA;;gBAEJ,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;cAC/C;iBACL,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACrB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAA;oBAC9D,OAAO,IAAI,CAAA;gBACb,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;gBAChD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,YAAY;QACjD,IAAI,OAAO,GAAG,WAAW,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAA;QAEzD,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;YACpE,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,KAAK,EAAE,CAAA;gBACb,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO;QAC/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAA;;cAEJ,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;;;UAGrD;gBACF,OAAO,EAAE;oBACP,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;gBAC5D,OAAO,IAAI,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK;QAC3D,aAAa;QACb,IAAI,UAAU,GAAG,KAAK,CAAC,YAAY,CAAA;QACnC,WAAW;QACX,IAAI,gBAAgB,GAAG,EAAE,CAExB;QAAA,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC;aAChD,OAAO,CAAC,CAAC,CAAC,EAAE;YACX,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;QACrC,CAAC,CAAC,CAAA;QAEJ,WAAW;QACX,IAAI,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAEjH,QAAQ;QACR,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;YACxF,OAAM;QACR,CAAC;QAED,IAAI,SAAS,GAAG,EAAE,CAAA;QAElB,eAAe;QACf,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAElD,aAAa;YACb,KAAK,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;gBACjC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;oBACnB,MAAM,CAAC,cAAc,CACnB,sBAAsB,EACtB,SAAS,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EACtE,MAAM,EACN,SAAS,CACV,CAAA;oBACD,OAAM;gBACR,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBACvB,IACE,CAAC;oBACC,SAAS;oBACT,SAAS;oBACT,WAAW;oBACX,WAAW;oBACX,WAAW;oBACX,iBAAiB;oBACjB,YAAY;oBACZ,SAAS;oBACT,cAAc;iBACf,CAAC,QAAQ,CAAC,GAAG,CAAC,EACf,CAAC;oBACD,mDAAmD;oBACnD,IACE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK;wBACvC,MAAM,CAAC,GAAG,CAAC;wBACX,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;wBAC/B,cAAc,IAAI,KAAK,EACvB,CAAC;wBACD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;oBACzC,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAA;YACnC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK;QAC5C,IAAI,CAAC;YACH,IAAI,MAAM,GAAG,GAAG,CAAA;;YAEV,YAAY,SAAS,EAAE,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;;;UAG9D,CAAA;YAEJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE;oBACP,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;gBAC5D,OAAO,IAAI,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU;QAChE,IAAI,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC;YACnC,OAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAC5E,CAAC;aAAM,IAAI,MAAM,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC;YAC3C,OAAO,MAAM,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QAC1G,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU;QAC3D,mBAAmB;QACnB,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QACjC,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QACjC,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAA;QAChC,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC5B,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAE5B,iDAAiD;QACjD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YACjD,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAE9C,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;gBACxB,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtD,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;oBACvC,IAAI,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBACzC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;oBACxC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,wDAAwD;QACxD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;YAChD,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;YACtE,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAE1C,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;gBACxB,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtD,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;oBACvC,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBACvC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,qBAAqB;QACrB,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;YAC9B,SAAS;YACT,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC7B,IAAI,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YACpF,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;YACvC,CAAC;YAED,qBAAqB;YACrB,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;YAElE,4BAA4B;QAC9B,CAAC;aAAM,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;YAC1C,OAAO,MAAM,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;YAExE,oCAAoC;QACtC,CAAC;aAAM,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,OAAO,MAAM,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;YAE1E,iCAAiC;QACnC,CAAC;aAAM,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;YACrC,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YACxB,OAAO,MAAM,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;QACrG,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,SAAS,GAAG,GAAG,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU;QAC9D,cAAc;QACd,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7C,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACtB,IAAI,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAExD,IAAI,IAAI,EAAE,CAAC;YACT,0BAA0B;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;wBACtB,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;wBACjD,IAAI,SAAS,GAAG,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;wBAC/D,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBAChC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACrC,cAAc,GAAG,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBACpE,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,IAAI,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtC,cAAc,GAAG,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,aAAa;YACb,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ;gBAC3B,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;oBACjC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAC9B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;wBACzB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAChC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAA;YACR,iBAAiB;YACjB,IAAI,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,CAC3C,MAAM,EACN,OAAO,EACP,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAChE,CAAA;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;gBAC/D,OAAO,QAAQ,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;QAC7C,mBAAmB;QACnB,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QAEvC,oBAAoB;QACpB,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAE1D,qBAAqB;QACvB,CAAC;aAAM,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;YACjC,OAAO,MAAM,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAExD,wBAAwB;QAC1B,CAAC;aAAM,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YACrC,OAAO,MAAM,WAAW,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;YAEpE,oBAAoB;QACtB,CAAC;aAAM,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;YAClC,OAAO,MAAM,WAAW,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO;QAC3C,eAAe;QACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QACvC,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QAEvC,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,GAAG,CAAA;;YAEJ,YAAY;YACZ,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;UAC9C;YACJ,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ;QAC7C,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QAEjC,kBAAkB;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QAED,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACzB,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QACvC,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QAEvC,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,GAAG,CAAA;;YAEJ,YAAY,IAAI,SAAS;YACzB,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;UAC9C;YACJ,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;SACxB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;QACrD,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QACjC,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QAEjC,kBAAkB;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QACvC,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QAEvC,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,GAAG,CAAA;0CAC0B,SAAS;YACvC,YAAY,aAAa,SAAS;YAClC,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;UAC9C;YACJ,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;SACxC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI;QAC1C,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QACjC,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;QAEjC,kBAAkB;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QAED,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QACvC,IAAI,YAAY,GAAG,MAAM,CAAC,aAAa,CAAA;QAEvC,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;YACxB,KAAK,EAAE,GAAG,CAAA;4BACY,SAAS;YACzB,YAAY,IAAI,SAAS;YACzB,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;UAC9C;YACJ,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI;QAC9E,IAAI,OAAO,GAAG,IAAI,CAAA;QAElB,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CACvC,SAAS,GAAG,UAAU,EACtB,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,QAAQ,CACT,CAAA;YACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAA;QACvB,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;oBAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;WAST;oBACD,SAAS,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE;iBAChE,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACrB,IAAI,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC3C,IAAI,UAAU,KAAK,IAAI;4BAAE,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;wBACxF,OAAO,QAAQ,CAAA;oBACjB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAA;gBAChD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ;QAC9B,IACE,QAAQ;YACR,QAAQ,CAAC,IAAI;YACb,QAAQ,CAAC,IAAI,CAAC,WAAW;YACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM;YAChC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EACtC,CAAC;YACD,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAA;YAC1D,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;YACrF,OAAO,KAAK,CAAA;QACd,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF","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 {Object} filterParam 필터용 파라미터\n * @returns {Object} { header: headerSetting, data: data } or Not\n */\n static async exportableDataByServer(exportFileName, exportQueryName, filterParam) {\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: filterParam\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, filterParam)\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"]}