feat: Add custom reload action to reload dashboard (#2217)
- Closes: #2215 --------- Co-authored-by: Felipe Santos <felipecassiors@gmail.com>
This commit is contained in:
co-authored by
Felipe Santos
parent
7edaac079e
commit
1f41781a84
@@ -434,6 +434,15 @@ action: custom:advanced-camera-card-action
|
||||
advanced_camera_card_action: recordings
|
||||
```
|
||||
|
||||
## `reload`
|
||||
|
||||
Reload the entire dashboard.
|
||||
|
||||
```yaml
|
||||
action: custom:advanced-camera-card-action
|
||||
advanced_camera_card_action: reload
|
||||
```
|
||||
|
||||
## `screenshot`
|
||||
|
||||
Take a screenshot of the selected media (e.g. a still from a video).
|
||||
@@ -854,4 +863,10 @@ elements:
|
||||
- action: custom:advanced-camera-card-action
|
||||
advanced_camera_card_action: folders
|
||||
folder: my-folder
|
||||
- type: custom:advanced-camera-card-menu-icon
|
||||
icon: mdi:reload
|
||||
title: Reload
|
||||
tap_action:
|
||||
- action: custom:advanced-camera-card-action
|
||||
advanced_camera_card_action: reload
|
||||
```
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import { GeneralActionConfig } from '../../../config/schema/actions/custom/general';
|
||||
import { CardActionsAPI } from '../../types';
|
||||
import { AdvancedCameraCardAction } from './base';
|
||||
|
||||
export class ReloadAction extends AdvancedCameraCardAction<GeneralActionConfig> {
|
||||
public async execute(api: CardActionsAPI): Promise<void> {
|
||||
await super.execute(api);
|
||||
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ import { PTZAction } from './actions/ptz';
|
||||
import { PTZControlsAction } from './actions/ptz-controls';
|
||||
import { PTZDigitalAction } from './actions/ptz-digital';
|
||||
import { PTZMultiAction } from './actions/ptz-multi';
|
||||
import { ReloadAction } from './actions/reload';
|
||||
import { ScreenshotAction } from './actions/screenshot';
|
||||
import { SleepAction } from './actions/sleep';
|
||||
import { StatusBarAction } from './actions/status-bar';
|
||||
@@ -150,6 +151,8 @@ export class ActionFactory {
|
||||
return new LogAction(context, action, options?.config);
|
||||
case 'status_bar':
|
||||
return new StatusBarAction(context, action, options?.config);
|
||||
case 'reload':
|
||||
return new ReloadAction(context, action, options?.config);
|
||||
case INTERNAL_CALLBACK_ACTION:
|
||||
return new InternalCallbackAction(context, action, options?.config);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ const GENERAL_ACTIONS = [
|
||||
'mute',
|
||||
'pause',
|
||||
'play',
|
||||
'reload',
|
||||
'screenshot',
|
||||
'unmute',
|
||||
] as const;
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest';
|
||||
import { mock } from 'vitest-mock-extended';
|
||||
import { ReloadAction } from '../../../../src/card-controller/actions/actions/reload';
|
||||
import { createCardAPI } from '../../../test-utils';
|
||||
|
||||
// @vitest-environment jsdom
|
||||
describe('should handle reload action', async () => {
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
it('should handle reload action', async () => {
|
||||
const api = createCardAPI();
|
||||
const action = new ReloadAction(
|
||||
{},
|
||||
{
|
||||
action: 'fire-dom-event',
|
||||
advanced_camera_card_action: 'reload',
|
||||
},
|
||||
);
|
||||
|
||||
const location: Location & { origin: string } = mock<Location>();
|
||||
vi.spyOn(window, 'location', 'get').mockReturnValue(location);
|
||||
|
||||
await action.execute(api);
|
||||
|
||||
expect(location.reload).toBeCalledTimes(1);
|
||||
});
|
||||
});
|
||||
@@ -27,6 +27,7 @@ import { PTZAction } from '../../../src/card-controller/actions/actions/ptz';
|
||||
import { PTZControlsAction } from '../../../src/card-controller/actions/actions/ptz-controls';
|
||||
import { PTZDigitalAction } from '../../../src/card-controller/actions/actions/ptz-digital';
|
||||
import { PTZMultiAction } from '../../../src/card-controller/actions/actions/ptz-multi';
|
||||
import { ReloadAction } from '../../../src/card-controller/actions/actions/reload';
|
||||
import { ScreenshotAction } from '../../../src/card-controller/actions/actions/screenshot';
|
||||
import { SleepAction } from '../../../src/card-controller/actions/actions/sleep';
|
||||
import { StatusBarAction } from '../../../src/card-controller/actions/actions/status-bar';
|
||||
@@ -186,6 +187,7 @@ describe('ActionFactory', () => {
|
||||
},
|
||||
InternalCallbackAction,
|
||||
],
|
||||
[{ advanced_camera_card_action: 'reload' as const }, ReloadAction],
|
||||
])(
|
||||
'advanced_camera_card_action: $advanced_camera_card_action',
|
||||
(action: Partial<ActionConfig>, classObject: object) => {
|
||||
|
||||
Reference in New Issue
Block a user