Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { NgModule, CUSTOM_ELEMENTS_SCHEMA, APP_INITIALIZER } from '@angular/core';
import { NgModule, CUSTOM_ELEMENTS_SCHEMA, inject, provideAppInitializer } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { provideHttpClient } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { CommonModule } from '@angular/common';
Expand All @@ -11,7 +11,7 @@ import {
TranslateModule,
TranslateService,
} from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { TranslateHttpLoader, TRANSLATE_HTTP_LOADER_CONFIG } from '@ngx-translate/http-loader';
import { CoreModule } from './core/core.module';
import { Drivers, Storage } from '@ionic/storage';
import { IonicStorageModule } from '@ionic/storage-angular';
Expand All @@ -27,9 +27,6 @@ import { FrontendChatLibraryModule } from 'sl-chat-library';
import { MatToolbarModule } from '@angular/material/toolbar';
import { translateFactory } from './shared/components/translationFactory';
import { LocalStorageService } from './core/services';
export const translateHttpLoaderFactory = (httpClient: HttpClient) =>
new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');

@NgModule({
declarations: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
Expand All @@ -38,7 +35,6 @@ export const translateHttpLoaderFactory = (httpClient: HttpClient) =>
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
HttpClientModule,
MatTableModule,
MatPaginatorModule,
IonicStorageModule.forRoot({
Expand All @@ -49,8 +45,7 @@ export const translateHttpLoaderFactory = (httpClient: HttpClient) =>
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: translateHttpLoaderFactory,
deps: [HttpClient],
useClass: TranslateHttpLoader,
},
}),
ReactiveFormsModule,
Expand All @@ -68,14 +63,19 @@ export const translateHttpLoaderFactory = (httpClient: HttpClient) =>
exports: [],
providers: [
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
{
provide: TRANSLATE_HTTP_LOADER_CONFIG,
useValue: { prefix: './assets/i18n/', suffix: '.json' }
},
TitleCasePipe,
SwUpdate,
{
provide: APP_INITIALIZER,
useFactory: translateFactory,
deps: [TranslateService, LocalStorageService],
multi: true
}
provideHttpClient(),
provideAppInitializer(() => {
const translateService = inject(TranslateService);
const localStorageService = inject(LocalStorageService);

return translateFactory(translateService, localStorageService)();
}),
],
bootstrap: [AppComponent],
})
Expand Down
16 changes: 9 additions & 7 deletions src/app/modules/private/private.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@ import { FormsModule } from '@angular/forms';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { PrivatePage } from './private.page';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { HttpClient } from '@angular/common/http';
import { TranslateHttpLoader, TRANSLATE_HTTP_LOADER_CONFIG } from '@ngx-translate/http-loader';
import { RouteReuseStrategy } from '@angular/router';
import { PrivatePageRoutingModule } from './private-routing.module';
import { SharedModule } from 'src/app/shared/shared.module';
export const translateHttpLoaderFactory = (httpClient: HttpClient) =>
new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');
@NgModule({
declarations: [PrivatePage],
imports: [
Expand All @@ -21,12 +18,17 @@ export const translateHttpLoaderFactory = (httpClient: HttpClient) =>
TranslateModule.forChild({
loader: {
provide: TranslateLoader,
useFactory: translateHttpLoaderFactory,
deps: [HttpClient],
useClass: TranslateHttpLoader,
},
}),
SharedModule,
],
providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
providers: [
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
{
provide: TRANSLATE_HTTP_LOADER_CONFIG,
useValue: { prefix: './assets/i18n/', suffix: '.json' }
},
],
})
export class PrivatePageModule {}
135 changes: 67 additions & 68 deletions src/app/pages/chat-request/chat-request.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,92 +4,91 @@
<ion-back-button defaultHref="/home"></ion-back-button>
</ion-buttons>
<ion-buttons slot="start">
@let details = userDetails();
<div class="flex-box" (click)="goToProfile()">
<img
[src]="info?.user_details?.image || 'assets/prof-img/user.png'"
[src]="profileImage()"
alt="Profile Picture"
class="profile-pic"
/>
<div class="d-flex flex-column">
<span class="name-text">{{info?.user_details?.name}}</span>
<span style="font-size: 12px"
>{{info?.user_details?.user_roles}}</span
>
<span class="name-text">{{details?.name}}</span>
<span style="font-size: 12px">{{details?.user_roles}}</span>
</div>
</div>
</ion-buttons>
</ion-toolbar>
</ion-header>

