Commit Graph

195 Commits

Author SHA1 Message Date
ff74dd1852 Merge branch 'main' of https://github.com/iisultanov/iistwin 2026-07-16 15:22:48 +03:00
509eb05c0b fix(contract-number): input шифра заказчика снова редактируемый
- Убрано локальное состояние customerValue, теперь значение берётся напрямую из parsed.value

- Убран лишний useEffect, который мог сбрасывать ввод при глобальном редактировании

- Состояние mode продолжает синхронизироваться с value prop
2026-07-16 15:21:50 +03:00
iisultanov
c76649b79f fix(TaskDetail): inline editors horizontal alignment
- inputClass: w-full → w-auto (prevents input from wrapping below label)
- textareaClass: flex-1 → w-auto min-w-[200px]
- Increases max-w from 280px to 320px for longer values
- Fixes text/select inputs appearing on new line instead of inline with label
2026-07-15 22:22:47 +03:00
iisultanov
c4421702b8 fix(ContractNumberField): wider select, prevent text truncation
- compact: max-w-[180px] → w-auto (fit content)
- SelectTrigger: + w-auto min-w-0 (shrink to fit)
- Preview: + whitespace-nowrap, w-auto
- flex-wrap → flex-nowrap (prevent line breaks)
- Switch: scale-75 → scale-[0.65] (more compact)
- Fixes '#8 ООО...' truncation and label wrapping
2026-07-15 22:22:28 +03:00
iisultanov
d3b1869612 fix(ContractNumberField): clean up compact inline layout
- Hide 'Номер заказчика' label in compact mode (only switch shown)
- Shrink switch to scale-75 in compact mode
- Shorten placeholders: 'Юрлицо' / 'Шифр'
- Reduce min-widths: select 180px, input 160px, preview 180px
- Use gap-1.5 instead of space-x-2 in preview block
- Fixes cluttered inline edit appearance next to field label
2026-07-15 22:12:37 +03:00
iisultanov
807c2c8680 fix(FieldOverlay): vertically center editor content
- add flex items-center to fitContainer overlay
- fixes editor appearing at top edge instead of centering on field label
2026-07-15 21:42:39 +03:00
iisultanov
dfdcd4c160 fix(ContractNumberField): fallback to current value on preview error
- catch block: use parsed.value as fallback instead of empty string
- remove error display in UI — show current value instead
- add parsed.value as fallback before 'Select legal entity' message
- fixes 'Не удалось загрузить номер' on first edit
2026-07-15 21:42:15 +03:00
agent
f59409fba1 fix: restore original flex layout in FieldValueRow
- Revert NotionFieldRow grid layout back to original flex layout
- Keep StickyActionBar at bottom (not top)
- Add pencil icon on hover in left column
- Keep all original overlay logic (wide overlay for contract-number, date+prolongation)
- Preserve inline horizontal layout for extra elements (checkbox, calendar icon)

Fixes: vertical stacking of extra elements, misaligned fields
2026-07-16 01:38:29 +08:00
agent
2331dc00a5 ui: Notion-style inline editing for task detail fields
- Add useInlineEdit hook for per-field editing (double-click to edit)
- Add useDirtyFields hook for tracking unsaved changes
- Add NotionFieldRow component with CSS Grid layout (140px label + 1fr value)
- Add StickyActionBar component (fixed bottom bar with Save/Cancel)
- Remove editModeBar from top (was shifting content down)
- Replace field flex layout with notion-field-row grid
- Add unified input styles (h-8, centered text) in CSS
- Add safe-area-bottom for iOS PWA
- Buttons now appear at bottom only when fields are dirty

Refs: TaskTitan CRM UI refactor
2026-07-16 01:22:56 +08:00
a4a3a9ca18 fix(ui): синхронизация contract-number и горизонтальная дата
- ContractNumberField: mode и customerValue теперь синхронизируются с value prop через useEffect

- TaskDetail: date/datetime input используют w-auto, чтобы чекбокс автопролонгации шёл в одну строку
2026-07-15 17:22:37 +03:00
0ea3d8c49e fix(ui): оверлей inline-редактора растягивается по content
- FieldOverlay: при fitOverlay=false добавлен w-max, чтобы оверлей растягивался по ширине редактора, а не обрезался по read-view

- TaskDetail: date/datetime с автопролонгацией используют fitOverlay=false и overlayMinWidth=280
2026-07-15 16:58:37 +03:00
9e388fb644 fix(ui): горизонтальное расположение подполей в inline-редакторе
- ContractNumberField compact: переключатель, select юрлица и input/preview в одну строку

- TaskDetail: date/datetime с автопролонгацией — input и чекбокс в одну строку

- Увеличена max-width обёртки contract-number до 640px
2026-07-15 16:46:48 +03:00
2b3a9f768b fix(ui): плоский inline-оверлей и компактный редактор номера договора
- FieldOverlay: border-input, shadow-sm, убран overflow-hidden по умолчанию

