The screen logger component captures and displays request/response data exchanged between web and native apps.
# Install
```json
npm install @egym/mwa-logger --save
```
# Components:
##
responsible for collection of different log messages and displaying them.
```ts
type Props = {
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
wrapperStyle?: CSSProperties;
buttonStyle?: CSSProperties;
};
```
Place it at the top level of your app tree, prefferably outside component. See example:
```tsx
const App: React.FC = () => {
const [showLogger] = useStore(getShowLoggerSelector);
return (
}>
{showLogger && }
}>
);
};
```
After you add component you will see the debug button on the screen, click it to see messages:
| 1 | 2 |
| --- | --- |
| | |
##
catches errors anywhere in the child component tree, log those errors as WSOD message in the dev tools window, and display a fallback UI instead of the component tree that crashed. See example:
```tsx
const App: React.FC = () => {
const [showLogger] = useStore(getShowLoggerSelector);
return (
}>
{showLogger && }
}>
);
};
```
img
# Log functions:
## logHttpRequest, logHttpResponse
Should be used in pair to display http request and it's corresponding response, provided requestId will join them in one group.
```ts
declare const logHttpRequest: (method: string, url: string, requestId: string | number, payload?: any) => void;
declare const logHttpResponse: (method: string, url: string, requestId: string | number, response?: any) => void;
```
See example:
```ts
try {
const headers = await createHeaders(baseBackendUrl);
logHttpRequest(method, urlResult, String(requestId), {
payload: options?.payload,
headers,
});
const response = await CapacitorHttp.request({
method,
url: urlResult,
data: options?.payload,
responseType: 'json',
headers,
});
return await new Promise((resolve, reject) => {
if (response.status >= 400 && response.status < 600) {
reject(response);
} else {
logHttpResponse(method, urlResult, requestId, response);
resolve(response);
}
});
} catch (error) {
logHttpResponse(method, urlResult, requestId, error);
return Promise.reject(error);
}
```
img
## logDebug
Log any random message
```ts
declare const logDebug: (text: string, data?: any) => void;
```
See example:
```ts
logDebug('initialContext', initialContext);
```
img
## logPortalsRequest, logPortalsResponse
Log portals pub/sub messages
```ts
declare const logPortalsRequest: (topic: string, data?: any) => void;
declare const logPortalsResponse: (topic: string, data?: any) => void;
```
It is recommended to wrap the `Portals.publish` call with a custom implementation that includes a log request, so this way every publish event is captured and displayed in the logger window:
```ts
export const portalsPublish: PortalsPlugin['publish'] = async (message) => {
logPortalsRequest(`${message.topic} ${message.data.type}`, message.data);
await Portals.publish(message);
};
```
Same for `Portals.subscribe`:
```ts
export const portalsSubscribe = async (
options: SubscribeOptions,
callback: SubscriptionCallback
): Promise => {
return Portals.subscribe(options, (...args) => {
logPortalsResponse(options.topic, {
...options,
...args,
});
callback(...args);
});
};
```
img
## logWebWitals
```ts
export declare const logWebWitals: (metric: any) => void;
```
Pass this function to the `reportWebVitals` to log results of performance metrics src/index.tsx#77:
```ts
reportWebVitals(logWebWitals);
```
img