У меня проблемы с предварительным просмотром страниц в SmartEdit. Иногда загрузка ... застревает там навсегда, и эта проблема, по-видимому, связана со временем загрузки DOM.
Если у меня запущена консоль devtools, скорее всего, страница загрузится 1/10 раз, в Mozilla она работает 10/10 без запущенной консоли браузера. В общем, настройка кажется прекрасной, все работает, как задумано, за исключением этой раздражающей проблемы с постоянной загрузкой.
На вкладке сети происходит сбой cx-preview, появляется ошибка 200, и загрузка остается, хотя компоненты на странице видны за наложением Loading
Также перед ошибкой 200 из вызова cx-preview есть еще одна красная с текстом (отменено) в конце.
Обновление: похоже, здесь есть проблема, когда cx-preview устанавливается в сериализаторе. Если я удалю условие state.url.length, загрузка будет постоянной.
import { RouterStateSnapshot } from '@angular/router';
import {
ActivatedRouterStateSnapshot,
CmsActivatedRouteSnapshot,
PageContext,
PageType
} from '@spartacus/core';
export class AokCuRouterStateSerializer {
serialize(routerState: RouterStateSnapshot): ActivatedRouterStateSnapshot {
const { url } = routerState;
const { queryParams } = routerState.root;
let state: CmsActivatedRouteSnapshot = routerState.root as CmsActivatedRouteSnapshot;
let cmsRequired = false;
let context: PageContext;
while (state.firstChild) {
state = state.firstChild as CmsActivatedRouteSnapshot;
if (state.data && state.data.cxCmsRouteContext) {
context = state.data.cxCmsRouteContext;
}
if (
!cmsRequired &&
(context ||
(state.routeConfig &&
state.routeConfig.canActivate &&
state.routeConfig.canActivate.find(
x => x && x.guardName === 'CmsPageGuard'
)))
) {
cmsRequired = true;
}
}
const { params } = state;
if (state.url.length > 0 && state.url[0].path === 'cx-preview') {
context = {
id: 'smartedit-preview',
type: PageType.CONTENT_PAGE
};
} else {
if (params['productCode']) {
context = { id: params['productCode'], type: PageType.PRODUCT_PAGE };
} else if (params['orderCode']) {
context = {
id: 'order-' + params['orderCode'],
type: PageType.CONTENT_PAGE
};
} else if (params['categoryCode']) {
context = { id: params['categoryCode'], type: PageType.CATEGORY_PAGE };
} else if (params['brandCode']) {
context = { id: params['brandCode'], type: PageType.CATEGORY_PAGE };
} else if (state.data.pageLabel !== undefined) {
context = { id: state.data.pageLabel, type: PageType.CONTENT_PAGE };
} else if (!context) {
if (state.url.length > 0) {
const pageLabel =
'/' + state.url.map(urlSegment => urlSegment.path).join('/');
context = {
id: pageLabel,
type: PageType.CONTENT_PAGE
};
} else {
context = {
id: 'homepage',
type: PageType.CONTENT_PAGE
};
}
}
}
return { url, queryParams, params, context, cmsRequired };
}
}