- TaskDetail: input-редакторы h-7 leading-6, для contract-number fitOverlay=false

- ContractNumberField: добавлен compact-режим, подполя не обрезаются

- Создание задачи оставлено с вертикальным layout
2026-07-15 15:38:22 +03:00
2b682d5ad3 fix: allow app admins to access MedSchedule UI and API 2026-07-15 11:10:46 +03:00
9c6eaa5dcf feat: подсправочники — отображение в форме задачи, фильтрация и отображение значений 2026-07-15 10:56:25 +03:00
f560facabd fix: MedSchedule ESM import for Router and data table links resolution 2026-07-15 09:58:07 +03:00
f519ce95db feat: MedSchedule модуль — семейный медицинский помощник с Telegram/MAX ботом, n8n OCR и /med UI 2026-07-15 09:42:55 +03:00
d35d0cd1ef fix: textarea раскрывается по высоте текста, файлы горизонтально
- textarea overlay max-height увеличен до min(85vh, 700px)
- убрана правая кнопка 'Добавить файл' (дубль левой иконки)
- файлы идут горизонтально, длинные имена обрезаются ellipsis, список занимает доступную ширину
2026-07-14 19:50:32 +03:00
800d7f0b57 fix: textarea overlay шире и заметнее, усилена рамка редактируемых полей
- FieldOverlay: border-2 border-primary/50 + shadow-lg для заметной границы
- TaskDetail textarea/rich-text: overlay растянут на всю ширину контентной области, max-height min(70vh, 500px)
- AutoResizeTextarea в TaskDetail: maxRows увеличен до 25
2026-07-14 17:00:26 +03:00
751fd79727 fix: файлы в поле отображаются горизонтально с переносом по ширине
- FileFieldRow: список файлов в одну строку, перенос на следующую только при нехватке места
- 'Добавить файл' идёт в той же строке после файлов
- Добавлена лёгкая подложка bg-muted/40 вокруг каждого файла для визуального разделения
2026-07-14 16:22:03 +03:00
507c36f7fa feat: inline-редактирование полей через overlay как в Twenty
- Добавлены компоненты InlineField и FieldOverlay для рендера editor поверх read-view
- TaskDetail: FieldValueRow, title и due date переведены на overlay-редактирование
- TaskRegistry: ячейки реестра используют InlineField
- TaskRegularTable: ячейки таблицы-вкладки используют InlineField
- RegistryCellEditor: textarea на AutoResizeTextarea с minRows=1/maxRows=8
- Поля не разбегаются при входе в режим редактирования, textarea растёт внутри оверлея
2026-07-14 16:10:15 +03:00
39e0776d58 fix(ui): принудительно скрывать [hidden], чтобы неактивные вкладки Radix не давали огромный отступ 2026-07-14 12:01:02 +03:00
1bcf09b667 fix(migrations): идемпотентное добавление qr_generation_enabled
Используем ADD COLUMN IF NOT EXISTS, чтобы миграция не падала, если колонка уже есть.
2026-07-13 17:14:01 +03:00
9dbeae86de feat(qr): пакетная генерация QR-кодов по форме
- Добавлена миграция и поле forms.qr_generation_enabled.
- В редакторе формы (вкладка «Основное») добавлен переключатель «Показывать кнопку генерации QR в реестре форм».
- В реестре форм (/forms) рядом со статусом формы появляется кнопка QR, если toggle включён.
- Новый компонент BatchTaskQrDialog: генерирует QR для всех задач формы по всем qr.scan-шаблонам, позволяет скачать отдельный PNG или все сразу ZIP-архивом.
- Добавлена зависимость jszip.
2026-07-13 16:58:25 +03:00
0da6c04790 fix(permissions): restore admin access after page reload
- /api/auth/me now returns app-role permissions (was empty after reload).
- client hasPermission/hasAnyPermission now bypass admin so UI queries are not disabled when permissions array is stale.
2026-07-13 16:16:46 +03:00
d91dd2bd92 feat(directories): import/export hierarchical data tables with template button
- server/storage/data-tables-core.storage.ts: support parentId in sync operations
- server/routes/data-tables-sync.routes.ts: validate parent references and cycles for hierarchical rows
- client/TableEditor.tsx: export/import _id/_parent_id/_position, add Download Template button
2026-07-12 23:29:35 +03:00
09861fc966 feat: настраиваемая колонка отображения в дереве справочника
- Добавлено поле data_tables.tree_display_column_index.
- Backend /api/directories/:id/rows/tree возвращает displayColumnIndex и
  формирует label для row-узлов на основе выбранной колонки.
- В редакторе справочника добавлен селектор «Колонка для отображения в дереве».
- DirectoryRowTree, DirectoryColumnTree, DirectoryTreeSelect,
  DirectoryTreeMultiSelect используют настроенную колонку.
