retail-ui icon indicating copy to clipboard operation
retail-ui copied to clipboard

[CurrencyInput] Давать возможность вводить значения больше чем для типа Number IF-1033

Open Mmvas opened this issue 5 years ago • 14 comments

Для контролов CurrencyInput, CurrencyLabel и FxInput с type="currency" необходимо добавить возможность вводить большие числа У нас сейчас есть формы, где целая часть может быть 19 знаков или 17 знаков целая и 2 дробная

Сценарий:

  • https://tech.skbkontur.ru/react-ui/#/Components/CurrencyInput
  • не вводится значение больше 999 999 999 999 999 (если нет дробной части)

Mmvas avatar Apr 10 '19 07:04 Mmvas

Можно попробовать реализовать вариант CurrencyInput в виде дженерика с типом number по умолчанию. Ограничить тип дженерика двумя типами number | string. И вероятнее всего придется потрогать хелперы функции работающие со значением

wKich avatar Apr 12 '19 04:04 wKich

Хей, всем привет. Допустим я хочу зарешать это ишью. Есть понимание как это делать? Имею ввиду, в какую сторону менять публичное апи контрола. Коммент от Димы выше как-то не дал мне понимания. Ибо, как я понимаю, надо не сломать текущее поведение (ну когда в value/onChange работают с number), и как-то дать возможность принимать другой тип (строку?). Короче, маинтейнеры, хелп.

tihonove avatar Apr 07 '20 06:04 tihonove

Поисследую этот вопрос.

zhzz avatar Apr 07 '20 11:04 zhzz

В варианте Димы публичное апи вообще не меняется, кроме появления возможности явно передать тип в дженерик. Но в общем случае он сможет выводиться сам из value.

Таким образом, кажется возможным просто дополнительно разрешить передавать строки, как описал Дима, наладить их обработку внутри с сохранением типов на выходе, и снять для строк ограничение на количество символов.

Можно попробовать.

zhzz avatar Apr 09 '20 06:04 zhzz

Отмечу на всякий случай: дженерик аргументы в рантайм не попадают.

Давай разберём случаи:

  • я передал number = 0, пользователь набирает 20 символов и мне после 15-го в onChange выпадёт строка?
  • я передал undefined, сразу строка в onChange упадёт или после 15-го символа
  • я переда строку = 0, пользователь вводит "1", мне сразу строка?
  • я передал строку, пользователь всё стёр до состояния undefined, как дальше быть? Вот он, после того как стёр снова набирает символы, мне number полетит в onChange или строка?

tihonove avatar Apr 09 '20 07:04 tihonove

Ок, теперь понял. Проблема-то глубже.

Кажется, что даже если придумать новый проп для этого, то будут проблемы с типизацией.

В качестве другого решения на обсуждение, можно было бы вытащить из CurrencyInput базовый контрол, который полноценно работает со строками, положить его в internal или на парковку. А поверх сделать обертку со старыми типами и ограничениями.

zhzz avatar Apr 09 '20 09:04 zhzz

Я не хочу вмешиваться в вашу "стратегию развития публичного апи", если у вас есть такая. Могу предложить вариант такой: передавать доп. проп, который управляет преобразованием типов. Ещё была история с дейтпикером аналогичная: там боролся тип Date то ли со строкой, то ли со структурой из трех полей. Может поступить так же как и там сделали.

В общем что я хочу: вы решите как вам кажется правильно, и отпиши сюда, а я уже двинусь в этом направлении.

tihonove avatar Apr 09 '20 10:04 tihonove

Если удастся обойтись пропом и сохранить совместимость, то это будет норм. Но в том, как я это себе представляю, есть проблема типизации. Может быть я не так понимаю решение.

Посмотрю как там было с дейтпикером.

zhzz avatar Apr 09 '20 11:04 zhzz

Моя мысль такая: CurrencyInput делаем дженериковым, добавляем проп, из него выводится аргумент дженерика.

tihonove avatar Apr 09 '20 11:04 tihonove

С дейтпикером там вышло не очень, от него отпочковался DatePickerOld.

А твой вариант звучит неплохо.

zhzz avatar Apr 10 '20 03:04 zhzz

@tihonove получилось что-нибудь, будешь делать?

dzekh avatar May 19 '20 11:05 dzekh

Да, собираюсь. Как у нас дойдёт очередь до этой задачи

tihonove avatar May 19 '20 14:05 tihonove

@tihonove привет, какие планы по поводу этой задачи?

oldmine avatar Sep 06 '22 08:09 oldmine

Короче. Спросите Диму Рыбака (@CrazyRyDmi), У нас есть починеный контрол, живет уже довольно давно. Может он согласиться его к вам передвинуть.

tihonove avatar Sep 08 '22 07:09 tihonove