Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(new-hope): add react hook form support in combobox #1552

Open
wants to merge 5 commits into
base: dev
Choose a base branch
from

Conversation

iljs
Copy link
Contributor

@iljs iljs commented Nov 11, 2024

Адаптация Combobox для ReactHookForm

  • добавлена возможность использовать react-hook-form для компонента combobox

What/why changed (Это обязательный заголовок)

📦 Published PR as canary version: Canary Versions

✨ Test out this PR locally via:

npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
npm install @salutejs/[email protected]
# or 
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]
yarn add @salutejs/[email protected]

Copy link
Contributor

Theme Builder app deployed!

https://plasma.sberdevices.ru/pr/plasma-theme-builder-pr-1552/

@iljs iljs marked this pull request as ready for review November 11, 2024 13:42
Comment on lines 145 to 153
outerOnChange(newValue as string & string[] & ChangeEvent<HTMLSelectElement>);
}

if (!name && multiple && Array.isArray(newValue)) {
outerOnChange(newValue as string & string[] & ChangeEvent<HTMLSelectElement>);
}

if (name && typeof newValue === 'object' && !Array.isArray(newValue)) {
outerOnChange(newValue as string & string[] & ChangeEvent<HTMLSelectElement>);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для чего эти проверки, если каждый раз кастуем к одному и тому же типу

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Проверки нужны, чтобы отсылать нужный тип. То есть туда может прийти как вариант от формы, так и дефолтное поведение. Тут проверяем, что именно пришло и отсылаем нужный тип

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, что условия можно объединить, чтобы не дублировать outerOnChange(newValue as string & string[] & ChangeEvent<HTMLSelectElement>);

@@ -343,7 +383,7 @@ export const comboboxRoot = (Root: RootProps<HTMLInputElement, Omit<ComboboxProp
listWidth={listWidth}
target={(referenceRef) => (
<StyledTextField
ref={inputForkRef}
ref={name ? inputRef : (inputForkRef as React.ForwardedRef<HTMLInputElement>)}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тоже без React.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можешь вкратце описать, почему итоговая ref зависит от name?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

От name зависит итоговый исходящий тип. Если он есть, то он считает, что это форма. Если нет, то обычный тип.

А ref надо обязательно прокидывать именно в select, если вариант с формой

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, что нейминг немного нужно поменять. Это же не отдельный компонент Form, а только SelectHidden

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут больше логика, что это для формы штука. И потом в select и autocomplite будет нейминг такой же с таким де принципом работы. Поэтому сделал так

};

export const Form = forwardRef<HTMLSelectElement, Props>(({ name, multiple, value, onChange }, ref) => {
const values = (multiple ? value : [value]) as string[];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можем избавиться от каста к string[]? Кажется на уровне Props проще переопределить

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну можно уйти, если сделать разветвление на multi и на single. Поэтому так проще и практичней

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Размножь на другие доки тоже

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants