feat: allow multiple subscriptions to single topic + auth
Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
@@ -26,7 +26,7 @@ export type SignalsApi = {
|
||||
subscribe(
|
||||
onMessage: (message: JsonObject, topic?: string) => void,
|
||||
topic: string,
|
||||
): void;
|
||||
): string;
|
||||
|
||||
unsubscribe(topic: string): void;
|
||||
unsubscribe(subscription: string): void;
|
||||
};
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
import { signalsApiRef } from '../api';
|
||||
import { useApi } from '@backstage/core-plugin-api';
|
||||
import { JsonObject } from '@backstage/types';
|
||||
import { useEffect } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
/** @public */
|
||||
export const useSignalsApi = (
|
||||
@@ -24,13 +24,19 @@ export const useSignalsApi = (
|
||||
onMessage: (message: JsonObject) => void,
|
||||
) => {
|
||||
const signals = useApi(signalsApiRef);
|
||||
const [subscription, setSubscription] = useState<null | string>(null);
|
||||
useEffect(() => {
|
||||
signals.subscribe(onMessage, topic);
|
||||
}, [signals, onMessage, topic]);
|
||||
if (!subscription) {
|
||||
const sub = signals.subscribe(onMessage, topic);
|
||||
setSubscription(sub);
|
||||
}
|
||||
}, [subscription, signals, onMessage, topic]);
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
signals.unsubscribe(topic);
|
||||
if (subscription) {
|
||||
signals.unsubscribe(subscription);
|
||||
}
|
||||
};
|
||||
}, [signals, topic]);
|
||||
}, [subscription, signals, topic]);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user