From 29442d7e5d08bdd2e0366cc1369c3bee17f21086 Mon Sep 17 00:00:00 2001 From: dvladir Date: Thu, 23 May 2024 16:30:00 +0300 Subject: [PATCH 1/4] SED-3133 Add dialog to manage visibility of property --- .../confirmation-dialog.component.html | 2 +- .../confirmation-dialog.component.ts | 3 +- .../basics/injectables/dialogs.service.ts | 4 +- .../services/table-columns-config.provider.ts | 14 +++- ...umns-default-visibility-confirm.service.ts | 18 ++++ ...able-columns-default-visibility.service.ts | 83 +++++++++++++++++++ .../table-columns-settings-factory.service.ts | 42 ++++++++++ .../table/services/table-columns.service.ts | 61 ++++++-------- .../src/lib/modules/table/table.module.ts | 2 + .../types/confirm-visibility-strategy.ts | 6 ++ .../screen-input-edit-dialog.component.html | 2 +- .../screen-input-edit-dialog.component.ts | 29 ++++++- .../execution-list.component.ts | 1 + .../function-list/function-list.component.ts | 1 + .../plan-list/plan-list.component.ts | 1 + .../scheduled-task-list.component.ts | 1 + 16 files changed, 224 insertions(+), 46 deletions(-) create mode 100644 projects/step-core/src/lib/modules/table/services/table-columns-default-visibility-confirm.service.ts create mode 100644 projects/step-core/src/lib/modules/table/services/table-columns-default-visibility.service.ts create mode 100644 projects/step-core/src/lib/modules/table/services/table-columns-settings-factory.service.ts create mode 100644 projects/step-core/src/lib/modules/table/types/confirm-visibility-strategy.ts 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 2599de1264..24f87a9b3c 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 9024bc37b6..2ef635f98c 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 a06e70dbbd..e71d9fb11f 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 54a30f58c7..49ee2d107f 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 0000000000..3b36e9c450 --- /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(`Should the column "${screenInput.input?.label}" be visible by default?`, 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 0000000000..14c6ba2c62 --- /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 0000000000..ea72d8acab --- /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 2c1323b9aa..f1cbb6f4cf 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 e7eefcd8ff..8db733d4f4 100644 --- a/projects/step-core/src/lib/modules/table/table.module.ts +++ b/projects/step-core/src/lib/modules/table/table.module.ts @@ -187,3 +187,5 @@ 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'; 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 0000000000..b6d9535884 --- /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-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 00c0ad8b3e..34773e0bce 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 61c97a2dba..bfa0ac6f38 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,8 +1,14 @@ import { Component, 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 { of, switchMap } from 'rxjs'; type InputType = SInput['type']; type DialogRef = MatDialogRef; @@ -16,17 +22,34 @@ export class ScreenInputEditDialogComponent { private _screenApi = inject(AugmentedScreenService); private _matDialogRef = inject(MatDialogRef); private _dialogData = inject(MAT_DIALOG_DATA); + 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._screenApi.saveInput(this.screenInput).subscribe(() => this._matDialogRef.close({ isSuccess: true })); + this.inProgress = true; + this._screenApi + .saveInput(this.screenInput) + .pipe( + switchMap(() => { + if (!this.isNew) { + return of(undefined); + } + return this._tableColumnsDefaultVisibility.setupDefaultVisibilityForScreenInputColumn(this.screenInput); + }), + ) + .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 503ab590ee..5a065a9951 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 @@ -27,6 +27,7 @@ import { ExecutionListFilterInterceptorService } from '../../services/execution- 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 df32d9f01c..dadca3562a 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 4c024cffd8..150c31a5eb 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 f42dfbcdcd..09be54b290 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 @@ -30,6 +30,7 @@ type StatusItem = KeyValue; entityTableRemoteId: AugmentedSchedulerService.TASKS_TABLE_ID, entityScreenId: 'executionParameters', entityScreenSubPath: 'executionsParameters.customParameters', + allowDefaultVisibilityConfiguration: true, }), tablePersistenceConfigProvider('scheduledTaskList', STORE_ALL), ...selectionCollectionProvider('id', AutoDeselectStrategy.DESELECT_ON_UNREGISTER), From 7d138d0b4d9bf10b87eca4ef84a12abeaa6111e9 Mon Sep 17 00:00:00 2001 From: dvladir Date: Thu, 23 May 2024 17:00:32 +0300 Subject: [PATCH 2/4] SED-3133 Add dialog to manage visibility of property --- .../src/lib/client/generated/services/ScreensService.ts | 4 ++-- .../screen-input-edit-dialog.component.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 67f93158b7..1ce51ccf2a 100644 --- a/projects/step-core/src/lib/client/generated/services/ScreensService.ts +++ b/projects/step-core/src/lib/client/generated/services/ScreensService.ts @@ -139,10 +139,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-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 bfa0ac6f38..b40d44e670 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 @@ -40,11 +40,11 @@ export class ScreenInputEditDialogComponent { this._screenApi .saveInput(this.screenInput) .pipe( - switchMap(() => { + switchMap((savedInput) => { if (!this.isNew) { return of(undefined); } - return this._tableColumnsDefaultVisibility.setupDefaultVisibilityForScreenInputColumn(this.screenInput); + return this._tableColumnsDefaultVisibility.setupDefaultVisibilityForScreenInputColumn(savedInput); }), ) .subscribe({ From e27fb1081a43fc367db7d3b5d6fca71b778c2819 Mon Sep 17 00:00:00 2001 From: dvladir Date: Thu, 23 May 2024 17:24:30 +0300 Subject: [PATCH 3/4] SED-3133 Add dialog to manage visibility of property From 4c6d5c7ea84ecb5b75b00cb68748726735a9b868 Mon Sep 17 00:00:00 2001 From: dvladir Date: Fri, 24 May 2024 16:23:23 +0300 Subject: [PATCH 4/4] SED-3133 Add dialog to manage visibility of property --- .../table-columns-default-visibility-confirm.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 3b36e9c450..c550258bbd 100644 --- 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 @@ -12,7 +12,7 @@ export class TableColumnsDefaultVisibilityConfirmService implements ConfirmVisib confirmVisibility(screenInput: ScreenInput): Observable<{ isVisible?: boolean; scope?: string[] }> { return this._dialogs - .showWarning(`Should the column "${screenInput.input?.label}" be visible by default?`, AlertType.DEFAULT) + .showWarning(`Show the column "${screenInput.input?.label}" in tables?`, AlertType.DEFAULT) .pipe(map((isVisible) => ({ isVisible }))); } }