Changes in / [6b0fbbe:7899209]


Ignore:
Location:
src
Files:
2 added
11 deleted
19 edited

Legend:

Unmodified
Added
Removed
  • src/Clients/Angular/finki-chattery/package-lock.json

    r6b0fbbe r7899209  
    17461746      }
    17471747    },
    1748     "@tinymce/tinymce-angular": {
    1749       "version": "4.0.0",
    1750       "resolved": "https://registry.npmjs.org/@tinymce/tinymce-angular/-/tinymce-angular-4.0.0.tgz",
    1751       "integrity": "sha512-CmsKournkWWK5O7d8qgZQPvRC76z36GjeD3ZAHZEY/kUXKWAIXfbrHxxgQq9m7+wlfZq9QNgRx5ufN9y9N46DQ==",
    1752       "requires": {
    1753         "tslib": "^1.10.0"
    1754       },
    1755       "dependencies": {
    1756         "tslib": {
    1757           "version": "1.14.1",
    1758           "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
    1759           "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
    1760         }
    1761       }
    1762     },
    17631748    "@types/glob": {
    17641749      "version": "7.1.3",
  • src/Clients/Angular/finki-chattery/package.json

    r6b0fbbe r7899209  
    2929    "@ngrx/store-devtools": "^11.0.1",
    3030    "@ngx-translate/core": "^13.0.0",
    31     "@tinymce/tinymce-angular": "^4.0.0",
    3231    "moment": "^2.29.1",
    3332    "ng2-file-upload": "^1.4.0",
  • src/Clients/Angular/finki-chattery/src/app/app-routing.module.ts

    r6b0fbbe r7899209  
    66const routes: Routes = [
    77  {
     8    path: 'auth-callback',
     9    component: AuthCallbackComponent
     10  },
     11  {
    812    path: 'questioning',
    913    canActivate: [AuthorizedGuard],
    1014    loadChildren: () => import('./modules/questioning/questioning.module').then((x) => x.QuestioningModule)
    11   },
    12   {
    13     path: 'auth-callback',
    14     pathMatch: 'full',
    15     component: AuthCallbackComponent
    16   },
    17   {
    18     path: '',
    19     pathMatch: 'full',
    20     redirectTo: 'questioning/preview'
    2115  },
    2216  {
  • src/Clients/Angular/finki-chattery/src/app/core/core.module.ts

    r6b0fbbe r7899209  
    99import { SharedMaterialModule } from '../shared-material/shared-material.module';
    1010import { COMPONENTS } from './components/components';
     11import { GUARDS } from './guards/guards';
    1112import { LoaderInterceptor } from './interceptors/loader.interceptor';
    1213import { reducers } from './state';
     
    1920  declarations: [COMPONENTS],
    2021  providers: [
     22    GUARDS,
    2123    { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },
    2224    { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true }
  • src/Clients/Angular/finki-chattery/src/app/core/services/auth.service.ts

    r6b0fbbe r7899209  
    11import { Injectable } from '@angular/core';
    2 import { User, UserManager, WebStorageStateStore } from 'oidc-client';
     2import { User, UserManager } from 'oidc-client';
    33import { Observable, of } from 'rxjs';
    44
    55import { environment } from '@env/environment';
    6 import { ApplicationUser, ApplicationUserType, SelfUserResponse } from 'src/app/shared-app/models';
     6import { ApplicationUser, SelfUserResponse } from 'src/app/shared-app/models';
    77import { BaseApiService } from 'src/app/shared-app/services/base-api.service';
    88
     
    1717    response_type: 'id_token token',
    1818    scope: 'openid app.api.finki-chattery profile',
    19     post_logout_redirect_uri: window.location.origin,
    20     filterProtocolClaims: true,
    21     loadUserInfo: true,
    22     userStore: new WebStorageStateStore({ store: window.localStorage })
     19    post_logout_redirect_uri: window.location.origin
    2320  });
    2421
     
    2623  public oidcUser: User | null = null;
    2724
    28   constructor(private baseApi: BaseApiService) {
    29     this.userManager.getUser().then((user) => {
    30       this.oidcUser = user;
    31       this.user = new ApplicationUser(
    32         user?.profile.id,
    33         user?.profile.userType,
    34         user?.profile.emailAddress,
    35         user?.profile.username,
    36         user?.profile.isVerified
    37       );
    38     });
    39   }
     25  constructor(private baseApi: BaseApiService) {}
    4026
    4127  public login(): void {
     
    5238    }
    5339    return false;
    54   }
    55 
    56   public isStudent(): boolean {
    57     return this.user?.userType === ApplicationUserType.Student;
    5840  }
    5941
  • src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-components.ts

    r6b0fbbe r7899209  
    33import { QuestionsPreviewGeneralComponent } from './questions-preview-general/questions-preview-general.component';
    44import { QuestionsSearchComponent } from './questions-search/questions-search.component';
    5 import { AskQuestionComponent } from './ask-question/ask-question.component';
    65
    76export const QUESTIONING_COMPONENTS: any[] = [
     
    98  QuestionsPreviewGeneralComponent,
    109  QuestioningGeneralComponent,
    11   QuestionsSearchComponent,
    12   AskQuestionComponent
     10  QuestionsSearchComponent
    1311];
  • src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questioning-general/questioning-general.component.ts

    r6b0fbbe r7899209  
    11import { Component, OnInit } from '@angular/core';
    2 import { CategoryFacadeService } from 'src/app/core/state/category-facade.service';
    32
    43@Component({
     
    87})
    98export class QuestioningGeneralComponent implements OnInit {
    10   constructor(private categoriesFacade: CategoryFacadeService) {}
     9  constructor() {}
    1110
    12   ngOnInit(): void {
    13     this.categoriesFacade.fetchCategories();
    14   }
     11  ngOnInit(): void {}
    1512}
  • src/Clients/Angular/finki-chattery/src/app/modules/questioning/components/questions-preview-general/questions-preview-general.component.ts

    r6b0fbbe r7899209  
    1717  questionsSortByForm = new FormControl(PreviewQuestionsOrderEnum.Latest);
    1818
    19   constructor(private questionFacade: QuestionFacadeService, private router: Router) {}
     19  constructor(private categoriesFacade: CategoryFacadeService, private questionFacade: QuestionFacadeService, private router: Router) {}
    2020
    2121  ngOnInit(): void {
     22    this.categoriesFacade.fetchCategories();
    2223    this.questionFacade.fetchPreviewQuestions(PreviewQuestionsOrderEnum.Latest);
    2324    this.questionsSortByForm.valueChanges.subscribe((value: PreviewQuestionsOrderEnum) => {
  • src/Clients/Angular/finki-chattery/src/app/modules/questioning/questioning.routes.ts

    r6b0fbbe r7899209  
    55import { QuestionsPreviewGeneralComponent } from './components/questions-preview-general/questions-preview-general.component';
    66import { QuestionsSearchComponent } from './components/questions-search/questions-search.component';
    7 import { AuthorizedStudentGuard } from 'src/app/core/guards/authorized-student.guard';
    8 import { AskQuestionComponent } from './components/ask-question/ask-question.component';
    97
    108const routes: Routes = [
     
    2422      },
    2523      {
    26         path: 'ask',
    27         pathMatch: 'full',
    28         component: AskQuestionComponent,
    29         canActivate: [AuthorizedStudentGuard]
    30       },
    31       {
    3224        path: ':questionUid',
    3325        component: QuestionPreviewGeneralComponent
  • src/Clients/Angular/finki-chattery/src/app/shared-app/components/components.ts

    r6b0fbbe r7899209  
    44import { HeaderComponent } from './generic/header/header.component';
    55import { VoteComponent } from './generic/vote/vote.component';
    6 import { AskQuestionSharedComponent } from './question/ask-question-shared/ask-question-shared.component';
    76import { PreviewQuestionDisplayComponent } from './question/preview-question-display/preview-question-display.component';
    87import { QuestionPreviewComponent } from './question/question-preview/question-preview.component';
     
    1918  HeaderComponent,
    2019  SearchQuestionComponent,
    21   PreviewQuestionDisplayComponent,
    22   AskQuestionSharedComponent
     20  PreviewQuestionDisplayComponent
    2321];
  • src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.html

    r6b0fbbe r7899209  
    22  <span>FinkiChattery</span>
    33  <span class="right"></span>
    4   <app-button class="margin-y-xs" *ngIf="auth.isStudent()" (action)="askQuestion()" [buttonType]="ButtonType.CallToAction">{{
    5     'header-ask-question' | translate
    6   }}</app-button>
    7   <app-button class="margin-y-xs" *ngIf="auth.isLoggedIn()" (action)="logout()" [buttonType]="ButtonType.Basic">{{
    8     'header-logout' | translate
    9   }}</app-button>
     4  <app-button *ngIf="auth.isLoggedIn()" (action)="logout()" [buttonType]="ButtonType.CallToAction">Logout</app-button>
    105</mat-toolbar>
  • src/Clients/Angular/finki-chattery/src/app/shared-app/components/generic/header/header.component.ts

    r6b0fbbe r7899209  
    11import { Component, OnInit } from '@angular/core';
    2 import { Router } from '@angular/router';
    32import { AuthService } from 'src/app/core/services';
    43import { ButtonType } from '../button/button.models';
     
    1211  ButtonType = ButtonType;
    1312
    14   constructor(public auth: AuthService, private router: Router) {}
     13  constructor(public auth: AuthService) {}
    1514
    1615  ngOnInit(): void {}
     
    1918    this.auth.logout();
    2019  }
    21 
    22   askQuestion(): void {
    23     this.router.navigateByUrl('questioning/ask');
    24   }
    2520}
  • src/Clients/Angular/finki-chattery/src/app/shared-app/components/question/question-preview/question-preview.component.html

    r6b0fbbe r7899209  
    2020      </mat-chip-list>
    2121
    22       <editor
    23         class="margin-x-sm"
    24         [init]="{
    25           apiKey: 'fx28x0d64jeufa35u7mcd80fgveayg5c4ap9gnr6posehzny',
    26           menubar: false,
    27           plugins: ['autoresize'],
    28           toolbar: ''
    29         }"
    30         [disabled]="true"
    31         [initialValue]="question.text"
    32       ></editor>
     22      <div class="margin-top-lg" [innerHTML]="question.text"></div>
    3323      <div class="align-right">
    3424        <app-student-card
     
    5848          <app-vote [voteCount]="answer.upvotesCount" [correct]="answer.correctAnswer" fxFlex="6%"></app-vote>
    5949          <div fxFlex="92%">
    60             <editor
    61               class="margin-x-sm"
    62               [init]="{
    63                 apiKey: 'fx28x0d64jeufa35u7mcd80fgveayg5c4ap9gnr6posehzny',
    64                 menubar: false,
    65                 plugins: ['autoresize'],
    66                 toolbar: ''
    67               }"
    68               [disabled]="true"
    69               [initialValue]="answer.text"
    70             ></editor>
     50            <div [innerHTML]="answer.text"></div>
    7151            <div class="align-right">
    7252              <app-student-card
  • src/Clients/Angular/finki-chattery/src/app/shared-app/models/index.ts

    r6b0fbbe r7899209  
    44export * from './category-state-view-models.models';
    55export * from './question-state-enums.models';
    6 export * from './questioning-request.models';
  • src/Clients/Angular/finki-chattery/src/app/shared-app/shared-app.module.ts

    r6b0fbbe r7899209  
    77import { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';
    88import { FileUploadModule } from 'ng2-file-upload';
    9 import { EditorModule } from '@tinymce/tinymce-angular';
    109
    1110import { COMPONENTS } from './components/components';
     
    2625    FlexLayoutModule,
    2726    FileUploadModule,
    28     NgxMaterialTimepickerModule,
    29     EditorModule
     27    NgxMaterialTimepickerModule
    3028  ],
    3129  exports: [
     
    4038    DIRECTIVES,
    4139    PIPES,
    42     SharedMaterialModule,
    43     EditorModule
     40    SharedMaterialModule
    4441  ]
    4542})
  • src/Clients/Angular/finki-chattery/src/assets/translations/en.json

    r6b0fbbe r7899209  
    4444  "questions-preview-question-answers": "Answers",
    4545  "questions-preview-question-views": "Views",
    46   "questions-search-title": "Search results for: {{searchQuery}}",
    47   "ask-question-question-title": "Question title",
    48   "ask-question-categories": "Add categories to question",
    49   "ask-question-ask-button": "Ask question",
    50   "header-logout": "Logout",
    51   "header-ask-question": "Ask question"
     46  "questions-search-title": "Search results for: {{searchQuery}}"
    5247}
  • src/FinkiChattery/FinkiChattery.Api/Controllers/v1/QuestionsController.cs

    r6b0fbbe r7899209  
    2929        public async Task<IActionResult> AskQuestion([FromBody] AskQuestionRequest request)
    3030        {
    31             var questionUid = await MediatorService.SendAsync(new AskQuestionCommand(request.Title, request.Text, request.Categories));
    32             return Ok(questionUid);
     31            await MediatorService.SendAsync(new AskQuestionCommand(request.Title, request.Text, request.Categories));
     32            return Ok();
    3333        }
    3434
  • src/FinkiChattery/FinkiChattery.Persistence/Configurations/QuestionConfig.cs

    r6b0fbbe r7899209  
    2424            builder.Property(x => x.Views).HasColumnName(@"Views").HasColumnType("bigint").IsRequired().HasDefaultValue(0);
    2525            builder.Property(x => x.LastActiveOn).HasColumnName(@"LastActiveOn").HasColumnType("smalldatetime").IsRequired();
    26             builder.Property(x => x.Search).HasComputedColumnSql(@"Search").HasColumnType("nvarchar").ValueGeneratedOnAddOrUpdate().HasMaxLength(4000).IsRequired();
     26            builder.Property(x => x.Search).HasColumnType(@"Search").HasColumnType("nvarchar").HasMaxLength(4000).IsRequired();
    2727            builder.Property(x => x.AnswersCount).HasColumnType(@"AnswersCount").HasColumnType("bigint").IsRequired().HasDefaultValue(0);
    2828
  • src/FinkiChattery/FinkiChattery.Persistence/Models/Question.cs

    r6b0fbbe r7899209  
    11using System;
    22using System.Collections.Generic;
    3 using System.ComponentModel.DataAnnotations.Schema;
    43
    54namespace FinkiChattery.Persistence.Models
     
    3332        public DateTime LastActiveOn { get; set; }
    3433
    35         [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    3634        public string Search { get; set; }
    3735
Note: See TracChangeset for help on using the changeset viewer.