zyfra / Prizm

Other
46 stars 16 forks source link

[BUG] @prizm-ui/components - Invalid label position on `PrizmInputTextComponent` #2078

Open AleksandrSibiakov opened 1 month ago

AleksandrSibiakov commented 1 month ago

Библиотека

Выберите нужное отметив галочку [x]

Компонент

PrizmInputTextComponent

Версия

➜ npm ls @prizm-ui/components

@prizm-ui/components 5.0.0
@angular/core 18.2.2

Скрин / Видео проблемы

image

Воспроизведение проблемы

Нестабильно. При поздней инициализации значения инпутов (empty -> some value) положение лейблов не меняется На проекте используется сетап: input() -> effect(() => updateForm(input())) => FormGroup.reset(some_val)

Так же удалось воспроизвести проблему при обновлении значения через control.setValue(..., { emitEvent: false}), или при использовании инпута без NG_CONTROL директив (в этом случае также наблюдается проблема с некорреткным обновлением состояния empty и отображением кнопки очистки - воспроизводится на демо сайте поголовно во всех примерах с <input prizmInput> без formControl/ngModel диреткив

Описание проблемы

Имеет место быть рассинхронизация состояния PrizmInputLayoutComponent с PrizmInputTextComponent. А именно: image image image

Как видно значение в контексте PrizmLetDirective из PrizmInputLayout имеет не корреткное значение (источником выступает как раз control.empty

Удалось выяснить что проблема в невыполненном цикле CD на уровне лейаута при обновлении control.empty через afterRender - предполагаю, необходимо вызывать control.stateChanges.next() при изменении значения control.empty

AleksandrSibiakov commented 1 month ago

Создал PR с обновлением и оптимизацией работы с empty и еще парой моментов - https://github.com/zyfra/Prizm/pull/2079 Позже добавлю подробное описание изменений