diff --git a/angular.json b/angular.json index 0a6f978..e9efa56 100644 --- a/angular.json +++ b/angular.json @@ -42,12 +42,12 @@ { "type": "initial", "maximumWarning": "500kB", - "maximumError": "1MB" + "maximumError": "100MB" }, { "type": "anyComponentStyle", "maximumWarning": "4kB", - "maximumError": "8kB" + "maximumError": "100MB" } ], "outputHashing": "all", diff --git a/public/i18n/en.json b/public/i18n/en.json index 7c20186..67c21a5 100644 --- a/public/i18n/en.json +++ b/public/i18n/en.json @@ -1,5 +1,5 @@ { - "version": "3.0 Beta 4 (April 11, 2026)", + "version": "3.0 Beta 5 (April 13, 2026)", "ok": "Ok", "back": "Back", "aChatProgram": "A messaging platform that you can trust.", @@ -104,11 +104,15 @@ "changeLogDialog": { "label": "Chatenium has been updated", "changeLog": { - "1": "Added support for text channels inside networks", - "2": "Bug fixes in message box" + "1": "Started implementing Chatenium Pictures", + "2": "Made small changes to the UI", + "3": "Minor bug fixes in message box" } }, "chatnav": { + "pictureList": { + "myPictures": "My pictures" + }, "dmList": { "newChat": "Start new chat", "messageBox": { @@ -121,6 +125,11 @@ "newNetwork": "Start new network" } }, + "pictures": { + "albumList": { + "noAlbum": "This user has no albums published" + } + }, "elements": { "messageBox": { "editMessageLabel": "Editing message: ", diff --git a/src/app/chat/dm/dm.ts b/src/app/chat/dm/dm.ts index 37e348e..3dc47af 100644 --- a/src/app/chat/dm/dm.ts +++ b/src/app/chat/dm/dm.ts @@ -61,8 +61,6 @@ export class Dm implements OnInit { } } - this.store.messageBox.editingMessage.set(null) - this.store.messageBox.message.set("") return } diff --git a/src/app/chat/elements/message-box/message-box.ts b/src/app/chat/elements/message-box/message-box.ts index 3715264..cc137a5 100644 --- a/src/app/chat/elements/message-box/message-box.ts +++ b/src/app/chat/elements/message-box/message-box.ts @@ -104,6 +104,7 @@ export class MessageBox { this.viewModel().message.set("") this.viewModel().files.set([]) this.viewModel().dialogOpen.set(false) + this.viewModel().editingMessage.set(null) } handleEnterKeydown(e: any) { diff --git a/src/app/chat/elements/oimg/oimg.scss b/src/app/chat/elements/oimg/oimg.scss index e69de29..1ab7bd3 100644 --- a/src/app/chat/elements/oimg/oimg.scss +++ b/src/app/chat/elements/oimg/oimg.scss @@ -0,0 +1,3 @@ +img { + display: block; +} diff --git a/src/app/chat/network-list/network-list.html b/src/app/chat/network-list/network-list.html index 9ba0f74..306d718 100644 --- a/src/app/chat/network-list/network-list.html +++ b/src/app/chat/network-list/network-list.html @@ -4,7 +4,7 @@ @for (network of serviceManager.networks(); track network.networkId) { @for (chat of serviceManager.chats(); track chat.chatid) { diff --git a/src/app/chat/picture/see/see.html b/src/app/chat/picture/see/see.html index 14346a4..40a1b83 100644 --- a/src/app/chat/picture/see/see.html +++ b/src/app/chat/picture/see/see.html @@ -1,10 +1,14 @@ + + + +
@defer (when store) {
- @if (store.uploaderData().displayName == "") { + @if (!store.uploaderData().displayName) { {{'@'+store.uploaderData().username}} } @else { {{store.uploaderData().displayName}} @@ -18,17 +22,39 @@
- @for (album of store.albums(); track album) { -
- - @for (file of album.images; track file) { - - } - -
-

{{album.name}}

-
+ @if (openedAlbum) { +
+ +

{{openedAlbum.name}}

+ +
+ @for (picture of openedAlbum.images; track picture) { + + } +
+ } @else { + @if (store.albums().length == 0) { + + +

{{"chat.pictures.albumList.noAlbum"|translate}}

+
+ } @else { +
+ @for (album of store.albums(); track album) { +
+ + @for (file of album.images; track file) { + + } + +
+

{{album.name}}

+
+
+ } +
+ } }
} diff --git a/src/app/chat/picture/see/see.scss b/src/app/chat/picture/see/see.scss index 2fe083d..df1bf39 100644 --- a/src/app/chat/picture/see/see.scss +++ b/src/app/chat/picture/see/see.scss @@ -31,7 +31,7 @@ main { } } - main { + #albumList { display: flex; gap: 10px; flex-wrap: wrap; @@ -45,6 +45,7 @@ main { border-radius: 30px; overflow: hidden; position: relative; + cursor: pointer; .album-name { position: absolute; @@ -66,4 +67,19 @@ main { } } } + + #pictureList { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-content: flex-start; + overflow-y: scroll; + + oimg { + background: var(--tui-background-base-alt); + height: 200px; + border-radius: 25px; + cursor: pointer; + } + } } diff --git a/src/app/chat/picture/see/see.ts b/src/app/chat/picture/see/see.ts index 2dd663c..bdf4b89 100644 --- a/src/app/chat/picture/see/see.ts +++ b/src/app/chat/picture/see/see.ts @@ -1,12 +1,17 @@ import {Component, inject, signal} from '@angular/core'; import {DmStorage, PictureStorage, ServiceManager} from '../../../service-manager'; -import {ActivatedRoute} from '@angular/router'; +import {ActivatedRoute, Router} from '@angular/router'; import {IndexedDB} from '../../../storage/indexed-db'; -import {TUI_BREAKPOINT, TuiButton, TuiIcon} from '@taiga-ui/core'; +import {TUI_BREAKPOINT, TuiButton, TuiDialog, TuiIcon} from '@taiga-ui/core'; import {PictureService} from '@chatenium/chatenium-sdk/services/pictureService'; import {Navbar} from '../../elements/navbar/navbar'; import {Oimg} from '../../elements/oimg/oimg'; import {Masonry} from '../../elements/masonry/masonry'; +import {Album, Image} from '@chatenium/chatenium-sdk/domain/pictureService.schema'; +import {pictureHandlers} from '@chatenium/chatenium-sdk/mocks/handlers/picture.http'; +import {TuiBlockStatusComponent} from '@taiga-ui/layout'; +import {TranslatePipe} from '@ngx-translate/core'; +import {TuiBadgedContentDirective} from '@taiga-ui/kit'; @Component({ selector: 'app-see', @@ -15,7 +20,11 @@ import {Masonry} from '../../elements/masonry/masonry'; Oimg, TuiButton, TuiIcon, - Masonry + Masonry, + TuiDialog, + TuiBlockStatusComponent, + TranslatePipe, + TuiBadgedContentDirective ], templateUrl: './see.html', styleUrl: './see.scss', @@ -25,13 +34,50 @@ export class See { route = inject(ActivatedRoute) indexedDb = inject(IndexedDB) breakpoint = inject(TUI_BREAKPOINT) + router = inject(Router) uploaderId = "" + openedAlbum: Album | null = null + + viewedPicture: Image | null = null + get viewerOpen() { + return this.viewedPicture != null + } + set viewerOpen(_: any) { + this.viewedPicture = null + this.router.navigate([], { + queryParams: { pictureId: null }, + queryParamsHandling: "merge" + }) + } get store(): PictureStorage { return this.serviceManager.pictureServices()[this.uploaderId] } + enterAlbum(albumId: string) { + this.router.navigate([], { + queryParams: { albumId: albumId }, + queryParamsHandling: "merge" + }) + } + + exitAlbum() { + this.openedAlbum = null + this.router.navigate([], { + queryParams: { albumId: null }, + queryParamsHandling: "merge" + }) + } + + viewPicture(picture: Image) { + this.viewedPicture = picture + this.router.navigate([], { + queryParams: { pictureId: picture.imageId }, + queryParamsHandling: "merge" + }) + } + ngOnInit() { this.route.params.subscribe(async params => { const uploaderId = params['uploaderId']; @@ -60,7 +106,28 @@ export class See { service: newService, } as PictureStorage })); + + // Show album + this.route.queryParams.subscribe(params => { + const albumId = params['albumId']; + if (albumId) { + const album = uploaderInfo.pictures.find(a => a.albumId === albumId) + if (album) { + this.openedAlbum = album + + const pictureId = params['pictureId']; + if (pictureId) { + const picture = album.images.find(img => img.imageId === pictureId) + if (picture) { + this.viewedPicture = picture + } + } + } + } + }) } }); } + + protected readonly pictureHandlers = pictureHandlers; } diff --git a/src/environments/environment.development.ts b/src/environments/environment.development.ts index cd19820..a9fa792 100644 --- a/src/environments/environment.development.ts +++ b/src/environments/environment.development.ts @@ -1,5 +1,5 @@ export const environment = { - version: "3.0-beta4", + version: "3.0-beta5", api_url: "http://localhost:3000", cdn_url: "http://localhost:4000", ws_url: "ws://localhost:3000", diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 00ce2f0..e69ecbf 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -1,5 +1,5 @@ export const environment = { - version: "3.0-beta4", + version: "3.0-beta5", api_url: "https://api.chatenium.hu", cdn_url: "https://cdn.chatenium.hu", ws_url: "wss://api.chatenium.hu",