Clearer about advertiser repeat button

This commit is contained in:
Jack Kingsman
2026-03-10 15:49:28 -07:00
parent 42e9628d98
commit c9ede1f71f
5 changed files with 49 additions and 13 deletions
@@ -56,7 +56,8 @@ export function RepeaterDashboard({
refreshPane,
loadAll,
sendConsoleCommand,
sendAdvert,
sendZeroHopAdvert,
sendFloodAdvert,
rebootRepeater,
syncClock,
} = useRepeaterDashboard(conversation);
@@ -200,7 +201,8 @@ export function RepeaterDashboard({
disabled={anyLoading}
/>
<ActionsPane
onSendAdvert={sendAdvert}
onSendZeroHopAdvert={sendZeroHopAdvert}
onSendFloodAdvert={sendFloodAdvert}
onSyncClock={syncClock}
onReboot={rebootRepeater}
consoleLoading={consoleLoading}
@@ -2,12 +2,14 @@ import { useState, useCallback, useEffect } from 'react';
import { Button } from '../ui/button';
export function ActionsPane({
onSendAdvert,
onSendZeroHopAdvert,
onSendFloodAdvert,
onSyncClock,
onReboot,
consoleLoading,
}: {
onSendAdvert: () => void;
onSendZeroHopAdvert: () => void;
onSendFloodAdvert: () => void;
onSyncClock: () => void;
onReboot: () => void;
consoleLoading: boolean;
@@ -36,8 +38,16 @@ export function ActionsPane({
<h3 className="text-sm font-medium">Actions</h3>
</div>
<div className="p-3 flex flex-wrap gap-2">
<Button variant="outline" size="sm" onClick={onSendAdvert} disabled={consoleLoading}>
Send Advert
<Button variant="outline" size="sm" onClick={onSendZeroHopAdvert} disabled={consoleLoading}>
Zero Hop Advert
</Button>
<Button
variant="destructive"
size="sm"
onClick={onSendFloodAdvert}
disabled={consoleLoading}
>
Flood Advert
</Button>
<Button variant="outline" size="sm" onClick={onSyncClock} disabled={consoleLoading}>
Sync Clock
+9 -3
View File
@@ -164,7 +164,8 @@ export interface UseRepeaterDashboardResult {
refreshPane: (pane: PaneName) => Promise<void>;
loadAll: () => Promise<void>;
sendConsoleCommand: (command: string) => Promise<void>;
sendAdvert: () => Promise<void>;
sendZeroHopAdvert: () => Promise<void>;
sendFloodAdvert: () => Promise<void>;
rebootRepeater: () => Promise<void>;
syncClock: () => Promise<void>;
}
@@ -370,7 +371,11 @@ export function useRepeaterDashboard(
[getPublicKey]
);
const sendAdvert = useCallback(async () => {
const sendZeroHopAdvert = useCallback(async () => {
await sendConsoleCommand('advert.zerohop');
}, [sendConsoleCommand]);
const sendFloodAdvert = useCallback(async () => {
await sendConsoleCommand('advert');
}, [sendConsoleCommand]);
@@ -396,7 +401,8 @@ export function useRepeaterDashboard(
refreshPane,
loadAll,
sendConsoleCommand,
sendAdvert,
sendZeroHopAdvert,
sendFloodAdvert,
rebootRepeater,
syncClock,
};
+4 -2
View File
@@ -38,7 +38,8 @@ const mockHook: {
refreshPane: vi.fn(),
loadAll: vi.fn(),
sendConsoleCommand: vi.fn(),
sendAdvert: vi.fn(),
sendZeroHopAdvert: vi.fn(),
sendFloodAdvert: vi.fn(),
rebootRepeater: vi.fn(),
syncClock: vi.fn(),
};
@@ -263,7 +264,8 @@ describe('RepeaterDashboard', () => {
render(<RepeaterDashboard {...defaultProps} />);
expect(screen.getByText('Send Advert')).toBeInTheDocument();
expect(screen.getByText('Zero Hop Advert')).toBeInTheDocument();
expect(screen.getByText('Flood Advert')).toBeInTheDocument();
expect(screen.getByText('Sync Clock')).toBeInTheDocument();
expect(screen.getByText('Reboot')).toBeInTheDocument();
});
+18 -2
View File
@@ -216,7 +216,23 @@ describe('useRepeaterDashboard', () => {
expect(result.current.consoleLoading).toBe(false);
});
it('sendAdvert sends "advert" command', async () => {
it('sendZeroHopAdvert sends "advert.zerohop" command', async () => {
mockApi.sendRepeaterCommand.mockResolvedValueOnce({
command: 'advert.zerohop',
response: 'ok',
sender_timestamp: 1000,
});
const { result } = renderHook(() => useRepeaterDashboard(repeaterConversation));
await act(async () => {
await result.current.sendZeroHopAdvert();
});
expect(mockApi.sendRepeaterCommand).toHaveBeenCalledWith(REPEATER_KEY, 'advert.zerohop');
});
it('sendFloodAdvert sends "advert" command', async () => {
mockApi.sendRepeaterCommand.mockResolvedValueOnce({
command: 'advert',
response: 'ok',
@@ -226,7 +242,7 @@ describe('useRepeaterDashboard', () => {
const { result } = renderHook(() => useRepeaterDashboard(repeaterConversation));
await act(async () => {
await result.current.sendAdvert();
await result.current.sendFloodAdvert();
});
expect(mockApi.sendRepeaterCommand).toHaveBeenCalledWith(REPEATER_KEY, 'advert');