@eclipse-scout/core
Version:
Eclipse Scout runtime
113 lines (94 loc) • 3.39 kB
text/typescript
/*
* Copyright (c) 2010, 2025 BSI Business Systems Integration AG
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*/
import {CompactLine, scout, strings} from '../../index';
export class CompactBean {
title: string;
titleLine: CompactLine;
titleSuffix: string;
titleSuffixLine: CompactLine;
subtitle: string;
subtitleLine: CompactLine;
contentLines: CompactLine[];
content: string;
moreContent: string;
constructor() {
this.title = '';
this.titleSuffix = '';
this.subtitle = '';
this.content = '';
this.moreContent = '';
this.contentLines = [];
}
setTitle(title: string) {
this.title = scout.nvl(title, '');
}
setTitleLine(titleLine: CompactLine) {
this.titleLine = titleLine;
}
setTitleSuffix(titleSuffix: string) {
this.titleSuffix = scout.nvl(titleSuffix, '');
}
setTitleSuffixLine(titleSuffixLine: CompactLine) {
this.titleSuffixLine = titleSuffixLine;
}
setSubtitle(subtitle: string) {
this.subtitle = scout.nvl(subtitle, '');
}
setSubtitleLine(subtitleLine: CompactLine) {
this.subtitleLine = subtitleLine;
}
addContentLine(line: CompactLine) {
this.contentLines.push(line);
}
setContent(content: string) {
this.content = scout.nvl(content, '');
}
setMoreContent(moreContent: string) {
this.moreContent = scout.nvl(moreContent, '');
}
/**
* Converts the compact lines into strings and fills the responding properties (title, subtitle, content, moreContent).
*
* @param options.removeEmptyContentLines default true
* @param options.maxContentLines default 1000
* @param options.moreLinkAvailable If <code>true</code>, maxContentLines may be increased by 1 if the more link would reveal only one line. Does not have any effect if it is <code>false</code>. Default is <code>false</code>.
*/
transform(options?: { removeEmptyContentLines?: boolean; maxContentLines?: number; moreLinkAvailable?: boolean }) {
let removeEmptyContentLines = scout.nvl(options.removeEmptyContentLines, true);
let maxContentLines = scout.nvl(options.maxContentLines, 1000);
const moreLinkAvailable = options.moreLinkAvailable;
if (this.titleLine) {
this.setTitle(this.titleLine.build());
}
if (this.titleSuffixLine) {
this.setTitleSuffix(this.titleSuffixLine.build());
}
if (this.subtitleLine) {
this.setSubtitle(this.subtitleLine.build());
}
let contentLines = [];
if (removeEmptyContentLines) {
contentLines = this.contentLines.filter(line => !!line.build());
}
if (moreLinkAvailable && maxContentLines + 1 === contentLines.length) {
// Don't show more link if it would only reveal one element
maxContentLines++;
}
let contentLineEnd = Math.min(contentLines.length, maxContentLines);
let content = strings.join('\n', ...contentLines.slice(0, contentLineEnd).map(line => line.build()));
if (content) {
this.setContent(content);
}
if (contentLineEnd < contentLines.length) {
let moreContent = strings.join('\n', ...contentLines.slice(contentLineEnd, contentLines.length).map(line => line.build()));
this.setMoreContent(moreContent);
}
}
}