in web/frontend/src/app/pages/streams/modules/schema-editor/components/class-list-grid/class-list-grid.component.ts [64:224]
ngOnInit() {
this.isWriter$ = this.permissionsService.isWriter();
this.gridContextMenuService.disableColumns();
this.gridOptions$ = this.tabId().pipe(
map((id) => {
return this.gridService.options(id, {
enableFilter: false,
deltaRowDataMode: true,
getRowNodeId: ({name}) => name,
getRowStyle: (params) => {
return {display: params?.data?._props?._isVisible ? 'block' : 'none'};
},
rowClassRules: {
classItem: ({data}) => data && !data.isEnum,
enumItem: ({data}) => data?.isEnum,
'type-edited': ({data}) => this.seFieldFormsService.typeHasChanges(data),
hasError: ({data}) => this.seFieldFormsService.showErrorOnType(data),
'ag-row-selected': ({data}) => data?._props?._isSelected,
},
});
}),
);
const columns = [
columnsVisibleColumn(false),
{
headerName: 'Use',
field: '_props._isUsed',
filter: false,
cellRenderer: 'isUsedCbComponent',
pinned: 'left',
sortable: false,
lockPosition: true,
suppressMenu: true,
resizable: false,
},
{
sortable: true,
lockPosition: true,
suppressMenu: true,
cellRenderer: 'treeDataCellComponent',
field: 'name',
filter: 'agTextColumnFilter',
headerName: 'Name',
cellClass: ({data}) => (data?._props?._isEdited ? 'isEdited' : ''),
},
{
headerName: 'Title',
field: 'title',
filter: true,
width: 100,
sortable: false,
lockPosition: true,
suppressMenu: true,
},
{
headerName: 'Abstract',
field: 'isAbstract',
filter: false,
cellRenderer: 'isAbstractCbComponent',
sortable: false,
lockPosition: true,
suppressMenu: true,
},
];
const data$ = this.appStore.pipe(
select(getAllSchemaItems),
map((schemaAll) => {
if (schemaAll && schemaAll.length) {
this.schemaAll = [...schemaAll];
}
const rowData = [...schemaAll];
for (const row of rowData) {
if (row.isEnum) {
row._props._hierarchy = ['Enumerators', row.name];
} else {
row._props._hierarchy = ['Types', ...this.getTypeHierarchy(row, this.schemaAll)];
}
row._props._isVisible = true;
}
rowData.sort((prev, next) => {
if (prev.isEnum && !next.isEnum) {
return 1;
} else if (!prev.isEnum && next.isEnum) {
return -1;
}
return 0;
});
return rowData;
}),
takeUntil(this.seDataService.showClassListGrid().pipe(filter((show) => !show))),
);
this.tabId()
.pipe(
switchMap(() => this.gridService.setColumns(columns)),
tap(() => (this.columnsSet = false)),
switchMap(() => data$),
switchMap((data) => {
let selectedField;
const type = data.find((type) => {
return type.fields.find((field) => {
if (field._props._isSelected) {
selectedField = field;
}
return field._props._isSelected;
});
});
this.seFieldFormsService.selectedChange(
type?._props._uuid || '',
selectedField?._props._uuid || '',
);
return this.gridService.setRowData(data).pipe(map(() => data));
}),
filter(() => !this.columnsSet),
switchMap((data) => {
this.columnsSet = data.length > 0;
if (this.columnsSet) {
this.selectInitial(data);
}
return this.gridService.resizeColumnsOnData(data).pipe(map(() => data));
}),
takeUntil(this.destroy$),
)
.subscribe();
this.gridService
.onDoubleClicked()
.pipe(takeUntil(this.destroy$), withLatestFrom(this.isWriter$))
.subscribe(([event, isWriter]) => {
if (!event?.data || !isWriter) return;
this.showEditItemModal(event.data);
});
this.gridService
.onSelectionChanged()
.pipe(takeUntil(this.destroy$))
.subscribe((event: SelectionChangedEvent) => {
const item = event.api.getSelectedRows()[0];
if (item?._props && !item._props._isSelected) {
this.seSelectionService.onSelectType(item?._props._uuid);
this.appStore.dispatch(SetSelectedSchemaItem({itemName: item.name}));
}
});
this.seFieldFormsService
.hasChanges()
.pipe(
takeUntil(this.destroy$),
switchMap(() => this.gridService.redrawRows()),
)
.subscribe();
}