{"version":3,"sources":["settings/settings-config.ts","contexts/validation-context.js","utilities/constants.js","components/alerts.tsx","landing/landing-actions.ts","landing/featured/featured-card.tsx","landing/event-registrations.tsx","landing/landing-page.tsx","utilities/util.ts","clear-cache.js","autobuild-version.js","index.tsx","utilities/ui.js","components/controls.jsx","store/configureStore.ts","landing/landing-config.ts"],"names":["initialState","loaded","undefined","showPreview","saving","identity","fileLimitReached","showValidation","fmsSessionId","applyButtonEnabled","client","id","name","landingPageEnabled","locations","forms","fmsUrl","settingsReducer","state","action","_action$payload","window","parent","embedId","document","documentElement","scrollHeight","innerHeight","body","classList","add","setTimeout","remove","postMessage","type","height","getBoundingClientRect","_objectSpread","payload","images","ValidationContext","React","createContext","isTouchDevice","navigator","maxTouchPoints","msMaxTouchPoints","ImageWarning","ImageLimit","Alerts","alerts","useSelector","store","length","computeClass","alert","createElement","className","map","key","role","onClick","dispatch","closeAlert","aria-hidden","msg","showAlert","Math","random","alertsReducer","concat","_toConsumableArray","filter","a","actions","clientId","location","pathname","substr","lastIndexOf","featured","URLSearchParams","search","get","language","languages","Array","isArray","i","keys","fetch","method","then","response","json","data","i18n","use","initReactI18next","init","resources","en","translation","lng","fallbackLng","interpolation","escapeValue","loadTranslation","apiRequest","Date","valueOf","result","catch","item","isPreview","formUrl","mode","previewFormUrl","query","embedid","url","referrer","href","FeaturedCard","props","_item$imageUrl","nameRef","useRef","descriptonRef","descriptionHtml","useMemo","html","node","div","innerHTML","DOMPurify","sanitize","nodes","createTreeWalker","NodeFilter","SHOW_TEXT","nextNode","nodeValue","text","textContent","substring","__html","getTooltipHtml","description","FormTooltip","show","tooltip","t","style","backgroundImage","checkImageCache","imageUrl","onlyIfTruncatedRef","ref","dangerouslySetInnerHTML","EventRegistrations","_data$events","monthMenuLength","allEvents","landing","_useState","useState","filtered","selectedMonth","selectedDropdownMonth","eventSearchResults","monthsDisplayableLength","dropdownOptions","_useState2","_slicedToArray","setState","update","c","s","selectRef","months","events","e","eventDate","event","today","oneYearAhead","setFullYear","getFullYear","isWithinOneYear","forEach","eventMonth","date","d","toLocaleString","month","getMonth","eventMonthList","find","m","items","push","generateDropdownOptions","useEffect","selectedDropdown","calcMonthsDisplayable","addEventListener","newLength","FormIconInput","value","onChange","_data$events2","resize","val","toLowerCase","searchResults","_event$name","_event$description","includes","placeholder","icon","dataQa","replace","toString","index","formatEventDate","Fragment","slice","_selectRef","_selectRef$select","select","clearValue","clearSelectValue","Select","components","IndicatorSeparator","label","options","availWidth","innerWidth","monthsDisplayable","min","toLocaleDateString","day","year","LandingPage","_useSelector","error","history","replaceState","color","backgroundColor","bg","cardBg","from","querySelectorAll","card","row1","row2","width1","width2","Container","Row","Col","xs","md","eventMonthsDisplayLength","delay","arguments","appState","getState","customHeaders","headers","JSON","stringify","success","makeblob","dataURL","indexOf","contentType","parts","split","raw","decodeURIComponent","Blob","rawLength","atob","uInt8Array","Uint8Array","charCodeAt","isEmptyGuid","guid","count","list","selector","reduce","cnt","_numberSeparator","_numberFormatterRegex","_numberSeparatorRegex","RegExp","formatCurrency","num","allowNegative","number","amt","allowCurrency","trim","parseFloat","parseNumber","isNaN","round","toFixed","dateFormat","withClearCache","Component","isLatestBuild","setIsLatestBuild","meta","latestVersion","build","refreshCacheAndReload","caches","names","_step","_iterator","_createForOfIteratorHelper","n","done","delete","err","f","reload","SettingsPage","lazy","WrappedSettingsPage","Suspense","fallback","ClearCacheComponent","console","log","Provider","ConnectedRouter","Switch","Route","exact","path","component","App","ReactDOM","render","getElementById","hasEllipsis","element","offsetWidth","scrollWidth","offsetHeight","sendResize","container","overflowY","uncached","breakImageCache","previous","updated","decoded","src","iframe","display","encodeURIComponent","appendChild","refreshComplete","message","source","contentWindow","removeEventListener","parentNode","removeChild","clearBrowserCache","p","getStyle","getStyles","refresh","v","useContext","getError","format","inFocus","current","activeElement","Validation","valid","validationMessage","determineLabelPlacement","disabled","onFocus","onFocusAnimation","onInputChange","onBlur","target","closest","removeAttribute","onBlurAnimation","maxLength","data-qa","data-keyboard","helpText","FormSelect","selected","labelClass","menuPlacement","maxMenuHeight","isSearchable","showAsTouch","enableClear","menuPortalTarget","inModal","onBlurDropdownAnimation","textFieldProps","InputLabelProps","shrink","isClearable","isDisabled","classNamePrefix","filterOption","customFilter","onMenuOpen","querySelector","menuClassName","isMulti","_readOnlyError","closeMenuOnSelect","note","children","placement","trigger","_useState3","_useState4","needed","setNeeded","check","truncated","OverlayTrigger","rootClose","overlay","Tooltip","Object","assign","ValidationMessage","hasAttribute","setAttribute","formGroup","field","getNoStyles","shift","join","baseUrl","getElementsByTagName","getAttribute","createBrowserHistory","basename","reducers","settings","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","apply","applyMiddleware","configureStore"],"mappings":"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","file":"static/js/main.553b8dc9.chunk.js","sourcesContent":["\r\nexport interface SettingsState {\r\n loaded: boolean | undefined,\r\n showPreview: boolean,\r\n saving: boolean,\r\n identity: string,\r\n directLink?: string,\r\n fileLimitReached: boolean,\r\n showValidation: boolean\r\n fmsSessionId: string,\r\n images?: Array,\r\n currentLocation?: Location,\r\n embedId?: string,\r\n applyButtonEnabled: boolean,\r\n\r\n client: ClientData,\r\n forms: Array,\r\n fmsUrl: string\r\n}\r\n\r\nexport interface ClientData {\r\n id: string,\r\n name: string | null,\r\n landingPageEnabled: boolean,\r\n locations: Array\r\n}\r\n\r\nexport interface Location {\r\n id: string,\r\n name: string,\r\n featured: Array,\r\n eventsEnabled: boolean,\r\n eventMonthsDisplayLength: number\r\n}\r\n\r\nexport interface FeaturedItem {\r\n formId?: string,\r\n imageUrl?: string,\r\n}\r\n\r\nexport interface FormItem {\r\n formId: string,\r\n name: string,\r\n description: string,\r\n categories: Array,\r\n formUrl: string,\r\n status?: FormStatus\r\n}\r\n\r\nexport interface FormStatus {\r\n canSubmit: boolean,\r\n isArchived?: boolean,\r\n isDeleted?: boolean,\r\n isFundExpired?: boolean,\r\n isFuture?: boolean,\r\n isRegistrationFull?: boolean,\r\n isSubmissionClosed?: boolean,\r\n isSubmissionFull?: boolean,\r\n isUnpublished?: boolean\r\n}\r\n\r\n\r\n\r\nconst initialState = {\r\n loaded: undefined,\r\n showPreview: false,\r\n saving: false,\r\n identity: \"\",\r\n fileLimitReached: false,\r\n showValidation: false,\r\n fmsSessionId: \"\",\r\n applyButtonEnabled: true,\r\n\r\n client: {\r\n id: \"\",\r\n name: \"\",\r\n landingPageEnabled: false,\r\n locations: [],\r\n },\r\n forms: [],\r\n fmsUrl: \"\",\r\n locations: []\r\n}\r\n\r\nexport function settingsReducer(state: SettingsState | undefined, action: any): SettingsState {\r\n if (state === undefined)\r\n return initialState;\r\n\r\n\r\n if (window.parent && state.embedId) {\r\n // If there currently isn't a scrollbar, prevent flicker\r\n if (document.documentElement.scrollHeight <= window.innerHeight) {\r\n document.body.classList.add(\"no-scrollbar\");\r\n setTimeout(() => document.body.classList.remove(\"no-scrollbar\"), 300); // remove in case we want a scrollbar\r\n }\r\n\r\n setTimeout(() => window.parent.postMessage({ embedId: state.embedId, type: \"resize\", height: document.documentElement.getBoundingClientRect().height }, \"*\"), 0);\r\n }\r\n\r\n switch (action.type) {\r\n case 'LOAD_CLIENT_SETTINGS':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n loaded: true\r\n }\r\n\r\n case 'UPDATE_SETTINGS':\r\n return { ...state, ...action.payload };\r\n\r\n\r\n case 'UPDATE_CLIENT':\r\n return {\r\n ...state,\r\n client: { ...state.client, ...action.payload }\r\n };\r\n\r\n case 'UPDATE_IMAGE_LIBRARY':\r\n var images = action.payload?.images || state.images;\r\n return {\r\n ...state,\r\n images: images\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}","import React from \"react\";\r\nimport { useContext, useState, useEffect } from \"react\";\r\n\r\n\r\nconst ValidationContext = React.createContext({});\r\nexport default ValidationContext;\r\n\r\nexport function useValidation(validator, data, key) {\r\n const [context, refresh] = useState({});\r\n if (!context.state)\r\n context.state = create(context, refresh, key);\r\n\r\n // Validate (if things have changed)\r\n const state = context.state;\r\n if (changed(state, validator, data)) {\r\n state.validator = validator;\r\n state.data = data;\r\n state.errors = revalidate(validator, data);\r\n }\r\n\r\n // Add validity to parent context\r\n const parent = useContext(ValidationContext);\r\n\r\n useEffect(() => {\r\n if (parent && parent.children) {\r\n parent.children.push(state);\r\n return () => cleanup(parent, state); // Cleanup\r\n }\r\n }, [parent, state]);\r\n\r\n return state;\r\n}\r\n\r\nfunction revalidate(validator, data) {\r\n return validator ? validator(data) : {};\r\n}\r\n\r\nfunction create(context, refresh, key) {\r\n const state = {\r\n key: key,\r\n show: false,\r\n errors: {},\r\n children: []\r\n };\r\n\r\n state.getError = (name) => state.errors[name];\r\n state.allValid = () => allValid(state.errors, state.children);\r\n state.hasOwnErrors = () => Object.keys(state.errors).length > 0;\r\n state.hasDisplayErrors = () => state.show && !state.allValid();\r\n state.getDisplayError = (name) => state.show ? state.getError(name) : null;\r\n state.setShow = (shouldShow) => {\r\n if (state.show !== shouldShow) {\r\n state.show = shouldShow;\r\n refresh({ ...context });\r\n }\r\n if (state.children)\r\n state.children.forEach(c => c.setShow(shouldShow));\r\n };\r\n return state;\r\n}\r\n\r\nfunction cleanup(parent, context) {\r\n const index = parent.children.indexOf(context);\r\n if (index > -1)\r\n parent.children.splice(index, 1);\r\n}\r\n\r\nfunction allValid(errors, children) {\r\n if (Object.keys(errors).length !== 0)\r\n return false;\r\n return !children || children.every(c => allValid(c.errors, c.children));\r\n}\r\n\r\nfunction changed(state, validator, data) {\r\n if (state.validator !== validator)\r\n return true;\r\n\r\n if (state.data instanceof Array) {\r\n if (!(data instanceof Array) || state.data.length !== data.length)\r\n return true;\r\n return state.data.some(function (d, i) { return d !== data[i] });\r\n }\r\n return state.data !== data;\r\n}","export function isTouchDevice() {\r\n return ('ontouchstart' in window) ||\r\n (navigator.maxTouchPoints > 0) ||\r\n (navigator.msMaxTouchPoints > 0);\r\n}\r\n\r\nexport function isAndroid() {\r\n const ua = navigator.userAgent.toLowerCase();\r\n const isAndroid = ua.indexOf(\"android\") > -1;\r\n if (isAndroid)\r\n return true;\r\n else\r\n return false;\r\n}\r\n\r\nexport function isIOS() {\r\n if (!!navigator.userAgent.match(/(iPad|iPhone|iPod)/i))\r\n return true;\r\n else\r\n return false;\r\n}\r\n\r\n\r\nexport const ImageWarning = 90;\r\nexport const ImageLimit = 100;","import React from \"react\";\nimport { useSelector } from \"react-redux\";\r\nimport { ApplicationState } from \"../store/configureStore\";\r\nimport '../styles/alerts.scss';\r\nimport { dispatch } from \"../utilities/util\";\r\n\n\n\nexport function Alerts() {\n const alerts = useSelector(store => store.alerts.alerts);\r\n if (alerts.length === 0)\r\n return null;\n\n\n function computeClass(alert: AlertItem) {\n if (alert.type === \"danger\")\n return \"alert-danger\";\n else if (alert.type === \"success\")\n return \"alert-success\";\n else if (alert.type === \"info\")\n return \"alert-info\";\n else if (alert.type === \"warning\")\n return \"alert-warning\";\n }\n\n function closeAlert(alert: AlertItem) {\n dispatch(\"REMOVE_TOAST\", alert);\r\n }\n\n\n return (\n
\n {alerts.map((alert) => (\n
\n \n
{alert.msg}
\n
\n ))}\n
\n );\n}\n\n\nexport function showAlert(type: string, msg: string) {\r\n const alert = { key: Math.random(), type: type, msg: msg };\r\n dispatch(\"ADD_TOAST\", alert);\r\n setTimeout(() => dispatch(\"REMOVE_TOAST\", alert), 8000);\r\n}\r\n\r\nexport interface AlertState {\r\n alerts: AlertItem[]\r\n}\r\n\r\nexport interface AlertItem {\r\n key: string,\r\n type: string,\r\n msg: string\r\n}\r\n\r\nexport function alertsReducer(state: AlertState | undefined, action: any) {\r\n if (state === undefined)\r\n return { alerts: [] };\r\n\r\n switch (action.type) {\r\n case 'ADD_TOAST':\r\n return { ...state, alerts: [...state.alerts, action.payload] };\r\n\r\n case 'REMOVE_TOAST':\r\n return { ...state, alerts: state.alerts.filter(a => a != action.payload) };\r\n\r\n default:\r\n return state;\r\n }\r\n}","import { apiRequest, dispatch } from '../utilities/util';\r\nimport { LandingData, LandingFeaturedItem } from './landing-config';\r\nimport i18n from 'i18next';\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\nexport const actions = {\r\n\r\n load: function () {\r\n // Load from server\r\n var clientId = window.location.pathname.substr(window.location.pathname.lastIndexOf(\"/\") + 1);\r\n if (clientId === \"dev\") {\r\n clientId = \"24c12cf8-10f5-4026-b1e1-de9ea920e724\";\r\n } else if (clientId.length === 0) {\r\n dispatch(\"LOAD_LANDING\", { featured: [{ name:\"No client id specified\"}] });\r\n return;\r\n }\r\n\r\n var location = new URLSearchParams(window.location.search).get(\"location\");\r\n\r\n loadTranslation();\r\n\r\n dispatch(\"UPDATE_LANDING\", { loaded: false, clientId: clientId }, true);\r\n apiRequest(\"GET\", \"/api/v1/client/\" + clientId + \"?location=\" + (location || \"\") + \"&nocache=\" + new Date().valueOf(), null)\r\n .then(result => dispatch(\"LOAD_LANDING\", result))\r\n .catch(result => dispatch(\"LANDING_ERROR\", result));\r\n },\r\n\r\n goToForm: function (item: LandingFeaturedItem, isPreview: boolean | undefined) {\r\n if (!item.formUrl)\r\n return;\r\n\r\n if (isPreview) {\r\n dispatch(\"PREVIEW_FORM\", { mode: \"preview-form\", previewFormUrl: item.formUrl + \"&show-back=true\" });\r\n return;\r\n }\r\n\r\n var query = new URLSearchParams(window.location.search);\r\n var embedid = query.get(\"embedid\");\r\n if (embedid) {\r\n // URL contains embedid, meaning that we're in an iframe, extract and post it along with the url\r\n window.parent.postMessage({ id: embedid, url: item.formUrl }, query.get(\"parent\") || document.referrer);\r\n return;\r\n }\r\n\r\n // Embedid not in URL, this means we're not in an iframe so we can just redirect\r\n window.location.href = item.formUrl + \"&show-back=true\";\r\n },\r\n\r\n comeBackFromFormPreview: function () {\r\n dispatch(\"PREVIEW_FORM\", { mode: \"preview\", previewFormUrl: null });\r\n },\r\n}\r\n\r\n\r\n\r\nfunction loadTranslation() {\r\n\r\n // support for HTML 5.1 \"navigator.languages\"\r\n var language = null;\r\n var languages = window.navigator.languages;\r\n if (Array.isArray(languages)) {\r\n for (var i = 0; i < languages.length; i++) {\r\n language = languages[i];\r\n if (language && language.length)\r\n break;\r\n }\r\n }\r\n\r\n // support for other well known properties in browsers\r\n if (!language || !language.length) {\r\n var keys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'];\r\n for (var i = 0; i < keys.length; i++) {\r\n language = (window.navigator as any)[keys[i]];\r\n if (language && language.length)\r\n break;\r\n }\r\n }\r\n\r\n var lang = \"en\";\r\n //Check For Spanish\r\n //if (language.indexOf(\"es\") === 0) {\r\n // lang = \"es\";\r\n //}\r\n\r\n // Load Form Translation\r\n fetch(\"/static/translations/\" + lang + \".json\", { method: \"GET\" })\r\n .then(response => response.json() as Promise)\r\n .then(data => {\r\n i18n\r\n .use(initReactI18next)\r\n .init({\r\n resources: {\r\n en: {\r\n translation: data\r\n }\r\n },\r\n lng: \"en\",\r\n fallbackLng: \"en\",\r\n interpolation: {\r\n escapeValue: false\r\n }\r\n });\r\n\r\n dispatch(\"UPDATE_SETTINGS\", {});\r\n });\r\n}\r\n\r\n\r\n","import React, { useMemo, useRef, useState } from \"react\";\r\nimport i18n from 'i18next';\r\nimport { LandingFeaturedItem } from \"../landing-config\";\r\nimport { actions } from \"../landing-actions\";\r\nimport DOMPurify from 'dompurify';\r\nimport { FormTooltip } from \"../../components/controls\";\r\nimport { checkImageCache } from \"../../utilities/ui\";\r\n\r\nconst defaultImage = \"/static/images/mountains.png\";\r\n\r\nexport interface FeaturedItemProps {\r\n item: LandingFeaturedItem,\r\n isPreview?: boolean\r\n}\r\n\r\n\r\nexport default function FeaturedCard(props: FeaturedItemProps) {\r\n const { item, isPreview } = props;\r\n const nameRef = useRef() as any;\r\n const descriptonRef = useRef() as any;\r\n const descriptionHtml = useMemo(() => getTooltipHtml(item.description), [item.description]);\r\n \r\n return (\r\n \r\n
!isPreview && actions.goToForm(item, isPreview)}>\r\n
\r\n \r\n
{item.formUrl ? item.name : i18n.t('settings.no-form-available')}
\r\n
\r\n
} onlyIfTruncatedRef={descriptonRef} className=\"mb-landing-tooltip\">\r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nfunction getTooltipHtml(html: string): any {\r\n var div = document.createElement(\"div\");\r\n div.innerHTML = DOMPurify.sanitize(html);\r\n\r\n // Add spaces between nodes\r\n var node;\r\n var nodes = (document.createTreeWalker as any)(div, NodeFilter.SHOW_TEXT, null, false); // 4th argument is needed for IE11, but typescript doesn't like it\r\n while (node = nodes.nextNode()) {\r\n (node as HTMLElement).nodeValue += \" \";\r\n }\r\n\r\n // Get the text and truncate it\r\n var text = div.textContent || \"\";\r\n if (text.length > 200)\r\n text = text.substring(0, 199) + \"…\";\r\n\r\n return { __html: \"\" + text + \"\" };\r\n}\r\n\r\n\r\n","import * as React from 'react';\r\nimport { useRef, useState, Fragment, useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { FormIconInput, FormTooltip } from '../components/controls';\r\nimport { ApplicationState } from '../store/configureStore';\r\nimport { LandingFeaturedItem, LandingState } from './landing-config';\r\nimport i18n from 'i18next';\r\nimport { actions } from \"./landing-actions\";\r\n\r\n\r\nimport \"./landing-page.scss\";\r\nimport { checkImageCache, resize } from '../utilities/ui';\r\nimport Select from 'react-select';\r\nconst defaultImage = \"/static/images/mountains.png\";\r\n\r\n\r\nexport default function EventRegistrations(props: { isPreview: boolean, monthMenuLength: number }) {\r\n const { isPreview, monthMenuLength } = props;\r\n const allEvents = i18n.t(\"events.all-events\");\r\n\r\n const { data } = useSelector(store => store.landing);\r\n const [state, setState] = useState(\r\n {\r\n filtered: [],\r\n search: '',\r\n selectedMonth: allEvents,\r\n selectedDropdownMonth: null,\r\n eventSearchResults: [],\r\n monthsDisplayableLength: 3,\r\n dropdownOptions: []\r\n }\r\n );\r\n const update = (c: any) => setState(s => ({ ...s, ...c }));\r\n const nameRef = useRef() as any;\r\n let selectRef = null as any;\r\n\r\n const months = [] as any;\r\n data.events?.filter(e => !e.eventDate || isWithinOneYear(e.eventDate)).forEach(event => {\r\n const eventMonth = event.eventDate ? getMonth(event.eventDate) : 'No Event Date';\r\n const eventMonthList = months.find((m: any) => m.month === eventMonth);\r\n if (!eventMonthList) {\r\n months.push({ month: eventMonth, items: [event] });\r\n } else {\r\n eventMonthList.items.push(event);\r\n }\r\n });\r\n\r\n const clearSelectValue = () => { selectRef?.select?.clearValue(); };\r\n\r\n function searchChanged(name: string, value: string) {\r\n resize(true);\r\n\r\n if (value.length < 3){\r\n update({ search: value || \"\"});\r\n return;\r\n }\r\n const val = (value || \"\").toLowerCase();\r\n const searchResults = data.events?.filter((event: LandingFeaturedItem) => event.name?.toLowerCase().includes(val) || event.description?.toLowerCase().includes(val));\r\n update({ search: value || \"\", eventSearchResults: searchResults || [] });\r\n }\r\n\r\n\r\n let dropdownOptions = generateDropdownOptions(months, monthMenuLength);\r\n useEffect(() => {\r\n const selectedDropdown = state.selectedMonth // dropdownOptions.find((o: any) => o.value === state.selectedMonth);\r\n update( {selectedDropdownMonth: selectedDropdown ? selectedDropdown : \"\"} );\r\n update( {monthsDisplayableLength: calcMonthsDisplayable(monthMenuLength)} );\r\n\r\n window.addEventListener('resize', function() {\r\n const newLength = calcMonthsDisplayable(monthMenuLength)\r\n if (newLength !== state.monthsDisplayableLength) {\r\n update( {monthsDisplayableLength: newLength} );\r\n update( {dropdownOptions: generateDropdownOptions(months, monthMenuLength)} );\r\n }\r\n }, true);\r\n }, []);\r\n\r\n\r\n return (\r\n
\r\n