<ion-content class="chat-window">
<div *ngIf="info.status != 'ACCEPTED'">
<div class="chat-card">
<div
class="d-flex flex-align-items-flex-end"
*ngIf="info?.status == 'REQUESTED'"
>
<img
[src]="info?.user_details?.image || 'assets/prof-img/user.png'"
alt="Profile Picture"
class="chat-pic"
/>
<div class="chat-card-content">
{{info?.meta?.message}}
<span> {{info.created_at | date : 'hh:mm a'}} </span>
</div>

</div>
</div>
<div
class="message-info"
[ngStyle]="{'bottom': info.hasOwnProperty('created_by') && info.created_by != info.user_id ? '20px' : '100px'}"
>
<div class="flex flex-justify-center" *ngIf="messages[info?.status]">
<div class="info-container">
<ion-icon name="information-circle"></ion-icon>
<span>
{{ messages[info?.status]?.title | translate: { name:
info?.user_details?.name } }}
</span>
<p>
{{ messages[info?.status]?.subText | translate: { name:
info?.user_details?.name } }}
</p>
</div>
@let currentStatus = status();
@if (currentStatus !== 'ACCEPTED') {
<div>
<div class="chat-card">
@if (currentStatus === 'REQUESTED') {
<div class="d-flex flex-align-items-flex-end">
<img
[src]="profileImage()"
alt="Profile Picture"
class="chat-pic"
/>
<div class="chat-card-content">
{{info()?.meta?.message}}
<span> {{info().created_at | date : 'hh:mm a'}} </span>
</div>
</div>
}
</div>
<div
class="action-buttons"
*ngIf="info?.status != 'REJECTED' && info.created_by != info.user_id"
class="message-info"
[style.bottom]="messageInfoBottom()"
>
<ion-button size="medium" color="light" (click)="acceptRequest()">
<ion-icon name="checkmark-outline" color="success"></ion-icon>
{{'ACCEPT' | translate}}
</ion-button>
<ion-button size="medium" color="light" (click)="rejectConfirmation()">
<ion-icon name="close-outline" color="danger"></ion-icon> {{'REJECT' |
translate}}
</ion-button>
@if (statusMessage(); as msg) {
<div class="flex flex-justify-center">
<div class="info-container">
<ion-icon name="information-circle"></ion-icon>
<span>
{{ msg.title | translate: { name: userDetails()?.name } }}
</span>
<p>
{{ msg.subText | translate: { name: userDetails()?.name } }}
</p>
</div>
</div>
}
@if (showCurrentStatusActions()) {
<div class="action-buttons">
<ion-button size="medium" color="light" (click)="acceptRequest()">
<ion-icon name="checkmark-outline" color="success"></ion-icon>
{{'ACCEPT' | translate}}
</ion-button>
<ion-button size="medium" color="light" (click)="rejectConfirmation()">
<ion-icon name="close-outline" color="danger"></ion-icon>
{{'REJECT' | translate}}
</ion-button>
</div>
}
</div>
</div>
</div>
}
</ion-content>
<div
*ngIf="info.created_by === info.user_id && info.status != 'ACCEPTED'"
style="background-color: white;"
>
<div>
<div class="msg-limit"> {{message?.length}} / {{messageLimit}}
</div>
<div class="p-3 border-t flex items-center psfixed">
<input type="text" [(ngModel)]="message" placeholder="Type a message..."
class="flex-1 border rounded-full px-4 py-3 text-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
(keyup.enter)="sendRequest()" />
@if (showMessageInput()) {
<div style="background-color: white;">
<div>
<div class="msg-limit"> {{message()?.length}} / {{messageLimit}}
</div>
<div class="p-3 border-t flex items-center psfixed">
<input type="text" [ngModel]="message()" (ngModelChange)="message.set($event)" placeholder="{{'TYPE_MESSAGE_HERE' | translate}}"
class="flex-1 border rounded-full px-4 py-3 text-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
(keyup.enter)="sendRequest()" />
<ion-fab-button
size="small"
(click)="sendRequest()"
style="width: 50px; height: 45px"
>
<ion-icon name="send" style="padding: 10px"></ion-icon>
</ion-fab-button>
size="small"
(click)="sendRequest()"
style="width: 50px; height: 45px"
>
<ion-icon name="send" style="padding: 10px"></ion-icon>
</ion-fab-button>
</div>
</div>
</div>
</div>
}
Loading
Loading