mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-08-29 20:50:13 +08:00
Add record table widget
This commit is contained in:
parent
11b8254edd
commit
80fbecaa0c
4 changed files with 177 additions and 3 deletions
|
@ -0,0 +1,35 @@
|
|||
<! --
|
||||
/**
|
||||
* SuiteCRM is a customer relationship management program developed by SalesAgility Ltd.
|
||||
* Copyright (C) 2024 SalesAgility Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License version 3 as published by the
|
||||
* Free Software Foundation with the addition of the following permission added
|
||||
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
|
||||
* IN WHICH THE COPYRIGHT IS OWNED BY SALESAGILITY, SALESAGILITY DISCLAIMS THE
|
||||
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see http://www.gnu.org/licenses.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU Affero General Public License
|
||||
* version 3, these Appropriate Legal Notices must retain the display of the
|
||||
* "Supercharged by SuiteCRM" logo. If the display of the logos is not reasonably
|
||||
* feasible for technical reasons, the Appropriate Legal Notices must display
|
||||
* the words "Supercharged by SuiteCRM".
|
||||
*/
|
||||
-->
|
||||
|
||||
<scrm-widget-panel [title]="titleKey()" [mode]="widgetCollapseMode()" [showHeader]="false">
|
||||
<div widget-body>
|
||||
<div class="widget-background record-table-widget widget-table minimal-table">
|
||||
<scrm-subpanel *ngIf="store" [store]="store" [panelHeaderButtonClass]="panelHeaderButtonClass"></scrm-subpanel>
|
||||
</div>
|
||||
</div>
|
||||
</scrm-widget-panel>
|
|
@ -0,0 +1,88 @@
|
|||
/**
|
||||
* SuiteCRM is a customer relationship management program developed by SalesAgility Ltd.
|
||||
* Copyright (C) 2024 SalesAgility Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License version 3 as published by the
|
||||
* Free Software Foundation with the addition of the following permission added
|
||||
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
|
||||
* IN WHICH THE COPYRIGHT IS OWNED BY SALESAGILITY, SALESAGILITY DISCLAIMS THE
|
||||
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU Affero General Public License
|
||||
* version 3, these Appropriate Legal Notices must retain the display of the
|
||||
* "Supercharged by SuiteCRM" logo. If the display of the logos is not reasonably
|
||||
* feasible for technical reasons, the Appropriate Legal Notices must display
|
||||
* the words "Supercharged by SuiteCRM".
|
||||
*/
|
||||
|
||||
import {Component, OnInit, signal, WritableSignal} from '@angular/core';
|
||||
import {Observable, Subscription} from 'rxjs';
|
||||
import {BaseWidgetComponent} from '../../../widgets/base-widget.model';
|
||||
import {LanguageStore} from '../../../../store/language/language.store';
|
||||
import {SubpanelStore} from "../../../subpanel/store/subpanel/subpanel.store";
|
||||
import {SubpanelStoreFactory} from "../../../subpanel/store/subpanel/subpanel.store.factory";
|
||||
import {map, take} from "rxjs/operators";
|
||||
import {PanelCollapseMode} from "../../../../components/panel/panel.component";
|
||||
|
||||
@Component({
|
||||
selector: 'record-table-widget',
|
||||
templateUrl: './record-table-widget.component.html',
|
||||
styleUrls: []
|
||||
})
|
||||
export class RecordTableWidgetComponent extends BaseWidgetComponent implements OnInit {
|
||||
panelHeaderButtonClass: string = 'btn btn-sm btn-outline-main';
|
||||
titleLabelKey = 'LBL_INSIGHTS';
|
||||
titleKey: WritableSignal<string> = signal('');
|
||||
widgetCollapseMode: WritableSignal<PanelCollapseMode> = signal('none');
|
||||
loading$: Observable<boolean>;
|
||||
loading = true;
|
||||
protected subs: Subscription[] = [];
|
||||
store: SubpanelStore;
|
||||
|
||||
|
||||
constructor(
|
||||
public language: LanguageStore,
|
||||
protected subpanelFactory: SubpanelStoreFactory
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
|
||||
const recordTableConfig = this?.config?.options?.recordTable ?? null;
|
||||
|
||||
this.store = this.subpanelFactory.create();
|
||||
const parentModule = this.context.module;
|
||||
const parentRecordId = this.context.id;
|
||||
const contextRecord$ = this.context$.pipe(map(context => this.context.record));
|
||||
this.store.init(parentModule, parentRecordId, recordTableConfig, contextRecord$);
|
||||
this.store.recordList.setLoading(true);
|
||||
this.initPanelTitleKey(recordTableConfig);
|
||||
this.initPanelCollapseMode();
|
||||
|
||||
this.store.load().pipe(take(1)).subscribe();
|
||||
}
|
||||
|
||||
protected initPanelTitleKey(recordTableConfig: any): void {
|
||||
recordTableConfig.title_key = this?.config?.labelKey ?? recordTableConfig.title_key;
|
||||
this.titleKey.set(this?.config?.labelKey ?? this.titleLabelKey);
|
||||
}
|
||||
|
||||
protected initPanelCollapseMode(): void {
|
||||
let widgetCollapseMode: PanelCollapseMode = 'none';
|
||||
if (this?.config?.allowCollapse) {
|
||||
widgetCollapseMode = 'collapsible';
|
||||
}
|
||||
this.widgetCollapseMode.set(widgetCollapseMode as PanelCollapseMode);
|
||||
this.store.panelCollapseMode.set(widgetCollapseMode);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* SuiteCRM is a customer relationship management program developed by SalesAgility Ltd.
|
||||
* Copyright (C) 2024 SalesAgility Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License version 3 as published by the
|
||||
* Free Software Foundation with the addition of the following permission added
|
||||
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
|
||||
* IN WHICH THE COPYRIGHT IS OWNED BY SALESAGILITY, SALESAGILITY DISCLAIMS THE
|
||||
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU Affero General Public License
|
||||
* version 3, these Appropriate Legal Notices must retain the display of the
|
||||
* "Supercharged by SuiteCRM" logo. If the display of the logos is not reasonably
|
||||
* feasible for technical reasons, the Appropriate Legal Notices must display
|
||||
* the words "Supercharged by SuiteCRM".
|
||||
*/
|
||||
|
||||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {RecordTableWidgetComponent} from './record-table-widget.component';
|
||||
import {WidgetPanelModule} from '../../../../components/widget-panel/widget-panel.module';
|
||||
import {LoadingSpinnerModule} from '../../../../components/loading-spinner/loading-spinner.module';
|
||||
import {SubpanelModule} from "../../../subpanel/components/subpanel/subpanel.module";
|
||||
|
||||
@NgModule({
|
||||
declarations: [RecordTableWidgetComponent],
|
||||
exports: [RecordTableWidgetComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
WidgetPanelModule,
|
||||
LoadingSpinnerModule,
|
||||
SubpanelModule
|
||||
]
|
||||
})
|
||||
export class RecordTableWidgetModule {
|
||||
}
|
|
@ -30,17 +30,23 @@ import {HistorySidebarWidgetModule} from '../history-sidebar-widget/history-side
|
|||
import {StatisticsSidebarWidgetComponent} from '../statistics-sidebar-widget/statistics-sidebar-widget.component';
|
||||
import {ChartSidebarWidgetModule} from '../chart-sidebar-widget/chart-sidebar-widget.module';
|
||||
import {ChartSidebarWidgetComponent} from '../chart-sidebar-widget/chart-sidebar-widget.component';
|
||||
import {RecordThreadSidebarWidgetComponent} from '../record-thread-sidebar-widget/record-thread-sidebar-widget.component';
|
||||
import {
|
||||
RecordThreadSidebarWidgetComponent
|
||||
} from '../record-thread-sidebar-widget/record-thread-sidebar-widget.component';
|
||||
import {RecordTableWidgetComponent} from "../record-table-widget/record-table-widget.component";
|
||||
import {RecordTableWidgetModule} from "../record-table-widget/record-table-widget.module";
|
||||
|
||||
export const sidebarWidgetModules = [
|
||||
HistorySidebarWidgetModule,
|
||||
ChartSidebarWidgetModule,
|
||||
StatisticsSidebarWidgetModule
|
||||
StatisticsSidebarWidgetModule,
|
||||
RecordTableWidgetModule
|
||||
];
|
||||
|
||||
export const componentTypeMap = {
|
||||
'history-timeline': HistorySidebarWidgetComponent,
|
||||
chart: ChartSidebarWidgetComponent,
|
||||
statistics: StatisticsSidebarWidgetComponent,
|
||||
'record-thread': RecordThreadSidebarWidgetComponent
|
||||
'record-thread': RecordThreadSidebarWidgetComponent,
|
||||
'record-table': RecordTableWidgetComponent
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue