Merge pull request #22529 from drodil/signals_improvements
fix: signal disconnect loop on server start
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user