sales-frontend-bridge 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -119,7 +119,7 @@ var Core = class {
119
119
  };
120
120
  }
121
121
  /**
122
- * 부모 통신
122
+ * 네이티브 통신
123
123
  * @param service
124
124
  * @param action
125
125
  * @param option
@@ -142,7 +142,6 @@ var Core = class {
142
142
  try {
143
143
  const command = {
144
144
  action,
145
- eventName: action,
146
145
  promiseId,
147
146
  option: commandOptions
148
147
  };
@@ -156,15 +155,53 @@ var Core = class {
156
155
  window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));
157
156
  return;
158
157
  }
158
+ console.warn(`[callToNative] \uD604\uC7AC \uD50C\uB7AB\uD3FC(${platform})\uC5D0\uC11C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC11C\uBE44\uC2A4(${action})\uC785\uB2C8\uB2E4.`);
159
+ this.cleanupPromise(promiseId);
160
+ reject(new Error(`Unsupported platform: ${platform}`));
161
+ } catch (error) {
162
+ console.error("[callToNative] error::", error);
163
+ this.cleanupPromise(promiseId);
164
+ reject(error);
165
+ }
166
+ });
167
+ }
168
+ /**
169
+ * iframe 통신(영업포털)
170
+ * @param eventName
171
+ * @param options
172
+ * @returns
173
+ */
174
+ async callToIframeParent(eventName, options) {
175
+ const { retainCallback: retain, ...commandOptions } = options || {};
176
+ return new Promise((resolve, reject) => {
177
+ const promiseId = `${eventName}_${this.generatePromiseId()}`;
178
+ console.log("[callToIframe] promiseId::", promiseId);
179
+ window.n2bridge.promises[promiseId] = {
180
+ resolve: (value) => {
181
+ resolve(value);
182
+ },
183
+ reject: (reason) => {
184
+ reject(reason);
185
+ },
186
+ retain
187
+ };
188
+ try {
189
+ const command = {
190
+ eventName,
191
+ promiseId,
192
+ option: commandOptions
193
+ };
194
+ console.log("[callToIframe] command::", command);
195
+ const platform = salesFrontendUtils.getDspExecutionEnvironment();
159
196
  if (platform === "iframe") {
160
197
  window.parent.postMessage(command, "*");
161
198
  return;
162
199
  }
163
- console.warn(`[callToNative] \uD604\uC7AC \uD50C\uB7AB\uD3FC(${platform})\uC5D0\uC11C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC11C\uBE44\uC2A4(${action})\uC785\uB2C8\uB2E4.`);
200
+ console.warn(`[callToIframe] \uD604\uC7AC \uD50C\uB7AB\uD3FC(${platform})\uC5D0\uC11C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC11C\uBE44\uC2A4(${eventName})\uC785\uB2C8\uB2E4.`);
164
201
  this.cleanupPromise(promiseId);
165
202
  reject(new Error(`Unsupported platform: ${platform}`));
166
203
  } catch (error) {
167
- console.error("[callToNative] error::", error);
204
+ console.error("[callToIframe] error::", error);
168
205
  this.cleanupPromise(promiseId);
169
206
  reject(error);
170
207
  }
@@ -195,13 +232,23 @@ var IframeBridge = class extends CommonBridge {
195
232
  * @returns
196
233
  */
197
234
  async openUrlWindow(options) {
198
- return this.core.callToNative("openUrlWindow", options);
235
+ return this.core.callToIframeParent("openUrlWindow", options);
199
236
  }
200
237
  // TODO: 필요 플러그인들 추가
201
238
  };
202
239
 
203
240
  // src/bridge/native-bridge.ts
204
241
  var NativeBridge = class extends CommonBridge {
242
+ /**
243
+ * getParameterMap
244
+ * @returns
245
+ */
246
+ async getParameterMap() {
247
+ return this.core.callToNative("getParameterMap");
248
+ }
249
+ async dismissPopup(options) {
250
+ return this.core.callToNative("dismissPopup", options);
251
+ }
205
252
  /**
206
253
  *
207
254
  * @param options
@@ -228,7 +275,10 @@ var NativeBridge = class extends CommonBridge {
228
275
  * ```
229
276
  */
230
277
  createReportEx(options) {
231
- return this.core.callToNative("createReportEx", Object.assign({ delimiter: "\n" }, options));
278
+ return this.core.callToNative(
279
+ "createReportEx",
280
+ Object.assign({ delimiter: "\n" }, options)
281
+ );
232
282
  }
233
283
  /**
234
284
  * ### Bridge for Oz
@@ -307,7 +357,10 @@ var NativeBridge = class extends CommonBridge {
307
357
  * ```
308
358
  */
309
359
  scriptEx(options) {
310
- return this.core.callToNative("scriptEx", Object.assign({ delimiter: "\n" }, options));
360
+ return this.core.callToNative(
361
+ "scriptEx",
362
+ Object.assign({ delimiter: "\n" }, options)
363
+ );
311
364
  }
312
365
  /**
313
366
  * ### Bridge for Oz
@@ -406,7 +459,10 @@ var NativeBridge = class extends CommonBridge {
406
459
  * ```
407
460
  */
408
461
  async savePdf(options) {
409
- return this.core.callToNative("savePdf", Object.assign({ delimiter: "\n" }, options));
462
+ return this.core.callToNative(
463
+ "savePdf",
464
+ Object.assign({ delimiter: "\n" }, options)
465
+ );
410
466
  }
411
467
  /**
412
468
  * ### Bridge for Oz
@@ -430,7 +486,10 @@ var NativeBridge = class extends CommonBridge {
430
486
  * ```
431
487
  */
432
488
  async createOzPdfViewer(options) {
433
- return this.core.callToNative("createOzPdfViewer", Object.assign({ password: "" }, options));
489
+ return this.core.callToNative(
490
+ "createOzPdfViewer",
491
+ Object.assign({ password: "" }, options)
492
+ );
434
493
  }
435
494
  /**
436
495
  * ### Bridge for Oz
@@ -464,6 +523,7 @@ var OZViewerEvent = /* @__PURE__ */ ((OZViewerEvent2) => {
464
523
  OZViewerEvent2["OZPageBindCommand"] = "OZPageBindCommand";
465
524
  OZViewerEvent2["OZEFormInputEventCommand"] = "OZEFormInputEventCommand";
466
525
  OZViewerEvent2["OZExportCommand"] = "OZExportCommand";
526
+ OZViewerEvent2["OZBtnTouchEvent"] = "btnTouchEvent";
467
527
  return OZViewerEvent2;
468
528
  })(OZViewerEvent || {});
469
529
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/iframe-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["isClient","isStorybookEnv","getDspExecutionEnvironment","OZViewerEvent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { getDspExecutionEnvironment, isClient, isStorybookEnv } from 'sales-frontend-utils';\n\nimport { BridgeAction } from '../types/common.types';\n\nimport { BridgeCommand, BridgeOptions, BridgePromise } from './core.types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n if (!isClient()) {\n return;\n } // SSR 환경에서는 아무것도 하지 않음\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n\n if (isStorybookEnv() && window.parent) {\n // 스토리북에서는 현재 스토리가 iframe으로 로드되므로 앱에서 부모 프레임에 브릿지를 리턴해도 자식으로 전달되도록 보정하는 코드\n window.parent.n2bridge = window.n2bridge;\n window.parent.dispatchEvent = (...args) => (window.dispatchEvent.apply(null, args))\n }\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 부모 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\n\n try {\n const command: BridgeCommand = {\n action,\n eventName: action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = getDspExecutionEnvironment();\n\n if (platform === 'android-webview') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios-webview') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'iframe') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IIframeBridge } from './types/iframe/iframe-bridge.types';\n\n/**\n * iframe(영업포탈) 전용 Bridge\n */\nexport class IframeBridge extends CommonBridge implements IIframeBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToNative<T>('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportExOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions,\n DownloadOzdOptions,\n SavePdfOptions,\n SaveSignImgOptions,\n CommonOzBridgetResponseType,\n UpdateOzdOptions,\n createOzPdfViewerOptions\n} from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\n */\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n\n /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n /**\n * ### Bridge for Oz\n * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.createReportEx({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n createReportEx<T = any>(options: CreateReportExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('createReportEx', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * OZ 뷰어를 닫습니다\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.hideViewer();\n * ```\n */\n hideViewer<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideViewer');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 정보를 가져옵니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = any>(options: GetInformationOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getInformation', options);\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 가져옵니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = any>(options: GetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 설정합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n setGlobal<T = any>(options: SetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('setGlobal', Object.assign({ docIndex: 0 }, options));\n\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * Bridge.native.script({ command });\n * ```\n */\n script<T = any>(options: ScriptOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('script', options);\n }\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * const param1 = `eform.show_prev_next_input=true`;\n * const param2 = `eform.signpad_iconposition=sign_bottom`;\n * // param이 여러개인경우 \\n으로 묶는다\n * const param = `${param1}\\n${param2}`;\n * Bridge.native.scriptEX({ command, param });\n * ```\n */\n scriptEx<T = any>(options: ScriptExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('scriptEx', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = any>(options: TriggerExternalEventOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEvent',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = any>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 폰트 설정들을 조회하는 브릿지입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getOzFontParam()\n * ```\n */\n async getOzFontParam<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getOzFontParam');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 OZD를 다운받는 브릿지입니다\n * @example\n * ```tsx\n * const data = [\n * { name: \"문서1\", file: [\"doc1.ozd\"], complete: true },\n * { name: \"문서2\", file: [\"doc2.ozd\", \"doc3.ozd\"], complete: true }\n * ]\n * await Bridge.native.downloadDocument(data)\n * ```\n * returnData는 file 경로가 절대경로로 매핑되어 돌아온다\n * ```json\n * {\n * \"action\":\"downloadDocument\",\n * \"data\":[\n * {\n * \"name\":\"aaa\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A0010.ozd\",\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/C0401.ozd\"\n * ],\n * \"complete\":false\n * },\n * {\n * \"name\":\"bbb\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A1500.ozd\"\n * ],\n * \"complete\":false\n * }\n * ]\n * }\n * ```\n */\n async downloadDocument<T = any>(options: DownloadOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('downloadDocument', options);\n }\n\n /**\n * ### Bridge for Oz\n * 서식의 진행중/완료 상태를 업데이트하는 브릿지\n */\n async updateOzDocumentStatus<T = any>(options: UpdateOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('updateOzDocumentStatus', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식을 PDF로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.savePdf({ exportType: \"PDF\", fileName: \"test.pdf\", startPage: 1, endPage: 1 })\n * ```\n */\n async savePdf<T = any>(options: SavePdfOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('savePdf', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식 중 서명부분을 이미지로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.saveSignImg({ exportType: \"IMG\", fileName: \"sign.png\", signImageKey: \"SIGN_IMG\" })\n * ```\n */\n async saveSignImg<T = string>(options: SaveSignImgOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('saveSignImg', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에서 생성한 PDF를 보여주는 뷰어를 연다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createOzPdfViewer({ filename: \"total.pdf\", filepaths: \"/data/0/app/total.pdf\", password: \"\" })\n * ```\n */\n async createOzPdfViewer<T>(options: createOzPdfViewerOptions): Promise<CommonOzBridgetResponseType<T>> {\n // 비밀번호는 입력안하면 빈값으로 보낸다\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('createOzPdfViewer', Object.assign({ password: '' }, options));\n\n }\n\n /**\n * ### Bridge for Oz\n * PDF뷰어 닫기\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.hideOzPdfViewer()\n * ```\n */\n async hideOzPdfViewer<T>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideOzPdfViewer');\n\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { IframeBridge } from './iframe-bridge';\nimport { NativeBridge } from './native-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n iframe: new IframeBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = 'OZProgressCommand',\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = 'OZErrorCommand',\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = 'OZPageChangeCommand',\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = 'OZReportChangeCommand',\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = 'OZUserEvent',\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = 'OZPageBindCommand',\n /**\n * 사용자가 입력 컴포넌트를 클릭하거나 값을 변경하여 이벤트가 실행된 경우 발생되는 이벤트'\n * - 호환되는 이벤트\n * - `OnClick`\n * - `OnFinish`\n * - `OnFocus`\n * - `OnKillFocus`\n * - `OnPause`\n * - `OnPlay`\n * - `OnStop`\n * - `OnValueChanged` \n * - `eform.inputeventcommand=true` 설정이 필요하다\n * - `OZEFormInputEvent`와 매칭된다\n */\n OZEFormInputEventCommand = 'OZEFormInputEventCommand',\n /**\n * 보고서 저장 시 발생하는 이벤트\n * - `OZExportEvent`와 매칭된다\n */\n OZExportCommand = 'OZExportCommand',\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n *\n * `step과` `state`는 step => state 방식으로 진행된다\n *\n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: '0' | '1' | '2' | '3' | '4';\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: '1' | '2';\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * 두 이벤트의 공용 타입\n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number;\n};\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n};\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\n};\n\nexport type OZEFormInputEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 이벤트가 발생한 컴포넌트의 FormID. FormID가 설정되지 않은 경우 컴포넌트의 이름이 리턴됨 */\n formid: string;\n eventname: string;\n mainscreen: boolean;\n}\n\nexport type OZExportEvent = {\n /**\n * 저장 성공 여부\n * - `0` 실패\n * - `1` 성공\n */\n code: \"0\" | \"1\"\n /** 파일 경로 */\n path: string;\n /** 파일 이름 */\n filename: string;\n /** 저장된 페이지 수. 여러 페이지의 보고서를 한 페이지로 저장한 경우에는 1이 리턴됨 */\n pagecount: string;\n /**\n * 뷰어가 실제 저장한 모든 파일의 경로와 이름.\n * \n * 파일이 여러 개일 경우 `|`를 구분자로 하여 리턴됨\n */\n filepaths: string;\n}"]}
1
+ {"version":3,"sources":["../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/iframe-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["isClient","isStorybookEnv","getDspExecutionEnvironment","OZViewerEvent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { getDspExecutionEnvironment, isClient, isStorybookEnv } from 'sales-frontend-utils';\n\nimport { IframeEventName } from '../types/iframe/iframe-action.types';\nimport { NativeAction } from '../types/native/native-action.types';\n\nimport { NativeBridgeCommand, IframeBridgeCommand, BridgeOptions, BridgePromise } from './core.types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n if (!isClient()) {\n return;\n } // SSR 환경에서는 아무것도 하지 않음\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n\n if (isStorybookEnv() && window.parent) {\n // 스토리북에서는 현재 스토리가 iframe으로 로드되므로 앱에서 부모 프레임에 브릿지를 리턴해도 자식으로 전달되도록 보정하는 코드\n window.parent.n2bridge = window.n2bridge;\n window.parent.dispatchEvent = (...args) => window.dispatchEvent.apply(null, args);\n }\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 네이티브 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: NativeAction, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\n\n try {\n const command: NativeBridgeCommand = {\n action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = getDspExecutionEnvironment();\n\n if (platform === 'android-webview') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios-webview') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * iframe 통신(영업포털)\n * @param eventName\n * @param options\n * @returns\n */\n async callToIframeParent<T = any>(eventName: IframeEventName, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${eventName}_${this.generatePromiseId()}`;\n console.log('[callToIframe] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\n\n try {\n const command: IframeBridgeCommand = {\n eventName,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToIframe] command::', command);\n\n const platform = getDspExecutionEnvironment();\n\n if (platform === 'iframe') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToIframe] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${eventName})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToIframe] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IIframeBridge } from './types/iframe/iframe-bridge.types';\n\n/**\n * iframe(영업포탈) 전용 Bridge\n */\nexport class IframeBridge extends CommonBridge implements IIframeBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToIframeParent('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportExOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions,\n DownloadOzdOptions,\n SavePdfOptions,\n SaveSignImgOptions,\n CommonOzBridgetResponseType,\n UpdateOzdOptions,\n createOzPdfViewerOptions\n} from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\n */\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n * getParameterMap\n * @returns\n */\n async getParameterMap<T = any>(): Promise<T> {\n return this.core.callToNative<T>('getParameterMap');\n }\n\n async dismissPopup<T = any>(options?: any): Promise<T> {\n return this.core.callToNative<T>('dismissPopup', options);\n }\n\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n\n /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n /**\n * ### Bridge for Oz\n * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.createReportEx({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n createReportEx<T = any>(options: CreateReportExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'createReportEx',\n Object.assign({ delimiter: '\\n' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * OZ 뷰어를 닫습니다\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.hideViewer();\n * ```\n */\n hideViewer<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideViewer');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 정보를 가져옵니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = any>(options: GetInformationOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getInformation', options);\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 가져옵니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = any>(options: GetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 설정합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n setGlobal<T = any>(options: SetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('setGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * Bridge.native.script({ command });\n * ```\n */\n script<T = any>(options: ScriptOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('script', options);\n }\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * const param1 = `eform.show_prev_next_input=true`;\n * const param2 = `eform.signpad_iconposition=sign_bottom`;\n * // param이 여러개인경우 \\n으로 묶는다\n * const param = `${param1}\\n${param2}`;\n * Bridge.native.scriptEX({ command, param });\n * ```\n */\n scriptEx<T = any>(options: ScriptExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'scriptEx',\n Object.assign({ delimiter: '\\n' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = any>(options: TriggerExternalEventOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEvent',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = any>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 폰트 설정들을 조회하는 브릿지입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getOzFontParam()\n * ```\n */\n async getOzFontParam<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getOzFontParam');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 OZD를 다운받는 브릿지입니다\n * @example\n * ```tsx\n * const data = [\n * { name: \"문서1\", file: [\"doc1.ozd\"], complete: true },\n * { name: \"문서2\", file: [\"doc2.ozd\", \"doc3.ozd\"], complete: true }\n * ]\n * await Bridge.native.downloadDocument(data)\n * ```\n * returnData는 file 경로가 절대경로로 매핑되어 돌아온다\n * ```json\n * {\n * \"action\":\"downloadDocument\",\n * \"data\":[\n * {\n * \"name\":\"aaa\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A0010.ozd\",\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/C0401.ozd\"\n * ],\n * \"complete\":false\n * },\n * {\n * \"name\":\"bbb\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A1500.ozd\"\n * ],\n * \"complete\":false\n * }\n * ]\n * }\n * ```\n */\n async downloadDocument<T = any>(options: DownloadOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('downloadDocument', options);\n }\n\n /**\n * ### Bridge for Oz\n * 서식의 진행중/완료 상태를 업데이트하는 브릿지\n */\n async updateOzDocumentStatus<T = any>(options: UpdateOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('updateOzDocumentStatus', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식을 PDF로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.savePdf({ exportType: \"PDF\", fileName: \"test.pdf\", startPage: 1, endPage: 1 })\n * ```\n */\n async savePdf<T = any>(options: SavePdfOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'savePdf',\n Object.assign({ delimiter: '\\n' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식 중 서명부분을 이미지로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.saveSignImg({ exportType: \"IMG\", fileName: \"sign.png\", signImageKey: \"SIGN_IMG\" })\n * ```\n */\n async saveSignImg<T = string>(options: SaveSignImgOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('saveSignImg', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에서 생성한 PDF를 보여주는 뷰어를 연다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createOzPdfViewer({ filename: \"total.pdf\", filepaths: \"/data/0/app/total.pdf\", password: \"\" })\n * ```\n */\n async createOzPdfViewer<T>(options: createOzPdfViewerOptions): Promise<CommonOzBridgetResponseType<T>> {\n // 비밀번호는 입력안하면 빈값으로 보낸다\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'createOzPdfViewer',\n Object.assign({ password: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * PDF뷰어 닫기\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.hideOzPdfViewer()\n * ```\n */\n async hideOzPdfViewer<T>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideOzPdfViewer');\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { IframeBridge } from './iframe-bridge';\nimport { NativeBridge } from './native-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n iframe: new IframeBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = 'OZProgressCommand',\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = 'OZErrorCommand',\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = 'OZPageChangeCommand',\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = 'OZReportChangeCommand',\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = 'OZUserEvent',\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = 'OZPageBindCommand',\n /**\n * 사용자가 입력 컴포넌트를 클릭하거나 값을 변경하여 이벤트가 실행된 경우 발생되는 이벤트'\n * - 호환되는 이벤트\n * - `OnClick`\n * - `OnFinish`\n * - `OnFocus`\n * - `OnKillFocus`\n * - `OnPause`\n * - `OnPlay`\n * - `OnStop`\n * - `OnValueChanged` \n * - `eform.inputeventcommand=true` 설정이 필요하다\n * - `OZEFormInputEvent`와 매칭된다\n */\n OZEFormInputEventCommand = 'OZEFormInputEventCommand',\n /**\n * 보고서 저장 시 발생하는 이벤트\n * - `OZExportEvent`와 매칭된다\n */\n OZExportCommand = 'OZExportCommand',\n\n /**\n * 오즈뷰어, (오즈전용)PDF 뷰어 내 버튼 클릭시 발생하는 이벤트\n * - `OZBtnTouchEvent`와 매칭된다\n */\n OZBtnTouchEvent = 'btnTouchEvent'\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n *\n * `step과` `state`는 step => state 방식으로 진행된다\n *\n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: '0' | '1' | '2' | '3' | '4';\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: '1' | '2';\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * 두 이벤트의 공용 타입\n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number;\n};\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n};\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\n};\n\nexport type OZEFormInputEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 이벤트가 발생한 컴포넌트의 FormID. FormID가 설정되지 않은 경우 컴포넌트의 이름이 리턴됨 */\n formid: string;\n eventname: string;\n mainscreen: boolean;\n}\n\nexport type OZExportEvent = {\n /**\n * 저장 성공 여부\n * - `0` 실패\n * - `1` 성공\n */\n code: \"0\" | \"1\"\n /** 파일 경로 */\n path: string;\n /** 파일 이름 */\n filename: string;\n /** 저장된 페이지 수. 여러 페이지의 보고서를 한 페이지로 저장한 경우에는 1이 리턴됨 */\n pagecount: string;\n /**\n * 뷰어가 실제 저장한 모든 파일의 경로와 이름.\n * \n * 파일이 여러 개일 경우 `|`를 구분자로 하여 리턴됨\n */\n filepaths: string;\n}\n\nexport type OZBtnTouchEvent = {\n /** 버튼의 아이디 혹은 텍스트 */\n btnID: string;\n /**\n * 어떤 패널의 버튼을 눌렀는지 구분\n * - `category` 서식 전체목록의 버튼\n */\n type: \"category\"\n}"]}
package/dist/index.d.cts CHANGED
@@ -6,7 +6,7 @@ interface IIframeBridge {
6
6
  openUrlWindow(options: OpenUrlWindowOptions): Promise<void>;
7
7
  }
8
8
 
9
- type IframeAction = keyof IIframeBridge;
9
+ type IframeEventName = keyof IIframeBridge;
10
10
 
11
11
  interface ShowWebPopupOptions {
12
12
  /** 0: fullscreen, 1: title bar, 2: size 지정 가능 팝업, 3: wk webview */
@@ -157,7 +157,6 @@ type SavePdfOptions = Omit<ScriptExOptions, "command">;
157
157
  * 특정 OZD 내부에 포함된 서명 필드만 이미지로 뽑아낸다
158
158
  */
159
159
  interface SaveSignImgOptions {
160
- exportType: "IMG";
161
160
  /** 저장할 파일이름 */
162
161
  fileName: string;
163
162
  /** 추출할 서명의 FORM ID */
@@ -183,6 +182,8 @@ interface createOzPdfViewerOptions {
183
182
  }
184
183
 
185
184
  interface INativeBridge {
185
+ getParameterMap<T>(): Promise<T>;
186
+ dismissPopup<T>(option: any): Promise<T>;
186
187
  showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
187
188
  jumpSafari<T>(options: ShowWebPopupOptions): Promise<T>;
188
189
  createReportEx<T>(options: CreateReportExOptions): Promise<CommonOzBridgetResponseType<T>>;
@@ -205,8 +206,6 @@ interface INativeBridge {
205
206
 
206
207
  type NativeAction = keyof INativeBridge;
207
208
 
208
- type BridgeAction = NativeAction | IframeAction;
209
-
210
209
  type RetainCallback<T = any> = (params: T) => void;
211
210
  /**
212
211
  * Command의 옵션
@@ -247,13 +246,20 @@ declare class Core {
247
246
  */
248
247
  private createCallFromNativeHandler;
249
248
  /**
250
- * 부모 통신
249
+ * 네이티브 통신
251
250
  * @param service
252
251
  * @param action
253
252
  * @param option
254
253
  * @returns
255
254
  */
256
- callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T>;
255
+ callToNative<T = any>(action: NativeAction, options?: BridgeOptions): Promise<T>;
256
+ /**
257
+ * iframe 통신(영업포털)
258
+ * @param eventName
259
+ * @param options
260
+ * @returns
261
+ */
262
+ callToIframeParent<T = any>(eventName: IframeEventName, options?: BridgeOptions): Promise<T>;
257
263
  /**
258
264
  * promiseId를 초기화 해줍니다.
259
265
  * @param promiseId
@@ -285,6 +291,12 @@ declare class IframeBridge extends CommonBridge implements IIframeBridge {
285
291
  * App - Web Bridge
286
292
  */
287
293
  declare class NativeBridge extends CommonBridge implements INativeBridge {
294
+ /**
295
+ * getParameterMap
296
+ * @returns
297
+ */
298
+ getParameterMap<T = any>(): Promise<T>;
299
+ dismissPopup<T = any>(options?: any): Promise<T>;
288
300
  /**
289
301
  *
290
302
  * @param options
@@ -553,7 +565,12 @@ declare enum OZViewerEvent {
553
565
  * 보고서 저장 시 발생하는 이벤트
554
566
  * - `OZExportEvent`와 매칭된다
555
567
  */
556
- OZExportCommand = "OZExportCommand"
568
+ OZExportCommand = "OZExportCommand",
569
+ /**
570
+ * 오즈뷰어, (오즈전용)PDF 뷰어 내 버튼 클릭시 발생하는 이벤트
571
+ * - `OZBtnTouchEvent`와 매칭된다
572
+ */
573
+ OZBtnTouchEvent = "btnTouchEvent"
557
574
  }
558
575
  /**
559
576
  * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의
@@ -682,5 +699,14 @@ type OZExportEvent = {
682
699
  */
683
700
  filepaths: string;
684
701
  };
702
+ type OZBtnTouchEvent = {
703
+ /** 버튼의 아이디 혹은 텍스트 */
704
+ btnID: string;
705
+ /**
706
+ * 어떤 패널의 버튼을 눌렀는지 구분
707
+ * - `category` 서식 전체목록의 버튼
708
+ */
709
+ type: "category";
710
+ };
685
711
 
686
- export { Bridge, type OZEFormInputEvent, type OZExportEvent, type OZViewerChangeEvent, type OZViewerErrorEvent, OZViewerEvent, type OZViewerPageBindEvent, type OZViewerProgressEvent, type OZViewerUserEvent };
712
+ export { Bridge, type OZBtnTouchEvent, type OZEFormInputEvent, type OZExportEvent, type OZViewerChangeEvent, type OZViewerErrorEvent, OZViewerEvent, type OZViewerPageBindEvent, type OZViewerProgressEvent, type OZViewerUserEvent };
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ interface IIframeBridge {
6
6
  openUrlWindow(options: OpenUrlWindowOptions): Promise<void>;
7
7
  }
8
8
 
9
- type IframeAction = keyof IIframeBridge;
9
+ type IframeEventName = keyof IIframeBridge;
10
10
 
11
11
  interface ShowWebPopupOptions {
12
12
  /** 0: fullscreen, 1: title bar, 2: size 지정 가능 팝업, 3: wk webview */
@@ -157,7 +157,6 @@ type SavePdfOptions = Omit<ScriptExOptions, "command">;
157
157
  * 특정 OZD 내부에 포함된 서명 필드만 이미지로 뽑아낸다
158
158
  */
159
159
  interface SaveSignImgOptions {
160
- exportType: "IMG";
161
160
  /** 저장할 파일이름 */
162
161
  fileName: string;
163
162
  /** 추출할 서명의 FORM ID */
@@ -183,6 +182,8 @@ interface createOzPdfViewerOptions {
183
182
  }
184
183
 
185
184
  interface INativeBridge {
185
+ getParameterMap<T>(): Promise<T>;
186
+ dismissPopup<T>(option: any): Promise<T>;
186
187
  showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
187
188
  jumpSafari<T>(options: ShowWebPopupOptions): Promise<T>;
188
189
  createReportEx<T>(options: CreateReportExOptions): Promise<CommonOzBridgetResponseType<T>>;
@@ -205,8 +206,6 @@ interface INativeBridge {
205
206
 
206
207
  type NativeAction = keyof INativeBridge;
207
208
 
208
- type BridgeAction = NativeAction | IframeAction;
209
-
210
209
  type RetainCallback<T = any> = (params: T) => void;
211
210
  /**
212
211
  * Command의 옵션
@@ -247,13 +246,20 @@ declare class Core {
247
246
  */
248
247
  private createCallFromNativeHandler;
249
248
  /**
250
- * 부모 통신
249
+ * 네이티브 통신
251
250
  * @param service
252
251
  * @param action
253
252
  * @param option
254
253
  * @returns
255
254
  */
256
- callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T>;
255
+ callToNative<T = any>(action: NativeAction, options?: BridgeOptions): Promise<T>;
256
+ /**
257
+ * iframe 통신(영업포털)
258
+ * @param eventName
259
+ * @param options
260
+ * @returns
261
+ */
262
+ callToIframeParent<T = any>(eventName: IframeEventName, options?: BridgeOptions): Promise<T>;
257
263
  /**
258
264
  * promiseId를 초기화 해줍니다.
259
265
  * @param promiseId
@@ -285,6 +291,12 @@ declare class IframeBridge extends CommonBridge implements IIframeBridge {
285
291
  * App - Web Bridge
286
292
  */
287
293
  declare class NativeBridge extends CommonBridge implements INativeBridge {
294
+ /**
295
+ * getParameterMap
296
+ * @returns
297
+ */
298
+ getParameterMap<T = any>(): Promise<T>;
299
+ dismissPopup<T = any>(options?: any): Promise<T>;
288
300
  /**
289
301
  *
290
302
  * @param options
@@ -553,7 +565,12 @@ declare enum OZViewerEvent {
553
565
  * 보고서 저장 시 발생하는 이벤트
554
566
  * - `OZExportEvent`와 매칭된다
555
567
  */
556
- OZExportCommand = "OZExportCommand"
568
+ OZExportCommand = "OZExportCommand",
569
+ /**
570
+ * 오즈뷰어, (오즈전용)PDF 뷰어 내 버튼 클릭시 발생하는 이벤트
571
+ * - `OZBtnTouchEvent`와 매칭된다
572
+ */
573
+ OZBtnTouchEvent = "btnTouchEvent"
557
574
  }
558
575
  /**
559
576
  * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의
@@ -682,5 +699,14 @@ type OZExportEvent = {
682
699
  */
683
700
  filepaths: string;
684
701
  };
702
+ type OZBtnTouchEvent = {
703
+ /** 버튼의 아이디 혹은 텍스트 */
704
+ btnID: string;
705
+ /**
706
+ * 어떤 패널의 버튼을 눌렀는지 구분
707
+ * - `category` 서식 전체목록의 버튼
708
+ */
709
+ type: "category";
710
+ };
685
711
 
686
- export { Bridge, type OZEFormInputEvent, type OZExportEvent, type OZViewerChangeEvent, type OZViewerErrorEvent, OZViewerEvent, type OZViewerPageBindEvent, type OZViewerProgressEvent, type OZViewerUserEvent };
712
+ export { Bridge, type OZBtnTouchEvent, type OZEFormInputEvent, type OZExportEvent, type OZViewerChangeEvent, type OZViewerErrorEvent, OZViewerEvent, type OZViewerPageBindEvent, type OZViewerProgressEvent, type OZViewerUserEvent };
package/dist/index.js CHANGED
@@ -117,7 +117,7 @@ var Core = class {
117
117
  };
118
118
  }
119
119
  /**
120
- * 부모 통신
120
+ * 네이티브 통신
121
121
  * @param service
122
122
  * @param action
123
123
  * @param option
@@ -140,7 +140,6 @@ var Core = class {
140
140
  try {
141
141
  const command = {
142
142
  action,
143
- eventName: action,
144
143
  promiseId,
145
144
  option: commandOptions
146
145
  };
@@ -154,15 +153,53 @@ var Core = class {
154
153
  window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));
155
154
  return;
156
155
  }
156
+ console.warn(`[callToNative] \uD604\uC7AC \uD50C\uB7AB\uD3FC(${platform})\uC5D0\uC11C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC11C\uBE44\uC2A4(${action})\uC785\uB2C8\uB2E4.`);
157
+ this.cleanupPromise(promiseId);
158
+ reject(new Error(`Unsupported platform: ${platform}`));
159
+ } catch (error) {
160
+ console.error("[callToNative] error::", error);
161
+ this.cleanupPromise(promiseId);
162
+ reject(error);
163
+ }
164
+ });
165
+ }
166
+ /**
167
+ * iframe 통신(영업포털)
168
+ * @param eventName
169
+ * @param options
170
+ * @returns
171
+ */
172
+ async callToIframeParent(eventName, options) {
173
+ const { retainCallback: retain, ...commandOptions } = options || {};
174
+ return new Promise((resolve, reject) => {
175
+ const promiseId = `${eventName}_${this.generatePromiseId()}`;
176
+ console.log("[callToIframe] promiseId::", promiseId);
177
+ window.n2bridge.promises[promiseId] = {
178
+ resolve: (value) => {
179
+ resolve(value);
180
+ },
181
+ reject: (reason) => {
182
+ reject(reason);
183
+ },
184
+ retain
185
+ };
186
+ try {
187
+ const command = {
188
+ eventName,
189
+ promiseId,
190
+ option: commandOptions
191
+ };
192
+ console.log("[callToIframe] command::", command);
193
+ const platform = getDspExecutionEnvironment();
157
194
  if (platform === "iframe") {
158
195
  window.parent.postMessage(command, "*");
159
196
  return;
160
197
  }
161
- console.warn(`[callToNative] \uD604\uC7AC \uD50C\uB7AB\uD3FC(${platform})\uC5D0\uC11C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC11C\uBE44\uC2A4(${action})\uC785\uB2C8\uB2E4.`);
198
+ console.warn(`[callToIframe] \uD604\uC7AC \uD50C\uB7AB\uD3FC(${platform})\uC5D0\uC11C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC11C\uBE44\uC2A4(${eventName})\uC785\uB2C8\uB2E4.`);
162
199
  this.cleanupPromise(promiseId);
163
200
  reject(new Error(`Unsupported platform: ${platform}`));
164
201
  } catch (error) {
165
- console.error("[callToNative] error::", error);
202
+ console.error("[callToIframe] error::", error);
166
203
  this.cleanupPromise(promiseId);
167
204
  reject(error);
168
205
  }
@@ -193,13 +230,23 @@ var IframeBridge = class extends CommonBridge {
193
230
  * @returns
194
231
  */
195
232
  async openUrlWindow(options) {
196
- return this.core.callToNative("openUrlWindow", options);
233
+ return this.core.callToIframeParent("openUrlWindow", options);
197
234
  }
198
235
  // TODO: 필요 플러그인들 추가
199
236
  };
200
237
 
201
238
  // src/bridge/native-bridge.ts
202
239
  var NativeBridge = class extends CommonBridge {
240
+ /**
241
+ * getParameterMap
242
+ * @returns
243
+ */
244
+ async getParameterMap() {
245
+ return this.core.callToNative("getParameterMap");
246
+ }
247
+ async dismissPopup(options) {
248
+ return this.core.callToNative("dismissPopup", options);
249
+ }
203
250
  /**
204
251
  *
205
252
  * @param options
@@ -226,7 +273,10 @@ var NativeBridge = class extends CommonBridge {
226
273
  * ```
227
274
  */
228
275
  createReportEx(options) {
229
- return this.core.callToNative("createReportEx", Object.assign({ delimiter: "\n" }, options));
276
+ return this.core.callToNative(
277
+ "createReportEx",
278
+ Object.assign({ delimiter: "\n" }, options)
279
+ );
230
280
  }
231
281
  /**
232
282
  * ### Bridge for Oz
@@ -305,7 +355,10 @@ var NativeBridge = class extends CommonBridge {
305
355
  * ```
306
356
  */
307
357
  scriptEx(options) {
308
- return this.core.callToNative("scriptEx", Object.assign({ delimiter: "\n" }, options));
358
+ return this.core.callToNative(
359
+ "scriptEx",
360
+ Object.assign({ delimiter: "\n" }, options)
361
+ );
309
362
  }
310
363
  /**
311
364
  * ### Bridge for Oz
@@ -404,7 +457,10 @@ var NativeBridge = class extends CommonBridge {
404
457
  * ```
405
458
  */
406
459
  async savePdf(options) {
407
- return this.core.callToNative("savePdf", Object.assign({ delimiter: "\n" }, options));
460
+ return this.core.callToNative(
461
+ "savePdf",
462
+ Object.assign({ delimiter: "\n" }, options)
463
+ );
408
464
  }
409
465
  /**
410
466
  * ### Bridge for Oz
@@ -428,7 +484,10 @@ var NativeBridge = class extends CommonBridge {
428
484
  * ```
429
485
  */
430
486
  async createOzPdfViewer(options) {
431
- return this.core.callToNative("createOzPdfViewer", Object.assign({ password: "" }, options));
487
+ return this.core.callToNative(
488
+ "createOzPdfViewer",
489
+ Object.assign({ password: "" }, options)
490
+ );
432
491
  }
433
492
  /**
434
493
  * ### Bridge for Oz
@@ -462,6 +521,7 @@ var OZViewerEvent = /* @__PURE__ */ ((OZViewerEvent2) => {
462
521
  OZViewerEvent2["OZPageBindCommand"] = "OZPageBindCommand";
463
522
  OZViewerEvent2["OZEFormInputEventCommand"] = "OZEFormInputEventCommand";
464
523
  OZViewerEvent2["OZExportCommand"] = "OZExportCommand";
524
+ OZViewerEvent2["OZBtnTouchEvent"] = "btnTouchEvent";
465
525
  return OZViewerEvent2;
466
526
  })(OZViewerEvent || {});
467
527
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/iframe-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":"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","file":"index.js","sourcesContent":["import { getDspExecutionEnvironment, isClient, isStorybookEnv } from 'sales-frontend-utils';\n\nimport { BridgeAction } from '../types/common.types';\n\nimport { BridgeCommand, BridgeOptions, BridgePromise } from './core.types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n if (!isClient()) {\n return;\n } // SSR 환경에서는 아무것도 하지 않음\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n\n if (isStorybookEnv() && window.parent) {\n // 스토리북에서는 현재 스토리가 iframe으로 로드되므로 앱에서 부모 프레임에 브릿지를 리턴해도 자식으로 전달되도록 보정하는 코드\n window.parent.n2bridge = window.n2bridge;\n window.parent.dispatchEvent = (...args) => (window.dispatchEvent.apply(null, args))\n }\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 부모 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\n\n try {\n const command: BridgeCommand = {\n action,\n eventName: action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = getDspExecutionEnvironment();\n\n if (platform === 'android-webview') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios-webview') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'iframe') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IIframeBridge } from './types/iframe/iframe-bridge.types';\n\n/**\n * iframe(영업포탈) 전용 Bridge\n */\nexport class IframeBridge extends CommonBridge implements IIframeBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToNative<T>('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportExOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions,\n DownloadOzdOptions,\n SavePdfOptions,\n SaveSignImgOptions,\n CommonOzBridgetResponseType,\n UpdateOzdOptions,\n createOzPdfViewerOptions\n} from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\n */\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n\n /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n /**\n * ### Bridge for Oz\n * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.createReportEx({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n createReportEx<T = any>(options: CreateReportExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('createReportEx', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * OZ 뷰어를 닫습니다\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.hideViewer();\n * ```\n */\n hideViewer<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideViewer');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 정보를 가져옵니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = any>(options: GetInformationOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getInformation', options);\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 가져옵니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = any>(options: GetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 설정합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n setGlobal<T = any>(options: SetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('setGlobal', Object.assign({ docIndex: 0 }, options));\n\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * Bridge.native.script({ command });\n * ```\n */\n script<T = any>(options: ScriptOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('script', options);\n }\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * const param1 = `eform.show_prev_next_input=true`;\n * const param2 = `eform.signpad_iconposition=sign_bottom`;\n * // param이 여러개인경우 \\n으로 묶는다\n * const param = `${param1}\\n${param2}`;\n * Bridge.native.scriptEX({ command, param });\n * ```\n */\n scriptEx<T = any>(options: ScriptExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('scriptEx', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = any>(options: TriggerExternalEventOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEvent',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = any>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 폰트 설정들을 조회하는 브릿지입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getOzFontParam()\n * ```\n */\n async getOzFontParam<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getOzFontParam');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 OZD를 다운받는 브릿지입니다\n * @example\n * ```tsx\n * const data = [\n * { name: \"문서1\", file: [\"doc1.ozd\"], complete: true },\n * { name: \"문서2\", file: [\"doc2.ozd\", \"doc3.ozd\"], complete: true }\n * ]\n * await Bridge.native.downloadDocument(data)\n * ```\n * returnData는 file 경로가 절대경로로 매핑되어 돌아온다\n * ```json\n * {\n * \"action\":\"downloadDocument\",\n * \"data\":[\n * {\n * \"name\":\"aaa\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A0010.ozd\",\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/C0401.ozd\"\n * ],\n * \"complete\":false\n * },\n * {\n * \"name\":\"bbb\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A1500.ozd\"\n * ],\n * \"complete\":false\n * }\n * ]\n * }\n * ```\n */\n async downloadDocument<T = any>(options: DownloadOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('downloadDocument', options);\n }\n\n /**\n * ### Bridge for Oz\n * 서식의 진행중/완료 상태를 업데이트하는 브릿지\n */\n async updateOzDocumentStatus<T = any>(options: UpdateOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('updateOzDocumentStatus', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식을 PDF로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.savePdf({ exportType: \"PDF\", fileName: \"test.pdf\", startPage: 1, endPage: 1 })\n * ```\n */\n async savePdf<T = any>(options: SavePdfOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('savePdf', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식 중 서명부분을 이미지로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.saveSignImg({ exportType: \"IMG\", fileName: \"sign.png\", signImageKey: \"SIGN_IMG\" })\n * ```\n */\n async saveSignImg<T = string>(options: SaveSignImgOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('saveSignImg', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에서 생성한 PDF를 보여주는 뷰어를 연다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createOzPdfViewer({ filename: \"total.pdf\", filepaths: \"/data/0/app/total.pdf\", password: \"\" })\n * ```\n */\n async createOzPdfViewer<T>(options: createOzPdfViewerOptions): Promise<CommonOzBridgetResponseType<T>> {\n // 비밀번호는 입력안하면 빈값으로 보낸다\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('createOzPdfViewer', Object.assign({ password: '' }, options));\n\n }\n\n /**\n * ### Bridge for Oz\n * PDF뷰어 닫기\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.hideOzPdfViewer()\n * ```\n */\n async hideOzPdfViewer<T>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideOzPdfViewer');\n\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { IframeBridge } from './iframe-bridge';\nimport { NativeBridge } from './native-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n iframe: new IframeBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = 'OZProgressCommand',\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = 'OZErrorCommand',\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = 'OZPageChangeCommand',\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = 'OZReportChangeCommand',\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = 'OZUserEvent',\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = 'OZPageBindCommand',\n /**\n * 사용자가 입력 컴포넌트를 클릭하거나 값을 변경하여 이벤트가 실행된 경우 발생되는 이벤트'\n * - 호환되는 이벤트\n * - `OnClick`\n * - `OnFinish`\n * - `OnFocus`\n * - `OnKillFocus`\n * - `OnPause`\n * - `OnPlay`\n * - `OnStop`\n * - `OnValueChanged` \n * - `eform.inputeventcommand=true` 설정이 필요하다\n * - `OZEFormInputEvent`와 매칭된다\n */\n OZEFormInputEventCommand = 'OZEFormInputEventCommand',\n /**\n * 보고서 저장 시 발생하는 이벤트\n * - `OZExportEvent`와 매칭된다\n */\n OZExportCommand = 'OZExportCommand',\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n *\n * `step과` `state`는 step => state 방식으로 진행된다\n *\n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: '0' | '1' | '2' | '3' | '4';\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: '1' | '2';\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * 두 이벤트의 공용 타입\n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number;\n};\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n};\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\n};\n\nexport type OZEFormInputEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 이벤트가 발생한 컴포넌트의 FormID. FormID가 설정되지 않은 경우 컴포넌트의 이름이 리턴됨 */\n formid: string;\n eventname: string;\n mainscreen: boolean;\n}\n\nexport type OZExportEvent = {\n /**\n * 저장 성공 여부\n * - `0` 실패\n * - `1` 성공\n */\n code: \"0\" | \"1\"\n /** 파일 경로 */\n path: string;\n /** 파일 이름 */\n filename: string;\n /** 저장된 페이지 수. 여러 페이지의 보고서를 한 페이지로 저장한 경우에는 1이 리턴됨 */\n pagecount: string;\n /**\n * 뷰어가 실제 저장한 모든 파일의 경로와 이름.\n * \n * 파일이 여러 개일 경우 `|`를 구분자로 하여 리턴됨\n */\n filepaths: string;\n}"]}
1
+ {"version":3,"sources":["../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/iframe-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":"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","file":"index.js","sourcesContent":["import { getDspExecutionEnvironment, isClient, isStorybookEnv } from 'sales-frontend-utils';\n\nimport { IframeEventName } from '../types/iframe/iframe-action.types';\nimport { NativeAction } from '../types/native/native-action.types';\n\nimport { NativeBridgeCommand, IframeBridgeCommand, BridgeOptions, BridgePromise } from './core.types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n if (!isClient()) {\n return;\n } // SSR 환경에서는 아무것도 하지 않음\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n\n if (isStorybookEnv() && window.parent) {\n // 스토리북에서는 현재 스토리가 iframe으로 로드되므로 앱에서 부모 프레임에 브릿지를 리턴해도 자식으로 전달되도록 보정하는 코드\n window.parent.n2bridge = window.n2bridge;\n window.parent.dispatchEvent = (...args) => window.dispatchEvent.apply(null, args);\n }\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 네이티브 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: NativeAction, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\n\n try {\n const command: NativeBridgeCommand = {\n action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = getDspExecutionEnvironment();\n\n if (platform === 'android-webview') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios-webview') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * iframe 통신(영업포털)\n * @param eventName\n * @param options\n * @returns\n */\n async callToIframeParent<T = any>(eventName: IframeEventName, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${eventName}_${this.generatePromiseId()}`;\n console.log('[callToIframe] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\n\n try {\n const command: IframeBridgeCommand = {\n eventName,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToIframe] command::', command);\n\n const platform = getDspExecutionEnvironment();\n\n if (platform === 'iframe') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToIframe] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${eventName})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToIframe] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IIframeBridge } from './types/iframe/iframe-bridge.types';\n\n/**\n * iframe(영업포탈) 전용 Bridge\n */\nexport class IframeBridge extends CommonBridge implements IIframeBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToIframeParent('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportExOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions,\n DownloadOzdOptions,\n SavePdfOptions,\n SaveSignImgOptions,\n CommonOzBridgetResponseType,\n UpdateOzdOptions,\n createOzPdfViewerOptions\n} from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\n */\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n * getParameterMap\n * @returns\n */\n async getParameterMap<T = any>(): Promise<T> {\n return this.core.callToNative<T>('getParameterMap');\n }\n\n async dismissPopup<T = any>(options?: any): Promise<T> {\n return this.core.callToNative<T>('dismissPopup', options);\n }\n\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n\n /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n /**\n * ### Bridge for Oz\n * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.createReportEx({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n createReportEx<T = any>(options: CreateReportExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'createReportEx',\n Object.assign({ delimiter: '\\n' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * OZ 뷰어를 닫습니다\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.hideViewer();\n * ```\n */\n hideViewer<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideViewer');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 정보를 가져옵니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = any>(options: GetInformationOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getInformation', options);\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 가져옵니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = any>(options: GetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 설정합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n setGlobal<T = any>(options: SetGlobalOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('setGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * Bridge.native.script({ command });\n * ```\n */\n script<T = any>(options: ScriptOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('script', options);\n }\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * const param1 = `eform.show_prev_next_input=true`;\n * const param2 = `eform.signpad_iconposition=sign_bottom`;\n * // param이 여러개인경우 \\n으로 묶는다\n * const param = `${param1}\\n${param2}`;\n * Bridge.native.scriptEX({ command, param });\n * ```\n */\n scriptEx<T = any>(options: ScriptExOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'scriptEx',\n Object.assign({ delimiter: '\\n' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = any>(options: TriggerExternalEventOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEvent',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = any>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 폰트 설정들을 조회하는 브릿지입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getOzFontParam()\n * ```\n */\n async getOzFontParam<T = any>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('getOzFontParam');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 파라미터에서 사용할 OZD를 다운받는 브릿지입니다\n * @example\n * ```tsx\n * const data = [\n * { name: \"문서1\", file: [\"doc1.ozd\"], complete: true },\n * { name: \"문서2\", file: [\"doc2.ozd\", \"doc3.ozd\"], complete: true }\n * ]\n * await Bridge.native.downloadDocument(data)\n * ```\n * returnData는 file 경로가 절대경로로 매핑되어 돌아온다\n * ```json\n * {\n * \"action\":\"downloadDocument\",\n * \"data\":[\n * {\n * \"name\":\"aaa\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A0010.ozd\",\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/C0401.ozd\"\n * ],\n * \"complete\":false\n * },\n * {\n * \"name\":\"bbb\",\n * \"file\":[\n * \"/data/user/0/com.hanwhalife.ssp.stg/files/A1500.ozd\"\n * ],\n * \"complete\":false\n * }\n * ]\n * }\n * ```\n */\n async downloadDocument<T = any>(options: DownloadOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('downloadDocument', options);\n }\n\n /**\n * ### Bridge for Oz\n * 서식의 진행중/완료 상태를 업데이트하는 브릿지\n */\n async updateOzDocumentStatus<T = any>(options: UpdateOzdOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('updateOzDocumentStatus', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식을 PDF로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.savePdf({ exportType: \"PDF\", fileName: \"test.pdf\", startPage: 1, endPage: 1 })\n * ```\n */\n async savePdf<T = any>(options: SavePdfOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'savePdf',\n Object.assign({ delimiter: '\\n' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에 출력되고있는 서식 중 서명부분을 이미지로 export\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.saveSignImg({ exportType: \"IMG\", fileName: \"sign.png\", signImageKey: \"SIGN_IMG\" })\n * ```\n */\n async saveSignImg<T = string>(options: SaveSignImgOptions): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('saveSignImg', options);\n }\n\n /**\n * ### Bridge for Oz\n * 오즈뷰어에서 생성한 PDF를 보여주는 뷰어를 연다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createOzPdfViewer({ filename: \"total.pdf\", filepaths: \"/data/0/app/total.pdf\", password: \"\" })\n * ```\n */\n async createOzPdfViewer<T>(options: createOzPdfViewerOptions): Promise<CommonOzBridgetResponseType<T>> {\n // 비밀번호는 입력안하면 빈값으로 보낸다\n return this.core.callToNative<CommonOzBridgetResponseType<T>>(\n 'createOzPdfViewer',\n Object.assign({ password: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * PDF뷰어 닫기\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.hideOzPdfViewer()\n * ```\n */\n async hideOzPdfViewer<T>(): Promise<CommonOzBridgetResponseType<T>> {\n return this.core.callToNative<CommonOzBridgetResponseType<T>>('hideOzPdfViewer');\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { IframeBridge } from './iframe-bridge';\nimport { NativeBridge } from './native-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n iframe: new IframeBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = 'OZProgressCommand',\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = 'OZErrorCommand',\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = 'OZPageChangeCommand',\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = 'OZReportChangeCommand',\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = 'OZUserEvent',\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = 'OZPageBindCommand',\n /**\n * 사용자가 입력 컴포넌트를 클릭하거나 값을 변경하여 이벤트가 실행된 경우 발생되는 이벤트'\n * - 호환되는 이벤트\n * - `OnClick`\n * - `OnFinish`\n * - `OnFocus`\n * - `OnKillFocus`\n * - `OnPause`\n * - `OnPlay`\n * - `OnStop`\n * - `OnValueChanged` \n * - `eform.inputeventcommand=true` 설정이 필요하다\n * - `OZEFormInputEvent`와 매칭된다\n */\n OZEFormInputEventCommand = 'OZEFormInputEventCommand',\n /**\n * 보고서 저장 시 발생하는 이벤트\n * - `OZExportEvent`와 매칭된다\n */\n OZExportCommand = 'OZExportCommand',\n\n /**\n * 오즈뷰어, (오즈전용)PDF 뷰어 내 버튼 클릭시 발생하는 이벤트\n * - `OZBtnTouchEvent`와 매칭된다\n */\n OZBtnTouchEvent = 'btnTouchEvent'\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n *\n * `step과` `state`는 step => state 방식으로 진행된다\n *\n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: '0' | '1' | '2' | '3' | '4';\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: '1' | '2';\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * 두 이벤트의 공용 타입\n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number;\n};\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n};\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\n};\n\nexport type OZEFormInputEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 이벤트가 발생한 컴포넌트의 FormID. FormID가 설정되지 않은 경우 컴포넌트의 이름이 리턴됨 */\n formid: string;\n eventname: string;\n mainscreen: boolean;\n}\n\nexport type OZExportEvent = {\n /**\n * 저장 성공 여부\n * - `0` 실패\n * - `1` 성공\n */\n code: \"0\" | \"1\"\n /** 파일 경로 */\n path: string;\n /** 파일 이름 */\n filename: string;\n /** 저장된 페이지 수. 여러 페이지의 보고서를 한 페이지로 저장한 경우에는 1이 리턴됨 */\n pagecount: string;\n /**\n * 뷰어가 실제 저장한 모든 파일의 경로와 이름.\n * \n * 파일이 여러 개일 경우 `|`를 구분자로 하여 리턴됨\n */\n filepaths: string;\n}\n\nexport type OZBtnTouchEvent = {\n /** 버튼의 아이디 혹은 텍스트 */\n btnID: string;\n /**\n * 어떤 패널의 버튼을 눌렀는지 구분\n * - `category` 서식 전체목록의 버튼\n */\n type: \"category\"\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sales-frontend-bridge",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",