@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.
69 lines (68 loc) • 3.73 kB
JavaScript
'use client';
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { useEffect, useMemo, useState } from 'react';
import { ForgottenPasswordFormClient } from './forgotten-password-form.client';
import { ResetPasswordFormClient } from './reset-password-form.client';
import { useSearchParams } from 'next/navigation';
import { getQueryParams } from '../common/query-params';
import { RestClient } from '../../rest-sdk/rest-client';
import { SF_WEBSERVICE_API_KEY_HEADER } from '../common/utils';
const PasswordRecoveryQueryStringKey = 'vk';
export function ResetPasswordDefaultTemplate(props) {
const labels = props.labels;
const context = props.widgetContext.requestContext;
const [propsClone, setPropsClone] = useState(JSON.parse(JSON.stringify(props)));
const searchParams = useSearchParams();
const queryParams = useMemo(() => {
return getQueryParams(searchParams);
}, [searchParams]);
const isResetPasswordRequest = useMemo(() => {
if (context.isLive) {
if (queryParams[PasswordRecoveryQueryStringKey]) {
return true;
}
}
return false;
}, [context, queryParams]);
useEffect(() => {
const queryList = new URLSearchParams(queryParams);
const queryString = '?' + queryList.toString();
setPropsClone(currentProps => {
return {
...currentProps,
securityToken: queryString
};
});
if (isResetPasswordRequest) {
const headers = {};
if (props.webserviceApiKey) {
headers[SF_WEBSERVICE_API_KEY_HEADER] = props.webserviceApiKey;
}
RestClient.getResetPasswordModel(queryString, undefined, headers).then(resetPasswordModel => {
setPropsClone(currentProps => {
return {
...currentProps,
requiresQuestionAndAnswer: resetPasswordModel.RequiresQuestionAndAnswer,
securityQuestion: resetPasswordModel.SecurityQuestion
};
});
}).catch(() => {
// In terms of security, if there is some error with the user get, we display common error message to the user.
setPropsClone(currentProps => {
return {
...currentProps,
error: true
};
});
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isResetPasswordRequest]);
return (_jsx(_Fragment, { children: _jsx("div", { ...propsClone.attributes, children: isResetPasswordRequest ?
_jsx("div", { "data-sf-role": "sf-reset-password-container", children: propsClone.error || (propsClone.requiresQuestionAndAnswer && !propsClone.securityQuestion) ?
_jsxs(_Fragment, { children: [_jsx("h2", { children: labels.resetPasswordHeader }), _jsx("div", { "data-sf-role": "error-message-container", className: "alert alert-danger", role: "alert", "aria-live": "assertive", children: labels.errorMessage })] })
:
_jsx(ResetPasswordFormClient, { ...propsClone }) })
: _jsxs("div", { "data-sf-role": "sf-forgotten-password-container", children: [_jsx("h2", { className: "mb-3", children: labels.forgottenPasswordHeader }), _jsx(ForgottenPasswordFormClient, { ...propsClone }), propsClone.loginPageUrl &&
_jsx("a", { href: propsClone.loginPageUrl, className: "text-decoration-none", children: labels.backLinkLabel })] }) }) }));
}