Merge pull request #22529 from drodil/signals_improvements

fix: signal disconnect loop on server start
This commit is contained in:
Patrik Oldsberg
2024-02-01 20:49:29 +01:00
committed by GitHub
18 changed files with 126 additions and 46 deletions
+11 -5
View File
@@ -7,21 +7,27 @@ import { ApiRef } from '@backstage/core-plugin-api';
import { JsonObject } from '@backstage/types';
// @public (undocumented)
export type SignalApi = {
export interface SignalApi {
// (undocumented)
subscribe(
channel: string,
onMessage: (message: JsonObject) => void,
): {
unsubscribe: () => void;
};
};
): SignalSubscriber;
}
// @public (undocumented)
export const signalApiRef: ApiRef<SignalApi>;
// @public (undocumented)
export interface SignalSubscriber {
// (undocumented)
unsubscribe(): void;
}
// @public (undocumented)
export const useSignal: (channel: string) => {
lastSignal: JsonObject | null;
isSignalsAvailable: boolean;
};
// (No @packageDocumentation comment for this package)
+8 -3
View File
@@ -22,9 +22,14 @@ export const signalApiRef = createApiRef<SignalApi>({
});
/** @public */
export type SignalApi = {
export interface SignalSubscriber {
unsubscribe(): void;
}
/** @public */
export interface SignalApi {
subscribe(
channel: string,
onMessage: (message: JsonObject) => void,
): { unsubscribe: () => void };
};
): SignalSubscriber;
}
+5 -2
View File
@@ -16,7 +16,7 @@
import { signalApiRef } from '../api';
import { useApiHolder } from '@backstage/core-plugin-api';
import { JsonObject } from '@backstage/types';
import { useEffect, useState } from 'react';
import { useEffect, useMemo, useState } from 'react';
/** @public */
export const useSignal = (channel: string) => {
@@ -40,5 +40,8 @@ export const useSignal = (channel: string) => {
};
}, [signals, channel]);
return { lastSignal };
// Can be used to fallback (for example to long polling) if signals are not available in the system
const isSignalsAvailable = useMemo(() => !signals, [signals]);
return { lastSignal, isSignalsAvailable };
};