Skip to content

feat(product): Vue вкладка «Связи» и трекер ExtJS→Vue формы - #518

Merged
biz87 merged 3 commits into
betafrom
feat/issue-350-product-form-vue-tracker
Aug 11, 2026
Merged

feat(product): Vue вкладка «Связи» и трекер ExtJS→Vue формы#518
biz87 merged 3 commits into
betafrom
feat/issue-350-product-form-vue-tracker

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Закрывает dual-stack на вкладке «Связи» товара (#114) и фиксирует трекер #350: inventory оставшегося ExtJS на product/category и решение по shell.

CRUD связей вынесен в ProductLinkService, Manager REST под product-data/{id}/links, типы связей — GET /api/mgr/references/link-types. Ext links.grid.js / links.window.js и orphan processors GetList/Multiple удалены. Create/Remove processors делегируют в сервис.

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

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

Связанные Issues

Closes #114
Closes #350
Refs #113 (уже закрыт через #479)

Inventory: оставшийся ExtJS product/category

product (assets/components/minishop3/js/mgr/product/):

  • category.tree.js
  • create.js
  • product.common.js
  • update.js

category (assets/components/minishop3/js/mgr/category/):

  • category.common.js
  • create.js
  • update.js

Shared chrome (вне узкого product/category, но в гибриде): ms3.combo.js, default grid/window и т.п.

Решение по shell (AC #350)

Оставить ExtJS resource shell (create/update) временно. Следующий epic: Vue entry для create/update product. Новые вкладки не должны возвращать Ext xtype на product form.

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

Gate E (exit 0):

php -l core/components/minishop3/src/Services/Product/ProductLinkService.php
php -l core/components/minishop3/src/Controllers/Api/ProductDataController.php
php -l core/components/minishop3/src/Controllers/Api/ReferencesController.php
php -l core/components/minishop3/src/Processors/Product/ProductLink/Create.php
php -l core/components/minishop3/src/Processors/Product/ProductLink/Remove.php
php -l core/components/minishop3/src/ServiceRegistry.php
# → No syntax errors

cd core/components/minishop3
php tests/ProductLinksVueTabTest.php   # OK, exit 0
php tests/ServiceRegistryDiTest.php    # OK, exit 0

cd ../../../vueManager
npm run lint -- src/components/product/ProductLinksTab.vue src/components/product/ProductTabs.vue  # exit 0
npm run build   # exit 0 (product-tabs.min.js; vue-dist в .gitignore)
  • Ручное тестирование (вкладка Связи: list/create/remove, поиск товара)
  • Автоматические тесты (smoke ProductLinksVueTabTest, ESLint)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: branch feat/issue-350-product-form-vue-tracker
  • MODX: n/a (static smoke)
  • PHP: local 8.x

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают существующую функциональность
  • Лексиконы: переиспользованы существующие ключи (ru/en)
  • PHPStan — CI
  • ESLint по затронутым Vue-файлам
  • CHANGELOG — при релизе (не в этом PR)

Дополнительные заметки

  • DELETE scoped: связь должна включать {id} из URL (belongsToProduct), иначе 403.
  • vue-dist в gitignore: после merge нужен npm run build в release/CI.
  • Review loops: code-reviewer + thermo-nuclear + silent-failure-hunter; исправлены scope DELETE, ConfirmDialog в табе, orphan Ext, проверка save/execute.

@Ibochkarev Ibochkarev added enhancement New feature or request javascript Pull requests that update javascript code priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt labels Aug 11, 2026
Ibochkarev added a commit that referenced this pull request Aug 11, 2026
PHPStan: getRequestData() always returns array; ?? [] was invalid (#518).
@Ibochkarev
Ibochkarev requested a review from biz87 August 11, 2026 01:57
Move product links CRUD to ProductLinkService + Manager REST, drop Ext
links grid/window, and document remaining shell ExtJS for #350.
Enforce DELETE scope with lexicon errors, reject batch ids[], extract
testable link-type rules, add ProductLinkServiceTest, and replace
ProductTabs v-else-if chain with built-in component map.
PHPStan: getRequestData() always returns array; ?? [] was invalid (#518).
@Ibochkarev
Ibochkarev force-pushed the feat/issue-350-product-form-vue-tracker branch from e785c60 to 8032a2b Compare August 11, 2026 18:15
@biz87
biz87 merged commit 57e7c27 into beta Aug 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request javascript Pull requests that update javascript code priority: medium Средний приоритет tech-debt Maintainability / refactor / architecture debt

Projects

None yet

2 participants