Commit 3bf6d618 authored by mechtelm's avatar mechtelm
Browse files

Add contract dates edit in main data

Implement Moment as Date type to match locale requirements for date edit control
parent f96f660b
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import {StaffMemberMetadataDto} from "../../../../../../libs/dto/src";
import {StaffMemberVacationDataDto} from "@lib/dto";
@Entity()
class Staff {
......@@ -28,7 +28,7 @@ class Staff {
public address: string | null;
@Column()
public salutation: string | null;
public title: string | null;
@Column()
public sex: string | null;
......@@ -51,12 +51,18 @@ class Staff {
contractEnd: string | null;
@Column({
name: 'contract_week_days'
})
contractWeekDays: string | null;
@Column({
name: 'vacation_data',
type: 'jsonb',
array: false,
default: () => "'{}'",
nullable: false,
})
public metadata: StaffMemberMetadataDto;
public vacationData: StaffMemberVacationDataDto;
@Column({
name: 'payroll_id'
......
......@@ -34,10 +34,11 @@ export class StaffService {
name: staffMember.name,
firstName: staffMember.firstName,
sex: staffMember.sex,
salutation: staffMember.salutation,
title: staffMember.title,
contractStart: staffMember.contractStart,
contractEnd: staffMember.contractEnd,
contractType: staffMember.contractType,
contractWeekDays: staffMember.contractWeekDays,
payrollId: staffMember.payrollId,
idmId: staffMember.idmId,
idmRegistered: staffMember.idmRegistered,
......@@ -51,11 +52,14 @@ export class StaffService {
async patchMain(newStaffMemberMainData: StaffMemberMainDto): Promise<void> {
const staffMember = await this.staffRepository.findOne(newStaffMemberMainData.id);
if (staffMember) {
if (newStaffMemberMainData.name) staffMember.name = newStaffMemberMainData.name;
if (newStaffMemberMainData.firstName) staffMember.firstName = newStaffMemberMainData.firstName;
if (newStaffMemberMainData.salutation) staffMember.salutation = newStaffMemberMainData.salutation;
if (newStaffMemberMainData.sex) staffMember.sex = newStaffMemberMainData.sex;
if (newStaffMemberMainData.contractType) staffMember.contractType = newStaffMemberMainData.contractType;
if (newStaffMemberMainData.hasOwnProperty('name')) staffMember.name = newStaffMemberMainData.name;
if (newStaffMemberMainData.hasOwnProperty('firstName')) staffMember.firstName = newStaffMemberMainData.firstName;
if (newStaffMemberMainData.hasOwnProperty('title')) staffMember.title = newStaffMemberMainData.title;
if (newStaffMemberMainData.hasOwnProperty('sex')) staffMember.sex = newStaffMemberMainData.sex;
if (newStaffMemberMainData.hasOwnProperty('contractType')) staffMember.contractType = newStaffMemberMainData.contractType;
if (newStaffMemberMainData.hasOwnProperty('contractStart')) staffMember.contractStart = newStaffMemberMainData.contractStart ? newStaffMemberMainData.contractStart : null;
if (newStaffMemberMainData.hasOwnProperty('contractEnd')) staffMember.contractEnd = newStaffMemberMainData.contractEnd ? newStaffMemberMainData.contractEnd : null;
if (newStaffMemberMainData.hasOwnProperty('contractWeekDays')) staffMember.contractWeekDays = newStaffMemberMainData.contractWeekDays;
await this.staffRepository.save(staffMember);
}
}
......
......@@ -15,7 +15,6 @@ import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatBadgeModule } from '@angular/material/badge';
import { FlexLayoutModule } from '@angular/flex-layout';
......@@ -54,7 +53,6 @@ import {IqbComponentsModule} from "@lib/iqb-components";
MatInputModule,
MatToolbarModule,
MatSnackBarModule,
MatNativeDateModule,
MatDatepickerModule,
MatBadgeModule,
FlexLayoutModule,
......@@ -73,14 +71,11 @@ import {IqbComponentsModule} from "@lib/iqb-components";
],
providers: [
BackendService,
[
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
}
]
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
}
],
entryComponents: [
EditUserComponent
......
......@@ -31,6 +31,25 @@ import { ChangePasswordComponent } from './home/change-password.component';
import {AuthInterceptor} from "./auth.interceptor";
import {IqbComponentsModule} from "@lib/iqb-components";
import {MatRadioModule} from "@angular/material/radio";
import {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatDateFormats} from "@angular/material/core";
import {
MAT_MOMENT_DATE_ADAPTER_OPTIONS,
MatMomentDateModule,
MomentDateAdapter
} from "@angular/material-moment-adapter";
import 'moment/locale/de';
export const MOMENT_DATE_FORMATS: MatDateFormats = {
parse: {
dateInput: 'D.MM.YYYY'
},
display: {
dateInput: 'DD.MM.YYYY',
monthYearLabel: 'MMMM Y',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM Y'
}
};
@NgModule({
declarations: [
......@@ -57,6 +76,7 @@ import {MatRadioModule} from "@angular/material/radio";
MatTableModule,
ReactiveFormsModule,
MatRadioModule,
MatMomentDateModule,
MatProgressSpinnerModule,
MatSnackBarModule,
FlexLayoutModule,
......@@ -77,7 +97,14 @@ import {MatRadioModule} from "@angular/material/radio";
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
}
},
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
{
provide: DateAdapter,
useClass: MomentDateAdapter,
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
},
{provide: MAT_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS}
],
entryComponents: [
ChangePasswordComponent
......
......@@ -29,7 +29,7 @@ export class BackendService {
);
}
changeMainData(newData: StaffMemberInListDto): Observable<boolean> {
changeMainData(newData: StaffMemberMainDto): Observable<boolean> {
return this.http
.patch(`${this.serverUrl}staff/${newData.id}/main`,newData)
.pipe(
......
import {Component, Inject} from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import {MAT_DIALOG_DATA} from "@angular/material/dialog";
import {ContractTypeLabels, SexLabels} from "../staff-list.classes";
import {ContractTypeLabels, SexLabels, StaffMember} from "../staff-list.classes";
import {StaffMemberMainDto} from "@lib/dto";
@Component({
template: `
......@@ -40,6 +41,21 @@ import {ContractTypeLabels, SexLabels} from "../staff-list.classes";
</mat-radio-button>
</mat-radio-group>
</div>
<div fxLayout="row" fxLayoutAlign="space-between center">
<mat-form-field>
<mat-label>Start</mat-label>
<input matInput formControlName="contractStart" [matDatepicker]="pickerContractStart">
<mat-datepicker-toggle matSuffix [for]="pickerContractStart"></mat-datepicker-toggle>
<mat-datepicker #pickerContractStart></mat-datepicker>
</mat-form-field>
<mat-checkbox formControlName="contractUnlimited">unbefr.</mat-checkbox>
<mat-form-field>
<mat-label>Ende</mat-label>
<input matInput formControlName="contractEnd" [matDatepicker]="pickerContractEnd">
<mat-datepicker-toggle matSuffix [for]="pickerContractEnd"></mat-datepicker-toggle>
<mat-datepicker #pickerContractEnd></mat-datepicker>
</mat-form-field>
</div>
</form>
</mat-dialog-content>
......@@ -61,18 +77,16 @@ export class ChangeMainDataComponent {
constructor(private fb: FormBuilder,
@Inject(MAT_DIALOG_DATA) public data: any) {
const staffMemberData = data as StaffMemberMainDto;
this.changeMainDataForm = this.fb.group({
name: this.fb.control(data.name, [Validators.required]),
firstName: this.fb.control(data.firstName, [Validators.required]),
salutation: this.fb.control(data.salutation),
sex: this.fb.control(data.sex),
contractType: this.fb.control(data.contractType)
/*
address: this.fb.control(''),
contractStart: this.fb.control(''),
contractEnd: this.fb.control(''),
contractEndUnlimited: this.fb.control(''),
payrollId: this.fb.control(''),*/
name: this.fb.control(staffMemberData.name, [Validators.required]),
firstName: this.fb.control(staffMemberData.firstName, [Validators.required]),
salutation: this.fb.control(staffMemberData.title),
sex: this.fb.control(staffMemberData.sex),
contractType: this.fb.control(staffMemberData.contractType),
contractStart: this.fb.control(staffMemberData.contractStart ? StaffMember.stringToDate(staffMemberData.contractStart) : ''),
contractEnd: this.fb.control(staffMemberData.contractEnd ? StaffMember.stringToDate(staffMemberData.contractEnd) : ''),
contractUnlimited: this.fb.control(!staffMemberData.contractEnd)
});
}
}
......@@ -29,12 +29,14 @@ export class MainDataComponent implements OnInit, OnDestroy {
ngOnInit(): void {
setTimeout(() => {
this.staffMemberIdChangedSubscription = this.staffListService.selectedStaffMember$.subscribe(selectedStaffMemberId => {
console.log(selectedStaffMemberId);
this.backendService.getStaffMemberMainData(
selectedStaffMemberId).subscribe(staffMemberData => {
this.mainData = staffMemberData ? new StaffMember(staffMemberData) : null;
console.log(this.mainData?.id);
})
if (selectedStaffMemberId > 0) {
this.backendService.getStaffMemberMainData(
selectedStaffMemberId).subscribe(staffMemberData => {
this.mainData = staffMemberData ? new StaffMember(staffMemberData) : null;
})
} else {
this.mainData = null;
}
})
})
}
......@@ -54,11 +56,17 @@ export class MainDataComponent implements OnInit, OnDestroy {
const newSex: string = (<FormGroup>result).get('sex')?.value;
const newSalutation: string = (<FormGroup>result).get('salutation')?.value;
const newContractType: string = (<FormGroup>result).get('contractType')?.value;
const changedData: StaffMemberMainDto = {id: this.mainData.id, name: newName};
const newContractStart = StaffMember.dateToString((<FormGroup>result).get('contractStart')?.value);
const newContractUnlimited: boolean = (<FormGroup>result).get('contractUnlimited')?.value;
const newContractEnd = newContractUnlimited ? '' : StaffMember.dateToString((<FormGroup>result).get('contractEnd')?.value);
const changedData: StaffMemberMainDto = {id: this.mainData.id};
if (newName !== this.mainData.name) changedData.name = newName;
if (newFirstName !== this.mainData.firstName) changedData.firstName = newFirstName;
if (newSex !== this.mainData.sex) changedData.sex = newSex;
if (newSalutation !== this.mainData.salutation) changedData.salutation = newSalutation;
if (newSalutation !== this.mainData.salutation) changedData.title = newSalutation;
if (newContractType !== this.mainData.contractType) changedData.contractType = newContractType;
if (newContractStart !== this.mainData.contractStart) changedData.contractStart = newContractStart;
if (newContractEnd !== this.mainData.contractEnd) changedData.contractEnd = newContractEnd;
this.backendService.changeMainData(changedData).subscribe(
respOk => {
if (respOk) {
......
import {StaffMemberInListDto, StaffMemberMainDto} from "@lib/dto";
import * as _moment from 'moment';
export class StaffMemberView {
static dateWarningColor(staffMemberData: StaffMemberInListDto): string {
......@@ -36,7 +37,7 @@ export const SexLabels = {
export class StaffMember {
id!: number;
name!: string;
name?: string;
firstName?: string;
idmId?: string;
canonicalName?: string;
......@@ -72,7 +73,7 @@ export class StaffMember {
this.name = staffData.name;
this.firstName = staffData.firstName;
this.idmId = staffData.idmId;
this.salutation = staffData.salutation;
this.salutation = staffData.title;
this.sex = staffData.sex;
this.contractType = staffData.contractType;
this.contractStart = staffData.contractStart;
......@@ -81,4 +82,22 @@ export class StaffMember {
this.payrollId = staffData.payrollId;
}
static dateToString(someDate?: _moment.Moment): string {
if (someDate) {
console.log(someDate);
let returnString = someDate.year().toString();
const month = someDate.month() as number;
returnString += (month < 9 ? '-0' : '-') + (month + 1).toString();
const day = someDate.date();
return returnString + (day < 10 ? '-0' : '-') + day.toString();
}
return '';
}
static stringToDate(someDate?: string): _moment.Moment | null {
if (someDate) {
return _moment(someDate);
}
return null;
}
}
......@@ -9,7 +9,7 @@
<div>{{stM.name}}, {{stM.firstName}}</div>
<div fxLayout="row wrap" fxLayoutAlign="end center">
<div [class]="getIdmWarningClass(stM)"
fxLayout="column" fxLayoutAlign="center center">{{stM.idmId ? stM.idmId : '-'}}</div>
fxLayout="column" fxLayoutAlign="center center">&nbsp;</div>
<div [class]="getContractWarningClass(stM)"
fxLayout="column" fxLayoutAlign="center center">{{stM.contractEnd ? (stM.contractEnd | date:'dd.MM.yyyy') : 'unbefr.'}}</div>
</div>
......
......@@ -20,7 +20,7 @@ import {MatFormFieldModule} from "@angular/material/form-field";
import {MatInputModule} from "@angular/material/input";
import {MatToolbarModule} from "@angular/material/toolbar";
import {MatSnackBarModule} from "@angular/material/snack-bar";
import {MatNativeDateModule, MatRippleModule} from "@angular/material/core";
import {MatRippleModule} from "@angular/material/core";
import {MatDatepickerModule} from "@angular/material/datepicker";
import {MatBadgeModule} from "@angular/material/badge";
import {FlexLayoutModule} from "@angular/flex-layout";
......@@ -33,6 +33,7 @@ import {StaffListRoutingModule} from "./staff-list-routing.module";
import {MatListModule} from "@angular/material/list";
import {MatRadioModule} from "@angular/material/radio";
import {ChangeMainDataComponent} from "./main-data/change-main-data.component";
import {MatMomentDateModule} from "@angular/material-moment-adapter";
......@@ -44,39 +45,39 @@ import {ChangeMainDataComponent} from "./main-data/change-main-data.component";
JournalComponent,
ChangeMainDataComponent
],
imports: [
CommonModule,
IqbComponentsModule,
MatTableModule,
MatTabsModule,
MatIconModule,
MatSelectModule,
MatCheckboxModule,
MatSortModule,
ReactiveFormsModule,
MatProgressSpinnerModule,
MatDialogModule,
MatButtonModule,
MatCardModule,
MatTooltipModule,
MatFormFieldModule,
MatInputModule,
MatToolbarModule,
MatSnackBarModule,
MatNativeDateModule,
MatDatepickerModule,
MatBadgeModule,
FlexLayoutModule,
MatChipsModule,
FormsModule,
MatMenuModule,
MatDividerModule,
RouterModule,
StaffListRoutingModule,
MatRippleModule,
MatListModule,
MatRadioModule
],
imports: [
CommonModule,
IqbComponentsModule,
MatTableModule,
MatTabsModule,
MatIconModule,
MatSelectModule,
MatCheckboxModule,
MatSortModule,
ReactiveFormsModule,
MatProgressSpinnerModule,
MatDialogModule,
MatButtonModule,
MatCardModule,
MatTooltipModule,
MatFormFieldModule,
MatInputModule,
MatToolbarModule,
MatSnackBarModule,
MatDatepickerModule,
MatBadgeModule,
FlexLayoutModule,
MatChipsModule,
FormsModule,
MatMenuModule,
MatDividerModule,
MatMomentDateModule,
RouterModule,
StaffListRoutingModule,
MatRippleModule,
MatListModule,
MatRadioModule
],
entryComponents: [
ChangeMainDataComponent
]
......
......@@ -2,7 +2,7 @@ export {UserInListDto} from './lib/user/user-in-list-dto';
export {UserFullDto} from './lib/user/user-full-dto';
export {StaffMemberMainDto} from "./lib/staff/staff-member-main-dto";
export {StaffMemberInListDto} from "./lib/staff/staff-member-in-list-dto";
export {StaffMemberMetadataDto} from "./lib/staff/staff-member-metadata-dto";
export {StaffMemberVacationDataDto} from "./lib/staff/staff-member-vacation-data-dto";
export {AuthDataDto} from "./lib/auth-data-dto";
export {ChangePasswordDto} from "./lib/change-password-dto";
export {ConfigFullDto} from "./lib/config/config-full-dto";
......
......@@ -5,7 +5,7 @@ export class StaffMemberMainDto {
id!: number;
@ApiProperty()
name!: string;
name?: string;
@ApiProperty()
firstName?: string;
......@@ -17,7 +17,7 @@ export class StaffMemberMainDto {
idmRegistered?: string;
@ApiProperty()
canonicalName?: string;
contractWeekDays?: string;
@ApiProperty()
contractStart?: string;
......@@ -38,5 +38,5 @@ export class StaffMemberMainDto {
sex?: string;
@ApiProperty()
salutation?: string;
title?: string;
}
import { ApiProperty } from '@nestjs/swagger';
export class StaffMemberMetadataDto {
export class StaffMemberVacationDataDto {
@ApiProperty()
dummy1 = '';
......
......@@ -15,6 +15,7 @@
"@angular/compiler": "~13.2.0",
"@angular/core": "~13.2.0",
"@angular/forms": "~13.2.0",
"@angular/material-moment-adapter": "^13.2.3",
"@angular/platform-browser": "~13.2.0",
"@angular/platform-browser-dynamic": "~13.2.0",
"@angular/router": "~13.2.0",
......@@ -540,10 +541,9 @@
}
},
"node_modules/@angular/cdk": {
"version": "13.2.1",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.2.1.tgz",
"integrity": "sha512-AjEn4Mk2ow2i8pw0T9F/C/bKFrnUqzlvOGfFkoMgZHp5r3yhDb5DbVRS1/fGScAbY8Pzln49r1maKdrE8DGUbg==",
"dev": true,
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.2.3.tgz",
"integrity": "sha512-X7FH0eGwfK2HcAroYBrE7O9ehZ50k9+DoDV98xm1NRgezNfiQ2QxIdLQKhJv0bnnID+pGk4Tnb44RXUmgk5idw==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
......@@ -561,7 +561,6 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
"dev": true,
"optional": true,
"peer": true
},
......@@ -779,16 +778,15 @@
}
},
"node_modules/@angular/material": {
"version": "13.2.1",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-13.2.1.tgz",
"integrity": "sha512-8pJuDsUqWDJemjog/18qrQf72K/BiptDCEY3PfvBK1Wkya6qUKfHKI/iCsToJL56vZ4N07hQHBe/KmYusZtHrQ==",
"dev": true,
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-13.2.3.tgz",
"integrity": "sha512-io9NzL32QKBngSpNbnIGRN0/qhkGpyfZHnpW+IOsYa4gMlXqi0JMV5Ygi+O1Dvd57TXzbb3e2eggdZyAWe7IDA==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/animations": "^13.0.0 || ^14.0.0-0",
"@angular/cdk": "13.2.1",
"@angular/cdk": "13.2.3",
"@angular/common": "^13.0.0 || ^14.0.0-0",
"@angular/core": "^13.0.0 || ^14.0.0-0",
"@angular/forms": "^13.0.0 || ^14.0.0-0",
......@@ -796,6 +794,19 @@
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/material-moment-adapter": {
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-13.2.3.tgz",
"integrity": "sha512-OHsF5wOKfWYr+0HtSgsLBpKV4bqQT3WDpcQEAf7hQxddutx9pOOvIxQI4w7c/u8HJAEAl/eASNOpv3+v9CtCnw==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/core": "^13.0.0 || ^14.0.0-0",
"@angular/material": "13.2.3",
"moment": "^2.18.1"
}
},
"node_modules/@angular/platform-browser": {
"version": "13.2.2",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.2.2.tgz",
......@@ -12977,6 +12988,15 @@
"node": ">=10"
}
},
"node_modules/moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
"peer": true,
"engines": {
"node": "*"
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
......@@ -17984,10 +18004,9 @@
}
},
"@angular/cdk": {
"version": "13.2.1",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.2.1.tgz",
"integrity": "sha512-AjEn4Mk2ow2i8pw0T9F/C/bKFrnUqzlvOGfFkoMgZHp5r3yhDb5DbVRS1/fGScAbY8Pzln49r1maKdrE8DGUbg==",
"dev": true,
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.2.3.tgz",
"integrity": "sha512-X7FH0eGwfK2HcAroYBrE7O9ehZ50k9+DoDV98xm1NRgezNfiQ2QxIdLQKhJv0bnnID+pGk4Tnb44RXUmgk5idw==",
"peer": true,
"requires": {
"parse5": "^5.0.0",
......@@ -17998,7 +18017,6 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
"dev": true,
"optional": true,
"peer": true
}
......@@ -18148,10 +18166,17 @@
"dev": true
},
"@angular/material": {
"version": "13.2.1",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-13.2.1.tgz",
"integrity": "sha512-8pJuDsUqWDJemjog/18qrQf72K/BiptDCEY3PfvBK1Wkya6qUKfHKI/iCsToJL56vZ4N07hQHBe/KmYusZtHrQ==",
"dev": true,
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-13.2.3.tgz",
"integrity": "sha512-io9NzL32QKBngSpNbnIGRN0/qhkGpyfZHnpW+IOsYa4gMlXqi0JMV5Ygi+O1Dvd57TXzbb3e2eggdZyAWe7IDA==",
"requires": {
"tslib": "^2.3.0"
}
},
"@angular/material-moment-adapter": {
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-13.2.3.tgz",
"integrity": "sha512-OHsF5wOKfWYr+0HtSgsLBpKV4bqQT3WDpcQEAf7hQxddutx9pOOvIxQI4w7c/u8HJAEAl/eASNOpv3+v9CtCnw==",
"requires": {
"tslib": "^2.3.0"
}
......@@ -27156,6 +27181,12 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
"peer": true
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",