@@ -1,28 +0,0 @@
|
||||
import { FoldersViewActionConfig } from '../../../config/schema/actions/custom/folders-view';
|
||||
import { FolderViewQuery } from '../../../view/query';
|
||||
import { CardActionsAPI } from '../../types';
|
||||
import { AdvancedCameraCardAction } from './base';
|
||||
|
||||
export class FoldersViewAction extends AdvancedCameraCardAction<FoldersViewActionConfig> {
|
||||
public async execute(api: CardActionsAPI): Promise<void> {
|
||||
await super.execute(api);
|
||||
|
||||
const folder = api.getFoldersManager().getFolder(this._action.folder);
|
||||
if (!folder) {
|
||||
return;
|
||||
}
|
||||
|
||||
const query = api.getFoldersManager().generateDefaultFolderQuery(folder);
|
||||
if (!query) {
|
||||
return;
|
||||
}
|
||||
|
||||
await api.getViewManager().setViewByParametersWithExistingQuery({
|
||||
params: {
|
||||
// Supports both 'folder' and 'folders' views.
|
||||
view: this._action.advanced_camera_card_action,
|
||||
query: new FolderViewQuery(query),
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,11 @@ export class ViewAction extends AdvancedCameraCardAction<ViewActionConfig> {
|
||||
params: {
|
||||
view: this._action.advanced_camera_card_action,
|
||||
},
|
||||
...(this._action.folder && {
|
||||
queryExecutorOptions: {
|
||||
folder: this._action.folder,
|
||||
},
|
||||
}),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import { DefaultAction } from './actions/default';
|
||||
import { DisplayModeSelectAction } from './actions/display-mode-select';
|
||||
import { DownloadAction } from './actions/download';
|
||||
import { ExpandAction } from './actions/expand';
|
||||
import { FoldersViewAction } from './actions/folders-view';
|
||||
import { FullscreenAction } from './actions/fullscreen';
|
||||
import { InternalCallbackAction } from './actions/internal-callback';
|
||||
import { LogAction } from './actions/log';
|
||||
@@ -86,6 +85,8 @@ export class ActionFactory {
|
||||
return new DefaultAction(context, action, options?.config);
|
||||
case 'clip':
|
||||
case 'clips':
|
||||
case 'folder':
|
||||
case 'folders':
|
||||
case 'image':
|
||||
case 'live':
|
||||
case 'recording':
|
||||
@@ -151,9 +152,6 @@ export class ActionFactory {
|
||||
return new StatusBarAction(context, action, options?.config);
|
||||
case INTERNAL_CALLBACK_ACTION:
|
||||
return new InternalCallbackAction(context, action, options?.config);
|
||||
case 'folder':
|
||||
case 'folders':
|
||||
return new FoldersViewAction(context, action, options?.config);
|
||||
}
|
||||
|
||||
/* istanbul ignore next: this path cannot be reached -- @preserve */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
import { ConditionState } from '../../conditions/types';
|
||||
import { FolderConfig } from '../../config/schema/folders';
|
||||
import { FolderConfig, FolderConfigWithoutID } from '../../config/schema/folders';
|
||||
import { localize } from '../../localize/localize';
|
||||
import { Endpoint } from '../../types';
|
||||
import { ViewItem } from '../../view/item';
|
||||
@@ -23,7 +23,7 @@ export class FoldersManager {
|
||||
this._folders.clear();
|
||||
}
|
||||
|
||||
public addFolders(folders: FolderConfig[]): void {
|
||||
public addFolders(folders: FolderConfigWithoutID[]): void {
|
||||
for (const folder of folders) {
|
||||
const folderNumber = this._folders.size;
|
||||
const id = folder.id ?? `folder/${folderNumber.toString()}`;
|
||||
|
||||
@@ -140,13 +140,20 @@ export class QueryExecutor {
|
||||
return queryResults;
|
||||
}
|
||||
|
||||
public async executeDefaultFolderQuery(
|
||||
public async executeFolderQuery(
|
||||
executorOptions?: QueryExecutorOptions,
|
||||
): Promise<QueryExecutorResult | null> {
|
||||
const query = this._api.getFoldersManager().generateDefaultFolderQuery();
|
||||
return query
|
||||
? this._executeFolderQuery(new FolderViewQuery(query), executorOptions)
|
||||
: null;
|
||||
const folder = this._api.getFoldersManager().getFolder(executorOptions?.folder);
|
||||
if (!folder) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const query = this._api.getFoldersManager().generateDefaultFolderQuery(folder);
|
||||
if (!query) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return this._executeFolderQuery(new FolderViewQuery(query), executorOptions);
|
||||
}
|
||||
|
||||
private async _executeFolderQuery(
|
||||
|
||||
@@ -22,6 +22,7 @@ export interface QueryExecutorOptions {
|
||||
id?: string;
|
||||
func?: (media: ViewItem) => boolean;
|
||||
};
|
||||
folder?: string;
|
||||
rejectResults?: (results: QueryResults) => boolean;
|
||||
useCache?: boolean;
|
||||
}
|
||||
|
||||
@@ -86,8 +86,7 @@ export class ViewQueryExecutor {
|
||||
};
|
||||
|
||||
const executeFolderQuery = async (): Promise<ViewModifier[]> => {
|
||||
const results =
|
||||
await this._executor.executeDefaultFolderQuery(queryExecutorOptions);
|
||||
const results = await this._executor.executeFolderQuery(queryExecutorOptions);
|
||||
return results ? [new SetQueryViewModifier(results)] : [];
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user