# Client Common Usage Guide The client `common` addon contains shared browser UI bridge declarations and common client-side browser integration patterns. ## Purpose Use `forge_client_common` when a browser-backed feature UI needs reusable screen lifecycle behavior: - active browser control tracking - browser ready state - pending event queues - `ExecJS` payload delivery - shared bridge object inheritance through `createHashMapObject` Feature addons still own their app-specific events and server RPC mapping. ## Shared Bridge Initialize the bridge declarations with: ```sqf private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge; private _bridgeDeclaration = _webUIDeclarations get "bridgeDeclaration"; ``` Feature bridges can inherit from the shared declaration: ```sqf GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [ ["#base", _bridgeDeclaration], ["#type", "MyUIBridgeBaseClass"], ["handleReady", compileFinal { params [["_control", controlNull, [controlNull]]]; _self call ["setActiveBrowserControl", [_control]]; _self call ["sendEvent", ["myAddon::hydrate", createHashMap, _control]]; }] ]; ``` ## Event Delivery `sendEvent` builds this payload: ```json { "event": "myAddon::event", "data": {} } ``` If the browser control is missing or not ready, the payload is queued on the screen object. When the screen marks ready, `flushPendingEvents` delivers the queue. ## Screen Lifecycle The shared screen object tracks:
| Field | Purpose |
|---|---|
control
|
Active browser control. |
readyState
|
Whether the browser app has sent its ready event. |
pendingEvents
|
Outbound events waiting for a ready browser. |