diff --git a/package-lock.json b/package-lock.json index fcee6cc5c..a97afc894 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,10 +21,7 @@ "@capacitor/core": "5.0.5", "@capacitor/ios": "5.0.5", "@elastic/elasticsearch": "~8.4.0", - "@ionic-native/core": "^5.36.0", - "@ionic-native/splash-screen": "^5.36.0", - "@ionic-native/status-bar": "^5.36.0", - "@ionic/angular": "6.7.5", + "@ionic/angular": "^7.5.5", "@julianpoy/recipe-clipper": "^2.4.0", "@ngx-loading-bar/core": "^6.0.2", "@ngx-translate/core": "^14.0.0", @@ -83,6 +80,7 @@ "sqlite3": "^5.1.5", "stripe": "^11.9.1", "superjson": "^1.12.3", + "swiper": "^11.0.4", "ts-dedent": "^2.2.0", "tsconfig-paths": "^4.2.0", "tslib": "^2.5.0", @@ -191,15 +189,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/build-angular": { "version": "16.2.5", "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.5.tgz", @@ -778,15 +767,6 @@ "node": ">=12" } }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -869,15 +849,6 @@ } } }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/core": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.0.tgz", @@ -904,15 +875,6 @@ } } }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/schematics": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.0.tgz", @@ -931,15 +893,6 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-eslint/builder": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", @@ -6987,56 +6940,21 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, - "node_modules/@ionic-native/core": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.36.0.tgz", - "integrity": "sha512-lOrkktadlKYbYf1LrDyAtsu1JnQ0oCCdkOU7iHQ8oXnNOkMwobFfD2m62F1CoOr0u9LIkpYnZSPjng8lZbmbNw==", - "dependencies": { - "@types/cordova": "latest" - }, - "peerDependencies": { - "rxjs": "^5.5.0 || ^6.5.0" - } - }, - "node_modules/@ionic-native/splash-screen": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-5.36.0.tgz", - "integrity": "sha512-BfNknY1rrGE8JRnCdKfL5wz8yFLhpPU5FRr8/LA3L+EncvPvcb9LGidePoeH3gVLMkolm2DI2a/rCelNrJ1Sxw==", - "dependencies": { - "@types/cordova": "latest" - }, - "peerDependencies": { - "@ionic-native/core": "^5.1.0", - "rxjs": "^5.5.0 || ^6.5.0" - } - }, - "node_modules/@ionic-native/status-bar": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-5.36.0.tgz", - "integrity": "sha512-OXC1z+4Iba4lo1dc2+0h4Gvpud3z0XQmEbw0ny9UflCuSkLqBxvmiNRU7CRQwPnT1KaGVXkaSokdwxO8H9IlNg==", - "dependencies": { - "@types/cordova": "latest" - }, - "peerDependencies": { - "@ionic-native/core": "^5.1.0", - "rxjs": "^5.5.0 || ^6.5.0" - } - }, "node_modules/@ionic/angular": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-6.7.5.tgz", - "integrity": "sha512-nV8HP7RedjYkIAT8nVr5ifHNT0D3XzA74RPG3/WCCFJKunERNJ9SBiNkCTWhUpSkqsYYwEB4+SOOHz+R5NLk/w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-7.5.5.tgz", + "integrity": "sha512-/xt9a37BJodduF6+tyhP7KYb8UEw1bRo9CXnWrSS1C8lC+erNKZP+cdFgupPxNUfWisyIDrRrZswPB8fNXUM0w==", "dependencies": { - "@ionic/core": "6.7.5", - "ionicons": "^6.1.3", + "@ionic/core": "7.5.5", + "ionicons": "^7.0.0", "jsonc-parser": "^3.0.0", - "tslib": "^2.0.0" + "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/core": ">=12.0.0", - "@angular/forms": ">=12.0.0", - "@angular/router": ">=12.0.0", - "rxjs": ">=6.6.0", + "@angular/core": ">=14.0.0", + "@angular/forms": ">=14.0.0", + "@angular/router": ">=14.0.0", + "rxjs": ">=7.5.0", "zone.js": ">=0.11.0" } }, @@ -7123,6 +7041,24 @@ "node": ">=12" } }, + "node_modules/@ionic/angular-toolkit/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@ionic/angular-toolkit/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@ionic/cli": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@ionic/cli/-/cli-7.1.1.tgz", @@ -7300,6 +7236,24 @@ "node": ">=8.0.0" } }, + "node_modules/@ionic/cli-framework-prompts/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@ionic/cli-framework-prompts/node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@ionic/cli-framework-prompts/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7469,12 +7423,12 @@ } }, "node_modules/@ionic/core": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.7.5.tgz", - "integrity": "sha512-zRkRn+h/Vs3xt/EVgBdShMKDyeGOM4RU31NPF2icfu3CUTH+VrMV569MUnNjYvd1Lu2xK90pYy4TaicSWmC1Pw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.5.5.tgz", + "integrity": "sha512-7Rn3OUz8QCob7yMuCLs5dVLpChscNCm+OqH8lqTzy3N/8VSKHLNPHIHTIa4DQm9HwjtpOB+XCTeIqbdWHkLgnA==", "dependencies": { - "@stencil/core": "^2.18.0", - "ionicons": "^6.1.3", + "@stencil/core": "^4.7.2", + "ionicons": "^7.2.1", "tslib": "^2.1.0" } }, @@ -9685,15 +9639,6 @@ "node": ">=8" } }, - "node_modules/@nx/workspace/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@nx/workspace/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10696,15 +10641,15 @@ } }, "node_modules/@stencil/core": { - "version": "2.22.3", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.22.3.tgz", - "integrity": "sha512-kmVA0M/HojwsfkeHsifvHVIYe4l5tin7J5+DLgtl8h6WWfiMClND5K3ifCXXI2ETDNKiEk21p6jql3Fx9o2rng==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.7.2.tgz", + "integrity": "sha512-sPPDYrXiTbfeUF5CCyfqysXK/yfTHC4xYR1+nHzGkS2vhRSBOLp0oPuB+xkJLKA+K2ZqDJUxpOnDxy1CLWwBXA==", "bin": { "stencil": "bin/stencil" }, "engines": { - "node": ">=12.10.0", - "npm": ">=6.0.0" + "node": ">=16.0.0", + "npm": ">=7.10.0" } }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -11134,11 +11079,6 @@ "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", "dev": true }, - "node_modules/@types/cordova": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-11.0.0.tgz", - "integrity": "sha512-AtBm1IAqqXsXszJe6XxuA2iXLhraNCj25p/FHRyikPeW0Z3YfgM6qzWb+VJglJTmZc5lqRNy84cYM/sQI5v6Vw==" - }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -21168,15 +21108,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -21228,11 +21159,11 @@ } }, "node_modules/ionicons": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-6.1.3.tgz", - "integrity": "sha512-ptzz38dd/Yq+PgjhXegh7yhb/SLIk1bvL9vQDtLv1aoSc7alO6mX2DIMgcKYzt9vrNWkRu1f9Jr78zIFFyOXqw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", + "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", "dependencies": { - "@stencil/core": "^2.18.0" + "@stencil/core": "^4.0.3" } }, "node_modules/ip": { @@ -25264,15 +25195,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -30924,21 +30846,13 @@ } }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/s3fs": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/s3fs/-/s3fs-2.5.0.tgz", @@ -33898,6 +33812,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swiper": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.0.4.tgz", + "integrity": "sha512-qtUxILrD4aD++rpKzGrkz3IAWL92f9uTrDwjb6HaNLmPvJhZCE/83DL+9w4kIgDDJeF6QKalV47rMBN77UOVYQ==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -38280,6 +38212,18 @@ "node": ">=8.0.0" } }, + "node_modules/workbox-cli/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, "node_modules/workbox-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -38292,6 +38236,12 @@ "node": ">=8" } }, + "node_modules/workbox-cli/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/workbox-core": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", diff --git a/package.json b/package.json index ca06e02f4..d6088e786 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,7 @@ "@capacitor/core": "5.0.5", "@capacitor/ios": "5.0.5", "@elastic/elasticsearch": "~8.4.0", - "@ionic-native/core": "^5.36.0", - "@ionic-native/splash-screen": "^5.36.0", - "@ionic-native/status-bar": "^5.36.0", - "@ionic/angular": "6.7.5", + "@ionic/angular": "^7.5.5", "@julianpoy/recipe-clipper": "^2.4.0", "@ngx-loading-bar/core": "^6.0.2", "@ngx-translate/core": "^14.0.0", @@ -81,6 +78,7 @@ "sqlite3": "^5.1.5", "stripe": "^11.9.1", "superjson": "^1.12.3", + "swiper": "^11.0.4", "ts-dedent": "^2.2.0", "tsconfig-paths": "^4.2.0", "tslib": "^2.5.0", diff --git a/packages/frontend/src/app/app.component.ts b/packages/frontend/src/app/app.component.ts index d874d4bdf..8e70ad1ce 100644 --- a/packages/frontend/src/app/app.component.ts +++ b/packages/frontend/src/app/app.component.ts @@ -9,8 +9,9 @@ import { AlertController, NavController, } from "@ionic/angular"; -import { SplashScreen } from "@ionic-native/splash-screen/ngx"; -import { StatusBar } from "@ionic-native/status-bar/ngx"; + +import { register } from "swiper/element/bundle"; +register(); import { ENABLE_ANALYTICS, IS_SELFHOST } from "../environments/environment"; @@ -69,8 +70,6 @@ export class AppComponent { private route: ActivatedRoute, private router: Router, private platform: Platform, - private splashScreen: SplashScreen, - private statusBar: StatusBar, private menuCtrl: MenuController, private events: EventService, private toastCtrl: ToastController, @@ -486,8 +485,6 @@ export class AppComponent { initializeApp() { this.platform.ready().then(() => { - this.statusBar.styleDefault(); - this.splashScreen.hide(); this.menuCtrl.close(); }); diff --git a/packages/frontend/src/app/app.module.ts b/packages/frontend/src/app/app.module.ts index f1ed2aaf6..7bfebc25a 100644 --- a/packages/frontend/src/app/app.module.ts +++ b/packages/frontend/src/app/app.module.ts @@ -4,8 +4,6 @@ import { HttpClientModule, HttpClient } from "@angular/common/http"; import { RouteReuseStrategy } from "@angular/router"; import { IonicModule, IonicRouteStrategy } from "@ionic/angular"; -import { SplashScreen } from "@ionic-native/splash-screen/ngx"; -import { StatusBar } from "@ionic-native/status-bar/ngx"; import { TranslateModule, TranslateLoader } from "@ngx-translate/core"; import { TranslateHttpLoader } from "@ngx-translate/http-loader"; @@ -120,8 +118,6 @@ export class SentryErrorHandler extends ErrorHandler { ], providers: [ { provide: ErrorHandler, useClass: SentryErrorHandler }, - StatusBar, - SplashScreen, { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, DefaultPageGuardService, UnsavedChangesGuardService, diff --git a/packages/frontend/src/app/modals/image-viewer/image-viewer.component.html b/packages/frontend/src/app/modals/image-viewer/image-viewer.component.html index 57ba04055..ecacfdd44 100644 --- a/packages/frontend/src/app/modals/image-viewer/image-viewer.component.html +++ b/packages/frontend/src/app/modals/image-viewer/image-viewer.component.html @@ -12,18 +12,23 @@ - - + +
-
-
+ + diff --git a/packages/frontend/src/app/modals/image-viewer/image-viewer.component.scss b/packages/frontend/src/app/modals/image-viewer/image-viewer.component.scss index 06f4eb84b..4b6b8ce1c 100644 --- a/packages/frontend/src/app/modals/image-viewer/image-viewer.component.scss +++ b/packages/frontend/src/app/modals/image-viewer/image-viewer.component.scss @@ -1,5 +1,5 @@ ion-content { - ion-slides { + swiper-container { height: 100%; } diff --git a/packages/frontend/src/app/modals/image-viewer/image-viewer.component.ts b/packages/frontend/src/app/modals/image-viewer/image-viewer.component.ts index 61b927510..be4d3a24a 100644 --- a/packages/frontend/src/app/modals/image-viewer/image-viewer.component.ts +++ b/packages/frontend/src/app/modals/image-viewer/image-viewer.component.ts @@ -1,5 +1,7 @@ import { Component, ElementRef, Input, ViewChild } from "@angular/core"; -import { ModalController } from "@ionic/angular"; +import { IonicSlides, ModalController } from "@ionic/angular"; +import { SwiperContainer } from "swiper/element"; +import { Swiper } from "swiper/types"; @Component({ selector: "image-viewer", @@ -12,18 +14,33 @@ export class ImageViewerComponent { }) imageUrls!: string[]; - @ViewChild("slider", { static: true }) slider?: any; + @ViewChild("swiperContainer", { static: true }) swiperContainer?: ElementRef; slideNum = 0; + swiperModules = [IonicSlides]; + constructor(private modalCtrl: ModalController) {} ionViewWillEnter() { - this.slider?.update(); + const swiper = this.getSwiperInstance(); + + swiper.update(); + swiper.on("slideChange", () => { + this.slideDidChange(); + }); + } + + getSwiperInstance(): Swiper { + return this.swiperContainer?.nativeElement.swiper; } async slideDidChange() { - const slideNum = await this.slider?.getActiveIndex(); + const swiper = this.getSwiperInstance(); + + const slideNum = swiper?.activeIndex; + if (typeof slideNum !== "number") return; + this.slideNum = slideNum; } diff --git a/packages/frontend/src/app/modals/image-viewer/image-viewer.module.ts b/packages/frontend/src/app/modals/image-viewer/image-viewer.module.ts index ae1e44158..cacef1568 100644 --- a/packages/frontend/src/app/modals/image-viewer/image-viewer.module.ts +++ b/packages/frontend/src/app/modals/image-viewer/image-viewer.module.ts @@ -1,4 +1,4 @@ -import { NgModule } from "@angular/core"; +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { CommonModule } from "@angular/common"; import { IonicModule } from "@ionic/angular"; @@ -6,6 +6,7 @@ import { ImageViewerComponent } from "./image-viewer.component"; import { GlobalModule } from "~/global.module"; @NgModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], declarations: [ImageViewerComponent], imports: [CommonModule, IonicModule, GlobalModule], exports: [ImageViewerComponent],