Browse Source

Fix for comments.

pull/456/merge
Sebastian 6 years ago
parent
commit
194c83529f
  1. 9
      frontend/app/features/assets/pages/assets-page.component.scss
  2. 6
      frontend/app/features/content/shared/contents-selector.component.scss
  3. 2
      frontend/app/framework/angular/list-view.component.html
  4. 4
      frontend/app/framework/angular/list-view.component.scss
  5. 12
      frontend/app/shared/components/comments.component.html
  6. 25
      frontend/app/shared/components/comments.component.scss
  7. 27
      frontend/app/shared/components/comments.component.ts
  8. 8
      frontend/app/shared/state/comments.form.ts

9
frontend/app/features/assets/pages/assets-page.component.scss

@ -23,12 +23,3 @@
} }
} }
} }
.grid-header {
padding-left: 1rem;
}
.grid-content {
padding-top: 1rem;
padding-bottom: 1rem;
}

6
frontend/app/features/content/shared/contents-selector.component.scss

@ -28,9 +28,3 @@
padding-right: 1.5rem; padding-right: 1.5rem;
min-width: 100%; min-width: 100%;
} }
.grid-content {
overflow-y: auto;
overflow-x: auto;
padding-right: 0;
}

2
frontend/app/framework/angular/list-view.component.html

@ -7,7 +7,7 @@
<ng-content select="[header]"></ng-content> <ng-content select="[header]"></ng-content>
</div> </div>
<div class="grid-content normal" [class.loading-indicator]="isLoadingValue" #contentElement [class.tabled]="table"> <div class="grid-content normal" [class.loading-indicator]="isLoadingValue" [class.tabled]="table" #contentElement>
<ng-content select="[content]"></ng-content> <ng-content select="[content]"></ng-content>
</div> </div>
</ng-container> </ng-container>

4
frontend/app/framework/angular/list-view.component.scss

@ -46,7 +46,7 @@
& { & {
@include flex-shrink(0); @include flex-shrink(0);
border: 0; border: 0;
border-bottom: 2px solid $color-border; border-bottom: 1px solid $color-border;
overflow-x: hidden; overflow-x: hidden;
overflow-y: hidden; overflow-y: hidden;
} }
@ -72,7 +72,7 @@
& { & {
@include flex-shrink(1); @include flex-shrink(1);
border: 0; border: 0;
border-top: 2px solid $color-border; border-top: 1px solid $color-border;
} }
/deep/ .pagination { /deep/ .pagination {

12
frontend/app/shared/components/comments.component.html

@ -4,8 +4,8 @@
</ng-container> </ng-container>
<ng-container content> <ng-container content>
<div class="grid-content" #scrollMe [scrollTop]="scrollMe.scrollHeight"> <div class="comments-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
<sqx-comment *ngFor="let comment of state.comments | async; trackBy: trackByComment" <sqx-comment *ngFor="let comment of commentsState.comments | async; trackBy: trackByComment"
[comment]="comment" [comment]="comment"
[userId]="userId" [userId]="userId"
(update)="update(comment, $event)" (update)="update(comment, $event)"
@ -13,9 +13,13 @@
</sqx-comment> </sqx-comment>
</div> </div>
<div class="grid-footer"> <div class="comments-footer">
<form [formGroup]="commentForm.form" (ngSubmit)="comment()"> <form [formGroup]="commentForm.form" (ngSubmit)="comment()">
<input class="form-control" name="text" formControlName="text" placeholder="Create a comment" /> <input class="form-control" name="text" formControlName="text" placeholder="Create a comment"
autocomplete="off"
autocorrect="off"
autocapitalize="off"
/>
</form> </form>
</div> </div>
</ng-container> </ng-container>

25
frontend/app/shared/components/comments.component.scss

@ -1,11 +1,26 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
.grid-footer { .comments {
border-top-width: 1px; &-list {
@include flex-grow(1);
overflow-y: auto;
overflow-x: hidden;
padding: 1rem;
padding-left: 1.5rem;
}
&-footer {
@include flex-shrink(0);
border-top: 1px solid $color-border;
}
} }
.grid-body,
.grid-footer { .form-control {
padding: 1rem; border: 0;
&:focus {
@include box-shadow-none;
}
} }

27
frontend/app/shared/components/comments.component.ts

@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/ */
import { Component, Input, OnInit } from '@angular/core'; import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';
import { FormBuilder } from '@angular/forms'; import { FormBuilder } from '@angular/forms';
import { timer } from 'rxjs'; import { timer } from 'rxjs';
import { switchMap } from 'rxjs/operators'; import { switchMap } from 'rxjs/operators';
@ -27,18 +27,18 @@ import {
templateUrl: './comments.component.html' templateUrl: './comments.component.html'
}) })
export class CommentsComponent extends ResourceOwner implements OnInit { export class CommentsComponent extends ResourceOwner implements OnInit {
public state: CommentsState; @Input()
public commentsId: string;
public userId: string;
public commentsState: CommentsState;
public commentForm = new UpsertCommentForm(this.formBuilder); public commentForm = new UpsertCommentForm(this.formBuilder);
@Input() public userId: string;
public commentsId: string;
constructor(authService: AuthService, constructor(authService: AuthService,
private readonly appsState: AppsState, private readonly appsState: AppsState,
private readonly commentsService: CommentsService, private readonly commentsService: CommentsService,
private readonly changeDetector: ChangeDetectorRef,
private readonly dialogs: DialogService, private readonly dialogs: DialogService,
private readonly formBuilder: FormBuilder private readonly formBuilder: FormBuilder
) { ) {
@ -48,26 +48,27 @@ export class CommentsComponent extends ResourceOwner implements OnInit {
} }
public ngOnInit() { public ngOnInit() {
this.state = new CommentsState(this.appsState, this.commentsId, this.commentsService, this.dialogs); this.commentsState = new CommentsState(this.appsState, this.commentsId, this.commentsService, this.dialogs);
this.own(timer(0, 4000).pipe(switchMap(() => this.state.load()))); this.own(timer(0, 4000).pipe(switchMap(() => this.commentsState.load())));
} }
public delete(comment: CommentDto) { public delete(comment: CommentDto) {
this.state.delete(comment); this.commentsState.delete(comment);
} }
public update(comment: CommentDto, text: string) { public update(comment: CommentDto, text: string) {
this.state.update(comment, text); this.commentsState.update(comment, text);
} }
public comment() { public comment() {
const value = this.commentForm.submit(); const value = this.commentForm.submit();
if (value) { if (value && value.text && value.text.length > 0) {
this.state.create(value.text); this.commentsState.create(value.text);
this.commentForm.submitCompleted(); this.commentForm.submitCompleted();
this.changeDetector.detectChanges();
} }
} }

8
frontend/app/shared/state/comments.form.ts

@ -5,18 +5,14 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/ */
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup } from '@angular/forms';
import { Form } from '@app/framework'; import { Form } from '@app/framework';
export class UpsertCommentForm extends Form<FormGroup, { text: string }> { export class UpsertCommentForm extends Form<FormGroup, { text: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
text: ['', text: ''
[
Validators.required
]
]
})); }));
} }
} }
Loading…
Cancel
Save