@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.
108 lines (107 loc) • 6.57 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { StylingConfig } from '../styling/styling-config';
import { PostRegistrationAction } from './interfaces/post-registration-action';
import { getMinimumWidgetContext } from '../../editor/widget-framework/widget-context';
import { ActivationMethod } from '../../rest-sdk/dto/registration-settings';
import { RestClient, RestSdkTypes } from '../../rest-sdk/rest-client';
import { RootUrlService } from '../../rest-sdk/root-url.service';
import { RestClientForContext } from '../../services/rest-client-for-context';
import { Tracer } from '@progress/sitefinity-nextjs-sdk/diagnostics/empty';
import { getHostServerContext } from '../../services/server-context';
import { RenderView } from '../common/render-view';
import { RegistrationDefaultView } from './registration.view';
import { getCustomAttributes, htmlAttributes, setWarning } from '../../editor/widget-framework/attributes';
import { classNames } from '../../editor/utils/classNames';
import { StyleGenerator } from '../styling/style-generator.service';
import { VisibilityStyle } from '../styling/visibility-style';
export async function Registration(props) {
const { span, ctx } = Tracer.traceWidget(props, true);
const entity = props.model.Properties;
const context = props.requestContext;
const viewProps = populateViewProps(entity, props);
if (entity.ExternalProviders && entity.ExternalProviders.length) {
const externalProviders = await RestClient.getExternalProviders({ traceContext: ctx });
viewProps.externalProviders = externalProviders.filter((p) => entity.ExternalProviders?.indexOf(p.Name) !== -1);
}
try {
const loginPage = await RestClientForContext.getItem(entity.LoginPage, { type: RestSdkTypes.Pages, culture: props.requestContext.culture, traceContext: ctx });
if (loginPage) {
viewProps.loginPageUrl = loginPage.ViewUrl;
}
}
catch (error) { /* empty */ }
if (context.isLive) {
const host = getHostServerContext() || RootUrlService.getServerCmsUrl();
viewProps.activationPageUrl = host + '/' + context.url;
}
if (entity.PostRegistrationAction === PostRegistrationAction.RedirectToPage) {
try {
const postRegistrationRedirectPage = await RestClientForContext.getItem(entity.PostRegistrationRedirectPage, { type: RestSdkTypes.Pages, culture: context.culture });
if (postRegistrationRedirectPage) {
viewProps.redirectUrl = postRegistrationRedirectPage.ViewUrl;
}
}
catch (error) { /* empty */ }
}
const regSettings = await RestClient.getRegistrationSettings({ traceContext: ctx });
if (!regSettings.RegistrationEnabled) {
const warning = 'Registration is disabled. To enable registration on your site go to Administration > Advanced settings > Security > User registration settings, or contact your administrator for assistance.';
setWarning(viewProps.attributes, warning);
}
else if (regSettings.ActivationMethod === ActivationMethod.AfterConfirmation && !regSettings.SmtpConfigured) {
const warning = 'Confirmation email cannot be sent because the system has not been configured to send emails. Configure SMTP settings or contact your administrator for assistance.';
setWarning(viewProps.attributes, warning);
}
viewProps.requiresQuestionAndAnswer = regSettings.RequiresQuestionAndAnswer;
viewProps.activationMethod = regSettings.ActivationMethod;
return (_jsx(RenderView, { viewName: entity.SfViewName, widgetKey: props.model.Name, traceSpan: span, viewProps: viewProps, children: _jsx(RegistrationDefaultView, { ...viewProps }) }));
}
function populateViewProps(entity, widgetContext) {
const dataAttributes = htmlAttributes(widgetContext);
const marginClass = entity.Margins && StyleGenerator.getMarginClasses(entity.Margins);
dataAttributes['className'] = classNames(entity.CssClass, marginClass);
const customAttributes = getCustomAttributes(entity.Attributes, 'Registration');
const widgetAttributes = {
['data-sf-invalid']: StylingConfig.InvalidClass,
['data-sf-role']: 'sf-registration-container',
['data-sf-visibility-hidden']: StylingConfig.VisibilityClasses[VisibilityStyle.Hidden]
};
const culture = widgetContext.requestContext.culture;
return {
registrationHandlerPath: `/${RootUrlService.getWebServicePath()}/Registration${culture ? `?sf_culture=${culture}` : ''}`,
resendConfirmationEmailHandlerPath: `/${RootUrlService.getWebServicePath()}/ResendConfirmationEmail${culture ? `?sf_culture=${culture}` : ''}`,
externalLoginHandlerPath: '/sitefinity/external-login-handler',
postRegistrationAction: entity.PostRegistrationAction,
labels: {
header: entity.Header,
firstNameLabel: entity.FirstNameLabel,
lastNameLabel: entity.LastNameLabel,
emailLabel: entity.EmailLabel,
passwordLabel: entity.PasswordLabel,
repeatPasswordLabel: entity.RepeatPasswordLabel,
secretQuestionLabel: entity.SecretQuestionLabel,
secretAnswerLabel: entity.SecretAnswerLabel,
registerButtonLabel: entity.RegisterButtonLabel,
activationLinkHeader: entity.ActivationLinkHeader,
activationLinkLabel: entity.ActivationLinkLabel,
sendAgainLink: entity.SendAgainLink,
sendAgainLabel: entity.SendAgainLabel,
successHeader: entity.SuccessHeader,
successLabel: entity.SuccessLabel,
loginLabel: entity.LoginLabel,
loginLink: entity.LoginLink,
externalProvidersHeader: entity.ExternalProvidersHeader,
validationRequiredMessage: entity.ValidationRequiredMessage,
validationMismatchMessage: entity.ValidationMismatchMessage,
validationInvalidEmailMessage: entity.ValidationInvalidEmailMessage,
activationExpiredHeader: entity.ActivationExpiredHeader,
activationExpiredLabel: entity.ActivationExpiredLabel,
activationExpiredBtnText: entity.ActivationExpiredBtnText
},
visibilityClasses: StylingConfig.VisibilityClasses,
invalidClass: StylingConfig.InvalidClass,
webserviceApiKey: widgetContext.requestContext.webserviceApiKey,
attributes: { ...dataAttributes, ...customAttributes, ...widgetAttributes },
widgetContext: getMinimumWidgetContext(widgetContext)
};
}