src/app/features/markdown-page/markdown-page/markdown-page.component.ts
Display markdown formatted page that is dynamically loaded based on the file defined in config.
| changeDetection | ChangeDetectionStrategy.OnPush |
| selector | app-markdown-page |
| standalone | true |
| imports | |
| templateUrl | ./markdown-page.component.html |
No results matching.
Properties |
|
Inputs |
| markdownEntityId | |
Type : string
|
|
|
markdown entity content to be displayed |
|
| markdownFile | |
Type : string
|
|
|
filepath to be loaded as markdown |
|
| Readonly markdownContent |
Type : unknown
|
Default value : computed(
() => this.markdownContentResource.value() ?? "",
)
|
|
markdown content string for template use |
import {
Component,
computed,
inject,
ChangeDetectionStrategy,
input,
resource,
} from "@angular/core";
import { MarkdownPageModule } from "../markdown-page.module";
import { RouteTarget } from "../../../route-target";
import { EntityMapperService } from "app/core/entity/entity-mapper/entity-mapper.service";
import { MarkdownContent } from "../markdown-content";
/**
* Display markdown formatted page that is dynamically loaded based on the file defined in config.
*/
@RouteTarget("MarkdownPage")
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: "app-markdown-page",
templateUrl: "./markdown-page.component.html",
imports: [MarkdownPageModule],
})
export class MarkdownPageComponent {
/** filepath to be loaded as markdown */
markdownFile = input<string>();
/** markdown entity content to be displayed */
markdownEntityId = input<string>();
private readonly entityMapper = inject(EntityMapperService);
readonly markdownContentResource = resource({
params: () => this.markdownEntityId(),
loader: async ({ params: markdownEntityId }) => {
if (!markdownEntityId) return "";
const markdownEntity = await this.entityMapper.load(
MarkdownContent,
markdownEntityId,
);
return markdownEntity?.content ?? "";
},
});
/** markdown content string for template use */
readonly markdownContent = computed(
() => this.markdownContentResource.value() ?? "",
);
}
@if (markdownEntityId()) {
@if (markdownContent()) {
<div markdown [data]="markdownContent()"></div>
} @else {
<p><em i18n>Content not found.</em></p>
}
} @else {
<div markdown [src]="markdownFile()"></div>
}