mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.4 KiB
96 lines
2.4 KiB
/*
|
|
* Squidex Headless CMS
|
|
*
|
|
* @license
|
|
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
|
|
*/
|
|
|
|
import { Directive, ElementRef, Input, OnChanges, Pipe, PipeTransform, Renderer2 } from '@angular/core';
|
|
|
|
import {
|
|
MetaFields,
|
|
RootFieldDto,
|
|
TableField,
|
|
Types
|
|
} from '@app/shared';
|
|
|
|
export function getTableWidth(fields: ReadonlyArray<TableField>) {
|
|
let result = 0;
|
|
|
|
for (let field of fields) {
|
|
result += getCellWidth(field);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
export function getCellWidth(field: TableField) {
|
|
if (Types.is(field, RootFieldDto)) {
|
|
return 220;
|
|
} else {
|
|
switch (field) {
|
|
case MetaFields.id:
|
|
return 280;
|
|
case MetaFields.created:
|
|
return 150;
|
|
case MetaFields.createdByAvatar:
|
|
return 55;
|
|
case MetaFields.createdByName:
|
|
return 150;
|
|
case MetaFields.lastModified:
|
|
return 150;
|
|
case MetaFields.lastModifiedByAvatar:
|
|
return 55;
|
|
case MetaFields.lastModifiedByName:
|
|
return 150;
|
|
case MetaFields.status:
|
|
return 160;
|
|
case MetaFields.statusNext:
|
|
return 240;
|
|
case MetaFields.statusColor:
|
|
return 50;
|
|
case MetaFields.version:
|
|
return 80;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
@Pipe({
|
|
name: 'sqxContentListWidth',
|
|
pure: true
|
|
})
|
|
export class ContentListWidthPipe implements PipeTransform {
|
|
public transform(value: ReadonlyArray<TableField>) {
|
|
if (!value) {
|
|
return 0;
|
|
}
|
|
|
|
return `${getTableWidth(value) + 100}px`;
|
|
}
|
|
}
|
|
|
|
@Directive({
|
|
selector: '[sqxContentListCell]'
|
|
})
|
|
export class ContentListCellDirective implements OnChanges {
|
|
@Input('sqxContentListCell')
|
|
public field: TableField;
|
|
|
|
constructor(
|
|
private readonly element: ElementRef,
|
|
private readonly renderer: Renderer2
|
|
) {
|
|
}
|
|
|
|
public ngOnChanges() {
|
|
if (Types.isString(this.field) && this.field) {
|
|
const width = `${getCellWidth(this.field)}px`;
|
|
|
|
this.renderer.setStyle(this.element.nativeElement, 'min-width', width);
|
|
this.renderer.setStyle(this.element.nativeElement, 'max-width', width);
|
|
this.renderer.setStyle(this.element.nativeElement, 'width', width);
|
|
}
|
|
}
|
|
}
|