mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-08-29 04:47:10 +08:00
Update sidebar chart on deleting records using bulk action menu in ListView
This commit is contained in:
parent
707054100c
commit
1d9a55aa56
9 changed files with 45 additions and 9 deletions
|
@ -32,7 +32,7 @@ export interface WidgetMetadata {
|
|||
labelKey?: string;
|
||||
options: WidgetOptionMap;
|
||||
reload$?: Observable<boolean>;
|
||||
refreshOnRecordUpdate?: boolean;
|
||||
refreshOn?: string;
|
||||
}
|
||||
|
||||
export interface WidgetOptionMap {
|
||||
|
|
|
@ -40,9 +40,13 @@ export class ListViewSidebarWidgetAdapter {
|
|||
|
||||
if (metadata.sidebarWidgets && metadata.sidebarWidgets.length) {
|
||||
metadata.sidebarWidgets.forEach(widget => {
|
||||
if (widget && widget.refreshOnRecordUpdate) {
|
||||
widget.reload$ = this.store.criteria$.pipe(map(() => true));
|
||||
|
||||
if (widget && widget.refreshOn === 'data-update') {
|
||||
widget.reload$ = this.store.dataSetUpdate$.pipe(map(() => true));
|
||||
} else if (widget && widget.refreshOn === 'data-reload') {
|
||||
widget.reload$ = this.store.records$.pipe(map(() => true));
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -113,6 +113,8 @@ export class ListViewStore extends ViewStore implements StateStore,
|
|||
showSidebarWidgets$: Observable<boolean>;
|
||||
displayFilters$: Observable<boolean>;
|
||||
recordList: RecordListStore;
|
||||
dataUpdate$: Observable<boolean>;
|
||||
dataSetUpdate$: Observable<boolean>;
|
||||
|
||||
/**
|
||||
* View-model that resolves once all the data is ready (or updated).
|
||||
|
@ -126,6 +128,7 @@ export class ListViewStore extends ViewStore implements StateStore,
|
|||
protected internalState: ListViewState = deepClone(initialState);
|
||||
protected store = new BehaviorSubject<ListViewState>(this.internalState);
|
||||
protected state$ = this.store.asObservable();
|
||||
protected dataUpdateState: BehaviorSubject<boolean>;
|
||||
protected subs: Subscription[] = [];
|
||||
|
||||
constructor(
|
||||
|
@ -191,6 +194,9 @@ export class ListViewStore extends ViewStore implements StateStore,
|
|||
}));
|
||||
this.columns = new BehaviorSubject<ColumnDefinition[]>(listViewColumns);
|
||||
this.columns$ = this.columns.asObservable();
|
||||
|
||||
this.initDataUpdateState();
|
||||
this.initDataSetUpdatedState();
|
||||
}
|
||||
|
||||
get showFilters(): boolean {
|
||||
|
@ -355,6 +361,10 @@ export class ListViewStore extends ViewStore implements StateStore,
|
|||
this.recordList.clearSelection();
|
||||
this.load(false).pipe(take(1)).subscribe();
|
||||
}
|
||||
|
||||
if (process.data && process.data.dataUpdated) {
|
||||
this.dataUpdateState.next(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -495,4 +505,25 @@ export class ListViewStore extends ViewStore implements StateStore,
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize data update state.
|
||||
* It should be emitted on any change in values on the record list.
|
||||
* Reload/Pagination is not considered as a data update
|
||||
*/
|
||||
protected initDataUpdateState(): void {
|
||||
this.dataUpdateState = new BehaviorSubject<boolean>(true);
|
||||
this.dataUpdate$ = this.dataUpdateState.asObservable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the dataSet update state.
|
||||
* It should be emitted on any change in dataSet e.g. due to data filter, due to data delete,
|
||||
* due to data edit or any event which causes change in the resulting dataSet.
|
||||
*/
|
||||
protected initDataSetUpdatedState(): void {
|
||||
this.dataSetUpdate$ = combineLatest(
|
||||
[this.criteria$, this.dataUpdate$]
|
||||
).pipe(map(() => true));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ export class SidebarWidgetAdapter {
|
|||
|
||||
if (metadata.sidebarWidgets && metadata.sidebarWidgets.length) {
|
||||
metadata.sidebarWidgets.forEach(widget => {
|
||||
if (widget && widget.refreshOnRecordUpdate) {
|
||||
if (widget && widget.refreshOn === 'data-update') {
|
||||
widget.reload$ = this.store.record$.pipe(map(() => true));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -38,7 +38,7 @@ export class TopWidgetAdapter {
|
|||
]).pipe(
|
||||
map(([metadata, show]) => {
|
||||
|
||||
if (metadata.topWidget && metadata.topWidget.refreshOnRecordUpdate) {
|
||||
if (metadata.topWidget && metadata.topWidget.refreshOn === 'data-update') {
|
||||
metadata.topWidget.reload$ = this.store.record$.pipe(map(() => true));
|
||||
}
|
||||
|
||||
|
|
|
@ -124,6 +124,7 @@ class DeleteRecordsBulkAction implements ProcessHandlerInterface, LoggerAwareInt
|
|||
|
||||
$responseData = [
|
||||
'reload' => true,
|
||||
'dataUpdated' => true,
|
||||
];
|
||||
|
||||
$process->setStatus('success');
|
||||
|
|
|
@ -264,7 +264,7 @@ class RecordViewDefinitionHandler extends LegacyHandler
|
|||
protected function addTopWidgetConfig(array $viewDefs, array &$metadata): void
|
||||
{
|
||||
$metadata['topWidget'] = $viewDefs['topWidget'] ?? [];
|
||||
$metadata['topWidget']['refreshOnRecordUpdate'] = $metadata['topWidget']['refreshOnRecordUpdate'] ?? true;
|
||||
$metadata['topWidget']['refreshOn'] = $metadata['topWidget']['refreshOn'] ?? 'data-update';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -288,7 +288,7 @@ class RecordViewDefinitionHandler extends LegacyHandler
|
|||
$metadata['sidebarWidgets'] = $viewDefs['sidebarWidgets'] ?? [];
|
||||
|
||||
foreach ($metadata['sidebarWidgets'] as $index => $widget) {
|
||||
$metadata['sidebarWidgets'][$index]['refreshOnRecordUpdate'] = $widget['refreshOnRecordUpdate'] ?? true;
|
||||
$metadata['sidebarWidgets'][$index]['refreshOn'] = $widget['refreshOn'] ?? 'data-update';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ class ListViewSidebarWidgetDefinitionProvider implements ListViewSidebarWidgetDe
|
|||
$widgets = $this->filterDefinitionEntries($module, 'widgets', $this->widgets, $this->aclManager);
|
||||
|
||||
foreach ($widgets as $index => $widget) {
|
||||
$widgets[$index]['refreshOnRecordUpdate'] = $widget['refreshOnRecordUpdate'] ?? true;
|
||||
$widgets[$index]['refreshOn'] = $widget['refreshOn'] ?? 'data-update';
|
||||
}
|
||||
|
||||
return array_values($widgets);
|
||||
|
|
|
@ -126,7 +126,7 @@ class ListViewSidebarWidgetDefinitionProviderTest extends Unit
|
|||
]
|
||||
],
|
||||
],
|
||||
'refreshOnRecordUpdate' => true
|
||||
'refreshOn' => 'data-update'
|
||||
]
|
||||
];
|
||||
$widgets = $this->service->getSidebarWidgets('leads');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue