[page-templates] Refresh эмбеда не обновляет контент (lag коллаб-персиста) + нужна матрица веб-тестов #40
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Кнопка Refresh на узле page-embed работает криво: после редактирования исходной страницы эмбед не обновляется даже после нажатия кнопки.
Что выяснено при проверке
POST /api/pages/template/lookupотдаёт актуальный контент, если он сохранён в БД. Проверено: меняюpages.contentисходной страницы через REST → следующий lookup сразу возвращает новый контент. То есть сервер читает живойpages.content.refresh()(page-embed-lookup-context.tsx:110) чиститresultCacheRef+inFlightRef, ставит waiter иenqueue;flush()(строка 41) перезапрашивает и пушит результат подписчикам (set(r)).Главная гипотеза причины
Реальный сценарий — правка источника в живом редакторе (collab/Yjs), а не через REST. Правки уходят в Yjs-документ и попадают в
pages.contentтолько после debounced-персиста коллаба.template/lookupчитает столбецpages.content, поэтому:Итог для пользователя: «жму Refresh — не меняется».
Направление фикса (обсуждаемо):
pages.content;Дополнительно проверить клиент: точно ли узел контента (
page-embed-content.tsx) ре-рендерится на НОВЫЙ контент, а не мемоизируется поsourcePageId(если контент тот же объект/ключ — обновление не отрисуется).Нужно много и вдумчиво тестировать в вебе
Этот узел завязан на коллаб, кэш, кэш-бастинг, вложенность и права — нужен прогон матрицы сценариев вручную в браузере:
PAGE_EMBED_MAX_DEPTH.isCycleне должен зацикливать.Файлы
apps/client/src/features/editor/components/page-embed/page-embed-lookup-context.tsx(кэш/refresh/flush)apps/client/src/features/editor/components/page-embed/page-embed-view.tsx(handleRefresh)apps/client/src/features/editor/components/page-embed/page-embed-content.tsx(ре-рендер контента)apps/server/src/core/page/transclusion/(page-template.controller.ts,transclusion.service.ts) — источник контента для lookup, связь с коллабом