feat: move all signal handling to backend plugin
Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
@@ -22,10 +22,15 @@ Example of using the hook:
|
||||
```ts
|
||||
import { useSignal } from '@backstage/plugin-signals-react';
|
||||
|
||||
const { lastSignal } = useSignal('myplugin:topic');
|
||||
const { lastSignal } = useSignal('myplugin:channel');
|
||||
|
||||
useEffect(() => {
|
||||
console.log(lastSignal);
|
||||
}, [lastSignal]);
|
||||
```
|
||||
|
||||
Whenever backend publishes new message to the topic `myplugin:topic`, the lastSignal is changed.
|
||||
Whenever backend publishes new message to the channel `myplugin:channel`, the `lastSignal` is changed. The `lastSignal`
|
||||
is always initiated with null value before any messages are received from the backend.
|
||||
|
||||
## Using API directly
|
||||
|
||||
@@ -37,7 +42,7 @@ import { signalsApiRef } from '@backstage/plugin-signals-react';
|
||||
|
||||
const signals = useApi(signalsApiRef);
|
||||
const { unsubscribe } = signals.subscribe(
|
||||
'myplugin:topic',
|
||||
'myplugin:channel',
|
||||
(message: JsonObject) => {
|
||||
console.log(message);
|
||||
},
|
||||
|
||||
@@ -9,7 +9,7 @@ import { JsonObject } from '@backstage/types';
|
||||
// @public (undocumented)
|
||||
export type SignalApi = {
|
||||
subscribe(
|
||||
topic: string,
|
||||
channel: string,
|
||||
onMessage: (message: JsonObject) => void,
|
||||
): {
|
||||
unsubscribe: () => void;
|
||||
@@ -20,7 +20,7 @@ export type SignalApi = {
|
||||
export const signalApiRef: ApiRef<SignalApi>;
|
||||
|
||||
// @public (undocumented)
|
||||
export const useSignal: (topic: string) => {
|
||||
export const useSignal: (channel: string) => {
|
||||
lastSignal: JsonObject | null;
|
||||
};
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ export const signalApiRef = createApiRef<SignalApi>({
|
||||
/** @public */
|
||||
export type SignalApi = {
|
||||
subscribe(
|
||||
topic: string,
|
||||
channel: string,
|
||||
onMessage: (message: JsonObject) => void,
|
||||
): { unsubscribe: () => void };
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ import { JsonObject } from '@backstage/types';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
/** @public */
|
||||
export const useSignal = (topic: string) => {
|
||||
export const useSignal = (channel: string) => {
|
||||
const apiHolder = useApiHolder();
|
||||
// Use apiHolder instead useApi in case signalApi is not available in the
|
||||
// backstage instance this is used
|
||||
@@ -28,7 +28,7 @@ export const useSignal = (topic: string) => {
|
||||
useEffect(() => {
|
||||
let unsub: null | (() => void) = null;
|
||||
if (signals) {
|
||||
const { unsubscribe } = signals.subscribe(topic, (msg: JsonObject) => {
|
||||
const { unsubscribe } = signals.subscribe(channel, (msg: JsonObject) => {
|
||||
setLastSignal(msg);
|
||||
});
|
||||
unsub = unsubscribe;
|
||||
@@ -38,7 +38,7 @@ export const useSignal = (topic: string) => {
|
||||
unsub();
|
||||
}
|
||||
};
|
||||
}, [signals, topic]);
|
||||
}, [signals, channel]);
|
||||
|
||||
return { lastSignal };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user