sales-frontend-bridge 0.0.10 → 0.0.12
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 +106 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +318 -3
- package/dist/index.d.ts +318 -3
- package/dist/index.js +106 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -220,9 +220,103 @@ var NativeBridge = class extends CommonBridge {
|
|
|
220
220
|
async jumpSafari(options) {
|
|
221
221
|
return this.core.callToNative("jumpSafari", options);
|
|
222
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
|
|
225
|
+
* ```tsx
|
|
226
|
+
* // 사용 예시
|
|
227
|
+
* await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
223
230
|
async createReport(options) {
|
|
224
231
|
return this.core.callToNative("createReport", options);
|
|
225
232
|
}
|
|
233
|
+
/** @deprecated 샘플 테스트용 브릿지 */
|
|
234
|
+
async createReport_Sample() {
|
|
235
|
+
return this.core.callToNative("createReport_Sample");
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 오즈 뷰어의 정보를 가져옵니다
|
|
239
|
+
* ```tsx
|
|
240
|
+
* // 사용 예시
|
|
241
|
+
* await Bridge.native.getInformation({ command: "INPUT_JSON" });
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
244
|
+
async getInformation(options) {
|
|
245
|
+
return this.core.callToNative("getInformation", options);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* 전역 변수 값을 가져옵니다.
|
|
249
|
+
* ```tsx
|
|
250
|
+
* // 사용 예시
|
|
251
|
+
* await Bridge.native.getGlobal({ key: "AAA" })
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
async getGlobal(options) {
|
|
255
|
+
return this.core.callToNative("getGlobal", Object.assign({ docIndex: 0 }, options));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* 전역 변수 값을 설정합니다.
|
|
259
|
+
* ```tsx
|
|
260
|
+
* // 사용 예시
|
|
261
|
+
* await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
async setGlobal(options) {
|
|
265
|
+
return this.core.callToNative("setGlobal", Object.assign({ docIndex: 0 }, options));
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
269
|
+
* ```tsx
|
|
270
|
+
* // 사용 예시
|
|
271
|
+
* const command = `movepage=2`;
|
|
272
|
+
* await Bridge.native.script({ command });
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
async script(options) {
|
|
276
|
+
return this.core.callToNative("script", options);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
280
|
+
* - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
|
|
281
|
+
* ```tsx
|
|
282
|
+
* // 사용 예시
|
|
283
|
+
* const command = `movepage=2`;
|
|
284
|
+
* const param1 = `eform.show_prev_next_input=true`;
|
|
285
|
+
* const param2 = `eform.signpad_iconposition=sign_bottom`;
|
|
286
|
+
* // param이 여러개인경우 \n으로 묶는다
|
|
287
|
+
* const param = `${param1}\n${param2}`;
|
|
288
|
+
* await Bridge.native.scriptEX({ command, param });
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
async scriptEX(options) {
|
|
292
|
+
return this.core.callToNative("scriptEX", Object.assign({ delimiter: "\n" }, options));
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
296
|
+
* ```tsx
|
|
297
|
+
* // 사용 예시
|
|
298
|
+
* await Bridge.native.triggerExternalEvent({ param1: 'signer' });
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
301
|
+
async triggerExternalEvent(options) {
|
|
302
|
+
return this.core.callToNative(
|
|
303
|
+
"triggerExternalEventByDocIndex",
|
|
304
|
+
Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
309
|
+
* ```tsx
|
|
310
|
+
* // 사용 예시
|
|
311
|
+
* await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
async triggerExternalEventByDocIndex(options) {
|
|
315
|
+
return this.core.callToNative(
|
|
316
|
+
"triggerExternalEventByDocIndex",
|
|
317
|
+
Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
|
|
318
|
+
);
|
|
319
|
+
}
|
|
226
320
|
// TODO: 필요 플러그인들 추가
|
|
227
321
|
};
|
|
228
322
|
|
|
@@ -246,6 +340,18 @@ var Bridge = {
|
|
|
246
340
|
core: new Core()
|
|
247
341
|
};
|
|
248
342
|
|
|
343
|
+
// src/bridge/oz/oz-event.types.ts
|
|
344
|
+
var OZViewerEvent = /* @__PURE__ */ ((OZViewerEvent2) => {
|
|
345
|
+
OZViewerEvent2["OZProgressCommand"] = "OZProgressCommand";
|
|
346
|
+
OZViewerEvent2["OZErrorCommand"] = "OZErrorCommand";
|
|
347
|
+
OZViewerEvent2["OZPageChangeCommand"] = "OZPageChangeCommand";
|
|
348
|
+
OZViewerEvent2["OZReportChangeCommand"] = "OZReportChangeCommand";
|
|
349
|
+
OZViewerEvent2["OZUserEvent"] = "OZUserEvent";
|
|
350
|
+
OZViewerEvent2["OZPageBindCommand"] = "OZPageBindCommand";
|
|
351
|
+
return OZViewerEvent2;
|
|
352
|
+
})(OZViewerEvent || {});
|
|
353
|
+
|
|
249
354
|
exports.Bridge = Bridge;
|
|
355
|
+
exports.OZViewerEvent = OZViewerEvent;
|
|
250
356
|
//# sourceMappingURL=index.cjs.map
|
|
251
357
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/bridge.ts"],"names":[],"mappings":";;;;;;;AAEO,IAAM,qBAAwB,GAAA;AAAA,EACnC,WAAwB,GAAA;AACtB,IAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACvC,MAAO,OAAA,KAAA;AAAA;AAGH,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAO,OAAA,SAAA;AAAA;AAGT,IAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,MAAO,OAAA,KAAA;AAAA;AAGT,IAAI,IAAA,MAAA,CAAO,IAAS,KAAA,MAAA,CAAO,GAAK,EAAA;AAC9B,MAAO,OAAA,QAAA;AAAA;AAGT,IAAO,OAAA,KAAA;AAAA;AAEX,CAAA;;;ACdO,IAAM,OAAN,MAAW;AAAA,EAChB,WAAc,GAAA;AACZ,IAAA,IAAA,CAAK,sBAAuB,EAAA;AAAA;AAC9B;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAA4B,GAAA;AAClC,IAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAC3B,IAAM,MAAA,MAAA,GAAS,KAAK,MAAO,EAAA,CAAE,SAAS,EAAE,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA;AAErD,IAAO,OAAA,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA;AAC/B;AAAA;AAAA;AAAA,EAKQ,sBAA+B,GAAA;AACrC,IAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACvC,MAAA;AAAA;AAEI,IAAI,IAAA,CAAC,OAAO,QAAU,EAAA;AACpB,MAAA,MAAA,CAAO,QAAW,GAAA;AAAA,QAChB,UAAU,EAAC;AAAA,QACX,gBAAgB,MAAM;AAAA,SAAC;AAAA,QACvB,uBAAuB,MAAM;AAAA,SAAC;AAAA,QAC9B,gBAAgB,MAAM;AAAA;AAAC,OACzB;AAAA;AAIF,IAAO,MAAA,CAAA,QAAA,CAAS,cAAiB,GAAA,IAAA,CAAK,2BAA4B,EAAA;AAClE,IAAO,MAAA,CAAA,QAAA,CAAS,qBAAwB,GAAA,IAAA,CAAK,kCAAmC,EAAA;AAChF,IAAO,MAAA,CAAA,QAAA,CAAS,cAAiB,GAAA,IAAA,CAAK,2BAA4B,EAAA;AAAA;AACpE;AAAA;AAAA;AAAA;AAAA,EAMQ,2BAA8B,GAAA;AACpC,IAAO,OAAA,CAAC,SAAmB,EAAA,IAAA,EAAY,KAAgB,KAAA;AACrD,MAAA,OAAA,CAAQ,GAAI,CAAA,oBAAA,EAAsB,SAAW,EAAA,IAAA,EAAM,KAAK,CAAA;AAExD,MAAA,MAAM,OAAqC,GAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAC7E,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,wCAAwC,SAAS,CAAA;AAE/D,QAAA;AAAA;AAGF,MAAI,IAAA;AACF,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,UAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAE7B,UAAA;AAAA;AAGF,QAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,UAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAEnB,UAAA;AAAA;AAGF,QAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,eACtB,GAAK,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,6CAA6C,GAAG,CAAA;AAC9D,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA;AAC/B,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA,EAMQ,kCAAqC,GAAA;AAC3C,IAAO,OAAA,CAAC,SAAmB,EAAA,IAAA,EAAY,KAAgB,KAAA;AACrD,MAAA,MAAM,OAAqC,GAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAC7E,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,wCAAwC,SAAS,CAAA;AAE/D,QAAA;AAAA;AAGF,MAAI,IAAA;AACF,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,UAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAE7B,UAAA;AAAA;AAGF,QAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,UAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAEnB,UAAA;AAAA;AAGF,QAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,eACtB,GAAK,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,6CAA6C,GAAG,CAAA;AAC9D,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA;AAC/B,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,2BAA8B,GAAA;AACpC,IAAA,OAAO,CAAC,OAAoB,KAAA;AAC1B,MAAI,IAAA;AACF,QAAM,MAAA,OAAA,GAAU,IAAK,CAAA,KAAA,CAAM,OAAO,CAAA;AAClC,QAAQ,OAAA,CAAA,GAAA,CAAI,sBAAsB,OAAO,CAAA;AAAA,eAClC,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,kCAAkC,KAAK,CAAA;AAAA;AACvD,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAsB,CAAA,MAAA,EAAsB,OAAqC,EAAA;AACrF,IAAA,MAAM,EAAE,cAAgB,EAAA,MAAA,EAAQ,GAAG,cAAe,EAAA,GAAI,WAAW,EAAC;AAElE,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAW,KAAA;AACzC,MAAA,MAAM,YAAY,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,IAAA,CAAK,mBAAmB,CAAA,CAAA;AACvD,MAAQ,OAAA,CAAA,GAAA,CAAI,8BAA8B,SAAS,CAAA;AAGnD,MAAO,MAAA,CAAA,QAAA,CAAS,QAAS,CAAA,SAAS,CAAI,GAAA;AAAA,QACpC,OAAA,EAAS,CAAC,KAAa,KAAA;AACrB,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,SACf;AAAA,QACA,MAAA,EAAQ,CAAC,MAAiB,KAAA;AACxB,UAAA,MAAA,CAAO,MAAM,CAAA;AAAA,SACf;AAAA,QACA;AAAA,OACF;AAEA,MAAI,IAAA;AACF,QAAA,MAAM,OAAyB,GAAA;AAAA,UAC7B,MAAA;AAAA,UACA,SAAW,EAAA,MAAA;AAAA,UACX,SAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACV;AAEA,QAAQ,OAAA,CAAA,GAAA,CAAI,4BAA4B,OAAO,CAAA;AAE/C,QAAM,MAAA,QAAA,GAAW,sBAAsB,WAAY,EAAA;AAEnD,QAAA,IAAI,aAAa,SAAW,EAAA;AAC1B,UAAA,MAAA,CAAO,QAAU,EAAA,WAAA,GAAc,IAAK,CAAA,SAAA,CAAU,OAAO,CAAC,CAAA;AAEtD,UAAA;AAAA;AAGF,QAAA,IAAI,aAAa,KAAO,EAAA;AACtB,UAAA,MAAA,CAAO,QAAQ,eAAiB,EAAA,QAAA,EAAU,YAAY,IAAK,CAAA,SAAA,CAAU,OAAO,CAAC,CAAA;AAE7E,UAAA;AAAA;AAGF,QAAA,IAAI,aAAa,QAAU,EAAA;AACzB,UAAO,MAAA,CAAA,MAAA,CAAO,WAAY,CAAA,OAAA,EAAS,GAAG,CAAA;AAEtC,UAAA;AAAA;AAIF,QAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,+CAAA,EAAyB,QAAQ,CAAA,6EAAA,EAAoB,MAAM,CAAO,oBAAA,CAAA,CAAA;AAC/E,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAC7B,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,QAAQ,EAAE,CAAC,CAAA;AAAA,eAC9C,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAC7B,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA;AACd,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,SAAyB,EAAA;AAC9C,IAAO,OAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA;AAE7C,CAAA;;;AC7MO,IAAM,eAAN,MAAmB;AAAA,EAGxB,WAAc,GAAA;AAFd,IAAU,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGR,IAAK,IAAA,CAAA,IAAA,GAAO,IAAI,IAAK,EAAA;AAAA;AAEzB,CAAA;;;ACHO,IAAM,YAAA,GAAN,cAA2B,YAAsC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtE,MAAM,aAAsB,OAA0C,EAAA;AACpE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,cAAA,EAAgB,OAAO,CAAA;AAAA;AAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAoB,OAA0C,EAAA;AAClE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,YAAA,EAAc,OAAO,CAAA;AAAA;AACxD,EAEA,MAAM,aAAsB,OAA2C,EAAA;AACrE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,cAAA,EAAgB,OAAO,CAAA;AAAA;AAC1D;AAGF,CAAA;;;AC1BO,IAAM,YAAA,GAAN,cAA2B,YAAsC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtE,MAAM,cAAuB,OAA0B,EAAA;AACrD,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,eAAA,EAAiB,OAAO,CAAA;AAAA;AAC3D;AAGF,CAAA;;;ACbO,IAAM,MAAS,GAAA;AAAA,EACpB,MAAA,EAAQ,IAAI,YAAa,EAAA;AAAA,EACzB,MAAA,EAAQ,IAAI,YAAa,EAAA;AAAA,EACzB,IAAA,EAAM,IAAI,IAAK;AACjB","file":"index.cjs","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\nreturn 'web';\n} // SSR 환경에서는 기본값 반환\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2Bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\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 (typeof window === 'undefined') {\nreturn;\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\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 = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\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';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type { ShowWebPopupOptions, CreateReportOptions } 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 async createReport<T = any>(options?: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\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 { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\n core: new Core()\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\n return 'web';\n } // SSR 환경에서는 기본값 반환\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2Bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\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 (typeof window === 'undefined') {\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\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 = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\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';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions\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 * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createReport({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n async createReport<T = { response: string }>(options: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n /** @deprecated 샘플 테스트용 브릿지 */\n async createReport_Sample<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('createReport_Sample');\n }\n\n /**\n * 오즈 뷰어의 정보를 가져옵니다\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = { response: string }>(options: GetInformationOptions): Promise<T> {\n return this.core.callToNative<T>('getInformation', options);\n }\n\n /**\n * 전역 변수 값을 가져옵니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = { response: string }>(options: GetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * 전역 변수 값을 설정합니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n async setGlobal<T = { response: string }>(options: SetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('setGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * 오즈 뷰어의 기능을 제어합니다.\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * await Bridge.native.script({ command });\n * ```\n */\n async script<T = { response: string }>(options: ScriptOptions): Promise<T> {\n return this.core.callToNative<T>('script', options);\n }\n /**\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\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 * await Bridge.native.scriptEX({ command, param });\n * ```\n */\n async scriptEX<T = { response: string }>(options: ScriptExOptions): Promise<T> {\n return this.core.callToNative<T>('scriptEX', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = { response: string }>(options: TriggerExternalEventOptions): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = { response: string }>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\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 { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\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 * `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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -22,11 +22,94 @@ interface CreateReportOptions {
|
|
|
22
22
|
*/
|
|
23
23
|
param: string;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* 오즈 뷰어 함수 `CreateReport`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
27
|
+
*/
|
|
28
|
+
interface GetInformationOptions {
|
|
29
|
+
/**
|
|
30
|
+
* 오즈 뷰어의 정보를 가져오는 명령어
|
|
31
|
+
* - `INPUT_JSON` 현재 보고서의 입력 값을 JSON 형식의 텍스트로 가져옴
|
|
32
|
+
* - `INPUT_JSON_ALL` 전체 보고서의 입력 값을 합쳐서 하나의 JSON 형식 텍스트로 가져옴
|
|
33
|
+
* - `CURRENT_PAGE` 현재 보고서의 페이지 번호. 페이지 번호는 one-based index로 리턴됨
|
|
34
|
+
* - `TOTAL_PAGE_OF_REPORT_FILE_AT=${number}` 보고서 파일별로 전체 페이지 수를 가져옴
|
|
35
|
+
*/
|
|
36
|
+
command: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 오즈 뷰어 함수 `GetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
|
|
40
|
+
*/
|
|
41
|
+
interface GetGlobalOptions {
|
|
42
|
+
/** 전역변수 key */
|
|
43
|
+
key: string;
|
|
44
|
+
/** 보고서 인덱스. Zero-based index. 생략 가능 (기본 값 : 0) */
|
|
45
|
+
docIndex?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 오즈 뷰어 함수 `SetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
|
|
49
|
+
*/
|
|
50
|
+
interface SetGlobalOptions extends GetGlobalOptions {
|
|
51
|
+
/** 전역변수 값 */
|
|
52
|
+
value: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 오즈 뷰어 함수 `Script`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
56
|
+
*/
|
|
57
|
+
interface ScriptOptions {
|
|
58
|
+
/**
|
|
59
|
+
* 오즈 뷰어의 기능을 제어하는 명령어
|
|
60
|
+
* - `movepage=${number}` 지정된 페이지 번호로 이동
|
|
61
|
+
*/
|
|
62
|
+
command: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 오즈 뷰어 함수 `ScriptEx`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
66
|
+
*/
|
|
67
|
+
interface ScriptExOptions extends ScriptOptions {
|
|
68
|
+
/**
|
|
69
|
+
* 오즈 뷰어 파라미터와 파라미터 값.
|
|
70
|
+
* - "`파라미터이름1=파라미터값1delimiter`...delimiter`파라미터이름n=파라미터값n`" 형태로 설정
|
|
71
|
+
*/
|
|
72
|
+
param: string;
|
|
73
|
+
/**
|
|
74
|
+
* 파라미터이름=파라미터값을 구분하는 구분자. 생략 가능
|
|
75
|
+
* - (기본 값 : `\n`)
|
|
76
|
+
*/
|
|
77
|
+
delimiter?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 오즈 뷰어 함수 `TriggerExternalEvent`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
81
|
+
*/
|
|
82
|
+
interface TriggerExternalEventOptions {
|
|
83
|
+
/** OnExternalEvent로 전달할 첫 번째 값. 생략 가능 (기본 값 : "") */
|
|
84
|
+
param1?: string;
|
|
85
|
+
/** OnExternalEvent로 전달할 두 번째 값. 생략 가능 (기본 값 : "") */
|
|
86
|
+
param2?: string;
|
|
87
|
+
/** OnExternalEvent로 전달할 세 번째 값. 생략 가능 (기본 값 : "") */
|
|
88
|
+
param3?: string;
|
|
89
|
+
/** OnExternalEvent로 전달할 네 번째 값. 생략 가능 (기본 값 : "") */
|
|
90
|
+
param4?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 오즈 뷰어 함수 `TriggerExternalEventByDocIndex`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
94
|
+
*/
|
|
95
|
+
interface TriggerExternalEventByDocIndexOptions extends TriggerExternalEventOptions {
|
|
96
|
+
/** 보고서 인덱스. Zero-based index */
|
|
97
|
+
docIndex: number;
|
|
98
|
+
}
|
|
25
99
|
|
|
26
100
|
interface INativeBridge {
|
|
27
101
|
showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
|
|
28
102
|
jumpSafari<T>(options: ShowWebPopupOptions): Promise<T>;
|
|
29
|
-
createReport<T>(options
|
|
103
|
+
createReport<T>(options: CreateReportOptions): Promise<T>;
|
|
104
|
+
/** @deprecated 샘플 테스트용 브릿지 */
|
|
105
|
+
createReport_Sample<T>(): Promise<T>;
|
|
106
|
+
getInformation<T>(options: GetInformationOptions): Promise<T>;
|
|
107
|
+
getGlobal<T>(options: GetGlobalOptions): Promise<T>;
|
|
108
|
+
setGlobal<T>(options: SetGlobalOptions): Promise<T>;
|
|
109
|
+
script<T>(options: ScriptOptions): Promise<T>;
|
|
110
|
+
scriptEX<T>(options: ScriptExOptions): Promise<T>;
|
|
111
|
+
triggerExternalEvent<T>(options: TriggerExternalEventOptions): Promise<T>;
|
|
112
|
+
triggerExternalEventByDocIndex<T>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
|
|
30
113
|
}
|
|
31
114
|
|
|
32
115
|
type NativeAction = keyof INativeBridge;
|
|
@@ -121,7 +204,97 @@ declare class NativeBridge extends CommonBridge implements INativeBridge {
|
|
|
121
204
|
* @returns
|
|
122
205
|
*/
|
|
123
206
|
jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T>;
|
|
124
|
-
|
|
207
|
+
/**
|
|
208
|
+
* 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
|
|
209
|
+
* ```tsx
|
|
210
|
+
* // 사용 예시
|
|
211
|
+
* await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
createReport<T = {
|
|
215
|
+
response: string;
|
|
216
|
+
}>(options: CreateReportOptions): Promise<T>;
|
|
217
|
+
/** @deprecated 샘플 테스트용 브릿지 */
|
|
218
|
+
createReport_Sample<T = {
|
|
219
|
+
response: string;
|
|
220
|
+
}>(): Promise<T>;
|
|
221
|
+
/**
|
|
222
|
+
* 오즈 뷰어의 정보를 가져옵니다
|
|
223
|
+
* ```tsx
|
|
224
|
+
* // 사용 예시
|
|
225
|
+
* await Bridge.native.getInformation({ command: "INPUT_JSON" });
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
getInformation<T = {
|
|
229
|
+
response: string;
|
|
230
|
+
}>(options: GetInformationOptions): Promise<T>;
|
|
231
|
+
/**
|
|
232
|
+
* 전역 변수 값을 가져옵니다.
|
|
233
|
+
* ```tsx
|
|
234
|
+
* // 사용 예시
|
|
235
|
+
* await Bridge.native.getGlobal({ key: "AAA" })
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
getGlobal<T = {
|
|
239
|
+
response: string;
|
|
240
|
+
}>(options: GetGlobalOptions): Promise<T>;
|
|
241
|
+
/**
|
|
242
|
+
* 전역 변수 값을 설정합니다.
|
|
243
|
+
* ```tsx
|
|
244
|
+
* // 사용 예시
|
|
245
|
+
* await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
setGlobal<T = {
|
|
249
|
+
response: string;
|
|
250
|
+
}>(options: SetGlobalOptions): Promise<T>;
|
|
251
|
+
/**
|
|
252
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
253
|
+
* ```tsx
|
|
254
|
+
* // 사용 예시
|
|
255
|
+
* const command = `movepage=2`;
|
|
256
|
+
* await Bridge.native.script({ command });
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
259
|
+
script<T = {
|
|
260
|
+
response: string;
|
|
261
|
+
}>(options: ScriptOptions): Promise<T>;
|
|
262
|
+
/**
|
|
263
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
264
|
+
* - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
|
|
265
|
+
* ```tsx
|
|
266
|
+
* // 사용 예시
|
|
267
|
+
* const command = `movepage=2`;
|
|
268
|
+
* const param1 = `eform.show_prev_next_input=true`;
|
|
269
|
+
* const param2 = `eform.signpad_iconposition=sign_bottom`;
|
|
270
|
+
* // param이 여러개인경우 \n으로 묶는다
|
|
271
|
+
* const param = `${param1}\n${param2}`;
|
|
272
|
+
* await Bridge.native.scriptEX({ command, param });
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
scriptEX<T = {
|
|
276
|
+
response: string;
|
|
277
|
+
}>(options: ScriptExOptions): Promise<T>;
|
|
278
|
+
/**
|
|
279
|
+
* 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
280
|
+
* ```tsx
|
|
281
|
+
* // 사용 예시
|
|
282
|
+
* await Bridge.native.triggerExternalEvent({ param1: 'signer' });
|
|
283
|
+
* ```
|
|
284
|
+
*/
|
|
285
|
+
triggerExternalEvent<T = {
|
|
286
|
+
response: string;
|
|
287
|
+
}>(options: TriggerExternalEventOptions): Promise<T>;
|
|
288
|
+
/**
|
|
289
|
+
* 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
290
|
+
* ```tsx
|
|
291
|
+
* // 사용 예시
|
|
292
|
+
* await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
triggerExternalEventByDocIndex<T = {
|
|
296
|
+
response: string;
|
|
297
|
+
}>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
|
|
125
298
|
}
|
|
126
299
|
|
|
127
300
|
/**
|
|
@@ -142,4 +315,146 @@ declare const Bridge: {
|
|
|
142
315
|
core: Core;
|
|
143
316
|
};
|
|
144
317
|
|
|
145
|
-
|
|
318
|
+
/**
|
|
319
|
+
* OZ 뷰어에 관련된 이벤트 목록
|
|
320
|
+
*/
|
|
321
|
+
declare enum OZViewerEvent {
|
|
322
|
+
/**
|
|
323
|
+
* 보고서 생성 단계별로 발생하는 이벤트
|
|
324
|
+
* - `OZViewerProgressEvent` 이벤트와 매칭된다
|
|
325
|
+
* - `viewer.progresscommand=true` 설정이 필요하다
|
|
326
|
+
* - `OZViewerProgressEvent`와 매칭된다
|
|
327
|
+
*/
|
|
328
|
+
OZProgressCommand = "OZProgressCommand",
|
|
329
|
+
/**
|
|
330
|
+
* 에러 발생 시 발생하는 이벤트
|
|
331
|
+
* - `viewer.errorcommand=true` 설정이 필요하다
|
|
332
|
+
* - `OZViewerErrorEvent`와 매칭된다
|
|
333
|
+
*/
|
|
334
|
+
OZErrorCommand = "OZErrorCommand",
|
|
335
|
+
/**
|
|
336
|
+
* 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트
|
|
337
|
+
* - `viewer.pagechangecommand=true` 설정이 필요하다
|
|
338
|
+
* - `OZViewerChangeEvent`와 매칭된다
|
|
339
|
+
*/
|
|
340
|
+
OZPageChangeCommand = "OZPageChangeCommand",
|
|
341
|
+
/**
|
|
342
|
+
* 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트
|
|
343
|
+
* - `viewer.reportchangecommand=true` 설정이 필요하다
|
|
344
|
+
* - `OZViewerChangeEvent`와 매칭된다
|
|
345
|
+
*/
|
|
346
|
+
OZReportChangeCommand = "OZReportChangeCommand",
|
|
347
|
+
/**
|
|
348
|
+
* `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트
|
|
349
|
+
* - `OZViewerUserEvent`와 매칭된다
|
|
350
|
+
*/
|
|
351
|
+
OZUserEvent = "OZUserEvent",
|
|
352
|
+
/**
|
|
353
|
+
* `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트
|
|
354
|
+
* - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작
|
|
355
|
+
* - ex) `viewer.pagebindcommandinterval=500`
|
|
356
|
+
* - `OZViewerPageBindEvent`와 매칭된다
|
|
357
|
+
*/
|
|
358
|
+
OZPageBindCommand = "OZPageBindCommand"
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의
|
|
362
|
+
* ```tsx
|
|
363
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
364
|
+
* window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });
|
|
365
|
+
* ```
|
|
366
|
+
*
|
|
367
|
+
* `step과` `state`는 step => state 방식으로 진행된다
|
|
368
|
+
*
|
|
369
|
+
* 예시
|
|
370
|
+
* ```bash
|
|
371
|
+
* # step0 뷰어실행
|
|
372
|
+
* [step=0][state=0] # 뷰어 실행 시작
|
|
373
|
+
* [step=0][state=1] # 뷰어 실행 완료
|
|
374
|
+
* # step2 보고서 템플릿 생성
|
|
375
|
+
* [step=1][state=0] # 보고서 템플릿 생성 시작
|
|
376
|
+
* [step=1][state=1] # 보고서 템플릿 생성 완료
|
|
377
|
+
* ```
|
|
378
|
+
*/
|
|
379
|
+
type OZViewerProgressEvent = {
|
|
380
|
+
/**
|
|
381
|
+
* 보고서 생성 단계
|
|
382
|
+
* - 0 : 뷰어 실행 옵션 설정
|
|
383
|
+
* - 1 : 보고서 파일 다운로드
|
|
384
|
+
* - 2 : 보고서 템플릿 생성
|
|
385
|
+
* - 3 : 데이터 다운로드
|
|
386
|
+
* - 4 : 보고서 바인딩
|
|
387
|
+
*/
|
|
388
|
+
step: '0' | '1' | '2' | '3' | '4';
|
|
389
|
+
/**
|
|
390
|
+
* 보고서 생성 상태
|
|
391
|
+
* - 1 : 시작
|
|
392
|
+
* - 2 : 완료
|
|
393
|
+
*/
|
|
394
|
+
state: '1' | '2';
|
|
395
|
+
/** 보고서 이름 */
|
|
396
|
+
reportname: string;
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의
|
|
400
|
+
* ```tsx
|
|
401
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
402
|
+
* window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });
|
|
403
|
+
* ```
|
|
404
|
+
*/
|
|
405
|
+
type OZViewerErrorEvent = {
|
|
406
|
+
/** 에러 메시지 코드 */
|
|
407
|
+
code: string;
|
|
408
|
+
/** 에러 기본 메시지 */
|
|
409
|
+
message: string;
|
|
410
|
+
/** 에러 상세 메시지 */
|
|
411
|
+
detailmessage: string;
|
|
412
|
+
/** 보고서 이름 */
|
|
413
|
+
reportname: string;
|
|
414
|
+
};
|
|
415
|
+
/**
|
|
416
|
+
* 두 이벤트의 공용 타입
|
|
417
|
+
* - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의
|
|
418
|
+
* - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의
|
|
419
|
+
* ```tsx
|
|
420
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
421
|
+
* window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });
|
|
422
|
+
* window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });
|
|
423
|
+
* ```
|
|
424
|
+
*/
|
|
425
|
+
type OZViewerChangeEvent = {
|
|
426
|
+
/** 보고서 인덱스(zero-based index) */
|
|
427
|
+
docindex: number;
|
|
428
|
+
};
|
|
429
|
+
/**
|
|
430
|
+
* `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의
|
|
431
|
+
* ```tsx
|
|
432
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
433
|
+
* window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
type OZViewerUserEvent = {
|
|
437
|
+
/** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */
|
|
438
|
+
param1: string;
|
|
439
|
+
/** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */
|
|
440
|
+
param2: string;
|
|
441
|
+
/** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */
|
|
442
|
+
param3: string;
|
|
443
|
+
/** 보고서 인덱스(zero-based index) */
|
|
444
|
+
docindex: string;
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의
|
|
448
|
+
* ```tsx
|
|
449
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
450
|
+
* window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });
|
|
451
|
+
* ```
|
|
452
|
+
*/
|
|
453
|
+
type OZViewerPageBindEvent = {
|
|
454
|
+
/** 보고서 인덱스(zero-based index) */
|
|
455
|
+
docindex: string;
|
|
456
|
+
/** 바인딩된 페이지 번호 */
|
|
457
|
+
pagecount: string;
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
export { Bridge, type OZViewerChangeEvent, type OZViewerErrorEvent, OZViewerEvent, type OZViewerPageBindEvent, type OZViewerProgressEvent, type OZViewerUserEvent };
|
package/dist/index.d.ts
CHANGED
|
@@ -22,11 +22,94 @@ interface CreateReportOptions {
|
|
|
22
22
|
*/
|
|
23
23
|
param: string;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* 오즈 뷰어 함수 `CreateReport`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
27
|
+
*/
|
|
28
|
+
interface GetInformationOptions {
|
|
29
|
+
/**
|
|
30
|
+
* 오즈 뷰어의 정보를 가져오는 명령어
|
|
31
|
+
* - `INPUT_JSON` 현재 보고서의 입력 값을 JSON 형식의 텍스트로 가져옴
|
|
32
|
+
* - `INPUT_JSON_ALL` 전체 보고서의 입력 값을 합쳐서 하나의 JSON 형식 텍스트로 가져옴
|
|
33
|
+
* - `CURRENT_PAGE` 현재 보고서의 페이지 번호. 페이지 번호는 one-based index로 리턴됨
|
|
34
|
+
* - `TOTAL_PAGE_OF_REPORT_FILE_AT=${number}` 보고서 파일별로 전체 페이지 수를 가져옴
|
|
35
|
+
*/
|
|
36
|
+
command: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 오즈 뷰어 함수 `GetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
|
|
40
|
+
*/
|
|
41
|
+
interface GetGlobalOptions {
|
|
42
|
+
/** 전역변수 key */
|
|
43
|
+
key: string;
|
|
44
|
+
/** 보고서 인덱스. Zero-based index. 생략 가능 (기본 값 : 0) */
|
|
45
|
+
docIndex?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 오즈 뷰어 함수 `SetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
|
|
49
|
+
*/
|
|
50
|
+
interface SetGlobalOptions extends GetGlobalOptions {
|
|
51
|
+
/** 전역변수 값 */
|
|
52
|
+
value: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 오즈 뷰어 함수 `Script`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
56
|
+
*/
|
|
57
|
+
interface ScriptOptions {
|
|
58
|
+
/**
|
|
59
|
+
* 오즈 뷰어의 기능을 제어하는 명령어
|
|
60
|
+
* - `movepage=${number}` 지정된 페이지 번호로 이동
|
|
61
|
+
*/
|
|
62
|
+
command: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 오즈 뷰어 함수 `ScriptEx`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
66
|
+
*/
|
|
67
|
+
interface ScriptExOptions extends ScriptOptions {
|
|
68
|
+
/**
|
|
69
|
+
* 오즈 뷰어 파라미터와 파라미터 값.
|
|
70
|
+
* - "`파라미터이름1=파라미터값1delimiter`...delimiter`파라미터이름n=파라미터값n`" 형태로 설정
|
|
71
|
+
*/
|
|
72
|
+
param: string;
|
|
73
|
+
/**
|
|
74
|
+
* 파라미터이름=파라미터값을 구분하는 구분자. 생략 가능
|
|
75
|
+
* - (기본 값 : `\n`)
|
|
76
|
+
*/
|
|
77
|
+
delimiter?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 오즈 뷰어 함수 `TriggerExternalEvent`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
81
|
+
*/
|
|
82
|
+
interface TriggerExternalEventOptions {
|
|
83
|
+
/** OnExternalEvent로 전달할 첫 번째 값. 생략 가능 (기본 값 : "") */
|
|
84
|
+
param1?: string;
|
|
85
|
+
/** OnExternalEvent로 전달할 두 번째 값. 생략 가능 (기본 값 : "") */
|
|
86
|
+
param2?: string;
|
|
87
|
+
/** OnExternalEvent로 전달할 세 번째 값. 생략 가능 (기본 값 : "") */
|
|
88
|
+
param3?: string;
|
|
89
|
+
/** OnExternalEvent로 전달할 네 번째 값. 생략 가능 (기본 값 : "") */
|
|
90
|
+
param4?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 오즈 뷰어 함수 `TriggerExternalEventByDocIndex`를 호출할 때 사용하는 브릿지용 입력 옵션
|
|
94
|
+
*/
|
|
95
|
+
interface TriggerExternalEventByDocIndexOptions extends TriggerExternalEventOptions {
|
|
96
|
+
/** 보고서 인덱스. Zero-based index */
|
|
97
|
+
docIndex: number;
|
|
98
|
+
}
|
|
25
99
|
|
|
26
100
|
interface INativeBridge {
|
|
27
101
|
showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
|
|
28
102
|
jumpSafari<T>(options: ShowWebPopupOptions): Promise<T>;
|
|
29
|
-
createReport<T>(options
|
|
103
|
+
createReport<T>(options: CreateReportOptions): Promise<T>;
|
|
104
|
+
/** @deprecated 샘플 테스트용 브릿지 */
|
|
105
|
+
createReport_Sample<T>(): Promise<T>;
|
|
106
|
+
getInformation<T>(options: GetInformationOptions): Promise<T>;
|
|
107
|
+
getGlobal<T>(options: GetGlobalOptions): Promise<T>;
|
|
108
|
+
setGlobal<T>(options: SetGlobalOptions): Promise<T>;
|
|
109
|
+
script<T>(options: ScriptOptions): Promise<T>;
|
|
110
|
+
scriptEX<T>(options: ScriptExOptions): Promise<T>;
|
|
111
|
+
triggerExternalEvent<T>(options: TriggerExternalEventOptions): Promise<T>;
|
|
112
|
+
triggerExternalEventByDocIndex<T>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
|
|
30
113
|
}
|
|
31
114
|
|
|
32
115
|
type NativeAction = keyof INativeBridge;
|
|
@@ -121,7 +204,97 @@ declare class NativeBridge extends CommonBridge implements INativeBridge {
|
|
|
121
204
|
* @returns
|
|
122
205
|
*/
|
|
123
206
|
jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T>;
|
|
124
|
-
|
|
207
|
+
/**
|
|
208
|
+
* 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
|
|
209
|
+
* ```tsx
|
|
210
|
+
* // 사용 예시
|
|
211
|
+
* await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
createReport<T = {
|
|
215
|
+
response: string;
|
|
216
|
+
}>(options: CreateReportOptions): Promise<T>;
|
|
217
|
+
/** @deprecated 샘플 테스트용 브릿지 */
|
|
218
|
+
createReport_Sample<T = {
|
|
219
|
+
response: string;
|
|
220
|
+
}>(): Promise<T>;
|
|
221
|
+
/**
|
|
222
|
+
* 오즈 뷰어의 정보를 가져옵니다
|
|
223
|
+
* ```tsx
|
|
224
|
+
* // 사용 예시
|
|
225
|
+
* await Bridge.native.getInformation({ command: "INPUT_JSON" });
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
getInformation<T = {
|
|
229
|
+
response: string;
|
|
230
|
+
}>(options: GetInformationOptions): Promise<T>;
|
|
231
|
+
/**
|
|
232
|
+
* 전역 변수 값을 가져옵니다.
|
|
233
|
+
* ```tsx
|
|
234
|
+
* // 사용 예시
|
|
235
|
+
* await Bridge.native.getGlobal({ key: "AAA" })
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
getGlobal<T = {
|
|
239
|
+
response: string;
|
|
240
|
+
}>(options: GetGlobalOptions): Promise<T>;
|
|
241
|
+
/**
|
|
242
|
+
* 전역 변수 값을 설정합니다.
|
|
243
|
+
* ```tsx
|
|
244
|
+
* // 사용 예시
|
|
245
|
+
* await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
setGlobal<T = {
|
|
249
|
+
response: string;
|
|
250
|
+
}>(options: SetGlobalOptions): Promise<T>;
|
|
251
|
+
/**
|
|
252
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
253
|
+
* ```tsx
|
|
254
|
+
* // 사용 예시
|
|
255
|
+
* const command = `movepage=2`;
|
|
256
|
+
* await Bridge.native.script({ command });
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
259
|
+
script<T = {
|
|
260
|
+
response: string;
|
|
261
|
+
}>(options: ScriptOptions): Promise<T>;
|
|
262
|
+
/**
|
|
263
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
264
|
+
* - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
|
|
265
|
+
* ```tsx
|
|
266
|
+
* // 사용 예시
|
|
267
|
+
* const command = `movepage=2`;
|
|
268
|
+
* const param1 = `eform.show_prev_next_input=true`;
|
|
269
|
+
* const param2 = `eform.signpad_iconposition=sign_bottom`;
|
|
270
|
+
* // param이 여러개인경우 \n으로 묶는다
|
|
271
|
+
* const param = `${param1}\n${param2}`;
|
|
272
|
+
* await Bridge.native.scriptEX({ command, param });
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
scriptEX<T = {
|
|
276
|
+
response: string;
|
|
277
|
+
}>(options: ScriptExOptions): Promise<T>;
|
|
278
|
+
/**
|
|
279
|
+
* 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
280
|
+
* ```tsx
|
|
281
|
+
* // 사용 예시
|
|
282
|
+
* await Bridge.native.triggerExternalEvent({ param1: 'signer' });
|
|
283
|
+
* ```
|
|
284
|
+
*/
|
|
285
|
+
triggerExternalEvent<T = {
|
|
286
|
+
response: string;
|
|
287
|
+
}>(options: TriggerExternalEventOptions): Promise<T>;
|
|
288
|
+
/**
|
|
289
|
+
* 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
290
|
+
* ```tsx
|
|
291
|
+
* // 사용 예시
|
|
292
|
+
* await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
triggerExternalEventByDocIndex<T = {
|
|
296
|
+
response: string;
|
|
297
|
+
}>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
|
|
125
298
|
}
|
|
126
299
|
|
|
127
300
|
/**
|
|
@@ -142,4 +315,146 @@ declare const Bridge: {
|
|
|
142
315
|
core: Core;
|
|
143
316
|
};
|
|
144
317
|
|
|
145
|
-
|
|
318
|
+
/**
|
|
319
|
+
* OZ 뷰어에 관련된 이벤트 목록
|
|
320
|
+
*/
|
|
321
|
+
declare enum OZViewerEvent {
|
|
322
|
+
/**
|
|
323
|
+
* 보고서 생성 단계별로 발생하는 이벤트
|
|
324
|
+
* - `OZViewerProgressEvent` 이벤트와 매칭된다
|
|
325
|
+
* - `viewer.progresscommand=true` 설정이 필요하다
|
|
326
|
+
* - `OZViewerProgressEvent`와 매칭된다
|
|
327
|
+
*/
|
|
328
|
+
OZProgressCommand = "OZProgressCommand",
|
|
329
|
+
/**
|
|
330
|
+
* 에러 발생 시 발생하는 이벤트
|
|
331
|
+
* - `viewer.errorcommand=true` 설정이 필요하다
|
|
332
|
+
* - `OZViewerErrorEvent`와 매칭된다
|
|
333
|
+
*/
|
|
334
|
+
OZErrorCommand = "OZErrorCommand",
|
|
335
|
+
/**
|
|
336
|
+
* 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트
|
|
337
|
+
* - `viewer.pagechangecommand=true` 설정이 필요하다
|
|
338
|
+
* - `OZViewerChangeEvent`와 매칭된다
|
|
339
|
+
*/
|
|
340
|
+
OZPageChangeCommand = "OZPageChangeCommand",
|
|
341
|
+
/**
|
|
342
|
+
* 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트
|
|
343
|
+
* - `viewer.reportchangecommand=true` 설정이 필요하다
|
|
344
|
+
* - `OZViewerChangeEvent`와 매칭된다
|
|
345
|
+
*/
|
|
346
|
+
OZReportChangeCommand = "OZReportChangeCommand",
|
|
347
|
+
/**
|
|
348
|
+
* `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트
|
|
349
|
+
* - `OZViewerUserEvent`와 매칭된다
|
|
350
|
+
*/
|
|
351
|
+
OZUserEvent = "OZUserEvent",
|
|
352
|
+
/**
|
|
353
|
+
* `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트
|
|
354
|
+
* - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작
|
|
355
|
+
* - ex) `viewer.pagebindcommandinterval=500`
|
|
356
|
+
* - `OZViewerPageBindEvent`와 매칭된다
|
|
357
|
+
*/
|
|
358
|
+
OZPageBindCommand = "OZPageBindCommand"
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의
|
|
362
|
+
* ```tsx
|
|
363
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
364
|
+
* window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });
|
|
365
|
+
* ```
|
|
366
|
+
*
|
|
367
|
+
* `step과` `state`는 step => state 방식으로 진행된다
|
|
368
|
+
*
|
|
369
|
+
* 예시
|
|
370
|
+
* ```bash
|
|
371
|
+
* # step0 뷰어실행
|
|
372
|
+
* [step=0][state=0] # 뷰어 실행 시작
|
|
373
|
+
* [step=0][state=1] # 뷰어 실행 완료
|
|
374
|
+
* # step2 보고서 템플릿 생성
|
|
375
|
+
* [step=1][state=0] # 보고서 템플릿 생성 시작
|
|
376
|
+
* [step=1][state=1] # 보고서 템플릿 생성 완료
|
|
377
|
+
* ```
|
|
378
|
+
*/
|
|
379
|
+
type OZViewerProgressEvent = {
|
|
380
|
+
/**
|
|
381
|
+
* 보고서 생성 단계
|
|
382
|
+
* - 0 : 뷰어 실행 옵션 설정
|
|
383
|
+
* - 1 : 보고서 파일 다운로드
|
|
384
|
+
* - 2 : 보고서 템플릿 생성
|
|
385
|
+
* - 3 : 데이터 다운로드
|
|
386
|
+
* - 4 : 보고서 바인딩
|
|
387
|
+
*/
|
|
388
|
+
step: '0' | '1' | '2' | '3' | '4';
|
|
389
|
+
/**
|
|
390
|
+
* 보고서 생성 상태
|
|
391
|
+
* - 1 : 시작
|
|
392
|
+
* - 2 : 완료
|
|
393
|
+
*/
|
|
394
|
+
state: '1' | '2';
|
|
395
|
+
/** 보고서 이름 */
|
|
396
|
+
reportname: string;
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의
|
|
400
|
+
* ```tsx
|
|
401
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
402
|
+
* window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });
|
|
403
|
+
* ```
|
|
404
|
+
*/
|
|
405
|
+
type OZViewerErrorEvent = {
|
|
406
|
+
/** 에러 메시지 코드 */
|
|
407
|
+
code: string;
|
|
408
|
+
/** 에러 기본 메시지 */
|
|
409
|
+
message: string;
|
|
410
|
+
/** 에러 상세 메시지 */
|
|
411
|
+
detailmessage: string;
|
|
412
|
+
/** 보고서 이름 */
|
|
413
|
+
reportname: string;
|
|
414
|
+
};
|
|
415
|
+
/**
|
|
416
|
+
* 두 이벤트의 공용 타입
|
|
417
|
+
* - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의
|
|
418
|
+
* - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의
|
|
419
|
+
* ```tsx
|
|
420
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
421
|
+
* window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });
|
|
422
|
+
* window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });
|
|
423
|
+
* ```
|
|
424
|
+
*/
|
|
425
|
+
type OZViewerChangeEvent = {
|
|
426
|
+
/** 보고서 인덱스(zero-based index) */
|
|
427
|
+
docindex: number;
|
|
428
|
+
};
|
|
429
|
+
/**
|
|
430
|
+
* `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의
|
|
431
|
+
* ```tsx
|
|
432
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
433
|
+
* window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
type OZViewerUserEvent = {
|
|
437
|
+
/** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */
|
|
438
|
+
param1: string;
|
|
439
|
+
/** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */
|
|
440
|
+
param2: string;
|
|
441
|
+
/** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */
|
|
442
|
+
param3: string;
|
|
443
|
+
/** 보고서 인덱스(zero-based index) */
|
|
444
|
+
docindex: string;
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의
|
|
448
|
+
* ```tsx
|
|
449
|
+
* import { OZViewerEvent } from 'sales-frontend-bridge';
|
|
450
|
+
* window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });
|
|
451
|
+
* ```
|
|
452
|
+
*/
|
|
453
|
+
type OZViewerPageBindEvent = {
|
|
454
|
+
/** 보고서 인덱스(zero-based index) */
|
|
455
|
+
docindex: string;
|
|
456
|
+
/** 바인딩된 페이지 번호 */
|
|
457
|
+
pagecount: string;
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
export { Bridge, type OZViewerChangeEvent, type OZViewerErrorEvent, OZViewerEvent, type OZViewerPageBindEvent, type OZViewerProgressEvent, type OZViewerUserEvent };
|
package/dist/index.js
CHANGED
|
@@ -218,9 +218,103 @@ var NativeBridge = class extends CommonBridge {
|
|
|
218
218
|
async jumpSafari(options) {
|
|
219
219
|
return this.core.callToNative("jumpSafari", options);
|
|
220
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
|
|
223
|
+
* ```tsx
|
|
224
|
+
* // 사용 예시
|
|
225
|
+
* await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
221
228
|
async createReport(options) {
|
|
222
229
|
return this.core.callToNative("createReport", options);
|
|
223
230
|
}
|
|
231
|
+
/** @deprecated 샘플 테스트용 브릿지 */
|
|
232
|
+
async createReport_Sample() {
|
|
233
|
+
return this.core.callToNative("createReport_Sample");
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* 오즈 뷰어의 정보를 가져옵니다
|
|
237
|
+
* ```tsx
|
|
238
|
+
* // 사용 예시
|
|
239
|
+
* await Bridge.native.getInformation({ command: "INPUT_JSON" });
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
async getInformation(options) {
|
|
243
|
+
return this.core.callToNative("getInformation", options);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* 전역 변수 값을 가져옵니다.
|
|
247
|
+
* ```tsx
|
|
248
|
+
* // 사용 예시
|
|
249
|
+
* await Bridge.native.getGlobal({ key: "AAA" })
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
async getGlobal(options) {
|
|
253
|
+
return this.core.callToNative("getGlobal", Object.assign({ docIndex: 0 }, options));
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 전역 변수 값을 설정합니다.
|
|
257
|
+
* ```tsx
|
|
258
|
+
* // 사용 예시
|
|
259
|
+
* await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
async setGlobal(options) {
|
|
263
|
+
return this.core.callToNative("setGlobal", Object.assign({ docIndex: 0 }, options));
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
267
|
+
* ```tsx
|
|
268
|
+
* // 사용 예시
|
|
269
|
+
* const command = `movepage=2`;
|
|
270
|
+
* await Bridge.native.script({ command });
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
async script(options) {
|
|
274
|
+
return this.core.callToNative("script", options);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* 오즈 뷰어의 기능을 제어합니다.
|
|
278
|
+
* - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
|
|
279
|
+
* ```tsx
|
|
280
|
+
* // 사용 예시
|
|
281
|
+
* const command = `movepage=2`;
|
|
282
|
+
* const param1 = `eform.show_prev_next_input=true`;
|
|
283
|
+
* const param2 = `eform.signpad_iconposition=sign_bottom`;
|
|
284
|
+
* // param이 여러개인경우 \n으로 묶는다
|
|
285
|
+
* const param = `${param1}\n${param2}`;
|
|
286
|
+
* await Bridge.native.scriptEX({ command, param });
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
async scriptEX(options) {
|
|
290
|
+
return this.core.callToNative("scriptEX", Object.assign({ delimiter: "\n" }, options));
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
294
|
+
* ```tsx
|
|
295
|
+
* // 사용 예시
|
|
296
|
+
* await Bridge.native.triggerExternalEvent({ param1: 'signer' });
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
async triggerExternalEvent(options) {
|
|
300
|
+
return this.core.callToNative(
|
|
301
|
+
"triggerExternalEventByDocIndex",
|
|
302
|
+
Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
|
|
307
|
+
* ```tsx
|
|
308
|
+
* // 사용 예시
|
|
309
|
+
* await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
async triggerExternalEventByDocIndex(options) {
|
|
313
|
+
return this.core.callToNative(
|
|
314
|
+
"triggerExternalEventByDocIndex",
|
|
315
|
+
Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
|
|
316
|
+
);
|
|
317
|
+
}
|
|
224
318
|
// TODO: 필요 플러그인들 추가
|
|
225
319
|
};
|
|
226
320
|
|
|
@@ -244,6 +338,17 @@ var Bridge = {
|
|
|
244
338
|
core: new Core()
|
|
245
339
|
};
|
|
246
340
|
|
|
247
|
-
|
|
341
|
+
// src/bridge/oz/oz-event.types.ts
|
|
342
|
+
var OZViewerEvent = /* @__PURE__ */ ((OZViewerEvent2) => {
|
|
343
|
+
OZViewerEvent2["OZProgressCommand"] = "OZProgressCommand";
|
|
344
|
+
OZViewerEvent2["OZErrorCommand"] = "OZErrorCommand";
|
|
345
|
+
OZViewerEvent2["OZPageChangeCommand"] = "OZPageChangeCommand";
|
|
346
|
+
OZViewerEvent2["OZReportChangeCommand"] = "OZReportChangeCommand";
|
|
347
|
+
OZViewerEvent2["OZUserEvent"] = "OZUserEvent";
|
|
348
|
+
OZViewerEvent2["OZPageBindCommand"] = "OZPageBindCommand";
|
|
349
|
+
return OZViewerEvent2;
|
|
350
|
+
})(OZViewerEvent || {});
|
|
351
|
+
|
|
352
|
+
export { Bridge, OZViewerEvent };
|
|
248
353
|
//# sourceMappingURL=index.js.map
|
|
249
354
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/bridge.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\nreturn 'web';\n} // SSR 환경에서는 기본값 반환\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2Bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\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 (typeof window === 'undefined') {\nreturn;\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\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 = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\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';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type { ShowWebPopupOptions, CreateReportOptions } 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 async createReport<T = any>(options?: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\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 { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\n core: new Core()\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-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 { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\n return 'web';\n } // SSR 환경에서는 기본값 반환\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2Bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\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 (typeof window === 'undefined') {\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\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 = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2Bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2Bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\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';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions\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 * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createReport({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n async createReport<T = { response: string }>(options: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n /** @deprecated 샘플 테스트용 브릿지 */\n async createReport_Sample<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('createReport_Sample');\n }\n\n /**\n * 오즈 뷰어의 정보를 가져옵니다\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = { response: string }>(options: GetInformationOptions): Promise<T> {\n return this.core.callToNative<T>('getInformation', options);\n }\n\n /**\n * 전역 변수 값을 가져옵니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = { response: string }>(options: GetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * 전역 변수 값을 설정합니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n async setGlobal<T = { response: string }>(options: SetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('setGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * 오즈 뷰어의 기능을 제어합니다.\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * await Bridge.native.script({ command });\n * ```\n */\n async script<T = { response: string }>(options: ScriptOptions): Promise<T> {\n return this.core.callToNative<T>('script', options);\n }\n /**\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\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 * await Bridge.native.scriptEX({ command, param });\n * ```\n */\n async scriptEX<T = { response: string }>(options: ScriptExOptions): Promise<T> {\n return this.core.callToNative<T>('scriptEX', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = { response: string }>(options: TriggerExternalEventOptions): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = { response: string }>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\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 { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\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 * `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"]}
|