Skip to content

feat(vueManager): MS3OrderTabsRegistry для кастомных вкладок заказа#167

Merged
biz87 merged 4 commits intobetafrom
feat/issue-166-order-tabs-registry
Mar 28, 2026
Merged

feat(vueManager): MS3OrderTabsRegistry для кастомных вкладок заказа#167
biz87 merged 4 commits intobetafrom
feat/issue-166-order-tabs-registry

Conversation

@Ibochkarev
Copy link
Copy Markdown
Member

@Ibochkarev Ibochkarev commented Mar 22, 2026

Описание

Добавлен window.MS3OrderTabsRegistry по аналогии с MS3ProductTabsRegistry: сторонние дополнения могут регистрировать вкладки на экране заказа (Vue или ExtJS) без правки ядра. Очередь регистрации до монтирования Vue, общие пропсы (orderId, order, config, isCreateMode), сортировка по position, флаг hideOnCreate, запрет ключей встроенных вкладок, снимок конфига в очереди, JSDoc по реактивности Vue и снимку данных в ExtJS.

Изменённые/новые файлы: vueManager/src/entries/order.js, vueManager/src/components/OrderView.vue, vueManager/src/utils/orderPluginTab.js.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #166

Как это было протестировано?

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: npm run lint в vueManager
  • MODX: —
  • PHP: —

Скриншоты (если применимо)

До После

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — новых строк UI ядра нет; заголовки кастомных вкладок задаёт плагин
  • PHPStan проходит без новых ошибок — затронут только vueManager (JS/Vue)
  • ESLint проходит без ошибок (для JS/Vue изменений)
  • Обновлён CHANGELOG.md (для значимых изменений)

- window.MS3OrderTabsRegistry with register / _onMounted / _onUnmounted
- OrderView: plugin tabs, Vue + ExtJS, shared props, lazy Ext mount
- orderPluginTab.js: validation, normalization, queue snapshot

Refs #166
@Ibochkarev Ibochkarev requested a review from biz87 March 22, 2026 08:09
- Queue normalized tab instead of raw config (avoid double normalization)
- Reduce waitForOrderTabElement maxAttempts from 100 to 20 (1s enough)
- Move defineExpose to end of setup block (consistency with ProductTabs)
- Add missing blank line before .order-header in CSS
biz87 added 2 commits March 28, 2026 15:30
…e tabs

- Remove double normalization: register() uses validateOrderPluginTabConfig
  only, normalizeOrderPluginTab runs once in registerPluginTab (OrderView)
- Replace setTimeout polling with MutationObserver (consistent with other entries)
- Lazy render Vue plugin tabs (v-if on active tab) to avoid mounting hidden tabs
- Remove unused defineExpose import (compiler macro)
- Remove dead __ms3OrderRootInstance property
- Use console.error for validation failures (consistent with ProductTabsRegistry)
Plugins (via msOnManagerCustomCssJs) may register tabs before the
ES module executes. The previous pattern (|| new OrderTabsRegistry)
silently discarded any pre-existing pendingTabs array.

Now order.js always creates the real class and re-registers any
tabs found in a pre-existing dummy registry object.
@biz87 biz87 merged commit c241156 into beta Mar 28, 2026
@biz87 biz87 deleted the feat/issue-166-order-tabs-registry branch March 28, 2026 18:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Plugin Registry для кастомных вкладок в окне заказа

2 participants