mirror of
https://github.com/CaramelFur/Picsur.git
synced 2025-11-02 18:25:48 +01:00
Remove more deprecated dependencies
This commit is contained in:
@@ -35,7 +35,7 @@
|
|||||||
"@nestjs/serve-static": "^4.0.2",
|
"@nestjs/serve-static": "^4.0.2",
|
||||||
"@nestjs/throttler": "^6.2.1",
|
"@nestjs/throttler": "^6.2.1",
|
||||||
"@nestjs/typeorm": "^10.0.2",
|
"@nestjs/typeorm": "^10.0.2",
|
||||||
"bcrypt": "^5.1.1",
|
"bcrypt-ts": "^5.0.2",
|
||||||
"bmp-img": "^1.3.0",
|
"bmp-img": "^1.3.0",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"fastify": "^4.28.1",
|
"fastify": "^4.28.1",
|
||||||
@@ -65,7 +65,6 @@
|
|||||||
"@nestjs/cli": "^10.4.5",
|
"@nestjs/cli": "^10.4.5",
|
||||||
"@nestjs/schematics": "^10.2.3",
|
"@nestjs/schematics": "^10.2.3",
|
||||||
"@nestjs/testing": "^10.4.6",
|
"@nestjs/testing": "^10.4.6",
|
||||||
"@types/bcrypt": "^5.0.2",
|
|
||||||
"@types/cors": "^2.8.17",
|
"@types/cors": "^2.8.17",
|
||||||
"@types/ms": "^0.7.34",
|
"@types/ms": "^0.7.34",
|
||||||
"@types/multer": "^1.4.12",
|
"@types/multer": "^1.4.12",
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { Injectable, Logger } from '@nestjs/common';
|
import { Injectable, Logger } from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import * as bcrypt from 'bcrypt';
|
import * as bcrypt from 'bcrypt-ts';
|
||||||
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
|
import { SysPreference } from 'picsur-shared/dist/dto/sys-preferences.enum';
|
||||||
import {
|
import {
|
||||||
AsyncFailable,
|
AsyncFailable,
|
||||||
Fail,
|
Fail,
|
||||||
FT,
|
FT,
|
||||||
HasFailed,
|
HasFailed,
|
||||||
HasSuccess,
|
HasSuccess,
|
||||||
} from 'picsur-shared/dist/types/failable';
|
} from 'picsur-shared/dist/types/failable';
|
||||||
import { FindResult } from 'picsur-shared/dist/types/find-result';
|
import { FindResult } from 'picsur-shared/dist/types/find-result';
|
||||||
import { makeUnique } from 'picsur-shared/dist/util/unique';
|
import { makeUnique } from 'picsur-shared/dist/util/unique';
|
||||||
@@ -15,13 +15,13 @@ import { Repository } from 'typeorm';
|
|||||||
import { EUserBackend } from '../../database/entities/users/user.entity.js';
|
import { EUserBackend } from '../../database/entities/users/user.entity.js';
|
||||||
import { Permissions } from '../../models/constants/permissions.const.js';
|
import { Permissions } from '../../models/constants/permissions.const.js';
|
||||||
import {
|
import {
|
||||||
DefaultRolesList,
|
DefaultRolesList,
|
||||||
SoulBoundRolesList,
|
SoulBoundRolesList,
|
||||||
} from '../../models/constants/roles.const.js';
|
} from '../../models/constants/roles.const.js';
|
||||||
import {
|
import {
|
||||||
ImmutableUsersList,
|
ImmutableUsersList,
|
||||||
LockedLoginUsersList,
|
LockedLoginUsersList,
|
||||||
UndeletableUsersList,
|
UndeletableUsersList,
|
||||||
} from '../../models/constants/special-users.const.js';
|
} from '../../models/constants/special-users.const.js';
|
||||||
import { GetCols } from '../../util/collection.js';
|
import { GetCols } from '../../util/collection.js';
|
||||||
import { SysPreferenceDbService } from '../preference-db/sys-preference-db.service.js';
|
import { SysPreferenceDbService } from '../preference-db/sys-preference-db.service.js';
|
||||||
|
|||||||
@@ -17,21 +17,18 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-builders/custom-webpack": "^18.0.0",
|
"@angular-builders/custom-webpack": "^18.0.0",
|
||||||
"@angular-devkit/build-angular": "^18.2.10",
|
"@angular-devkit/build-angular": "^18.2.10",
|
||||||
"@angular/animations": "^18.2.9",
|
"@angular/animations": "^18.2.10",
|
||||||
"@angular/cdk": "^18.2.10",
|
"@angular/cdk": "^18.2.10",
|
||||||
"@angular/cli": "^18.2.10",
|
"@angular/cli": "^18.2.10",
|
||||||
"@angular/common": "^18.2.9",
|
"@angular/common": "^18.2.10",
|
||||||
"@angular/compiler": "^18.2.9",
|
"@angular/compiler": "^18.2.10",
|
||||||
"@angular/compiler-cli": "^18.2.9",
|
"@angular/compiler-cli": "^18.2.10",
|
||||||
"@angular/core": "^18.2.9",
|
"@angular/core": "^18.2.10",
|
||||||
"@angular/forms": "^18.2.9",
|
"@angular/forms": "^18.2.10",
|
||||||
"@angular/material": "^18.2.10",
|
"@angular/material": "^18.2.10",
|
||||||
"@angular/platform-browser": "^18.2.9",
|
"@angular/platform-browser": "^18.2.10",
|
||||||
"@angular/platform-browser-dynamic": "^18.2.9",
|
"@angular/platform-browser-dynamic": "^18.2.10",
|
||||||
"@angular/router": "^18.2.9",
|
"@angular/router": "^18.2.10",
|
||||||
"@babel/cli": "^7.25.9",
|
|
||||||
"@babel/core": "^7.26.0",
|
|
||||||
"@babel/preset-env": "^7.26.0",
|
|
||||||
"@fontsource/roboto": "^5.1.0",
|
"@fontsource/roboto": "^5.1.0",
|
||||||
"@leteu/jwt-decoder": "^1.0.4",
|
"@leteu/jwt-decoder": "^1.0.4",
|
||||||
"@ng-web-apis/common": "^4.11.1",
|
"@ng-web-apis/common": "^4.11.1",
|
||||||
@@ -51,7 +48,6 @@
|
|||||||
"fuse.js": "^7.0.0",
|
"fuse.js": "^7.0.0",
|
||||||
"material-icons": "^1.13.12",
|
"material-icons": "^1.13.12",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"ng-mat-select-infinite-scroll": "^4.0.0",
|
|
||||||
"ngx-auto-unsubscribe-decorator": "^1.1.0",
|
"ngx-auto-unsubscribe-decorator": "^1.1.0",
|
||||||
"ngx-moment": "^6.0.2",
|
"ngx-moment": "^6.0.2",
|
||||||
"picsur-shared": "workspace:^",
|
"picsur-shared": "workspace:^",
|
||||||
@@ -62,7 +58,7 @@
|
|||||||
"webpack": "^5.95.0",
|
"webpack": "^5.95.0",
|
||||||
"webpack-bundle-analyzer": "^4.10.2",
|
"webpack-bundle-analyzer": "^4.10.2",
|
||||||
"zod": "^3.23.8",
|
"zod": "^3.23.8",
|
||||||
"zone.js": "~0.14.0"
|
"zone.js": "~0.14.10"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ngx-dropzone/cdk": "^18.1.1"
|
"@ngx-dropzone/cdk": "^18.1.1"
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
import {
|
||||||
|
AfterViewInit,
|
||||||
|
Directive,
|
||||||
|
EventEmitter,
|
||||||
|
Input,
|
||||||
|
NgZone,
|
||||||
|
OnDestroy,
|
||||||
|
OnInit,
|
||||||
|
Output,
|
||||||
|
} from '@angular/core';
|
||||||
|
import { MatSelect } from '@angular/material/select';
|
||||||
|
import { fromEvent, Subject } from 'rxjs';
|
||||||
|
import { debounceTime, takeUntil, tap } from 'rxjs/operators';
|
||||||
|
|
||||||
|
/** The height of the select items in `em` units. */
|
||||||
|
const SELECT_ITEM_HEIGHT_EM = 3;
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[msInfiniteScroll]',
|
||||||
|
})
|
||||||
|
export class MatSelectInfiniteScrollDirective
|
||||||
|
implements OnInit, OnDestroy, AfterViewInit
|
||||||
|
{
|
||||||
|
@Input() threshold = '15%';
|
||||||
|
@Input() debounceTime = 150;
|
||||||
|
@Input() complete!: boolean;
|
||||||
|
@Output() infiniteScroll = new EventEmitter<void>();
|
||||||
|
|
||||||
|
private panel!: Element;
|
||||||
|
private thrPx = 0;
|
||||||
|
private thrPc = 0;
|
||||||
|
private singleOptionHeight = SELECT_ITEM_HEIGHT_EM;
|
||||||
|
|
||||||
|
private destroyed$ = new Subject<boolean>();
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private matSelect: MatSelect,
|
||||||
|
private ngZone: NgZone,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.evaluateThreshold();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.matSelect.openedChange
|
||||||
|
.pipe(takeUntil(this.destroyed$))
|
||||||
|
.subscribe((opened) => {
|
||||||
|
if (opened) {
|
||||||
|
this.panel = this.matSelect.panel.nativeElement;
|
||||||
|
this.singleOptionHeight = this.getSelectItemHeightPx();
|
||||||
|
this.registerScrollListener();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy() {
|
||||||
|
this.destroyed$.next(true);
|
||||||
|
this.destroyed$.complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
evaluateThreshold() {
|
||||||
|
if (this.threshold.lastIndexOf('%') > -1) {
|
||||||
|
this.thrPx = 0;
|
||||||
|
this.thrPc = parseFloat(this.threshold) / 100;
|
||||||
|
} else {
|
||||||
|
this.thrPx = parseFloat(this.threshold);
|
||||||
|
this.thrPc = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
registerScrollListener() {
|
||||||
|
fromEvent(this.panel, 'scroll')
|
||||||
|
.pipe(
|
||||||
|
takeUntil(this.destroyed$),
|
||||||
|
debounceTime(this.debounceTime),
|
||||||
|
tap((event) => {
|
||||||
|
this.handleScrollEvent(event);
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.subscribe();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleScrollEvent(event: any) {
|
||||||
|
this.ngZone.runOutsideAngular(() => {
|
||||||
|
if (this.complete) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const countOfRenderedOptions = this.matSelect.options.length;
|
||||||
|
const infiniteScrollDistance =
|
||||||
|
this.singleOptionHeight * countOfRenderedOptions;
|
||||||
|
const threshold =
|
||||||
|
this.thrPc !== 0 ? infiniteScrollDistance * this.thrPc : this.thrPx;
|
||||||
|
|
||||||
|
const scrolledDistance = this.panel.clientHeight + event.target.scrollTop;
|
||||||
|
|
||||||
|
if (scrolledDistance + threshold >= infiniteScrollDistance) {
|
||||||
|
this.ngZone.run(() => this.infiniteScroll.emit());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getSelectItemHeightPx(): number {
|
||||||
|
return (
|
||||||
|
parseFloat(getComputedStyle(this.panel).fontSize) * SELECT_ITEM_HEIGHT_EM
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { MatSelectModule } from '@angular/material/select';
|
||||||
|
import { MatSelectInfiniteScrollDirective } from './infinite-select.directive';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [MatSelectInfiniteScrollDirective],
|
||||||
|
imports: [
|
||||||
|
MatSelectModule,
|
||||||
|
],
|
||||||
|
exports: [MatSelectInfiniteScrollDirective],
|
||||||
|
})
|
||||||
|
export default class MatSelectInfiniteScrollModule {}
|
||||||
@@ -4,10 +4,10 @@ import { MatButtonModule } from '@angular/material/button';
|
|||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||||
import { MatSelectModule } from '@angular/material/select';
|
import { MatSelectModule } from '@angular/material/select';
|
||||||
import { MatSelectInfiniteScrollModule } from 'ng-mat-select-infinite-scroll';
|
import MatSelectInfiniteScrollModule from '../../../components/infinite-select/infinite-select.module';
|
||||||
|
import { ErrorManagerModule } from '../../../util/error-manager/error-manager.module';
|
||||||
import { SettingsShareXComponent } from './settings-sharex.component';
|
import { SettingsShareXComponent } from './settings-sharex.component';
|
||||||
import { SettingsShareXRoutingModule } from './settings-sharex.routing.module';
|
import { SettingsShareXRoutingModule } from './settings-sharex.routing.module';
|
||||||
import { ErrorManagerModule } from '../../../util/error-manager/error-manager.module';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [SettingsShareXComponent],
|
declarations: [SettingsShareXComponent],
|
||||||
|
|||||||
1200
pnpm-lock.yaml
generated
1200
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user