9 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6510ccafb5 |
fix(регистрация): вставка телефона + 3 мелочи перепроверки (12.10)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
Маска телефона: onBeforeInput больше не блокирует ВСТАВКУ. Раньше он отменял любой ввод с не-цифрами в data, из-за чего вставка «+7 701…» / «8 (701) 000-00-00» через CDP insertText блокировалась целиком и номер пропадал («+7 »). Теперь блокируется только одиночный набранный не-цифровой символ; вставку нормализует handleChange. Обе копии (public + admin). Проверено в реальном Chromium (Playwright): посимвольный ввод (delay 0 и 20), все варианты вставки и Backspace посреди номера → «+7 701 000 00 00». 1. Мастер «Первые шаги», шаг каталога: число товаров с разделителем разрядов и склонением («30 951 товар»); текст исправлен — закупочная и себестоимость приходят из реестра вместе с товаром, оставлено «Проверьте продажные цены — они взяты из реестра». 2. Прибыль на главной: убрана фраза про «переход на FIFO» (внутренняя кухня); оставлено «Прибыль приблизительная — по текущей себестоимости из карточек». Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
0ce0e0df77 |
fix(регистрация): 7 правок этапа «Регистрация» (прогон 12.10)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
1. Маска телефона: префикс «+7 », оператор не подставляется заранее. Нормализация снимает ведущую «8» и код страны «7» (на 11 цифрах), value хранится каноническим «+7»+national и восстанавливается снятием литерального «+7» (без 8/11-эвристик) — ввод больше не «скачет». Обе копии (public + admin). Проверено на всех вариантах + вставка. 2. Тариф и бесплатный период: Organization.Plan/FreeTrialEndsAt + конфигурация «Бизнес» (Phase50, существующие → «start», дата NULL). Signup сохраняет план и 90 дней; показ в кабинете владельца и в карточке/списке суперадмина. Биллинга/блокировки нет. 3. Ошибки формы: переход к первому полю с ошибкой + фокус; единые сообщения «Укажите email/телефон/название магазина», «Придумайте пароль». 4. «Первые шаги»: кнопка «Скрыть» (возврат из настроек организации); шаг каталога показывает статус копии реестра («загружается…» / «Каталог готов: N товаров — проверьте продажные цены»); ссылка на Forgejo заменена на «Базу знаний». 5. «Новые функции»: не считаем изменения до даты регистрации орг (новой орг баннер скрыт) + русская плюрализация улучшений/исправлений. 6. Карточка товара: «Закупочная цена» видна и в простом режиме (настройка ShowReferencePriceOnProduct), подпись настройки приведена к новой схеме. 7. Копия реестра: первый штрихкод помечается «Основным»; бэкфилл уже скопированных товаров без основного (Phase51). Тесты: PlanSignupTests (3), RegistryCopyPrimaryBarcodeTests (1), MarkupToggleTests (3, регрессия) — зелёные. Phone-нормализация покрыта симуляцией ввода/вставки. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
8eceff0bb5 |
fix(phone): сохранять позицию курсора после нормализации
Some checks failed
CI / Backend (.NET 8) (push) Successful in 1m3s
CI / Web (React + Vite) (push) Successful in 41s
Docker Public / Build + push Public (push) Successful in 26s
Docker Web / Build + push Web (push) Successful in 32s
Docker Public / Deploy Public on stage (push) Successful in 10s
Docker Web / Deploy Web on stage (push) Successful in 11s
CI / POS (WPF, Windows) (push) Has been cancelled
Курсор не должен прыгать в конец после редактирования — он должен оставаться там, где юзер только что внёс изменение. Корень проблемы: после onChange я вызываю onChange с каноничным «+77…», parent перерендеривает с этим значением, React переписывает input.value на новый display — а нативное поведение браузера в этом случае: при programmatic value-set курсор сбрасывается в конец. Фикс: сохраняем «сколько цифр стояло до курсора» в момент редактирования, после ре-рендера в useLayoutEffect ставим курсор сразу после той же по счёту цифры в новом display. Учёт по цифрам (а не по абсолютной позиции) корректен даже когда format добавляет/убирает пробелы (например при переходе между «+7 700 1» и «+7 700 12»). useLayoutEffect (а не useEffect) — чтобы курсор восстанавливался синхронно до paint, без визуального флика. |
||
|
|
1264a91e2c |
fix(phone): нативное редактирование, фильтр не-цифр через onBeforeInput
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m7s
CI / Web (React + Vite) (push) Successful in 41s
Docker Public / Build + push Public (push) Successful in 27s
Docker Web / Build + push Web (push) Successful in 33s
Docker Public / Deploy Public on stage (push) Successful in 10s
Docker Web / Deploy Web on stage (push) Successful in 11s
Прошлая попытка вручную обрабатывать каждую клавишу через onKeyDown ломала привычное поведение: selection + Backspace удалял только 1 цифру, нельзя было редактировать в середине, и т.д.
Новая модель совсем простая:
- Префикс «+7 7» (4 символа) залочен — onSelect клампит курсор/selection на digit-зону.
- Не-цифры блокируются через onBeforeInput (e.preventDefault если data содержит \D). Это покрывает и печать, и paste, и IME, и drag-drop.
- Всё остальное — нативное поведение браузера: selection + delete, click anywhere, arrow keys, Cmd+A, Cmd+V, drag-drop. После любого изменения onChange нормализует значение (rawToUserDigits извлекает 9 пользовательских цифр, отрезая залоченные «+7 7»).
- Display всегда «+7 7» + format(userDigits) — если юзер случайно стер часть префикса, она восстанавливается на ре-рендере.
Канон наружу: «+77XXXXXXXXX» (12 chars при полном номере), пустая строка если ничего не введено. Совместимо с существующим validatePhone (^77\d{9}$).
|
||
|
|
3beaec214a |
fix(phone): редактирование на месте курсора, как в обычном поле
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m3s
CI / Web (React + Vite) (push) Successful in 39s
Docker Public / Build + push Public (push) Successful in 25s
Docker Web / Build + push Web (push) Successful in 31s
Docker Public / Deploy Public on stage (push) Successful in 10s
Docker Web / Deploy Web on stage (push) Successful in 11s
Курсор больше не «прыгает в конец» — его можно ставить куда угодно в digit-зоне (после префикса «+7 »), а Backspace/Delete/ввод цифры работают относительно позиции курсора, как в любом нормальном текстовом поле. Реализация: - cursorToDigitIdx — мапит позицию курсора в display к индексу в массиве цифр (пробелы форматирования пропускаются). - digitIdxToCursor — обратное: после операции ставит курсор сразу после последней изменённой цифры (через пробел если он там есть, чтобы не было визуального скачка). - Backspace на позиции idx удаляет цифру (idx-1); Delete удаляет цифру idx; ввод цифры вставляет в позицию idx. - Префикс «+7 » защищён: onSelect ловит попытку курсора влезть в позиции 0..2 и мягко переставляет на 3. |
||
|
|
a7130f3116 |
fix(phone): полностью переписать на простую модель — цифры как single source of truth
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m5s
CI / Web (React + Vite) (push) Successful in 38s
Docker Public / Build + push Public (push) Successful in 27s
Docker Web / Build + push Web (push) Successful in 32s
Docker Public / Deploy Public on stage (push) Successful in 10s
Docker Web / Deploy Web on stage (push) Successful in 11s
Предыдущие итерации пытались парсить промежуточный raw input от браузера и постоянно ловили баги: курсор не там → парсер путал префикс с введёнными цифрами; Backspace на странной позиции → блокировался не там где надо. Новая модель: фронт полностью контролирует input, нативный ввод запрещён. Все клавиши обрабатываются вручную в onKeyDown: - Цифра → если набрано <10, добавить в конец. - Backspace/Delete → если есть цифры, удалить последнюю. - Любой другой символ → игнор (preventDefault). - Шорткаты (Cmd/Ctrl+что-то), стрелки, Tab, Enter, Esc → пропускаем. Курсор автоматически держим в конце display'а (после фокуса/клика/изменения). Paste обрабатывается отдельно через onPaste с нормализацией. onChange = no-op (React-warning заглушка). Бенефиты: Backspace теперь всегда удаляет цифру, без оглядки на позицию. Не-цифры физически невозможно ввести. Префикс «+7 » никогда не повреждается. |
||
|
|
16fe7580af |
fix(phone): блокировать ввод не-цифр на уровне keyDown
Some checks failed
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m4s
CI / Web (React + Vite) (push) Failing after 37s
Docker Public / Build + push Public (push) Successful in 26s
Docker Web / Build + push Web (push) Failing after 26s
Docker Web / Deploy Web on stage (push) Has been skipped
Docker Public / Deploy Public on stage (push) Successful in 10s
Предыдущий fix не покрывал кейс когда курсор оказывался не сразу после «+7 » (в начале строки или в середине). parseRawInput не находил префикс на нужной позиции и «7» снова попадала в подсчёт. Корректное решение: блокировать любой не-цифровой символ через preventDefault в onKeyDown — тогда он вообще не доходит до input, парсер видит только валидные цифры. Сохранены: Backspace/Delete (с защитой префикса), стрелки и навигация, Cmd/Ctrl+A/C/V/X для копи-пасты, Enter для submit. Paste произвольной строки по-прежнему работает через onChange. |
||
|
|
47c349818f |
fix(phone): не считать «7» из префикса как введённую цифру
Some checks failed
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m5s
CI / Web (React + Vite) (push) Failing after 37s
Docker Public / Build + push Public (push) Successful in 27s
Docker Web / Build + push Web (push) Failing after 27s
Docker Web / Deploy Web on stage (push) Has been skipped
Docker Public / Deploy Public on stage (push) Successful in 11s
Баг: при нажатии любой не-цифры (буквы, пробела) поле подставляло «7». Корень: extractDigits парсил полное e.target.value включая префикс «+7», и его «7» попадала в d, добавляясь как введённый юзером символ. Backspace на пустом поле не работал по той же причине. Фикс: новая функция parseRawInput отделяет префикс «+7 » ДО извлечения цифр. Применена в handleChange обоих PhoneInput (web + public). Кейс paste без префикса (8XXXXXXXXXX / 7XXXXXXXXXX из 11 цифр) сохранён. |
||
|
|
2301446b06 |
feat(phone): единый PhoneInput с зашитым «+7» и ФЛК Казахстана
Some checks failed
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m1s
CI / Web (React + Vite) (push) Failing after 37s
Docker Public / Build + push Public (push) Successful in 27s
Docker Web / Build + push Web (push) Failing after 25s
Docker Web / Deploy Web on stage (push) Has been skipped
Docker Public / Deploy Public on stage (push) Successful in 10s
Поле телефона во всех формах (web + public) теперь использует общий компонент: - Префикс «+7 » всегда виден и не удаляется (Backspace/Delete на позиции ≤3 блокируется). - Принимаются только цифры (буквы и спецсимволы автоматически отфильтровываются). - Авто-форматирование при вводе: «+7 7XX XXX XX XX». - Paste произвольного формата нормализуется (поддерживается ведущая «8», «+7…», скобки, дефисы). - Наружу через onChange отдаётся каноничное «+7XXXXXXXXXX». Подключено в: - food-market.public/SignupForm - food-market.web/CounterpartiesPage (контрагенты) - food-market.web/EmployeesPage (сотрудники) - food-market.web/SuperAdminOrgEmployeesPage (управление сотрудниками SuperAdmin) - food-market.web/SuperAdminOrgCreatePage (создание организации SuperAdmin) |