{i18n.t(\"events.events-title\")}

\r\n
\r\n } dataQa=\"event-registrations-search\" />\r\n {state.search.length > 2 &&\r\n
\r\n {i18n.t('workspace.featured-image-editor.results-for').replace(\"{count}\", state.eventSearchResults.length.toString()).replace(\"{plural}\", state.eventSearchResults.length !== 1 ? \"s\" : \"\").replace(\"{search}\", state.search)}\r\n
\r\n }\r\n
\r\n {state.search.length > 2 && state.eventSearchResults && (\r\n
\r\n {state.eventSearchResults.map((e: LandingFeaturedItem, index: number) =>\r\n \r\n
!isPreview && actions.goToForm(e, isPreview)} key={index}>\r\n
\r\n \r\n
{e.name}
\r\n
\r\n
{formatEventDate(e.eventDate)}
\r\n
\r\n \r\n )}\r\n
\r\n )}\r\n {state.search.length < 3 && (\r\n \r\n
\r\n update({ selectedMonth: allEvents })}>{allEvents}\r\n {months.filter((m: any) => m.month && m.month !== 'No Event Date').slice(0, state.monthsDisplayableLength).map((m: any, index: number) =>\r\n { update({ selectedMonth: m.month }); clearSelectValue()} }>{m.month}\r\n )}\r\n {dropdownOptions.length > 0 &&\r\n ( {selectRef = ref;}}\r\n name=\"eventMenuDropdown\"\r\n className=\"event-menu-dropdown\"\r\n value={state.selectedDropdownMonth || null}\r\n components={{ IndicatorSeparator: () => null }}\r\n label=\"Select\"\r\n options={dropdownOptions}\r\n onChange={(m: any) => { m ? update( {selectedMonth: m.value, selectedDropdownMonth: m} ) : update( {selectedDropdownMonth: m})}}\r\n dataQa=\"Event month dropdown\" \r\n />)\r\n }\r\n
\r\n {months.filter((m: any) => state.selectedMonth === allEvents || state.selectedMonth === m.month).map((m: any, i: number) =>\r\n
\r\n

{state.selectedMonth === allEvents && m.month}

\r\n
\r\n {m.items.map((e: any, index: number) =>\r\n \r\n
!isPreview && actions.goToForm(e, isPreview)}>\r\n
\r\n \r\n
{e.name}
\r\n
\r\n
{formatEventDate(e.eventDate)}
\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\nfunction generateDropdownOptions(months: any, monthMenuLength: number) {\r\n const monthsDisplayableLength = calcMonthsDisplayable(monthMenuLength);\r\n\r\n const dropdownMonths = months.length > monthsDisplayableLength ? months.filter((m: any) => m.month && m.month !== 'No Event Date').slice(monthsDisplayableLength, monthMenuLength) : [];\r\n const dropdownOptions = dropdownMonths.map((m: any) => {\r\n return { value: m.month, key: m.month, label: {m.month} }\r\n });\r\n return dropdownOptions;\r\n}\r\n\r\nfunction calcMonthsDisplayable(monthMenuLength: number) {\r\n let availWidth = window.innerWidth;\r\n let monthsDisplayable = 1;\r\n switch (true) {\r\n case availWidth >= 1200:\r\n monthsDisplayable = 12;\r\n break;\r\n case availWidth >= 1000:\r\n monthsDisplayable = 8;\r\n break;\r\n case availWidth >= 900:\r\n monthsDisplayable = 5;\r\n break;\r\n case availWidth >= 800:\r\n monthsDisplayable = 4;\r\n break;\r\n case availWidth >=700:\r\n monthsDisplayable = 3;\r\n break;\r\n default:\r\n monthsDisplayable = 2;\r\n break;\r\n }\r\n return Math.min(monthMenuLength, monthsDisplayable);\r\n}\r\n\r\nfunction getMonth(date: string): string {\r\n var d = new Date(date);\r\n if (d.valueOf())\r\n return d.toLocaleString(undefined, { month: 'long' });\r\n return \"\";\r\n}\r\n\r\nfunction isWithinOneYear(event: string): boolean {\r\n const eventDate = new Date(event);\r\n const today = new Date();\r\n const oneYearAhead = new Date(new Date().setFullYear(today.getFullYear() + 1));\r\n return eventDate <= oneYearAhead && eventDate >= today;\r\n}\r\n\r\nfunction formatEventDate(date: string): string {\r\n var d = new Date(date);\r\n if (d.valueOf())\r\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\r\n return \"\";\r\n}\r\n","import React, { useState, Fragment, useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { ApplicationState } from '../store/configureStore';\r\nimport { LandingData, LandingState } from './landing-config';\r\nimport { actions } from \"./landing-actions\";\r\nimport FeaturedCard from './featured/featured-card';\r\nimport { Container, Row, Col } from 'react-bootstrap';\r\n//import PreviewForm from './preview-form';\r\nimport \"./landing-page.scss\";\r\nimport EventRegistrations from './event-registrations';\r\nimport { resize } from '../utilities/ui';\r\n\r\n\r\nexport default function LandingPage() {\r\n const { loaded, data, error, mode } = useSelector(store => store.landing);\r\n\r\n useState(() => {\r\n //Apply Style\r\n if (mode) {\r\n window.history.replaceState({ type: \"form-preview\" }, \"Preview Form\", null); // Set the {type:\"form-preview\"} as the current location data so we know when the browser navigates back to this state\r\n } else {\r\n var query = new URLSearchParams(window.location.search);\r\n document.body.style.color = query.get('color') || \"#353C43\";\r\n document.body.style.backgroundColor = query.get('bg') || \"\";\r\n var embedId = query.get(\"embedid\");\r\n if (embedId) {\r\n document.body.classList.add(\"embedded\");\r\n\r\n window.addEventListener(\"message\", msg => {\r\n if (!msg.data || msg.data.embedId !== embedId)\r\n return;\r\n\r\n if (msg.data.color)\r\n document.body.style.color = msg.data.color;\r\n if (msg.data.bg)\r\n document.body.style.backgroundColor = msg.data.bg;\r\n if (msg.data.cardBg)\r\n Array.from(document.querySelectorAll(\".card\")).forEach(card => (card as HTMLElement).style.backgroundColor = msg.data.cardBg);\r\n if (msg.data.resize)\r\n resize();\r\n }, false);\r\n }\r\n }\r\n });\r\n\r\n useEffect(resize);\r\n\r\n if (!loaded && !error) {\r\n if (loaded === undefined)\r\n actions.load();\r\n return
;\r\n } else if (error) {\r\n return
{error}
;\r\n }\r\n\r\n let featured = data.featured || [];\r\n\r\n let row1, row2;\r\n if (featured.length === 1 || featured.length === 3) {\r\n row1 = featured.slice(0, 1);\r\n row2 = featured.slice(1);\r\n } else {\r\n row1 = featured.slice(0, 2);\r\n row2 = featured.slice(2);\r\n }\r\n\r\n const width1 = (row1.length === 1 ? 12 : 6);\r\n const width2 = (row2.length > 2 ? 4 : 6);\r\n const isPreview = !!mode;\r\n \r\n return (\r\n \r\n {mode !== \"preview-form\" &&\r\n \r\n \r\n {row1.length > 0 &&\r\n \r\n \r\n \r\n }\r\n {row1.length > 1 &&\r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n {row2.length > 0 &&\r\n \r\n \r\n \r\n }\r\n {row2.length > 1 &&\r\n \r\n \r\n \r\n }\r\n {row2.length > 2 &&\r\n \r\n \r\n \r\n }\r\n \r\n {error &&\r\n
{error}
\r\n }\r\n {data.events && }\r\n
\r\n }\r\n\r\n {/*{mode === \"preview-form\" &&\r\n \r\n }*/}\r\n\r\n
\r\n );\r\n}","import { ApplicationState, store } from '../store/configureStore';\r\nimport i18n from 'i18next';\r\n\r\nexport function dispatch(type: string, payload: any, delay: boolean = false) {\r\n if (delay)\r\n setTimeout(() => store.dispatch({ type: type, payload: payload }));\r\n else\r\n store.dispatch({ type: type, payload: payload });\r\n}\r\n\r\nexport function appState(): ApplicationState {\r\n return store.getState();\r\n}\r\n\r\nexport function apiRequest(method: string, url: string, identity?: string | null, data?: any, customHeaders?: any): Promise {\r\n var headers: any = customHeaders || { 'Content-Type': 'application/json' };\r\n if (identity)\r\n headers[\"Authorization\"] = \"mb5 \" + identity;\r\n\r\n return fetch(url,\r\n {\r\n method: method,\r\n headers: headers,\r\n body: data ? JSON.stringify(data) : null\r\n })\r\n .then(response => response.json() as Promise>)\r\n .then(result => {\r\n if (!result.success)\r\n throw result;\r\n return result.data;\r\n });\r\n}\r\n\r\nexport interface ClientApiCall {\r\n success: boolean,\r\n data: T | null,\r\n error: string | null\r\n}\r\n\r\n\r\nexport function makeblob(dataURL: any) {\r\n var BASE64_MARKER = ';base64,';\r\n if (dataURL.indexOf(BASE64_MARKER) == -1) {\r\n var parts = dataURL.split(',');\r\n var contentType = parts[0].split(':')[1];\r\n var raw = decodeURIComponent(parts[1]);\r\n return new Blob([raw], { type: contentType });\r\n }\r\n var parts = dataURL.split(BASE64_MARKER);\r\n var contentType = parts[0].split(':')[1];\r\n var raw = window.atob(parts[1]);\r\n var rawLength = raw.length;\r\n\r\n var uInt8Array = new Uint8Array(rawLength);\r\n\r\n for (var i = 0; i < rawLength; ++i) {\r\n uInt8Array[i] = raw.charCodeAt(i);\r\n }\r\n\r\n return new Blob([uInt8Array], { type: contentType });\r\n}\r\n\r\nexport function isEmptyGuid(guid: string | undefined): boolean {\r\n return !guid || guid === \"00000000-0000-0000-0000-000000000000\";\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\nexport function count(list: any, selector: any) {\r\n return list.reduce((cnt: number, i: number) => cnt + (selector(i) ? 1 : 0), 0);\r\n}\r\n\r\nconst _numberSeparator = (1111).toLocaleString().indexOf(\".\") >= 0 ? \".\" : \",\";\r\nconst _numberFormatterRegex = /\\B(?=(\\d{3})+(?!\\d))/g;\r\nconst _numberSeparatorRegex = new RegExp(\"[\" + _numberSeparator + \"]\", 'g');\r\n\r\nexport function formatCurrency(num: string, allowNegative: boolean) {\r\n let amt = parseNumber(num);\r\n if (!allowNegative && amt < 0)\r\n amt = -amt;\r\n if (!isNaN(amt))\r\n return roundCurrency(amt).toFixed(2).replace(_numberFormatterRegex, _numberSeparator);\r\n return \"\";\r\n}\r\n\r\nexport function parseNumber(val: string, allowCurrency = true) {\r\n if (typeof (val) === \"string\") {\r\n val = val.trim().replace(_numberSeparatorRegex, '');\r\n if (allowCurrency && val[0] === \"$\")\r\n val = val.substring(1);\r\n }\r\n return parseFloat(val);\r\n}\r\n\r\nexport function roundCurrency(number: number) {\r\n return Math.round(number * 100 + .00001) / 100; // number might not be accurate due to floating point precision (.254999999998), so adjust by an amount smaller than should matter\r\n}\r\n\r\nexport function isNullOrWhiteSpace(str: string) {\r\n if (typeof str === 'undefined' || str === null || str === \"\")\r\n return true;\r\n return !(/\\S/.test(str));\r\n}\r\n\r\nexport function getImageUrl(name: string, config: { apiUrl: string}) {\r\n const baseUrl = config.apiUrl.split('/')[0] + \"//\" + config.apiUrl.split('/')[2] + \"/Static/images/\";\r\n const cacheBust = \"?fms_version=\";\r\n let url = baseUrl + name + cacheBust;\r\n return url;\r\n}\r\n\r\nexport const dateFormat = new Date(2000, 10, 22).toLocaleDateString().replace(\"2000\", \"YYYY\").replace(\"11\", \"MM\").replace(\"22\", \"DD\").replace(/\\u200E/g, ''); // month 10 is novmember because javascript, \\u200E is a left-to-right character that IE11 inserts\r\nconst browserMonthFirst = dateFormat.indexOf(\"MM\") === 0;\r\nexport function parseDate(val: null | undefined | string | Date, legacy = false) {\r\n if (!val)\r\n return null;\r\n\r\n if (typeof (val) === \"string\") {\r\n val = val.trim();\r\n if (val.indexOf('T') >= 0)\r\n val = val.substring(0, val.indexOf('T'));\r\n\r\n const parts = val.split(/[./-]/);\r\n if (parts.length !== 3)\r\n return null;\r\n\r\n let y, m, d;\r\n if (parts[0].length >= 3)\r\n [y, m, d] = parts.map(p => parseInt(p));\r\n else if (browserMonthFirst || (legacy && val.indexOf(\"/\") > 0))\r\n [m, d, y] = parts.map(p => parseInt(p));\r\n else\r\n [d, m, y] = parts.map(p => parseInt(p));\r\n\r\n if (m === 0 || m > 12)\r\n return null;\r\n if (d === 0 || d > 31 || (d > 28 && d > daysInMonth(m, y)))\r\n return null;\r\n return new Date(y, m - 1, d);\r\n }\r\n else if (!(val instanceof Date))\r\n val = new Date(val);\r\n \r\n if (isNaN(val.getTime()))\r\n return null;\r\n return new Date(val.getFullYear(), val.getMonth(), val.getDate());\r\n}\r\n\r\nexport let _datePlaceholder: null | string = null;\r\nexport function datePlaceholder() {\r\n if (!_datePlaceholder && i18n.t('date.day') !== \"date.day\")\r\n _datePlaceholder = dateFormat.replace(\"DD\", i18n.t('date.day')).replace(\"MM\", i18n.t('date.month')).replace(\"YYYY\", i18n.t('date.year'));\r\n return _datePlaceholder;\r\n}\r\n\r\nexport function daysInMonth(month: number, year: number) {\r\n // Pass in the calendar month (2 for Februrary)\r\n return new Date(year, month, 0).getDate();\r\n}\r\n\r\nexport function formatPhone(val: string | null) {\r\n if (!val || !val.substring)\r\n return \"\";\r\n val = val.replace(/[^0-9]/g, '');\r\n\r\n if (val.length <= 3)\r\n return val;\r\n if (val.length <= 7)\r\n return val.substring(0, 3) + \"-\" + val.substring(3);\r\n if (val.length <= 10)\r\n return val.substring(0, 3) + \"-\" + val.substring(3, 6) + \"-\" + val.substring(6);\r\n if (val.length === 11)\r\n return val.substring(0, 1) + \"-\" + val.substring(1, 4) + \"-\" + val.substring(4, 7) + \"-\" + val.substring(7);\r\n return val;\r\n}\r\n\r\nexport function formatDate(date: Date | string | null) {\r\n if (!(date instanceof Date)) {\r\n date = parseDate(date);\r\n if (!date)\r\n return \"\";\r\n }\r\n return date.toLocaleDateString().replace(/\\u200E/g, ''); // \\u200E is for IE11\r\n}","import React, { useState, useEffect } from \"react\";\r\nimport { version } from './autobuild-version';\r\n\r\nconst buildIsNotSame = (latest, current) => {\r\n if (latest !== current) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\nfunction withClearCache(Component) {\r\n function ClearCacheComponent(props) {\r\n const [isLatestBuild, setIsLatestBuild] = useState(false);\r\n\r\n useEffect(() => {\r\n fetch(\"/meta.json\")\r\n .then((response) => response.json())\r\n .then((meta) => {\r\n const latestVersion = meta.build;\r\n const currentVersion = version;\r\n\r\n const shouldForceRefresh = buildIsNotSame(\r\n latestVersion,\r\n currentVersion\r\n );\r\n if (shouldForceRefresh) {\r\n setIsLatestBuild(false);\r\n refreshCacheAndReload();\r\n } else {\r\n setIsLatestBuild(true);\r\n }\r\n });\r\n }, []);\r\n\r\n const refreshCacheAndReload = () => {\r\n if (caches) {\r\n // Service worker cache should be cleared with caches.delete()\r\n caches.keys().then((names) => {\r\n for (const name of names) {\r\n caches.delete(name);\r\n }\r\n });\r\n }\r\n // delete browser cache and hard reload\r\n window.location.reload(true);\r\n };\r\n\r\n return (\r\n \r\n {isLatestBuild ? : null}\r\n \r\n );\r\n }\r\n\r\n return ClearCacheComponent;\r\n}\r\n\r\nexport default withClearCache;\r\n","// Generated by genversion.\nexport const version = '2.47.0'\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Route, Switch } from 'react-router';\r\nimport { Provider } from 'react-redux';\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport { store, history } from './store/configureStore';\r\n\r\nimport withClearCache from \"./clear-cache\";\r\nimport { version } from './autobuild-version';\r\n\r\nimport LandingPage from './landing/landing-page';\r\nconst SettingsPage = React.lazy(() => import('./settings/settings-page'));\r\nconst WrappedSettingsPage = () =>
}>;\r\n\r\nconst ClearCacheComponent = withClearCache(MainApp);\r\n\r\nfunction App() {\r\n return ;\r\n}\r\n\r\nfunction MainApp() {\r\n console.log(\"v\" + version);\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\nReactDOM.render(\r\n ,\r\n document.getElementById('mb-landing-page'));\r\n\r\n","\n\nexport function smoothScrollTo(scrollTargetY, scrollPane) {\n\n scrollTargetY = Math.max(scrollTargetY - 110, 0); // Aim 110px above the goal\n scrollPane = scrollPane || window;\n\n const startingScrollY = (scrollPane === window ? scrollPane.scrollY : scrollPane.scrollTop);\n const travel = scrollTargetY - startingScrollY;\n const speed = 2000; // 2000 pixels per second\n const totalTime = Math.max(.1, Math.min(Math.abs(travel / speed), .8)) * 1000; // between 100ms and 800ms\n let start = null;\n\n function easing(percent) {\n if (percent < .5)\n return (-0.5 * (Math.cos(Math.PI * percent) - 1));\n return Math.sin(percent * (Math.PI / 2));\n }\n\n\n function tick(currentTime) {\n if (!start)\n start = currentTime;\n\n const elapsed = currentTime - start;\n const percentComplete = Math.min(elapsed / totalTime, 1);\n const currentTargetY = startingScrollY + (travel * easing(percentComplete));\n\n if (percentComplete < 1) {\n window.requestAnimationFrame(tick);\n scrollPane.scrollTo(0, currentTargetY);\n } else {\n scrollPane.scrollTo(0, scrollTargetY);\n }\n }\n window.requestAnimationFrame(tick);\n}\n\nexport function hasEllipsis(element) {\n return (element.offsetWidth < element.scrollWidth) || (element.offsetHeight < element.scrollHeight);\n}\n\nexport function resize(delay) {\n var query = new URLSearchParams(window.location.search);\r\n var embedId = query.get(\"embedid\");\r\n if (embedId) {\r\n\r\n function sendResize() {\r\n var container = document.getElementById(\"mb-landing-page\");\r\n if (container)\r\n window.parent.postMessage({ id: embedId, height: container.scrollHeight }, query.get(\"parent\") || document.referrer);\r\n }\r\n\r\n if (delay)\r\n setTimeout(sendResize, 50);\r\n else\r\n sendResize();\r\n\r\n document.body.style.overflowY = \"hidden\"; // Hide scrollbar\r\n setTimeout(() => document.body.style.overflowY = null, 200);\r\n }\r\n}\n\n\n\nconst uncached = {};\nexport function breakImageCache(url) {\n const previous = uncached[url] || url;\n const updated = url + \"?nocache=\" + new Date().valueOf();\n\n uncached[url] = updated;\n\n Array.from(document.querySelectorAll(\"img\"))\n .filter(i => {\n const decoded = decodeURIComponent(i.src);\n return i.src === url || i.src === previous || decoded === url || decoded === previous;\n })\n .forEach(i => i.src = updated);\n\n clearBrowserCache(url);\n}\n\nexport function checkImageCache(url) {\n return uncached[url] || url;\n}\n\nfunction clearBrowserCache(url) {\n const iframe = document.createElement(\"iframe\");\n iframe.style.display = \"none\";\n iframe.src = url.substr(0, url.indexOf(\"/\", url.indexOf('.'))) + \"/fms/static/refresh.html?\" + encodeURIComponent(url.substr(url.indexOf(\"/\", url.indexOf('.')) + 1));\n document.body.appendChild(iframe);\n\n function refreshComplete(message) {\n if (message.source !== iframe.contentWindow)\n return;\n\n window.removeEventListener('message', refreshComplete);\n iframe.parentNode.removeChild(iframe);\n }\n window.addEventListener('message', refreshComplete);\n}","import React, { useContext, useState, useRef, useMemo, useEffect } from \"react\";\r\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\nimport ValidationContext from '../contexts/validation-context';\r\nimport { hasEllipsis } from \"../utilities/ui\";\r\nimport { formatCurrency } from '../utilities/util';\r\nimport { nullSelectStyles } from './select';\r\nimport { isTouchDevice } from '../utilities/constants';\r\nimport Select from 'react-select';\r\nimport { useSelector } from 'react-redux';\r\nimport { ApplicationState } from '../store/configureStore';\r\nimport { SettingsState } from \"../settings/settings-config\";\r\n\r\nexport function FormIconInput(p) {\r\n const getStyle = getStyles();\r\n const [state, refresh] = useState(false);\r\n const ref = useRef({});\r\n const v = useContext(ValidationContext);\r\n const error = p.error || (v && v.show && v.getError(p.name));\r\n let type = \"text\";\r\n if (p.format === \"digits\")\r\n type = \"number\";\r\n if (p.format === \"password\")\r\n type = \"password\";\r\n\r\n const inFocus = ref.current === document.activeElement;\r\n\r\n return (\r\n \r\n {p.label &&\r\n \r\n }\r\n
\r\n
{p.icon}
\r\n { refresh(); onFocusAnimation(e) }}\r\n onChange={(e) => onInputChange(e, p)}\r\n onBlur={(e) => { refresh({}); onInputChange(e, p); onBlurAnimation(e); }}\r\n type={type}\r\n style={getStyle('inputs')}\r\n maxLength={p.maxLength}\r\n placeholder={p.placeholder}\r\n data-qa={p.dataQa}\r\n data-keyboard={p.format === \"digits\" ? \"numeric\" : \"\"} // for inside the kiosk app\r\n ref={ref} />\r\n
\r\n {p.helpText && {p.helpText}}\r\n
\r\n );\r\n}\r\n\r\nexport function FormSelect(p) {\r\n const getStyle = getStyles();\r\n //const config = useSelector(store => store.settings); //useSelector(store => store.settings);\r\n const v = useContext(ValidationContext);\r\n const error = p.error || (v && v.show && v.getError(p.name));\r\n const options = p.options; //!p.customFilter ? (p.options || []).map(o => ({ value: getKey(o) + \"\", label: getName(o), isDisabled: o.disabled })) : p.options;\r\n const selected = p.value || null; //p.isMulti ? options.filter(o => p.value && p.value.indexOf(o.value) >= 0) : options.find(o => o.value == p.value) || null;\r\n\r\n //const inputStyle = getStyle(\"inputs\");\r\n //const styles = \r\n //useMemo(() => {\r\n // //if (!config.shouldUseFormStyles && !config.shouldUseSelectStyles)\r\n // // return nullSelectStyles;\r\n\r\n // if (inputStyle) {\r\n // return {\r\n // control: base => ({ ...base, ...inputStyle }),\r\n // container: base => ({ ...base, ...inputStyle }),\r\n // singleValue: base => ({ ...base, ...inputStyle.color }),\r\n // singleValue: base => ({ ...base, color: inputStyle.color }),\r\n // menuList: base => ({ ...base, color: inputStyle.color, fontSize: inputStyle.fontSize, fontFamily: inputStyle.fontFamily, backgroundColor: inputStyle.backgroundColor }),\r\n // menuPortal: (!isTouchDevice() && !p.showAsTouch && !p.inModal ? base => ({ ...base, zIndex: 9999 }) : undefined)\r\n // }\r\n // }\r\n // return { menuPortal: (!isTouchDevice() && !p.showAsTouch ? base => ({ ...base, zIndex: 9999 }) : undefined) };\r\n //}, [inputStyle]);\r\n\r\n // The CSS rules excluded from injection include dynamically-generated\r\n // positioning styles, without which portaling cannot work.\r\n const canPortal = true; //!!(config.shouldUseFormStyles || config.shouldUseSelectStyles);\r\n\r\n function addMenuClasses() {\r\n setTimeout(function () {\r\n const e = document.querySelector(\".ss__menu\");\r\n if (e) {\r\n //if (styles)\r\n // e.classList.add(\"use-theme\");\r\n if (p.menuClassName)\r\n e.classList.add(p.menuClassName);\r\n }\r\n }, 0);\r\n }\r\n\r\n return (\r\n \r\n \r\n onFocusAnimation(e)}\r\n onBlur={(e) => onBlurDropdownAnimation(e, selected)}\r\n onChange={p.onChange} //{(item) => onSelectChange(item, p)}\r\n options={options}\r\n textFieldProps={{\r\n label: 'Label',\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n }}\r\n placeholder={p.placeholder || \"Select...\"}\r\n isClearable={p.enableClear}\r\n isDisabled={p.disabled || false}\r\n classNamePrefix=\"ss\"\r\n filterOption={p.customFilter}\r\n onMenuOpen={addMenuClasses}\r\n isMulti={p.isMulti}\r\n clearValue={() => selected = null}\r\n closeMenuOnSelect={p.closeMenuOnSelect !== undefined ? p.closeMenuOnSelect : true}\r\n />\r\n {p.note &&\r\n {p.note}\r\n }\r\n \r\n );\r\n}\r\n\r\nexport function FormTooltip(props) {\r\n const { show, tooltip, children, placement, className, trigger, onlyIfTruncatedRef } = props;\r\n\r\n // OnlyIfTruncated\r\n const [needed, setNeeded] = useState(true);\r\n useEffect(() => {\r\n if (!onlyIfTruncatedRef || !onlyIfTruncatedRef.current) {\r\n return;\r\n } else if (show !== undefined && !show) {\r\n return children\r\n }\r\n\r\n function check() {\r\n const truncated = hasEllipsis(onlyIfTruncatedRef.current);\r\n if (needed !== truncated)\r\n setNeeded(truncated);\r\n }\r\n check();\r\n\r\n // If the page starts out hidden on the Home tab, the element's widths are 0 so it doesn't know to show the tooltip\r\n var element = onlyIfTruncatedRef.current;\r\n element.addEventListener(\"mouseenter\", check, true);\r\n return () => element.removeEventListener(\"mouseenter\", check, true);\r\n });\r\n\r\n if (!needed || show === false)\r\n return children;\r\n\r\n return (\r\n {tooltip}}>\r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport function Validation(props) {\r\n const dataQa = props.dataQa ? { \"data-qa\": props.dataQa } : {};\r\n\r\n return (\r\n
\r\n {props.children}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport function ValidationMessage(props) {\r\n if (props.valid)\r\n return null;\r\n\r\n const getStyle = getStyles();\r\n return {props.validationMessage}\r\n}\r\n\r\n\r\n//Input, IconInput, CurrencyInput, Phone Input\r\nexport function onBlurAnimation(event) {\r\n //Material Animation\r\n const container = event && event.target.closest(\".form-group\");\r\n if (container) {\r\n if (event.target.value == \"\")\r\n container.removeAttribute(\"animate\");\r\n\r\n container.removeAttribute(\"inFocus\");\r\n }\r\n}\r\n\r\nexport function onFocusAnimation(event) {\r\n //Material Animation\r\n const container = event && event.target.closest(\".form-group\");\r\n if (container) {\r\n if (!container.hasAttribute(\"animate\"))\r\n container.setAttribute(\"animate\", \"true\");\r\n\r\n container.setAttribute(\"inFocus\", \"true\");\r\n }\r\n}\r\n\r\nexport function onBlurDropdownAnimation(event, selected) {\r\n //Material Animation\r\n const container = event && event.target.closest(\".form-group\");\r\n if (container) {\r\n if (!selected)\r\n container.removeAttribute(\"animate\");\r\n\r\n container.removeAttribute(\"inFocus\");\r\n }\r\n}\r\n\r\n// const formBuilder = document.getElementById(\"mb-formbuilder-container\");\r\n// const builderWidth = formBuilder.offsetWidth;\r\nexport function determineLabelPlacement(label, formGroup, field) {\r\n\r\n function checkLabelWidth(label, formGroup, smallLabelCount, largeLabelCount) {\r\n if (formGroup) {\r\n if (label && (label.length > smallLabelCount) && (label.length < largeLabelCount)) {\r\n return true;\r\n }\r\n } else {\r\n if (label) {\r\n if (label.length < largeLabelCount) {\r\n return \"field-label\";\r\n } else if (label.props && (Object.keys(label.props).length === 0 && label.props.constructor === Object)) {\r\n return \"field-label\";\r\n } else if (label.props && label.props.label && (label.props.label.length < largeLabelCount)) { //label.props.showRequired - postalcode\r\n return \"field-label\";\r\n } else if (label.props && label.props.tooltip) { //processing fee\r\n return \"field-label\";\r\n } else if (label.props && label.props.form) { //registration email field\r\n return \"field-label\";\r\n }\r\n }\r\n return \"outside-label\";\r\n }\r\n }\r\n}\r\n\r\nfunction getStyles() {\r\n // TODO: can't use useContext outside of functional component. Once theming is in place this should be revisited\r\n // const context = useContext(ThemeContext);\r\n // return (context && context.getStyle ? context.getStyle : getNoStyles);\r\n return getNoStyles;\r\n}\r\n\r\nfunction getNoStyles() {\r\n // Intentionally blank\r\n}\r\n\r\nfunction getKey(o) {\r\n if (o.key !== undefined && o.key !== null)\r\n return o.key;\r\n if (o.id !== undefined && o.id !== null)\r\n return o.id;\r\n return getName(o);\r\n}\r\n\r\nfunction getName(o) {\r\n if (o.name !== undefined && o.name !== null)\r\n return o.name;\r\n return o;\r\n}\r\n\r\nfunction onSelectChange(item, props, validation) {\r\n let value = null;\r\n if (item) {\r\n if (props.isMulti)\r\n value = item.map(o => o.value);\r\n else\r\n value = item.value;\r\n }\r\n if (props.onChange)\r\n props.onChange(props.name, value);\r\n}\r\n\r\nfunction onInputChange(event, props) {\r\n let value = event.target.value;\r\n\r\n if (props.format === \"currency\") {\r\n const parts = value.split(\".\");\r\n if (parts.length > 2)\r\n value = parts[0] + '.' + parts[1];\r\n\r\n value = value.replace(/[^0-9.,]/g, '');\r\n\r\n if (event.type === \"blur\")\r\n value = formatCurrency(value);\r\n }\r\n else if (props.format === \"digits\") {\r\n value = value.replace(/[^0-9]/g, '');\r\n if (props.maxLength && value.length > props.maxLength)\r\n value = value.substr(0, props.maxLength);\r\n } else if (props.format === \"number\") {\r\n value = value.replace(/[^0-9-.]/g, '');\r\n if (value.lastIndexOf('-') > 0)\r\n value = value[0] + value.substr(1).replace(/[-]/g, '');\r\n if (value.indexOf('.') !== value.lastIndexOf('.')) {\r\n const split = value.split('.');\r\n value = split.shift() + \".\" + split.join(\"\");\r\n }\r\n }\r\n\r\n if (value !== props.value && props.onChange)\r\n props.onChange(props.name, value, props.index);\r\n}","import { applyMiddleware, combineReducers, compose, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\r\nimport { createBrowserHistory, History } from 'history';\r\nimport { LandingState, landingReducer } from '../landing/landing-config';\r\nimport { SettingsState, settingsReducer } from '../settings/settings-config';\r\nimport { alertsReducer, AlertState } from '../components/alerts';\r\n\r\n// The top-level state object\r\nexport interface ApplicationState {\r\n settings: SettingsState;\r\n landing: LandingState;\r\n alerts: AlertState;\r\n}\r\n\r\n\r\n\r\n// Create browser history to use in the Redux store\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\r\nexport const history = createBrowserHistory({ basename: baseUrl });\r\n\r\n\r\nfunction configureStore(history: History, initialState?: ApplicationState) {\r\n const middleware = [\r\n thunk,\r\n routerMiddleware(history)\r\n ];\r\n\r\n const rootReducer = combineReducers({\r\n ...reducers,\r\n router: connectRouter(history)\r\n });\r\n\r\n const enhancers = [];\r\n const windowIfDefined = typeof window === 'undefined' ? null : window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\r\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\r\n }\r\n\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n compose(applyMiddleware(...middleware), ...enhancers)\r\n );\r\n}\r\n\r\nconst reducers = {\r\n settings: settingsReducer,\r\n landing: landingReducer,\r\n alerts: alertsReducer\r\n}\r\n\r\n\r\n// Get the application-wide store instance, prepopulating with state from the server where available.\r\nexport const store = configureStore(history);\r\n\r\n","\r\n\r\nexport interface LandingState {\r\n loaded: boolean | undefined,\r\n clientId: string | undefined,\r\n data: LandingData,\r\n error: string | undefined,\r\n mode?: string,\r\n previewFormUrl?: string\r\n}\r\n\r\nexport interface LandingData {\r\n featured: Array,\r\n events: Array,\r\n eventsEnabled: boolean,\r\n eventMonthsDisplayLength: number\r\n}\r\n\r\n\r\nexport interface LandingFeaturedItem {\r\n name: string,\r\n description: string,\r\n imageUrl: string,\r\n imageAltText: string,\r\n formUrl: string,\r\n eventDate: string\r\n}\r\n\r\n\r\nexport function landingReducer(state: LandingState | undefined, action: any) {\r\n if (state === undefined)\r\n return { featured: [] };\r\n\r\n switch (action.type) {\r\n case 'UPDATE_LANDING':\r\n return { ...state, ...action.payload };\r\n\r\n case 'LOAD_LANDING':\r\n return {\r\n ...state,\r\n data: action.payload,\r\n loaded: true\r\n };\r\n\r\n case 'LANDING_ERROR':\r\n console.error(action.payload);\r\n return {\r\n ...state,\r\n error: (action && action.payload && action.payload.error ? action.payload.error : null) || \"An error occurred\"\r\n };\r\n\r\n case 'PREVIEW_FORM':\r\n return {\r\n ...state,\r\n ...action.payload\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n"],"sourceRoot":""}