diff --git a/projects/step-core/src/lib/client/generated/services/ScreensService.ts b/projects/step-core/src/lib/client/generated/services/ScreensService.ts index 56d23a989..252918c44 100644 --- a/projects/step-core/src/lib/client/generated/services/ScreensService.ts +++ b/projects/step-core/src/lib/client/generated/services/ScreensService.ts @@ -172,10 +172,10 @@ export class ScreensService { /** * @param requestBody - * @returns any default response + * @returns ScreenInput default response * @throws ApiError */ - public saveInput(requestBody?: ScreenInput): Observable { + public saveInput(requestBody?: ScreenInput): Observable { return this.httpRequest.request({ method: 'POST', url: '/screens/input', diff --git a/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.html b/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.html index 2599de126..24f87a9b3 100644 --- a/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.html +++ b/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.html @@ -1,7 +1,7 @@
- {{ dialogData.message }} + {{ dialogData.message }}
diff --git a/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.ts b/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.ts index 9024bc37b..2ef635f98 100644 --- a/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.ts +++ b/projects/step-core/src/lib/modules/basics/components/confirmation-dialog/confirmation-dialog.component.ts @@ -4,6 +4,7 @@ import { AlertType } from '../../types/alert-type.enum'; export interface ConfirmationDialogData { message: string; + alertType?: AlertType; } export type ConfirmationDialogResult = boolean | undefined; @@ -17,7 +18,7 @@ export class ConfirmationDialogComponent { private _dialogRef = inject>(MatDialogRef); readonly dialogData = inject(MAT_DIALOG_DATA); - readonly AlertType = AlertType; + readonly alertType = this.dialogData.alertType ?? AlertType.DANGER; @HostListener('keydown.enter') onSubmit(): void { diff --git a/projects/step-core/src/lib/modules/basics/injectables/dialogs.service.ts b/projects/step-core/src/lib/modules/basics/injectables/dialogs.service.ts index a06e70dbb..e71d9fb11 100644 --- a/projects/step-core/src/lib/modules/basics/injectables/dialogs.service.ts +++ b/projects/step-core/src/lib/modules/basics/injectables/dialogs.service.ts @@ -21,6 +21,7 @@ import { MessagesListDialogData, MessagesListDialogResult, } from '../components/messages-list-dialog/messages-list-dialog.component'; +import { AlertType } from '../types/alert-type.enum'; @Injectable({ providedIn: 'root', @@ -45,7 +46,7 @@ export class DialogsService { return dialogRef.afterClosed().pipe(filter((result) => result !== undefined)) as Observable; } - showWarning(message: string): Observable { + showWarning(message: string, alertType?: AlertType): Observable { const dialogRef = this._matDialog.open< ConfirmationDialogComponent, ConfirmationDialogData, @@ -53,6 +54,7 @@ export class DialogsService { >(ConfirmationDialogComponent, { data: { message, + alertType, }, }); diff --git a/projects/step-core/src/lib/modules/table/services/table-columns-config.provider.ts b/projects/step-core/src/lib/modules/table/services/table-columns-config.provider.ts index 54a30f58c..49ee2d107 100644 --- a/projects/step-core/src/lib/modules/table/services/table-columns-config.provider.ts +++ b/projects/step-core/src/lib/modules/table/services/table-columns-config.provider.ts @@ -1,4 +1,5 @@ import { Provider } from '@angular/core'; +import { TableColumnsDefaultVisibilityService } from './table-columns-default-visibility.service'; export abstract class TableColumnsConfig { readonly entityTableRemoteId!: string; @@ -6,9 +7,14 @@ export abstract class TableColumnsConfig { readonly entityScreenSubPath?: string; readonly entityScreenDefaultVisibleFields?: string[]; readonly customColumnOptions?: string | string[]; + readonly allowDefaultVisibilityConfiguration?: boolean; } -export const tableColumnsConfigProvider = (config: TableColumnsConfig | null): Provider => ({ - provide: TableColumnsConfig, - useValue: config, -}); +export const tableColumnsConfigProvider = (config: TableColumnsConfig | null): Provider => { + TableColumnsDefaultVisibilityService.configureLinkage(config); + + return { + provide: TableColumnsConfig, + useValue: config, + }; +}; diff --git a/projects/step-core/src/lib/modules/table/services/table-columns-default-visibility-confirm.service.ts b/projects/step-core/src/lib/modules/table/services/table-columns-default-visibility-confirm.service.ts new file mode 100644 index 000000000..c550258bb --- /dev/null +++ b/projects/step-core/src/lib/modules/table/services/table-columns-default-visibility-confirm.service.ts @@ -0,0 +1,18 @@ +import { inject, Injectable } from '@angular/core'; +import { map, Observable } from 'rxjs'; +import { ConfirmVisibilityStrategy } from '../types/confirm-visibility-strategy'; +import { ScreenInput } from '../../../client/generated'; +import { AlertType, DialogsService } from '../../basics/step-basics.module'; + +@Injectable({ + providedIn: 'root', +}) +export class TableColumnsDefaultVisibilityConfirmService implements ConfirmVisibilityStrategy { + private _dialogs = inject(DialogsService); + + confirmVisibility(screenInput: ScreenInput): Observable<{ isVisible?: boolean; scope?: string[] }> { + return this._dialogs + .showWarning(`Show the column "${screenInput.input?.label}" in tables?`, AlertType.DEFAULT) + .pipe(map((isVisible) => ({ isVisible }))); + } +} diff --git a/projects/step-core/src/lib/modules/table/services/table-columns-default-visibility.service.ts b/projects/step-core/src/lib/modules/table/services/table-columns-default-visibility.service.ts new file mode 100644 index 000000000..14c6ba2c6 --- /dev/null +++ b/projects/step-core/src/lib/modules/table/services/table-columns-default-visibility.service.ts @@ -0,0 +1,83 @@ +import { inject, Injectable } from '@angular/core'; +import { TableColumnsDefaultVisibilityConfirmService } from './table-columns-default-visibility-confirm.service'; +import { ScreenInput, TableApiWrapperService } from '../../../client/step-client-module'; +import { ConfirmVisibilityStrategy } from '../types/confirm-visibility-strategy'; +import { forkJoin, map, Observable, of, switchMap } from 'rxjs'; +import { TableColumnsConfig } from './table-columns-config.provider'; +import { TableColumnsSettingsFactoryService } from './table-columns-settings-factory.service'; + +@Injectable({ + providedIn: 'root', +}) +export class TableColumnsDefaultVisibilityService { + private static screenTablesLinkageInfo = new Map>(); + + static configureLinkage(config?: TableColumnsConfig | null): void { + if (!config?.entityScreenId || !config.allowDefaultVisibilityConfiguration) { + return; + } + + if (!this.screenTablesLinkageInfo.has(config.entityScreenId)) { + this.screenTablesLinkageInfo.set(config.entityScreenId, new Set([config])); + } else { + this.screenTablesLinkageInfo.get(config.entityScreenId)!.add(config); + } + } + + private _tableApi = inject(TableApiWrapperService); + private _defaultVisibilityConfirmStrategy = inject(TableColumnsDefaultVisibilityConfirmService); + private _columnsSettingsFactory = inject(TableColumnsSettingsFactoryService); + private confirmStrategy: ConfirmVisibilityStrategy = this._defaultVisibilityConfirmStrategy; + + useStrategy(strategy: ConfirmVisibilityStrategy): void { + this.confirmStrategy = strategy; + } + + setupDefaultVisibilityForScreenInputColumn(screenInput: ScreenInput): Observable { + if (!screenInput.screenId) { + return of(undefined); + } + const linkedConfigs = TableColumnsDefaultVisibilityService.screenTablesLinkageInfo.get(screenInput.screenId); + if (!linkedConfigs?.size) { + return of(undefined); + } + + return this.confirmStrategy.confirmVisibility(screenInput).pipe( + switchMap((confirmation) => { + if (!confirmation?.isVisible) { + return of(undefined); + } + + const visibilityUpdateOperations = Array.from(linkedConfigs).map((config) => + this.setDefaultVisibility(config, screenInput, confirmation.scope), + ); + + return forkJoin(visibilityUpdateOperations); + }), + ); + } + + private setDefaultVisibility( + config: TableColumnsConfig, + screenInput: ScreenInput, + scope: string[] = [], + ): Observable { + return this._tableApi.getTableSettings(config.entityTableRemoteId).pipe( + map((settings) => { + settings = settings ?? {}; + settings.columnSettingList = settings.columnSettingList ?? []; + const newColumnSettings = this._columnsSettingsFactory.createScreenInputColumnSettings( + screenInput, + 0, // For columns at zero position, natural table's order will applied + config, + true, + ); + settings.columnSettingList.push(newColumnSettings); + return settings; + }), + switchMap((tableSettings) => { + return this._tableApi.saveTableSettings(config.entityTableRemoteId, { tableSettings, scope }); + }), + ); + } +} diff --git a/projects/step-core/src/lib/modules/table/services/table-columns-settings-factory.service.ts b/projects/step-core/src/lib/modules/table/services/table-columns-settings-factory.service.ts new file mode 100644 index 000000000..ea72d8aca --- /dev/null +++ b/projects/step-core/src/lib/modules/table/services/table-columns-settings-factory.service.ts @@ -0,0 +1,42 @@ +import { Injectable } from '@angular/core'; +import { MatColumnDef } from '@angular/material/table'; +import { ColumnInfo } from '../types/column-info'; +import { ColumnSettings, ScreenInput, ScreenInputColumnSettings } from '../../../client/step-client-module'; +import { CustomCellApplySubPathPipe } from '../pipe/custom-cell-apply-sub-path.pipe'; +import { TableColumnsConfig } from './table-columns-config.provider'; + +@Injectable({ + providedIn: 'root', +}) +export class TableColumnsSettingsFactoryService { + createStandardColumnSettings( + matColDef: MatColumnDef, + position: number, + infoDictionary?: Record, + ): ColumnSettings { + const info = infoDictionary?.[matColDef.name]; + const columnId = info?.columnId ?? matColDef.name; + const visible = info ? !info.isHiddenByDefault : true; + return { + columnId, + position, + visible, + type: 'step.plugins.table.settings.ColumnSettings', + }; + } + + createScreenInputColumnSettings( + screenInput: ScreenInput, + position: number, + config: TableColumnsConfig | undefined | null, + visible: boolean, + ): ScreenInputColumnSettings { + return { + columnId: CustomCellApplySubPathPipe.transform(screenInput.input!.id!, config?.entityScreenSubPath), + position, + visible, + type: 'step.plugins.table.settings.ScreenInputColumnSettings', + screenInput, + }; + } +} diff --git a/projects/step-core/src/lib/modules/table/services/table-columns.service.ts b/projects/step-core/src/lib/modules/table/services/table-columns.service.ts index 2c1323b9a..f1cbb6f4c 100644 --- a/projects/step-core/src/lib/modules/table/services/table-columns.service.ts +++ b/projects/step-core/src/lib/modules/table/services/table-columns.service.ts @@ -1,12 +1,12 @@ import { computed, inject, Injectable, signal } from '@angular/core'; -import { ColumnSettings, ScreenInput, ScreenInputColumnSettings, TableSettings } from '../../../client/generated'; +import { ColumnSettings, TableSettings } from '../../../client/step-client-module'; import { MatColumnDef } from '@angular/material/table'; import { TableColumnsConfig } from './table-columns-config.provider'; import { TableApiWrapperService } from '../../../client/table/step-table-client.module'; import { TableColumnsDefinitionService } from './table-columns-definition.service'; import { map, Observable, of } from 'rxjs'; import { ColumnInfo } from '../types/column-info'; -import { CustomCellApplySubPathPipe } from '../pipe/custom-cell-apply-sub-path.pipe'; +import { TableColumnsSettingsFactoryService } from './table-columns-settings-factory.service'; enum VisibilityState { HIDDEN, @@ -28,6 +28,7 @@ export class TableColumnsService { private _tableApi = inject(TableApiWrapperService); private _columnsConfig = inject(TableColumnsConfig, { optional: true }); private _columnsDefinition = inject(TableColumnsDefinitionService); + private _columnsSettingsFactory = inject(TableColumnsSettingsFactoryService); private defaultVisibleScreenColumns?: Set = !!this._columnsConfig?.entityScreenDefaultVisibleFields ? new Set(this._columnsConfig?.entityScreenDefaultVisibleFields) @@ -147,17 +148,24 @@ export class TableColumnsService { let columnSettingList = mainColumnsDefinitions .reduce((res, col) => [...res, ...col.columnDefinitions], [] as MatColumnDef[]) - .map((col, i) => this.createStandardColumnSettings(col, i, infoDictionary)); + .map((col, i) => this._columnsSettingsFactory.createStandardColumnSettings(col, i, infoDictionary)); const remoteColumns = remoteColumnsDefinitions.map((screenInput, i) => - this.createScreenInputColumnSettings(screenInput, columnSettingList.length + i), + this._columnsSettingsFactory.createScreenInputColumnSettings( + screenInput, + columnSettingList.length + i, + this._columnsConfig, + !!this.defaultVisibleScreenColumns?.has(screenInput.input!.id!), + ), ); columnSettingList = [...columnSettingList, ...remoteColumns]; const actionsColumns = actionColumnsDefinitions .reduce((res, col) => [...res, ...col.columnDefinitions], [] as MatColumnDef[]) - .map((col, i) => this.createStandardColumnSettings(col, columnSettingList.length + i, infoDictionary)); + .map((col, i) => + this._columnsSettingsFactory.createStandardColumnSettings(col, columnSettingList.length + i, infoDictionary), + ); columnSettingList = [...columnSettingList, ...actionsColumns]; @@ -167,32 +175,6 @@ export class TableColumnsService { return { tableSettings, actionColumnsIds }; } - private createStandardColumnSettings( - matColDef: MatColumnDef, - position: number, - infoDictionary?: Record, - ): ColumnSettings { - const info = infoDictionary?.[matColDef.name]; - const columnId = info?.columnId ?? matColDef.name; - const visible = info ? !info.isHiddenByDefault : true; - return { - columnId, - position, - visible, - type: 'step.plugins.table.settings.ColumnSettings', - }; - } - - private createScreenInputColumnSettings(screenInput: ScreenInput, position: number): ScreenInputColumnSettings { - return { - columnId: CustomCellApplySubPathPipe.transform(screenInput.input!.id!, this.entityScreenSubPath), - position, - visible: !!this.defaultVisibleScreenColumns?.has(screenInput.input!.id!), - type: 'step.plugins.table.settings.ScreenInputColumnSettings', - screenInput, - }; - } - private prepareColumns(columns: ColumnSettings[] = [], visibility: VisibilityState): string[] { const cols = columns.filter((col) => (visibility === VisibilityState.VISIBLE ? col.visible : !col.visible)); cols.sort((a, b) => (a.position ?? 0) - (b.position ?? 0)); @@ -222,15 +204,24 @@ export class TableColumnsService { return defaultTableSettings; } - const defaultColumnKeys = new Set((defaultTableSettings.columnSettingList ?? []).map((col) => col.columnId)); + const defaultColumnKeysAndPositions = new Map( + (defaultTableSettings.columnSettingList ?? []).map((col) => [col.columnId, col.position]), + ); const actionColumnKeys = new Set(actionColumnIds); // Remove columns from settings, that was deleted // Also remove action columns from remote settings, because remote settings position might be wrong // in case if new custom columns have been added - remoteTableSettings.columnSettingList = (remoteTableSettings.columnSettingList ?? []).filter( - (col) => defaultColumnKeys.has(col.columnId) && !actionColumnKeys.has(col.columnId!), - ); + remoteTableSettings.columnSettingList = (remoteTableSettings.columnSettingList ?? []) + .filter((col) => defaultColumnKeysAndPositions.has(col.columnId) && !actionColumnKeys.has(col.columnId!)) + .map((col) => { + // Special case to properly initialize newly added default column position + // If it not set, try to get it from default columns. + if (!col.position) { + col.position = defaultColumnKeysAndPositions.get(col.columnId!); + } + return col; + }); // Add new columns const removeColumnsKey = new Set(remoteTableSettings.columnSettingList.map((col) => col.columnId)); diff --git a/projects/step-core/src/lib/modules/table/table.module.ts b/projects/step-core/src/lib/modules/table/table.module.ts index 94e91d330..971bfeea1 100644 --- a/projects/step-core/src/lib/modules/table/table.module.ts +++ b/projects/step-core/src/lib/modules/table/table.module.ts @@ -187,4 +187,6 @@ export * from './shared/search-column-accessor'; export * from './services/table-highlight-item-container.service'; export * from './services/table-columns-config.provider'; export * from './services/table-columns.service'; +export * from './services/table-columns-default-visibility.service'; +export * from './types/confirm-visibility-strategy'; export * from './services/items-per-page.service'; diff --git a/projects/step-core/src/lib/modules/table/types/confirm-visibility-strategy.ts b/projects/step-core/src/lib/modules/table/types/confirm-visibility-strategy.ts new file mode 100644 index 000000000..b6d953588 --- /dev/null +++ b/projects/step-core/src/lib/modules/table/types/confirm-visibility-strategy.ts @@ -0,0 +1,6 @@ +import { ScreenInput } from '../../../client/generated'; +import { Observable } from 'rxjs'; + +export interface ConfirmVisibilityStrategy { + confirmVisibility(screenInput: ScreenInput): Observable<{ isVisible?: boolean; scope?: string[] }>; +} diff --git a/projects/step-core/styles/_core-mixins.scss b/projects/step-core/styles/_core-mixins.scss index 52920996b..bd3ab3208 100644 --- a/projects/step-core/styles/_core-mixins.scss +++ b/projects/step-core/styles/_core-mixins.scss @@ -87,4 +87,3 @@ } } } - diff --git a/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.html b/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.html index 00c0ad8b3..34773e0bc 100644 --- a/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.html +++ b/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.html @@ -1,4 +1,4 @@ - +
@if (screenInput.input; as model) { diff --git a/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.ts b/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.ts index d75e37aa4..e4b361469 100644 --- a/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.ts +++ b/projects/step-frontend/src/lib/modules/admin/components/screen-input-edit-dialog/screen-input-edit-dialog.component.ts @@ -1,11 +1,16 @@ import { Component, DestroyRef, HostBinding, inject } from '@angular/core'; -import { AugmentedScreenService, DialogRouteResult, Input as SInput } from '@exense/step-core'; +import { + AugmentedScreenService, + DialogRouteResult, + Input as SInput, + TableColumnsDefaultVisibilityService, +} from '@exense/step-core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { ScreenInputEditDialogData } from '../../types/screen-input-edit-dialog-data.interface'; import { CUSTOM_UI_COMPONENTS_FORMATTER, EXPRESSION_SCRIPT_FORMATTER } from '../../types/model-formatters'; import { ActivatedRoute } from '@angular/router'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { switchMap } from 'rxjs'; +import { of, switchMap } from 'rxjs'; type InputType = SInput['type']; type DialogRef = MatDialogRef; @@ -21,17 +26,21 @@ export class ScreenInputEditDialogComponent { private _dialogData = inject(MAT_DIALOG_DATA); private _destroyRef = inject(DestroyRef); private _route = inject(ActivatedRoute); + private _tableColumnsDefaultVisibility = inject(TableColumnsDefaultVisibilityService); protected screenInput = this._dialogData.screenInput; - readonly modalTitle = `${!!this.screenInput.id ? 'Edit' : 'New'} Input`; + private isNew = !this.screenInput?.id; + readonly modalTitle = `${this.isNew ? 'New' : 'Edit'} Input`; readonly ALLOWED_TYPES: InputType[] = ['DROPDOWN', 'TEXT', 'CHECKBOX']; protected showAdvanced = false; + protected inProgress = false; readonly customUIComponentsFormatter = CUSTOM_UI_COMPONENTS_FORMATTER; readonly activationExpressionFormatter = EXPRESSION_SCRIPT_FORMATTER; @HostBinding('keydown.enter') save(): void { + this.inProgress = true; this._route.queryParams .pipe( takeUntilDestroyed(this._destroyRef), @@ -39,7 +48,16 @@ export class ScreenInputEditDialogComponent { this.screenInput.position = data['nextIndex']; return this._screenApi.saveInput(this.screenInput); }), + switchMap((savedInput) => { + if (!this.isNew) { + return of(undefined); + } + return this._tableColumnsDefaultVisibility.setupDefaultVisibilityForScreenInputColumn(savedInput); + }), ) - .subscribe(() => this._matDialogRef.close({ isSuccess: true })); + .subscribe({ + next: () => this._matDialogRef.close({ isSuccess: true }), + complete: () => (this.inProgress = false), + }); } } diff --git a/projects/step-frontend/src/lib/modules/execution/components/execution-list/execution-list.component.ts b/projects/step-frontend/src/lib/modules/execution/components/execution-list/execution-list.component.ts index bf4406165..384c92f45 100644 --- a/projects/step-frontend/src/lib/modules/execution/components/execution-list/execution-list.component.ts +++ b/projects/step-frontend/src/lib/modules/execution/components/execution-list/execution-list.component.ts @@ -28,6 +28,7 @@ import { TimeSeriesEntityService } from '../../../timeseries/modules/_common'; entityTableRemoteId: AugmentedExecutionsService.EXECUTIONS_TABLE_ID, entityScreenId: 'executionParameters', entityScreenSubPath: 'executionParameters.customParameters', + allowDefaultVisibilityConfiguration: true, }), tablePersistenceConfigProvider('executionList', STORE_ALL), ...selectionCollectionProvider('id', AutoDeselectStrategy.DESELECT_ON_UNREGISTER), diff --git a/projects/step-frontend/src/lib/modules/function/components/function-list/function-list.component.ts b/projects/step-frontend/src/lib/modules/function/components/function-list/function-list.component.ts index df32d9f01..dadca3562 100644 --- a/projects/step-frontend/src/lib/modules/function/components/function-list/function-list.component.ts +++ b/projects/step-frontend/src/lib/modules/function/components/function-list/function-list.component.ts @@ -25,6 +25,7 @@ import { FunctionConfigurationApiImplService } from '../../injectables/function- entityTableRemoteId: AugmentedKeywordsService.FUNCTIONS_TABLE_ID, entityScreenId: 'keyword', entityScreenDefaultVisibleFields: ['attributes.name'], + allowDefaultVisibilityConfiguration: true, }), tablePersistenceConfigProvider('functionList', STORE_ALL), ...selectionCollectionProvider('id', AutoDeselectStrategy.DESELECT_ON_UNREGISTER), diff --git a/projects/step-frontend/src/lib/modules/plan/components/plan-list/plan-list.component.ts b/projects/step-frontend/src/lib/modules/plan/components/plan-list/plan-list.component.ts index 4c024cffd..150c31a5e 100644 --- a/projects/step-frontend/src/lib/modules/plan/components/plan-list/plan-list.component.ts +++ b/projects/step-frontend/src/lib/modules/plan/components/plan-list/plan-list.component.ts @@ -22,6 +22,7 @@ import { map, of, pipe, switchMap, tap } from 'rxjs'; entityTableRemoteId: AugmentedPlansService.PLANS_TABLE_ID, entityScreenId: 'plan', entityScreenDefaultVisibleFields: ['attributes.name'], + allowDefaultVisibilityConfiguration: true, }), tablePersistenceConfigProvider('planList', STORE_ALL), ...selectionCollectionProvider('id', AutoDeselectStrategy.DESELECT_ON_UNREGISTER), diff --git a/projects/step-frontend/src/lib/modules/scheduler/components/scheduled-task-list/scheduled-task-list.component.ts b/projects/step-frontend/src/lib/modules/scheduler/components/scheduled-task-list/scheduled-task-list.component.ts index c50e5669b..d968bd404 100644 --- a/projects/step-frontend/src/lib/modules/scheduler/components/scheduled-task-list/scheduled-task-list.component.ts +++ b/projects/step-frontend/src/lib/modules/scheduler/components/scheduled-task-list/scheduled-task-list.component.ts @@ -35,6 +35,7 @@ enum ActiveLabels { entityTableRemoteId: AugmentedSchedulerService.TASKS_TABLE_ID, entityScreenId: 'executionParameters', entityScreenSubPath: 'executionsParameters.customParameters', + allowDefaultVisibilityConfiguration: true, }), tablePersistenceConfigProvider('scheduledTaskList', STORE_ALL), ...selectionCollectionProvider('id', AutoDeselectStrategy.DESELECT_ON_UNREGISTER),