{"version":3,"file":"954.1ec3c0e15ec7e1103e2e.chunk.js","mappings":"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","sources":["webpack://fed-project/./app/assets/ts/reactcomponents/actions/AlertActions.ts","webpack://fed-project/./app/assets/ts/reactcomponents/actions/RenderFormTriggerActions.ts","webpack://fed-project/./app/assets/ts/reactcomponents/actions/UserActions.ts","webpack://fed-project/./app/assets/ts/reactcomponents/containers/AlertContainer.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/input-components/input-stepper-text.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/AlertMessage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/SidebarContent.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/EditDataPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/back-link.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/MemberState.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/PageTitle.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/popup.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/webshop-product-card.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/webshop-product-detail-edit.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/webshop-product-detail.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/components/webshop-shopping-cart.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/helpers/MenuHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/helpers/PageHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/actions/LidZoekenActions.ts","webpack://fed-project/./app/assets/ts/reactcomponents/containers/helpers/InitialFormValuesHandlerHelper.ts","webpack://fed-project/./app/assets/ts/reactcomponents/containers/FormContainer.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/actions/StepsActions.ts","webpack://fed-project/./app/assets/ts/reactcomponents/actions/ExtraStepsActions.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/KenticoRulesHelper.ts","webpack://fed-project/./app/assets/ts/reactcomponents/utils/DecodeHtmlEntity.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/builders/KenticoRulesCreator.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/helpers/KenticoFormControlHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/helpers/KenticoFormStepHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/helpers/macro-helper.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/builders/OptionsParser.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/builders/form-control-builder.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/builders/kentico-formcontrol-to-react-formcontrol-map.ts","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/KenticoRawFormToJSONForm.ts","webpack://fed-project/./app/assets/ts/reactcomponents/containers/helpers/KenticoFormHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/LogoutPopup.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/containers/KenticoFormContainer.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/kentico/control/create-control.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/TopTaken.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVHero.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/DashboardPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/helpers/LidZoekenHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/helpers/LidZoekenResultaatHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/containers/helpers/UserSettingsHelpers.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/ViewDataPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/WebshopOverviewPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/WebshopShoppingCartPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/WebshopProductDetailPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/CTAViewDataPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/containers/QRCodeContainer.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/QRCodeLidnummer.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/DigitaleLedenpasLidnummerNaam.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/containers/DigitaleLedenpasLidnummerNaamContainer.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/DigitaleLedenpasPage.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVConsentBlock.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVContent.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVDigitaleLedenPasBlock.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/helpers/ElementToPdfHelper.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVHandigeLinks.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVIdealBankSelector.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVLidZoekenZoeker.tsx","webpack://fed-project/./app/assets/ts/core/utils/BooleanUtil.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVLidZoekenResults.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVLidZoekenLoadMore.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVLinkBlock.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVPayment.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVProfielFoto.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVTipBlock.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/LinkSingle.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVViewPageBlock.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/helpers/PageRenderHelpers.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/pages/helpers/create-form-viewmodel.ts","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/AlertBar.tsx","webpack://fed-project/./app/assets/ts/reactcomponents/presentational/widgets/MijnFNVMenu.tsx"],"sourcesContent":["import fetch from 'cross-fetch';\r\nimport { action } from 'typesafe-actions';\r\nimport { Tokenizer } from '@fnv-core/tokens';\r\nimport { Alert } from '../models/Alert';\r\nimport { STORE_ALERT, CLEAR_ALERTS } from '../constants/Constants';\r\nimport { reformatUrlRelativePaths } from '@fnv-core/utils';\r\n\r\nexport const storeAlert = (title: string, type : string, link : string, linkText: string) => action(STORE_ALERT, \r\n {\r\n title : title, \r\n type : type, \r\n link : link,\r\n linkText : linkText\r\n } as Alert);\r\n\r\nexport const clearAlert = () => action(CLEAR_ALERTS);\r\n \r\nexport const getAlertsViaApi = (url : string, userId : string) => dispatch => {\r\n let formattedUrl = Tokenizer.replaceTokens(url, [userId]);\r\n formattedUrl = reformatUrlRelativePaths(formattedUrl);\r\n return fetch(formattedUrl)\r\n .then(response => response.json())\r\n .then(json => {\r\n dispatch(clearAlert());\r\n json.map((item) => dispatch(\r\n storeAlert(\r\n item.Title,\r\n item.Type,\r\n item.Link || \"\",\r\n item.LinkText || \"\"\r\n )\r\n )\r\n );\r\n } \r\n );\r\n};","import { action } from 'typesafe-actions';\r\nimport { STORE_RENDER_FORM_TRIGGER, CLEAR_RENDER_FORM_TRIGGER } from '../constants/Constants';\r\n\r\nexport const storeRenderFormTrigger = (triggerName: string) => action(STORE_RENDER_FORM_TRIGGER, \r\n {\r\n triggerName : triggerName\r\n });\r\n\r\nexport const clearRenderFormTrigger = () => action(CLEAR_RENDER_FORM_TRIGGER); ","import { action } from 'typesafe-actions';\r\nimport { STORE_USER, CLEAR_USER } from '../constants/Constants';\r\n\r\nimport { User } from '../models/User';\r\n\r\nexport const storeUser = (\r\n email: string, \r\n lidnummer : string, \r\n name : string, \r\n accessToken: string,\r\n birthDate: string,\r\n membershipCardActivatedDate: string,\r\n userId: string,\r\n roles: any[]) => action(STORE_USER, \r\n {\r\n email : email, \r\n lidnummer : lidnummer,\r\n name : name,\r\n accessToken : accessToken,\r\n birthDate : birthDate,\r\n membershipCardActivatedDate : membershipCardActivatedDate,\r\n userId: userId,\r\n roles: roles\r\n } as User);\r\n\r\nexport const clearUser = () => action(CLEAR_USER);\r\n","\r\nimport * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { Alert } from \"../presentational/widgets/AlertBar\";\r\nimport { getAlertsViaApi } from '../actions/AlertActions';\r\nimport { AlertService } from \"../services/AlertService\";\r\n\r\nexport interface AlertContainerProps { \r\n showSystemAlerts : boolean;\r\n alerts: any;\r\n getAlertsViaApi: any;\r\n userId: string;\r\n}\r\n\r\nexport interface AlertContainerState {\r\n \r\n}\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n alerts : state.alerts,\r\n userId: state.user.userId\r\n };\r\n};\r\n\r\n\r\nconst mapDispatchToProps = (dispatch : any) => {\r\n return {\r\n getAlertsViaApi: (url: string, userId: string) => {\r\n dispatch(getAlertsViaApi(url, userId));\r\n }\r\n };\r\n};\r\n\r\n\r\n class AlertWrapper extends React.Component {\r\n constructor(props : AlertContainerProps) {\r\n super(props);\r\n\r\n this.state = {\r\n };\r\n\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.showSystemAlerts) {\r\n this.props.getAlertsViaApi(AlertService.getApiUrl(), this.props.userId);\r\n }\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\n\r\nexport const AlertContainer = connect(mapStateToProps, mapDispatchToProps)(AlertWrapper);","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\n\r\nexport interface IInputStepperTextProps {\r\n maxValue : number;\r\n value: number;\r\n enableTextInput: boolean;\r\n onChangeValue : (value : number) => void;\r\n}\r\n\r\nexport const InputStepperText = (props : IInputStepperTextProps) => {\r\n const [value, setValue] = useState(props.value);\r\n\r\n const decreaseValue = (event) => {\r\n event.preventDefault();\r\n if (value > 1) {\r\n const newValue = value - 1;\r\n setValue(newValue);\r\n props.onChangeValue(newValue);\r\n }\r\n return false;\r\n };\r\n\r\n const increaseValue = (event) => {\r\n event.preventDefault();\r\n if (value < props.maxValue) {\r\n const newValue = value + 1;\r\n setValue(newValue);\r\n props.onChangeValue(newValue);\r\n }\r\n return false;\r\n };\r\n\r\n const changeValue = (event) => {\r\n event.preventDefault();\r\n const newValue = parseInt(event.target.value);\r\n if(newValue < props.maxValue && newValue >= 0){\r\n setValue(newValue);\r\n props.onChangeValue(newValue);\r\n }\r\n return false; \r\n };\r\n\r\n return
\r\n \r\n
\r\n \r\n
\r\n \r\n
;\r\n};","import * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { ProcesHandlerHelpers } from '../containers/helpers/ProcesHandlerHelpers';\r\n\r\nexport interface AlertProps {\r\n title: string;\r\n type: string;\r\n link: string;\r\n linkText : string;\r\n}\r\n\r\nfunction getAlertClassName(type: string) {\r\n \r\n let alertClassName : string = \"content__callout-yellow\";\r\n \r\n if (type == \"warning\" || type == \"form-error-block\") {\r\n alertClassName = \"content__callout-yellow\";\r\n }\r\n\r\n if (type == \"information\") {\r\n alertClassName = \"content__callout-blue\";\r\n }\r\n\r\n if (type == \"error\") {\r\n alertClassName = \"content__callout-error\";\r\n }\r\n\r\n if (type == \"succes\") {\r\n alertClassName = \"content__callout-succes\";\r\n }\r\n\r\n return alertClassName + \" \" + (type == \"form-error-block\" ? \"content__callout-form-error\" : \"\");\r\n}\r\n\r\nfunction getAlertIcon(type: string) {\r\n if (type == \"succes\") {\r\n return \"icon icon-success--inversed\";\r\n }\r\n return \"icon \" + (type == \"warning\" || type == \"form-error-block\" ? \"icon-warning--inversed\" : \"icon-info--inversed\");\r\n}\r\n\r\nfunction getAlertLink(link: string, linkText: string) {\r\n if (!link || !linkText) {\r\n return <>;\r\n }\r\n\r\n return <>\r\n {link && linkText && link.indexOf(\"http\") == 0 ? \r\n {linkText}\r\n \r\n :\r\n {linkText}\r\n \r\n }\r\n ;\r\n}\r\n\r\nexport const AlertMessage = (props: AlertProps) =>
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{props.title}
\r\n {getAlertLink(props.link, props.linkText)}\r\n
\r\n
\r\n
;","import * as React from \"react\";\r\nimport { FormService } from \"../services/FormService\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\nimport { StringHelpers } from '../helpers/StringHelpers';\r\n\r\nexport interface SidebarContentProps {\r\n}\r\n\r\nexport interface SidebarContentState {\r\n values: any;\r\n form: string;\r\n}\r\n\r\nexport class SidebarContent extends React.Component {\r\n\r\n state = {\r\n values : undefined,\r\n form : \"\"\r\n };\r\n\r\n componentDidMount() {\r\n FormService.registerRelatedDataCallback(this.onFormUpdate);\r\n }\r\n\r\n componentWillUnmount() {\r\n FormService.registerRelatedDataCallback(undefined);\r\n }\r\n\r\n onFormUpdate = (datasource, formName: string, values: any) => {\r\n\r\n if (values) {\r\n this.setState({values: {...values}, form: formName });\r\n }\r\n }\r\n\r\n render() {\r\n const formConfig = FormService.getCurrentFormConfig();\r\n if (!formConfig.sidebarContent) {\r\n return null;\r\n } \r\n\r\n if (formConfig.sidebarForForm && formConfig.sidebarForForm != this.state.form) {\r\n return null; \r\n }\r\n\r\n return <>\r\n {ReactHtmlParser(StringHelpers.replacePropertiesInString(formConfig.sidebarContent, this.state.values, true))}\r\n ;\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { UserService } from \"@fnv-core/authentication\";\r\nimport { MijnFNVMenu } from \"../widgets/MijnFNVMenu\";\r\nimport { PageHelpers } from \"./helpers/PageHelpers\";\r\nimport { PageRenderHelpers } from \"./helpers/PageRenderHelpers\";\r\nimport { PageProps } from \"./interfaces/PageInterfaces\";\r\nimport { MenuHelpers } from \"./helpers/MenuHelpers\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\nimport { FormService } from \"../../services/FormService\";\r\nimport { MijnFNVPageContext } from \"./helpers/MijnFNVPageContext\";\r\nimport StickyBox from \"react-sticky-box\";\r\nimport { SidebarContent } from \"../../presentational/SidebarContent\";\r\nimport { AnimationService, ANIMATION_DASHBOARD_LOADING_CONTEXT } from '../../services/AnimationService';\r\nimport { getAllUrlParams } from '../../../jslibs/urlparams';\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\nimport { BackLink } from \"./components/back-link\";\r\nimport { createRef } from \"react\";\r\n\r\nconst HeaderWrapper = (props : any) => {\r\n if (!!props.modern) {\r\n return
\r\n
{props.children}
\r\n
\r\n
;\r\n }\r\n return <>{props.children};\r\n};\r\n\r\n\r\nexport interface EditPageState {\r\n IsMember : boolean;\r\n FullName : string;\r\n}\r\n\r\nexport class EditDataPage extends React.Component {\r\n state = {\r\n IsMember : false,\r\n FullName : \"\"\r\n };\r\n\r\n sidebarRef = createRef();\r\n\r\n\r\n componentDidMount() {\r\n FormService.setMemberDetailsCallback(this.setMemberDetails);\r\n\r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n }\r\n\r\n componentWillUnmount() {\r\n FormService.setMemberDetailsCallback(undefined);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n setMemberDetails = () => {\r\n const memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n if (memberDetails && memberDetails.memberName) {\r\n this.setState({\r\n FullName : memberDetails.memberName,\r\n IsMember : memberDetails.isMember\r\n });\r\n } else {\r\n this.setState({FullName: \"\", IsMember: false});\r\n }\r\n } \r\n\r\n render() {\r\n const props = this.props;\r\n\r\n const MijnFnvEditPagina = props.kenticoPage.MijnFnvEditPagina;\r\n const { \r\n BackLinkIsExternal , BackLinkExternalUrl \r\n } = MijnFnvEditPagina;\r\n\r\n const standaloneFormInSite =\r\n props.standaloneFormInSite !== undefined && props.standaloneFormInSite;\r\n\r\n if (props.withBackLink === undefined || props.withBackLink) {\r\n if (props.kenticoPage.MijnFnvEditPagina.MenuType === \"eenvoudig\") {\r\n MenuHelpers.hideMenu();\r\n } else {\r\n MenuHelpers.showMenu();\r\n }\r\n }\r\n\r\n if (!standaloneFormInSite) {\r\n if (props.kenticoPageType === \"FNV.MijnFnvLoginAlsPagina\") {\r\n MenuHelpers.hideBreadCrumbs();\r\n } else if (props.kenticoPage.MijnFnvEditPagina.HideSteps) {\r\n MenuHelpers.showBreadCrumbsEditPage();\r\n } else {\r\n MenuHelpers.hideBreadCrumbs();\r\n }\r\n PageHelpers.setBreadcrumbsPageTitle(\r\n props.kenticoPage.MijnFnvEditPagina.Titel\r\n );\r\n } else {\r\n MenuHelpers.showBreadCrumbs();\r\n }\r\n\r\n let pageWidthCssClass = PageRenderHelpers.getCssClassForEditPageWidth(\r\n props.kenticoPage.MijnFnvEditPagina.PageWidth,\r\n props.kenticoPage.MijnFnvEditPagina.ShowSideBar\r\n );\r\n\r\n let backToPageLinkText =\r\n props.kenticoPage.MijnFnvEditPagina.BackToPageLinkText ||\r\n getResourceString(\"Form.MijnFNV.GoBackText\") || \"Terug naar Mijn FNV\";\r\n\r\n let backToPageLinkUrl = PageHelpers.getMijnFNVRootPathForRole(\r\n BackLinkIsExternal ? BackLinkExternalUrl : props.kenticoPage.MijnFnvEditPagina.BackToPageLinkUrl || \"/\"\r\n );\r\n\r\n let additionalId = \"\";\r\n let urlParams = getAllUrlParams(this.context.search);\r\n if (urlParams.gobackUrl) {\r\n backToPageLinkUrl = urlParams.gobackUrl;\r\n backToPageLinkText = getResourceString(\"Form.MijnFNV.BackText\") || \"Terug\";\r\n if (urlParams.backTitleForCurrentPageBackLink) {\r\n backToPageLinkText = getResourceString(\"Form.MijnFNV.BackToText\") + \" \" + urlParams.backTitleForCurrentPageBackLink;\r\n }\r\n } else\r\n if (!!props.kenticoPage.MijnFnvEditPagina.IncludeAdditionalIdInBackLink) {\r\n if (urlParams[\"additionalId\"]) {\r\n additionalId = urlParams[\"additionalId\"];\r\n backToPageLinkUrl = backToPageLinkUrl + \"?additionalId=\" + additionalId;\r\n }\r\n }\r\n FormService.setBackUrl(backToPageLinkUrl);\r\n\r\n let sidebar = \"\";\r\n if (props.sideBarHtml) {\r\n sidebar = ReactHtmlParser(props.sideBarHtml);\r\n }\r\n\r\n let showLineBelowTitleBlock =\r\n (props.subTitle && props.subTitle !== \"\") ||\r\n (props.introText && props.introText !== \"\");\r\n\r\n let cssColumnsContentContainer = \"col-12 col-md-10\";\r\n if (props.kenticoPageType === \"FNV.MijnFnvLoginAlsPagina\") {\r\n cssColumnsContentContainer = \"col-12\";\r\n pageWidthCssClass = \"col-md-12\";\r\n } else if (props.kenticoPage.MijnFnvEditPagina.ShowSideBar) {\r\n cssColumnsContentContainer = \"col-12 col-md-8\";\r\n }\r\n\r\n let pageRowCssClass =\r\n \"row mijn-fnv__edit-page\" + (standaloneFormInSite ? \" no-gutters\" : \"\");\r\n let mainBlockRowCssClass =\r\n \"row mainBlock-row\" + (standaloneFormInSite ? \" no-gutters\" : \"\");\r\n\r\n if (standaloneFormInSite) {\r\n cssColumnsContentContainer = \"col-12\";\r\n }\r\n\r\n let nameMemberInLidZoekenSubfunction = \"\";\r\n let memberState = <>;\r\n\r\n \r\n if (\r\n this.context &&\r\n this.context.pathParam &&\r\n this.context.pathParam !== UserService.getUserId()\r\n ) {\r\n const memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n if (memberDetails && memberDetails.memberName) {\r\n nameMemberInLidZoekenSubfunction = memberDetails.memberName;\r\n showLineBelowTitleBlock = true;\r\n\r\n memberState = ;\r\n }\r\n } else if (this.state.IsMember !== undefined && this.state.FullName !== \"\") {\r\n nameMemberInLidZoekenSubfunction = this.state.FullName;\r\n showLineBelowTitleBlock = true;\r\n\r\n memberState = ;\r\n }\r\n\r\n let showTitleBlock = true;\r\n let showColumns = true;\r\n let stickySidebar = false;\r\n if (this.props.layoutType === \"modern\") {\r\n showTitleBlock = !!props.showTitleBlock;\r\n showColumns = true;\r\n stickySidebar = true;\r\n if (this.props.stickySidebar !== undefined) {\r\n stickySidebar = !!this.props.stickySidebar;\r\n } \r\n cssColumnsContentContainer = \"col-12 col-md-12 col-lg-10\";\r\n }\r\n\r\n if (this.props.customEditPageClass && this.props.customEditPageClass !== \"\") {\r\n pageRowCssClass += \" \" + this.props.customEditPageClass; \r\n }\r\n\r\n this.handleAnimations();\r\n \r\n let mainBlockEditPageCssClass = \"mainBlock col-12 mijn-fnv__edit-page \" + pageWidthCssClass + \" \" +\r\n (showTitleBlock ? \"\" : \"form--no-page-title\");\r\n \r\n if (this.props.layoutType === \"modern\") {\r\n // this removes the unnecessary paddings on mobile view\r\n cssColumnsContentContainer += \" p-0 px-md-2\";\r\n // this removes the unnecessary paddings on mobile view\r\n mainBlockEditPageCssClass += \" p-0 px-md-2\";\r\n // this removes the negative margins to prevent a horizontal scrollbar on mobile view\r\n mainBlockRowCssClass += \" mr-0 ml-0 mr-md-n2 ml-md-n2\";\r\n } \r\n return (\r\n \r\n {(!standaloneFormInSite && showTitleBlock) && (\r\n
\r\n
\r\n
\r\n \r\n {PageHelpers.isNotCreateAccountPage(props.pathName) &&\r\n (props.withBackLink === undefined || props.withBackLink) && (\r\n \r\n )}\r\n \r\n {props.kenticoPage.MijnFnvEditPagina.Titel}\r\n \r\n {nameMemberInLidZoekenSubfunction &&\r\n nameMemberInLidZoekenSubfunction !== \"\" && (\r\n

\r\n {memberState}{nameMemberInLidZoekenSubfunction}\r\n

\r\n )}\r\n {props.subTitle && props.subTitle !== \"\" && (\r\n

{props.subTitle}

\r\n )}\r\n {props.introText && props.introText !== \"\" && (\r\n

{ReactHtmlParser(props.introText)}

\r\n )}\r\n {showLineBelowTitleBlock &&
}\r\n {props.content &&\r\n props.content !== \"\" &&\r\n !props.contentAfterForm && (\r\n
\r\n {ReactHtmlParser(props.content)}\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n {!standaloneFormInSite && showColumns &&
}\r\n {props.kenticoPage.MijnFnvEditPagina.ShowSideBar ? (\r\n
\r\n {MijnFNVMenu(PageHelpers.getSideMenu(props.kenticoPage), \"\")}\r\n
\r\n ) : null}\r\n
\r\n
\r\n \r\n {(!standaloneFormInSite && !showTitleBlock) && PageHelpers.isNotCreateAccountPage(props.pathName) &&\r\n (props.withBackLink === undefined || props.withBackLink) && (\r\n
\r\n \r\n
\r\n )}\r\n {PageHelpers.getWidgets(props.kenticoPage).map(\r\n (widgetDefinition, index) => {\r\n const definition = {\r\n ...widgetDefinition,\r\n editMode: true,\r\n sidebarRef: this.sidebarRef,\r\n stepsContainerRef: props.kenticoPage.stepsContainerRef,\r\n layoutType: this.props.layoutType,\r\n };\r\n return PageRenderHelpers.renderWidget(\r\n definition,\r\n \"\",\r\n index,\r\n \"edit\",\r\n additionalId\r\n );\r\n }\r\n )}\r\n\r\n {props.content &&\r\n props.content !== \"\" &&\r\n !!props.contentAfterForm && (\r\n
\r\n {ReactHtmlParser(props.content)}\r\n
\r\n )}\r\n
\r\n
\r\n {this.sidebarRef.current?.innerHTML == null &&\r\n <>\r\n {!stickySidebar && sidebar != \"\" &&
{sidebar}
}\r\n {!!stickySidebar && \r\n
\r\n \r\n {sidebar != \"\" && (\r\n
{sidebar}
\r\n )} \r\n
\r\n
\r\n }\r\n \r\n }\r\n
\r\n
\r\n
\r\n {!standaloneFormInSite && showColumns &&
}\r\n
\r\n \r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n","import * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PageHelpers } from \"../helpers/PageHelpers\";\r\n\r\nexport interface IBackLinkProps {\r\n backToPageLinkUrl : string;\r\n backToPageLinkText : string;\r\n isExternalUrl? : boolean;\r\n additionalClassName? : string;\r\n}\r\n\r\nexport const BackLink = (props : IBackLinkProps) => {\r\n if (props.backToPageLinkUrl.indexOf(\"http\") == 0 || !!props.isExternalUrl) {\r\n \r\n let url = props.backToPageLinkUrl || \"\";\r\n if (url.indexOf(\"~\") == 0) {\r\n url = url.slice(1);\r\n }\r\n\r\n return \r\n \r\n {props.backToPageLinkText}\r\n ;\r\n }\r\n return \r\n \r\n {props.backToPageLinkText}\r\n ;\r\n};","import * as React from 'react';\r\nimport { addConditionalModifierClass } from '../../../../helpers';\r\n\r\nexport interface IMemberDetails {\r\n memberName?: string;\r\n isMember?: boolean;\r\n}\r\n\r\n/**\r\n * Displays the member state, if a memberName is given\r\n * @param props \r\n * @returns \r\n */\r\nexport const MemberState = (props: IMemberDetails) => {\r\n if (!props.memberName) {\r\n return null;\r\n }\r\n\r\n const className = addConditionalModifierClass('member-state', 'is-member', props.isMember);\r\n\r\n return (\r\n <>\r\n {props.memberName}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Slug } from '@fnv-core/utils';\r\nimport { addConditionalClass } from '../../../../helpers';\r\n\r\nexport interface IPageTitleProps {\r\n /**\r\n * True for h1, false for h2\r\n */\r\n main: boolean;\r\n /**\r\n * The title text to display\r\n */\r\n title: string;\r\n /**\r\n * An optional subtitle render function\r\n */\r\n subtitleRender?: () => JSX.Element | string;\r\n /**\r\n * An optional modifier class for the subtitle\r\n */\r\n subtitleModifierClass?: string;\r\n /**\r\n * An optional intro\r\n */\r\n intro?: string;\r\n\r\n children?: any;\r\n}\r\n\r\n/**\r\n * Component for displaying a Page Title with an optional subtitle in `children`\r\n * @param {IPageTitleProps} props\r\n */\r\nexport const PageTitle = (props: IPageTitleProps) => {\r\n const headingClassName = `mijn-fnv-${Slug.fromString(props.title)}__title`;\r\n const showDivider = props.main && !props.intro;\r\n\r\n const subtitleClass = addConditionalClass('content__subtitle', `content__subtitle-${props.subtitleModifierClass}`, !!props.subtitleModifierClass);\r\n\r\n return (\r\n <>\r\n {props.main \r\n ?

{props.title}

\r\n :

{props.title}

\r\n }\r\n {props.subtitleRender &&

{props.subtitleRender()}

}\r\n {props.intro &&

{props.intro}

}\r\n {showDivider &&
}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport { Link } from 'react-router-dom';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { createFormWidget } from '../helpers/PageRenderHelpers';\r\nimport { CreateFormViewModel } from '../helpers/create-form-viewmodel';\r\nimport { IFormDefinition } from '../../../interfaces/FormDefinition';\r\n\r\nexport interface IPopupProps {\r\n /**\r\n * Indicates the initial open/close state.\r\n */\r\n opened: boolean;\r\n /**\r\n * Indicates the size of the modal.\r\n */\r\n size?: 'sm' | 'lg' | 'xl';\r\n /**\r\n * The title of the popup.\r\n */\r\n title: string;\r\n /**\r\n * Optional (html)content to render inside the popup. Note that the use of children is also supported.\r\n */\r\n content?: string;\r\n /**\r\n * An optional header image.\r\n */\r\n headerImage?: string;\r\n\r\n /**\r\n * An optional callback to invoke on closing the popup.\r\n */\r\n onHide?: () => Promise;\r\n\r\n /**\r\n * An optional CTA url.\r\n */\r\n ctaUrl?: string;\r\n /**\r\n * The text to display on the CTA.\r\n */\r\n ctaText?: string;\r\n\r\n /**\r\n * An optional form name to render, using the formDefinition.\r\n */\r\n formName?: string;\r\n /**\r\n * The form definition to use when rendering a form.\r\n */\r\n formDefinition?: IFormDefinition;\r\n\r\n /**\r\n * Optionally provide children to render content.\r\n */\r\n children?: any;\r\n}\r\n\r\n/**\r\n * A component for displaying popups.\r\n * @param props The component's properties.\r\n * @returns \r\n */\r\nexport const Popup = (props: IPopupProps) => {\r\n const [show, setShow] = useState(!!props.opened);\r\n\r\n useEffect(() => {\r\n setShow(!!props.opened);\r\n setWindowState(true, window.location.pathname);\r\n\r\n // Use popstate in order for back button to close modal\r\n window.addEventListener('popstate', event => {\r\n if (event.state) {\r\n hideDialog();\r\n }\r\n });\r\n }, [props.opened]);\r\n \r\n const hideDialog = () => {\r\n setShow(false);\r\n };\r\n\r\n const setWindowState = (isPopUp, name) => {\r\n window.history.pushState(isPopUp, name);\r\n };\r\n\r\n const onHide = (refreshPage? : boolean) => {\r\n \r\n setShow(false);\r\n setWindowState(false, window.location.pathname);\r\n const hideCallback = props.onHide ? props.onHide() : Promise.resolve();\r\n\r\n return hideCallback.then(() => {\r\n if (!!refreshPage) {\r\n location.reload();\r\n }\r\n });\r\n };\r\n\r\n const onHideClickEvent = (event) => {\r\n event.preventDefault();\r\n onHide();\r\n return false;\r\n };\r\n\r\n let headerImage = props.headerImage;\r\n if (headerImage?.startsWith('~')) {\r\n headerImage = headerImage.slice(1); \r\n }\r\n\r\n let ctaUrl = props.ctaUrl;\r\n let ctaText = props.ctaText;\r\n let isExternalLink = false;\r\n let targetLink = '';\r\n if (ctaUrl && ctaText) {\r\n if (ctaUrl.startsWith('~')) {\r\n ctaUrl = ctaUrl.slice(1);\r\n isExternalLink = true; \r\n } else {\r\n isExternalLink = ctaUrl.startsWith('http');\r\n targetLink = '_blank';\r\n }\r\n }\r\n\r\n const formName = props.formName;\r\n const formViewModel = formName ? CreateFormViewModel(\r\n props.formDefinition,\r\n formName,\r\n '',\r\n '',\r\n {\r\n fillViaApi: '/internal/formandcontentreact/get/' + formName,\r\n startForm: 'form',\r\n formSteps: ['form'],\r\n formTitle: '',\r\n postUrl: '/internal/formandcontentreact/set/' + formName,\r\n standaloneFormInSite: true,\r\n doFormMultipartPost: true,\r\n thanksPageUrl: '',\r\n errorPageUrl: '',\r\n procesHandlers: 'popup',\r\n OnSubmitSuccessLinkIncludeUrlGuid: true,\r\n reactRouteOnSuccess: '',\r\n reactRouteOnFailure: '-',\r\n noAutoGenerateSummary: true,\r\n thanksPageUrlFields: [],\r\n requiredFieldTip: '',\r\n overrideBtnFormSubmitClassName: 'btn-secondary2',\r\n submitButtonIsDisabledIfFormIsNotDirty : true,\r\n pageSettings: {\r\n form: {\r\n title: 'Default form',\r\n subtitle: ''\r\n }\r\n }\r\n }\r\n ) : null;\r\n\r\n if (formViewModel) {\r\n formViewModel.editMode = true;\r\n formViewModel.IncludeCurrentPageAsBackAndSubmitUrl = false;\r\n }\r\n\r\n return(\r\n {\r\n setWindowState(true, window.location.pathname);\r\n }}\r\n onHide={() => { \r\n onHide();\r\n }}>\r\n {headerImage &&
} \r\n \r\n {props.title}\r\n {!headerImage && } \r\n \r\n\r\n \r\n
\r\n {props.content && ReactHtmlParser(props.content)}\r\n {props.children}\r\n
\r\n \r\n {formViewModel &&
\r\n
\r\n {createFormWidget(\r\n formViewModel,\r\n 'widget mijn-fnv__widget',\r\n 1,\r\n 'edit',\r\n undefined,\r\n () => {\r\n return onHide(true);\r\n }\r\n )}\r\n
\r\n
} \r\n
\r\n\r\n {!formViewModel && ctaText && ctaUrl ? \r\n \r\n {isExternalLink ? \r\n {ctaText} : \r\n {ctaText}\r\n }\r\n \r\n :
\r\n }\r\n
);\r\n};","import * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport ReactHtmlParser from 'react-html-parser';\r\n\r\nexport interface IWebshopProductCard {\r\n productName: string;\r\n imageUrl: string;\r\n productShortInfo: string;\r\n urlPath: string;\r\n productSKU : string;\r\n variants : any[];\r\n onGotoProductDetailPage : (urlPath) => void;\r\n}\r\nexport const WebshopProductCard = (props: IWebshopProductCard) => {\r\n \r\n const onGotoProductDetailPage = (event) => {\r\n event.preventDefault();\r\n if (props.onGotoProductDetailPage) {\r\n props.onGotoProductDetailPage(props.urlPath);\r\n }\r\n return false;\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n

\r\n {props.productName}\r\n

\r\n
\r\n {ReactHtmlParser(props.productShortInfo)}\r\n
\r\n \r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\nimport { InputStepperText } from '../../../input-components/input-stepper-text';\r\nimport Select from 'react-select';\r\nimport fetch from 'cross-fetch';\r\n\r\nexport interface IWebshopProductDetailEdit {\r\n addToCartButtonText: string;\r\n stock : number;\r\n tracksStock: boolean;\r\n onClickAddButton: (productId) => void; \r\n onChangeValue: (value : number) => void;\r\n variants : any[];\r\n productId: string;\r\n}\r\nexport const WebshopProductDetailEdit = (props: IWebshopProductDetailEdit) => {\r\n const [ options , setOptions ] = useState([]);\r\n const [ selectedProduct, setSelectedProduct] = useState(\"\");\r\n const [ stock , setStock] = useState(props.stock);\r\n const [ error , setError] = useState(\"\");\r\n \r\n React.useEffect(() => {\r\n let newOptions : any[] = [];\r\n props.variants.map((variant) => {\r\n newOptions.push({\r\n value: variant.skuId.toString(),\r\n label: variant.name\r\n });\r\n });\r\n setOptions(newOptions);\r\n }, [props.variants, props.productId]);\r\n \r\n\r\n const styles = {\r\n clearIndicator: () => undefined,\r\n container: () => undefined,\r\n control: () => undefined,\r\n dropdownIndicator: () => undefined,\r\n groupHeading: () => undefined,\r\n indicatorsContainer: () => undefined,\r\n indicatorSeparator: () => undefined,\r\n input: () => undefined,\r\n loadingIndicator: () => undefined,\r\n loadingMessage: () => undefined,\r\n menu: () => undefined,\r\n menuList: () => undefined,\r\n multiValue: () => undefined,\r\n multiValueLabel: () => undefined,\r\n multiValueRemove: () => undefined,\r\n noOptionsMessage: () => undefined,\r\n option: () => undefined,\r\n placeholder: () => undefined,\r\n singleValue: () => undefined,\r\n valueContainer: () => undefined\r\n };\r\n\r\n const onClick = () => {\r\n let productId = props.productId;\r\n if (props.variants.length > 0) {\r\n if (selectedProduct != \"\") {\r\n props.onClickAddButton(selectedProduct);\r\n } else {\r\n setError(\"'Selecteer een maat' is een verplicht veld.\");\r\n }\r\n } else {\r\n props.onClickAddButton(productId);\r\n }\r\n };\r\n\r\n const onChange = (value: any) => {\r\n if (value && value.value) {\r\n setError(\"\");\r\n setSelectedProduct(value.value);\r\n\r\n fetch(\"/api/shoppingbasket/getstockforproductid?skuId=\" + value.value, {\r\n method: 'get' \r\n }).then(response => {\r\n if (response.status >= 300) {\r\n return \"error\";\r\n } else {\r\n return response.text();\r\n }\r\n }).then((data) => {\r\n if (data != \"error\") {\r\n setStock(parseInt(data as any) || 0); \r\n }\r\n }); \r\n }\r\n };\r\n\r\n const onChangeValue = (value: number) => {\r\n props.onChangeValue(value);\r\n };\r\n \r\n return
\r\n {props.variants.length > 0 &&
\r\n \r\n \r\n {error != \"\" &&
{error}
}\r\n
}\r\n
\r\n \r\n \r\n {props.tracksStock && props.variants.length == 0 && \r\n

Nog {props.stock} beschikbaar

}\r\n {props.tracksStock && selectedProduct != \"\" && props.variants.length > 0 && \r\n

Nog {stock} beschikbaar

}\r\n
\r\n \r\n
;\r\n};\r\n","import * as React from \"react\";\r\nimport ReactHtmlParser from 'react-html-parser';\r\n\r\nexport interface IWebshopProductDetail {\r\n productName: string;\r\n imageUrl: string;\r\n productShortInfo: string;\r\n productDescription: string;\r\n}\r\nexport const WebshopProductDetail = (props: IWebshopProductDetail) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n

Productdetails

\r\n
\r\n {ReactHtmlParser(props.productShortInfo)}\r\n
\r\n

Productomschrijving

\r\n
\r\n {ReactHtmlParser(props.productDescription)}\r\n
\r\n
\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport interface IWebshopShoppingCartProps {\r\n totalCartCount : number;\r\n shoppingCartUrl: string;\r\n}\r\n\r\nexport const WebshopShoppingCart = (props: IWebshopShoppingCartProps) => {\r\n return \r\n \r\n {props.totalCartCount > 0 && {props.totalCartCount}}\r\n ;\r\n};","import * as $ from 'jquery';\r\n\r\nexport class MenuHelpers {\r\n static showMenu() {\r\n $(\".main-navbar:not(.main-navbar--mijn-fnv)\").removeClass(\"hidden\");\r\n $(\".main-navbar.main-navbar--mijn-fnv\").addClass(\"hidden\");\r\n $(\".footer__fluid\").addClass(\"hidden\");\r\n }\r\n\r\n static hideMenu() {\r\n $(\".main-navbar:not(.main-navbar--mijn-fnv)\").addClass(\"hidden\");\r\n $(\".main-navbar.main-navbar--mijn-fnv\").removeClass(\"hidden\");\r\n $(\".footer__fluid\").addClass(\"hidden\");\r\n }\r\n\r\n static showBreadCrumbs() {\r\n $(\".breadcrumbs:not(.breadcrumbs.breadcrumbs--mijn-fnv-edit)\").removeClass(\"hidden\");\r\n $(\".breadcrumbs.breadcrumbs--mijn-fnv-edit\").addClass(\"hidden\");\r\n $(\".breadcrumb-item.mijn-fnv-react-added-breadcrumbs\").remove();\r\n }\r\n\r\n static hideBreadCrumbs() {\r\n $(\".breadcrumbs\").addClass(\"hidden\");\r\n $(\".breadcrumbs.breadcrumbs--mijn-fnv-edit\").addClass(\"hidden\");\r\n $(\".breadcrumb-item.mijn-fnv-react-added-breadcrumbs\").remove();\r\n }\r\n\r\n static showBreadCrumbsEditPage() {\r\n $(\".breadcrumbs\").addClass(\"hidden\");\r\n $(\".breadcrumbs.breadcrumbs--mijn-fnv-edit\").removeClass(\"hidden\");\r\n $(\".breadcrumb-item.mijn-fnv-react-added-breadcrumbs\").remove();\r\n }\r\n\r\n static addBreadCrumbsParent(link : string, title : string) {\r\n $(\".breadcrumb-item.mijn-fnv-react-added-breadcrumbs\").remove();\r\n $(\".breadcrumb-item.mijn-fnv__breadcrumb-for-edit-page\").before(\"\");\r\n }\r\n\r\n static updateMenu(email: string, FNVLidnummer: string, fullName: string) {\r\n $(\".mijn-fnv__usermenu-username\").text(fullName);\r\n $(\".mijn-fnv__usermenu-lidnummer\").text(FNVLidnummer);\r\n $(\".mijn-fnv__usermenu-email\").text(email);\r\n $(\".main-navbar__primary-navbar-collapse .btn-success.main-navbar__nav-button\").remove();\r\n }\r\n}","import {\r\n KenticoPageDefinition,\r\n KenticoFormViewmodel,\r\n BaseRelatedViewModel,\r\n MenuItem,\r\n IHasHeaderImage\r\n} from '../interfaces/PageInterfaces';\r\n\r\nimport { UserService } from '@fnv-core/authentication';\r\nimport { ACCOUNT_AANMAKEN_URL } from '../../../constants/Constants';\r\n\r\nexport const widgetClassNames = {\r\n formClass: 'FNV.ContentBlock',\r\n alertClass: 'Alert.Class',\r\n linkBlockClass : 'FNV.HandigeLinksBlock',\r\n contentBlockClass : 'FNV.MijnFnvRichTextBlock',\r\n paymentBlockClass : 'FNV.MijnFnvContributieBetalenBlock',\r\n idealBankKeuzeBlockClass : 'FNV.iDealBetaalSchermBlock',\r\n tipBlockClass : 'FNV.MijnFnvTipBlock',\r\n digitaleLedenPasBlockClass : 'FNV.MijnFnvDigitaleLedenPasBlock',\r\n lidZoekenBlockClass : 'FNV.MijnFnvLidZoekenBlock',\r\n downloadBlockClass: 'FNV.DownloadsBlock',\r\n mijnFnvLinkBlockClass: 'FNV.MijnFnvLinkBlock',\r\n profielFotoBlockClass: 'FNV.MijnFnvProfielFotoBlock',\r\n mijnFnvViewPageBlockClass: 'FNV.MijnFnvViewPagina',\r\n consentBlockClass: 'FNV.MijnFNVConsentDetail',\r\n};\r\n\r\nexport class PageHelpers {\r\n\r\n static getForms(pageDefinition: KenticoPageDefinition): KenticoFormViewmodel[] {\r\n return (pageDefinition.RelatedViewModels || []).filter(\r\n item => item.MijnFnvContentBlockModel !== undefined && \r\n item.MijnFnvContentBlockModel.ClassName === widgetClassNames.formClass\r\n ).map(item => item.MijnFnvContentBlockModel) as KenticoFormViewmodel[];\r\n }\r\n\r\n static getWidgets(pageDefinition: KenticoPageDefinition): BaseRelatedViewModel[] {\r\n return (pageDefinition.RelatedViewModels || []).filter(\r\n item => {\r\n return (item.MijnFnvContentBlockModel && \r\n item.MijnFnvContentBlockModel.ClassName &&\r\n item.MijnFnvContentBlockModel.ClassName !== widgetClassNames.alertClass) ||\r\n (item.MijnFnvHandigeLinksBlockModel &&\r\n item.MijnFnvHandigeLinksBlockModel.ClassName) ||\r\n (item.MijnFnvRichTextBlockModel &&\r\n item.MijnFnvRichTextBlockModel.ClassName) ||\r\n (item.MijnFnvProfielFotoBlockModel &&\r\n item.MijnFnvProfielFotoBlockModel.ClassName) ||\r\n (item.MijnFnvPaymentBlockModel &&\r\n item.MijnFnvPaymentBlockModel.ClassName) ||\r\n (item.MijnFnvLinkBlockModel &&\r\n item.MijnFnvLinkBlockModel.ClassName) ||\r\n (item.MijnFnvTipBlockModel &&\r\n item.MijnFnvTipBlockModel.ClassName) ||\r\n (item.MijnFnvDigitaleLedenPasBlockModel &&\r\n item.MijnFnvDigitaleLedenPasBlockModel.ClassName) ||\r\n (item.MijnFnvIdealBankSelectorBlockModel &&\r\n item.MijnFnvIdealBankSelectorBlockModel.ClassName) ||\r\n (item.MijnFnvLidZoekenBlockModel &&\r\n item.MijnFnvLidZoekenBlockModel.ClassName) ||\r\n (item.MijnFnvViewPagina &&\r\n item.MijnFnvViewPagina.ClassName) ||\r\n (item.ConsentDetailModel && item.ConsentDetailModel.ClassName)\r\n ;\r\n }\r\n ).map(item => { \r\n return item.MijnFnvContentBlockModel || \r\n item.MijnFnvHandigeLinksBlockModel ||\r\n item.MijnFnvRichTextBlockModel ||\r\n item.MijnFnvPaymentBlockModel ||\r\n item.MijnFnvProfielFotoBlockModel ||\r\n item.MijnFnvTipBlockModel ||\r\n item.MijnFnvLinkBlockModel ||\r\n item.MijnFnvLidZoekenBlockModel ||\r\n item.MijnFnvDigitaleLedenPasBlockModel ||\r\n item.MijnFnvIdealBankSelectorBlockModel ||\r\n item.MijnFnvViewPagina ||\r\n item.ConsentDetailModel\r\n ;\r\n });\r\n };\r\n\r\n static getSideMenu(pageDefinition: KenticoPageDefinition) {\r\n // Alert box is also a widget, but we dont want to show that\r\n return (pageDefinition.Menu || []) as MenuItem[];\r\n };\r\n\r\n static getHeaderImage(pageDefinition: KenticoPageDefinition): string | null {\r\n const pageWithHeaderImage = pageDefinition.MijnFnvViewPagina \r\n || pageDefinition.MijnFnvEditPagina\r\n || pageDefinition.MijnFnvCTAViewPagina\r\n // Overzicht als laatste, omdat deze blijkbaar weleens met rare data gevuld is\r\n || pageDefinition.MijnFnvOverzicht;\r\n if (!pageWithHeaderImage) {\r\n return null;\r\n }\r\n\r\n return (pageWithHeaderImage as IHasHeaderImage).HeaderFoto;\r\n };\r\n\r\n static showSteps(pageDefinition: KenticoPageDefinition) {\r\n // Show steps on Edit Pages, but not when explicitly hidden\r\n return pageDefinition.MijnFnvEditPagina && !pageDefinition.MijnFnvEditPagina.HideSteps;\r\n };\r\n\r\n static splitWidgetsToColumns(list: any[]): { label: string; list: any[] }[] {\r\n // listOne has more items if number of items is an odd number\r\n const listOne = list.slice(0, Math.ceil(list.length / 2));\r\n // listTwo gets the remaning items after slice\r\n const listTwo = list.slice(Math.ceil(list.length / 2));\r\n\r\n // Make render list for simple parsing\r\n return [{ label: '', list: listOne }, { label: '', list: listTwo }];\r\n };\r\n\r\n static getFrontendPageTypeFromKenticoPageType(kenticoPageType : string) : string {\r\n const pageTypeMap = {\r\n \"FNV.MijnFnvOverzicht\" : \"dashboard\",\r\n \"FNV.Profiel\" : \"view\",\r\n \"FNV.ContentBlock\" : \"view\",\r\n \"digitaleledenpas\" : \"digitaleledenpas\",\r\n \"view\" : \"view\",\r\n \"edit\" : \"edit\",\r\n \"FNV.Content\" : \"edit\",\r\n \"FNV.MijnFnvViewPagina\": \"view\",\r\n \"FNV.MijnFnvCTAViewPagina\": \"ctaview\",\r\n \"FNV.MijnFnvEditPagina\": \"edit\",\r\n \"FNV.MijnFnvLoginAlsPagina\": \"edit\",\r\n \"FNV.MijnFnvWebshopOverviewPagina\" : \"webshop\",\r\n \"FNV.MijnFnvWebshopProductDetailPagina\" : \"webshopProduct\",\r\n \"FNV.MijnFnvWebshopShoppingCartPagina\" : \"webshopShoppingCart\"\r\n };\r\n return pageTypeMap[kenticoPageType] || \"\";\r\n };\r\n\r\n static setBreadcrumbsPageTitle(pageTitle: string) {\r\n const breadcrumbForEditPage = document.querySelector('.mijn-fnv__breadcrumb-for-edit-page');\r\n if (breadcrumbForEditPage) {\r\n breadcrumbForEditPage.textContent = pageTitle;\r\n }\r\n };\r\n\r\n static highlightMainNavigationItem() { \r\n PageHelpers.unhighlightAllMainNavigationItems();\r\n\r\n const activeItem = document.querySelector(\r\n \".nav-link.main-navbar__nav-link[href='\" + location.pathname + \"']\"\r\n );\r\n if (activeItem) {\r\n activeItem.parentElement.classList.add('active');\r\n }\r\n \r\n const backToMijnFnvLink = document.querySelector('.link__back-to-mijnfnv');\r\n if (backToMijnFnvLink) {\r\n backToMijnFnvLink.addEventListener('click', () => {\r\n PageHelpers.unhighlightAllMainNavigationItems();\r\n });\r\n }\r\n };\r\n\r\n private static unhighlightAllMainNavigationItems() {\r\n const allItems = document.querySelectorAll(\".nav-link.main-navbar__nav-link\");\r\n allItems.forEach(function (item) {\r\n item.parentElement.classList.remove('active');\r\n });\r\n };\r\n\r\n static getMijnFNVRootPathForRole = (backLink: string) => {\r\n if (backLink === \"\" || backLink === \"/\") {\r\n return UserService.getCurrentRolePath();\r\n }\r\n return backLink;\r\n };\r\n\r\n static isNotCreateAccountPage = (currentPathname) => {\r\n return currentPathname.toLowerCase() != ACCOUNT_AANMAKEN_URL.toLowerCase();\r\n };\r\n}","import { action } from 'typesafe-actions';\r\nimport { \r\n STORE_RESULT_LIDZOEKEN, \r\n CLEAR_LIDZOEKEN, \r\n START_LIDZOEKEN, \r\n STOP_LIDZOEKEN, \r\n SET_CONSENT_LIDZOEKEN,\r\n PASSTHROUGH_FIELD_LIDZOEKEN\r\n } from '../constants/Constants';\r\n\r\nexport const storeLidZoeken = (\r\n results : any[],\r\n lidnummer: string, \r\n postcode: string, \r\n huisnummer: string, \r\n geboortedatum: string,\r\n zoekenOp: string,\r\n searchValue: string,\r\n formName: string,\r\n additionalData : any) => action(STORE_RESULT_LIDZOEKEN, \r\n {\r\n results : results,\r\n lidnummer: lidnummer,\r\n postcode: postcode,\r\n huisnummer: huisnummer,\r\n geboortedatum: geboortedatum,\r\n zoekenOp: zoekenOp,\r\n searchValue: searchValue,\r\n formName: formName,\r\n additionalData : additionalData\r\n });\r\n\r\nexport const clearLidZoeken = () => action(CLEAR_LIDZOEKEN);\r\nexport const startLidZoeken = () => action(START_LIDZOEKEN);\r\nexport const stopLidZoeken = () => action(STOP_LIDZOEKEN);\r\nexport const setConsentLidZoeken = (id : string, consent: boolean) => action(SET_CONSENT_LIDZOEKEN, {\r\n id: id,\r\n consent: consent\r\n});\r\nexport const passthroughLidZoeken = (fieldName : string, value : any) => action(PASSTHROUGH_FIELD_LIDZOEKEN, {\r\n fieldName : fieldName,\r\n value : value\r\n});\r\n","import { IntakeService } from \"../../services/IntakeService\";\r\n\r\nexport class InitialFormValuesHandlerHelper {\r\n static getHandler(handlerName : string) {\r\n if (handlerName == \"intake\") {\r\n return {\r\n \"VraagSituatie\" : IntakeService.getQuestionAndAnswer(),\r\n \"VraagReactie\" : IntakeService.getQuestionAndAnswer()\r\n };\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { connect } from 'react-redux';\r\nimport * as $ from 'jquery';\r\nimport { Redirect } from 'react-router-dom';\r\nimport fetch from 'cross-fetch';\r\nimport * as uuid from 'uuid';\r\n\r\nimport { Slug } from '@fnv-core/utils';\r\nimport { Logger } from '@fnv-core/logging';\r\nimport { Tokenizer } from '@fnv-core/tokens';\r\nimport { ProcesHandlerHelpers, ProcesName } from './helpers/ProcesHandlerHelpers';\r\nimport * as Templates from '../presentational/Templates';\r\nimport { FormController } from '../controllers/FormController';\r\nimport * as actions from '../actions/FormActions';\r\nimport * as stepActions from '../actions/StepsActions';\r\nimport * as extraStepActions from '../actions/ExtraStepsActions';\r\nimport { DefaultValueByConditionHelper } from '../helpers/DefaultValueByConditionHelper';\r\nimport { PopupError } from '../presentational/PopupError';\r\nimport { PopupOk } from '../presentational/PopupOk';\r\nimport { ReactFormHelpers } from './helpers/FormHelpers';\r\nimport { IFormConfig } from '../interfaces/FormConfig';\r\nimport * as userActions from '../actions/UserActions';\r\nimport { MijnFNVPageContext } from '../presentational/pages/helpers/MijnFNVPageContext';\r\nimport { MenuHelpers } from '../presentational/pages/helpers/MenuHelpers';\r\nimport { ErrorMessageService } from '../services/ErrorMessageService';\r\nimport { FormService } from '../services/FormService';\r\nimport { AnimationService } from '../services/AnimationService';\r\nimport { HistoryService } from '../services/HistoryService';\r\nimport { AlertMessage } from '../presentational/AlertMessage';\r\nimport {\r\n storeLidZoeken,\r\n clearLidZoeken,\r\n startLidZoeken,\r\n stopLidZoeken,\r\n passthroughLidZoeken\r\n} from '../actions/LidZoekenActions';\r\nimport { PageHelpers } from '../presentational/pages/helpers/PageHelpers';\r\nimport { StringHelpers } from '../helpers/StringHelpers';\r\nimport { InitialFormValuesHandlerHelper } from './helpers/InitialFormValuesHandlerHelper';\r\nimport { DatasourceLoaderStateService } from '../services/DatasourceLoaderStateService';\r\nimport { getResourceString } from '../kentico/resource-strings';\r\n\r\nimport { createUpdateSavedQuerystringParameters } from '../../helpers/sessionstorage-helpers';\r\nimport { getAllUrlParams } from '../../jslibs/urlparams';\r\nimport { CookieManager } from '@fnv-core/cookies';\r\n\r\nconst uuidV4 = uuid.v4;\r\n\r\nexport interface FormProps {\r\n editMode?: boolean;\r\n formConfig: IFormConfig;\r\n formDefinitions: any;\r\n setFormValues: any;\r\n clearFormValues: (formName: string) => void;\r\n fillFormViaApi: any;\r\n clearErrorOnApiError: any;\r\n forms: any;\r\n steps: any;\r\n additionalCssClass: string;\r\n withLinkToFormPage?: boolean;\r\n formName?: string; // this is the kenticoformname\r\n pageType: string;\r\n setActiveStepForm: any;\r\n clearStep: any;\r\n clearExtraStep: any;\r\n storeStep: any;\r\n storeExtraStep: any;\r\n nextLink: string;\r\n linkText: string;\r\n userId: string;\r\n roles: any[];\r\n summaryIntro: string;\r\n onSuccessPopupMessage?: string;\r\n onSuccessPopupMessageVisualCheck?: string;\r\n onSuccessPopupDescription?: string;\r\n clearFormErrorMessage: any;\r\n storeFormErrorMessage: any;\r\n layoutType: string;\r\n\r\n lidZoeken: any;\r\n\r\n storeLidZoeken: any;\r\n clearLidZoeken: any;\r\n startLidZoeken: any;\r\n stopLidZoeken: any;\r\n\r\n initialData?: any;\r\n\r\n onSubmitSuccessButton1Link : string;\r\n onSubmitSuccessButton1LinkText : string;\r\n\r\n onSubmitSuccessButton2Link : string;\r\n onSubmitSuccessButton2LinkText : string;\r\n\r\n includeCurrentPageAsBackAndSubmitUrl? : boolean;\r\n backTitleForCurrentPageBackLink? : string;\r\n\r\n onOverrideGetFormValues?: any;\r\n\r\n errorMessageTitle? : string;\r\n errorMessageDescription? : string;\r\n errorMessagePhoneNumberInfo? : string;\r\n errorMessagePhoneNumber? : string;\r\n errorMessageEmailInfo? : string;\r\n errorMessageEmail? : string;\r\n errorMessageButtonText? : string;\r\n\r\n setFieldError? : (formControlName: string, errorText : string) => void;\r\n onFieldChange? : (formName: string, fieldName : string, value : any) => void;\r\n passthroughLidZoeken: (fieldName: string, value: any) => void;\r\n onPopupOkClick? : () => Promise;\r\n}\r\n\r\nexport interface FormState {\r\n currentForm: string;\r\n initialFormValues: any;\r\n stepIndex: number;\r\n urlParams: any;\r\n redirectToUrl: string;\r\n showPopupConfirm: boolean;\r\n popupMessageOnFailure?: string;\r\n showPopupOK: boolean;\r\n isShowPostOKWithVisualCheck: boolean;\r\n isSubmitting: boolean;\r\n isShowPostDataError: boolean;\r\n isShowPostOk: boolean;\r\n isShowTooBigDataError: boolean;\r\n isUserError: boolean;\r\n showThanksMessageAsInPageContent: boolean;\r\n refreshId: string;\r\n isShowPollResults : boolean;\r\n pollResults: any;\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n forms: state.forms,\r\n userId: state.user.userId,\r\n roles: state.user.roles,\r\n lidZoeken: state.lidZoeken,\r\n steps: state.steps\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setFormValues: (formName: string, values: any) => {\r\n dispatch(actions.storeFormValues(formName, values));\r\n },\r\n clearFormValues: (formName: string) => {\r\n dispatch(actions.clearFormValues(formName));\r\n },\r\n fillFormViaApi: (formName: string, userId: string, url: string, formDefinitions: any[], pathParam : string, formSteps : string[], formConfig, kenticoFormName: string) => {\r\n let idInUrl = userId;\r\n if (pathParam) {\r\n idInUrl = pathParam;\r\n }\r\n let fillFormViaApiUrl = Tokenizer.replaceTokens(url, [idInUrl]);\r\n let queryParameters = getAllUrlParams(location.href);\r\n const tokens = [\r\n { name: 'formname', value: kenticoFormName },\r\n { name: 'path-param', value: pathParam },\r\n ];\r\n fillFormViaApiUrl = Tokenizer.replaceTokens(fillFormViaApiUrl, tokens).toLowerCase();\r\n fillFormViaApiUrl = StringHelpers.replacePropertiesInUrl(fillFormViaApiUrl, queryParameters, true);\r\n\r\n let addQueryParameterSeparator = \"?\";\r\n if (fillFormViaApiUrl.indexOf(\"?\") >= 0) {\r\n addQueryParameterSeparator = \"&\";\r\n }\r\n if (queryParameters[\"KenticoWordLidId\"]) {\r\n fillFormViaApiUrl = `${fillFormViaApiUrl}${addQueryParameterSeparator}KenticoWordLidId=${queryParameters[\"KenticoWordLidId\"]}`;\r\n }\r\n dispatch(actions.fillFormViaApi(formName, fillFormViaApiUrl, formDefinitions, formSteps, formConfig));\r\n },\r\n clearErrorOnApiError: () => {\r\n dispatch(actions.clearErrorOnApiError());\r\n },\r\n setActiveStepForm: (stepFormName: string) => {\r\n dispatch(stepActions.setActiveStepForm(stepFormName));\r\n },\r\n clearStep: () => {\r\n dispatch(stepActions.clearStep());\r\n },\r\n clearExtraStep: () => {\r\n dispatch(extraStepActions.clearStep());\r\n },\r\n storeStep: (title: string, formName: string) => {\r\n dispatch(stepActions.storeStep(title, formName));\r\n },\r\n storeExtraStep: (title: string) => {\r\n dispatch(extraStepActions.storeStep(title));\r\n },\r\n storeFormErrorMessage: (formName: string, errorMessage: string) => {\r\n dispatch(actions.storeFormErrorMessage(formName, errorMessage));\r\n },\r\n clearFormErrorMessage: (formName: string) => {\r\n dispatch(actions.clearFormErrorMessage(formName));\r\n },\r\n loginAction: (email, lidnummer, name, accessToken, userId, roles) =>\r\n dispatch(\r\n userActions.storeUser(email, lidnummer, name, accessToken, '-', '-', userId, roles)\r\n ),\r\n\r\n storeLidZoeken: (data, lidnummer, postcode, huisnummer, geboortedatum, zoekenOp, searchValue, formName, additionalData) => dispatch(\r\n storeLidZoeken(data, lidnummer, postcode, huisnummer, geboortedatum, zoekenOp, searchValue, formName, additionalData)),\r\n\r\n clearLidZoeken: () => dispatch(clearLidZoeken()),\r\n startLidZoeken: () => dispatch(startLidZoeken()),\r\n stopLidZoeken: () => dispatch(stopLidZoeken()),\r\n passthroughLidZoeken: (fieldName : string, value : any) => {\r\n dispatch(passthroughLidZoeken(fieldName, value));\r\n }\r\n };\r\n};\r\n\r\nexport class FormControllerContainer extends React.Component {\r\n formControllerRef = React.createRef();\r\n public unmounted: boolean = true;\r\n constructor(props: FormProps) {\r\n super(props);\r\n\r\n this.state = {\r\n currentForm: props.formConfig.startForm,\r\n stepIndex: props.formConfig.formSteps.indexOf(props.formConfig.startForm),\r\n urlParams: getAllUrlParams(),\r\n redirectToUrl: '',\r\n showPopupConfirm: false,\r\n showPopupOK: false,\r\n isShowPostOKWithVisualCheck: false,\r\n isSubmitting: false,\r\n isShowPostDataError: false,\r\n isShowPostOk: false,\r\n isUserError: false,\r\n initialFormValues: {},\r\n showThanksMessageAsInPageContent: false,\r\n isShowTooBigDataError: false,\r\n refreshId: \"\",\r\n isShowPollResults: false,\r\n pollResults: {}\r\n };\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n this.onSummaryBackToStepClick = this.onSummaryBackToStepClick.bind(this);\r\n this.onGotoPreviousStep = this.onGotoPreviousStep.bind(this);\r\n this.scrollToForm = this.scrollToForm.bind(this);\r\n this.setFieldError = this.setFieldError.bind(this);\r\n this.onPostToBackend = this.onPostToBackend.bind(this);\r\n this.onPopupConfirmOK = this.onPopupConfirmOK.bind(this);\r\n this.onPopupConfirmCancel = this.onPopupConfirmCancel.bind(this);\r\n this.onPopupOKSubmit = this.onPopupOKSubmit.bind(this);\r\n this.thankYouMessageRef = React.createRef();\r\n\r\n FormService.setPayload({});\r\n AnimationService.resetPreloadForm(this.state.currentForm);\r\n }\r\n\r\n wasOnSummaryStep : boolean = false;\r\n visitedSteps: any = {};\r\n thankYouMessageRef : any;\r\n\r\n componentDidMount() {\r\n // Activate form, execute given handlers\r\n // ReactFormHelpers.activateForm(this).then(component => {}); \r\n if (this.props.formConfig.fillViaApi !== undefined && this.props.formConfig.fillViaApi !== \"\") {\r\n AnimationService.startPreloadForm(this.state.currentForm);\r\n }\r\n //PBI 25634 - need to persist querystring parameters in URLS between different forms\r\n if (this.props.formConfig.usePersistedQueryString === true) {\r\n createUpdateSavedQuerystringParameters(window.location.href);\r\n }\r\n \r\n ReactFormHelpers.clearFormIfAllowed(this);\r\n ReactFormHelpers.activateFormController(this);\r\n this.unmounted = false;\r\n ReactFormHelpers.activateForm(this);\r\n\r\n if (this.context && this.context.search) {\r\n let urlParams = getAllUrlParams(this.context.search);\r\n if (urlParams.action == 'tosummary') {\r\n ReactFormHelpers.gotoFormStepNyName(this, '_summary');\r\n }\r\n }\r\n\r\n this.setupOptionalBreadcrumbParent();\r\n\r\n FormService.setIsInLidZoekenSubFunctions(false);\r\n FormService.setLidZoekenSubFunctionsForMember({});\r\n\r\n if (!ReactFormHelpers.hasLidConsentForSpecificFormsOrIgnoreIfIsCurrentUser(this)) {\r\n \r\n const backUrl = FormService.getBackUrl();\r\n if (backUrl && backUrl != \"\") { \r\n this.setState({\r\n redirectToUrl: backUrl\r\n });\r\n } else {\r\n location.href = \"/404\";\r\n }\r\n }\r\n\r\n if (this.props.formConfig.leavePageProtection) {\r\n \r\n const promptLeaveMessage = getResourceString(\"Form.Save.Warning\");\r\n if (!this.wasSetupBeforeUnload) {\r\n this.wasSetupBeforeUnload = true;\r\n $(window).off('beforeunload');\r\n $(window).on('beforeunload', () => {\r\n if (this.state.isSubmitting ||\r\n this.props.formConfig.formSteps.length == 1 ||\r\n this.state.stepIndex == this.props.formConfig.formSteps.length - 1) {\r\n return undefined;\r\n } \r\n return promptLeaveMessage;\r\n });\r\n }\r\n }\r\n\r\n if (!!this.props.formConfig.userHasVoted && !!this.props.formConfig.isPoll) {\r\n this.onShowPollResults();\r\n }\r\n \r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n \r\n if (prevProps.forms[\"_formSubmitTrigger\"] && \r\n this.props.forms[\"_formSubmitTrigger\"] &&\r\n this.props.forms[\"_formSubmitTrigger\"].autoPost !== prevProps.forms[\"_formSubmitTrigger\"].autoPost) \r\n {\r\n if (this.props.forms[\"_formSubmitTrigger\"] && \r\n this.props.forms[\"_formSubmitTrigger\"].autoPost === true) {\r\n this.onStoreValues(this.getInitialFormValues());\r\n\r\n this.props.setFormValues(\"_formSubmitTrigger\", \r\n {\r\n afterStoreValues: true,\r\n autoPost: true\r\n });\r\n }\r\n } \r\n\r\n if (prevProps.forms[\"_formSubmitTrigger\"] && \r\n this.props.forms[\"_formSubmitTrigger\"] && \r\n this.props.forms[\"_formSubmitTrigger\"].afterStoreValues !== prevProps.forms[\"_formSubmitTrigger\"].afterStoreValues) \r\n {\r\n if (this.props.forms[\"_formSubmitTrigger\"] &&\r\n this.props.forms[\"_formSubmitTrigger\"].autoPost === true && \r\n this.props.forms[\"_formSubmitTrigger\"].afterStoreValues === true) {\r\n\r\n this.props.setFormValues(\"_formSubmitTrigger\", \r\n {\r\n autoPost: false,\r\n afterStoreValues: false\r\n }); \r\n ReactFormHelpers.gotoNextFormStep(this, this.getInitialFormValues()); \r\n }\r\n }\r\n\r\n if (prevProps.forms !== this.props.forms) {\r\n // see renderController method for details regarding this construct\r\n this.setState({refreshId : uuidV4()});\r\n } \r\n }\r\n\r\n wasSetupBeforeUnload = false;\r\n\r\n componentWillUnmount() {\r\n this.unmounted = true;\r\n }\r\n\r\n setupOptionalBreadcrumbParent() {\r\n\r\n // TODO : formconfig via interface ipv cast naar any\r\n if (!!(this.props.formConfig as any).showEditPaginaBreadCrumbs) {\r\n MenuHelpers.showBreadCrumbsEditPage();\r\n }\r\n\r\n if ((this.props.formConfig as any).insertBreadCrumbParentLink &&\r\n (this.props.formConfig as any).insertBreadCrumbParentText) {\r\n MenuHelpers.addBreadCrumbsParent(\r\n (this.props.formConfig as any).insertBreadCrumbParentLink,\r\n (this.props.formConfig as any).insertBreadCrumbParentText\r\n );\r\n }\r\n }\r\n\r\n setFieldError(formControlName: string, errorText: string) {\r\n var foundControl = this.props.formDefinitions.Form.find((control) => { return control.name == formControlName});\r\n if(foundControl) {\r\n foundControl.validation.post = { \r\n error: errorText,\r\n value: this.props.forms.Form[formControlName]\r\n };\r\n if (this.formControllerRef.current) {\r\n this.formControllerRef.current.revalidateForm();\r\n }\r\n }\r\n }\r\n\r\n scrollToForm() {\r\n if (!!this.props.formConfig.noScrollToTop) {\r\n return;\r\n }\r\n if (this.state.stepIndex > 0) { \r\n window.scrollTo(0, $('.react-container').offset().top);\r\n } else {\r\n // workaround via jquery to prevent scrolling issue on mobile\r\n // (on mobile the page scrolls to the middle of the page when window.scrollTo(0,0) is used)\r\n $('html, body').animate({\r\n scrollTop: '0px'\r\n }); \r\n }\r\n }\r\n\r\n onPostToBackend(values: any[], includeCurrentValues? : boolean) { \r\n // write a simple cookie containing the form name\r\n if(this.state.currentForm != undefined && this.state.redirectToUrl != null){\r\n CookieManager.createCookie(\"submitted-form\", this.state.currentForm, 1);\r\n }\r\n \r\n ReactFormHelpers.postToBackendPopup(this, values, includeCurrentValues)\r\n .then(() => {\r\n // dummy handler which is needed to prevent js errors, this is handled in postToBackendPopup itself\r\n })\r\n .catch(() => {\r\n // same as above\r\n });\r\n }\r\n\r\n onStoreValues = (values: any, formName? : string) => {\r\n if (formName !== undefined) {\r\n this.props.setFormValues(formName, values);\r\n return;\r\n }\r\n let valuesToStore = (Object as any).assign(\r\n {},\r\n values,\r\n { pageIsValidated: true },\r\n ReactFormHelpers.getFormValuesToStore(this, values)\r\n );\r\n\r\n ReactFormHelpers.setFormValues(this, valuesToStore);\r\n\r\n return valuesToStore;\r\n }\r\n\r\n onSubmit(values: any, includeCurrentValues? : boolean, onlySaveForm? : boolean) {\r\n \r\n if (DatasourceLoaderStateService.getLoadingCounter() > 0) {\r\n return;\r\n }\r\n \r\n $(window).off('beforeunload');\r\n\r\n AnimationService.disableAnimationsForForm(this.state.currentForm);\r\n\r\n if (this.state.currentForm && \r\n this.visitedSteps && \r\n !this.visitedSteps[this.state.currentForm]) {\r\n this.visitedSteps[this.state.currentForm] = true;\r\n }\r\n \r\n this.onStoreValues(values); \r\n ReactFormHelpers.gotoNextFormStep(this, values, !!includeCurrentValues, !!onlySaveForm);\r\n }\r\n\r\n onGotoPreviousStep(values: any) {\r\n ReactFormHelpers.gotoPreviousStep(this, values || {});\r\n }\r\n\r\n onPopupConfirmOK(event: React.MouseEvent) {\r\n event.preventDefault();\r\n\r\n this.setState({ showPopupConfirm: false, showPopupOK: true });\r\n\r\n //this.onPostToBackend();\r\n\r\n return false;\r\n }\r\n\r\n onPopupConfirmCancel(event: React.MouseEvent) {\r\n event.preventDefault();\r\n\r\n this.setState({ showPopupConfirm: false, isSubmitting: false });\r\n\r\n return false;\r\n }\r\n\r\n redirectToUrl = (url : string) => {\r\n this.setState({\r\n redirectToUrl: url\r\n });\r\n }\r\n\r\n onCancelForm = () => {\r\n let handlers = this.props.formConfig.handlers;\r\n \r\n if (!handlers) {\r\n handlers = ProcesHandlerHelpers.getProcessesForHander(this.props.formConfig.procesHandlers);\r\n }\r\n\r\n const CancelForm = ProcesName.CancelForm;\r\n const handleProces = ProcesHandlerHelpers.handleProces;\r\n handleProces(handlers, CancelForm, this, \"\").then(data => {\r\n if (data && !!data.isPreventDefault) {\r\n return;\r\n }\r\n if (this.unmounted) {\r\n return;\r\n }\r\n this.setState({\r\n showPopupConfirm: false,\r\n showPopupOK: false,\r\n isShowPostOKWithVisualCheck: false,\r\n isShowPostOk: false,\r\n popupMessageOnFailure: undefined\r\n });\r\n });\r\n }\r\n\r\n onPopupOKSubmit(event: React.MouseEvent, reactRouteOnSuccess) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n let handlers = this.props.formConfig.handlers;\r\n if (!handlers) {\r\n handlers = ProcesHandlerHelpers.getProcessesForHander(this.props.formConfig.procesHandlers);\r\n }\r\n\r\n const PopupOnOk = ProcesName.PopupOnOk;\r\n const handleProces = ProcesHandlerHelpers.handleProces;\r\n handleProces(handlers, PopupOnOk, this, reactRouteOnSuccess).then(data => {\r\n if (data && !!data.isPreventDefault) {\r\n return;\r\n }\r\n if (this.unmounted) {\r\n return;\r\n }\r\n if (this.context && this.context.search) {\r\n let urlParams = getAllUrlParams(this.context.search);\r\n if (urlParams.gobackUrl) {\r\n if (!(this as any).unmounted) {\r\n this.setState({\r\n redirectToUrl: urlParams.gobackUrl,\r\n showPopupConfirm: false,\r\n showPopupOK: false,\r\n isShowPostOKWithVisualCheck: false,\r\n isShowPostOk: false,\r\n isUserError: false,\r\n popupMessageOnFailure: undefined\r\n });\r\n return;\r\n }\r\n }\r\n }\r\n\r\n let redirectToUrl = undefined;\r\n if (this.props.formConfig.reactRouteOnSuccess && \r\n this.props.formConfig.reactRouteOnSuccess !== \"\") {\r\n if (!(this as any).unmounted) {\r\n \r\n let redirectUrl = StringHelpers.replacePropertiesInUrl(reactRouteOnSuccess || this.props.formConfig.reactRouteOnSuccess || '/', \r\n {...this.getPayload(),\r\n pathParam: this.context.pathParam\r\n });\r\n\r\n if (this.props.formConfig.OnSubmitSuccessLinkIncludeUrlGuid && this.context.pathParam) {\r\n redirectUrl += \"/\" + this.context.pathParam;\r\n }\r\n\r\n redirectToUrl = PageHelpers.getMijnFNVRootPathForRole(\r\n redirectUrl\r\n );\r\n\r\n AnimationService.disableAnimationsForForm(this.state.currentForm);\r\n const history = HistoryService.getRouterHistory();\r\n if (history) {\r\n history.push(redirectToUrl);\r\n return;\r\n }\r\n } \r\n }\r\n \r\n this.setState({\r\n showPopupConfirm: false,\r\n showPopupOK: false,\r\n isShowPostOKWithVisualCheck: false,\r\n isShowPostOk: false,\r\n isUserError: false,\r\n popupMessageOnFailure: undefined\r\n });\r\n\r\n ReactFormHelpers.clearFormIfAllowed(this);\r\n\r\n if (this.context && this.context.search) {\r\n let urlParams = getAllUrlParams(this.context.search);\r\n if (urlParams.onsuccess) {\r\n if (!(this as any).unmounted) {\r\n this.setState({\r\n redirectToUrl: urlParams.onsuccess + '?action=' + urlParams.onsuccessaction\r\n });\r\n return;\r\n }\r\n } \r\n }\r\n\r\n if (this.props.formConfig.reactRouteOnSuccess && \r\n this.props.formConfig.reactRouteOnSuccess !== \"\") {\r\n if (!(this as any).unmounted) {\r\n \r\n let redirectUrl = StringHelpers.replacePropertiesInUrl(reactRouteOnSuccess || this.props.formConfig.reactRouteOnSuccess || '/', \r\n {...this.getPayload(),\r\n pathParam: this.context.pathParam\r\n });\r\n\r\n if (this.props.formConfig.OnSubmitSuccessLinkIncludeUrlGuid && this.context.pathParam) {\r\n redirectUrl += \"/\" + this.context.pathParam;\r\n }\r\n\r\n this.setState({\r\n redirectToUrl: PageHelpers.getMijnFNVRootPathForRole(\r\n redirectUrl\r\n )\r\n });\r\n }\r\n } else {\r\n const { addToUrl, postDataToBackend } = ReactFormHelpers.addToUrl(this);\r\n location.href = this.props.formConfig.thanksPageUrl + addToUrl;\r\n }\r\n });\r\n \r\n return false;\r\n }\r\n\r\n onSummaryBackToStepClick(formName: string, event: any) {\r\n if (typeof event != 'undefined' && typeof event.preventDefault != 'undefined') {\r\n event.preventDefault();\r\n }\r\n \r\n this.setState(\r\n {\r\n stepIndex: this.props.formConfig.formSteps.indexOf(formName),\r\n currentForm: formName\r\n },\r\n () => {\r\n this.scrollToForm();\r\n }\r\n );\r\n\r\n return false;\r\n }\r\n\r\n onOverrideGetFormValues = () => {\r\n\r\n if (this.props.formConfig.initialFormValuesHandler) {\r\n const initialFormValuesHandler = InitialFormValuesHandlerHelper.getHandler(this.props.formConfig.initialFormValuesHandler);\r\n if (initialFormValuesHandler) {\r\n return initialFormValuesHandler;\r\n }\r\n }\r\n if (this.props.onOverrideGetFormValues) {\r\n return this.props.onOverrideGetFormValues();\r\n }\r\n return {};\r\n }\r\n\r\n filterFormValuesWithNullAsValue = (formValues) => {\r\n const result = {};\r\n for (const formField in formValues) {\r\n if (formValues.hasOwnProperty(formField)) {\r\n if (formValues[formField] != null) {\r\n result[formField] = formValues[formField];\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getInitialFormValues = () => {\r\n let urlParams = {};\r\n if (this.context && this.context.search) {\r\n urlParams = getAllUrlParams(this.context.search);\r\n }\r\n let initialValues = Object.assign({}, urlParams, ReactFormHelpers.getInitialFormValues(this));\r\n initialValues = Object.assign(\r\n initialValues,\r\n ReactFormHelpers.getDefaultFormValues(this),\r\n this.filterFormValuesWithNullAsValue(ReactFormHelpers.getFormValues(this)),\r\n this.onOverrideGetFormValues()\r\n );\r\n\r\n const formDefinition = this.props.formDefinitions[this.state.currentForm];\r\n const regExp = \"\\{([^}]*)\\}\"; \r\n if (formDefinition !== undefined) {\r\n formDefinition.forEach((field) => {\r\n if (!!field.clearOnShowStep) { \r\n delete initialValues[field.name]; \r\n }\r\n \r\n // delete empty tokens. e.g. '{FormField}\r\n let initialValue = initialValues[field.name];\r\n if(initialValue !== undefined && initialValue !== null){\r\n let stringValue = initialValue.toString();\r\n if (stringValue.match(regExp)){\r\n delete initialValues[field.name];\r\n }\r\n }\r\n });\r\n }\r\n return initialValues;\r\n }\r\n\r\n payload = {};\r\n setPayload = (payload: any) => {\r\n this.payload = {\r\n ...this.payload,\r\n ...payload\r\n };\r\n\r\n FormService.setPayload(this.payload);\r\n }\r\n getPayload = () => {\r\n return this.payload;\r\n } \r\n\r\n onShowPollResults = () => {\r\n let formName = (this.props.formConfig as any).kenticoFormName || this.props.formName || \"\";\r\n\r\n if (!formName) {\r\n this.setState({\r\n isSubmitting: false \r\n });\r\n return;\r\n }\r\n\r\n fetch(`/internal/formandcontentreact/PollResults/${formName}`)\r\n .then(response => { \r\n if (response.status > 300) {\r\n return { _error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (this.unmounted) {\r\n return;\r\n }\r\n \r\n if (!json._error) {\r\n this.setState({\r\n isShowPollResults : true,\r\n isSubmitting: false,\r\n pollResults: json\r\n });\r\n }\r\n })\r\n .catch(err => {\r\n // tslint:disable-next-line\r\n console.error(err);\r\n }); \r\n }\r\n\r\n render() {\r\n if (this.state.redirectToUrl !== undefined && this.state.redirectToUrl !== '') {\r\n return ;\r\n }\r\n\r\n if (this.props.formDefinitions === undefined || this.props.formConfig === undefined) {\r\n return <>;\r\n }\r\n \r\n if (this.state.stepIndex == this.props.formConfig.formSteps.length - 1) {\r\n this.wasOnSummaryStep = true;\r\n } \r\n\r\n // Get initial values\r\n let initialValues = this.getInitialFormValues();\r\n\r\n if (this.state.urlParams !== undefined) {\r\n initialValues = (Object as any).assign(initialValues, this.state.urlParams);\r\n if (this.state.urlParams.broncode !== undefined) {\r\n delete initialValues['broncode'];\r\n }\r\n }\r\n\r\n initialValues = DefaultValueByConditionHelper.setInitialValues(this, initialValues);\r\n\r\n const preloadState = AnimationService.getAnimationStateForForm(this.state.currentForm);\r\n let formIsPreloadingCssClass = (preloadState == \"start\") ? \"mijn-fnv__widget--preloading\" : \"\";\r\n if (preloadState === \"no-animations\") {\r\n formIsPreloadingCssClass = \"mijn-fnv__widget--no-animations\";\r\n }\r\n \r\n const formControllerProps = {\r\n additionalCssClass: `${this.props.additionalCssClass || \"\"} ${this.props.formName ? Slug.fromString(this.props.formName) : \"\"} ${formIsPreloadingCssClass}`,\r\n formCMSName: (this.props.formConfig as any).kenticoFormName || this.props.formName || \"\",\r\n initialValues: initialValues,\r\n formDefinitions: this.props.formDefinitions,\r\n onSubmit: this.onSubmit,\r\n onGotoPreviousStep: this.onGotoPreviousStep,\r\n formValues: this.props.forms,\r\n formConfig: this.props.formConfig,\r\n withLinkToFormPage: this.props.withLinkToFormPage,\r\n linkFormPage: this.props.nextLink,\r\n linkText: this.props.linkText,\r\n pageType: this.props.pageType,\r\n wasOnSummaryStep : this.wasOnSummaryStep,\r\n visitedSteps : this.visitedSteps,\r\n includeCurrentPageAsBackAndSubmitUrl: this.props.includeCurrentPageAsBackAndSubmitUrl,\r\n backTitleForCurrentPageBackLink: this.props.backTitleForCurrentPageBackLink,\r\n onFieldChange: this.props.onFieldChange,\r\n setFieldError: this.setFieldError,\r\n onSummaryBackToStepClick: this.onSummaryBackToStepClick,\r\n layoutType: this.props.layoutType\r\n };\r\n\r\n const popupText = {\r\n isUserError: this.state.isUserError,\r\n title:\r\n (this.state.isUserError && this.state.popupMessageOnFailure) ||\r\n this.props.errorMessageTitle || \r\n this.props.formConfig.popupHeadingOnFailure ||\r\n ErrorMessageService.errorMessageTitle(),\r\n message:\r\n this.state.popupMessageOnFailure ||\r\n this.props.errorMessageDescription ||\r\n this.props.formConfig.popupMessageOnFailure ||\r\n ErrorMessageService.errorMessageDescription(),\r\n explanation: '',\r\n telephoneHint: this.props.errorMessagePhoneNumberInfo || ErrorMessageService.errorMessagePhoneNumberInfo(),\r\n telephoneNumber: (this.props.errorMessagePhoneNumber || ErrorMessageService.errorMessagePhoneNumber() || \"\").replace(/ /g, ''),\r\n telephoneText: this.props.errorMessagePhoneNumber || ErrorMessageService.errorMessagePhoneNumber(),\r\n okButtonText: this.props.errorMessageButtonText || ErrorMessageService.errorMessageButtonText(),\r\n email: this.props.errorMessageEmail || \"\",\r\n emailInfo : this.props.errorMessageEmailInfo || \"\",\r\n linkUrl: this.props.formConfig.reactRouteOnFailure,\r\n container: this,\r\n stayOnPage: true // (!!this.props.formConfig.stayOnPageAfterErrorPopup)\r\n };\r\n\r\n const popupTooBigDataText = {\r\n ...popupText,\r\n title: this.props.formConfig.popupMessageOnTooBigDataFailure || getResourceString(\"Form.Popup.TooBigDataFailure\") || \r\n \"Het verstuurde formulier bevat teveel data, verstuur minder grote bestanden of probeer het opnieuw.\",\r\n stayOnPage: true,\r\n isUserError: true\r\n };\r\n\r\n const readonly = ReactFormHelpers.isReadOnly(this);\r\n this.setupOptionalBreadcrumbParent();\r\n\r\n // setting the below 'key' to a unique on each render\r\n // is needed to force recreating components, this is needed\r\n // in a deeper level for dropdowns .. so that in componentDidMount\r\n // the dropdown has the prefilled data AND the dropdown datasource data\r\n // (both are async processes on different points in the application, this helps\r\n // to get it in sync eventually)\r\n\r\n // key={uuidV4()}\r\n // a better way is to use the current Form name.. this forces\r\n // a rerender ONLY when the step/form changes and not on each rerender of\r\n // the FormContainer when the redux store changes for example\r\n\r\n // however.. an additional refreshId is needed which receives\r\n // a new id when this.props.forms changes (when data is prefilled for example)\r\n // this causes rerendering of underlaying components including dropdowns\r\n // fixing the above problem\r\n\r\n const renderFormController = (isPrintView : boolean) => {\r\n return (!this.props.formConfig.hideAlertsOnFormLevel && \r\n this.props.forms[this.state.currentForm + '_ERROR'] || '') !==\r\n '' ? (\r\n \r\n ) : null;\r\n }}\r\n renderCustomField={(formFieldDefinition: any, formController: any, formikBag: any) => {\r\n Logger.debug(`Rendering custom field: ${formFieldDefinition.customType}`);\r\n\r\n return (\r\n \r\n {\r\n {\r\n // simulate 'switch/case'\r\n 'contributie': ,\r\n 'richtextcontent': ,\r\n 'ctablock': ,\r\n 'tip': ,\r\n 'alert': ,\r\n 'titleHeadingTwo': ,\r\n 'link': ,\r\n 'simpleText': ,\r\n 'petitieTeller': ,\r\n 'popupConfirm': (this.state.showPopupConfirm && ),\r\n 'popupOk': (this.state.showPopupOK && ),\r\n 'grid': ,\r\n 'list': ,\r\n 'horizontal-ruler': ,\r\n 'loginRedirect': ,\r\n 'summary': ,\r\n }[formFieldDefinition.customType]\r\n }\r\n \r\n );\r\n }}\r\n />;\r\n return (\r\n \r\n {this.props.formConfig.showPrintButton &&\r\n ((this.state.isShowPostOk && !this.state.showThanksMessageAsInPageContent) ||\r\n !this.state.isShowPostOk) &&\r\n this.state.stepIndex == this.props.formConfig.formSteps.length - 1 && \r\n this.props.formConfig.formSteps.length > 1 &&\r\n renderFormController(true)}\r\n {((this.state.isShowPostOk && !this.state.showThanksMessageAsInPageContent) ||\r\n !this.state.isShowPostOk) && renderFormController(false)}\r\n {this.state.isShowPostDataError ? : null}\r\n {this.state.isShowTooBigDataError ? : null}\r\n {this.state.isShowPostOk && !this.state.showThanksMessageAsInPageContent ? (\r\n \r\n ) : null}\r\n {this.state.isShowPostOk && !!this.state.showThanksMessageAsInPageContent ? (\r\n
{ReactHtmlParser(this.props.onSuccessPopupMessage) || 'Succesvol verstuurd'}
\r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n\r\n//FormControllerContainer.contextType = MijnFNVPageContext;\r\n\r\nexport const FormContainer = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(FormControllerContainer);\r\n","import { action } from 'typesafe-actions';\r\nimport { Step } from '../models/Step';\r\nimport { STORE_STEP, CLEAR_STEPS, SET_ACTIVE_STEP } from '../constants/Constants';\r\n\r\nexport const storeStep = (title: string, formName : string) => action(STORE_STEP, \r\n {\r\n title : title, \r\n formName : formName\r\n } as Step);\r\n\r\nexport const clearStep = () => action(CLEAR_STEPS);\r\n\r\nexport const setActiveStepForm = (stepFormName : string) => action(SET_ACTIVE_STEP, \r\n {\r\n stepFormName : stepFormName\r\n });","import { action } from 'typesafe-actions';\r\nimport { Step } from '../models/Step';\r\nimport { STORE_EXTRA_STEP, CLEAR_EXTRA_STEPS } from '../constants/Constants';\r\n\r\nexport const storeStep = (title: string) => action(STORE_EXTRA_STEP, \r\n {\r\n title : title\r\n } as Step);\r\n\r\nexport const clearStep = () => action(CLEAR_EXTRA_STEPS);","function clearKenticoRule(rawRule){\r\n \r\n let [ruleWithoutUser] = rawRule.split('|(user)');\r\n let [rule] = ruleWithoutUser.split('|(identity)');\r\n\r\n const action = rule.replace(/{%/, '').replace(/%}/, '');\r\n\r\n return action;\r\n}\r\n\r\nfunction getKenticoMethodBody(action : string){\r\n return `\r\n // Stuff we need to run Kentico comparisons\r\n // !!!! React specific changes \r\n var Fields = fieldsMapper; \r\n var Value = value;\r\n // var Utils=Util;\r\n // !!!! END React specific changes \r\n \r\n // Example of Kentico visibility rules:\r\n // Value < Fields[\"0cf21467-a30d-43c5-a6c6-b7f7971bf73c\"].Value)\r\n // (ToDateTime(Value) >= ToDateTime(\"3/11/2019 3:12:47 PM\"))\r\n // (Value.Matches(\"/[a-z]+/g\")\r\n // (Util.IsEmail(Value))\r\n // Utils.hasValue(Fields.Opzegdatum.Value)\r\n // Fields.Opzegdatum.Valid\r\n \r\n // Kentico Conversion methods\r\n var ToDateTime=function(date){\r\n // This is not failsafe on all browsers. We should use framework instead.\r\n return new Date(date);\r\n }\r\n \r\n // Kentico Matches method\r\n String.prototype.Matches=function(regex) {\r\n return (this.match(regex) || []).length > 0;\r\n }\r\n \r\n try{\r\n // Execute Kentico macro as javascript\r\n return ${action};\r\n }\r\n catch(e)\r\n {\r\n // Parsing can go wrong, and the vailidation itself might contain methods not yet implemented here\r\n // In case a Kentico Rule fails, we log the rule plus the error in the console, so we can fix it.\r\n console.log(\"Error executing kentico rule:\");\r\n console.log(e)\r\n \r\n // By default, failing validation code should pass as a \"succesful validation\"\r\n return true;\r\n }\r\n `;\r\n }\r\n\r\nexport class KenticoRulesHelper { \r\n \r\n /**\r\n * getValidationMethodFromKenticoRule translates the clear text validation rule from Kentico into a working Javascript method\r\n *\r\n * To get there, we need to execute the clear text code into working Javascript.\r\n * For that, we use two parsing-steps:\r\n * 1: To extract the actual code that defines the rule\r\n * 2: To convert the rule into a working Javascript method.\r\n *\r\n * @param rawRule\r\n */\r\n static getValidationMethodFromKenticoRule(rawRule: string) {\r\n\r\n\r\n // Input from Kentico is something like:\r\n // tslint:disable-next-line: max-line-length\r\n // {%Rule(\"(Value < Fields[\\\"0cf21467-a30d-43c5-a6c6-b7f7971bf73c\\\"].Value)\", \"

HaseflatsID0cf21467-a30d-43c5-a6c6-b7f7971bf73c0text0

Is less than<0text0

\")|(user)pkaptein|(hash)cde2ae63a31948f3d5d42687396a7cab2581d5f5140dd7bcc692cadeddb0b593%}\r\n // console.log(rawRule);\r\n\r\n // ===\r\n // STEP 1: Discard everything not relevant.\r\n //\r\n const rule = clearKenticoRule(rawRule);\r\n // console.log(rule);\r\n\r\n // ===\r\n // STEP 2: Execute Rule. (This simplifies the extraction process)\r\n //\r\n // Short: a Rule from Kentico has two string values: the rule as code and the rule as XML.\r\n // We represent that as: extraction function(action, rulesXml)\r\n\r\n const [action, rulesXml] = new /* extraction */ Function(`\r\n // Input is a Rule-method with an action and the XML that defines the rule in Kentico\r\n\r\n // To keep parsing simple, we use the given Rule method to return those values in an array.\r\n var Rule=function(action, rulesXml){\r\n return [action, rulesXml]\r\n }\r\n try{\r\n // Return the array\r\n return ${rule}\r\n }catch(e){\r\n // In case a Kentico Rule can't be parsed, we notify in the console\r\n console.log(e)\r\n return ['true',rulesXml]\r\n }\r\n `)();\r\n\r\n /*\r\n rules are embedded XML definition of the method given in action\r\n Here we can translate and return that object\r\n const x2js = new X2JS();\r\n const rulesAsObject = x2js.xml2js(rulesXml);\r\n console.log(rulesAsObject);\r\n */\r\n\r\n // Debug-log result: clean code that is ready to execute\r\n //console.log(action);\r\n\r\n // ===\r\n // STEP 3: Create the validator-method\r\n //\r\n\r\n // We input the form/formController and the formControl,\r\n // We pass \"form\" to expose all kinds of handy things we might need for the validations\r\n // For now (debugging) we put the kenticoMethod in a separate constant, so we can console-log it\r\n\r\n\r\n // ===\r\n // STEP 4: Convert the Kentico Validation Rule into a working function\r\n // !!!! React specific changes \r\n const validationFunction = new /* validation */ Function(\r\n // Input parameters\r\n 'fieldsMapper', \r\n 'value', \r\n 'Utils', \r\n // Method body\r\n getKenticoMethodBody(action)\r\n );\r\n\r\n // Done.\r\n return validationFunction as (fieldsMapper: any, value: any, utils : any) => any;\r\n }\r\n\r\n static getValidationMethodFromRegex(regex: string) {\r\n const validationFunction = new /* validation */ Function(\r\n // Input parameters\r\n 'fieldsMapper', \r\n 'value', \r\n 'Utils', \r\n // Method body\r\n getKenticoMethodBody(regex)\r\n );\r\n\r\n // Done.\r\n return validationFunction as (fieldsMapper: any, value: any, utils : any) => any;\r\n }\r\n\r\n static getErrorNameFromKenticoRule(kenticoRule: any) {\r\n // Remove everything not wanted in a variable name\r\n return kenticoRule._errormsg.replace(/[^\\w]/g, '');\r\n }\r\n\r\n \r\n static getMacroMethodFromKenticoMacroRule(rawRule: string) {\r\n\r\n // Input from Kentico is something like:\r\n // tslint:disable-next-line: max-line-length\r\n // {%Rule(\"(Value < Fields[\\\"0cf21467-a30d-43c5-a6c6-b7f7971bf73c\\\"].Value)\", \"

HaseflatsID0cf21467-a30d-43c5-a6c6-b7f7971bf73c0text0

Is less than<0text0

\")|(user)pkaptein|(hash)cde2ae63a31948f3d5d42687396a7cab2581d5f5140dd7bcc692cadeddb0b593%}\r\n // console.log(rawRule);\r\n\r\n // ===\r\n // STEP 1: Discard everything not relevant.\r\n //\r\n\r\n const action = clearKenticoRule(rawRule);\r\n //console.log(action);\r\n\r\n // ===\r\n // STEP 2: Convert the Kentico Validation Rule into a working function\r\n // !!!! React specific changes \r\n\r\n const macroFunction = new /* validation */ Function(\r\n // Input parameters\r\n 'fieldsMapper', \r\n 'value', \r\n 'Utils', \r\n // Method body\r\n getKenticoMethodBody(action)\r\n );\r\n // Done.\r\n return macroFunction as (fieldsMapper: any, value: any, Utils : any) => any;\r\n }\r\n}\r\n","export class DecodeHtmlEntity {\r\n static fromString(textWithHtmlEntities : string) { \r\n var txt = document.createElement('textarea');\r\n txt.innerHTML = textWithHtmlEntities;\r\n return txt.value;\r\n }\r\n}","import { KenticoRulesHelper } from '../KenticoRulesHelper';\r\nimport { DecodeHtmlEntity } from '../../utils/DecodeHtmlEntity';\r\nimport { FormLabelHelpers } from '../../formcontrols/helpers/FormLabelHelpers';\r\nimport { StringHelpers } from '../../helpers/StringHelpers';\r\nimport { IField, IFieldValidationRule, IControlValidationRule, IFormFieldDefinition } from '../../interfaces/Fields';\r\nimport { IFieldControl } from '../control/create-control';\r\n\r\nexport class KenticoRulesCreator {\r\n\r\n static mergeFormDefinition(control: IFormFieldDefinition, formDefinitionToMergeWith: any) {\r\n if (\r\n control !== undefined &&\r\n formDefinitionToMergeWith !== undefined &&\r\n formDefinitionToMergeWith[control.name] !== undefined\r\n ) {\r\n let validation = control.validation;\r\n control = Object.assign(control, formDefinitionToMergeWith[control.name]);\r\n if (control.validation) {\r\n control.validation = Object.assign(validation, control.validation);\r\n }\r\n }\r\n return control;\r\n }\r\n\r\n static handleVisiblity(field: IField, control: IFormFieldDefinition) {\r\n if (field.properties?.visiblemacro) {\r\n if (field.properties.visiblemacro['@ismacro']) {\r\n try {\r\n const macroFunctionFromKenticoRule = KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n field.properties.visiblemacro['#text']\r\n );\r\n\r\n control.visibilityCondition.push({\r\n kenticoVisibilityFunction: macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n });\r\n } catch (err) {\r\n // skip visibility rule\r\n // tslint:disable-next-line\r\n console.log(err);\r\n }\r\n }\r\n } else if (field !== undefined && field[\"@visible\"] === undefined) {\r\n control.visibilityCondition.push({\r\n visible: false,\r\n type: 'visibility'\r\n });\r\n } \r\n }\r\n\r\n static handleEnabled(field: IField, control: IFieldControl) {\r\n if (field.properties?.enabledmacro) {\r\n if (field.properties.enabledmacro['@ismacro']) {\r\n try {\r\n const macroFunctionFromKenticoRule = KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n field.properties.enabledmacro['#text']\r\n );\r\n\r\n control.enabledCondition = {\r\n kenticoMacroFunction: macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n };\r\n } catch (err) {\r\n // skip visibility rule\r\n // tslint:disable-next-line\r\n console.log(err);\r\n }\r\n }\r\n }\r\n }\r\n\r\n static handleValidation(field: IField, control: IFieldControl) {\r\n if (!field['@allowempty'] || field['@allowempty'] === 'false') {\r\n control.validation.required = {\r\n error: StringHelpers.formFieldRequiredFieldErrorMessage(FormLabelHelpers.getLabelWithoutAsterisk(field.properties.fieldcaption))\r\n };\r\n }\r\n\r\n if (!field.rules || !field.rules.rule) {\r\n // No extra validation rules configured\r\n return;\r\n }\r\n\r\n // Kentico's rules can be of 4 different types (see type definition of IFieldValidationRules)\r\n let kenticoRules: (string | IFieldValidationRule)[] = [];\r\n if (typeof field.rules.rule === 'string') {\r\n kenticoRules = [field.rules.rule];\r\n } else if (typeof field.rules.rule === 'object') {\r\n kenticoRules = [field.rules.rule as IFieldValidationRule];\r\n } else if (Array.isArray(field.rules.rule)) {\r\n kenticoRules = field.rules.rule;\r\n }\r\n\r\n let validationRules: IControlValidationRule[] = [];\r\n\r\n kenticoRules.forEach(kenticoRule => {\r\n try {\r\n const ruleText = typeof kenticoRule === 'string' ? kenticoRule : kenticoRule['#text'];\r\n const validationFunctionFromKenticoRule = KenticoRulesHelper.getValidationMethodFromKenticoRule(ruleText);\r\n\r\n validationRules.push({\r\n error: kenticoRule['@errormsg'] !== undefined ? DecodeHtmlEntity.fromString(kenticoRule['@errormsg']) : field.properties.validationerrormessage || \"Error\",\r\n validationFunction: validationFunctionFromKenticoRule\r\n });\r\n } catch (err) {\r\n // skip validation rule\r\n // tslint:disable-next-line\r\n console.log(err);\r\n }\r\n });\r\n\r\n if (validationRules.length > 0) {\r\n control.validation.kenticoRules = {\r\n rules: validationRules,\r\n };\r\n }\r\n }\r\n\r\n static assignKenticoRules(field: IField, control) {\r\n this.handleValidation(field, control);\r\n this.handleVisiblity(field, control);\r\n this.handleEnabled(field, control);\r\n return control;\r\n }\r\n}\r\n","import { KenticoRulesCreator } from '../builders/KenticoRulesCreator';\r\nimport { KenticoRulesHelper } from '../KenticoRulesHelper';\r\nimport { getResourceString } from '../resource-strings';\r\n\r\nexport class KenticoFormControlHelpers {\r\n\r\n static getContributieBlock(fieldName, category, membershipAmountResourcestring, additionalTextResourcestring, visibilityCondition) : any {\r\n const additionalText = getResourceString(additionalTextResourcestring);\r\n return {\r\n \"isContributieTabelField\": true,\r\n \"name\": \"contributietabel-\" + fieldName,\r\n \"id\": \"contributietabel-id-\" + fieldName,\r\n \"label\": getResourceString(membershipAmountResourcestring),\r\n \"type\": \"custom\",\r\n \"customType\": \"contributie\",\r\n \"validation\": {\r\n \"required\": {\r\n \"error\": getResourceString(\"Form.Error.RequiredField\")\r\n } \r\n }, \r\n \"section\": 'category-' + category,\r\n \"sectionCssClass\": \"contributietabel\",\r\n \"defaultValue\": \"\",\r\n \"clearFields\": [],\r\n \"lidVoordelenRichtText\": \"

 

\\r\\n\",\r\n \"lidVoordelenBeforeText\": \" \",\r\n \"lidVoordelenTitle\": \" \",\r\n \"lidWordenButtonTitle\": \"\",\r\n \"periodText\": \"per maand\",\r\n \"toonLidVoordelen\": \"False\",\r\n \"toonLidWordenButton\": \"False\",\r\n \"title\": \"Dit wordt jouw contributie\",\r\n \"afterText\": \"\",\r\n \"additionalText\": (additionalText === \"&nbsp;\" || additionalText === \"-\") ? \"\" : additionalText,\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n `{%${visibilityCondition}|(user)React|(hash)1234%}`\r\n ),\r\n type: 'kentico'\r\n }\r\n ],\r\n };\r\n }\r\n\r\n static getContributieTabel(field, category, formFieldOverrides) : any {\r\n let controls = [\r\n {\r\n \"isContributieTabelField\": true,\r\n \"name\": \"Situatie\",\r\n \"id\": \"contributietabel-Situatie\",\r\n \"label\": \"Wat is je situatie?\",\r\n \"type\": \"radio-styled\",\r\n \"validation\": {\r\n \"required\": {\r\n \"error\": getResourceString(\"Form.Error.RequiredField\")\r\n } \r\n }, \r\n \"section\": 'category-' + category,\r\n \"sectionCssClass\": \"contributietabel\",\r\n \"options\": [\"Ik studeer\", \"Ik werk\", \"Ik werk (tijdelijk) niet\"],\r\n \"valueoptions\": [\"student\", \"werkend\", \"werkt_niet\"],\r\n \"defaultValue\": \"\",\r\n \"clearFields\": [\r\n \"StudieVorm\", \"WerkVorm\", \"Watisjebrutomaandinkomen\"\r\n ] \r\n },\r\n {\r\n \"isContributieTabelField\": true,\r\n \"name\": \"StudieVorm\",\r\n \"id\": \"contributietabel-StudieVorm\",\r\n \"label\": \"In welke vorm studeer je?\",\r\n \"type\": \"radio-styled\",\r\n \"validation\": {\r\n \"required\": {\r\n \"error\": getResourceString(\"Form.Error.RequiredField\")\r\n } \r\n }, \r\n \"section\": 'category-' + category,\r\n \"sectionCssClass\": \"contributietabel\",\r\n \"options\": [\"Voltijd/BOL\", \"Deeltijd/BBL\"],\r\n \"valueoptions\": [\"voltijd\", \"deeltijd\"],\r\n \"defaultValue\": \"\",\r\n \"clearFields\": [\r\n \"Watisjebrutomaandinkomen\" \r\n ],\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n `{%Fields[\"Situatie\"].Value === \"student\"|(user)React|(hash)1234%}`\r\n ),\r\n type: 'kentico'\r\n }\r\n ],\r\n },\r\n {\r\n \"isContributieTabelField\": true,\r\n \"name\": \"WerkVorm\",\r\n \"id\": \"contributietabel-WerkVorm\",\r\n \"label\": \"Welke vorm?\",\r\n \"type\": \"radio-styled\",\r\n \"validation\": {\r\n \"required\": {\r\n \"error\": getResourceString(\"Form.Error.RequiredField\")\r\n } \r\n }, \r\n \"section\": 'category-' + category,\r\n \"sectionCssClass\": \"contributietabel\",\r\n \"options\": [\"In loondienst\", \"Als ZZP’er\", \"Als uitzendkracht\"],\r\n \"valueoptions\": [\"loondienst\", \"zzp\", \"uitzendkracht\"],\r\n \"defaultValue\": \"\",\r\n \"clearFields\": [\r\n \"Watisjebrutomaandinkomen\" \r\n ],\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n `{%Fields[\"Situatie\"].Value === \"werkend\"|(user)React|(hash)1234%}`\r\n ),\r\n type: 'kentico'\r\n }\r\n ],\r\n },\r\n {\r\n \"isContributieTabelField\": true,\r\n \"name\": \"Watisjebrutomaandinkomen\",\r\n \"id\": \"contributietabel-Watisjebrutomaandinkomen\",\r\n \"label\": \"Wat is je bruto maandinkomen?\",\r\n \"type\": \"radio-styled\",\r\n \"validation\": {\r\n \"required\": {\r\n \"error\": getResourceString(\"Form.Error.RequiredField\")\r\n } \r\n }, \r\n \"section\": 'category-' + category,\r\n \"sectionCssClass\": \"contributietabel\",\r\n \"options\": [\r\n getResourceString(\"LidWorden.ContributieBlock.WerkInkomenLaag\"), \r\n getResourceString(\"LidWorden.ContributieBlock.WerkInkomenMidden\"), \r\n getResourceString(\"LidWorden.ContributieBlock.WerkInkomenHoog\")\r\n ],\r\n \"valueoptions\": [\"laag\", \"midden\", \"hoog\"],\r\n \"defaultValue\": \"\",\r\n \"clearFields\": [\r\n ],\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n `{%Fields[\"Situatie\"].Value !== \"\" && Fields[\"StudieVorm\"] !== \"voltijd\" && Fields[\"WerkVorm\"] !== \"zzp\" && \r\n Fields[\"Situatie\"].Value !== \"werkt_niet\" && \r\n (Fields[\"StudieVorm\"].Value === \"deeltijd\" || \r\n Fields[\"WerkVorm\"].Value === \"loondienst\" || \r\n Fields[\"WerkVorm\"].Value === \"uitzendkracht\")|(user)React|(hash)1234%}`\r\n ),\r\n type: 'kentico'\r\n }\r\n ],\r\n },\r\n this.getContributieBlock(\"ContributieBlock-studentvoltijd\", category,\r\n \"LidWorden.ContributieBlockStudentVoltijd.Amount\", \r\n \"LidWorden.ContributieBlockStudentVoltijd.AdditionalText\", \r\n `Fields[\"StudieVorm\"].Value === \"voltijd\"`),\r\n this.getContributieBlock(\"ContributieBlock-studentdeeltijdlaag\", category,\r\n \"LidWorden.ContributieBlockStudentDeeltijdLaag.Amount\", \r\n \"LidWorden.ContributieBlockStudentDeeltijdLaag.AdditionalText\", \r\n `Fields[\"Watisjebrutomaandinkomen\"].Value === \"laag\" && Fields[\"StudieVorm\"].Value === \"deeltijd\"`),\r\n this.getContributieBlock(\"ContributieBlock-studentdeeltijdmidden\", category,\r\n \"LidWorden.ContributieBlockStudentDeeltijdMidden.Amount\", \r\n \"LidWorden.ContributieBlockStudentDeeltijdMidden.AdditionalText\", \r\n `Fields[\"Watisjebrutomaandinkomen\"].Value === \"midden\" && Fields[\"StudieVorm\"].Value === \"deeltijd\"`),\r\n this.getContributieBlock(\"ContributieBlock-studentdeeltijdhoog\", category,\r\n \"LidWorden.ContributieBlockStudentDeeltijdHoog.Amount\", \r\n \"LidWorden.ContributieBlockStudentDeeltijdHoog.AdditionalText\", \r\n `Fields[\"Watisjebrutomaandinkomen\"].Value === \"hoog\" && Fields[\"StudieVorm\"].Value === \"deeltijd\"`),\r\n\r\n this.getContributieBlock(\"ContributieBlock-werkt_niet\", category,\r\n \"LidWorden.ContributieBlockWerktTijdelijkNiet.Amount\", \r\n \"LidWorden.ContributieBlockWerktTijdelijkNiet.AdditionalText\", \r\n `Fields[\"Situatie\"].Value === \"werkt_niet\"`),\r\n\r\n this.getContributieBlock(\"ContributieBlock-zzp\", category,\r\n \"LidWorden.ContributieBlockZZP.Amount\", \r\n \"LidWorden.ContributieBlockZZP.AdditionalText\", \r\n `Fields[\"Situatie\"].Value === \"werkend\" && Fields[\"WerkVorm\"].Value === \"zzp\"`),\r\n\r\n this.getContributieBlock(\"ContributieBlock-werkendlaag\", category,\r\n \"LidWorden.ContributieBlockWerkendLoondienstUitzendkrachtLaag.Amount\", \r\n \"LidWorden.ContributieBlockWerkendLoondienstUitzendkrachtLaag.AdditionalText\", \r\n `Fields[\"Watisjebrutomaandinkomen\"].Value === \"laag\" && Fields[\"Situatie\"].Value === \"werkend\" && (Fields[\"WerkVorm\"].Value === \"loondienst\" || Fields[\"WerkVorm\"].Value === \"uitzendkracht\")`),\r\n this.getContributieBlock(\"ContributieBlock-werkendmidden\", category,\r\n \"LidWorden.ContributieBlockWerkendLoondienstUitzendkrachtMidden.Amount\", \r\n \"LidWorden.ContributieBlockWerkendLoondienstUitzendkrachtMidden.AdditionalText\", \r\n `Fields[\"Watisjebrutomaandinkomen\"].Value === \"midden\" && Fields[\"Situatie\"].Value === \"werkend\" && (Fields[\"WerkVorm\"].Value === \"loondienst\" || Fields[\"WerkVorm\"].Value === \"uitzendkracht\")`),\r\n this.getContributieBlock(\"ContributieBlock-werkendhoog\", category,\r\n \"LidWorden.ContributieBlockWerkendLoondienstUitzendkrachtHoog.Amount\", \r\n \"LidWorden.ContributieBlockWerkendLoondienstUitzendkrachtHoog.AdditionalText\", \r\n `Fields[\"Watisjebrutomaandinkomen\"].Value === \"hoog\" && Fields[\"Situatie\"].Value === \"werkend\" && (Fields[\"WerkVorm\"].Value === \"loondienst\" || Fields[\"WerkVorm\"].Value === \"uitzendkracht\")`), \r\n ];\r\n controls.map((control : any) => {\r\n\r\n if (control.visibilityCondition === undefined) {\r\n control.visibilityCondition = [];\r\n }\r\n \r\n KenticoRulesCreator.handleVisiblity(field, KenticoRulesCreator.mergeFormDefinition(control , formFieldOverrides));\r\n }); \r\n\r\n return controls;\r\n }\r\n\r\n static getAddressControls(field, category, formFieldOverrides) : any {\r\n\r\n let prefixFieldName = \"\";\r\n if (field.settings && field.settings.PrefixVoorAdresblokVelden) {\r\n prefixFieldName = field.settings.PrefixVoorAdresblokVelden;\r\n }\r\n let IkWoonInLabel = \"\";\r\n if (field.settings && field.settings.IkWoonInLabel) {\r\n IkWoonInLabel = field.settings.IkWoonInLabel;\r\n }\r\n let WoonplaatsLabel = \"\";\r\n if (field.settings && field.settings.WoonplaatsLabel) {\r\n WoonplaatsLabel = field.settings.WoonplaatsLabel;\r\n }\r\n\r\n let isRequired = true;\r\n\r\n const applyRequiredFieldSetting = (field.settings?.ApplyRequiredFieldSetting ?? \"\").toLowerCase();\r\n if (applyRequiredFieldSetting === \"true\") {\r\n isRequired = field['@allowempty'] !== 'true';\r\n }\r\n \r\n const macroFunctionFromKenticoRule = KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n `{%Fields[\"${prefixFieldName}NederlandAnderLand\"].Value === \"*\"|(user)React|(hash)1234%}`\r\n );\r\n\r\n const macroFunctionIsNederlandFromKenticoRule = KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n `{%Fields[\"${prefixFieldName}NederlandAnderLand\"].Value === \"NL\"|(user)React|(hash)1234%}`\r\n ); \r\n \r\n const getRequiredValidation = (errorMessage) => {\r\n if (isRequired) {\r\n return {\r\n \"required\": {\r\n \"error\": getResourceString(errorMessage)\r\n } \r\n };\r\n }\r\n return {};\r\n };\r\n\r\n let controls = [\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"NederlandAnderLand\",\r\n \"id\": prefixFieldName + \"adresblok-NederlandAnderLand\",\r\n \"label\": IkWoonInLabel || getResourceString(\"Form.NederlandAnderLand.Label\"),\r\n \"type\": \"radio\",\r\n \"validation\": {\r\n ...getRequiredValidation(\"Form.NederlandAnderLand.RequiredError\"), \r\n }, \r\n \"section\": prefixFieldName + \"adresblok-nederlandanderland\",\r\n \"sectionCssClass\": \"adresblok-nederlandanderland\",\r\n \"options\": [getResourceString(\"Form.NederlandAnderLand.Option.Netherlands\"), getResourceString(\"Form.NederlandAnderLand.Option.ForeignCountry\")],\r\n \"valueoptions\": [\"NL\", \"*\"],\r\n \"triggerFieldWithCondition\": {\r\n \"field\": prefixFieldName + \"Postcode\",\r\n \"value\": \"NL\",\r\n \"datasource\": prefixFieldName + \"postcode\"\r\n },\r\n \"defaultValue\": \"NL\",\r\n \"clearFields\": [\r\n prefixFieldName + \"Land\", \r\n prefixFieldName + \"Postcode\", \r\n prefixFieldName + \"Huisnummer\", \r\n prefixFieldName + \"Toevoeging\", \r\n prefixFieldName + \"Straat\", \r\n prefixFieldName + \"Woonplaats\"\r\n ] \r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"Land\",\r\n \"id\": prefixFieldName + \"adresblok-Land\",\r\n \"label\": getResourceString(\"Form.Land.Label\"),\r\n \"type\": \"dropdown\",\r\n \"datasource\": prefixFieldName + \"countries\",\r\n \"section\": prefixFieldName + \"adresblok-land\",\r\n \"sectionCssClass\": \"adresblok-land\",\r\n \"placeholder\": getResourceString(\"Form.Land.SelectCountry\"), \r\n \"validation\": {\r\n ...getRequiredValidation(\"Form.Land.RequiredError\")\r\n },\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }\r\n ],\r\n \"includeDefaultEmptyOption\": false,\r\n \"defaultEmptyOption\": \"\",\r\n \"optionField\": \"landNaamField\",\r\n \"valueField\": \"landCodeField\"\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"Postcode\",\r\n \"id\": prefixFieldName + \"adresblok-Postcode\",\r\n \"label\": getResourceString(\"Form.Postalcode.Label\"),\r\n \"type\": \"maskedtext\", \r\n \"mask\": \"9999aa\",\r\n \"alwaysUppercase\": true,\r\n \"validation\": {\r\n \"dataType\": {\r\n \"kind\": \"postcodenl\",\r\n \"error\": getResourceString(\"Form.Postalcode.Error\") \r\n },\r\n ...getRequiredValidation(\"Form.Postalcode.RequiredError\") \r\n },\r\n \"datasoureRequiresAllFieldsFilled\": true, \r\n \"datasource\": prefixFieldName + \"postcode\",\r\n \"datasourceConditions\" : {\r\n kenticoMacroFunction: macroFunctionIsNederlandFromKenticoRule,\r\n type: 'kentico'\r\n },\r\n \"enableMaskConditions\" : {\r\n kenticoMacroFunction: macroFunctionIsNederlandFromKenticoRule,\r\n type: 'kentico'\r\n },\r\n \"section\": prefixFieldName + \"adresblok\", //\"category-\" + category,\r\n \"sectionCssClass\": \"adresblok\", //\"category-\" + category,\r\n \"cssClass\": \"mijnfnv__postcode\",\r\n \"alwaysShowSummaryField\": true,\r\n \"autoCompleteToken\": \"postal-code\"\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"Huisnummer\",\r\n \"id\": prefixFieldName + \"adresblok-Huisnummer\",\r\n \"label\": getResourceString(\"Form.Housenumber.Label\"),\r\n \"type\": \"text\",\r\n \"datasoureRequiresAllFieldsFilled\": true, \r\n \"maskCharsExpression\": \"^[0-9]+$\",\r\n \"maxlength\": 250,\r\n \"validation\": {\r\n \"dataType\": {\r\n \"kind\": \"number\",\r\n \"error\": getResourceString(\"Form.Housenumber.ErrorOnlyNumbers\")\r\n }, \r\n ...getRequiredValidation(\"Form.Housenumber.RequiredError\"),\r\n \"integer\": {\r\n \"error\": getResourceString(\"Form.Housenumber.ErrorOnlyNumbers\")\r\n }\r\n },\r\n \"datasource\": prefixFieldName + \"postcode\",\r\n \"datasourceConditions\" : {\r\n kenticoMacroFunction: macroFunctionIsNederlandFromKenticoRule,\r\n type: 'kentico'\r\n },\r\n \"__datasourceConditions\": [\r\n {\r\n \"fieldName\": prefixFieldName + \"NederlandAnderLand\",\r\n \"value\": \"NL\"\r\n }\r\n ],\r\n \"section\": prefixFieldName + \"adresblok\",\r\n \"sectionCssClass\": \"adresblok\",\r\n \"cssClass\": \"mijnfnv__huisnr\",\r\n \"alwaysShowSummaryField\": true,\r\n \"autoCompleteToken\": \"address-line2\"\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"Toevoeging\",\r\n \"id\": prefixFieldName + \"adresblok-Toevoeging\",\r\n \"label\": getResourceString(\"Form.HousenumberAddition.Label\"),\r\n \"type\": \"text\",\r\n \"maxlength\": 15,\r\n \"validation\": {},\r\n \"section\": prefixFieldName + \"adresblok\",\r\n \"sectionCssClass\": \"adresblok\",\r\n \"cssClass\": \"mijnfnv__toevoeging\",\r\n \"alwaysShowSummaryField\": true,\r\n \"autoCompleteToken\": \"address-line3\"\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"PostcodeCheckHint\",\r\n \"id\": prefixFieldName + \"adresblok-PostcodeCheckHint\",\r\n \"label\": \"PostcodeCheckHint\",\r\n \"type\": \"readOnly\",\r\n \"maxlength\": 15,\r\n \"validation\": {},\r\n \"section\": prefixFieldName + \"adresblok\",\r\n \"sectionCssClass\": \"adresblok\",\r\n \"cssClass\": \"mijnfnv__postcodecheckhint\",\r\n \"alwaysShowSummaryField\": false,\r\n \"readOnly\": true,\r\n \"visibleOnError\": \"false\",\r\n \"fieldForErrorCheck\": prefixFieldName + \"Straat\",\r\n \"defaultValue\": getResourceString(\"Form.PostalcodeCheckHint.Text\"),\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: macroFunctionIsNederlandFromKenticoRule,\r\n type: 'kentico'\r\n }\r\n ] \r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"PostcodeCheckHintError\",\r\n \"id\": prefixFieldName + \"adresblok-PostcodeCheckHintError\",\r\n \"label\": \"PostcodeCheckHintError\",\r\n \"type\": \"readOnly\",\r\n \"maxlength\": 15,\r\n \"validation\": {},\r\n \"section\": prefixFieldName + \"adresblok\",\r\n \"sectionCssClass\": \"adresblok\",\r\n \"cssClass\": \"mijnfnv__postcodecheckerrorhint\",\r\n \"alwaysShowSummaryField\": false,\r\n \"readOnly\": true,\r\n \"visibleOnError\": \"true\",\r\n \"fieldForErrorCheck\": prefixFieldName + \"Straat\",\r\n \"defaultValue\": getResourceString(\"Form.PostalcodeCheckHint.Error\"),\r\n \"visibilityCondition\": [\r\n {\r\n kenticoVisibilityFunction: macroFunctionIsNederlandFromKenticoRule,\r\n type: 'kentico'\r\n }\r\n ] \r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"Straat\",\r\n \"id\": prefixFieldName + \"adresblok-Straat\",\r\n \"label\": getResourceString(\"Form.Street.Label\"),\r\n \"type\": \"text\",\r\n \"maxlength\": 250,\r\n \"validation\": {\r\n ...getRequiredValidation(\"Form.Street.RequiredError\")\r\n },\r\n \"__disabled\": \"true\",\r\n \"enabledOnError\": \"true\",\r\n \"__enabledConditions\" : [\r\n {\r\n \"fieldName\": \"NederlandAnderLand\",\r\n \"value\": \"*\"\r\n }\r\n ], \r\n \"enabledCondition\" : {\r\n kenticoMacroFunction: macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }, \r\n \"section\": prefixFieldName + \"adresblok\",\r\n \"sectionCssClass\": \"adresblok\",\r\n \"cssClass\": \"mijnfnv__straat\",\r\n \"alwaysShowSummaryField\": true,\r\n \"autoCompleteToken\": \"address-line1\"\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"prefixVoorAdresblokVelden\" : prefixFieldName,\r\n \"name\": prefixFieldName + \"Woonplaats\",\r\n \"id\": prefixFieldName + \"adresblok-Woonplaats\",\r\n \"label\": WoonplaatsLabel || getResourceString(\"Form.City.Label\"),\r\n \"type\": \"text\",\r\n \"maxlength\": 80,\r\n \"validation\": {\r\n ...getRequiredValidation(\"Form.City.RequiredError\") \r\n },\r\n \"__disabled\": \"true\",\r\n \"enabledOnError\": \"true\",\r\n \"__enabledConditions\" : [\r\n {\r\n \"fieldName\": \"NederlandAnderLand\",\r\n \"value\": \"*\"\r\n }\r\n ],\r\n \"enabledCondition\" : {\r\n kenticoMacroFunction: macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n },\r\n \"section\": prefixFieldName + \"adresblok\",\r\n \"sectionCssClass\": \"adresblok\",\r\n \"cssClass\": \"mijnfnv__woonplaats\",\r\n \"alwaysShowSummaryField\": true,\r\n \"autoCompleteToken\": \"address-level2\"\r\n }\r\n ];\r\n\r\n controls.map((control : any) => {\r\n\r\n if (control.visibilityCondition === undefined) {\r\n control.visibilityCondition = [];\r\n }\r\n \r\n KenticoRulesCreator.handleVisiblity(field, KenticoRulesCreator.mergeFormDefinition(control , formFieldOverrides));\r\n }); \r\n\r\n return controls;\r\n }\r\n\r\n static getAddressControlsReadOnly(field, category, formFieldOverrides) : any {\r\n const macroFunctionFromKenticoRule = KenticoRulesHelper.getMacroMethodFromKenticoMacroRule(\r\n '{%false%}'\r\n );\r\n let controls = [\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Adres\",\r\n \"label\": field.properties.fieldcaption || getResourceString(\"Form.Address.Label\"),\r\n \"type\": \"readOnly\",\r\n \"maxlength\": 100,\r\n \"validation\": {},\r\n \"format\": \"{Straat} {Huisnummer} {Toevoeging}
{Postcode} {Woonplaats}\",\r\n \"disabled\": \"true\",\r\n \"section\": \"category-\" + category,\r\n \"alwaysShowSummaryField\": true,\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"NederlandAnderLand\",\r\n \"id\": \"adresblok-NederlandAnderLand\",\r\n \"label\": getResourceString(\"Form.NederlandAnderLand.Label\"),\r\n \"type\": \"radio\",\r\n \"validation\": {},\r\n \"disabled\": \"true\",\r\n \"section\": \"category-\" + category,\r\n \"options\": [getResourceString(\"Form.NederlandAnderLand.Option.Netherlands\"), getResourceString(\"Form.NederlandAnderLand.Option.ForeignCountry\")],\r\n \"valueoptions\": [\"NL\", \"*\"],\r\n \"visibilityCondition\" : [{\r\n kenticoVisibilityFunction : macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }] \r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Land\",\r\n \"id\": \"adresblok-Land\",\r\n \"label\": getResourceString(\"Form.Country.Label\"),\r\n \"type\": \"readOnly\",\r\n \"datasource\": \"countries\",\r\n \"validation\": {},\r\n \"section\": \"category-\" + category,\r\n \"placeholder\": getResourceString(\"Form.Land.SelectCountry\"),\r\n \"optionField\": \"Label\",\r\n \"valueField\": \"Id\",\r\n \"disabled\": \"true\",\r\n \"visibilityCondition\": [\r\n {\r\n \"fieldName\": \"NederlandAnderLand\",\r\n \"value\": \"*\"\r\n }\r\n ] \r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Straat\",\r\n \"id\": \"adresblok-Straat\",\r\n \"label\": \"\",\r\n \"type\": \"readOnly\",\r\n \"validation\": {},\r\n \"section\": \"category-\" + category,\r\n \"disabled\": \"true\",\r\n \"visibilityCondition\": [{\r\n kenticoVisibilityFunction : macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }]\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Huisnummer\",\r\n \"id\": \"adresblok-Huisnummer\",\r\n \"label\": \"\",\r\n \"type\": \"readOnly\",\r\n \"validation\": {},\r\n \"section\": \"category-\" + category,\r\n \"disabled\": \"true\",\r\n \"visibilityCondition\": [{\r\n kenticoVisibilityFunction : macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }]\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Toevoeging\",\r\n \"id\": \"adresblok-Toevoeging\",\r\n \"label\": \"\",\r\n \"type\": \"readOnly\",\r\n \"validation\": {},\r\n \"section\": \"category-\" + category,\r\n \"disabled\": \"true\",\r\n \"visibilityCondition\": [{\r\n kenticoVisibilityFunction : macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }]\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Postcode\",\r\n \"id\": \"adresblok-Postcode\",\r\n \"label\": \"\",\r\n \"type\": \"readOnly\",\r\n \"validation\": {},\r\n \"section\": \"category-\" + category,\r\n \"disabled\": \"true\",\r\n \"visibilityCondition\": [{\r\n kenticoVisibilityFunction : macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }]\r\n },\r\n {\r\n \"isAdresBlokField\": true,\r\n \"name\": \"Woonplaats\",\r\n \"id\": \"adresblok-Woonplaats\",\r\n \"label\": \"\",\r\n \"type\": \"readOnly\",\r\n \"validation\": {},\r\n \"section\": \"category-\" + category,\r\n \"disabled\": \"true\",\r\n \"visibilityCondition\": [{\r\n kenticoVisibilityFunction : macroFunctionFromKenticoRule,\r\n type: 'kentico'\r\n }]\r\n }\r\n ];\r\n\r\n // \r\n controls.map((control : any) => {\r\n \r\n if (control.visibilityCondition === undefined) {\r\n control.visibilityCondition = [];\r\n }\r\n\r\n KenticoRulesCreator.handleVisiblity(field, KenticoRulesCreator.mergeFormDefinition(control , formFieldOverrides));\r\n });\r\n\r\n return controls;\r\n }\r\n static getRegexForNameFields = () => {\r\n return \"^[a-zA-ZÀ-ž ,.'-]+$\";\r\n }\r\n} ","import { IFormConfig } from '../../interfaces/FormConfig';\r\n\r\nexport class FormStepHelpers {\r\n static addFormStep(\r\n field: any,\r\n index: number,\r\n data: any,\r\n formStep: string,\r\n formDefinitions: any,\r\n formConfig: IFormConfig\r\n ) {\r\n let addFormStep: boolean = true;\r\n\r\n if (index + 1 < data.form.field.length) {\r\n let nextField: any = data.form.field[index + 1];\r\n if (\r\n nextField.settings.controlname == 'PopupOK' ||\r\n nextField.settings.controlname == 'PopupConfirm'\r\n ) {\r\n addFormStep = false;\r\n }\r\n }\r\n\r\n const addFormStepCaption = !formConfig.formStepCaptions || formConfig.formStepCaptions.length == 0;\r\n\r\n if (addFormStep) {\r\n formStep = field['@column'];\r\n const formStepCaption = field.properties && field.properties.fieldcaption ? field.properties.fieldcaption : field['@column'];\r\n \r\n formDefinitions[formStep] = [];\r\n \r\n //if (addFormStepCaption) \r\n {\r\n formConfig.formStepCaptions.push(formStepCaption);\r\n }\r\n\r\n formConfig.formSteps.push(formStep);\r\n formConfig.pageSettings[formStep] = {\r\n title: field.properties.fieldcaption,\r\n subtitle: field.settings.Subtitle || \"\"\r\n };\r\n }\r\n\r\n return formStep;\r\n }\r\n}\r\n","import { IField } from \"../../interfaces/field\";\r\n\r\nconst DUMMY_RULE_TEMPLATE = `{%{0}|(user)React|(hash)1234%}`;\r\n\r\nexport class MacroHelper {\r\n\r\n static buildMacroRule(rule: string) {\r\n return DUMMY_RULE_TEMPLATE.replace('{0}', rule);\r\n }\r\n\r\n static setVisibilityMacro(field: IField, visibilityRule: string) {\r\n if (!field.properties) {\r\n field.properties = {};\r\n }\r\n if (!field.properties.visiblemacro) {\r\n field.properties.visiblemacro = {};\r\n }\r\n\r\n field.properties.visiblemacro['@ismacro'] = 'true';\r\n field.properties.visiblemacro['#text'] = this.buildMacroRule(visibilityRule);\r\n }\r\n\r\n}","import { IOption } from '../../interfaces/Fields';\r\n\r\nconst DEFAULT_OPTIONS_SEPARATOR = '\\n';\r\nconst DEFAULT_VALUE_SEPARATOR = ';';\r\n\r\nexport class OptionsParser {\r\n\r\n /**\r\n * Parses the given options string to the values, labels and optional icons.\r\n * \r\n * @param {string} optionsString The options string to parse.\r\n * @param {string} [optionsSeparator=DEFAULT_OPTIONS_SEPARATOR] The separator between the different options in the optionsString. Defaults to '\\n'.\r\n * \r\n * @returns An array with options.\r\n */\r\n public static parseOptionsString(optionsString: string, optionsSeparator: string = DEFAULT_OPTIONS_SEPARATOR): IOption[] {\r\n if (!optionsString) {\r\n return [];\r\n }\r\n\r\n const options = optionsString.split(optionsSeparator).map(option => {\r\n const splitted = option.split(DEFAULT_VALUE_SEPARATOR).map(item => item.trim());\r\n const optionValue = splitted[0];\r\n // Labels are optional, and are equal to the value if not provided\r\n const optionLabel = splitted.length > 1 ? splitted[1] : splitted[0];\r\n \r\n // Icons are optional\r\n const optionIcon = splitted.length > 2 ? splitted[2] : null;\r\n\r\n return {\r\n value: optionValue,\r\n label: optionLabel,\r\n icon: optionIcon,\r\n };\r\n });\r\n\r\n return options;\r\n }\r\n\r\n /**\r\n * Parses the given options string to the values, labels and optional icons.\r\n * \r\n * @deprecated\r\n * Old components use this method with separate values, labels and icon arrays, but we should use 'parseOptionsString' instead where all those values\r\n * are in the same object in one array.\r\n * This method is still needed for components that use a 'datasource', because in the ComponentStoreHelper it is assumed that there are 'valueoptions'.\r\n * \r\n * @param {string} optionsString The options string to parse.\r\n * @param {string} [optionsSeparator=DEFAULT_OPTIONS_SEPARATOR] The separator between the different options in the optionsString. Defaults to '\\n'.\r\n * \r\n * @returns An object with the parsed values, labels and icons.\r\n */\r\n public static parseOptionsStringOld(optionsString: string, optionsSeparator: string = DEFAULT_OPTIONS_SEPARATOR): { values: string[], labels: string[], icons: string[] } {\r\n\r\n const options = this.parseOptionsString(optionsString, optionsSeparator);\r\n\r\n const values = [];\r\n const labels = [];\r\n const icons = [];\r\n \r\n options.forEach(option => {\r\n values.push(option.value);\r\n labels.push(option.label);\r\n icons.push(option.icon);\r\n });\r\n\r\n return {\r\n values,\r\n labels,\r\n icons,\r\n };\r\n }\r\n}","import { KenticoRulesCreator } from './KenticoRulesCreator';\r\nimport { StringHelpers } from '../../helpers/StringHelpers';\r\nimport { KenticoRulesHelper } from '../KenticoRulesHelper';\r\nimport { getResourceString } from '../resource-strings';\r\nimport { KenticoFormControlHelpers } from '../helpers/KenticoFormControlHelpers';\r\nimport { \r\n IFormFieldDefinition,\r\n ICheckboxMultipleFieldDefinition, \r\n IField, \r\n IFieldOverrides, \r\n IContributionBlockFieldSettings, \r\n ICtaFieldSettings, \r\n ICustomTemplateFieldSettings, \r\n ILoginFieldSettings, \r\n IPetitionFieldSettings, \r\n IRichTextFieldSettings, \r\n ITextAreaFieldSettings, \r\n ITipFieldSettings, \r\n IAlertFieldSettings,\r\n IReCaptchaFieldSettings,\r\n IDropdownSettings,\r\n IDropdownMultipleSettings,\r\n IListFieldSettings,\r\n IRadioSettings,\r\n ICheckboxMultipleSettings,\r\n IQrCodeScannerFieldDefinition,\r\n IQrCodeScannerSettings\r\n} from '../../interfaces/Fields';\r\nimport { MacroHelper } from '../helpers/macro-helper';\r\nimport { Logger } from '@fnv-core/logging';\r\nimport { OptionsParser } from './OptionsParser';\r\n\r\nexport class FormControlBuilder {\r\n static category(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const categoryFieldOverrides = FormControlBuilder.getFormFieldOverridesForField<{ skip: boolean }>(field, formFieldOverrides);\r\n\r\n if (categoryFieldOverrides.skip === true) {\r\n return;\r\n }\r\n\r\n control.type = 'title';\r\n control.cssClass = 'section__start';\r\n control.groupCssClass = \"\";\r\n if (field.settings && field.settings.GroupStyling && field.settings.GroupStyling !== \"standard\") {\r\n control.groupCssClass = \"form-section__\" + field.settings.GroupStyling;\r\n }\r\n\r\n if (field.settings && field.settings.Collapsable) {\r\n control.collapsable = (field.settings.Collapsable || \"\").toLowerCase() === \"true\";\r\n control.initialCollapsableState = (field.settings.InitialCollapsableState || \"\").toLowerCase() === \"true\";\r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static dropdown(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n\r\n const settings = field.settings as IDropdownSettings;\r\n\r\n control.type = 'dropdown';\r\n control.placeholder = getResourceString('Form.Dropdown.ChooseOption');\r\n\r\n const { values, labels } = OptionsParser.parseOptionsStringOld(field.settings.Options);\r\n control.options = labels;\r\n control.valueoptions = values;\r\n\r\n const formConfigOverrides = FormControlBuilder.getFormFieldOverridesForField<{ defaultSelection: boolean }>(field, formFieldOverrides);\r\n if (formConfigOverrides.defaultSelection && values.length) {\r\n control.defaultValue = values[0];\r\n }\r\n\r\n control.options = labels;\r\n control.valueoptions = values;\r\n\r\n control.sortItems = settings.SortItems;\r\n\r\n control.PicklistMode = settings.PicklistMode || '';\r\n control.PicklistTemplate = settings.PicklistTemplate || null;\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n\r\n return control;\r\n }\r\n\r\n static dropdownMultiple(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n\r\n FormControlBuilder.dropdown(field, control, formFieldOverrides);\r\n\r\n const settings = field.settings as IDropdownMultipleSettings;\r\n\r\n control.type = 'dropdownmultiple';\r\n\r\n control.addMoreLabel = settings.AddMoreLabel;\r\n control.maxItems = typeof (settings.MaxItems) === 'string' ? parseInt(settings.MaxItems) : null;\r\n control.displayMode = settings.DisplayMode;\r\n control.sortItems = settings.SortItems === 'True';\r\n control.dataType = 'array';\r\n\r\n // Note: This should be the same separator as the backend expects, which currently is the comma\r\n control.separator = ',';\r\n\r\n return control;\r\n }\r\n\r\n static checkbox(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'checkbox';\r\n control.optionyes = field.properties?.fieldcaption ?? \"\";\r\n control.valueyes = 'true';\r\n control.checkBoxLabel = field.settings && field.settings.Text ? field.settings.Text : \"\";\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static checkboxMultiple(field: IField, formControl: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as ICheckboxMultipleSettings;\r\n let control = formControl as ICheckboxMultipleFieldDefinition;\r\n\r\n control.type = 'checkboxMultiple';\r\n control.sortItems = settings.SortItems === 'True';\r\n control.selectAll = settings.SelectAll === 'True';\r\n control.separator = settings.Separator;\r\n control.selectAllText = typeof settings.SelectAllText === 'string' ? settings.SelectAllText : settings.SelectAllText?.['#text'];\r\n control.dataType = 'array';\r\n\r\n const { values, labels } = OptionsParser.parseOptionsStringOld(settings.Options);\r\n control.options = labels;\r\n control.valueoptions = values;\r\n\r\n const formConfigOverrides = FormControlBuilder.getFormFieldOverridesForField<{ defaultSelection: boolean }>(field, formFieldOverrides);\r\n if (formConfigOverrides.defaultSelection && control.options.length) {\r\n control.defaultValue = control.options[0];\r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n var mergedFormControl = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n control = mergedFormControl as ICheckboxMultipleFieldDefinition;\r\n return control;\r\n }\r\n\r\n static switch(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'switch';\r\n control.optionyes = field.properties.fieldcaption;\r\n control.valueyes = 'true';\r\n control.checkBoxLabel = field.settings && field.settings.Text ? field.settings.Text : \"\";\r\n\r\n if (field[\"settings\"] && \r\n field[\"settings\"][\"ShowSwitchInDisabledState\"] !== undefined && \r\n field[\"settings\"][\"ShowSwitchInDisabledState\"].toLowerCase() == \"true\") {\r\n (control as any).showSwitchInDisabledState = true; \r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static button(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'button';\r\n control.icon = field.settings && field.settings.Icon;\r\n control.cssClass = \"btn-primary button-form-control__post\";\r\n control.buttonMode = \"post\";\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n } \r\n \r\n static radio(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IRadioSettings;\r\n\r\n control.type = 'radio';\r\n control.subtype = settings.controlname;\r\n\r\n const { values, labels, icons } = OptionsParser.parseOptionsStringOld(settings.Options);\r\n control.options = labels;\r\n control.valueoptions = values;\r\n control.iconoptions = icons;\r\n\r\n if (field.properties?.inputcontrolstyle) {\r\n control.inputcontrolstyle = field.properties.inputcontrolstyle;\r\n }\r\n\r\n if (settings.CorrectAnswer != null) {\r\n control.correctAnswer = settings.CorrectAnswer;\r\n } else {\r\n control.correctAnswer = false;\r\n }\r\n\r\n if (settings.ShowRadioButtonInDisabledState == 'True') {\r\n control.showRadioButtonInDisabledState = true; \r\n }\r\n\r\n // settings.RepeatDirection : horizontal vertical\r\n if (settings.RepeatDirection) {\r\n control.cssClass = 'radio-buttons-' + settings.RepeatDirection;\r\n }\r\n\r\n // RepeatDirection can be overriden through form config\r\n const radioFieldOverrides = FormControlBuilder.getFormFieldOverridesForField<{ repeatDirection: string }>(field, formFieldOverrides);\r\n if (radioFieldOverrides.repeatDirection) {\r\n control.cssClass = 'radio-buttons-' + formFieldOverrides[control.name].repeatDirection;\r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static readOnly(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'readOnly';\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static text(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'text';\r\n\r\n if (field[\"@columntype\"] === \"decimal\") {\r\n control.dataType = 'decimal';\r\n }\r\n \r\n if (field[\"properties\"] && field[\"properties\"][\"inputcontrolstyle\"]) {\r\n control.inputcontrolstyle = field[\"properties\"][\"inputcontrolstyle\"];\r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n\r\n const controlNameLowercase = (control.name || \"\").toLowerCase();\r\n\r\n if (controlNameLowercase === \"voornaam\" || controlNameLowercase === \"achternaam\") {\r\n control.maskCharsExpression = KenticoFormControlHelpers.getRegexForNameFields();\r\n }\r\n return control;\r\n }\r\n\r\n static qrcodescanner(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IQrCodeScannerSettings;\r\n let qrcontrol = control as IQrCodeScannerFieldDefinition;\r\n\r\n qrcontrol.type = 'qrcodescanner';\r\n qrcontrol.isUsedToScanJson = settings.IsUsedToScanJson === \"True\";\r\n\r\n if (field[\"properties\"] && field[\"properties\"][\"inputcontrolstyle\"]) {\r\n qrcontrol.inputcontrolstyle = field[\"properties\"][\"inputcontrolstyle\"];\r\n }\r\n\r\n qrcontrol = KenticoRulesCreator.assignKenticoRules(field, control);\r\n qrcontrol = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return qrcontrol;\r\n }\r\n\r\n static phonenumber(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'text';\r\n control.maxlength = 15;\r\n if (field[\"properties\"] && field[\"properties\"][\"inputcontrolstyle\"]) {\r\n control.inputcontrolstyle = field[\"properties\"][\"inputcontrolstyle\"];\r\n }\r\n control.maskCharsExpression = \"^[\\+0-9]+$\";\r\n control.hasNumericKeyboard = true;\r\n let kenticoValidationRules = [];\r\n try {\r\n const validationFunctionFromKenticoRule = KenticoRulesHelper.getValidationMethodFromRegex(\r\n 'Value.Matches(\"^(((\\\\\\\\+|00)31)|0)[1-9]\\\\\\\\d{8}$|^(\\\\\\\\+|00)(?!31)[1-9]\\\\\\\\d{6,14}$\")'\r\n );\r\n\r\n kenticoValidationRules.push({\r\n error: StringHelpers.formFieldPhoneNumberErrorMessage(control.label) || \r\n (field.properties && field.properties.validationerrormessage) || \"Error\",\r\n validationFunction: validationFunctionFromKenticoRule\r\n });\r\n } catch (err) {\r\n // skip validation rule\r\n // tslint:disable-next-line\r\n console.log(err);\r\n }\r\n\r\n if (kenticoValidationRules.length > 0) {\r\n control.validation.kenticoRules = {\r\n rules: kenticoValidationRules\r\n };\r\n } \r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static numericinputfield(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'text';\r\n \r\n // @columnsize is actually a string type, but the typescript intellisense does not allow < operators on strings so act like it is a number instead\r\n if ((field['@columnsize'] as unknown as number) < 10) {\r\n control.maxlength = field['@columnsize'];\r\n } else {\r\n control.maxlength = 10;\r\n }\r\n \r\n control.alwaysUppercase = true;\r\n if (field.settings.AllowDecimals === undefined || field.settings.AllowDecimals == \"True\") {\r\n control.maskCharsExpression = \"^[0-9]+,?[0-9]*$\";\r\n control.allowDecimals = true;\r\n } else {\r\n control.maskCharsExpression = \"^[0-9]+$\";\r\n control.allowDecimals = false;\r\n }\r\n \r\n control.isNumeric = true;\r\n control.hasNumericKeyboard = true;\r\n // ^\\d{0,2}(\\,\\d{1,2})?$ \r\n if (field.settings.Min && field.settings.Max &&\r\n !isNaN(parseInt(field.settings.Min)) && \r\n !isNaN(parseInt(field.settings.Max)) && \r\n parseInt(field.settings.Min) >= 0 && parseInt(field.settings.Max) > 0) {\r\n\r\n const minAsNumber = parseFloat(field.settings.Min);\r\n const maxAsNumber = parseFloat(field.settings.Max);\r\n const minHasDecimals = (minAsNumber - Math.floor(minAsNumber)) !== 0;\r\n const maxHasDecimals = (maxAsNumber - Math.floor(maxAsNumber)) !== 0;\r\n\r\n let minDecimalPlaces = 2;\r\n let maxDecimalPlaces = 2;\r\n \r\n if (!minHasDecimals) {\r\n minDecimalPlaces = 0; \r\n }\r\n \r\n if (!maxHasDecimals) {\r\n maxDecimalPlaces = 0; \r\n }\r\n \r\n let minmaxerror = StringHelpers.formFieldMinMaxErrorMessage(control.label, \r\n minAsNumber.toFixed(minDecimalPlaces).replace(\".\" , \",\"), \r\n maxAsNumber.toFixed(maxDecimalPlaces).replace(\".\" , \",\")\r\n );\r\n\r\n if (maxAsNumber === 99999) {\r\n minmaxerror = StringHelpers.formFieldMinMaxNoMaxErrorMessage(control.label, \r\n minAsNumber.toFixed(minDecimalPlaces).replace(\".\" , \",\")\r\n );\r\n }\r\n\r\n control.validation.dataType = {\r\n kind: 'number',\r\n error: StringHelpers.formFieldGenericErrorMessage(control.label),\r\n min: minAsNumber,\r\n max: maxAsNumber,\r\n allowDecimals: control.allowDecimals,\r\n minmaxerror: minmaxerror,\r\n };\r\n }\r\n\r\n let kenticoValidationRules = [];\r\n try {\r\n let validationFunctionFromKenticoRule = KenticoRulesHelper.getValidationMethodFromRegex(\r\n 'Value.Matches(\"^(0|[1-9](\\\\\\\\d{0,2})?)(\\\\\\\\,\\\\\\\\d{1,2})?$\")'\r\n );\r\n let error = `Het veld '${control.label}' is geen geldig decimaal getal`;\r\n\r\n const numericInputFormOverrides = FormControlBuilder.getFormFieldOverridesForField<{ onlyExactHalf: boolean }>(field, formFieldOverrides);\r\n if (numericInputFormOverrides.onlyExactHalf) {\r\n validationFunctionFromKenticoRule = KenticoRulesHelper.getValidationMethodFromRegex(\r\n 'Value.Matches(\"^\\\\\\\\d{1,2}(\\\\\\\\,[5|0][0]?)?$\")'\r\n );\r\n\r\n error = `Het veld '${control.label}' is geen geldig aantal uur afgerond op halve uren`;\r\n }\r\n\r\n kenticoValidationRules.push({\r\n error: error,\r\n validationFunction: validationFunctionFromKenticoRule\r\n });\r\n } catch (err) {\r\n // skip validation rule\r\n // tslint:disable-next-line\r\n console.log(err);\r\n }\r\n\r\n if (kenticoValidationRules.length > 0) {\r\n control.validation.kenticoRules = {\r\n rules: kenticoValidationRules\r\n };\r\n } \r\n \r\n if (field[\"properties\"] && field[\"properties\"][\"inputcontrolstyle\"]) {\r\n control.inputcontrolstyle = field[\"properties\"][\"inputcontrolstyle\"];\r\n } \r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static intialsinputfield(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'text';\r\n control.maxlength = 30;\r\n control.alwaysUppercase = true;\r\n control.maskCharsExpression = KenticoFormControlHelpers.getRegexForNameFields();\r\n if (!control.explanation || control.explanation == \"\") {\r\n control.explanation = getResourceString(\"Form.Initials.Hint\");\r\n control.hasPopover = true;\r\n }\r\n\r\n if (field[\"properties\"] && field[\"properties\"][\"inputcontrolstyle\"]) {\r\n control.inputcontrolstyle = field[\"properties\"][\"inputcontrolstyle\"];\r\n }\r\n\r\n let kenticoValidationRules = [];\r\n try {\r\n // De 4 dubbele / is nodig omdat anders de regulier expressie alleen de . bevat\r\n // door hoe de kentico validatie regels worden opgebouwd, wordt een string meerdere keren \"geunscaped\" (zie kenticoruleshelper)\r\n const regex = `Value.Matches(\"^([A-Z]+|([A-Z]+\\\\\\\\.?)+)$\")`;\r\n const validationFunctionFromKenticoRule = KenticoRulesHelper.getValidationMethodFromRegex(\r\n regex\r\n );\r\n kenticoValidationRules.push({\r\n // Form.Initials.Error\r\n error: StringHelpers.formFieldInititalsErrorMessage(control.label) || \"Error\",\r\n validationFunction: validationFunctionFromKenticoRule\r\n });\r\n } catch (err) {\r\n // skip validation rule\r\n // tslint:disable-next-line\r\n console.log(err);\r\n }\r\n\r\n if (kenticoValidationRules.length > 0) {\r\n control.validation.kenticoRules = {\r\n rules: kenticoValidationRules\r\n };\r\n } \r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static fileupload(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'fileupload';\r\n control.fileFormats = (field.settings[\"Allowed_Extensions\"] || \"\").split(\";\");\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static email(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'text';\r\n\r\n control.validation.email = {\r\n error: StringHelpers.formFieldGenericErrorMessage(control.label) + \" \" + getResourceString(\"Form.Email.InvalidError\"),\r\n };\r\n \r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static emailAddressList(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'emailaddresslist';\r\n control.emailSeparator = \";\";\r\n control.emailError = StringHelpers.formFieldGenericErrorMessage(control.label) + \" \" + getResourceString(\"Form.Email.InvalidError\");\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static iban(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'text';\r\n control.maskCharsExpression = \"^[0-9a-zA-Z]+$\";\r\n control.allowPrefixSpacesInInputOnly = true;\r\n\r\n control.validation.dataType = {\r\n kind: 'iban',\r\n error: StringHelpers.formFieldGenericErrorMessage(control.label) + \" \" + getResourceString(\"Form.Iban.InvalidError\"), \r\n };\r\n \r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static textarea(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as ITextAreaFieldSettings;\r\n\r\n control.type = 'textarea';\r\n\r\n if (settings && \r\n settings.ShowTextAreaInDisabledState !== undefined && \r\n settings.ShowTextAreaInDisabledState.toLowerCase() == \"true\") {\r\n control.showTextAreaInDisabledState = true; \r\n }\r\n\r\n if (settings.Size !== undefined){\r\n control.maxlength = parseInt(settings.Size);\r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static password(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'password';\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static datetime(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'datepicker';\r\n control.maxlength = 10;\r\n control.dataType = 'date';\r\n control.mask = '99-99-9999';\r\n control.validation.dataType = {\r\n kind: 'date',\r\n error: StringHelpers.formFieldGenericErrorMessage(control.label),\r\n minage: 0,\r\n minyear: 1900\r\n };\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static popupConfirm(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'custom';\r\n control.customType = 'popupConfirm';\r\n\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static popupOk(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'custom';\r\n control.customType = 'popupOk';\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static link(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'link';\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static grid(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'custom';\r\n control.customType = 'grid';\r\n\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n\r\n return control;\r\n }\r\n\r\n static list(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n\r\n const settings = field.settings as IListFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = 'list';\r\n\r\n try {\r\n const definition = JSON.parse(settings.ListDefinition) as {\r\n columns: { title: string, property: string, formatter?: string }[]\r\n };\r\n control.columns = definition.columns;\r\n } catch (error) {\r\n Logger.error(error);\r\n control.columns = [];\r\n }\r\n\r\n control.noDataText = settings.NoDataText;\r\n\r\n return control;\r\n }\r\n\r\n static contributieBlock(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IContributionBlockFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = \"contributie\";\r\n control.title = settings.Title || \"\";\r\n control.periodText = settings.PeriodText || \"\";\r\n control.beforeText = settings.BeforeText || \"\";\r\n control.afterText = settings.AfterText || \"\";\r\n control.toonLidWordenButton = settings.ShowMembershipButton === \"True\"; \r\n control.lidWordenButtonTitle = settings.MembershipButtonCaption || \"\";\r\n control.toonLidVoordelen = settings.ShowAdvantagesMembership == \"True\";\r\n control.lidVoordelenRichtText = settings.MembershipAdvantages || \"\";\r\n control.lidVoordelenTitle = settings.MembershipAdvantagesTitle || \"\";\r\n control.lidVoordelenBeforeText = settings.MembershipAdvantagesIntro || \"\";\r\n control.hintContributieTarief = settings.MembershipFeeHint || \"\";\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static tipBlock(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as ITipFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = 'tip';\r\n control.tip = settings.Tip || '';\r\n control.tipIcon = settings.Icon || '';\r\n control.tipLayout = settings.Layout || 'callout';\r\n \r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static alertBlock(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IAlertFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = 'alert';\r\n control.alert = settings.Alert || '';\r\n control.alertClass = settings.AlertType || '';\r\n \r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static horizontalRuler(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'custom';\r\n control.customType = \"horizontal-ruler\"; \r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static richTextEditor(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'richtexteditor';\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static richTextContent(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IRichTextFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = 'richtextcontent';\r\n control.content = settings.Content || '';\r\n let newField = {...field};\r\n if (newField.properties !== undefined && !newField.properties.visiblemacro) {\r\n if (settings.showOnSummaryStep) {\r\n MacroHelper.setVisibilityMacro(newField, 'Utils.IsSummaryView()');\r\n } else {\r\n MacroHelper.setVisibilityMacro(newField, '!Utils.IsSummaryView()');\r\n }\r\n }\r\n if (settings.PlaceInFormArea) {\r\n control.PlaceInFormArea = settings.PlaceInFormArea.toLowerCase() == \"true\";\r\n }\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(newField, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static customTemplate(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as ICustomTemplateFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = \"richtextcontent\";\r\n control.content = settings.CustomTemplate || \"\";\r\n let newField = {...field};\r\n\r\n control.templateType = settings.TemplateType || \"\"; \r\n control = KenticoRulesCreator.assignKenticoRules(newField, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n \r\n static ctaBlock(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as ICtaFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = \"ctablock\";\r\n\r\n control.ctaTitle = settings.CtaTitle || \"\";\r\n control.ctaDescription = settings.CtaDescription || \"\";\r\n control.ctaButtonLink = settings.CtaButtonLink || \"\";\r\n control.ctaButtonText = settings.CtaButtonText || \"\";\r\n\r\n let newField = {...field};\r\n if (newField.properties !== undefined && !newField.properties.visiblemacro) {\r\n if (!settings.showOnSummaryStep) {\r\n MacroHelper.setVisibilityMacro(newField, '!Utils.IsSummaryView()');\r\n }\r\n }\r\n control = KenticoRulesCreator.assignKenticoRules(newField, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static headingTwo(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'custom';\r\n control.customType = 'titleHeadingTwo';\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static chooseLocation(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n control.type = 'chooseLocation';\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static petitieTeller(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IPetitionFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = 'petitieTeller';\r\n \r\n control.maxPetitionCount = settings.MaxPetitionCount ? parseFloat(settings.MaxPetitionCount) : 50000;\r\n control.StartValuePetitionCount = settings.StartValuePetitionCount ? parseFloat(settings.StartValuePetitionCount) : 0;\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n return control;\r\n }\r\n\r\n static loginRedirect(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as ILoginFieldSettings;\r\n\r\n control.type = 'custom';\r\n control.customType = 'loginRedirect';\r\n\r\n let newField = {...field};\r\n MacroHelper.setVisibilityMacro(newField, '!Utils.IsAuthenticated()');\r\n\r\n control.linkText = settings?.LinkText || 'Log in';\r\n\r\n control = KenticoRulesCreator.assignKenticoRules(newField, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n\r\n return control;\r\n }\r\n\r\n static reCaptcha(field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) {\r\n const settings = field.settings as IReCaptchaFieldSettings;\r\n \r\n control.type = 'reCaptchaV2Invisible';\r\n\r\n control.siteKey = settings.SiteKey;\r\n \r\n control = KenticoRulesCreator.assignKenticoRules(field, control);\r\n control = KenticoRulesCreator.mergeFormDefinition(control, formFieldOverrides);\r\n\r\n return control;\r\n }\r\n\r\n /**\r\n * Gets the FormConfig overrides for the given field.\r\n * \r\n * @param field The field to get the overrides for.\r\n * @param formFieldOverrides The object containing all overrides.\r\n * \r\n * @returns An object containing the overrides for the given field. This object is never null or undefined.\r\n */\r\n static getFormFieldOverridesForField(field: IField, formFieldOverrides: IFieldOverrides): TOverrides {\r\n if (!formFieldOverrides) {\r\n return {} as TOverrides;\r\n }\r\n\r\n const overridesForField = formFieldOverrides[field['@column']];\r\n if (!overridesForField) {\r\n return {} as TOverrides;\r\n }\r\n\r\n return overridesForField as TOverrides;\r\n }\r\n}\r\n","import { IField, IFieldOverrides, IFormFieldDefinition } from '../../interfaces/Fields';\r\nimport { FormControlBuilder } from './form-control-builder';\r\n\r\nexport interface IKenticoFormControlToReactFormControlMapping {\r\n type: string[];\r\n builder: (field: IField, control: IFormFieldDefinition, formFieldOverrides: IFieldOverrides) => IFormFieldDefinition;\r\n}\r\n\r\nexport const kenticoFormControlToReactFormControlMap: IKenticoFormControlToReactFormControlMapping[] = [\r\n {\r\n type: ['category', 'FormFieldGroup'],\r\n builder: FormControlBuilder.category\r\n },\r\n {\r\n type: ['TextBoxControl', 'TextAreaControl'],\r\n builder: FormControlBuilder.text\r\n },\r\n {\r\n type: ['internationalphone'],\r\n builder: FormControlBuilder.phonenumber\r\n },\r\n {\r\n type: ['NumericInputField'],\r\n builder: FormControlBuilder.numericinputfield\r\n },\r\n {\r\n type: ['InitialsInputField'],\r\n builder: FormControlBuilder.intialsinputfield\r\n },\r\n {\r\n type: ['UploadControl'],\r\n builder: FormControlBuilder.fileupload\r\n },\r\n {\r\n type: ['emailinput', 'email'],\r\n builder: FormControlBuilder.email\r\n },\r\n {\r\n type: ['EmailAddressList'],\r\n builder: FormControlBuilder.emailAddressList\r\n },\r\n {\r\n type: ['TextAreaControl'],\r\n builder: FormControlBuilder.textarea\r\n },\r\n {\r\n type: ['QRCodeScanner'],\r\n builder: FormControlBuilder.qrcodescanner\r\n },\r\n {\r\n type: ['PasswordControl', 'Password'],\r\n builder: FormControlBuilder.password\r\n },\r\n {\r\n type: ['LabelControl', 'CalculatedField'],\r\n builder: FormControlBuilder.readOnly\r\n },\r\n {\r\n type: ['DropDownListControl', 'ListBoxControl'],\r\n builder: FormControlBuilder.dropdown\r\n },\r\n {\r\n type: ['DropDownListMultipleControl'],\r\n builder: FormControlBuilder.dropdownMultiple\r\n },\r\n {\r\n type: ['CheckBoxControl', 'ConsentAgreement'],\r\n builder: FormControlBuilder.checkbox\r\n },\r\n {\r\n type: ['CheckboxMultipleControl'],\r\n builder: FormControlBuilder.checkboxMultiple\r\n },\r\n {\r\n type: ['RadioButtonsControl', 'RadioButtonAsImageControl'],\r\n builder: FormControlBuilder.radio\r\n },\r\n {\r\n type: ['CalendarControl'],\r\n builder: FormControlBuilder.datetime\r\n },\r\n {\r\n type: ['ButtonControl'],\r\n builder: FormControlBuilder.button\r\n },\r\n {\r\n type: ['PopupConfirm'],\r\n builder: FormControlBuilder.popupConfirm\r\n },\r\n {\r\n type: ['PopupOK'],\r\n builder: FormControlBuilder.popupOk\r\n },\r\n {\r\n type: ['LinkField'],\r\n builder: FormControlBuilder.link\r\n },\r\n {\r\n type: ['GridControl'],\r\n builder: FormControlBuilder.grid\r\n },\r\n {\r\n type: ['ListControl'],\r\n builder: FormControlBuilder.list\r\n },\r\n {\r\n type: ['ContributieBlock'],\r\n builder: FormControlBuilder.contributieBlock\r\n },\r\n {\r\n type: ['TipBlock'],\r\n builder: FormControlBuilder.tipBlock\r\n },\r\n {\r\n type: ['AlertBlock'],\r\n builder: FormControlBuilder.alertBlock\r\n },\r\n {\r\n type: ['HtmlAreaControl'],\r\n builder: FormControlBuilder.richTextEditor\r\n },\r\n {\r\n type: ['RichTextContent'],\r\n builder: FormControlBuilder.richTextContent\r\n },\r\n {\r\n type: ['CustomTemplate'],\r\n builder: FormControlBuilder.customTemplate\r\n },\r\n {\r\n type: ['CTABlock'],\r\n builder: FormControlBuilder.ctaBlock\r\n },\r\n {\r\n type: ['Iban'],\r\n builder: FormControlBuilder.iban\r\n },\r\n {\r\n type: ['HeadingTwee', 'HeadingDrie'],\r\n builder: FormControlBuilder.headingTwo\r\n },\r\n {\r\n type: ['ChooseLocation'],\r\n builder: FormControlBuilder.chooseLocation\r\n },\r\n {\r\n type: ['PetitieTeller'],\r\n builder: FormControlBuilder.petitieTeller\r\n }\r\n ,\r\n {\r\n type: ['Switch'],\r\n builder: FormControlBuilder.switch\r\n }\r\n ,\r\n {\r\n type: ['HorizontalRuler'],\r\n builder: FormControlBuilder.horizontalRuler\r\n },\r\n {\r\n type: ['LoginRedirect'],\r\n builder: FormControlBuilder.loginRedirect,\r\n },\r\n {\r\n type: ['reCaptchaV2Invisible'],\r\n builder: FormControlBuilder.reCaptcha,\r\n },\r\n];\r\n","import { KenticoFormControlHelpers } from './helpers/KenticoFormControlHelpers';\r\nimport { KenticoRulesCreator } from './builders/KenticoRulesCreator';\r\nimport { FormStepHelpers } from './helpers/KenticoFormStepHelpers';\r\nimport { createControl } from './control/create-control';\r\nimport { kenticoFormControlToReactFormControlMap } from './builders/kentico-formcontrol-to-react-formcontrol-map';\r\nimport { PageTypeService } from '../services/PageTypeService';\r\nimport { getResourceString } from './resource-strings';\r\nimport { IField, IFormFieldDefinition } from '../interfaces/Fields';\r\n\r\nfunction isOfType(field: IField, types: string[]) {\r\n return types.indexOf(field.settings.controlname) >= 0;\r\n}\r\n\r\nexport function convertKenticoRawFormToJSONFormAsData(data: any, formConfig: any, formName : string) {\r\n\r\n if(!data || !data.form || !data.form.field){\r\n // tslint:disable-next-line\r\n console.log('Unable to convertKenticoRawFormToJSONFormAsData'); \r\n return;\r\n }\r\n let formStep: string = formName;\r\n let categoryIndex: number = 0;\r\n let categoryName : string = \"default\";\r\n let formFieldOverrides = formConfig.formOverrides || {};\r\n let formDefinitions = {};\r\n formDefinitions[formName] = [];\r\n\r\n if (formConfig.startForm == \"form\") {\r\n formConfig.startForm = formName;\r\n\r\n if (formConfig.formSteps && formConfig.formSteps.length == 0) {\r\n formConfig.formSteps = [formName];\r\n }\r\n } \r\n \r\n if (formConfig.pageSettings && formConfig.pageSettings.form) {\r\n formConfig.pageSettings[formName] = formConfig.pageSettings.form;\r\n }\r\n \r\n if (!formConfig.pageSettings) {\r\n formConfig.pageSettings = {};\r\n }\r\n\r\n formConfig.formSteps = (formConfig.formSteps || []).map((stepName) => {\r\n if (stepName === \"form\") {\r\n return formName;\r\n }\r\n return stepName;\r\n });\r\n \r\n if (!formConfig.formStepCaptions || formConfig.formStepCaptions.length == 0) {\r\n formConfig.formStepCaptions = [];\r\n }\r\n\r\n if (formConfig.autoInsertFormFieldGroup) {\r\n let hasFieldGroup = false;\r\n data.form.field.map((field: any, index: number) => {\r\n if (isOfType(field, ['category', 'FormFieldGroup'])) {\r\n hasFieldGroup = true; \r\n }\r\n });\r\n\r\n if (!hasFieldGroup) {\r\n data.form.field.unshift({ \r\n \"@allowempty\": \"true\",\r\n \"@column\": \"FormFieldGroupTitle\",\r\n \"@columnsize\": \"1\",\r\n \"@columntype\": \"text\",\r\n \"@guid\": \"ae6d012f-45e6-4a68-94ac-0856a42c5c2b\",\r\n \"@visible\": \"true\",\r\n \"properties\": {\r\n \"fieldcaption\": \" \"\r\n },\r\n \"settings\": {\r\n \"controlname\": \"FormFieldGroup\",\r\n \"GroupStyling\": \"standard\"\r\n }\r\n \r\n });\r\n }\r\n }\r\n \r\n let isVoornaamFieldFound: boolean = false;\r\n let isVoorlettersFieldFound : boolean = false;\r\n // Parse the form fields in the given Kentico Form dataset\r\n data.form.field.forEach((field: IField, index: number) => {\r\n // Only those fields visible to the user\r\n if (\r\n field['@system'] !== undefined ||\r\n field['@system'] ||\r\n field['@publicfield'] === 'false' ||\r\n (field.settings && field.settings.FormConfig ||\r\n isOfType(field, ['QuizUitkomst']) ||\r\n isOfType(field, ['FileUploadSettings']))\r\n ) {\r\n // No action\r\n } else {\r\n // Increase index in case of Category / Field Group\r\n if (isOfType(field, ['category', 'FormFieldGroup'])) {\r\n categoryIndex++;\r\n categoryName = field['@column']; \r\n }\r\n\r\n // FILL / HANDLE FORM STEPS\r\n if (isOfType(field, ['FormStep'])) {\r\n // Form step\r\n formStep = FormStepHelpers.addFormStep(\r\n field,\r\n index,\r\n data,\r\n formStep,\r\n formDefinitions,\r\n formConfig\r\n );\r\n\r\n isVoornaamFieldFound = false;\r\n isVoorlettersFieldFound = false;\r\n \r\n } else if (isOfType(field, ['ContributieTabel'])) { \r\n formDefinitions[formStep].push(\r\n ...KenticoFormControlHelpers.getContributieTabel(\r\n field,\r\n categoryName,\r\n formFieldOverrides\r\n )\r\n );\r\n \r\n } else if (isOfType(field, ['Adresblok'])) {\r\n // Adresblok\r\n // Add controls\r\n\r\n let readOnly = false;\r\n\r\n if (field.properties && field.properties.enabledmacro) {\r\n readOnly = field.properties.enabledmacro[\"#text\"] == \"{%false%}\";\r\n }\r\n\r\n let prefixVoorAdresblokVelden = \"\";\r\n\r\n if (field.settings && field.settings.PrefixVoorAdresblokVelden) {\r\n prefixVoorAdresblokVelden = field.settings.PrefixVoorAdresblokVelden;\r\n }\r\n formConfig.urlMappings = {...formConfig.urlMappings || {},\r\n [prefixVoorAdresblokVelden + \"countries\"] : \"/api/esb/getcountries\"\r\n };\r\n\r\n formConfig.urlMappingsRelatedData = {...formConfig.urlMappingsRelatedData || {},\r\n [prefixVoorAdresblokVelden + \"postcode\"] : \"/api/esb/getaddress\"\r\n };\r\n\r\n formConfig.parameterMappings = {...formConfig.parameterMappings || {}};\r\n formConfig.parameterMappings[prefixVoorAdresblokVelden + \"postcode\"] = [{\r\n \"field\": prefixVoorAdresblokVelden + \"Postcode\",\r\n \"mapsTo\": \"postcode\"\r\n },\r\n {\r\n \"field\": prefixVoorAdresblokVelden + \"Huisnummer\",\r\n \"mapsTo\": \"huisnummer\"\r\n }\r\n ];\r\n\r\n formConfig.outputMappings = {...formConfig.outputMappings || {}};\r\n formConfig.outputMappings[prefixVoorAdresblokVelden + \"postcode\"] = [{\r\n \"field\": \"streetField\",\r\n \"mapsTo\": prefixVoorAdresblokVelden + \"Straat\"\r\n },\r\n {\r\n \"field\": \"cityField\",\r\n \"mapsTo\": prefixVoorAdresblokVelden + \"Woonplaats\"\r\n }\r\n ]; \r\n \r\n const pageType = PageTypeService.getPageType();\r\n\r\n if (pageType === \"edit\" || pageType === \"dashboard\" && !readOnly) {\r\n formDefinitions[formStep].push(\r\n ...KenticoFormControlHelpers.getAddressControls(\r\n field,\r\n categoryName + prefixVoorAdresblokVelden,\r\n formFieldOverrides\r\n )\r\n );\r\n \r\n categoryName = categoryName + prefixVoorAdresblokVelden + \"-na-adresblok\";\r\n\r\n } else {\r\n formDefinitions[formStep].push(\r\n ...KenticoFormControlHelpers.getAddressControlsReadOnly(\r\n field,\r\n categoryName,\r\n formFieldOverrides\r\n )\r\n );\r\n }\r\n } else \r\n {\r\n // Simple fields and popups / custom controls\r\n // Create a control\r\n let control: IFormFieldDefinition = createControl(field, categoryName);\r\n\r\n if (isOfType(field, ['FormFieldGroup'])) {\r\n if ((index + 1) < data.form.field.length) {\r\n const nextField = data.form.field[index + 1];\r\n if (isOfType(nextField, ['Adresblok'])) {\r\n control.isAdresBlokField = true;\r\n }\r\n }\r\n }\r\n // Build control by getting all builders of specific type and executing them\r\n kenticoFormControlToReactFormControlMap.forEach(mapping => {\r\n if (isOfType(field, mapping.type)) {\r\n control = mapping.builder(field, control, formFieldOverrides);\r\n }\r\n });\r\n // Add to form step\r\n if (control !== undefined) {\r\n\r\n if (control.name === 'Voornaam') {\r\n isVoornaamFieldFound = true;\r\n if (!isVoorlettersFieldFound) {\r\n control.cssClass = (control.cssClass || '') + ' voornaam-first-fieldorder';\r\n } else {\r\n control.cssClass = (control.cssClass || '') + ' voorletter-first-fieldorder';\r\n }\r\n }\r\n if (control.name == 'Voorletters') {\r\n isVoorlettersFieldFound = true;\r\n }\r\n\r\n formDefinitions[formStep].push(control);\r\n }\r\n }\r\n }\r\n });\r\n\r\n for (let formStep in formDefinitions) {\r\n if (formDefinitions.hasOwnProperty(formStep) && formDefinitions[formStep]) {\r\n formDefinitions[formStep].map((control : any, index : number) => {\r\n if (control.name == \"Voornaam\") {\r\n\r\n if (index + 1 < formDefinitions[formStep].length) {\r\n if (formDefinitions[formStep][index + 1].name == \"Achternaam\") {\r\n if (index == 0 || (index > 0 && formDefinitions[formStep][index - 1].name !== \"Voorletters\")) {\r\n control.cssClass = (control.cssClass || \"\") + \" voornaam-achternaam--geen-voorletters\";\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n \r\n if (formConfig.formSteps.length > 0) {\r\n formConfig.startForm = formConfig.formSteps[0];\r\n }\r\n\r\n // Handle additional controls from configuration\r\n if (formConfig.additionalFormControls !== undefined) {\r\n formDefinitions[formStep].push(\r\n ...formConfig.additionalFormControls.map(formControl => {\r\n return ( Object).assign({}, formControl, {\r\n section: 'category-' + categoryName\r\n });\r\n })\r\n );\r\n }\r\n\r\n formConfig.formSteps.forEach((formStep) => {\r\n let buttonCaption = getResourceString(\"Form.Step.Next\");\r\n\r\n if (formConfig.buttons && formConfig.buttons[formStep]) {\r\n buttonCaption = formConfig.buttons[formStep];\r\n }\r\n \r\n if (formConfig.formSteps.length == 1) {\r\n if (!!formConfig.noAutoGenerateSummary) {\r\n buttonCaption = formConfig.submitButtonCaption || getResourceString(\"Form.Submit.Button\") || 'Aanpassen';\r\n }\r\n }\r\n let formStepName = formStep;\r\n\r\n formDefinitions[formStepName].push(\r\n KenticoRulesCreator.mergeFormDefinition(\r\n {\r\n name: 'submit',\r\n label: buttonCaption,\r\n type: 'submit'\r\n },\r\n formFieldOverrides\r\n )\r\n );\r\n }); \r\n\r\n return formDefinitions;\r\n}\r\n","import { ArrayHelper } from '@fnv-core/utils';\r\nimport { FormConfigHelpers } from '../../formcontrols/helpers/FormConfigHelpers';\r\nimport { KenticoFormProps } from '../KenticoFormContainer';\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\nimport { IFormConfig } from '../../interfaces/FormConfig';\r\nimport { IFieldControl } from '../../kentico/control/create-control';\r\n\r\n// Controls that should always be added to the summary step\r\nconst CONTROL_TYPES_ALWAYS_SUMMARY = ['reCaptchaV2Invisible'];\r\n\r\nexport class KenticoformHelpers {\r\n static generateSummaryStep(component: React.Component, formDefinitions: { [key: string]: IFieldControl[] }, formConfig: IFormConfig) {\r\n if (formDefinitions === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (component.props.pageType !== 'edit') {\r\n return formDefinitions;\r\n }\r\n\r\n if (formConfig.noAutoGenerateSummary) {\r\n return formDefinitions;\r\n }\r\n\r\n \r\n let summaryFields = [];\r\n let currentSection = '';\r\n let addControls = [];\r\n \r\n const moveControlsToSummary = formConfig.addFormControlsToSummary || [];\r\n \r\n let addControlNames = [];\r\n\r\n FormConfigHelpers.formStepsForEach(formConfig, formStep => {\r\n if (formStep != '_summary') {\r\n formDefinitions[formStep].forEach((field) => {\r\n if (ArrayHelper.contains(moveControlsToSummary, field.name) || ArrayHelper.contains(CONTROL_TYPES_ALWAYS_SUMMARY, field.type)) {\r\n field.section = 'summary_' + (field.section || '');\r\n addControls.push(field);\r\n addControlNames.push(field.name);\r\n }\r\n });\r\n if (addControlNames.length > 0) { \r\n formDefinitions[formStep] = formDefinitions[formStep].filter((field) => {\r\n // prevent duplicates\r\n return addControlNames.indexOf(field.name) === -1;\r\n });\r\n }\r\n }\r\n });\r\n \r\n let formCount = 0;\r\n FormConfigHelpers.formStepsForEach(formConfig, _ => {\r\n formCount++;\r\n });\r\n\r\n FormConfigHelpers.formStepsForEach(formConfig, formStep => {\r\n \r\n let editFormLinkAdded = false;\r\n\r\n formDefinitions[formStep].forEach((field) => {\r\n \r\n let handleField = true;\r\n if ((currentSection == 'summary__adres-blok' + (field.prefixVoorAdresblokVelden || '')) && field.isAdresBlokField) {\r\n handleField = false;\r\n } else \r\n if (currentSection == 'summary__adres-blok' + (field.prefixVoorAdresblokVelden || '') && !field.isAdresBlokField) {\r\n currentSection = ''; // reset section after last adresblok field was added and a new field is found\r\n }\r\n\r\n if ((currentSection == '' || currentSection != field.section) && handleField) {\r\n \r\n // add edit links on top of each section block only if a form consists of\r\n // multiple steps/forms\r\n editFormLinkAdded = (formCount <= 1);\r\n\r\n if (!!field.isAdresBlokField) {\r\n currentSection = 'summary__adres-blok' + (field.prefixVoorAdresblokVelden || ''); \r\n } else {\r\n currentSection = field.section;\r\n } \r\n\r\n let generatedSummaryFields = formDefinitions[formStep]\r\n .map(field => {\r\n \r\n let section = field.section;\r\n \r\n if (!!field.isAdresBlokField) {\r\n section = 'summary__adres-blok' + (field.prefixVoorAdresblokVelden || '');\r\n if (field.type === 'readOnly' && field.alwaysShowSummaryField === true) {\r\n return {...field, form: formStep, id: 'id_' + field.name + '_summaryField', section : section};\r\n }\r\n }\r\n\r\n if (field.type == 'title') {\r\n return { ...field, \r\n cssClass: field.cssClass + ' form__section-break', \r\n id: 'id_' + field.name + '_summaryField', \r\n section : section,\r\n label: field.summaryLabel || field.label,\r\n attachEditLinkInSummary: !!field.attachEditLinkInSummary\r\n };\r\n } else if (field.type === 'emailaddresslist') {\r\n return {...field, readOnly: true, \r\n isSummary: true, \r\n form: formStep, \r\n id: 'id_' + field.name + '_summaryField',\r\n validation: {}\r\n };\r\n } else if (['custom', 'submit', 'readOnly', 'title'].indexOf(field.type) === -1) {\r\n let hideEditLink = true;\r\n if (!editFormLinkAdded && section === currentSection) {\r\n hideEditLink = false;\r\n editFormLinkAdded = true;\r\n } \r\n return {\r\n name: field.name + '_summaryField',\r\n id: 'id_' + field.name + '_summaryField',\r\n type: 'custom',\r\n customType: 'summary',\r\n validation: {},\r\n form: formStep,\r\n section: section,\r\n orgField: field,\r\n hideEditLink: hideEditLink,\r\n alwaysShowSummaryField: true, \r\n visibilityCondition: field.visibilityCondition, \r\n attachEditLinkInSummary: !!field.attachEditLinkInSummary, \r\n data: [\r\n {\r\n label: field.summaryLabel || field.label,\r\n viaOption: field.datasource === undefined && \r\n field.options !== undefined && field.valueoptions !== undefined && field.type !== 'range',\r\n fields: [formStep + '.' + field.name]\r\n }\r\n ]\r\n };\r\n } else if (field.type === 'custom' && field.customType == 'grid') {\r\n return {...field, form: formStep, id: 'id_' + field.name + '_summaryField'};\r\n } else if (field.type === 'custom' && field.customType == 'titleHeadingTwo') {\r\n return {...field, form: formStep, id: 'id_' + field.name + '_summaryField'};\r\n } else if (field.type === 'custom' && field.customType == 'richtextcontent') {\r\n return {...field, form: formStep, id: 'id_' + field.name + '_summaryField'};\r\n }\r\n\r\n })\r\n .filter(field => {\r\n return (field !== undefined && currentSection !== undefined &&\r\n (field.section === currentSection));\r\n });\r\n\r\n summaryFields = [...summaryFields, ...generatedSummaryFields];\r\n }\r\n });\r\n });\r\n\r\n summaryFields.push({\r\n name: '_submit_summaryField',\r\n type: 'submit',\r\n validation: {},\r\n section: 'generated_summary',\r\n label: formConfig.summarySendButtonLabel || getResourceString('Form.Send.ButtonCaption') || 'Verzenden'\r\n });\r\n\r\n let summaryStep = '_summary';\r\n formDefinitions[summaryStep] = [...summaryFields, ...addControls];\r\n formConfig.formSteps.push(summaryStep);\r\n formConfig.pageSettings[summaryStep] = {\r\n title: formConfig.toSummaryStepButtonCaption || getResourceString('Form.ToSummaryStep.ButtonCaption') || 'Controle & verzenden',\r\n subtitle: ''\r\n };\r\n \r\n return formDefinitions;\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { PopupOk } from './PopupOk';\r\nimport { LogoutPopupService } from \"../services/LogoutPopupService\";\r\n\r\nexport interface LogoutPopupProps {\r\n title : string;\r\n description: string;\r\n}\r\n\r\nexport const LogoutPopup = (props : LogoutPopupProps) => {\r\n return {\r\n location.href = \"/mijn-fnv\"; \r\n }}>;\r\n};","import { FormContainer } from \"./FormContainer\";\r\nimport * as React from \"react\";\r\n\r\nimport { convertKenticoRawFormToJSONFormAsData } from \"../kentico/KenticoRawFormToJSONForm\";\r\nimport { FormConfigHelpers } from \"../formcontrols/helpers/FormConfigHelpers\";\r\nimport { KenticoformHelpers } from \"./helpers/KenticoFormHelpers\";\r\nimport { IFormConfig } from \"../interfaces/FormConfig\";\r\nimport { MijnFNVPageContext } from \"../presentational/pages/helpers/MijnFNVPageContext\";\r\nimport { connect } from \"react-redux\";\r\nimport { LogoutPopup } from '../presentational/LogoutPopup';\r\nimport { getAllUrlParams } from '../../jslibs/urlparams';\r\nimport { RefObject } from \"react\";\r\nimport WidgetForm from \"../forms/WidgetForm\";\r\n\r\nexport interface KenticoFormProps {\r\n sidebarRef: RefObject;\r\n stepsContainerRef: RefObject;\r\n formConfig: IFormConfig;\r\n editMode?: boolean;\r\n formDefinitions?: any;\r\n additionalCssClass: string;\r\n withLinkToFormPage?: boolean;\r\n formName: string;\r\n formType: string;\r\n formTitle?: string;\r\n pageType: string;\r\n nextLink?: string;\r\n linkText?: string;\r\n summaryIntro?: string;\r\n layoutType?: string;\r\n onSuccessPopupMessage?: string;\r\n onSuccessPopupMessageVisualCheck?: string;\r\n onSuccessPopupDescription?: string;\r\n initialData?: any;\r\n onSubmitSuccessButton1Link?: string;\r\n onSubmitSuccessButton1LinkText?: string;\r\n onSubmitSuccessButton2Link?: string;\r\n onSubmitSuccessButton2LinkText?: string;\r\n includeCurrentPageAsBackAndSubmitUrl? : boolean;\r\n backTitleForCurrentPageBackLink? : string;\r\n\r\n renderFormTriggers?: any;\r\n onOverrideGetFormValues?: any;\r\n\r\n errorMessageTitle?: string;\r\n errorMessageDescription?: string;\r\n errorMessagePhoneNumberInfo?: string;\r\n errorMessagePhoneNumber?: string;\r\n errorMessageEmailInfo?: string;\r\n errorMessageEmail?: string;\r\n errorMessageButtonText?: string;\r\n\r\n onFieldChange?: (formName: string, fieldName : string, value : any) => void;\r\n onPopupOkClick?: () => Promise;\r\n}\r\n\r\ninterface KenticoFormState {\r\n formDefinitions: any;\r\n formConfig: IFormConfig;\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n renderFormTriggers: state.renderFormTriggers\r\n };\r\n};\r\n\r\nclass KenticoFormContained extends React.Component<\r\n KenticoFormProps,\r\n KenticoFormState\r\n> {\r\n constructor(props: KenticoFormProps) {\r\n super(props);\r\n\r\n if (props.formDefinitions !== undefined) {\r\n let initalFormConfig = props.formConfig || {};\r\n \r\n let isEmptyFormConfig = true;\r\n for (var property in initalFormConfig) {\r\n if (initalFormConfig.hasOwnProperty(property)) {\r\n isEmptyFormConfig = false;\r\n }\r\n }\r\n\r\n if (isEmptyFormConfig) {\r\n initalFormConfig = FormConfigHelpers.getDefaultFormConfig(this.props.formName, this.props.formTitle);\r\n }\r\n\r\n let formConfig: IFormConfig = FormConfigHelpers.getMergedFormConfig(\r\n initalFormConfig as IFormConfig\r\n );\r\n \r\n let formDefinitions = convertKenticoRawFormToJSONFormAsData(\r\n props.formDefinitions,\r\n formConfig,\r\n props.formName\r\n );\r\n\r\n formDefinitions = KenticoformHelpers.generateSummaryStep(\r\n this,\r\n formDefinitions,\r\n formConfig\r\n );\r\n\r\n this.state = {\r\n formDefinitions: formDefinitions,\r\n formConfig: formConfig\r\n };\r\n } else {\r\n this.state = {\r\n formDefinitions: undefined,\r\n formConfig: undefined\r\n };\r\n }\r\n }\r\n \r\n render() {\r\n if (\r\n this.state.formDefinitions === undefined ||\r\n this.state.formConfig === undefined\r\n ) {\r\n return null;\r\n }\r\n\r\n const urlParams = getAllUrlParams();\r\n if (urlParams.state === \"auto-logout\") {\r\n return ;\r\n }\r\n\r\n let formConfig = this.state.formConfig;\r\n if (formConfig.renderFormTrigger) {\r\n if (\r\n !this.props.renderFormTriggers.triggers[formConfig.renderFormTrigger]\r\n ) {\r\n return <>;\r\n }\r\n }\r\n\r\n const formproperties = {\r\n editMode: this.props.editMode !== undefined ? this.props.editMode : true,\r\n layoutType : this.props.layoutType,\r\n formConfig: this.state.formConfig,\r\n formDefinitions: this.state.formDefinitions,\r\n additionalCssClass: this.props.additionalCssClass,\r\n withLinkToFormPage: this.props.withLinkToFormPage,\r\n formName: this.props.formName,\r\n formType: this.props.formType,\r\n pageType: this.props.pageType,\r\n nextLink: this.props.nextLink,\r\n linkText: this.props.linkText,\r\n includeCurrentPageAsBackAndSubmitUrl: this.props.includeCurrentPageAsBackAndSubmitUrl,\r\n backTitleForCurrentPageBackLink: this.props.backTitleForCurrentPageBackLink,\r\n summaryIntro: this.props.summaryIntro,\r\n onSuccessPopupMessage: this.props.onSuccessPopupMessage,\r\n onSuccessPopupMessageVisualCheck: this.props.onSuccessPopupMessageVisualCheck,\r\n onSuccessPopupDescription: this.props.onSuccessPopupDescription,\r\n initialData: this.props.initialData,\r\n onSubmitSuccessButton1Link: this.props.onSubmitSuccessButton1Link,\r\n onSubmitSuccessButton1LinkText: this.props.onSubmitSuccessButton1LinkText,\r\n onSubmitSuccessButton2Link: this.props.onSubmitSuccessButton2Link,\r\n onSubmitSuccessButton2LinkText: this.props.onSubmitSuccessButton2LinkText,\r\n onOverrideGetFormValues: this.props.onOverrideGetFormValues,\r\n errorMessageTitle : this.props.errorMessageTitle,\r\n errorMessageDescription : this.props.errorMessageDescription,\r\n errorMessagePhoneNumberInfo : this.props.errorMessagePhoneNumberInfo,\r\n errorMessagePhoneNumber : this.props.errorMessagePhoneNumber,\r\n errorMessageEmailInfo : this.props.errorMessageEmailInfo,\r\n errorMessageEmail : this.props.errorMessageEmail,\r\n errorMessageButtonText : this.props.errorMessageButtonText,\r\n onFieldChange: this.props.onFieldChange,\r\n onPopupOkClick: this.props.onPopupOkClick\r\n };\r\n\r\n let formContent;\r\n\r\n switch (formproperties.formType) {\r\n case 'FormV2':\r\n formContent = \r\n break;\r\n default:\r\n formContent = \r\n break;\r\n }\r\n\r\n return (\r\n <>\r\n {formContent}\r\n \r\n );\r\n }\r\n}\r\n\r\nKenticoFormContained.contextType = MijnFNVPageContext;\r\n\r\nexport const KenticoFormContainer = connect(mapStateToProps)(\r\n KenticoFormContained\r\n);\r\n","import { IField, IFormFieldDefinition } from \"../../interfaces/Fields\";\r\n\r\nexport interface IFieldControl extends IFormFieldDefinition {\r\n id: string;\r\n label: string;\r\n maxlength: number;\r\n description: string;\r\n explanation: string;\r\n section: string;\r\n visibilityCondition: any[];\r\n\r\n customType?: string;\r\n subtype?: string;\r\n optionyes?: string;\r\n valueyes?: string;\r\n\r\n options?: any[];\r\n valueoptions?: any[];\r\n iconoptions?: any[];\r\n \r\n cssClass?: string;\r\n placeholder?: string;\r\n datasource?: string;\r\n groupCssClass?: string;\r\n checkBoxLabel?: string;\r\n inputcontrolstyle?: string;\r\n icon?: string;\r\n buttonMode?: string;\r\n hasPopover?: boolean;\r\n defaultValue?: string;\r\n summaryLabel?: string;\r\n fieldCssClass?: string;\r\n\r\n isAdresBlokField?: boolean;\r\n prefixVoorAdresblokVelden?: string;\r\n alwaysShowSummaryField?: boolean;\r\n attachEditLinkInSummary?: string;\r\n}\r\n\r\nexport function createControl(field: IField, category: string): IFieldControl {\r\n return {\r\n name: field['@column'],\r\n label: field.properties?.fieldcaption || field['@column'],\r\n maxlength: field['@columnsize'] != null ? parseInt(field['@columnsize']) : null,\r\n description: field.properties?.fielddescription || '',\r\n explanation: field.properties?.explanationtext || '',\r\n validation: {},\r\n section: 'category-' + category,\r\n hasPopover: !!field.properties?.explanationtext,\r\n visibilityCondition: [],\r\n id: field['@guid'],\r\n defaultValue: field.properties?.defaultvalue || '',\r\n summaryLabel : field.settings?.SummaryLabel || '',\r\n fieldCssClass: field.properties?.fieldcssclass,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { TopTaak, MijnFnvTopTaken } from '../pages/interfaces/PageInterfaces';\r\nimport { PageHelpers } from '../pages/helpers/PageHelpers';\r\nimport { Link } from 'react-router-dom';\r\n\r\ninterface TopMenuColumn {\r\n label: string;\r\n list: TopTaak[];\r\n}\r\n\r\n// Topmenu\r\nexport const TopTaken = (properties: MijnFnvTopTaken) => {\r\n const TopTaken = properties.MijnFnvTopTaken;\r\n\r\n const renderColumns = PageHelpers.splitWidgetsToColumns(TopTaken);\r\n try {\r\n renderColumns[0].label = properties.TaskIntroText;\r\n } catch (e) {}\r\n\r\n // Return a block with two columns of items\r\n return
{TopMenuColumns(renderColumns)}
;\r\n};\r\n\r\n// Topmenu has two columns. This renders each column\r\nconst TopMenuColumns = (renderColumns: TopMenuColumn[]) =>\r\n renderColumns.map((column , index) => (\r\n
\r\n
\r\n
\r\n
    {TopMenuItemLinks(column.list)}
\r\n
\r\n
\r\n
\r\n ));\r\n\r\n// Topmenu has several item links. This renders each link\r\nconst TopMenuItemLinks = (items: TopTaak[]) =>\r\n items.map((value , index) => (\r\n
  • \r\n {value.ToptaakLink.indexOf(\"http\") == 0 ?\r\n \r\n {value.ToptaakTitle}\r\n \r\n \r\n : \r\n \r\n {value.ToptaakTitle}\r\n \r\n \r\n }\r\n
  • \r\n ));\r\n","import * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { TopTaken } from './TopTaken';\r\nimport { MijnFnvTopTaken } from '../pages/interfaces/PageInterfaces';\r\n\r\nexport const MijnFNVHero = (props: MijnFnvTopTaken) => {\r\n if (props.MijnFnvTopTaken.length == 0) {\r\n return <>;\r\n }\r\n \r\n return
    \r\n
    \r\n {props.TaskIntroText}\r\n {TopTaken(props)}\r\n
    \r\n
    ;\r\n };\r\n","import * as React from 'react';\r\nimport { MijnFNVHero } from '../widgets/MijnFNVHero';\r\nimport { PageRenderHelpers } from './helpers/PageRenderHelpers';\r\nimport { PageHelpers } from './helpers/PageHelpers';\r\nimport { BaseRelatedViewModel, PageProps } from './interfaces/PageInterfaces';\r\nimport { MijnFNVMenu } from '../widgets/MijnFNVMenu';\r\nimport { AlertContainer } from '../../containers/AlertContainer';\r\nimport { MenuHelpers } from './helpers/MenuHelpers';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport { AnimationService, ANIMATION_DASHBOARD_LOADING_CONTEXT } from '../../services/AnimationService';\r\nimport { Popup } from './components/popup';\r\nimport { MIJNFNV_POPUPS_URL } from '../../constants/Constants';\r\n\r\nexport class DashboardPage extends React.Component {\r\n componentDidMount() {\r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n renderPopup() {\r\n const popupModel = this.props.kenticoPage.MijnFnvOverzicht.PopupModel;\r\n if (!popupModel) {\r\n return null;\r\n }\r\n\r\n const popupModelId = popupModel.DocumentID;\r\n\r\n const closePopUp = async () => {\r\n await fetch(`${MIJNFNV_POPUPS_URL}?documentid=${popupModelId}`, {\r\n method: 'post'\r\n });\r\n };\r\n \r\n return ;\r\n }\r\n\r\n render() {\r\n\r\n MenuHelpers.showBreadCrumbs();\r\n MenuHelpers.showMenu();\r\n\r\n this.handleAnimations();\r\n\r\n return \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n {MijnFNVMenu(PageHelpers.getSideMenu(this.props.kenticoPage), \r\n this.context.pathname)}\r\n
    \r\n
    \r\n {this.props.kenticoPage.MijnFnvOverzicht.ShowUserRoleLabel && \r\n

    {this.props.kenticoPage.MijnFnvOverzicht.UserRoleLabel}

    }\r\n {MijnFNVHero(this.props.kenticoPage.MijnFnvTopTaken)}\r\n {// Get columns with all widgets form the page definition\r\n //(right now we simply look at how many widgets and we distribute them over 2 columns)\r\n getItemColumns(PageHelpers.getWidgets(this.props.kenticoPage))}\r\n
    \r\n
    \r\n
    \r\n {this.renderPopup()}\r\n ;\r\n }\r\n}\r\n\r\nDashboardPage.contextType = MijnFNVPageContext;\r\n\r\nfunction getItemColumns(widgets: BaseRelatedViewModel[]) {\r\n const columns = PageHelpers.splitWidgetsToColumns(widgets) || [];\r\n\r\n return (\r\n
    \r\n {columns.map((widgetColumn, index) => (\r\n
    \r\n {widgetColumn.list.map((widgetDefinition, index) =>\r\n PageRenderHelpers.renderWidget(\r\n widgetDefinition,\r\n 'widget',\r\n index,\r\n 'dashboard'\r\n )\r\n )}\r\n
    \r\n ))}\r\n
    \r\n );\r\n}\r\n","import { ProcesName } from '../../../containers/helpers/ProcesHandlerHelpers';\r\nimport { IFormConfig, ProcesHandler } from '../../../interfaces/FormConfig';\r\nimport { FormProps, FormState } from '../../../containers/FormContainer';\r\n\r\nexport class LidZoekenHelpers {\r\n static getProcesses(formConfig: IFormConfig): ProcesHandler[] {\r\n if (formConfig.procesHandlers !== 'lidzoeken') {\r\n return [];\r\n }\r\n return [\r\n {\r\n // PUT, before\r\n procesName: ProcesName.Put_preprocess,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n onSuccess,\r\n onError\r\n ) => {\r\n component.props.startLidZoeken();\r\n component.props.clearLidZoeken();\r\n\r\n // Specific Stakingsregistratie functionality\r\n if (component.props.formName == \"MijnFNV_Stakingsregistratie_LidZoeken\") {\r\n const zoekenForm = component.props.forms[\"MijnFNV_Stakingsregistratie_LidZoeken\"];\r\n if (zoekenForm && zoekenForm.ZoekenOp === \"qrcode\") {\r\n if (!zoekenForm[\"QRCode\"]) {\r\n return;\r\n } \r\n data.ZoekenOp = \"lidnummer\";\r\n data.Lidnummer = zoekenForm[\"QRCode\"];\r\n }\r\n }\r\n\r\n // When a 'load more' button exists, copy the payload from the `search`form to the load more form payload. This removes the need to make identical (redundant) forms.\r\n if (component.props.formName.includes(\"LaadMeer\")) {\r\n \r\n const zoekenForm = LidZoekenHelpers.getPossibleSearchForms(component);\r\n let property: keyof typeof zoekenForm; // Type is 'foo' | 'bar'\r\n\r\n for (property in zoekenForm) {\r\n data[`${property}`] = zoekenForm[property];\r\n }\r\n }\r\n\r\n onSuccess(data);\r\n }\r\n }, \r\n {\r\n // PUT when done\r\n procesName: ProcesName.Put_postprocess_Success,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n onSuccess,\r\n onError\r\n ) => {\r\n const zoekenForm = LidZoekenHelpers.getPossibleSearchForms(component);\r\n\r\n const additionalData = {}; \r\n if (component.props.formConfig && component.props.formConfig.passthroughFieldsToGlobalState) {\r\n component.props.formConfig.passthroughFieldsToGlobalState.map((passThroughFieldName) => {\r\n if (zoekenForm[passThroughFieldName]) {\r\n additionalData[passThroughFieldName] = zoekenForm[passThroughFieldName];\r\n }\r\n });\r\n }\r\n\r\n /*\r\n if (zoekenForm && zoekenForm.ZoekenOp === \"qrcode\") {\r\n if (!zoekenForm[\"QRCode\"]) {\r\n return;\r\n } \r\n zoekenForm.Lidnummer = zoekenForm[\"QRCode\"];\r\n zoekenForm.ZoekenOp = \"lidnummer\";\r\n }\r\n */\r\n\r\n if (zoekenForm && zoekenForm.Lidnummer && zoekenForm.Postcode) {\r\n const lidnummer = zoekenForm.Lidnummer;\r\n const postcode = zoekenForm.Postcode;\r\n const huisnummer = zoekenForm.Huisnummer;\r\n const geboortedatum = zoekenForm.Geboortedatum;\r\n const zoekenOp = zoekenForm.ZoekenOp;\r\n \r\n component.props.storeLidZoeken(data, lidnummer, postcode, huisnummer, geboortedatum, zoekenOp, \"\", component.props.formName, additionalData);\r\n \r\n } else {\r\n let zoekenOp = \"\";\r\n if (zoekenForm.ZoekenOp && zoekenForm.ZoekenOp.value) {\r\n zoekenOp = zoekenForm.ZoekenOp.value || \"\";\r\n } else\r\n if (zoekenForm.ZoekenOp) {\r\n zoekenOp = zoekenForm.ZoekenOp || \"\";\r\n }\r\n component.props.storeLidZoeken(data, \"\", \"\", \"\", \"\", zoekenOp, zoekenOp !== \"\" && zoekenForm[zoekenOp], component.props.formName, additionalData); \r\n }\r\n onSuccess({\r\n isPreventDefault: true\r\n });\r\n component.setState({\r\n isSubmitting: false\r\n }); \r\n }\r\n }, \r\n {\r\n // PUT when done\r\n procesName: ProcesName.Put_postprocess_Fail,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n resolve,\r\n reject\r\n ) => {\r\n component.props.stopLidZoeken();\r\n component.props.clearLidZoeken();\r\n \r\n //when responseText is set, we can assume a custom error is preferred.\r\n if(data.responseText !== undefined && data.responseText !== ''){\r\n resolve({isError: true, ErrorText: data.responseText});\r\n }\r\n else{\r\n component.setState({\r\n isShowPostDataError: true, \r\n isSubmitting: false \r\n });\r\n resolve({});\r\n } \r\n \r\n }\r\n }\r\n ];\r\n }\r\n \r\n private static getPossibleSearchForms(component: React.Component): any {\r\n const zoekenForm = component.props.forms[\"MijnFNV_LidZoeken\"] ||\r\n component.props.forms[\"MijnFNV_Stakingsregistratie_LidZoeken\"] ||\r\n component.props.forms[\"MijnFNV_LeadZoeken\"] ||\r\n component.props.forms[\"MijnFNV_PersoonZoeken\"];\r\n return zoekenForm;\r\n }\r\n}\r\n","import { ProcesName } from '../../../containers/helpers/ProcesHandlerHelpers';\r\nimport { IFormConfig, ProcesHandler } from '../../../interfaces/FormConfig';\r\nimport { FormProps, FormState } from '../../../containers/FormContainer';\r\n\r\nexport class LidZoekenResultaatHelpers {\r\n static getProcesses(formConfig: IFormConfig): ProcesHandler[] {\r\n if (formConfig.procesHandlers !== 'lidzoekenresultaat') {\r\n return [];\r\n }\r\n return [\r\n {\r\n // PUT, before\r\n procesName: ProcesName.Put_preprocess,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n onSuccess,\r\n onError\r\n ) => {\r\n const index = (component.props.formConfig as any).index;\r\n if (component.props.formConfig && component.props.formConfig.receiveFieldsViaGlobalState) {\r\n component.props.formConfig.receiveFieldsViaGlobalState.map((passThroughFieldName) => {\r\n if (component.props.lidZoeken.additionalFormData[passThroughFieldName]) {\r\n if (component.props.lidZoeken.additionalFormData[passThroughFieldName].value) {\r\n data[passThroughFieldName] = component.props.lidZoeken.additionalFormData[passThroughFieldName].value;\r\n } else {\r\n data[passThroughFieldName] = component.props.lidZoeken.additionalFormData[passThroughFieldName];\r\n }\r\n }\r\n });\r\n }\r\n // Always call back to enable next step in process\r\n onSuccess(data);\r\n }\r\n }, \r\n {\r\n // PUT when done\r\n procesName: ProcesName.Put_postprocess_Success,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n onSuccess,\r\n onError\r\n ) => {\r\n \r\n component.setState({\r\n isSubmitting: false,\r\n isShowPostOk: true,\r\n showThanksMessageAsInPageContent: false\r\n }, () => {\r\n //component.props.clearLidZoeken();\r\n onSuccess({\r\n isPreventDefault: true\r\n });\r\n }); \r\n }\r\n }, \r\n {\r\n // PUT when done\r\n procesName: ProcesName.Put_postprocess_Fail,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n resolve,\r\n reject\r\n ) => {\r\n if (data.responseText !== undefined) {\r\n try {\r\n let error = JSON.parse(data.responseText);\r\n component.setState({\r\n isShowPostDataError: true, \r\n isSubmitting: false,\r\n isUserError: !!error.IsUserError,\r\n popupMessageOnFailure : error.ErrorText || \"\"\r\n });\r\n resolve({}); \r\n } catch {\r\n // skip\r\n }\r\n }\r\n component.setState({\r\n isShowPostDataError: true, \r\n isSubmitting: false \r\n });\r\n resolve({}); \r\n }\r\n }, \r\n {\r\n procesName: ProcesName.PopupOnOk,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n onSuccess,\r\n reject\r\n ) => {\r\n if (component.props.formConfig.linkedForm && component.props.formConfig.clearFields) {\r\n if (component.props.forms[component.props.formConfig.linkedForm]) {\r\n let form = component.props.forms[component.props.formConfig.linkedForm];\r\n component.props.formConfig.clearFields.map(fieldName => {\r\n form[fieldName] = \"\";\r\n });\r\n component.props.setFormValues(component.props.formConfig.linkedForm, {...form}); \r\n }\r\n }\r\n \r\n if (component.props.formConfig.scrollTo) {\r\n const scrollIntoViewElement = document.getElementById(component.props.formConfig.scrollTo);\r\n if (scrollIntoViewElement) {\r\n scrollIntoViewElement.scrollIntoView();\r\n }\r\n }\r\n \r\n component.props.clearLidZoeken();\r\n onSuccess({}); \r\n }\r\n },\r\n {\r\n procesName: ProcesName.CancelForm,\r\n execute: (\r\n component: React.Component,\r\n data: any,\r\n onSuccess,\r\n reject\r\n ) => {\r\n if (component.props.formConfig.linkedForm && component.props.formConfig.clearFields) {\r\n if (component.props.forms[component.props.formConfig.linkedForm]) {\r\n let form = component.props.forms[component.props.formConfig.linkedForm];\r\n component.props.formConfig.clearFields.map(fieldName => {\r\n form[fieldName] = \"\";\r\n });\r\n component.props.setFormValues(component.props.formConfig.linkedForm, {...form}); \r\n }\r\n }\r\n \r\n if (component.props.formConfig.scrollTo) {\r\n const scrollIntoViewElement = document.getElementById(component.props.formConfig.scrollTo);\r\n if (scrollIntoViewElement) {\r\n scrollIntoViewElement.scrollIntoView();\r\n }\r\n }\r\n \r\n component.props.clearLidZoeken();\r\n onSuccess({}); \r\n }\r\n }\r\n ];\r\n }\r\n}","export interface UserSettings {\r\n onthoudEmail? : boolean;\r\n Username? : string;\r\n}\r\n\r\nexport class UserSettingsHelpers {\r\n static getUserSettings(): UserSettings {\r\n return JSON.parse(window.localStorage.getItem('UserSettings') || '{}');\r\n }\r\n static browserStoreUserSettings(settings: UserSettings) {\r\n window.localStorage.setItem('UserSettings', JSON.stringify(settings));\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { UserService } from \"@fnv-core/authentication\";\r\nimport { MijnFNVMenu } from '../widgets/MijnFNVMenu';\r\nimport { PageProps } from './interfaces/PageInterfaces';\r\nimport { CreateFormViewModel, createFormWidget, MenuHelpers, PageHelpers, PageRenderHelpers } from './helpers';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport { AnimationService, ANIMATION_DASHBOARD_LOADING_CONTEXT, FormService } from \"../../services\";\r\nimport { BackLink, MemberState, PageTitle } from './components';\r\n\r\nexport class ViewDataPage extends React.Component {\r\n \r\n componentDidMount() { \r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n render() {\r\n const mijnFnvViewPagina = this.props.kenticoPage.MijnFnvViewPagina;\r\n const { \r\n HasActionsAndHeadingForm, PageWidth, ShowSideBar, BackToPageLinkUrl, BackToPageLinkText,\r\n BackLinkIsExternal , BackLinkExternalUrl \r\n } = mijnFnvViewPagina;\r\n\r\n MenuHelpers.showBreadCrumbs();\r\n\r\n if (mijnFnvViewPagina.MenuType === \"eenvoudig\") {\r\n MenuHelpers.hideMenu();\r\n } else {\r\n MenuHelpers.showMenu();\r\n }\r\n\r\n PageHelpers.setBreadcrumbsPageTitle(mijnFnvViewPagina.Titel);\r\n PageHelpers.highlightMainNavigationItem();\r\n\r\n const pageWidthCssClass = PageRenderHelpers.getCssClassForPageWidthViewPageType(\r\n PageWidth,\r\n ShowSideBar,\r\n HasActionsAndHeadingForm\r\n );\r\n\r\n let memberDetails: { memberName?: string, isMember?: boolean } = null;\r\n if (\r\n this.context &&\r\n this.context.pathParam &&\r\n this.context.pathParam !== UserService.getUserId()\r\n ) {\r\n memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n }\r\n\r\n let DetailFormViewModel;\r\n if (HasActionsAndHeadingForm) {\r\n DetailFormViewModel = CreateFormViewModel(\r\n mijnFnvViewPagina.DetailFormDefinition,\r\n mijnFnvViewPagina.FormName, \r\n mijnFnvViewPagina.FormType,\r\n \"\",\r\n mijnFnvViewPagina.Titel);\r\n }\r\n\r\n // If there is a sidebar, heading should be

    instead of

    \r\n const headingIsMain = mijnFnvViewPagina.ShowSideBar !== true;\r\n\r\n this.handleAnimations();\r\n \r\n return \r\n
    \r\n {!HasActionsAndHeadingForm &&
    }\r\n {ShowSideBar ?
    \r\n {MijnFNVMenu(PageHelpers.getSideMenu(this.props.kenticoPage), this.context.pathname)}\r\n
    : null}\r\n {HasActionsAndHeadingForm ?
    \r\n \r\n {createFormWidget(\r\n DetailFormViewModel,\r\n \"widget mijn-fnv__widget mijn-fnv__view-action-form\",\r\n 0,\r\n 'view'\r\n )}\r\n
    : null}\r\n
    \r\n
    \r\n : null}\r\n subtitleModifierClass='member-name'\r\n intro={mijnFnvViewPagina.Subtitle}\r\n >\r\n \r\n\r\n {// Get all widgets to be shown in page\r\n PageHelpers.getWidgets(this.props.kenticoPage).map((widgetDefinition, index) => {\r\n const definition = {\r\n ...widgetDefinition,\r\n editMode: false,\r\n };\r\n // Get the proper widget based on type, set to edit mode\r\n return PageRenderHelpers.renderWidget(\r\n definition,\r\n '',\r\n index,\r\n 'view'\r\n );\r\n })}\r\n
    \r\n
    \r\n {!HasActionsAndHeadingForm &&
    }\r\n
    \r\n ;\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}","import * as React from \"react\";\r\nimport { Redirect } from 'react-router-dom';\r\n\r\nimport { UserService } from \"@fnv-core/authentication\";\r\nimport { Slug } from '@fnv-core/utils';\r\nimport { PageHelpers } from \"./helpers/PageHelpers\";\r\nimport { PageProps } from \"./interfaces/PageInterfaces\";\r\nimport { MenuHelpers } from \"./helpers/MenuHelpers\";\r\nimport { MijnFNVPageContext } from \"./helpers/MijnFNVPageContext\";\r\nimport { FormService } from \"../../services/FormService\";\r\nimport {\r\n AnimationService,\r\n ANIMATION_DASHBOARD_LOADING_CONTEXT,\r\n} from \"../../services/AnimationService\";\r\nimport { WebshopProductCard } from \"./components/webshop-product-card\";\r\nimport { WebshopShoppingCart } from \"./components/webshop-shopping-cart\";\r\nimport fetch from 'cross-fetch';\r\n\r\nexport interface WebshopOverviewPageState {\r\n shoppingCart : any[];\r\n totalCount : number;\r\n redirectToUrl: string;\r\n}\r\n\r\nexport class WebshopOverviewPage extends React.Component {\r\n\r\n state = {\r\n shoppingCart : [],\r\n totalCount : 0,\r\n redirectToUrl : \"\"\r\n };\r\n \r\n componentDidMount() {\r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n\r\n this.getProducts();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n onClickAddProduct = (productSKU : string) => {\r\n fetch(`/api/shoppingbasket/add?id=${parseInt(productSKU)}&amount=1`, {\r\n method: 'post' \r\n }).then(response => { \r\n const WebshopOverviewPagina = this.props.kenticoPage.MijnFnvWebshopOverviewPagina;\r\n if (WebshopOverviewPagina) {\r\n this.setState({redirectToUrl: WebshopOverviewPagina.WebshopCartUrl});\r\n }\r\n });\r\n }\r\n\r\n onGotoProductDetailPage = (urlPath) => {\r\n this.setState({redirectToUrl: urlPath});\r\n }\r\n\r\n\r\n getProducts = () => {\r\n fetch(\"/api/shoppingbasket/get\", {\r\n method: 'get' \r\n }).then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(shoppingCart => {\r\n // tslint:disable-next-line\r\n let totalCount = 0;\r\n shoppingCart.map((cartItem, index) => {\r\n totalCount += cartItem.quantity;\r\n });\r\n\r\n this.setState({shoppingCart: shoppingCart, totalCount : totalCount}); \r\n });\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToUrl !== undefined && this.state.redirectToUrl !== '') {\r\n return ;\r\n }\r\n\r\n const WebshopOverviewPagina = this.props.kenticoPage\r\n .MijnFnvWebshopOverviewPagina;\r\n if (!WebshopOverviewPagina) {\r\n return <>;\r\n }\r\n\r\n MenuHelpers.showBreadCrumbs();\r\n\r\n if (WebshopOverviewPagina.MenuType === \"eenvoudig\") {\r\n MenuHelpers.hideMenu();\r\n } else {\r\n MenuHelpers.showMenu();\r\n }\r\n\r\n PageHelpers.setBreadcrumbsPageTitle(WebshopOverviewPagina.Titel);\r\n\r\n let nameMemberInLidZoekenSubfunction = \"\";\r\n let memberState = <>;\r\n if (\r\n this.context &&\r\n this.context.pathParam &&\r\n this.context.pathParam !== UserService.getUserId()\r\n ) {\r\n const memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n if (memberDetails && memberDetails.memberName) {\r\n nameMemberInLidZoekenSubfunction = memberDetails.memberName;\r\n\r\n memberState = (\r\n \r\n );\r\n }\r\n }\r\n\r\n const memberDetails = (\r\n <>\r\n {nameMemberInLidZoekenSubfunction &&\r\n nameMemberInLidZoekenSubfunction !== \"\" && (\r\n

    \r\n {memberState}\r\n {nameMemberInLidZoekenSubfunction}\r\n

    \r\n )}\r\n \r\n );\r\n\r\n this.handleAnimations();\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n {WebshopOverviewPagina.Titel}\r\n

    \r\n {memberDetails}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {WebshopOverviewPagina.products && WebshopOverviewPagina.products.map((product, index) => { \r\n return ;\r\n })}\r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}","import * as React from \"react\";\r\nimport { Redirect } from 'react-router-dom';\r\n\r\nimport { UserService } from \"@fnv-core/authentication\";\r\nimport { Slug } from '@fnv-core/utils';\r\nimport { PageHelpers } from \"./helpers/PageHelpers\";\r\nimport { PageRenderHelpers } from \"./helpers/PageRenderHelpers\";\r\nimport { PageProps } from \"./interfaces/PageInterfaces\";\r\nimport { MenuHelpers } from \"./helpers/MenuHelpers\";\r\nimport { MijnFNVPageContext } from \"./helpers/MijnFNVPageContext\";\r\nimport { FormService } from \"../../services/FormService\";\r\nimport {\r\n AnimationService,\r\n ANIMATION_DASHBOARD_LOADING_CONTEXT,\r\n} from \"../../services/AnimationService\";\r\nimport fetch from 'cross-fetch';\r\nimport { InputStepperText } from '../../input-components/input-stepper-text';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport { PopupError } from '../../presentational/PopupError';\r\n\r\nexport interface WebshopOverviewPageState {\r\n shoppingCart : any[];\r\n totalCount : number;\r\n redirectToUrl: string;\r\n shoppingCartIsValidated: boolean;\r\n shoppingCartIsValid : boolean;\r\n shoppingCartErrors : any;\r\n isShowPostDataError : boolean;\r\n errorText : string;\r\n}\r\n\r\nexport class WebshopShoppingCartPage extends React.Component {\r\n\r\n state = {\r\n shoppingCart : [],\r\n totalCount : 0,\r\n redirectToUrl : \"\",\r\n shoppingCartIsValidated : false,\r\n shoppingCartIsValid: false,\r\n shoppingCartErrors : {},\r\n isShowPostDataError : false,\r\n errorText : \"\"\r\n };\r\n \r\n componentDidMount() {\r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n\r\n this.getProducts();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n onClickAddProduct = (productSKU : string) => {\r\n \r\n fetch(`/api/shoppingbasket/add?id=${parseInt(productSKU)}&amount=1`, {\r\n method: 'post' \r\n }).then(response => {\r\n this.getProducts();\r\n });\r\n }\r\n\r\n\r\n validateShoppingCart = () => {\r\n fetch(\"/api/shoppingbasket/validatecart\", {\r\n method: 'get' \r\n }).then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(result => {\r\n // tslint:disable-next-line \r\n let errors: any = {}; \r\n result.map((error : any) => {\r\n errors[error.productId] = error;\r\n });\r\n this.setState({shoppingCartIsValid: result && result.length == 0, shoppingCartIsValidated : true, shoppingCartErrors: errors}); \r\n });\r\n }\r\n\r\n getProducts = () => {\r\n fetch(\"/api/shoppingbasket/get\", {\r\n method: 'get' \r\n }).then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(shoppingCart => {\r\n // tslint:disable-next-line\r\n let totalCount = 0;\r\n shoppingCart.map((cartItem, index) => {\r\n totalCount += cartItem.quantity;\r\n });\r\n\r\n this.setState({shoppingCart: shoppingCart, totalCount : totalCount, shoppingCartIsValidated : false, shoppingCartIsValid : false});\r\n this.validateShoppingCart(); \r\n });\r\n }\r\n\r\n onChangeValue = (cartItem, newValue) => {\r\n this.setState({shoppingCartIsValidated: false, shoppingCartIsValid: false}, () => {\r\n fetch(`/api/shoppingbasket/add?id=${parseInt(cartItem.productId)}&amount=${newValue}`, {\r\n method: 'post' \r\n }).then(response => {\r\n this.getProducts();\r\n });\r\n });\r\n }\r\n\r\n onRemoveProduct = (cartItem) => {\r\n this.setState({shoppingCartIsValidated: false, shoppingCartIsValid: false}, () => {\r\n fetch(`/api/shoppingbasket/remove?id=${parseInt(cartItem.productId)}`, {\r\n method: 'post' \r\n }).then(response => {\r\n this.getProducts();\r\n });\r\n });\r\n }\r\n\r\n onClickCheckoutButton = () => {\r\n const WebshopShoppingCartPagina = this.props.kenticoPage.MijnFnvWebshopShoppingCartPagina;\r\n if (WebshopShoppingCartPagina) {\r\n if (this.state.totalCount == 0) {\r\n this.setState({\r\n isShowPostDataError: true, \r\n errorText: WebshopShoppingCartPagina.FoutmeldingGeenArtikelenInWinkelwagen\r\n });\r\n return;\r\n }\r\n if (!this.state.shoppingCartIsValid) {\r\n this.setState({\r\n isShowPostDataError: true, \r\n errorText: WebshopShoppingCartPagina.FoutmeldingControleerWinkelwagen\r\n });\r\n return;\r\n }\r\n\r\n this.setState({redirectToUrl: WebshopShoppingCartPagina.OrderPageUrl});\r\n }\r\n }\r\n\r\n gotoProductDetail = (event, cartItem) => {\r\n event.preventDefault();\r\n if (cartItem && cartItem.productDetailUrl) {\r\n this.setState({redirectToUrl : cartItem.productDetailUrl});\r\n }\r\n return false;\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToUrl !== undefined && this.state.redirectToUrl !== '') {\r\n return ;\r\n }\r\n\r\n const WebshopShoppingCartPagina = this.props.kenticoPage.MijnFnvWebshopShoppingCartPagina;\r\n if (!WebshopShoppingCartPagina) {\r\n return <>;\r\n }\r\n\r\n MenuHelpers.showBreadCrumbs();\r\n\r\n if (WebshopShoppingCartPagina.MenuType === \"eenvoudig\") {\r\n MenuHelpers.hideMenu();\r\n } else {\r\n MenuHelpers.showMenu();\r\n }\r\n\r\n PageHelpers.setBreadcrumbsPageTitle(WebshopShoppingCartPagina.Titel);\r\n\r\n const pageWidthCssClass = PageRenderHelpers.getCssClassForPageWidthViewPageType(\r\n \"breed\",\r\n false,\r\n false\r\n );\r\n\r\n let nameMemberInLidZoekenSubfunction = \"\";\r\n let memberState = <>;\r\n if (\r\n this.context &&\r\n this.context.pathParam &&\r\n this.context.pathParam !== UserService.getUserId()\r\n ) {\r\n const memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n if (memberDetails && memberDetails.memberName) {\r\n nameMemberInLidZoekenSubfunction = memberDetails.memberName;\r\n\r\n memberState = (\r\n \r\n );\r\n }\r\n }\r\n\r\n const memberDetails = (\r\n <>\r\n {nameMemberInLidZoekenSubfunction &&\r\n nameMemberInLidZoekenSubfunction !== \"\" && (\r\n

    \r\n {memberState}\r\n {nameMemberInLidZoekenSubfunction}\r\n

    \r\n )}\r\n \r\n );\r\n\r\n this.handleAnimations();\r\n const popupText = {\r\n isUserError: true,\r\n title: this.state.errorText,\r\n message: \"\",\r\n explanation: '',\r\n telephoneHint: \"\",\r\n telephoneNumber: \"\",\r\n telephoneText: \"\",\r\n okButtonText: \"OK\",\r\n email: \"\",\r\n emailInfo : \"\",\r\n linkUrl: \"\",\r\n container: this,\r\n stayOnPage: true\r\n };\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n {WebshopShoppingCartPagina.Titel}\r\n \r\n {memberDetails} \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.state.totalCount == 0 &&
    {WebshopShoppingCartPagina.FoutmeldingGeenArtikelenInWinkelwagen}
    }\r\n {this.state.shoppingCart.map((cartItem, index) => {\r\n return
    \r\n \r\n
    \r\n {return this.gotoProductDetail(event, cartItem); }}> \r\n
    {cartItem.description}
    \r\n
    {ReactHtmlParser(cartItem.productShortName)}
    \r\n {this.state.shoppingCartErrors[cartItem.productId] && \r\n
    {WebshopShoppingCartPagina.FoutmeldinErIsNietGenoegVoorraad}: {this.state.shoppingCartErrors[cartItem.productId].inventory}
    }\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    ;\r\n })}\r\n
    \r\n
    Aantal producten
    \r\n
    {this.state.totalCount}
    \r\n
    \r\n
    \r\n
    Totaal
    \r\n
    Gratis
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {ReactHtmlParser(WebshopShoppingCartPagina.OrderReasons)}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.state.isShowPostDataError ? : null}\r\n
    \r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}","import * as React from \"react\";\r\nimport { Redirect } from 'react-router-dom';\r\n\r\nimport { UserService } from \"@fnv-core/authentication\";\r\nimport { Slug } from '@fnv-core/utils';\r\nimport { PageHelpers } from \"./helpers/PageHelpers\";\r\nimport { PageProps } from \"./interfaces/PageInterfaces\";\r\nimport { MenuHelpers } from \"./helpers/MenuHelpers\";\r\nimport { MijnFNVPageContext } from \"./helpers/MijnFNVPageContext\";\r\nimport { FormService } from \"../../services/FormService\";\r\nimport {\r\n AnimationService,\r\n ANIMATION_DASHBOARD_LOADING_CONTEXT,\r\n} from \"../../services/AnimationService\";\r\nimport { WebshopProductDetail } from \"./components/webshop-product-detail\";\r\nimport { WebshopProductDetailEdit } from \"./components/webshop-product-detail-edit\";\r\nimport { WebshopShoppingCart } from \"./components/webshop-shopping-cart\";\r\n\r\nexport interface WebshopProductDetailPageState {\r\n totalCount : number;\r\n productCount : number;\r\n redirectToUrl: string;\r\n}\r\n\r\nexport class WebshopProductDetailPage extends React.Component {\r\n \r\n state = {\r\n totalCount : 0,\r\n productCount : 1,\r\n redirectToUrl : \"\"\r\n };\r\n \r\n componentDidMount() {\r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n this.getProducts();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n updateProduct = (productSKU : string, value : number) => {\r\n fetch(`/api/shoppingbasket/update?id=${parseInt(productSKU)}&amount=${value}`, {\r\n method: 'post' \r\n }).then(response => { \r\n const WebshopProductDetailPagina = this.props.kenticoPage.MijnFnvWebshopProductDetailPagina;\r\n if (WebshopProductDetailPagina) {\r\n this.setState({redirectToUrl: WebshopProductDetailPagina.WebshopCartUrl});\r\n }\r\n });\r\n }\r\n\r\n getProducts = () => {\r\n fetch(\"/api/shoppingbasket/get\", {\r\n method: 'get' \r\n }).then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(shoppingCart => {\r\n // tslint:disable-next-line\r\n let totalCount = 0;\r\n shoppingCart.map((cartItem, index) => {\r\n totalCount += cartItem.quantity;\r\n });\r\n\r\n this.setState({totalCount : totalCount}); \r\n });\r\n }\r\n\r\n onClickAddButton = (productId) => {\r\n const WebshopProductDetailPagina = this.props.kenticoPage.MijnFnvWebshopProductDetailPagina;\r\n if (!WebshopProductDetailPagina) {\r\n return <>;\r\n }\r\n\r\n this.updateProduct(productId, this.state.productCount);\r\n }\r\n\r\n onChangeValue = (value : number) => {\r\n this.setState({productCount: value});\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToUrl !== undefined && this.state.redirectToUrl !== '') {\r\n return ;\r\n }\r\n\r\n const WebshopProductDetailPagina = this.props.kenticoPage.MijnFnvWebshopProductDetailPagina;\r\n if (!WebshopProductDetailPagina) {\r\n return <>;\r\n }\r\n\r\n MenuHelpers.showBreadCrumbs();\r\n\r\n if (WebshopProductDetailPagina.MenuType === \"eenvoudig\") {\r\n MenuHelpers.hideMenu();\r\n } else {\r\n MenuHelpers.showMenu();\r\n }\r\n\r\n PageHelpers.setBreadcrumbsPageTitle(WebshopProductDetailPagina.Titel);\r\n\r\n let nameMemberInLidZoekenSubfunction = \"\";\r\n let memberState = <>;\r\n if (\r\n this.context &&\r\n this.context.pathParam &&\r\n this.context.pathParam !== UserService.getUserId()\r\n ) {\r\n const memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n if (memberDetails && memberDetails.memberName) {\r\n nameMemberInLidZoekenSubfunction = memberDetails.memberName;\r\n\r\n memberState = (\r\n \r\n );\r\n }\r\n }\r\n\r\n const memberDetails = (\r\n <>\r\n {nameMemberInLidZoekenSubfunction &&\r\n nameMemberInLidZoekenSubfunction !== \"\" && (\r\n

    \r\n {memberState}\r\n {nameMemberInLidZoekenSubfunction}\r\n

    \r\n )}\r\n \r\n );\r\n\r\n this.handleAnimations();\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n {WebshopProductDetailPagina.ProductName}\r\n \r\n {memberDetails}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n","import * as React from 'react';\r\nimport { UserService } from \"@fnv-core/authentication\";\r\nimport { Slug } from '@fnv-core/utils';\r\nimport { PageHelpers } from './helpers/PageHelpers';\r\nimport { PageRenderHelpers , createFormWidget } from './helpers/PageRenderHelpers';\r\nimport { PageProps } from './interfaces/PageInterfaces';\r\nimport { MenuHelpers } from './helpers/MenuHelpers';\r\nimport { MijnFNVPageContext } from './helpers/MijnFNVPageContext';\r\nimport { FormService } from \"../../services/FormService\";\r\nimport { AnimationService, ANIMATION_DASHBOARD_LOADING_CONTEXT } from '../../services/AnimationService';\r\nimport { CreateFormViewModel } from './helpers/create-form-viewmodel';\r\nimport ReactHtmlParser from 'react-html-parser';\r\n\r\nexport class CTAViewDataPage extends React.Component {\r\n \r\n\r\n componentDidMount() { \r\n AnimationService.enableFormAnimations();\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n }\r\n\r\n componentDidUpdate() {\r\n this.handleAnimations();\r\n }\r\n\r\n handleAnimations() {\r\n AnimationService.enableAnimations(ANIMATION_DASHBOARD_LOADING_CONTEXT);\r\n AnimationService.triggerAnimations();\r\n }\r\n\r\n render() {\r\n MenuHelpers.showBreadCrumbs();\r\n\r\n if (this.props.kenticoPage.MijnFnvCTAViewPagina.MenuType === \"eenvoudig\") {\r\n MenuHelpers.hideMenu();\r\n } else {\r\n MenuHelpers.showMenu();\r\n }\r\n\r\n PageHelpers.setBreadcrumbsPageTitle(this.props.kenticoPage.MijnFnvCTAViewPagina.Titel);\r\n\r\n const pageWidth = this.props.kenticoPage.MijnFnvCTAViewPagina.PageWidth;\r\n let spaceColumn = \"col-md-2\";\r\n let contentColumn = \"col-md-8\";\r\n let formTitleColumn = \"col-md-8\";\r\n if (pageWidth == \"smal\") {\r\n spaceColumn = \"col-md-1\";\r\n contentColumn = \"col-md-10\";\r\n formTitleColumn = \"col-md-10\";\r\n }\r\n\r\n let nameMemberInLidZoekenSubfunction = \"\";\r\n let memberState = <>;\r\n if (\r\n this.context &&\r\n this.context.pathParam &&\r\n this.context.pathParam !== UserService.getUserId()\r\n ) {\r\n const memberDetails = FormService.getLidZoekenSubFunctionsForMember();\r\n if (memberDetails && memberDetails.memberName) {\r\n nameMemberInLidZoekenSubfunction = memberDetails.memberName;\r\n\r\n memberState = ;\r\n }\r\n }\r\n\r\n const memberDetails = <>{nameMemberInLidZoekenSubfunction &&\r\n nameMemberInLidZoekenSubfunction !== \"\" && (\r\n

    \r\n {memberState}{nameMemberInLidZoekenSubfunction}\r\n

    \r\n )};\r\n\r\n this.handleAnimations();\r\n if (!this.props.kenticoPage.MijnFnvCTAViewPagina) {\r\n return <>;\r\n }\r\n const CTAViewPagina = this.props.kenticoPage.MijnFnvCTAViewPagina;\r\n \r\n return \r\n
    \r\n
    \r\n
    \r\n

    {CTAViewPagina.Titel}

    \r\n {memberDetails}\r\n
    \r\n {CTAViewPagina.ContentTitle &&

    {CTAViewPagina.ContentTitle}

    }\r\n {CTAViewPagina.Intro &&

    {CTAViewPagina.Intro}

    }\r\n {CTAViewPagina.Content && ReactHtmlParser(CTAViewPagina.Content)} \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    {CTAViewPagina.CheckDataTitle}

    \r\n
    \r\n
    \r\n
    \r\n \r\n {(this.props.kenticoPage as any).RelatedFormBlockViewModels.map((formBlock, index) => {\r\n const FormViewModel = CreateFormViewModel(\r\n formBlock.MijnFnvCTAViewFormBlockModel.FormDefinition,\r\n formBlock.MijnFnvCTAViewFormBlockModel.FormName, \r\n formBlock.MijnFnvCTAViewFormBlockModel.EditPageLink,\r\n CTAViewPagina.Titel,\r\n formBlock.MijnFnvCTAViewFormBlockModel.FormConfig\r\n );\r\n return
    \r\n
    \r\n {createFormWidget(\r\n FormViewModel,\r\n \"widget mijn-fnv__widget\",\r\n 1,\r\n 'view'\r\n )}\r\n
    \r\n
    ;\r\n })}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {// Get all widgets to be shown in page\r\n PageHelpers.getWidgets(this.props.kenticoPage).map((widgetDefinition, index) => {\r\n widgetDefinition = { ...widgetDefinition };\r\n widgetDefinition.editMode = false;\r\n // Get the proper widget based on type, set to edit mode\r\n return PageRenderHelpers.renderWidget(\r\n widgetDefinition,\r\n '',\r\n index,\r\n 'view'\r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n ;\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}","import { connect } from \"react-redux\";\r\nimport { QRCodeLidnummer } from '../presentational/QRCodeLidnummer';\r\n\r\nexport interface QRCodeProps {\r\n lidnummer: any;\r\n}\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n lidnummer: state.user.lidnummer\r\n };\r\n };\r\n\r\nexport const QRCodeContainer = connect(mapStateToProps)(QRCodeLidnummer);\r\n","import * as React from \"react\";\r\nimport * as QRCode from 'qrcode.react';\r\n \r\nexport interface QRCodeProps {\r\n lidnummer : string;\r\n}\r\nexport const QRCodeLidnummer = (props: QRCodeProps) => {\r\n\r\n return <> \r\n \r\n \r\n \r\n ;\r\n}\r\n;","import * as React from \"react\";\r\nimport { User } from '../models/User';\r\nimport { getResourceString } from '../kentico/resource-strings';\r\n\r\nexport const DigitaleLedenpasLidnummerNaam = (props: User) => {\r\n return <> \r\n
    \r\n
    \r\n \r\n {getResourceString(\"Memberpass.MemberNumber.Label\")}\r\n \r\n \r\n {props.lidnummer}\r\n \r\n
    \r\n
    \r\n \r\n {getResourceString(\"Memberpass.Name.Label\")}\r\n \r\n \r\n {props.name}\r\n \r\n
    \r\n
    \r\n \r\n {getResourceString(\"Memberpass.BirthDate.Label\")}\r\n \r\n \r\n {props.birthDate}\r\n \r\n
    \r\n
    \r\n \r\n {getResourceString(\"Memberpass.RightsDate.Label\")}\r\n \r\n \r\n {props.membershipCardActivatedDate}\r\n \r\n
    \r\n
    \r\n ;\r\n}\r\n;","\r\nimport * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { DigitaleLedenpasLidnummerNaam } from \"../presentational/DigitaleLedenpasLidnummerNaam\";\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n name: state.user.name,\r\n email: state.user.email,\r\n lidnummer: state.user.lidnummer,\r\n isLoggedIn: state.user.isLoggedIn,\r\n accessToken: state.user.accessToken,\r\n membershipCardActivatedDate: state.user.membershipCardActivatedDate,\r\n birthDate: state.user.birthDate,\r\n userId: state.user.userId\r\n };\r\n};\r\n\r\nexport const DigitaleLedenpasLidnummerNaamContainer = connect(mapStateToProps)(DigitaleLedenpasLidnummerNaam);","import * as React from 'react';\r\nimport { MijnFNVMenu } from '../widgets/MijnFNVMenu';\r\nimport { PageHelpers } from './helpers/PageHelpers';\r\nimport { QRCodeContainer } from '../../containers/QRCodeContainer';\r\nimport { PageProps } from './interfaces/PageInterfaces';\r\nimport { DigitaleLedenpasLidnummerNaamContainer } from '../../containers/DigitaleLedenpasLidnummerNaamContainer';\r\nimport { MenuHelpers } from './helpers/MenuHelpers';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\n\r\n\r\nexport class DigitaleLedenpasPage extends React.Component {\r\n \r\n render() { \r\n MenuHelpers.showBreadCrumbs();\r\n MenuHelpers.showMenu();\r\n\r\n let print = (e) => {\r\n e.preventDefault();\r\n (window as any).print();\r\n return false;\r\n };\r\n\r\n return \r\n
    \r\n
    \r\n
    \r\n {MijnFNVMenu(PageHelpers.getSideMenu(this.props.kenticoPage), this.context.pathname)}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {this.props.kenticoPage.MijnFnvOverzicht.Alias}

    \r\n

    {this.props.kenticoPage.MijnFnvOverzicht.TaskIntroText}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    {getResourceString(\"Memberpass.Members.Text\")}\r\n {getResourceString(\"Memberpass.Pass.Text\")}\r\n

    \r\n \"\"\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {getResourceString(\"Memberpass.Print.Text\")}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n ;\r\n }\r\n}\r\n\r\nDigitaleLedenpasPage.contextType = MijnFNVPageContext;","import * as React from 'react';\r\nimport { ConsentService } from '../../services';\r\nimport { SwitchControl } from '../controls';\r\n\r\nexport interface IMijnFNVConsentBlockProps {\r\n title: string;\r\n description?: string;\r\n consentId: string;\r\n consent: boolean;\r\n}\r\n\r\n/**\r\n * Displays a consent block for managing consent on the given item\r\n * @param props \r\n * @returns \r\n */\r\nexport const MijnFNVConsentBlock = (props: IMijnFNVConsentBlockProps) => {\r\n const id = `consent-${props.consentId}`;\r\n\r\n const handleConsentChange = async (value: boolean) => {\r\n if (value) {\r\n await ConsentService.accept(props.consentId);\r\n } else {\r\n await ConsentService.revoke(props.consentId);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n

    \r\n {props.title}\r\n \r\n

    \r\n

    \r\n {props.description}\r\n

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\n\r\nexport interface MijnFNVContentProps {\r\n title: string;\r\n content: string;\r\n cssClass: string;\r\n}\r\n\r\nexport class MijnFNVContent extends React.Component {\r\n \r\n render () { \r\n let content = ReactHtmlParser(this.props.content);\r\n return <>\r\n
    \r\n {this.props.title !== \"\" &&

    {this.props.title}

    }\r\n {content}\r\n
    \r\n ;\r\n }\r\n}","import * as React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport fetch from 'cross-fetch';\r\nimport { Tokenizer } from '@fnv-core/tokens';\r\nimport { QRCodeContainer } from '../../containers/QRCodeContainer';\r\nimport { DigitaleLedenpasLidnummerNaam } from '../../presentational/DigitaleLedenpasLidnummerNaam';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport { FormControlHelpers } from '../../formcontrols/helpers/FormControlHelpers';\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\nimport { downloadElementAsPdf } from '../../helpers/ElementToPdfHelper';\r\nimport { MutableRefObject } from 'react';\r\n\r\nexport interface MijnFNVDigitaleLedenPasBlockProps {\r\n apiUrl: string;\r\n title: string;\r\n intro: string;\r\n userId: string;\r\n}\r\n\r\nexport interface MijnFNVDigitaleLedenPasBlockState {\r\n lidnummer : string;\r\n name : string;\r\n birthDate: string;\r\n membershipCardActivatedDate: string;\r\n}\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n userId: state.user.userId\r\n };\r\n };\r\n\r\nclass ContainedMijnFNVDigitaleLedenPasBlock extends React.Component {\r\n private downloadRef: MutableRefObject;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.downloadRef = React.createRef();\r\n }\r\n\r\n state = {\r\n lidnummer : \"\",\r\n name : \"\",\r\n birthDate : \"\",\r\n membershipCardActivatedDate : \"\"\r\n };\r\n\r\n componentDidMount() {\r\n const formattedUrl = Tokenizer.replaceTokens(this.props.apiUrl, [this.props.userId]);\r\n fetch(formattedUrl)\r\n .then(response => {\r\n if (response.status > 300) {\r\n return {\"_error\" : true};\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!json._error) {\r\n this.setState({\r\n lidnummer : json.Lidmaatschapsnummer,\r\n name : json.Naam,\r\n birthDate : FormControlHelpers.convertValueToType(json.GeboorteDatum , {dataType: \"date\"}),\r\n membershipCardActivatedDate : FormControlHelpers.convertValueToType(json.RechtenDatum , {dataType: \"date\"})\r\n });\r\n }\r\n })\r\n .catch(err => {\r\n // tslint:disable-next-line\r\n console.error(err);\r\n });\r\n }\r\n\r\n render () { \r\n let download = (e) => {\r\n e.preventDefault();\r\n downloadElementAsPdf(this.downloadRef.current, 'ledenpas');\r\n };\r\n\r\n /*\r\n\r\n link tbv digitale wallet : weer toevoegen zodra dit live moet\r\n \r\n \"Toevoegen\r\n */\r\n\r\n return \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {this.props.title}

    \r\n

    {ReactHtmlParser(this.props.intro)}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    {getResourceString(\"Memberpass.Members.Text\")}\r\n {getResourceString(\"Memberpass.Pass.Text\")}\r\n

    \r\n \"\"\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {getResourceString(\"Memberpass.Download.Text\")}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    ;\r\n }\r\n}\r\n\r\nContainedMijnFNVDigitaleLedenPasBlock.contextType = MijnFNVPageContext;\r\n\r\nexport const MijnFNVDigitaleLedenPasBlock = connect(mapStateToProps)(ContainedMijnFNVDigitaleLedenPasBlock);","import html2canvas from \"html2canvas\";\r\nimport { jsPDF } from \"jspdf\";\r\n\r\n/**\r\n * Puts given element inside a PDF and downloads the PDF with the given name.\r\n * @param htmlElement The html element to download in a PDF file. \r\n * @param name The name of the PDF file to download.\r\n*/\r\nexport const downloadElementAsPdf = async (htmlElement: HTMLElement, name: string) => {\r\n if (htmlElement !== undefined || htmlElement !== null) {\r\n\r\n const element = htmlElement;\r\n const canvas = await html2canvas(element);\r\n const image = canvas.toDataURL('image/png');\r\n\r\n const pdf = new jsPDF();\r\n\r\n pdf.addImage(image, 'PNG', 0, 0, 54, 86);\r\n\r\n pdf.save(`${name}.pdf`);\r\n\r\n }\r\n};","import * as React from 'react';\r\nimport { MijnFnvLink } from '../pages/interfaces/PageInterfaces';\r\nimport { Link } from 'react-router-dom';\r\nimport { StringHelpers } from '../../helpers/StringHelpers';\r\n\r\nexport interface MijnFNVHandigeLinksProps {\r\n MijnFnvLinks : MijnFnvLink[];\r\n title: string;\r\n dataContext?: any;\r\n additionalCssClass? : string;\r\n}\r\n\r\nexport class MijnFNVHandigeLinks extends React.Component {\r\n render () {\r\n return <>\r\n
    \r\n
    \r\n {this.props.title !== \"\" ?

    {this.props.title}

    : null}\r\n
      \r\n {(this.props.MijnFnvLinks || []).map((link, index) => {\r\n\r\n let linkUrl = link.Link;\r\n if (this.props.dataContext) { \r\n linkUrl = StringHelpers.replacePropertiesInUrl(linkUrl, this.props.dataContext.result || this.props.dataContext);\r\n }\r\n if ((linkUrl || \"\").indexOf(\"~\") == 0) {\r\n linkUrl = (linkUrl || \"\").slice(1); \r\n }\r\n\r\n return
    • \r\n {link.IsInternalMijnFNVLink || false ? \r\n \r\n {link.Titel}\r\n {link.LinkDescription}\r\n \r\n \r\n \r\n :\r\n \r\n \r\n {link.Titel}\r\n {link.LinkDescription}\r\n \r\n \r\n \r\n }\r\n
    • ;\r\n })}\r\n
    \r\n
    \r\n
    \r\n ;\r\n }\r\n}","import * as React from 'react';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport Select from 'react-select';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport fetch from 'cross-fetch';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n IDEAL_ISSUER_LIST_URL,\r\n IDEAL_TRANSACTIONREQUEST_URL,\r\n IDEAL_GETIDEALSERVICETRANSACTION_URL\r\n} from '../../constants/Constants';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { getAllUrlParams } from '../../../jslibs/urlparams';\r\nimport * as actions from '../../actions/FormActions';\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\n\r\nexport interface MijnFNVIdealBankSelectorProps {\r\n intro: string;\r\n title: string;\r\n bankSelectorLabel: string;\r\n selectBankPlaceholder: string;\r\n paymentButtonTitle: string;\r\n lidnummer: string;\r\n\r\n showErrorOnApiError: any;\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n lidnummer: state.user.lidnummer\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n showErrorOnApiError: error => {\r\n dispatch(actions.showErrorOnApiError(error));\r\n }\r\n };\r\n};\r\n\r\nexport interface MijnFNVIdealBankSelectorState {\r\n selectedBank: number;\r\n issuerList: any[];\r\n redirectUrl: string;\r\n doRedirect: boolean;\r\n customerTransactionDescription: string;\r\n totalAmount: number;\r\n isTransactionNotFound: boolean;\r\n isLoading: boolean;\r\n isSendingData: boolean;\r\n\r\n hasError: boolean;\r\n}\r\n\r\nexport interface MijnFNVIDealTransactionPostData {\r\n IssuerId: string;\r\n Amount: number;\r\n Purchase: string;\r\n Description: string;\r\n EntranceCode: string;\r\n MerchantReturnUrl: string;\r\n}\r\n\r\nconst styles = {\r\n clearIndicator: () => undefined,\r\n container: () => undefined,\r\n control: () => undefined,\r\n dropdownIndicator: () => undefined,\r\n groupHeading: () => undefined,\r\n indicatorsContainer: () => undefined,\r\n indicatorSeparator: () => undefined,\r\n input: () => undefined,\r\n loadingIndicator: () => undefined,\r\n loadingMessage: () => undefined,\r\n menu: () => undefined,\r\n menuList: () => undefined,\r\n multiValue: () => undefined,\r\n multiValueLabel: () => undefined,\r\n multiValueRemove: () => undefined,\r\n noOptionsMessage: () => undefined,\r\n option: () => undefined,\r\n placeholder: () => undefined,\r\n singleValue: () => undefined,\r\n valueContainer: () => undefined\r\n};\r\n\r\nexport class MijnFNVIdealBankSelectorContained extends React.Component<\r\n MijnFNVIdealBankSelectorProps,\r\n MijnFNVIdealBankSelectorState\r\n> {\r\n state = {\r\n selectedBank: 0,\r\n issuerList: [],\r\n redirectUrl: '',\r\n doRedirect: false,\r\n customerTransactionDescription: '',\r\n totalAmount: 0.0,\r\n isTransactionNotFound: false,\r\n isLoading: true,\r\n hasError: false,\r\n isSendingData: false\r\n };\r\n\r\n componentDidMount() {\r\n let urlParams = getAllUrlParams(this.context.search);\r\n\r\n if (!urlParams || !urlParams.transactionGuid) {\r\n return;\r\n }\r\n\r\n fetch(\r\n IDEAL_GETIDEALSERVICETRANSACTION_URL + '?transactionGuid=' + urlParams.transactionGuid\r\n )\r\n .then(response => {\r\n if (response.status == 404) {\r\n this.setState({\r\n isTransactionNotFound: true,\r\n isLoading: false\r\n });\r\n return {};\r\n }\r\n\r\n if (response.status >= 300) {\r\n return { error: true, reply: response.json() };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!!(json as any).error) {\r\n this.props.showErrorOnApiError();\r\n this.setState({ hasError: true });\r\n return;\r\n }\r\n\r\n this.setState({\r\n customerTransactionDescription: (json as any).CustomerDescription,\r\n totalAmount: (json as any).Amount,\r\n isLoading: false\r\n });\r\n });\r\n\r\n fetch(IDEAL_ISSUER_LIST_URL)\r\n .then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!!(json as any).error) {\r\n this.props.showErrorOnApiError();\r\n this.setState({ hasError: true });\r\n return;\r\n }\r\n\r\n if (!json['k__BackingField']) {\r\n return;\r\n }\r\n\r\n if (!json['k__BackingField']['k__BackingField']) {\r\n return;\r\n }\r\n\r\n if (json['k__BackingField']['k__BackingField'].length > 0) {\r\n this.setState({\r\n issuerList: json['k__BackingField'][\r\n 'k__BackingField'\r\n ][0]['k__BackingField'].map((item, index) => {\r\n return {\r\n value: item['k__BackingField'],\r\n label: item['k__BackingField']\r\n };\r\n })\r\n });\r\n }\r\n });\r\n }\r\n\r\n onsubmit = (event: any) => {\r\n event.preventDefault();\r\n if (this.state.selectedBank === 0) {\r\n return false;\r\n }\r\n\r\n let urlParams = getAllUrlParams(this.context.search);\r\n\r\n this.setState({ isSendingData: true });\r\n\r\n fetch(\r\n IDEAL_TRANSACTIONREQUEST_URL +\r\n '?transactionGuid=' +\r\n urlParams.transactionGuid +\r\n '&issuerId=' +\r\n this.state.selectedBank,\r\n {\r\n method: 'post',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({})\r\n }\r\n )\r\n .then(response => {\r\n this.setState({ isSendingData: false });\r\n if (response.status >= 300) {\r\n return { error: true, reply: response.json() };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!!(json as any).error) {\r\n json.reply.then(reply => {\r\n // Pass error-reply from server to error-popup\r\n this.props.showErrorOnApiError(reply);\r\n });\r\n\r\n return;\r\n }\r\n\r\n location.href = (json as any).Url;\r\n });\r\n return false;\r\n }\r\n\r\n formatAmountAsCurrencyInEuros(amount: number) {\r\n if ((amount as any) === undefined) {\r\n return '';\r\n }\r\n return (\r\n '€ ' +\r\n amount\r\n .toFixed(2)\r\n .replace('.', ',')\r\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1.')\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.doRedirect && this.state.redirectUrl != '') {\r\n return ;\r\n }\r\n\r\n if (this.state.isLoading) {\r\n return <>;\r\n }\r\n\r\n if (this.state.hasError) {\r\n return <>;\r\n }\r\n\r\n if (this.state.isTransactionNotFound) {\r\n return (\r\n <>\r\n
    \r\n

    {this.props.title}

    \r\n
    \r\n {getResourceString(\"Form.Ideal.TransactionNotFoundError\")}\r\n
    \r\n
    \r\n \r\n );\r\n }\r\n\r\n let intro = ReactHtmlParser(this.props.intro);\r\n\r\n return (\r\n
    \r\n
    \r\n

    {this.props.title}

    \r\n
    {intro}
    \r\n
    \r\n
    \r\n

    {this.state.customerTransactionDescription}

    \r\n

    \r\n {this.formatAmountAsCurrencyInEuros(this.state.totalAmount)}\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {\r\n this.setState({ selectedBank: value.value });\r\n }}\r\n />\r\n
    \r\n
    \r\n {this.state.isSendingData && (\r\n \r\n )}\r\n \r\n {this.props.paymentButtonTitle}\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n\r\nexport const MijnFNVIdealBankSelector = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(MijnFNVIdealBankSelectorContained);\r\n","import * as React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { KenticoFormContainer } from '../../containers/KenticoFormContainer';\r\nimport { LidZoekenHelpers } from '../pages/helpers/LidZoekenHelpers';\r\nimport { FormService } from '../../services/FormService';\r\nimport { clearLidZoeken, passthroughLidZoeken } from '../../actions/LidZoekenActions';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport { getAllUrlParams } from '../../../jslibs/urlparams';\r\nimport * as actions from '../../actions/FormActions';\r\nimport { StringHelpers } from '../../helpers/StringHelpers';\r\nimport * as UrlHelper from '../../../core/utils/url-helpers';\r\n\r\nexport interface MijnFNVLidZoekenZoekerProps {\r\n \r\n editMode: boolean;\r\n formConfig: any;\r\n additionalCssClass: string;\r\n formName: string;\r\n pageType: string;\r\n formDefinitions: any;\r\n\r\n forms: any;\r\n lidZoeken: any;\r\n\r\n clearLidZoeken: () => void;\r\n setFormValues: (formName: string, values: any) => void;\r\n passthroughLidZoeken: (fieldName: string, value: any) => void;\r\n}\r\n\r\nexport interface MijnFNVLidZoekenZoekerState {\r\n zoekenOp: string;\r\n lidnummer: string; \r\n postcode: string;\r\n geboortedatum: string;\r\n huisnummer: string;\r\n searchValue: string;\r\n qrcode: string;\r\n}\r\n\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n forms: state.forms,\r\n lidZoeken: state.lidZoeken\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return { \r\n clearLidZoeken: () => dispatch(clearLidZoeken()),\r\n setFormValues: (formName: string, values: any) => {\r\n dispatch(actions.storeFormValues(formName, values));\r\n },\r\n passthroughLidZoeken: (fieldName : string, value : any) => {\r\n dispatch(passthroughLidZoeken(fieldName, value));\r\n }\r\n };\r\n};\r\n\r\n\r\nexport class MijnFNVLidZoekenZoekerContained extends React.Component {\r\n\r\n state = {\r\n zoekenOp : \"\",\r\n lidnummer : \"\",\r\n geboortedatum : \"\",\r\n postcode: \"\",\r\n huisnummer: \"\",\r\n searchValue: \"\",\r\n qrcode: \"\",\r\n };\r\n\r\n componentDidMount() {\r\n this.props.setFormValues(\"_formSubmitTrigger\" , \r\n {\r\n autoPost : false, \r\n afterStoreValues: false\r\n });\r\n\r\n if (this.context && this.context.search) {\r\n let urlParams = getAllUrlParams(this.context.search);\r\n let geboorteDatum = \"\";\r\n if (urlParams.geboortedatum) {\r\n geboorteDatum = StringHelpers.convertDateToNL(urlParams.geboortedatum);\r\n }\r\n this.setState({\r\n lidnummer : urlParams.lidnummer || \"\",\r\n zoekenOp : urlParams.zoekenop || \"\",\r\n geboortedatum : geboorteDatum || \"\",\r\n postcode: urlParams.postcode || \"\",\r\n huisnummer: urlParams.huisnummer || \"\",\r\n searchValue: urlParams.searchvalue || \"\" \r\n }, () => {\r\n this.props.setFormValues(\"_formSubmitTrigger\" , \r\n {\r\n autoPost : true,\r\n afterStoreValues: false \r\n });\r\n }); \r\n }\r\n if (FormService.getIsInLidZoekenSubFunctions()) {\r\n FormService.setIsInLidZoekenSubFunctions(false);\r\n } else {\r\n if (this.props.lidZoeken.formName !== \"MijnFNV_LidZoeken\" && \r\n \t(this.props.lidZoeken.searchValue === undefined || \r\n this.props.lidZoeken.searchValue === \"\" ||\r\n this.props.lidZoeken.formName !== this.props.formName)) {\r\n this.props.clearLidZoeken();\r\n }\r\n }\r\n }\r\n\r\n onFieldChange = (formName : string, fieldName : string, value : any) => {\r\n \r\n if (this.props.formConfig && this.props.formConfig.passthroughFieldsToGlobalState) {\r\n this.props.formConfig.passthroughFieldsToGlobalState.map((passThroughFieldName) => {\r\n if (passThroughFieldName === fieldName) { \r\n this.props.passthroughLidZoeken(fieldName, value);\r\n }\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const formConfig = { ...this.props.formConfig };\r\n if(this.props.formName !== \"MijnFNV_LidZoeken\"){\r\n const queryParams: UrlHelper.IQueryParam[] = [{ key: 'pageNumber', value: 1 }];\r\n formConfig.postUrl = UrlHelper.addQueryParameters(formConfig.postUrl, queryParams);\r\n }\r\n formConfig.postPutMethod = 'post';\r\n formConfig.handlers = [...LidZoekenHelpers.getProcesses(formConfig)];\r\n \r\n return <>\r\n { \r\n\r\n const zoekenOp = (this.props.forms[this.props.formName] && this.props.forms[this.props.formName][\"ZoekenOp\"]) || \r\n this.props.lidZoeken.zoekenOp || this.state.zoekenOp || (formConfig.defaultSearch ? formConfig.defaultSearch : \"lidnummer\");\r\n const searchValue = this.props.lidZoeken.searchValue || this.state.searchValue || \"\";\r\n\r\n return {\r\n \"ZoekenOp\": zoekenOp,\r\n \"Lidnummer\": (this.props.forms[this.props.formName] && this.props.forms[this.props.formName][\"Lidnummer\"]) || \r\n this.props.lidZoeken.lidnummer || this.state.lidnummer || \"\", \r\n \"QRCode\": (this.props.forms[this.props.formName] && this.props.forms[this.props.formName][\"QRCode\"]) ||\r\n this.props.lidZoeken.qrcode || this.state.qrcode || \"\", \r\n \"Postcode\": (this.props.forms[this.props.formName] && this.props.forms[this.props.formName][\"Postcode\"]) || \r\n this.props.lidZoeken.postcode || this.state.postcode || \"\",\r\n \"Huisnummer\": (this.props.forms[this.props.formName] && this.props.forms[this.props.formName][\"Huisnummer\"]) || \r\n this.props.lidZoeken.huisnummer || this.state.huisnummer || \"\", \r\n \"Geboortedatum\": (this.props.forms[this.props.formName] && this.props.forms[this.props.formName][\"Geboortedatum\"]) || \r\n this.props.lidZoeken.geboortedatum || this.state.geboortedatum || \"\",\r\n [zoekenOp || \"searchValue\"] : searchValue\r\n };\r\n }\r\n }\r\n />\r\n ;\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n\r\nexport const MijnFNVLidZoekenZoeker = connect(mapStateToProps, mapDispatchToProps)(MijnFNVLidZoekenZoekerContained);\r\n","/**\r\n * A helper class that will ensure a real boolean value is returned\r\n * Look at BooleanUtil.spec.ts to see how this class is used.\r\n */\r\nexport class BooleanUtil {\r\n /**\r\n * ensureBoolValue does what it says; no matter the input, a boolean true or false is returned.\r\n * This simplifies code checks.\r\n * The text value is always converted to string.\r\n * This function is null-ref safe.\r\n * @param value The value that you want to convert to a boolean. This can be null, undefined, or any other object.\r\n * @param defaultValue This value will be returned when the value is null or undefined.\r\n *\r\n * @example\r\n * const result = BooleanUtil.ensureBoolValue('true'); // true\r\n * @example\r\n * const result = StringUtil.SafeValue(null); // false\r\n * @example\r\n * const result = StringUtil.SafeValue('1'); // true\r\n */\r\n public static ensureBoolValue(\r\n value: any,\r\n defaultValue: boolean = false\r\n ): boolean {\r\n const truthy: Array = ['true', 'True', '1'];\r\n\r\n if (value === undefined || value === null) {\r\n return defaultValue;\r\n }\r\n \r\n // explicitly check whether we can interpret the string as true\r\n return truthy.includes(value.toString());\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport ReactHtmlParser from 'react-html-parser';\r\n\r\nimport { UserService } from '@fnv-core/authentication';\r\nimport { Api } from '@fnv-core/http';\r\nimport { Tokenizer } from '@fnv-core/tokens';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport { MIJNFNV_LIDZOEKEN_STORECONSENT_URL } from '../../constants/Constants';\r\nimport { IFormConfig } from '../../interfaces/FormConfig';\r\nimport { KenticoFormContainer } from '../../containers/KenticoFormContainer';\r\nimport { MijnFnvLink } from '../pages/interfaces/PageInterfaces';\r\nimport { MijnFNVHandigeLinks } from './MijnFNVHandigeLinks';\r\nimport { setConsentLidZoeken, clearLidZoeken } from '../../actions/LidZoekenActions';\r\nimport { ReactFormHelpers } from '../../containers/helpers/FormHelpers';\r\nimport { LidZoekenResultaatHelpers } from '../pages/helpers/LidZoekenResultaatHelpers';\r\nimport { FormikProps } from 'formik';\r\nimport { BooleanUtil } from '@fnv-core/utils/BooleanUtil';\r\n\r\nexport interface MijnFNVLidZoekenResultsProps {\r\n lidZoeken: any;\r\n formConfig: IFormConfig;\r\n formDefinitions?: any;\r\n formName: string;\r\n pageType: string;\r\n links: MijnFnvLink[];\r\n memberFoundText: string;\r\n memberFoundPluralText: string;\r\n memberNotFoundText: string;\r\n memberNotFoundExplanation: string;\r\n moreThenMaxResultsFoundText: string;\r\n forms: any;\r\n\r\n setConsentLidZoeken: (id: string, consent: boolean) => void;\r\n clearLidZoeken: () => void;\r\n}\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n lidZoeken: state.lidZoeken,\r\n forms: state.forms\r\n };\r\n };\r\n\r\n const mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n clearLidZoeken : () => {\r\n dispatch(clearLidZoeken());\r\n },\r\n setConsentLidZoeken: (id: string, consent: boolean) => {\r\n dispatch(setConsentLidZoeken(id, consent));\r\n }\r\n };\r\n };\r\n\r\nexport interface MijnFNVLidZoekenResultsState {\r\n formLinkBlocks : string[];\r\n}\r\n\r\nexport class MijnFNVLidZoekenResultsContained extends React.Component {\r\n state = {\r\n formLinkBlocks : []\r\n };\r\n\r\n componentDidMount() { \r\n if (this.props.lidZoeken) {\r\n const formLinkBlocks = {...this.state.formLinkBlocks};\r\n this.props.lidZoeken.results.map((result, index) => {\r\n formLinkBlocks[this.props.formName + \"-\" + index] = !!result[\"LidgaatAkkoord\"];\r\n });\r\n this.setState({formLinkBlocks: formLinkBlocks});\r\n }\r\n } \r\n\r\n isHidden = (el) => {\r\n var style = window.getComputedStyle(el);\r\n return (style.display === 'none');\r\n }\r\n\r\n scrollToLinks = (index) => {\r\n let menuHeight = $(\".main-navbar--mijn-fnv\").height();\r\n $(\"html, body\").animate({\r\n scrollTop: $(\".lidzoeken-result__links\" + index).offset().top - menuHeight\r\n }, 500);\r\n }\r\n\r\n scrollToLinkBlockOnMobile = (index) => {\r\n const deviceXS = document.getElementsByClassName(\"device-xs\");\r\n const deviceSM = document.getElementsByClassName(\"device-sm\");\r\n\r\n if (deviceXS.length > 0) {\r\n if (!this.isHidden(deviceXS[0])) {\r\n this.scrollToLinks(index);\r\n }\r\n }\r\n\r\n if (deviceSM.length > 0) {\r\n if (!this.isHidden(deviceXS[0])) {\r\n this.scrollToLinks(index);\r\n }\r\n }\r\n }\r\n\r\n triggerLinksBlock = (values: any, index: number, formikBag: FormikProps) => {\r\n const formLinkBlocks = {...this.state.formLinkBlocks};\r\n\r\n formLinkBlocks[this.props.formName + \"-\" + index] = BooleanUtil.ensureBoolValue(values[\"LidgaatAkkoord\"]);\r\n if (values[\"PersoonsId\"] !== undefined) {\r\n this.props.setConsentLidZoeken(values[\"PersoonsId\"], BooleanUtil.ensureBoolValue(values[\"LidgaatAkkoord\"]));\r\n\r\n const postUrl = MIJNFNV_LIDZOEKEN_STORECONSENT_URL + '/' + values[\"PersoonsId\"];\r\n const data = {\r\n Consent: BooleanUtil.ensureBoolValue(values[\"LidgaatAkkoord\"]),\r\n Invoeromgeving: UserService.getCurrentRole() \r\n };\r\n Api.put(postUrl, data).then(() => {});\r\n } else {\r\n let field: string = null;\r\n if (!!values['FormGuid']) {\r\n field = 'FormGuid';\r\n } else if (!!values['EmailLead']) {\r\n field = 'EmailLead';\r\n } else if (!!values['EmailPersoon']) {\r\n field = 'EmailPersoon';\r\n }\r\n\r\n if (field) {\r\n let postUrl = this.props.formConfig.postUrl;\r\n postUrl = Tokenizer.replaceTokens(postUrl, [values[field]]);\r\n this.props.setConsentLidZoeken(values[field], BooleanUtil.ensureBoolValue(values[\"LidgaatAkkoord\"]));\r\n const data = ReactFormHelpers.createFormData(formikBag.values);\r\n // Use 'fetch' because it is send as FormData, not as json\r\n fetch(postUrl, {\r\n method: 'put',\r\n body: data,\r\n });\r\n }\r\n }\r\n\r\n this.setState({formLinkBlocks: formLinkBlocks}, () => {\r\n if (formikBag) { \r\n formikBag.setFieldValue(\"LidgaatAkkoord\", BooleanUtil.ensureBoolValue(values[\"LidgaatAkkoord\"]));\r\n }\r\n\r\n if (BooleanUtil.ensureBoolValue(values[\"LidgaatAkkoord\"])) {\r\n this.scrollToLinkBlockOnMobile(index);\r\n }\r\n });\r\n }\r\n\r\n render () {\r\n\r\n return <>\r\n\r\n {this.props.lidZoeken !== undefined && !!this.props.lidZoeken.isSearchInitialised &&\r\n this.props.lidZoeken.results.length > 1 &&

    {this.props.memberFoundPluralText.replace(\"{0}\", this.props.lidZoeken.totalAmountOfResults)}

    \r\n }\r\n {this.props.lidZoeken !== undefined && !!this.props.lidZoeken.isSearchInitialised &&\r\n this.props.lidZoeken.results.length == 1 &&

    {this.props.memberFoundText.replace(\"{0}\", this.props.lidZoeken.results.length)}

    \r\n }\r\n\r\n {this.props.moreThenMaxResultsFoundText && this.props.moreThenMaxResultsFoundText !== \"\" && this.props.lidZoeken.results.length >= 10 && \r\n

    {this.props.moreThenMaxResultsFoundText}

    }\r\n\r\n {this.props.lidZoeken !== undefined && !!this.props.lidZoeken.isSearchInitialised && \r\n this.props.lidZoeken.results.map((result, index) => {\r\n let isShowLinks = false;\r\n\r\n const formConfig = { ...this.props.formConfig };\r\n formConfig.index = index;\r\n formConfig.actions = { \r\n 'triggerLinksBlock': (values: any, formikBag: FormikProps) => {\r\n this.triggerLinksBlock(values, index, formikBag); \r\n }\r\n };\r\n\r\n formConfig.handlers = [...LidZoekenResultaatHelpers.getProcesses(formConfig)];\r\n\r\n isShowLinks = result[\"LidgaatAkkoord\"] || false;\r\n const formDefinitions = { ...this.props.formDefinitions };\r\n let initialData = result.result ? {...result.result} : {...result};\r\n\r\n if (formConfig && formConfig.receiveFieldsViaGlobalState) {\r\n formConfig.receiveFieldsViaGlobalState.map((passThroughFieldName) => {\r\n if (this.props.lidZoeken.additionalFormData[passThroughFieldName]) { \r\n initialData[passThroughFieldName] = this.props.lidZoeken.additionalFormData[passThroughFieldName];\r\n }\r\n });\r\n }\r\n\r\n return \r\n
    \r\n
    \r\n {this.props.formDefinitions !== undefined && { \r\n return {\r\n \"LidgaatAkkoord\": result[\"LidgaatAkkoord\"] || false\r\n };\r\n }\r\n }\r\n />}\r\n
    \r\n
    \r\n {isShowLinks && }\r\n
    \r\n
    \r\n
    ;\r\n })}\r\n\r\n {this.props.lidZoeken !== undefined && !this.props.lidZoeken.isSearching &&\r\n !!this.props.lidZoeken.isSearchInitialised && \r\n this.props.lidZoeken.results.length == 0 && \r\n
    \r\n
    \r\n
    \r\n

    {ReactHtmlParser(this.props.memberNotFoundText)}

    \r\n {ReactHtmlParser(this.props.memberNotFoundExplanation)}\r\n
    \r\n
    \r\n
    \r\n
    \r\n }\r\n\r\n {this.props.lidZoeken !== undefined && !!this.props.lidZoeken.isSearching &&\r\n !!this.props.lidZoeken.isSearchInitialised && \r\n \r\n
    \r\n
    \r\n }\r\n ;\r\n }\r\n}\r\n\r\nMijnFNVLidZoekenResultsContained.contextType = MijnFNVPageContext;\r\n\r\nexport const MijnFNVLidZoekenResults = connect(mapStateToProps, mapDispatchToProps)(MijnFNVLidZoekenResultsContained);\r\n","import * as React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { KenticoFormContainer } from '../../containers/KenticoFormContainer';\r\nimport { LidZoekenHelpers } from '../pages/helpers/LidZoekenHelpers';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport * as UrlHelper from '../../../core/utils/url-helpers';\r\nimport { IFormConfig } from 'reactcomponents/interfaces/FormConfig';\r\nimport { IFormDefinition } from 'reactcomponents/interfaces/FormDefinition';\r\n\r\nexport interface MijnFNVLidZoekenLoadMoreProps {\r\n editMode: boolean;\r\n formConfig: IFormConfig;\r\n formName: string;\r\n pageType: string;\r\n formDefinitions: IFormDefinition;\r\n additionalCssClass: string;\r\n\r\n forms: any;\r\n lidZoeken: any;\r\n}\r\n\r\nconst mapStateToProps = (state : any) => {\r\n return {\r\n lidZoeken: state.lidZoeken,\r\n forms: state.forms,\r\n };\r\n};\r\n\r\nexport class MijnFNVLidZoekenLoadMoreContained extends React.Component {\r\n render() {\r\n const formConfig = { ...this.props.formConfig };\r\n\r\n const queryParams: UrlHelper.IQueryParam[] = [{ key: 'pageNumber', value: this.props.lidZoeken.pageNumber + 1 }];\r\n \r\n formConfig.postUrl = formConfig.postUrl.replace('{ZoekenOp}', this.props.lidZoeken.zoekenOp);\r\n formConfig.postUrl = formConfig.postUrl.replace('{*ZoekenOp}', this.props.lidZoeken.searchValue);\r\n formConfig.postUrl = UrlHelper.addQueryParameters(formConfig.postUrl, queryParams);\r\n \r\n\r\n formConfig.postPutMethod = 'post';\r\n formConfig.handlers = [...LidZoekenHelpers.getProcesses(formConfig)];\r\n \r\n return <>\r\n {this.props.lidZoeken !== undefined && this.props.lidZoeken.isSearchInitialised && \r\n this.props.lidZoeken.results.length >= 1 && this.props.lidZoeken.hasMoreResults &&\r\n }\r\n ;\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n\r\nexport const MijnFNVLidZoekenLoadMore = connect(mapStateToProps)(MijnFNVLidZoekenLoadMoreContained);\r\n","import * as React from \"react\";\r\nimport ReactHtmlParser from \"react-html-parser\";\r\n\r\nexport interface MijnFNVLinkBlockProps {\r\n mainTitle: string;\r\n title: string;\r\n intro: string;\r\n link: string;\r\n visible: boolean;\r\n linkButtonText: string;\r\n openLinkInNewTab: boolean;\r\n additionalCssClass: string;\r\n layout: string;\r\n ctaImage : string;\r\n headerImage: string;\r\n}\r\n\r\nexport class MijnFNVLinkBlock extends React.Component {\r\n render() {\r\n if (!this.props.visible) {\r\n return null;\r\n }\r\n \r\n let intro = ReactHtmlParser(this.props.intro);\r\n \r\n let link = this.props.link;\r\n if ((link || \"\").indexOf(\"~\") == 0) {\r\n link = (link || \"\").slice(1); \r\n }\r\n\r\n const layout = this.props.layout;\r\n let ctaImage = undefined;\r\n if (this.props.ctaImage && this.props.ctaImage !== \"\") {\r\n ctaImage = this.props.ctaImage;\r\n if ((ctaImage || \"\").indexOf(\"~\") == 0) {\r\n ctaImage = (ctaImage || \"\").slice(1); \r\n }\r\n }\r\n\r\n let headerImage = undefined;\r\n if (this.props.headerImage && this.props.headerImage !== \"\") {\r\n headerImage = this.props.headerImage;\r\n if ((headerImage || \"\").indexOf(\"~\") == 0) {\r\n headerImage = (headerImage || \"\").slice(1); \r\n }\r\n }\r\n \r\n let layoutCssClass = \"\";\r\n let buttonLayoutCssClass = \"\";\r\n let buttonStylingCssClass = \"btn-success\";\r\n let showOnlyButton = false;\r\n if (layout == \"Gecentreerd-eenvoudig\") {\r\n layoutCssClass = \"mijn-fnv-link-block__centered\";\r\n buttonLayoutCssClass = \"justify-content-center\";\r\n buttonStylingCssClass = \"btn-outline-primary\";\r\n } else if (layout == \"Button-eenvoudig\") {\r\n layoutCssClass = \"mijn-fnv-link-block__centered\";\r\n buttonLayoutCssClass = \"justify-content-center\";\r\n buttonStylingCssClass = \"btn-outline-primary\";\r\n showOnlyButton = true;\r\n } else if (layout == \"Button-waarschuwing\") {\r\n layoutCssClass = \"mijn-fnv-link-block__centered\";\r\n buttonLayoutCssClass = \"justify-content-center\";\r\n buttonStylingCssClass = \"btn-outline-danger\";\r\n showOnlyButton = true;\r\n }\r\n\r\n return (\r\n <>\r\n {!showOnlyButton && this.props.mainTitle &&

    {this.props.mainTitle}

    }\r\n \r\n \r\n
    \r\n
    \r\n {!showOnlyButton &&
    \r\n

    {this.props.title}

    \r\n
    }\r\n {!showOnlyButton && headerImage && }\r\n
    \r\n \r\n
    \r\n \r\n -\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {layout == \"CTA Block\" && ctaImage && }\r\n
    \r\n
    \r\n \r\n );\r\n\r\n //return null;\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { MijnFNVPageContext } from '../pages/helpers/MijnFNVPageContext';\r\nimport Select from 'react-select';\r\nimport fetch from 'cross-fetch';\r\nimport { connect } from 'react-redux';\r\nimport * as actions from '../../actions/FormActions';\r\nimport { storeAlert, clearAlert } from '../../actions/AlertActions';\r\nimport { Grid } from '../../templates/Grid';\r\nimport Accordion from 'react-bootstrap/Accordion';\r\nimport Button from 'react-bootstrap/Button';\r\nimport {\r\n MIJNFNV_MONTLYFEE_URL,\r\n IDEAL_STATUS_URL,\r\n MIJNFNV_STARTTRANSACTION_URL\r\n} from '../../constants/Constants';\r\nimport { getAllUrlParams } from '../../../jslibs/urlparams';\r\nimport { storeRenderFormTrigger } from '../../actions/RenderFormTriggerActions';\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\n\r\nexport interface MijnFNVPaymentProps {\r\n title: string;\r\n userId: string;\r\n totalAmountText: string;\r\n payXMonthContributionText: string;\r\n payButtonText: string;\r\n payButtonUrl: string;\r\n intro: string;\r\n openContributionText: string;\r\n noOpenContributionText: string;\r\n contributionTitle: string;\r\n contributionInformation: string | null;\r\n payInAdvanceTitle: string;\r\n payInAdvanceInformation: string | null;\r\n\r\n showErrorOnApiError: any;\r\n storeAlert: (Title: string, Code: string, Link: string, LinkText: string) => void;\r\n clearAlert: () => void;\r\n\r\n storeRenderFormTrigger: (triggerName: string) => void;\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n userId: state.user.userId\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n showErrorOnApiError: error => {\r\n dispatch(actions.showErrorOnApiError(error));\r\n },\r\n storeAlert: (title, type, link, linkText) => {\r\n dispatch(storeAlert(title, type, link, linkText));\r\n },\r\n clearAlert: () => {\r\n dispatch(clearAlert());\r\n },\r\n storeRenderFormTrigger: (triggerName: string) => {\r\n dispatch(storeRenderFormTrigger(triggerName));\r\n }\r\n };\r\n};\r\n\r\nexport interface MijnFNVPaymentState {\r\n numberOfMonths: number;\r\n montlyAmount: number;\r\n idealStatusDescription: string;\r\n maxMonths: number;\r\n redirectUrl: string;\r\n doRedirect: boolean;\r\n transactionGuid: string;\r\n customerTransactionDescription: string;\r\n hasError: boolean;\r\n paymentMessage: string;\r\n openMembershipFee: number;\r\n isIdealEnabled: boolean;\r\n isSendingData: boolean;\r\n openContributions: any[];\r\n activeRow: number;\r\n openContributionAmount: string;\r\n openContributionAmountAsNumber: number;\r\n isPayNL: boolean;\r\n isFirstPopoverOpen: boolean;\r\n isSecondPopoverOpen: boolean;\r\n}\r\n\r\nexport interface IOpenstaandeContributie {\r\n Betaaloverzicht: any[];\r\n}\r\n\r\nexport interface IMonthlyFee {\r\n MaandcontributieBedrag: number;\r\n AantalMaandenVooruitbetalen: number;\r\n OpenstaandeContributie: number;\r\n IdealIsEnabled: boolean;\r\n OpenstaandeContributies: IOpenstaandeContributie;\r\n BetaalwijzeLid: string;\r\n MeerDanEenMaandAchterstand: boolean;\r\n}\r\n\r\nexport interface IIdealNotification {\r\n Title: string;\r\n Type: string;\r\n Code: string;\r\n Link: string;\r\n LinkText: string;\r\n}\r\n\r\nfunction betaalwijzeIsIncasso(contributionInfo: IMonthlyFee) {\r\n return contributionInfo.BetaalwijzeLid === 'INC';\r\n}\r\n\r\nconst styles = {\r\n clearIndicator: () => undefined,\r\n container: () => undefined,\r\n control: () => undefined,\r\n dropdownIndicator: () => undefined,\r\n groupHeading: () => undefined,\r\n indicatorsContainer: () => undefined,\r\n indicatorSeparator: () => undefined,\r\n input: () => undefined,\r\n loadingIndicator: () => undefined,\r\n loadingMessage: () => undefined,\r\n menu: () => undefined,\r\n menuList: () => undefined,\r\n multiValue: () => undefined,\r\n multiValueLabel: () => undefined,\r\n multiValueRemove: () => undefined,\r\n noOptionsMessage: () => undefined,\r\n option: () => undefined,\r\n placeholder: () => undefined,\r\n singleValue: () => undefined,\r\n valueContainer: () => undefined\r\n};\r\n\r\nexport class MijnFNVPaymentContained extends React.Component<\r\n MijnFNVPaymentProps,\r\n MijnFNVPaymentState\r\n> {\r\n state = {\r\n numberOfMonths: 0,\r\n montlyAmount: 0,\r\n idealStatusCode: '',\r\n idealStatusDescription: '',\r\n maxMonths: 0,\r\n redirectUrl: '',\r\n doRedirect: false,\r\n transactionGuid: '',\r\n customerTransactionDescription: '',\r\n hasError: false,\r\n paymentMessage: '-',\r\n openMembershipFee: 0,\r\n isIdealEnabled: true,\r\n isSendingData: false,\r\n openContributions: [],\r\n activeRow: -1,\r\n openContributionAmount: '',\r\n openContributionAmountAsNumber: 0,\r\n isPayNL: false,\r\n isFirstPopoverOpen: false,\r\n isSecondPopoverOpen: false\r\n };\r\n\r\n formatAmountAsCurrencyInEuros(amount: number) {\r\n if ((amount as any) === undefined) {\r\n return '';\r\n }\r\n return (\r\n '€ ' +\r\n amount\r\n .toFixed(2)\r\n .replace('.', ',')\r\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1.')\r\n );\r\n }\r\n\r\n getPaymentMessage = (contributionInfo: IMonthlyFee) => {\r\n if (contributionInfo.OpenstaandeContributie == 0) {\r\n return this.props.noOpenContributionText;\r\n }\r\n\r\n let contributionText = this.props.openContributionText;\r\n\r\n return (contributionText || '').replace(\r\n '{0}',\r\n this.formatAmountAsCurrencyInEuros(contributionInfo.OpenstaandeContributie)\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n let urlParams = getAllUrlParams(this.context.search);\r\n\r\n let fetchUrl = IDEAL_STATUS_URL;\r\n if (urlParams.statusCode != null)\r\n {\r\n fetchUrl += '/' +\r\n this.props.userId + \r\n '?trid=' + \r\n urlParams.id +\r\n '&statusAction=' +\r\n urlParams.statusAction +\r\n '&statusCode=' +\r\n urlParams.statusCode;\r\n }\r\n else{\r\n fetchUrl += '/' +\r\n this.props.userId +\r\n '?ec=' +\r\n urlParams.ec +\r\n '&trxid=' +\r\n urlParams.trxid;\r\n }\r\n\r\n fetch(fetchUrl)\r\n .then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!!(json as any).error) {\r\n this.props.showErrorOnApiError();\r\n this.setState({ hasError: true });\r\n return;\r\n }\r\n\r\n const notifications: IIdealNotification[] = json as IIdealNotification[];\r\n this.props.clearAlert();\r\n notifications.map(notification => {\r\n this.props.storeAlert(\r\n notification.Title,\r\n notification.Type,\r\n notification.Link,\r\n notification.LinkText\r\n );\r\n });\r\n\r\n fetch(MIJNFNV_MONTLYFEE_URL + '/' + this.props.userId)\r\n .then(response => {\r\n if (response.status >= 300) {\r\n return { error: true };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!!(json as any).error) {\r\n this.props.showErrorOnApiError();\r\n this.setState({ hasError: true });\r\n return;\r\n }\r\n\r\n // renderTrigger: ideal-api-ready\r\n\r\n const contributionInfo: IMonthlyFee = json as IMonthlyFee;\r\n this.setState(\r\n {\r\n paymentMessage: this.getPaymentMessage(contributionInfo),\r\n montlyAmount: contributionInfo.MaandcontributieBedrag as number,\r\n maxMonths: contributionInfo.AantalMaandenVooruitbetalen as number,\r\n openMembershipFee: contributionInfo.OpenstaandeContributie as number,\r\n isIdealEnabled: contributionInfo.IdealIsEnabled as boolean,\r\n openContributions: contributionInfo.OpenstaandeContributies.Betaaloverzicht,\r\n openContributionAmount: this.formatAmountAsCurrencyInEuros(\r\n contributionInfo.OpenstaandeContributie\r\n ),\r\n openContributionAmountAsNumber: contributionInfo.OpenstaandeContributie\r\n },\r\n () => {\r\n this.props.storeRenderFormTrigger('ideal-api-ready');\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n onSubmit = (event: any) => {\r\n event.preventDefault();\r\n\r\n if (this.state.numberOfMonths === 0 && this.state.openMembershipFee == 0) {\r\n return false;\r\n }\r\n this.setState({ isSendingData: true });\r\n\r\n let self = this;\r\n fetch(MIJNFNV_STARTTRANSACTION_URL + '/' + this.props.userId, {\r\n method: 'post',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n AantalMaandenVooruitbetalen: this.state.numberOfMonths,\r\n ReturnUrl: (window as any).location.href.split('?')[0]\r\n })\r\n })\r\n .then(response => {\r\n this.setState({ isSendingData: false });\r\n if (response.status >= 300) {\r\n return { error: true, reply: response.json() };\r\n } else {\r\n return response.json();\r\n }\r\n })\r\n .then(json => {\r\n if (!!(json as any).error) {\r\n json.reply.then(reply => {\r\n // Pass error-reply from server to error-popup\r\n this.props.showErrorOnApiError(reply);\r\n });\r\n return;\r\n }\r\n const payNLUrl = (json as any).Url;\r\n const isPayNL = payNLUrl.includes('https');\r\n this.setState({\r\n isPayNL : isPayNL,\r\n doRedirect: true,\r\n redirectUrl: isPayNL ? (json as any).Url : this.props.payButtonUrl,\r\n transactionGuid: (json as any).TransactionGuid,\r\n customerTransactionDescription: (json as any).CustomerDescription\r\n });\r\n });\r\n\r\n return false;\r\n }\r\n\r\n isPaymentAllowed() {\r\n return (\r\n (this.state.numberOfMonths > 0 || this.state.openMembershipFee > 0) &&\r\n this.state.isIdealEnabled\r\n );\r\n }\r\n\r\n getTotalPaymentAmount() {\r\n return this.state.numberOfMonths * this.state.montlyAmount + this.state.openMembershipFee;\r\n }\r\n\r\n render() {\r\n if (this.state.doRedirect && this.state.redirectUrl != '')\r\n {\r\n if (this.state.isPayNL){\r\n location.href = this.state.redirectUrl;\r\n return;\r\n }\r\n\r\n // TODO: Can be removed after 01-10-2024\r\n if (this.state.transactionGuid != '') {\r\n return (\r\n 0 ? payXMonthContributionTextParts[0] : '';\r\n const afterXMonthLabel: string =\r\n payXMonthContributionTextParts.length > 1 ? payXMonthContributionTextParts[1] : '';\r\n\r\n let options: any[] = [];\r\n\r\n let loop = 0;\r\n while (loop <= this.state.maxMonths) {\r\n options.push({\r\n value: loop,\r\n label: loop\r\n });\r\n loop++;\r\n }\r\n\r\n const openstaandeContributies = {\r\n openstaandeContributies: this.state.openContributions\r\n };\r\n const openstaandeContributiesFormDefinition = {\r\n name: 'openstaandeContributies',\r\n noResults: '',\r\n groupByColumnName: '',\r\n groupByColumnTitle: '',\r\n gridDetailsColumns: [],\r\n gridColumns: [\r\n {\r\n name: 'InvoiceYear',\r\n title: getResourceString(\"Form.Payment.Year\"),\r\n visible: true,\r\n cssClasses: 'col-12 col-md-1'\r\n },\r\n {\r\n name: 'InvoiceMonth',\r\n title: getResourceString(\"Form.Payment.Month\"),\r\n visible: true,\r\n cssClasses: 'col-12 col-md-2'\r\n },\r\n {\r\n name: 'Betalingskenmerk',\r\n title: getResourceString(\"Form.Payment.PaymentIdentifier\"),\r\n visible: true,\r\n cssClasses: 'col-12 col-md-4'\r\n },\r\n {\r\n name: 'Status',\r\n title: getResourceString(\"Form.Payment.PaymentState\"),\r\n visible: true,\r\n cssClasses: 'col-12 col-md-3',\r\n addValueAsCssClass: true\r\n },\r\n {\r\n name: 'UnpaidAmount',\r\n title: getResourceString(\"Form.Payment.Outstanding\"),\r\n visible: true,\r\n cssClasses: 'col-12 col-md-2 justify-content-end text-md-right',\r\n dataType: 'currency',\r\n decimalSeparator: ',',\r\n currencyFormat: '€ {value}'\r\n }\r\n ]\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n

    {this.props.title}

    \r\n

    {this.props.intro}

    \r\n {this.state.paymentMessage != '' ? (\r\n
    \r\n \r\n {this.props.contributionTitle}\r\n {this.props.contributionInformation !== null && this.props.contributionInformation !== '' &&\r\n this.setState({isFirstPopoverOpen: !this.state.isFirstPopoverOpen})} title=\"Klik hier om de pop-up te openen\">\r\n {this.state.isFirstPopoverOpen && {this.props.contributionInformation}}\r\n \r\n }\r\n \r\n {\r\n this.setState({ activeRow: parseInt(data) });\r\n }}\r\n >\r\n 0 \r\n ? 'mijn-fnv__payment-ideal-status-container--dark ' \r\n : '')\r\n }\r\n >\r\n \r\n {this.state.paymentMessage}\r\n \r\n {this.state.openContributionAmountAsNumber > 0 && <>\r\n \r\n {this.state.openContributionAmount}\r\n \r\n {\r\n if (this.state.activeRow == 99999) {\r\n this.setState({ activeRow: -1 });\r\n }\r\n }}\r\n >\r\n \r\n \r\n }\r\n
    \r\n {this.state.openContributionAmountAsNumber > 0 && \r\n \r\n }\r\n \r\n
    \r\n ) : null}\r\n {(options.length > 0 || this.state.openContributionAmountAsNumber > 0) && \r\n
    \r\n {options.length > 0 && <>\r\n \r\n {this.props.payInAdvanceTitle}\r\n {this.props.payInAdvanceInformation !== null && this.props.payInAdvanceInformation !== '' &&\r\n this.setState({isSecondPopoverOpen: !this.state.isSecondPopoverOpen})} title=\"Klik hier om de pop-up te openen\">\r\n {this.state.isSecondPopoverOpen && {this.props.payInAdvanceInformation}}\r\n \r\n }\r\n \r\n
    \r\n \r\n {\r\n this.setState({ numberOfMonths: value.value });\r\n }}\r\n />\r\n \r\n {afterXMonthLabel}\r\n \r\n \r\n {this.formatAmountAsCurrencyInEuros((this.state.montlyAmount * this.state.numberOfMonths))}\r\n \r\n
    \r\n }\r\n
    \r\n {this.props.totalAmountText}:\r\n \r\n {this.formatAmountAsCurrencyInEuros(this.getTotalPaymentAmount())}\r\n \r\n
    \r\n {!this.state.hasError && (\r\n
    \r\n {this.state.isSendingData && }\r\n \r\n {this.props.payButtonText}\r\n \r\n
    \r\n )}\r\n
    }\r\n
    \r\n \r\n );\r\n }\r\n\r\n static contextType = MijnFNVPageContext;\r\n context!: React.ContextType;\r\n}\r\n\r\nexport const MijnFNVPayment = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(MijnFNVPaymentContained);\r\n","import * as React from 'react';\r\nimport { Link } from \"react-router-dom\";\r\nimport { getResourceString } from '../../kentico/resource-strings';\r\n\r\nexport interface MijnFNVProfielFotoProps {\r\n formPageUrl: string;\r\n photoUrl: string;\r\n}\r\n\r\nexport class MijnFNVProfielFoto extends React.Component {\r\n \r\n render () {\r\n let photoUrl = this.props.photoUrl;\r\n if (!photoUrl) {\r\n photoUrl = \"/assets/img/layout/user-profile.svg\";\r\n }\r\n\r\n return <>\r\n
    \r\n
    {getResourceString(\"MijnFNV.ProfielFoto.BlockTitel\")}
    \r\n
    \r\n {getResourceString(\"MijnFNV.ProfielFoto.ButtonCaption\")}\r\n
    \r\n ;\r\n }\r\n}","import * as React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\n\r\nexport interface MijnFNVTipBlockProps {\r\n text : string;\r\n icon : string;\r\n layout : string;\r\n additionalCssClass : string;\r\n}\r\n\r\nexport class MijnFNVTipBlock extends React.Component {\r\n render () {\r\n let content = ReactHtmlParser(this.props.text);\r\n\r\n if ((this.props.layout || \"\").toLowerCase() === \"callout\") {\r\n return
    \r\n
    \r\n \r\n
    \r\n
    \r\n {content}\r\n
    \r\n
    ;\r\n }\r\n\r\n if ((this.props.layout || \"\").toLowerCase() === \"text\") {\r\n return
    \r\n
    \r\n \r\n {content}\r\n
    \r\n
    ;\r\n }\r\n\r\n return null;\r\n }\r\n}","import * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport interface LinkSingleProps {\r\n title: string;\r\n subtitle?: string;\r\n to: string;\r\n}\r\n\r\n/**\r\n * A component for showing a link list item, used for sub-routing\r\n */\r\nexport const LinkSingle = (props: LinkSingleProps) => {\r\n return (\r\n <>\r\n \r\n
    \r\n {props.title}\r\n {props.subtitle}\r\n
    \r\n \r\n \r\n \r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { LinkSingle } from \"../LinkSingle\";\r\n\r\nexport interface MijnFNVViewPageBlockProps {\r\n title: string;\r\n subtitle?: string;\r\n url: string;\r\n}\r\n\r\nexport function MijnFNVViewPageBlock(props: MijnFNVViewPageBlockProps) {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n}\r\n","import * as React from 'react';\r\nimport { addQueryParameters, IQueryParam, StringUtil } from '@fnv-core/utils';\r\nimport { IFormConfig } from '../../../interfaces/FormConfig';\r\nimport {\r\n BaseRelatedViewModel,\r\n KenticoFormViewmodel,\r\n KenticoPageDefinition,\r\n KenticoHandigeLinkBlockViewmodel,\r\n KenticoRichTextBlockViewmodel,\r\n KenticoPaymentBlockViewmodel,\r\n KenticoLidZoekenViewmodel,\r\n KenticoIdealBankSelectorBlockViewmodel,\r\n KenticTipBlockViewmodel,\r\n KenticDigitaleLedenPasBlockViewmodel,\r\n KenticoMijnFnvLinkBlockViewmodel,\r\n KenticoProfielFotoBlockViewmodel,\r\n KenticoMijnFnvViewPageBlockViewmodel,\r\n KenticoConsentDetailViewmodel,\r\n} from '../interfaces/PageInterfaces';\r\nimport { widgetClassNames } from './PageHelpers';\r\nimport { KenticoFormContainer } from '../../../containers/KenticoFormContainer';\r\nimport { DashboardPage } from '../DashboardPage';\r\nimport { EditDataPage } from '../EditDataPage';\r\nimport { ViewDataPage } from '../ViewDataPage';\r\nimport { WebshopOverviewPage } from '../WebshopOverviewPage';\r\nimport { WebshopShoppingCartPage } from '../WebshopShoppingCartPage';\r\nimport { WebshopProductDetailPage } from '../WebshopProductDetailPage';\r\nimport { CTAViewDataPage } from '../CTAViewDataPage';\r\nimport { DigitaleLedenpasPage } from '../DigitaleLedenpasPage';\r\nimport { \r\n MijnFNVHandigeLinks,\r\n MijnFNVContent,\r\n MijnFNVProfielFoto,\r\n MijnFNVPayment,\r\n MijnFNVIdealBankSelector,\r\n MijnFNVTipBlock,\r\n MijnFNVDigitaleLedenPasBlock,\r\n MijnFNVLinkBlock,\r\n MijnFNVViewPageBlock,\r\n MijnFNVLidZoekenResults,\r\n MijnFNVLidZoekenZoeker,\r\n MijnFNVLidZoekenLoadMore,\r\n MijnFNVConsentBlock,\r\n} from '../../widgets';\r\nimport { StringHelpers } from '../../../helpers/StringHelpers';\r\nimport { FormConfigHelpers } from '../../../formcontrols/helpers/FormConfigHelpers';\r\n\r\nfunction getFormConfigFromKenticoForm(formDefinition: any, orgFormConfig : IFormConfig): IFormConfig {\r\n\r\n // FormConfig is a \"sensitive\" way to extend or override a kentico form definition,\r\n // so, the FormConfig needs to be managed by development and follow OTAP\r\n // A FormConfig on a kentico form overrides the form-config on a form-block\r\n // .. in a later stage the form-config on a form-block will be removed completely\r\n let formConfig : IFormConfig;\r\n if (formDefinition.form && formDefinition.form.field) {\r\n if (formDefinition.form && formDefinition.form.field) {\r\n formDefinition.form.field.map((field) => {\r\n let restAPIEndpoint = \"\";\r\n if (field.settings && field.settings.RESTAPIEndpoint) {\r\n restAPIEndpoint = field.settings.RESTAPIEndpoint;\r\n }\r\n\r\n if (field.settings && field.settings.FormConfig) { \r\n const formDefinedFormConfig = JSON.parse(field.settings.FormConfig) as IFormConfig;\r\n if (orgFormConfig &&\r\n orgFormConfig.thanksPageUrl !== undefined) {\r\n formDefinedFormConfig.thanksPageUrl = orgFormConfig.thanksPageUrl;\r\n }\r\n\r\n if (orgFormConfig && orgFormConfig.kenticoFormName !== undefined) {\r\n formDefinedFormConfig.kenticoFormName = orgFormConfig.kenticoFormName;\r\n }\r\n \r\n if (orgFormConfig && orgFormConfig.submitButtonCaption !== undefined) {\r\n formDefinedFormConfig.submitButtonCaption = orgFormConfig.submitButtonCaption;\r\n }\r\n if (orgFormConfig && orgFormConfig.LogoutPopupTitle !== undefined) {\r\n formDefinedFormConfig.LogoutPopupTitle = orgFormConfig.LogoutPopupTitle;\r\n }\r\n if (orgFormConfig && orgFormConfig.LogoutPopupDescription !== undefined) {\r\n formDefinedFormConfig.LogoutPopupDescription = orgFormConfig.LogoutPopupDescription;\r\n }\r\n if (orgFormConfig && orgFormConfig.noAutoGenerateSummary !== undefined) {\r\n if (!(formDefinedFormConfig as any).useNoAutoGenerateSummaryFromForm) {\r\n formDefinedFormConfig.noAutoGenerateSummary = orgFormConfig.noAutoGenerateSummary;\r\n }\r\n }\r\n if (orgFormConfig && orgFormConfig.popupOK !== undefined) {\r\n formDefinedFormConfig.popupOK = orgFormConfig.popupOK;\r\n }\r\n if (orgFormConfig && orgFormConfig.onSuccessPopupMessage !== undefined) {\r\n formDefinedFormConfig.onSuccessPopupMessage = orgFormConfig.onSuccessPopupMessage;\r\n } \r\n if (orgFormConfig && orgFormConfig.onSuccessPopupDescription !== undefined) {\r\n formDefinedFormConfig.onSuccessPopupDescription = orgFormConfig.onSuccessPopupDescription;\r\n } \r\n\r\n formConfig = formDefinedFormConfig;\r\n formConfig.fillViaApi = formConfig.fillViaApi || restAPIEndpoint;\r\n formConfig.postUrl = formConfig.postUrl || restAPIEndpoint;\r\n\r\n // Merge procesHandlers if it exists in formConfig and orgFormConfig\r\n if (formConfig.procesHandlers !== undefined || orgFormConfig?.procesHandlers !== undefined){\r\n formConfig.procesHandlers = StringUtil.combineStringOrStringArrayProps(formConfig.procesHandlers, orgFormConfig?.procesHandlers);\r\n }\r\n \r\n if (field.settings.SummaryValueBelowFields) {\r\n formConfig.summaryValueBelowFields = field.settings.SummaryValueBelowFields === \"True\";\r\n }\r\n }\r\n });\r\n }\r\n } \r\n return formConfig; \r\n}\r\n\r\nfunction handleFormConfig(viewModel: KenticoFormViewmodel, \r\n viewModelformConfig: IFormConfig,\r\n additionalId: string = '') {\r\n // Respect the values from formConfig as override, but if empty, use values in viewModel\r\n const formConfigFromKenticoForm = getFormConfigFromKenticoForm(viewModel.FormDefinition, viewModelformConfig) || viewModelformConfig;\r\n let formConfig = StringHelpers.replaceLinkCodeNamesByUrls(viewModel.MijnFnvFormLinks, formConfigFromKenticoForm)\r\n || FormConfigHelpers.getDefaultFormConfig(viewModel.FormName, viewModel.Titel);\r\n \r\n if (viewModel.RestApiEndpoint) {\r\n formConfig.fillViaApi = formConfig.postUrl = viewModel.RestApiEndpoint;\r\n }\r\n \r\n const onSubmitSuccessLink = getSubmitSuccessLink(viewModel, additionalId);\r\n\r\n formConfig.reactRouteOnFailure = viewModel.OnSubmitFailureLink || formConfig.reactRouteOnFailure;\r\n formConfig.reactRouteOnSuccess = StringHelpers.replacePropertiesInUrl(\r\n formConfig.reactRouteOnSuccess, \r\n { OnSubmitSuccessLink: onSubmitSuccessLink || ''}\r\n ) || onSubmitSuccessLink;\r\n\r\n return formConfig;\r\n}\r\n\r\n/**\r\n * Gets the successlink based on the given viewModel and additionalId\r\n * @param viewModel The viewModel\r\n * @param additionalId An optional additional id to include in the success url\r\n * @returns An url to navigate to after submit success.\r\n */\r\nfunction getSubmitSuccessLink(viewModel: KenticoFormViewmodel, additionalId?: string): string {\r\n let onSubmitSuccessLink = viewModel.OnSubmitSuccessLink || '';\r\n const queryParams: IQueryParam[] = [];\r\n if (viewModel.IncludeAdditionalIdInSubmitLink && additionalId) {\r\n queryParams.push({ key: 'additionalId', value: additionalId });\r\n }\r\n\r\n if (viewModel.IncludeCurrentPageAsBackAndSubmitUrl) {\r\n const gobackUrl = (location.hash || '#').slice(1);\r\n queryParams.push({ key: 'gobackUrl', value: gobackUrl });\r\n }\r\n\r\n return addQueryParameters(onSubmitSuccessLink, queryParams);\r\n}\r\n\r\nexport function createFormWidget(\r\n viewModel: KenticoFormViewmodel,\r\n additionalCssClass: string,\r\n index: number,\r\n pageType: string,\r\n additionalId : string = \"\",\r\n onPopupOkClick?: () => Promise\r\n) {\r\n // Use the values from Kentico, unless formconfig has overrides\r\n const formConfig = handleFormConfig(viewModel, viewModel.FormConfig, additionalId) || {} as IFormConfig;\r\n let editMode = viewModel.editMode;\r\n if (formConfig && formConfig.enableFormAsWidget === true) {\r\n editMode = true;\r\n }\r\n\r\n const formDefinition = StringHelpers.replaceLinkCodeNamesByUrls(viewModel.MijnFnvFormLinks, viewModel.FormDefinition);\r\n let OnSubmitSuccessButtonLink1 = viewModel.OnSubmitSuccessButton1Link || \"\";\r\n let OnSubmitSuccessButtonLink2 = viewModel.OnSubmitSuccessButton2Link || \"\";\r\n\r\n if (formConfig.reactRouteOnSuccess) {\r\n formConfig.orgReactRouteOnSuccess = formConfig.reactRouteOnSuccess;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createLidZoekenWidget(\r\n viewModel: KenticoLidZoekenViewmodel,\r\n additionalCssClass: string,\r\n index: number,\r\n pageType: string\r\n) {\r\n \r\n const searchMemberFormConfig = getFormConfigFromKenticoForm(viewModel.SearchMemberForm, viewModel.SearchMemberFormConfig) || viewModel.SearchMemberFormConfig;\r\n const searchMemberLoadMoreFormConfig = (viewModel.SearchMemberLoadMoreForm !== undefined && viewModel.SearchMemberLoadMoreFormConfig !== undefined) \r\n ? (getFormConfigFromKenticoForm(viewModel.SearchMemberLoadMoreForm, viewModel.SearchMemberLoadMoreFormConfig) || viewModel.SearchMemberLoadMoreFormConfig) \r\n : undefined;\r\n const memberDetailsFormConfig = getFormConfigFromKenticoForm(viewModel.MemberDetailsForm, viewModel.MemberDetailsFormConfig) || viewModel.MemberDetailsFormConfig;\r\n\r\n return (\r\n \r\n

    {viewModel.Titel}

    \r\n \r\n \r\n {searchMemberLoadMoreFormConfig !== undefined &&\r\n \r\n }\r\n
    \r\n );\r\n}\r\n\r\nfunction createLinkBlockWidget(\r\n viewModel: KenticoHandigeLinkBlockViewmodel,\r\n additionalCssClass: string,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createMijnFnvLinkBlockWidget(\r\n viewModel: KenticoMijnFnvLinkBlockViewmodel,\r\n additionalCssClass: string,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createContentBlockWidget(\r\n viewModel: KenticoRichTextBlockViewmodel,\r\n additionalCssClass: string,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createProfielFotoBlockWidget(\r\n viewModel: KenticoProfielFotoBlockViewmodel,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\n\r\nfunction createPaymentBlockWidget(\r\n viewModel: KenticoPaymentBlockViewmodel,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createIdealBankKeuzeBlockWidget(\r\n viewModel: KenticoIdealBankSelectorBlockViewmodel,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createTipBlockWidget(\r\n viewModel: KenticTipBlockViewmodel,\r\n additionalCssClass: string,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createDigitaleLedenPasBlockWidget(\r\n viewModel: KenticDigitaleLedenPasBlockViewmodel,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createViewPageBlockWidget(\r\n viewModel: KenticoMijnFnvViewPageBlockViewmodel,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction createConsentBlockWidget(\r\n viewModel: KenticoConsentDetailViewmodel,\r\n index: number,\r\n) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport class PageRenderHelpers {\r\n static renderWidget(\r\n widget: BaseRelatedViewModel,\r\n additionalCssClass: string,\r\n index: number,\r\n pageType: string,\r\n additionalId : string = \"\"\r\n ) {\r\n switch (widget.ClassName) {\r\n case widgetClassNames.formClass:\r\n return createFormWidget(\r\n widget as KenticoFormViewmodel,\r\n additionalCssClass + (pageType == \"dashboard\" || pageType == \"edit\" || pageType == \"view\" ? \" mijn-fnv__widget\" : \"\"),\r\n index,\r\n pageType,\r\n additionalId\r\n );\r\n case widgetClassNames.linkBlockClass:\r\n return createLinkBlockWidget(\r\n widget as KenticoHandigeLinkBlockViewmodel,\r\n additionalCssClass + (pageType == \"dashboard\" ? \" mijn-fnv__widget\" : \"\"),\r\n index,\r\n );\r\n case widgetClassNames.downloadBlockClass: \r\n case widgetClassNames.contentBlockClass:\r\n return createContentBlockWidget(\r\n widget as KenticoRichTextBlockViewmodel,\r\n additionalCssClass + (pageType == \"dashboard\" ? \" mijn-fnv__widget\" : \"\"),\r\n index,\r\n );\r\n case widgetClassNames.profielFotoBlockClass:\r\n return createProfielFotoBlockWidget(\r\n widget as KenticoProfielFotoBlockViewmodel,\r\n index,\r\n ); \r\n case widgetClassNames.paymentBlockClass:\r\n return createPaymentBlockWidget(\r\n widget as KenticoPaymentBlockViewmodel,\r\n index,\r\n );\r\n case widgetClassNames.idealBankKeuzeBlockClass:\r\n return createIdealBankKeuzeBlockWidget(\r\n widget as KenticoIdealBankSelectorBlockViewmodel,\r\n index,\r\n );\r\n case widgetClassNames.tipBlockClass:\r\n return createTipBlockWidget(\r\n widget as KenticTipBlockViewmodel,\r\n additionalCssClass + (pageType == \"dashboard\" ? \" mijn-fnv__widget\" : \"\"),\r\n index,\r\n );\r\n case widgetClassNames.digitaleLedenPasBlockClass:\r\n return createDigitaleLedenPasBlockWidget(\r\n widget as KenticDigitaleLedenPasBlockViewmodel,\r\n index,\r\n );\r\n case widgetClassNames.mijnFnvLinkBlockClass:\r\n return createMijnFnvLinkBlockWidget(\r\n widget as KenticoMijnFnvLinkBlockViewmodel,\r\n additionalCssClass + (pageType == \"dashboard\" ? \" mijn-fnv__widget\" : \"\"),\r\n index,\r\n );\r\n case widgetClassNames.lidZoekenBlockClass:\r\n return createLidZoekenWidget(\r\n widget as KenticoLidZoekenViewmodel,\r\n additionalCssClass + (pageType == \"dashboard\" ? \" mijn-fnv__widget\" : \"\"),\r\n index,\r\n pageType\r\n );\r\n case widgetClassNames.mijnFnvViewPageBlockClass:\r\n return createViewPageBlockWidget(\r\n widget as KenticoMijnFnvViewPageBlockViewmodel,\r\n index,\r\n );\r\n case widgetClassNames.consentBlockClass:\r\n return createConsentBlockWidget(\r\n widget as KenticoConsentDetailViewmodel,\r\n index,\r\n );\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n

    {widget.ClassName}

    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n static getPageTypeComponent(\r\n pageType: string,\r\n kenticoPage: KenticoPageDefinition,\r\n pathName: string,\r\n kenticoPageType: string\r\n ) {\r\n let pageTypeToComponentMap = {\r\n dashboard: DashboardPage,\r\n edit: EditDataPage,\r\n view: ViewDataPage,\r\n ctaview: CTAViewDataPage,\r\n digitaleledenpas: DigitaleLedenpasPage,\r\n webshop: WebshopOverviewPage,\r\n webshopProduct: WebshopProductDetailPage,\r\n webshopShoppingCart: WebshopShoppingCartPage\r\n };\r\n let layoutType = \"\";\r\n let sidebarHtml = \"\";\r\n let showTitleBlock = false;\r\n\r\n if (kenticoPage !== null &&\r\n kenticoPage.MijnFnvEditPagina) {\r\n\r\n if (!!kenticoPage.MijnFnvEditPagina.ModernLayout) {\r\n layoutType = \"modern\";\r\n sidebarHtml = \"\";\r\n showTitleBlock = true;\r\n }\r\n\r\n if (!!kenticoPage.MijnFnvEditPagina.HidePageTitle) {\r\n showTitleBlock = false;\r\n }\r\n }\r\n\r\n let Component = pageTypeToComponentMap[pageType];\r\n if (Component !== undefined) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n\r\n static getCssClassForEditPageWidth(pageWidth: string, hasSideBar: boolean) {\r\n // ignore sidebar here : on editpage it is outside the container that uses these classes\r\n //if (hasSideBar === true) {\r\n // return 'col-md-8';\r\n //}\r\n if (pageWidth === \"breed\") {\r\n return \"col-md-12\";\r\n } else\r\n if (pageWidth === \"smal\") {\r\n return \"col-md-8 p-0 px-md-2\";\r\n }\r\n return \"col-md-10\";\r\n }\r\n\r\n static getCssClassForPageWidthViewPageType(pageWidth: string, hasSideBar : boolean, hasActionsAndHeadingForm : boolean) {\r\n if (hasSideBar === true) {\r\n return \"col-md-8\";\r\n }\r\n\r\n if (hasActionsAndHeadingForm === true) {\r\n return \"col-md-8\";\r\n }\r\n\r\n if (pageWidth === \"breed\") {\r\n return \"col-md-10\";\r\n } else\r\n if (pageWidth === \"smal\") {\r\n return \"col-md-7\";\r\n }\r\n return \"col-md-8\";\r\n }\r\n}\r\n","import { IFormConfig } from 'reactcomponents/interfaces/FormConfig';\r\nimport { KenticoFormViewmodel } from '../interfaces/PageInterfaces';\r\n\r\nexport const CreateFormViewModel = (FormDefinition, FormName, FormType, LinkToEditPage, Title: string, formConfig? : IFormConfig) : KenticoFormViewmodel => {\r\n return {\r\n \r\n FormDefinition : FormDefinition,\r\n \r\n FormConfig: formConfig,\r\n\r\n withLinkToFormPage : true,\r\n\r\n FormName: FormName,\r\n FormType: FormType,\r\n EditMode: false,\r\n editMode: false,\r\n WithLinkToFormPage: true,\r\n noAutoGenerateSummary: true,\r\n NextLink: LinkToEditPage,\r\n LinkText : \"Aanpassen\",\r\n DocumentID : \"\",\r\n ClassName : \"\",\r\n\r\n SummaryIntro : \"\",\r\n OnSuccessPopupMessage : \"\",\r\n OnSuccessPopupMessageVisualCheck: \"\",\r\n OnSuccessPopupDescription: \"\",\r\n IncludeCurrentPageAsBackAndSubmitUrl: true,\r\n backTitleForCurrentPageBackLink : Title,\r\n RestApiEndpoint : \"\",\r\n EditPageLink : \"\",\r\n OnSubmitSuccessLink : \"\",\r\n OnSubmitFailureLink : \"\",\r\n\r\n OnSubmitSuccessButton1Link: \"\",\r\n OnSubmitSuccessButton1LinkText: \"\",\r\n OnSubmitSuccessButton2Link: \"\",\r\n OnSubmitSuccessButton2LinkText: \"\",\r\n MijnFnvFormLinks: [],\r\n\r\n ErrorMessageTitle : \"\",\r\n ErrorMessageDescription : \"\",\r\n ErrorMessagePhoneNumberInfo : \"\",\r\n ErrorMessagePhoneNumber : \"\",\r\n ErrorMessageEmailInfo : \"\",\r\n ErrorMessageEmail : \"\",\r\n ErrorMessageButtonText : \"\"\r\n };\r\n};\r\n","import * as React from 'react';\r\nimport { AlertMessage } from '../AlertMessage';\r\n\r\nexport interface AlertData {\r\n title: string;\r\n type: string;\r\n link: string;\r\n linkText : string;\r\n}\r\n\r\nexport interface AlertProps {\r\n alerts: AlertData[];\r\n}\r\n\r\nexport const Alert = (props: AlertProps) =>\r\n \r\n {props.alerts !== undefined ? props.alerts.map((alert , index) => (\r\n
    \r\n
    \r\n \r\n
    \r\n
    )) : null\r\n }\r\n
    ;","import * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { MenuItem } from '../pages/interfaces/PageInterfaces';\r\nimport { matchPath } from 'react-router';\r\n\r\n\r\nexport const MijnFNVMenu = (menuItems: MenuItem[], currentLocationPath) => {\r\n return
      \r\n {menuItems.map((item , index) => {\r\n const matchedPath = matchPath(\r\n currentLocationPath, \r\n item.Url\r\n ); \r\n const isMenuActive : boolean = matchedPath !== null ? matchedPath.isExact : false;\r\n \r\n return (
    • {isMenuActive ? getMenuAsTextItem(item) : getLinkItem(item)}
    • );\r\n }\r\n )}\r\n
    ;\r\n};\r\n\r\n\r\n\r\n// Determine what css class we give to li\r\nconst isActive = (item: MenuItem) => (item.IsCurrent ? 'active' : '');\r\n\r\n// Determine how we present the link\r\nconst getLinkItem = (item: MenuItem) => {\r\n \r\n if (!item.IsClickable) {\r\n // not a link\r\n return {item.Title};\r\n } else {\r\n return {item.Title};\r\n }\r\n};\r\n\r\nconst getMenuAsTextItem = (item: MenuItem) => { \r\n return {item.Title};\r\n};"],"names":["storeAlert","title","type","link","linkText","action","clearAlert","getAlertsViaApi","url","userId","dispatch","formattedUrl","replaceTokens","then","response","json","map","item","Title","Type","Link","LinkText","storeRenderFormTrigger","triggerName","clearRenderFormTrigger","storeUser","email","lidnummer","name","accessToken","birthDate","membershipCardActivatedDate","roles","props","state","componentDidMount","this","showSystemAlerts","getApiUrl","render","alerts","AlertContainer","user","AlertWrapper","InputStepperText","useState","value","setValue","className","href","onClick","event","preventDefault","newValue","onChangeValue","disabled","enableTextInput","onChange","parseInt","target","maxValue","getAlertIcon","AlertMessage","alertClassName","indexOf","to","values","undefined","form","onFormUpdate","datasource","formName","setState","FormService","registerRelatedDataCallback","componentWillUnmount","formConfig","getCurrentFormConfig","sidebarContent","sidebarForForm","StringHelpers","replacePropertiesInString","HeaderWrapper","modern","pageWidthCssClass","children","IsMember","FullName","sidebarRef","createRef","setMemberDetails","memberDetails","getLidZoekenSubFunctionsForMember","memberName","isMember","setMemberDetailsCallback","AnimationService","enableFormAnimations","enableAnimations","componentDidUpdate","handleAnimations","triggerAnimations","MijnFnvEditPagina","kenticoPage","BackLinkIsExternal","BackLinkExternalUrl","standaloneFormInSite","withBackLink","MenuType","MenuHelpers","hideMenu","showMenu","showBreadCrumbs","kenticoPageType","hideBreadCrumbs","HideSteps","showBreadCrumbsEditPage","PageHelpers","setBreadcrumbsPageTitle","Titel","PageRenderHelpers","getCssClassForEditPageWidth","PageWidth","ShowSideBar","backToPageLinkText","BackToPageLinkText","backToPageLinkUrl","getMijnFNVRootPathForRole","BackToPageLinkUrl","additionalId","urlParams","context","search","gobackUrl","backTitleForCurrentPageBackLink","IncludeAdditionalIdInBackLink","setBackUrl","sidebar","sideBarHtml","showLineBelowTitleBlock","subTitle","introText","cssColumnsContentContainer","pageRowCssClass","mainBlockRowCssClass","nameMemberInLidZoekenSubfunction","memberState","pathParam","getUserId","showTitleBlock","showColumns","stickySidebar","layoutType","customEditPageClass","mainBlockEditPageCssClass","isNotCreateAccountPage","pathName","isExternalUrl","content","contentAfterForm","MijnFNVMenu","getSideMenu","additionalClassName","getWidgets","widgetDefinition","index","definition","editMode","stepsContainerRef","renderWidget","ref","current","innerHTML","offsetTop","offsetBottom","SidebarContent","contextType","MijnFNVPageContext","BackLink","slice","MemberState","PageTitle","headingClassName","fromString","showDivider","main","intro","subtitleClass","subtitleModifierClass","subtitleRender","Popup","opened","show","setShow","useEffect","setWindowState","window","location","pathname","addEventListener","hideDialog","isPopUp","history","pushState","onHide","refreshPage","Promise","resolve","reload","onHideClickEvent","headerImage","startsWith","ctaUrl","ctaText","isExternalLink","targetLink","formViewModel","formDefinition","fillViaApi","startForm","formSteps","formTitle","postUrl","doFormMultipartPost","thanksPageUrl","errorPageUrl","procesHandlers","OnSubmitSuccessLinkIncludeUrlGuid","reactRouteOnSuccess","reactRouteOnFailure","noAutoGenerateSummary","thanksPageUrlFields","requiredFieldTip","overrideBtnFormSubmitClassName","submitButtonIsDisabledIfFormIsNotDirty","pageSettings","subtitle","IncludeCurrentPageAsBackAndSubmitUrl","centered","size","onShow","style","backgroundImage","Header","Body","Footer","WebshopProductCard","urlPath","src","imageUrl","productName","productShortInfo","onGotoProductDetailPage","WebshopProductDetailEdit","options","setOptions","selectedProduct","setSelectedProduct","stock","setStock","error","setError","newOptions","variants","variant","push","skuId","toString","label","productId","length","method","status","text","data","styles","clearIndicator","container","control","dropdownIndicator","groupHeading","indicatorsContainer","indicatorSeparator","input","loadingIndicator","loadingMessage","menu","menuList","multiValue","multiValueLabel","multiValueRemove","noOptionsMessage","option","placeholder","singleValue","valueContainer","classNamePrefix","tracksStock","onClickAddButton","addToCartButtonText","WebshopProductDetail","productDescription","WebshopShoppingCart","shoppingCartUrl","totalCartCount","removeClass","addClass","remove","addBreadCrumbsParent","before","updateMenu","FNVLidnummer","fullName","widgetClassNames","formClass","alertClass","linkBlockClass","contentBlockClass","paymentBlockClass","idealBankKeuzeBlockClass","tipBlockClass","digitaleLedenPasBlockClass","lidZoekenBlockClass","downloadBlockClass","mijnFnvLinkBlockClass","profielFotoBlockClass","mijnFnvViewPageBlockClass","consentBlockClass","getForms","pageDefinition","RelatedViewModels","filter","MijnFnvContentBlockModel","ClassName","MijnFnvHandigeLinksBlockModel","MijnFnvRichTextBlockModel","MijnFnvProfielFotoBlockModel","MijnFnvPaymentBlockModel","MijnFnvLinkBlockModel","MijnFnvTipBlockModel","MijnFnvDigitaleLedenPasBlockModel","MijnFnvIdealBankSelectorBlockModel","MijnFnvLidZoekenBlockModel","MijnFnvViewPagina","ConsentDetailModel","Menu","getHeaderImage","pageWithHeaderImage","MijnFnvCTAViewPagina","MijnFnvOverzicht","HeaderFoto","showSteps","splitWidgetsToColumns","list","Math","ceil","getFrontendPageTypeFromKenticoPageType","pageTitle","breadcrumbForEditPage","document","querySelector","textContent","highlightMainNavigationItem","unhighlightAllMainNavigationItems","activeItem","parentElement","classList","add","backToMijnFnvLink","querySelectorAll","forEach","backLink","getCurrentRolePath","currentPathname","toLowerCase","clearLidZoeken","passthroughLidZoeken","fieldName","getHandler","handlerName","IntakeService","getQuestionAndAnswer","uuidV4","uuid","v4","formControllerRef","unmounted","wasOnSummaryStep","visitedSteps","wasSetupBeforeUnload","onStoreValues","valuesToStore","Object","assign","pageIsValidated","getFormValuesToStore","setFormValues","redirectToUrl","onCancelForm","handlers","ProcesHandlerHelpers","getProcessesForHander","CancelForm","handleProces","isPreventDefault","showPopupConfirm","showPopupOK","isShowPostOKWithVisualCheck","isShowPostOk","popupMessageOnFailure","onOverrideGetFormValues","initialFormValuesHandler","InitialFormValuesHandlerHelper","filterFormValuesWithNullAsValue","formValues","result","formField","hasOwnProperty","getInitialFormValues","initialValues","getDefaultFormValues","getFormValues","formDefinitions","currentForm","field","clearOnShowStep","initialValue","match","payload","setPayload","getPayload","onShowPollResults","kenticoFormName","_error","isShowPollResults","isSubmitting","pollResults","catch","err","console","stepIndex","isShowPostDataError","isUserError","initialFormValues","showThanksMessageAsInPageContent","isShowTooBigDataError","refreshId","onSubmit","bind","onSummaryBackToStepClick","onGotoPreviousStep","scrollToForm","setFieldError","onPostToBackend","onPopupConfirmOK","onPopupConfirmCancel","onPopupOKSubmit","thankYouMessageRef","resetPreloadForm","startPreloadForm","usePersistedQueryString","clearFormIfAllowed","activateFormController","activateForm","gotoFormStepNyName","setupOptionalBreadcrumbParent","setIsInLidZoekenSubFunctions","setLidZoekenSubFunctionsForMember","hasLidConsentForSpecificFormsOrIgnoreIfIsCurrentUser","backUrl","getBackUrl","leavePageProtection","off","on","userHasVoted","isPoll","prevProps","forms","autoPost","afterStoreValues","gotoNextFormStep","showEditPaginaBreadCrumbs","insertBreadCrumbParentLink","insertBreadCrumbParentText","formControlName","errorText","foundControl","Form","find","validation","post","revalidateForm","noScrollToTop","scrollTo","offset","top","animate","scrollTop","includeCurrentValues","createCookie","postToBackendPopup","onlySaveForm","DatasourceLoaderStateService","getLoadingCounter","disableAnimationsForForm","gotoPreviousStep","PopupOnOk","redirectUrl","replacePropertiesInUrl","HistoryService","getRouterHistory","onsuccess","onsuccessaction","addToUrl","broncode","DefaultValueByConditionHelper","setInitialValues","preloadState","getAnimationStateForForm","formIsPreloadingCssClass","formControllerProps","additionalCssClass","formCMSName","withLinkToFormPage","linkFormPage","nextLink","pageType","includeCurrentPageAsBackAndSubmitUrl","onFieldChange","popupText","errorMessageTitle","popupHeadingOnFailure","ErrorMessageService","message","errorMessageDescription","explanation","telephoneHint","errorMessagePhoneNumberInfo","telephoneNumber","errorMessagePhoneNumber","replace","telephoneText","okButtonText","errorMessageButtonText","errorMessageEmail","emailInfo","errorMessageEmailInfo","linkUrl","stayOnPage","popupTooBigDataText","popupMessageOnTooBigDataFailure","readonly","isReadOnly","renderFormController","isPrintView","FormController","key","formContainer","readOnly","summaryIntro","onSuccessPopupMessage","onSuccessPopupMessageVisualCheck","onSuccessPopupDescription","pageWithOnly1Step","onSubmitSuccessButton1Link","onSubmitSuccessButton1LinkText","onSubmitSuccessButton2Link","onSubmitSuccessButton2LinkText","isSubmitStep","isSummaryStep","steps","renderFormError","hideAlertsOnFormLevel","renderCustomField","formFieldDefinition","formController","formikBag","debug","customType","Templates","onOK","onCancel","items","noDataText","columns","showPrintButton","PopupError","PopupOk","onPopupOK","withIcon","description","FormContainer","lidZoeken","clearFormValues","fillFormViaApi","idInUrl","fillFormViaApiUrl","queryParameters","tokens","addQueryParameterSeparator","clearErrorOnApiError","setActiveStepForm","stepFormName","clearStep","clearExtraStep","storeStep","storeExtraStep","storeFormErrorMessage","errorMessage","clearFormErrorMessage","loginAction","storeLidZoeken","postcode","huisnummer","geboortedatum","zoekenOp","searchValue","additionalData","results","startLidZoeken","stopLidZoeken","FormControllerContainer","clearKenticoRule","rawRule","split","getKenticoMethodBody","getValidationMethodFromKenticoRule","rule","Function","getValidationMethodFromRegex","regex","getErrorNameFromKenticoRule","kenticoRule","_errormsg","getMacroMethodFromKenticoMacroRule","textWithHtmlEntities","txt","createElement","mergeFormDefinition","formDefinitionToMergeWith","handleVisiblity","properties","visiblemacro","macroFunctionFromKenticoRule","KenticoRulesHelper","visibilityCondition","kenticoVisibilityFunction","log","visible","handleEnabled","enabledmacro","enabledCondition","kenticoMacroFunction","handleValidation","required","formFieldRequiredFieldErrorMessage","FormLabelHelpers","getLabelWithoutAsterisk","fieldcaption","rules","kenticoRules","Array","isArray","validationRules","ruleText","validationFunctionFromKenticoRule","DecodeHtmlEntity","validationerrormessage","validationFunction","assignKenticoRules","getContributieBlock","category","membershipAmountResourcestring","additionalTextResourcestring","additionalText","getContributieTabel","formFieldOverrides","controls","KenticoRulesCreator","getAddressControls","prefixFieldName","settings","PrefixVoorAdresblokVelden","IkWoonInLabel","WoonplaatsLabel","isRequired","ApplyRequiredFieldSetting","macroFunctionIsNederlandFromKenticoRule","getRequiredValidation","getAddressControlsReadOnly","getRegexForNameFields","addFormStep","formStep","nextField","controlname","formStepCaptions","formStepCaption","Subtitle","buildMacroRule","setVisibilityMacro","visibilityRule","parseOptionsString","optionsString","optionsSeparator","splitted","trim","icon","parseOptionsStringOld","labels","icons","FormControlBuilder","getFormFieldOverridesForField","skip","cssClass","groupCssClass","GroupStyling","Collapsable","collapsable","initialCollapsableState","InitialCollapsableState","dropdown","OptionsParser","Options","valueoptions","defaultSelection","defaultValue","sortItems","SortItems","PicklistMode","PicklistTemplate","dropdownMultiple","addMoreLabel","AddMoreLabel","maxItems","MaxItems","displayMode","DisplayMode","dataType","separator","checkbox","optionyes","valueyes","checkBoxLabel","Text","checkboxMultiple","formControl","selectAll","SelectAll","Separator","selectAllText","SelectAllText","switch","showSwitchInDisabledState","button","Icon","buttonMode","radio","subtype","iconoptions","inputcontrolstyle","CorrectAnswer","correctAnswer","ShowRadioButtonInDisabledState","showRadioButtonInDisabledState","RepeatDirection","repeatDirection","controlNameLowercase","maskCharsExpression","KenticoFormControlHelpers","qrcodescanner","qrcontrol","isUsedToScanJson","IsUsedToScanJson","phonenumber","maxlength","hasNumericKeyboard","kenticoValidationRules","formFieldPhoneNumberErrorMessage","numericinputfield","alwaysUppercase","AllowDecimals","allowDecimals","isNumeric","Min","Max","isNaN","minAsNumber","parseFloat","maxAsNumber","minDecimalPlaces","maxDecimalPlaces","floor","minmaxerror","formFieldMinMaxErrorMessage","toFixed","formFieldMinMaxNoMaxErrorMessage","kind","formFieldGenericErrorMessage","min","max","onlyExactHalf","intialsinputfield","hasPopover","formFieldInititalsErrorMessage","fileupload","fileFormats","emailAddressList","emailSeparator","emailError","iban","allowPrefixSpacesInInputOnly","textarea","ShowTextAreaInDisabledState","showTextAreaInDisabledState","Size","password","datetime","mask","minage","minyear","popupConfirm","popupOk","grid","JSON","parse","ListDefinition","NoDataText","contributieBlock","periodText","PeriodText","beforeText","BeforeText","afterText","AfterText","toonLidWordenButton","ShowMembershipButton","lidWordenButtonTitle","MembershipButtonCaption","toonLidVoordelen","ShowAdvantagesMembership","lidVoordelenRichtText","MembershipAdvantages","lidVoordelenTitle","MembershipAdvantagesTitle","lidVoordelenBeforeText","MembershipAdvantagesIntro","hintContributieTarief","MembershipFeeHint","tipBlock","tip","Tip","tipIcon","tipLayout","Layout","alertBlock","alert","Alert","AlertType","horizontalRuler","richTextEditor","richTextContent","Content","newField","showOnSummaryStep","MacroHelper","PlaceInFormArea","customTemplate","CustomTemplate","templateType","TemplateType","ctaBlock","ctaTitle","CtaTitle","ctaDescription","CtaDescription","ctaButtonLink","CtaButtonLink","ctaButtonText","CtaButtonText","headingTwo","chooseLocation","petitieTeller","maxPetitionCount","MaxPetitionCount","StartValuePetitionCount","loginRedirect","reCaptcha","siteKey","SiteKey","kenticoFormControlToReactFormControlMap","builder","isOfType","types","CONTROL_TYPES_ALWAYS_SUMMARY","generateSummaryStep","component","summaryFields","currentSection","addControls","moveControlsToSummary","addFormControlsToSummary","addControlNames","FormConfigHelpers","formStepsForEach","contains","section","formCount","_","editFormLinkAdded","handleField","prefixVoorAdresblokVelden","isAdresBlokField","generatedSummaryFields","alwaysShowSummaryField","id","summaryLabel","attachEditLinkInSummary","isSummary","hideEditLink","orgField","viaOption","fields","summarySendButtonLabel","summaryStep","toSummaryStepButtonCaption","LogoutPopup","okButtonCssContainerName","btnCssClass","initalFormConfig","isEmptyFormConfig","property","getDefaultFormConfig","getMergedFormConfig","categoryName","formOverrides","stepName","autoInsertFormFieldGroup","unshift","isVoorlettersFieldFound","FormConfig","FormStepHelpers","urlMappings","urlMappingsRelatedData","parameterMappings","outputMappings","PageTypeService","getPageType","fielddescription","explanationtext","defaultvalue","SummaryLabel","fieldCssClass","fieldcssclass","createControl","mapping","additionalFormControls","buttonCaption","buttons","submitButtonCaption","convertKenticoRawFormToJSONFormAsData","KenticoformHelpers","LogoutPopupTitle","LogoutPopupDescription","renderFormTrigger","renderFormTriggers","triggers","formContent","formproperties","formType","initialData","onPopupOkClick","WidgetForm","KenticoFormContained","KenticoFormContainer","TopMenuItemLinks","ToptaakLink","ToptaakTitle","MijnFNVHero","MijnFnvTopTaken","TaskIntroText","TopTaken","renderColumns","e","column","TopMenuColumns","renderPopup","popupModel","PopupModel","popupModelId","DocumentID","fetch","CTAUrl","CTAText","FormName","FormDefinition","ShowSystemNotifications","ShowUserRoleLabel","UserRoleLabel","widgets","widgetColumn","DashboardPage","getProcesses","procesName","Put_preprocess","execute","onSuccess","onError","zoekenForm","ZoekenOp","Lidnummer","includes","LidZoekenHelpers","getPossibleSearchForms","Put_postprocess_Success","passthroughFieldsToGlobalState","passThroughFieldName","Postcode","Huisnummer","Geboortedatum","Put_postprocess_Fail","reject","responseText","isError","ErrorText","receiveFieldsViaGlobalState","additionalFormData","IsUserError","linkedForm","clearFields","scrollIntoViewElement","getElementById","scrollIntoView","getUserSettings","localStorage","getItem","browserStoreUserSettings","setItem","stringify","mijnFnvViewPagina","HasActionsAndHeadingForm","DetailFormViewModel","getCssClassForPageWidthViewPageType","DetailFormDefinition","FormType","headingIsMain","createFormWidget","shoppingCart","totalCount","onClickAddProduct","productSKU","WebshopOverviewPagina","MijnFnvWebshopOverviewPagina","WebshopCartUrl","getProducts","cartItem","quantity","products","product","ProductName","ProductShortName","ProductImageUrl","UrlPath","ProductSKUId","shoppingCartIsValidated","shoppingCartIsValid","shoppingCartErrors","validateShoppingCart","errors","onRemoveProduct","onClickCheckoutButton","WebshopShoppingCartPagina","MijnFnvWebshopShoppingCartPagina","FoutmeldingGeenArtikelenInWinkelwagen","FoutmeldingControleerWinkelwagen","OrderPageUrl","gotoProductDetail","productDetailUrl","productShortName","FoutmeldinErIsNietGenoegVoorraad","inventory","OrderButton","OrderReasons","productCount","updateProduct","WebshopProductDetailPagina","MijnFnvWebshopProductDetailPagina","ProductDescription","Stock","TracksStock","AddToShoppingCartButton","spaceColumn","contentColumn","formTitleColumn","CTAViewPagina","ContentTitle","Intro","CheckDataTitle","RelatedFormBlockViewModels","formBlock","FormViewModel","MijnFnvCTAViewFormBlockModel","EditPageLink","QRCodeContainer","level","DigitaleLedenpasLidnummerNaam","DigitaleLedenpasLidnummerNaamContainer","isLoggedIn","Alias","alt","print","DigitaleLedenpasPage","MijnFNVConsentBlock","consentId","checked","consent","accept","revoke","downloadRef","apiUrl","Lidmaatschapsnummer","Naam","FormControlHelpers","convertValueToType","GeboorteDatum","RechtenDatum","htmlElement","element","canvas","image","toDataURL","pdf","addImage","save","ContainedMijnFNVDigitaleLedenPasBlock","MijnFNVDigitaleLedenPasBlock","MijnFnvLinks","dataContext","IsInternalMijnFNVLink","CssClass","OpenLinkInNewTab","LinkDescription","selectedBank","issuerList","doRedirect","customerTransactionDescription","totalAmount","isTransactionNotFound","isLoading","hasError","isSendingData","onsubmit","transactionGuid","headers","Accept","body","reply","showErrorOnApiError","Url","CustomerDescription","Amount","formatAmountAsCurrencyInEuros","amount","bankSelectorLabel","selectBankPlaceholder","paymentButtonTitle","MijnFNVIdealBankSelector","MijnFNVIdealBankSelectorContained","qrcode","geboorteDatum","convertDateToNL","zoekenop","searchvalue","getIsInLidZoekenSubFunctions","postPutMethod","defaultSearch","MijnFNVLidZoekenZoeker","MijnFNVLidZoekenZoekerContained","ensureBoolValue","formLinkBlocks","isHidden","el","getComputedStyle","display","scrollToLinks","menuHeight","$","height","scrollToLinkBlockOnMobile","deviceXS","getElementsByClassName","deviceSM","triggerLinksBlock","BooleanUtil","setConsentLidZoeken","Consent","Invoeromgeving","getCurrentRole","put","createFormData","setFieldValue","isSearchInitialised","memberFoundPluralText","totalAmountOfResults","memberFoundText","moreThenMaxResultsFoundText","isShowLinks","actions","LidZoekenResultaatHelpers","MijnFNVHandigeLinks","LidZoekenActionsTitle","links","isSearching","memberNotFoundText","memberNotFoundExplanation","MijnFNVLidZoekenResultsContained","MijnFNVLidZoekenResults","queryParams","pageNumber","hasMoreResults","MijnFNVLidZoekenLoadMore","MijnFNVLidZoekenLoadMoreContained","layout","ctaImage","layoutCssClass","buttonLayoutCssClass","buttonStylingCssClass","showOnlyButton","mainTitle","openLinkInNewTab","linkButtonText","numberOfMonths","montlyAmount","idealStatusCode","idealStatusDescription","maxMonths","paymentMessage","openMembershipFee","isIdealEnabled","openContributions","activeRow","openContributionAmount","openContributionAmountAsNumber","isPayNL","isFirstPopoverOpen","isSecondPopoverOpen","getPaymentMessage","contributionInfo","OpenstaandeContributie","noOpenContributionText","openContributionText","AantalMaandenVooruitbetalen","ReturnUrl","payButtonUrl","TransactionGuid","fetchUrl","statusCode","statusAction","ec","trxid","notifications","notification","MaandcontributieBedrag","IdealIsEnabled","OpenstaandeContributies","Betaaloverzicht","isPaymentAllowed","getTotalPaymentAmount","payXMonthContributionTextParts","payXMonthContributionText","beforeXMonthLabel","afterXMonthLabel","loop","openstaandeContributies","openstaandeContributiesFormDefinition","noResults","groupByColumnName","groupByColumnTitle","gridDetailsColumns","gridColumns","cssClasses","addValueAsCssClass","decimalSeparator","currencyFormat","contributionTitle","contributionInformation","Accordion","A","activeKey","onSelect","Toggle","as","Button","eventKey","Collapse","Grid","payInAdvanceTitle","payInAdvanceInformation","totalAmountText","payButtonText","MijnFNVPayment","MijnFNVPaymentContained","photoUrl","formPageUrl","LinkSingle","MijnFNVViewPageBlock","getFormConfigFromKenticoForm","orgFormConfig","restAPIEndpoint","RESTAPIEndpoint","formDefinedFormConfig","useNoAutoGenerateSummaryFromForm","popupOK","combineStringOrStringArrayProps","SummaryValueBelowFields","summaryValueBelowFields","viewModel","viewModelformConfig","formConfigFromKenticoForm","replaceLinkCodeNamesByUrls","MijnFnvFormLinks","RestApiEndpoint","onSubmitSuccessLink","OnSubmitSuccessLink","IncludeAdditionalIdInSubmitLink","hash","getSubmitSuccessLink","OnSubmitFailureLink","handleFormConfig","enableFormAsWidget","OnSubmitSuccessButtonLink1","OnSubmitSuccessButton1Link","OnSubmitSuccessButtonLink2","OnSubmitSuccessButton2Link","orgReactRouteOnSuccess","NextLink","SummaryIntro","OnSuccessPopupMessage","OnSuccessPopupMessageVisualCheck","OnSuccessPopupDescription","OnSubmitSuccessButton1LinkText","OnSubmitSuccessButton2LinkText","ErrorMessageTitle","ErrorMessageDescription","ErrorMessagePhoneNumberInfo","ErrorMessagePhoneNumber","ErrorMessageEmailInfo","ErrorMessageEmail","ErrorMessageButtonText","widget","createLinkBlockWidget","MijnFNVContent","createContentBlockWidget","MijnFNVProfielFoto","FormulierPagina","ProfilePhotoUrl","createProfielFotoBlockWidget","PayButtonText","PayButtonUrl","TotalAmountText","PayXMonthContributionText","OpenContributionText","NoOpenContributionText","ContributionTitle","ContributionInformation","PayInAdvanceTitle","PayInAdvanceInformation","createPaymentBlockWidget","BankSelectorLabel","SelectBankPlaceholder","PaymentButtonTitle","createIdealBankKeuzeBlockWidget","MijnFNVTipBlock","TipText","TipIcon","TipLayout","createTipBlockWidget","ApiUrl","createDigitaleLedenPasBlockWidget","MijnFNVLinkBlock","MainTitle","LinkButtonText","Visible","CTAImage","HeaderImage","createMijnFnvLinkBlockWidget","searchMemberFormConfig","SearchMemberForm","SearchMemberFormConfig","searchMemberLoadMoreFormConfig","SearchMemberLoadMoreForm","SearchMemberLoadMoreFormConfig","memberDetailsFormConfig","MemberDetailsForm","MemberDetailsFormConfig","SearchMemberFormName","MemberDetailsFormName","MemberFoundText","MemberFoundPluralText","MemberNotFoundText","MemberNotFoundExplanation","MoreThenMaxResultsFoundText","SearchMemberLoadMoreFormName","createLidZoekenWidget","createViewPageBlockWidget","Description","DocumentGuid","IsOptedIn","createConsentBlockWidget","getPageTypeComponent","pageTypeToComponentMap","dashboard","edit","EditDataPage","view","ViewDataPage","ctaview","CTAViewDataPage","digitaleledenpas","webshop","WebshopOverviewPage","webshopProduct","WebshopProductDetailPage","webshopShoppingCart","WebshopShoppingCartPage","sidebarHtml","ModernLayout","HidePageTitle","Component","pageWidth","hasSideBar","hasActionsAndHeadingForm","CreateFormViewModel","LinkToEditPage","EditMode","WithLinkToFormPage","menuItems","currentLocationPath","matchedPath","isMenuActive","isExact","getMenuAsTextItem","getLinkItem","IsClickable"],"sourceRoot":""}