
Alexander
08.08.2016
16:06:25
а вообще самое простое - проверять по блюру а не по change, imho

Nikita
08.08.2016
16:06:40
погоди, ты по ходу вбивания телефона шлешь запросы?
или когда он вбил и нажал enter?

Alexander
08.08.2016
16:07:06
по ходу как я понял

Google

Nikita
08.08.2016
16:07:29
то есть я могу сидеть и перебирать номера телефонов так?)

Vladimir
08.08.2016
16:07:42
можно каждому запросу присваивать requestId, увеличивая его на 1, и если при получении ответа, если requestId не последний, игнорировать ответ

Dmitriy
08.08.2016
16:08:51
> погоди, ты по ходу вбивания телефона шлешь запросы?
когда телефон стал валидным в поле, т.е. после оконачания ввода, но по change

Konstantin
08.08.2016
16:09:20
Телефон русский?

Nikita
08.08.2016
16:09:31
а если будет не русский?))

Konstantin
08.08.2016
16:09:37
Там сложнее
Инпут маску не сделаешь

Nikita
08.08.2016
16:10:00
надо не onChange, не onblur, а onSubmit. И блокировать поле, любым красивым и удобным юзеру способом.

Konstantin
08.08.2016
16:10:03
А так сделай или найди инпут маску и по ее комплейт отправляй запрос

Dmitriy
08.08.2016
16:10:10
\+\d{11}

Nikita
08.08.2016
16:10:12
не надо пытаться провалидировать на клиенте почту/телефон и тд

Alexander
08.08.2016
16:10:16
Можно на чендж смотреть, что телефон полностью указан, кстати

Алексей
08.08.2016
16:10:29
Не нужно ничего блокировать просто onChange => debounce => request и все

Google

Dmitriy
08.08.2016
16:10:33
по самбиту будет отправляться код на смс

Konstantin
08.08.2016
16:10:50

Nikita
08.08.2016
16:10:52
а в чем проблема сначала код ввести, а потом имя?

Dmitriy
08.08.2016
16:11:19
дизайнер решил, что в риалтайме проверяем наличие

Nikita
08.08.2016
16:11:52
ну скажи дизайнеру, что он не прав

Dmitriy
08.08.2016
16:12:02
а я его похвалил уже

Konstantin
08.08.2016
16:12:07
Ну вот 2 предложение - проверять длину/инпут маска

Nikita
08.08.2016
16:12:22
скажи, что раздвоение личности)) пускай привыкает))

Konstantin
08.08.2016
16:12:49
Но это не проканает если нужны всякие буржуи, там длин не напасешься

Nikita
08.08.2016
16:13:33
если ща не нужны - через год будут нужны)) в чем проблема ввести имя 1 раз как последний шаг - не понятно
причем это можно уже в интерфейсе сделать

Alexander
08.08.2016
16:13:44
была такая jquery input маска, которая умела подхватывать длину телефона в зависимости от кода в начале )

Dmitriy
08.08.2016
16:14:06
ну валидация это не проблема

Nikita
08.08.2016
16:14:18

Konstantin
08.08.2016
16:14:33
https://github.com/googlei18n/libphonenumber

Dmitriy
08.08.2016
16:14:37
вариант со счетчиком прикольный, напомнило cas из memcached
как правильно в редьюсере узнать с каким значением счетчика был отправлен запрос?

Konstantin
08.08.2016
16:17:13

Dmitriy
08.08.2016
16:18:05
можно просто начиная с минимальной длины телефона опрашивать сервер - дешево и сердито, но на самом деле нужны только РФ и США

Google

Nikita
08.08.2016
16:18:45
забавно) когда зайдет инвестор из зимбабве будете локти кусать)

Konstantin
08.08.2016
16:18:56
тока для фронта тяжеловат будет)
там все пуллы операторов выделенные вбиты

Vasiliy
08.08.2016
16:22:05
а чем debounce обычный не подходит?

Dmitriy
08.08.2016
16:23:33
я не совсем понял как он поможет, задержка ответа сервера может быть такой, что ранше отправленный запрос выполнится позже, чем позже отправленный, даже с debounce
рейс при обновлении стейта будет все равно

Konstantin
08.08.2016
16:23:58
Вот прикрутишь этот валидатор, покроешь номерной банк почти полностью, но весит ппц

Vasiliy
08.08.2016
16:26:54
стандартный пример из rxjs для автокомплита:
.map(e => e.target.value)
.debounceTime(700)
.distinctUntilChanged()
.startWith(‘blahblah’)
.switchMap(fetchSmth);

