Size: a a a

Советский Angular

2020 December 03

D

Dimka in Советский Angular
Alena Hrenovskaya
я бы помогла - да вот не используем ngrx - и для простой операции как-то все выглядит слишком сложно
И на этом спасибо)
источник

AH

Alena Hrenovskaya in Советский Angular
Alena Hrenovskaya
я бы помогла - да вот не используем ngrx - и для простой операции как-то все выглядит слишком сложно
Ты class-transformer пользовался?
источник

D

Dimka in Советский Angular
нет
источник

AH

Alena Hrenovskaya in Советский Angular
там удобно работать с формами без вот такого извращения
let user: UserProfile = {
     id: this.id,
     firstName: this.editUserForm.controls["firstName"].value,
     lastName: this.editUserForm.controls["lastName"].value,
     email: this.editUserForm.controls["email"].value,
     password: this.editUserForm.controls["password"].value,
     isBlocked: null,
     roles: null
   };


С class-transformer достаточно было бы добавить поля id, isBlocked, roles в саму форму (не выводя их в шаблон) и сделать вот так:
this.userStore$.dispatch(new EditUser(plainToClass(UserProfile, this.editUserForm.value)));

Метод plainToClass преобразовал бы объект из this.editUserForm.value в класс UserProfile
источник

AH

Alena Hrenovskaya in Советский Angular
Alena Hrenovskaya
там удобно работать с формами без вот такого извращения
let user: UserProfile = {
     id: this.id,
     firstName: this.editUserForm.controls["firstName"].value,
     lastName: this.editUserForm.controls["lastName"].value,
     email: this.editUserForm.controls["email"].value,
     password: this.editUserForm.controls["password"].value,
     isBlocked: null,
     roles: null
   };


С class-transformer достаточно было бы добавить поля id, isBlocked, roles в саму форму (не выводя их в шаблон) и сделать вот так:
this.userStore$.dispatch(new EditUser(plainToClass(UserProfile, this.editUserForm.value)));

Метод plainToClass преобразовал бы объект из this.editUserForm.value в класс UserProfile
а поля isBlocked и roles можно сделать дефолтными  null в самом классе, либо если на бэке null=true то вообще не отправлять
источник

D

Dimka in Советский Angular
Выглядит симпатично
источник

DT

Dmitriy Teplov in Советский Angular
Alena Hrenovskaya
там удобно работать с формами без вот такого извращения
let user: UserProfile = {
     id: this.id,
     firstName: this.editUserForm.controls["firstName"].value,
     lastName: this.editUserForm.controls["lastName"].value,
     email: this.editUserForm.controls["email"].value,
     password: this.editUserForm.controls["password"].value,
     isBlocked: null,
     roles: null
   };


С class-transformer достаточно было бы добавить поля id, isBlocked, roles в саму форму (не выводя их в шаблон) и сделать вот так:
this.userStore$.dispatch(new EditUser(plainToClass(UserProfile, this.editUserForm.value)));

Метод plainToClass преобразовал бы объект из this.editUserForm.value в класс UserProfile
UserProfile это модель или просто объект с данными?
источник

D

Dimka in Советский Angular
источник

D

Dimka in Советский Angular
модель
источник

DT

Dmitriy Teplov in Советский Angular
Dimka
модель
это не модель, это просто интерфейс)
источник

AH

Alena Hrenovskaya in Советский Angular
Dimka
Выглядит симпатично
+ еще можно вешать обработку на поля, например, для фронта тебе нужно поле как объект, пример:
type: {id: 1, name: 'default'}
а бэк хочет получить ключ type: 1

Для этого можно сделать подобную функцию
export function formatObjectToField<T>(field: keyof T): (value: T) => T[keyof T] | T {
 return value => isObject(value) ? value[field] : value;
}

И юзать ее вот так в классе
 @Transform(formatObjectToField<OrganizationApi>('id'), {toPlainOnly: true})
 organization: OrganizationApi;

Потом когда ты сделать classToPlain(item) он сериализует объект согласно всем правилам с свойством {toPlainOnly: true} или же наоборот превратит объект в нужный класс тоже с правилами)
источник

DT

Dmitriy Teplov in Советский Angular
Alena Hrenovskaya
+ еще можно вешать обработку на поля, например, для фронта тебе нужно поле как объект, пример:
type: {id: 1, name: 'default'}
а бэк хочет получить ключ type: 1

Для этого можно сделать подобную функцию
export function formatObjectToField<T>(field: keyof T): (value: T) => T[keyof T] | T {
 return value => isObject(value) ? value[field] : value;
}

И юзать ее вот так в классе
 @Transform(formatObjectToField<OrganizationApi>('id'), {toPlainOnly: true})
 organization: OrganizationApi;

Потом когда ты сделать classToPlain(item) он сериализует объект согласно всем правилам с свойством {toPlainOnly: true} или же наоборот превратит объект в нужный класс тоже с правилами)
с декораторами же грустная типизация, может лучше явными вызовами функций трансформеров?
источник

AH

Alena Hrenovskaya in Советский Angular
Dmitriy Teplov
с декораторами же грустная типизация, может лучше явными вызовами функций трансформеров?
например?
Просто у нас к примеру все даты с бэка приходят строкой в объекте, объект мы превращаем в класс - где дата трансформируется из строки в Moment или Date (если date-fns), а потом с фронта на бэк, объект класса превращается в обычный объект, где дата трансформируется из даты в строку снова)))
источник

AH

Alena Hrenovskaya in Советский Angular
@Transform(formatDateToPlain(), {toPlainOnly: true})
 @Transform(formatDateToClass(), {toClassOnly: true})
 conclusion_date: Moment | string;
источник

DT

Dmitriy Teplov in Советский Angular
Alena Hrenovskaya
@Transform(formatDateToPlain(), {toPlainOnly: true})
 @Transform(formatDateToClass(), {toClassOnly: true})
 conclusion_date: Moment | string;
а почему в примере Moment | string?
источник

AH

Alena Hrenovskaya in Советский Angular
Dmitriy Teplov
а почему в примере Moment | string?
хз, над проектом куча людей работала, где-то значит кому до сериализации дата попадалась строкой
источник

AH

Alena Hrenovskaya in Советский Angular
для фронта только Moment нужен
источник

DT

Dmitriy Teplov in Советский Angular
короче, я почитаю про либу и напишу, почему декораторы в конкретном случае плохо)
источник

AH

Alena Hrenovskaya in Советский Angular
Dmitriy Teplov
короче, я почитаю про либу и напишу, почему декораторы в конкретном случае плохо)
😁 хорошо, но пока меня не подводило))) особенно когда билеберду с бэка нужно привести в какой-нибудь цивильный вид))
источник

DT

Dmitriy Teplov in Советский Angular
Прикольно, гитхаб теперь ищет референсы и в сниппетах кода, не только в самих сорсах
источник