Some checks failed
Build & Test / Analyze (javascript, blocksuite) (push) Failing after 3s
Build & Test / Rust test filter (push) Failing after 3s
Build & Test / E2E BlockSuite Test (2) (push) Failing after 3s
Build & Test / E2E BlockSuite Test (3) (push) Failing after 4s
Build & Test / E2E BlockSuite Test (4) (push) Failing after 3s
Build & Test / E2E BlockSuite Cross Browser Test (push) Failing after 3s
Build & Test / E2E Mobile Test (1) (push) Failing after 3s
Build & Test / E2E Mobile Test (2) (push) Failing after 3s
Build & Test / Build AFFiNE native (x86_64-unknown-linux-gnu) (push) Failing after 4s
Build & Test / Unit Test (1) (push) Has been skipped
Build & Test / Unit Test (2) (push) Has been skipped
Build & Test / Unit Test (3) (push) Has been skipped
Build & Test / Build Server native (push) Failing after 3s
Build & Test / Check Git Status (push) Has been skipped
Build & Test / Server Test (0, 4) (push) Has been skipped
Build & Test / Server Test (1, 4) (push) Has been skipped
Build & Test / Analyze (javascript, affine) (push) Failing after 3s
Build & Test / Analyze (typescript, affine) (push) Failing after 3s
Build & Test / Analyze (typescript, blocksuite) (push) Failing after 3s
Build & Test / Mobile native build filter (push) Failing after 3s
Build & Test / Check yarn binary (push) Failing after 3s
Build & Test / E2E BlockSuite Test (1) (push) Failing after 4s
Build & Test / E2E BlockSuite Test (5) (push) Failing after 3s
Build & Test / Unit Test (4) (push) Has been skipped
Build & Test / Unit Test (5) (push) Has been skipped
Build & Test / Native Unit Test (push) Has been skipped
Build & Test / Server Test (2, 4) (push) Has been skipped
Build & Test / Server Test (3, 4) (push) Has been skipped
Build & Test / Server Test with Elasticsearch (push) Has been skipped
Build & Test / Server Test with Embedded Search (push) Has been skipped
Build & Test / Server Test with Manticore Search (push) Has been skipped
Build & Test / Server E2E Test (push) Has been skipped
Build & Test / Cloud Desktop E2E Test (push) Has been skipped
Build & Test / Cloud E2E Test 1/2 (push) Has been skipped
Build & Test / Cloud E2E Test 2/2 (push) Has been skipped
Build & Test / Build @affine/electron renderer (push) Failing after 3s
Build & Test / Copilot test filter (push) Failing after 4s
Build & Test / Lint Rust (push) Has been skipped
Build & Test / Build Android app (push) Has been skipped
Build & Test / Test Android app (push) Has been skipped
Build & Test / Run native tests (push) Has been skipped
Build & Test / Server Copilot Api Test (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (3, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (4, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (1, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (2, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (5, 5) (push) Has been skipped
Build & Test / Desktop Test (ubuntu-latest, linux, x64, x86_64-unknown-linux-gnu, true) (push) Has been cancelled
Build & Test / Desktop Test (windows-latest, windows, x64, x86_64-pc-windows-msvc, true) (push) Has been cancelled
Build & Test / 3, 2, 1 Launch (push) Has been cancelled
Build & Test / Lint (push) Has been cancelled
Build & Test / Typecheck (push) Has been cancelled
Build & Test / Build iOS app (push) Has been cancelled
Build & Test / Build AFFiNE native (aarch64-apple-darwin) (push) Has been cancelled
Build & Test / E2E Test (1) (push) Has been cancelled
Build & Test / E2E Test (2) (push) Has been cancelled
Build & Test / E2E Test (3) (push) Has been cancelled
Build & Test / E2E Test (4) (push) Has been cancelled
Build & Test / E2E Test (5) (push) Has been cancelled
Build & Test / Build AFFiNE native (x86_64-apple-darwin) (push) Has been cancelled
Build & Test / Build AFFiNE native (aarch64-pc-windows-msvc) (push) Has been cancelled
Build & Test / Build AFFiNE native (x86_64-pc-windows-msvc) (push) Has been cancelled
Build & Test / Desktop Test (macos-latest, macos, arm64, aarch64-apple-darwin, true) (push) Has been cancelled
Build & Test / Desktop Test (macos-latest, macos, x64, x86_64-apple-darwin, false) (push) Has been cancelled
117 lines
3.1 KiB
TypeScript
117 lines
3.1 KiB
TypeScript
import { WithDisposable } from '@blocksuite/affine/global/lit';
|
|
import { ShadowlessElement, TextSelection } from '@blocksuite/affine/std';
|
|
import type { TestAffineEditorContainer } from '@blocksuite/integration-test';
|
|
import { css, html } from 'lit';
|
|
import { property, query } from 'lit/decorators.js';
|
|
|
|
import { CommentInput } from './comment-input.js';
|
|
import { CommentManager } from './comment-manager.js';
|
|
|
|
export class CommentPanel extends WithDisposable(ShadowlessElement) {
|
|
static override styles = css`
|
|
comment-panel {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
border: 1px solid var(--affine-border-color, #e3e2e4);
|
|
background-color: var(--affine-background-primary-color);
|
|
height: 100vh;
|
|
width: 320px;
|
|
box-sizing: border-box;
|
|
padding-top: 16px;
|
|
}
|
|
|
|
.comment-panel-container {
|
|
width: 100%;
|
|
height: 100%;
|
|
padding: 16px;
|
|
}
|
|
|
|
.comment-panel-head {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
.comment-panel-comments {
|
|
margin-top: 16px;
|
|
}
|
|
|
|
.comment-panel-comment {
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.comment-panel-comment-quote {
|
|
font-size: 10px;
|
|
color: var(--affine-text-secondary-color);
|
|
padding-left: 8px;
|
|
border-left: 2px solid var(--affine-text-secondary-color);
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.comment-panel-comment-author {
|
|
font-size: 12px;
|
|
}
|
|
|
|
.comment-panel-comment-text {
|
|
margin-top: 8px;
|
|
}
|
|
`;
|
|
|
|
commentManager: CommentManager | null = null;
|
|
|
|
private _addComment() {
|
|
const textSelection = this.editor.host?.selection.find(TextSelection);
|
|
if (!textSelection) return;
|
|
|
|
const commentInput = new CommentInput();
|
|
if (!this.commentManager) return;
|
|
|
|
commentInput.manager = this.commentManager;
|
|
commentInput.onSubmit = () => {
|
|
this.requestUpdate();
|
|
};
|
|
this._container.append(commentInput);
|
|
}
|
|
|
|
override connectedCallback() {
|
|
super.connectedCallback();
|
|
|
|
if (!this.editor.host) return;
|
|
this.commentManager = new CommentManager(this.editor.host);
|
|
}
|
|
|
|
override render() {
|
|
if (!this.commentManager) return;
|
|
const comments = this.commentManager.getComments();
|
|
|
|
return html`<div class="comment-panel-container">
|
|
<div class="comment-panel-head">
|
|
<button @click=${this._addComment}>Add Comment</button>
|
|
</div>
|
|
<div class="comment-panel-comments">
|
|
${comments.map(comment => {
|
|
return html`<div class="comment-panel-comment">
|
|
<div class="comment-panel-comment-quote">${comment.quote}</div>
|
|
<div class="comment-panel-comment-author">${comment.author}</div>
|
|
<div class="comment-panel-comment-text">
|
|
<rich-text .yText=${comment.text} .readonly=${true}></rich-text>
|
|
</div>
|
|
</div>`;
|
|
})}
|
|
</div>
|
|
</div>`;
|
|
}
|
|
|
|
@query('.comment-panel-container')
|
|
private accessor _container!: HTMLDivElement;
|
|
|
|
@property({ attribute: false })
|
|
accessor editor!: TestAffineEditorContainer;
|
|
}
|
|
|
|
declare global {
|
|
interface HTMLElementTagNameMap {
|
|
'comment-panel': CommentPanel;
|
|
}
|
|
}
|