Ярослав
08.08.2016
16:28:21
имеешь номер для проверки, ставишь ему что он ещё не проверен, если он ещё не был проверен, шлёшь запрос на сервер, ответ валиден номер или нет присваиваешь номеру. Следующие запросы пробиваешь по базе готовых проверок.
{ tel: "0454545",
state: NOT_CHECKED,
isValid: false
} => {...,
state: CHECKING,
isValid: false} => {...,
state: CHECKED,
isValid: true}
никаких рейсов

Алексей
08.08.2016
16:28:54
имеешь номер для проверки, ставишь ему что он ещё не проверен, если он ещё не был проверен, шлёшь запрос на сервер, ответ валиден номер или нет присваиваешь номеру. Следующие запросы пробиваешь по базе готовых проверок.
{ tel: "0454545",
state: NOT_CHECKED,
isValid: false
} => {...,
state: CHECKING,
isValid: false} => {...,
state: CHECKED,
isValid: true}
зачем так сложно?

Ярослав
08.08.2016
16:29:02
затем, чтобы работало
а сверху уже дебаунсы можно прикрутить

Алексей
08.08.2016
16:29:49
блин не нужно ничего в запросах передавать чтобы добиться того-же самомого

Ярослав
08.08.2016
16:30:15
приведи пример без рейсов

Vasiliy
08.08.2016
16:35:09
эмм, я же привел выше, или я чего-то не понял просто?

Ярослав
08.08.2016
16:41:48
ну RX у тебя просто не вернёт значение для нового запроса на проверку пользователя, потому что у него в конце стоит switchMap. Но 1) ты потеряешь результат проверки пользователя; 2) ты каждый раз будешь слать запрос при смене номера для проверки; 3) это решение для RX
если к этому допилить какой-нибудь кэш, то покатит

Google

Vasiliy
08.08.2016
16:42:46
не понял, перечитал уже раз 10) есть куча других реактивных либ, например, most, если rxjs не нравится

yep
08.08.2016
16:54:17
что-то я туплю, ребят
import {someAction} from './actions.js'
export function updateSettings(a, b, c) {
return dispatch => {
// как тут получить доступ к моей ф-и someAction?
return dispatch({
type: 'UPDATE_SOMETHING',
payload: {}
});
}
}

Vasiliy
08.08.2016
16:57:07
не понятно
в смысле как вызвать ф-цию? она же импортирована выше

Admin
ERROR: S client not available

yep
08.08.2016
16:59:36
я тоже хз, но VM9269:1 Uncaught ReferenceError: someAction is not define

Vasiliy
08.08.2016
17:00:00
а покажи что в actions.js

yep
08.08.2016
17:00:01
решил спросить, вдруг я пьяный, а сам это не осознаю

Ярослав
08.08.2016
17:00:12
значит её там нет ))
файл не тот вызвал или ещё что-нибудь подобное

Vasiliy
08.08.2016
17:00:37
может там буква c русская)

yep
08.08.2016
17:00:46
там такое
export function action1() {}
export function action2() {}
...

Vasiliy
08.08.2016
17:00:56
а где тут someAction?)

Ярослав
08.08.2016
17:01:01
сделай лог после импорта и посмотри что заимпортил

yep
08.08.2016
17:12:11
не, это псевдокод
после импорта тело ф-и печатал в логе, с этим ок

Dmitriy
08.08.2016
17:18:18
а нормально ли делать компонент, который работает с частью глобального стейта, но при этом имеет еще свой локальный стейт? если он не нужен мне в глобальном

Vasiliy
08.08.2016
17:18:45
конечно, вообще абсолютно нормально

Dmitriy
08.08.2016
17:19:14
а как правильно это разруливать? если стейт глобальный обновляется через экшены

Google

Dmitriy
08.08.2016
17:19:19
то как локальный?

Vasiliy
08.08.2016
17:19:56
в обычных stateful компонентах – this.setState

Ярослав
08.08.2016
17:23:14
Так это в Local должно быть

yep
08.08.2016
17:25:05
там только аргументы и this undefined

Ярослав
08.08.2016
17:25:47
Лог сделай сразу после импорта

yep
08.08.2016
17:26:03
делал, ф-я печатется

Ярослав
08.08.2016
17:26:04
Следующей строкой

yep
08.08.2016
17:26:18
именно так делал

Ярослав
08.08.2016
17:27:15
Ну тогда она должна быть у тебя в замыканиях

yep
08.08.2016
17:27:54
так, я точно был пьян

Ярослав
08.08.2016
17:27:57
Либо баг, либо ты пьян, либо я

yep
08.08.2016
17:28:25
я проверял в сосноле, а если вызывать в коде, то ок

Yevhenii
08.08.2016
17:28:26
либо все мы

yep
08.08.2016
17:28:51

Alex
08.08.2016
18:00:19