- TableFieldSelect / TableFieldMultiSelect используют
  treeDisplayColumnIndex справочника как fallback, если в поле формы
  не задан displayColumn.
- Миграция 0057 + запись в _journal.json.
2026-07-12 23:07:34 +03:00
4e2a622265 fix: заменить drizzle-kit migrate на migrate-docker.js как единственный способ миграций
- package.json: db:migrate теперь запускает scripts/migrate-docker.js
- docker-entrypoint.sh: использует npm run db:migrate вместо прямого вызова node scripts/migrate-docker.js

drizzle-kit migrate падает на сервере из-за ручных SQL-миграций без snapshot'ов,
поэтому официально переводим миграции на проверенный migrate-docker.js.
2026-07-12 22:26:36 +03:00
350397b8cd Миграции: актуализирован migrations/meta/_journal.json для ручных миграций 0041-0056 2026-07-12 22:17:30 +03:00
782731674b Древовидные справочники: выбор колонки для дерева (treeColumnIndex) и API /rows/tree 2026-07-12 21:59:38 +03:00
ec08f3222d Древовидные справочники: parent_id, drag&drop, древовидный выбор в полях table 2026-07-12 20:55:30 +03:00
833fa97f56 feat(qr): offline show_list диалог для QR-автоматизации КИПиА
- clientAutomationEngine: onShowTaskDialog callback для show_list
- QrHandler: Dialog со списком найденных задач, навигация на /forms/11/tasks/:id
2026-07-11 21:48:35 +03:00
af8920f920 fix(auth): не выкидывать пользователя при сетевой ошибке refresh, access token 30 дней
- queryClient: refreshSession возвращает reason (network/unauthorized);
  при network-ошибке не делаем logout, а бросаем network_error_during_refresh.
- useAuth: checkAuth и refreshUser не сбрасывают сессию при network-ошибке
  во время refresh, переводят в офлайн-режим.
- auth.service: remember берётся из сессии, race tolerance 5 минут.
- access token lifetime унифицирован до 30 дней по умолчанию, cookie maxAge
  теперь совпадает с JWT expiry (было 15 минут fallback).
2026-07-10 10:04:12 +03:00
95279b8fcc feat: skin engine + Twenty CRM theme for iistwin
- Add client/src/themes/ with tokens, built-in skins (iistwin, twenty, omegaprom)
- Add ThemeProvider with data-skin/data-theme and runtime CSS for custom skins
- Add npm run skins:generate script for build-time CSS generation
- Add organization_skins table, migration and CRUD API
- Add activeSkinId to organizations and expose it in /api/auth/me
- Add skin switcher in /profile and admin skin editor in /settings/appearance
- Adapt index.css hardcoded colors to skin tokens
- Update AGENTS.md and Obsidian notes
2026-07-09 20:25:49 +03:00
7ed89f7f97 fix(chat): авто-сброс unread badge при открытом активном чате и синхронизация с сообщением 2026-07-09 10:19:29 +03:00
d70827b39e Удалены случайно попавшие cookies.txt и tmp/, добавлены в .gitignore 2026-07-08 21:16:52 +03:00
7b830c658d Надёжная real-time доставка сообщений в чатах: SSE buffer, Last-Event-ID, polling fallback 2026-07-08 21:15:40 +03:00
be3ee4e625 fix(registry): Shift+клик выделяет диапазон от якоря, якорь хранится в TaskView 2026-07-08 19:32:58 +03:00
70dfe07fa6 RAG: ночная пакетная индексация эмбеддингов, очередь embedding_queue, MCP get_organization_context, снижение OLLAMA_KEEP_ALIVE 2026-07-08 15:57:25 +03:00
1e9131753d fix(registry): Alt + клик тоже переключает выделение задачи 2026-07-08 15:35:07 +03:00
64ba1b3b66 fix(registry): Ctrl/Cmd выделение не конфликтует с bulk-выбором; лимит bulk-delete 1000 с чанками по 100 2026-07-08 15:27:13 +03:00
eec350c6da feat(registry): массовое выделение задач через Ctrl/Cmd и Shift + клик 2026-07-08 13:55:30 +03:00
6826d82850 feat(documents): папки шаблонов, маппинги и поле document_template; fix(batch): атомарное создание задач, idempotency и массовое удаление в реестре 2026-07-08 13:33:14 +03:00
fc8e85832c fix(qr): useState для containerEl, чтобы effect запускался после монтирования DialogContent 2026-07-07 21:17:27 +03:00
1f5ecb6da4 fix(number-fields): избегаем потери точности длинных чисел
- number-поля теперь рендерятся как text + inputMode=numeric,
  чтобы браузер не округлял значения через input type=number
- пробелы при вставке в number-поля удаляются
- бэкенд нормализует значения number-полей в строку перед сохранением
- добавлен хелпер normalizeFieldValueForStorage

Closes: искажение расчётного счёта и других длинных числовых полей
2026-07-07 21:03:40 +03:00