mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-08-30 02:52:22 +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 {StatisticsSidebarWidgetComponent} from '../statistics-sidebar-widget/statistics-sidebar-widget.component';
|
||||||
import {ChartSidebarWidgetModule} from '../chart-sidebar-widget/chart-sidebar-widget.module';
|
import {ChartSidebarWidgetModule} from '../chart-sidebar-widget/chart-sidebar-widget.module';
|
||||||
import {ChartSidebarWidgetComponent} from '../chart-sidebar-widget/chart-sidebar-widget.component';
|
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 = [
|
export const sidebarWidgetModules = [
|
||||||
HistorySidebarWidgetModule,
|
HistorySidebarWidgetModule,
|
||||||
ChartSidebarWidgetModule,
|
ChartSidebarWidgetModule,
|
||||||
StatisticsSidebarWidgetModule
|
StatisticsSidebarWidgetModule,
|
||||||
|
RecordTableWidgetModule
|
||||||
];
|
];
|
||||||
|
|
||||||
export const componentTypeMap = {
|
export const componentTypeMap = {
|
||||||
'history-timeline': HistorySidebarWidgetComponent,
|
'history-timeline': HistorySidebarWidgetComponent,
|
||||||
chart: ChartSidebarWidgetComponent,
|
chart: ChartSidebarWidgetComponent,
|
||||||
statistics: StatisticsSidebarWidgetComponent,
|
statistics: StatisticsSidebarWidgetComponent,
|
||||||
'record-thread': RecordThreadSidebarWidgetComponent
|
'record-thread': RecordThreadSidebarWidgetComponent,
|
||||||
|
'record-table': RecordTableWidgetComponent
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue