feat: allow multiple subscriptions to single topic + auth

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2023-12-05 09:01:37 +02:00
parent 5e1a90daa2
commit d05a6f566f
9 changed files with 187 additions and 68 deletions
+2 -2
View File
@@ -11,8 +11,8 @@ export type SignalsApi = {
subscribe(
onMessage: (message: JsonObject, topic?: string) => void,
topic: string,
): void;
unsubscribe(topic: string): void;
): string;
unsubscribe(subscription: string): void;
};
// @public (undocumented)
+2 -2
View File
@@ -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]);
};