@progress/sitefinity-nextjs-sdk
Version:
Provides OOB widgets developed using the Next.js framework, which includes an abstraction layer for Sitefinity communication. Additionally, it offers an expanded API, typings, and tools for further development and integration.
51 lines (50 loc) • 2.92 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { StyleGenerator } from '../styling/style-generator.service';
import { RestClient } from '../../rest-sdk/rest-client';
import { combineClassNames } from '../../editor/utils/classNames';
import { htmlAttributes, getCustomAttributes } from '../../editor/widget-framework/attributes';
import { getMinimumWidgetContext } from '../../editor/widget-framework/widget-context';
import { Tracer } from '@progress/sitefinity-nextjs-sdk/diagnostics/empty';
import { RenderView } from '../common/render-view';
import { BreadcrumbDefaultView } from './breadcrumb.view';
const PAGE_MISSING_MESSAGE = 'Breadcrumb is visible when you are on a particular page.';
export async function Breadcrumb(props) {
const { span, ctx } = Tracer.traceWidget(props, true);
const dataAttributes = htmlAttributes(props);
if (props.requestContext.isEdit && !props.requestContext.layout.Fields) {
return (_jsx("div", { ...dataAttributes, children: PAGE_MISSING_MESSAGE }));
}
const entity = props.model.Properties;
const args = {
addStartingPageAtEnd: entity.AddCurrentPageLinkAtTheEnd,
addHomePageAtBeginning: entity.AddHomePageLinkAtBeginning,
includeGroupPages: entity.IncludeGroupPages,
currentPageId: props.requestContext.layout.Id,
currentPageUrl: props.requestContext.layout.Fields?.['ViewUrl'],
culture: props.requestContext.culture,
traceContext: ctx
};
if (entity.BreadcrumbIncludeOption === BreadcrumbIncludeOption.SpecificPagePath && entity.SelectedPage && entity.SelectedPage.ItemIdsOrdered && entity.SelectedPage.ItemIdsOrdered.length > 0) {
args.startingPageId = entity.SelectedPage.ItemIdsOrdered[0];
}
if (entity.AllowVirtualNodes) {
args.detailItemInfo = props.requestContext.detailItem;
}
const items = await RestClient.getBreadcrumb(args);
const defaultClass = entity.WrapperCssClass;
const marginClass = entity.Margins && StyleGenerator.getMarginClasses(entity.Margins);
const breadcrumbCustomAttributes = getCustomAttributes(entity.Attributes, 'Breadcrumb');
dataAttributes['className'] = combineClassNames(defaultClass, marginClass);
const viewName = props.model.Properties.SfViewName;
const viewProps = {
widgetContext: getMinimumWidgetContext(props),
attributes: { ...dataAttributes, ...breadcrumbCustomAttributes },
items
};
return (_jsx(RenderView, { viewName: viewName, widgetKey: props.model.Name, traceSpan: span, viewProps: viewProps, children: _jsx(BreadcrumbDefaultView, { ...viewProps }) }));
}
export var BreadcrumbIncludeOption;
(function (BreadcrumbIncludeOption) {
BreadcrumbIncludeOption["CurrentPageFullPath"] = "CurrentPageFullPath";
BreadcrumbIncludeOption["SpecificPagePath"] = "SpecificPagePath";
})(BreadcrumbIncludeOption || (BreadcrumbIncludeOption = {}));