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
|
advanced_camera_card_action: recordings
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## `reload`
|
||||||
|
|
||||||
|
Reload the entire dashboard.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
action: custom:advanced-camera-card-action
|
||||||
|
advanced_camera_card_action: reload
|
||||||
|
```
|
||||||
|
|
||||||
## `screenshot`
|
## `screenshot`
|
||||||
|
|
||||||
Take a screenshot of the selected media (e.g. a still from a video).
|
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
|
- action: custom:advanced-camera-card-action
|
||||||
advanced_camera_card_action: folders
|
advanced_camera_card_action: folders
|
||||||
folder: my-folder
|
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 { PTZControlsAction } from './actions/ptz-controls';
|
||||||
import { PTZDigitalAction } from './actions/ptz-digital';
|
import { PTZDigitalAction } from './actions/ptz-digital';
|
||||||
import { PTZMultiAction } from './actions/ptz-multi';
|
import { PTZMultiAction } from './actions/ptz-multi';
|
||||||
|
import { ReloadAction } from './actions/reload';
|
||||||
import { ScreenshotAction } from './actions/screenshot';
|
import { ScreenshotAction } from './actions/screenshot';
|
||||||
import { SleepAction } from './actions/sleep';
|
import { SleepAction } from './actions/sleep';
|
||||||
import { StatusBarAction } from './actions/status-bar';
|
import { StatusBarAction } from './actions/status-bar';
|
||||||
@@ -150,6 +151,8 @@ export class ActionFactory {
|
|||||||
return new LogAction(context, action, options?.config);
|
return new LogAction(context, action, options?.config);
|
||||||
case 'status_bar':
|
case 'status_bar':
|
||||||
return new StatusBarAction(context, action, options?.config);
|
return new StatusBarAction(context, action, options?.config);
|
||||||
|
case 'reload':
|
||||||
|
return new ReloadAction(context, action, options?.config);
|
||||||
case INTERNAL_CALLBACK_ACTION:
|
case INTERNAL_CALLBACK_ACTION:
|
||||||
return new InternalCallbackAction(context, action, options?.config);
|
return new InternalCallbackAction(context, action, options?.config);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const GENERAL_ACTIONS = [
|
|||||||
'mute',
|
'mute',
|
||||||
'pause',
|
'pause',
|
||||||
'play',
|
'play',
|
||||||
|
'reload',
|
||||||
'screenshot',
|
'screenshot',
|
||||||
'unmute',
|
'unmute',
|
||||||
] as const;
|
] 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 { PTZControlsAction } from '../../../src/card-controller/actions/actions/ptz-controls';
|
||||||
import { PTZDigitalAction } from '../../../src/card-controller/actions/actions/ptz-digital';
|
import { PTZDigitalAction } from '../../../src/card-controller/actions/actions/ptz-digital';
|
||||||
import { PTZMultiAction } from '../../../src/card-controller/actions/actions/ptz-multi';
|
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 { ScreenshotAction } from '../../../src/card-controller/actions/actions/screenshot';
|
||||||
import { SleepAction } from '../../../src/card-controller/actions/actions/sleep';
|
import { SleepAction } from '../../../src/card-controller/actions/actions/sleep';
|
||||||
import { StatusBarAction } from '../../../src/card-controller/actions/actions/status-bar';
|
import { StatusBarAction } from '../../../src/card-controller/actions/actions/status-bar';
|
||||||
@@ -186,6 +187,7 @@ describe('ActionFactory', () => {
|
|||||||
},
|
},
|
||||||
InternalCallbackAction,
|
InternalCallbackAction,
|
||||||
],
|
],
|
||||||
|
[{ advanced_camera_card_action: 'reload' as const }, ReloadAction],
|
||||||
])(
|
])(
|
||||||
'advanced_camera_card_action: $advanced_camera_card_action',
|
'advanced_camera_card_action: $advanced_camera_card_action',
|
||||||
(action: Partial<ActionConfig>, classObject: object) => {
|
(action: Partial<ActionConfig>, classObject: object) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user