-
Notifications
You must be signed in to change notification settings - Fork 638
/
comment-view.ts
78 lines (71 loc) · 2.19 KB
/
comment-view.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import { customElement, property } from 'lit/decorators';
import { html, LitElement, nothing, TemplateResult } from 'lit';
import { repeat } from 'lit/directives/repeat';
import { unsafeHTML } from 'lit/directives/unsafe-html';
type Comment = {
user_comment: string;
previous_stage_title: string;
stage_title: string;
tstamp: number;
user_username: string;
user_avatar: string
}
@customElement('typo3-workspaces-comment-view')
export class CommentViewElement extends LitElement {
@property({ type: Array })
public comments: Comment[] = [];
protected createRenderRoot(): HTMLElement | ShadowRoot {
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
return this;
}
protected render(): TemplateResult {
return html`
<div>
${repeat(this.comments, (comment) => comment.tstamp, (comment) => this.renderComment(comment))}
</div>
`;
}
protected renderComment(comment: Comment): TemplateResult {
return html`
<div class="media">
<div class="media-left text-center">
<div>
${unsafeHTML(comment.user_avatar)}
</div>
${comment.user_username}
</div>
<div class="panel panel-default">
${comment.user_comment ? html`
<div class="panel-body">
${comment.user_comment}
</div>
` : nothing}
<div class="panel-footer">
<span class="badge badge-success me-2">
${comment.previous_stage_title} > ${comment.stage_title}
</span>
<span class="badge badge-info">
${comment.tstamp}
</div>
</div>
</div>
`;
}
}
declare global {
interface HTMLElementTagNameMap {
'typo3-workspaces-comment-view': CommentViewElement;
}
}