Skip to content

Commit 46776d4

Browse files
committed
feat(admin): discussion per tasks
1 parent a3a5b05 commit 46776d4

21 files changed

+257
-45
lines changed

src/api/backend/api/default.service.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4246,21 +4246,21 @@ export class DefaultService {
42464246
/**
42474247
*
42484248
*
4249-
* @param _wave
4249+
* @param wave
42504250
* @param year
42514251
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
42524252
* @param reportProgress flag to report request and response progress.
42534253
*/
4254-
public threadsGetAll(_wave?: number, year?: number, observe?: 'body', reportProgress?: boolean): Observable<ThreadsResponse>;
4255-
public threadsGetAll(_wave?: number, year?: number, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<ThreadsResponse>>;
4256-
public threadsGetAll(_wave?: number, year?: number, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<ThreadsResponse>>;
4257-
public threadsGetAll(_wave?: number, year?: number, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {
4254+
public threadsGetAll(wave?: number, year?: number, observe?: 'body', reportProgress?: boolean): Observable<ThreadsResponse>;
4255+
public threadsGetAll(wave?: number, year?: number, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<ThreadsResponse>>;
4256+
public threadsGetAll(wave?: number, year?: number, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<ThreadsResponse>>;
4257+
public threadsGetAll(wave?: number, year?: number, observe: any = 'body', reportProgress: boolean = false ): Observable<any> {
42584258

42594259

42604260

42614261
let queryParameters = new HttpParams({encoder: new CustomHttpUrlEncodingCodec()});
4262-
if (_wave !== undefined && _wave !== null) {
4263-
queryParameters = queryParameters.set('_wave', <any>_wave);
4262+
if (wave !== undefined && wave !== null) {
4263+
queryParameters = queryParameters.set('wave', <any>wave);
42644264
}
42654265

42664266
let headers = this.defaultHeaders;

src/app/components/admin/admin-routing.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import { ROUTES } from '../../../routes/routes';
55
import { PageAdminTasksComponent } from './page-admin-tasks/page-admin-tasks.component';
66
import { PageAdminMonitorComponent } from './page-admin-monitor/page-admin-monitor.component';
77
import { PageAdminEmailComponent } from './page-admin-email/page-admin-email.component';
8+
import {PageAdminDiscussionComponent} from './page-admin-discussion/page-admin-discussion.component';
89

910
const routes: Routes = [
1011
{path: '', component: PageAdminRootComponent},
1112
{path: ROUTES.admin.tasks, component: PageAdminTasksComponent},
1213
{path: ROUTES.admin.monitor, component: PageAdminMonitorComponent},
1314
{path: ROUTES.admin.email, component: PageAdminEmailComponent},
15+
{path: ROUTES.admin.discussion, component: PageAdminDiscussionComponent},
1416
];
1517

1618
@NgModule({

src/app/components/admin/admin-sidebar/admin-sidebar.component.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
<a class="nav-btn" [routerLink]="['/', routes.routes.admin._, routes.routes.admin.email]" routerLinkActive="active" (click)="hideFullMenu($event)">
1313
{{'admin.navbar.email' | translate}}
1414
</a>
15+
<a class="nav-btn" [routerLink]="['/', routes.routes.admin._, routes.routes.admin.discussion]" routerLinkActive="active" (click)="hideFullMenu($event)">
16+
{{'admin.navbar.discussion' | translate}}
17+
</a>
1518
<ng-container *ngIf="oldFrontendUrl">
1619
<a *ngFor="let oldLink of oldFrontendButtons"
1720
class="nav-btn"

src/app/components/admin/admin-sidebar/admin-sidebar.component.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export class AdminSidebarComponent implements OnInit, OnDestroy {
2121
oldFrontendUrl = environment.oldFrontendUrl;
2222

2323
oldFrontendButtons = [
24-
['forum/', 'Diskuze'],
2524
['achievements/', 'Trofeje'],
2625
['users/', 'Uživatelé'],
2726
['years/', 'Ročníky'],

src/app/components/admin/admin.module.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { PageAdminEmailComponent } from './page-admin-email/page-admin-email.com
1414
import { QuillModule } from 'ngx-quill';
1515
import { ReactiveFormsModule } from '@angular/forms';
1616
import { AccordionModule } from 'ngx-bootstrap/accordion';
17+
import { PageAdminDiscussionComponent } from './page-admin-discussion/page-admin-discussion.component';
18+
import { AdminWaveSelectorComponent } from './shared/admin-wave-selector/admin-wave-selector.component';
1719

1820

1921
@NgModule({
@@ -23,7 +25,9 @@ import { AccordionModule } from 'ngx-bootstrap/accordion';
2325
PageAdminTasksComponent,
2426
AdminSectionCardComponent,
2527
PageAdminMonitorComponent,
26-
PageAdminEmailComponent
28+
PageAdminEmailComponent,
29+
PageAdminDiscussionComponent,
30+
AdminWaveSelectorComponent
2731
],
2832
imports: [
2933
CommonModule,
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<ksi-admin-sidebar></ksi-admin-sidebar>
2+
<div class="content-container">
3+
<div class="content">
4+
<h2 class="title">{{'admin.discussion.title'|translate}}</h2>
5+
6+
<ksi-admin-wave-selector [allowAll]="false" (waveFilter)="waveFilterSubj.next($event)"></ksi-admin-wave-selector>
7+
8+
<table class="table table-striped table-hover table-responsive-md threads" ksiTheme>
9+
<thead>
10+
<tr>
11+
<th scope="col">{{'discussion.name' | translate}}</th>
12+
<th scope="col">{{'discussion.posts-count' | translate}}</th>
13+
</tr>
14+
</thead>
15+
<tbody>
16+
<tr [routerLink]="routePrefix + thread.id" class="clickable" *ngFor="let thread of (threads$ | async)">
17+
<td><a [routerLink]="routePrefix + thread.id" [class.has-unread]="thread.unread">{{thread.title}}</a></td>
18+
<td>
19+
<a [routerLink]="routePrefix + thread.id">
20+
{{thread.posts_count}}
21+
<span class="new-posts-count" *ngIf="thread.unread">
22+
({{thread.unread | translateNewItems}})
23+
</span>
24+
</a>
25+
</td>
26+
</tr>
27+
</tbody>
28+
</table>
29+
</div>
30+
</div>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@import "src/app/styles/vars";
2+
@import "src/app/styles/mixins";
3+
4+
@include page-admin;
5+
6+
:host {
7+
.content {
8+
justify-self: center;
9+
10+
> .title {
11+
margin: $ksi-margin;
12+
text-align: center;
13+
}
14+
}
15+
16+
.has-unread, .new-posts-count {
17+
font-weight: bold;
18+
}
19+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { PageAdminDiscussionComponent } from './page-admin-discussion.component';
4+
5+
describe('PageAdminDiscussionComponent', () => {
6+
let component: PageAdminDiscussionComponent;
7+
let fixture: ComponentFixture<PageAdminDiscussionComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
declarations: [ PageAdminDiscussionComponent ]
12+
})
13+
.compileComponents();
14+
});
15+
16+
beforeEach(() => {
17+
fixture = TestBed.createComponent(PageAdminDiscussionComponent);
18+
component = fixture.componentInstance;
19+
fixture.detectChanges();
20+
});
21+
22+
it('should create', () => {
23+
expect(component).toBeTruthy();
24+
});
25+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
2+
import {BackendService, RoutesService, YearsService} from '../../../services';
3+
import {BehaviorSubject, Observable, Subject} from 'rxjs';
4+
import {Thread} from '../../../../api/backend';
5+
import {distinctUntilChanged, filter, map, mergeMap} from 'rxjs/operators';
6+
7+
@Component({
8+
selector: 'ksi-page-admin-discussion',
9+
templateUrl: './page-admin-discussion.component.html',
10+
styleUrls: ['./page-admin-discussion.component.scss'],
11+
changeDetection: ChangeDetectionStrategy.OnPush
12+
})
13+
export class PageAdminDiscussionComponent implements OnInit {
14+
waveFilterSubj: Subject<number | null> = new BehaviorSubject<number | null>(null);
15+
readonly waveFilter$: Observable<number | null> = this.waveFilterSubj.asObservable();
16+
17+
threads$: Observable<Thread[]>;
18+
19+
readonly routePrefix = `/${this.routes.routes.discussion}/`;
20+
21+
constructor(private backend: BackendService, public years: YearsService, private routes: RoutesService) { }
22+
23+
ngOnInit(): void {
24+
this.threads$ = this.waveFilter$.pipe(
25+
filter(waveId => waveId !== null),
26+
distinctUntilChanged(),
27+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
28+
mergeMap(((waveId) => this.backend.http.threadsGetAll(waveId!, this.years.selected!.id))),
29+
map((threads) => threads.threads)
30+
);
31+
}
32+
33+
}

src/app/components/admin/page-admin-root/page-admin-root.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ <h2 class="title">{{'admin.root.title'|translate}}</h2>
66
<ksi-admin-section-card name="tasks"></ksi-admin-section-card>
77
<ksi-admin-section-card name="monitor"></ksi-admin-section-card>
88
<ksi-admin-section-card name="email"></ksi-admin-section-card>
9+
<ksi-admin-section-card name="discussion"></ksi-admin-section-card>
910
</div>
1011
</div>
1112
</div>

0 commit comments

Comments
 (0)