{"version":3,"sources":["webpack:///./app/javascript/components/Shared/Modal/Modal.jsx","webpack:///./app/javascript/hooks/useHotKeys.js","webpack:///./app/javascript/components/Shared/IndexItem/IndexItem.jsx","webpack:///./app/javascript/components/Shared/ButtonSecondary.jsx","webpack:///./app/javascript/hooks/useDidMountEffect.js","webpack:///./app/javascript/components/Shared/StatusTag/StatusTag.jsx","webpack:///./app/javascript/components/Shared/Forms/OrganizationPersonForm.jsx","webpack:///./app/javascript/hooks/useDeprecated.js","webpack:///./app/javascript/components/Shared/AlertTemplate.jsx","webpack:///./app/javascript/components/Shared/UserMenu/UserMenu.jsx","webpack:///./app/javascript/hooks/usePagination.js","webpack:///./app/javascript/components/Shared/Select.jsx","webpack:///./app/javascript/components/Shared/RadioButtonGroup.jsx","webpack:///./app/javascript/components/Shared/AutoSuggest/AutoSuggest.jsx","webpack:///./app/javascript/reducers/generateDocumentReducer.js","webpack:///./app/javascript/components/Shared/ContextMenu/ContextMenu.jsx","webpack:///./app/javascript/components/Shared/ContextProviders/DashboardProvider.jsx","webpack:///./app/javascript/components/Shared/Modal/ProgressTrackerModal.jsx","webpack:///./app/javascript/components/Shared/Dropdown/Dropdown.jsx","webpack:///./app/javascript/components/Shared/CommonNav/CommonNav.jsx","webpack:///./app/javascript/components/Shared/RadioButton.jsx","webpack:///./app/javascript/components/Shared/IndexRow/IndexRow.jsx","webpack:///./app/javascript/components/Shared/FileUpload/FileUpload.jsx","webpack:///./app/javascript/components/Shared/CheckboxItem/CheckboxItem.jsx","webpack:///./app/javascript/components/Shared/CheckboxItem/Checkbox.jsx","webpack:///./app/javascript/reducers/fetchReducer.js","webpack:///./app/javascript/components/Shared/DataListInput/DataListInput.jsx","webpack:///./app/javascript/components/Shared/DataListInput/useStateRef.js","webpack:///./app/javascript/components/Shared/ContextProviders/AuthProvider.jsx","webpack:///./app/javascript/components/Shared/SelfDestruct/SelfDestruct.jsx","webpack:///./app/javascript/components/Shared/DeleteConfirmModal/DeleteConfirmModal.jsx","webpack:///./app/javascript/hooks/useScript.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/components/VisaBulletin/ApplicationDateQuestionare.jsx","webpack:///./app/javascript/components/VisaBulletin/ApplicationDateResponse.jsx","webpack:///./app/javascript/components/VisaBulletin/HubspotForm.jsx","webpack:///./app/javascript/components/VisaBulletin/ApplicationDateQuestionareWrapper.jsx","webpack:///./app/javascript/services/request.js","webpack:///./app/javascript/hooks/useOnClickOutside.js","webpack:///./app/javascript/components/Shared/CheckBox/index.jsx","webpack:///./app/javascript/components/Shared/Forms/index.jsx","webpack:///./app/javascript/services/emails.js","webpack:///./app/javascript/components/Shared/CommonNav/CommonNav.test.jsx","webpack:///./app/javascript/components/Shared/IconStack.jsx","webpack:///./app/javascript/components/VisaBulletin/ApplicationDateQuestionareWrapper.test.jsx","webpack:///./app/javascript/components/Shared/SearchBar/SearchBar.jsx","webpack:///./app/javascript/components/Shared/PaginationWidget/PaginationWidget.jsx","webpack:///./app/javascript/components/Shared/Dropdown/__Dropdown.jsx","webpack:///./app/javascript/styles/colors.js","webpack:///./app/javascript/components/Shared/Button/Button.jsx","webpack:///./app/javascript/components/Shared/SectionDropdowns/SectionDropdowns.jsx","webpack:///./app/javascript/components/Shared/UserAvatar.jsx"],"names":["show","reverse","cleanup","children","modalVisible","setModalVisible","useState","shouldRender","setRender","containerRef","useRef","useOnClickOutside","useHotkeys","useEffect","Overlay","Container","ref","open","onAnimationEnd","styled","div","props","handleAnimation","keys","callback","deps","memoisedCallback","useCallback","hotkeys","filter","unbind","IndexItem","bold","grayDark","marginBottom","Button","button","blue","adjustColor","blueLightest","ButtonSecondary","text","onClick","isDisabled","dataTestId","disabledClass","disabled","className","propTypes","PropTypes","string","func","bool","didMount","current","TagContainer","color","margin","StatusTag","colors","orange","ExistingPersonPrompt","grayDarker","OrganizationPersonForm","organizationId","updateParentObject","personType","popup","useAlert","formState","setFormState","firstName","lastName","email","handleChange","e","target","name","value","showForm","setShowForm","showDetails","setShowDetails","existingPerson","setExistingPerson","loading","setLoading","handleExistingPerson","person","style","width","marginTop","role","tabIndex","onKeyDown","contact","checked","display","justifyContent","alignItems","type","placeholder","onChange","label","height","async","url","Routes","people_organization_path","requestBody","first_name","last_name","response","fetch","method","headers","formHeaders","body","JSON","stringify","ok","json","preexisting","setTimeout","error","message","createPerson","border","marginLeft","gridColumn","component","process","options","icon","Rectangle","Info","Icon","alt","Message","i","user","avatarInitials","UserMenuBox","size","fullName","href","rel","red","white","gray","grayLight","grayDarkest","data","ipp","currentPage","setCurrentPage","itemsPerPage","setItemsPerPage","maxPage","Math","ceil","length","startIndex","endIndex","min","nextPage","cp","prevPage","max","currentData","start","end","slice","showAll","repaginate","optionsForSelect","map","option","key","onSelect","attributeValue","defaultChecked","toString","labelClassName","items","initialValue","handleSelect","handleInputChange","inputComponent","setSelectedItem","selected","onInput","memoizedItems","useMemo","item","id","someAdditionalValue","state","action","generated","popupMessage","popupType","ContextMenu","setState","DashboardContext","Provider","createContext","dashboardContext","useContext","Error","dropdownOpen","setDropdownOpen","title","isOpen","NavIcon","img","Drawer","nav","grayLighter","MenuItem","a","isActive","NavDrawer","useBrowserRouter","pathname","window","location","NavLink","exact","to","activeStyle","fontWeight","CommonNav","home","subTitle","parsedTitle","split","setUser","navVisible","setNavVisible","showUserMenu","setShowUserMenu","users_current_path","alert","fetchUser","superuser","src","require","textTransform","cursor","object","inputProps","IndexRow","tr","clickable","FileUpload","attribute","filesPresent","inputId","random","fileData","entityType","entityId","accept","multiple","handleUpload","htmlFor","files","Label","CheckBoxItem","Checkbox","CheckboxContainer","svg","HiddenCheckbox","input","attrs","StyledCheckbox","viewBox","points","success","DataListInput","activeItemClassName","clearInputOnSelect","debounceLoader","debounceTime","dropdownClassName","dropDownLength","inputClassName","itemClassName","match","onDropdownClose","onDropdownOpen","requiredInputLength","suppressReselect","lastValidItem","setLastValidItem","currentInput","setCurrentInput","currentInputRef","matchingItems","setMatchingItems","visible","setVisible","visibleRef","focusIndex","setFocusIndex","interactionHappenedRef","isMatchingDebounced","setIsMatchingDebounced","inputHappenedTimeout","menu","inputField","onClickCloseMenu","event","targetIsInput","targetInInput","contains","targetInMenu","targetIsMenu","addEventListener","removeEventListener","debouncedMatchingUpdateStep","nextInput","clearTimeout","reachedRequiredLength","showMatchingStillLoading","updateMatchingItems","updatedMatchingItems","Function","toLowerCase","includes","labelMatch","displayableItems","index","indexOf","find","indexOfItem","onHandleInput","onClickInput","onHandleSelect","selectedItem","onHandleKeydown","currentFocusIndex","keyCode","preventDefault","renderItemLabel","indexOfMatch","inputLength","substr","renderItems","itemClasses","onKeyUp","dropDown","arrayOf","shape","isRequired","oneOfType","number","node","defaultProps","undefined","Infinity","initalState","newState","AuthContext","authContext","useExpirationUI","expirationDate","renderableThing","setShouldRender","React","timeoutId","Date","now","useExpiration","setDeleteConfirmVisible","handleDelete","itemId","DeleteConfirmContainer","status","setStatus","script","document","querySelector","getAttribute","createElement","setAttribute","appendChild","setAttributeFromEvent","setStateFromEvent","componentRequireContext","Logo","header","VibuHeader","Input","ToolTip","ApplicationDateQuestionare","countriesList","visaCategoriesList","logoUrl","countryOptions","c","visaOptions","v","selectedBirthCountry","setSelectedBirthCountry","selectedVisaCategory","setSelectedVisaCategory","priorityDate","setPriorityDate","isMarried","setIsMarried","isFilingWithSpouse","setIsFilingWithSpouse","spouseBirthCountry","setSpouseBirthCountry","vibuStatus","setVibuStatus","submitted","setSubmitted","piToolTipVisible","setPiToolTipVisible","siToolTipVisible","setSiToolTipVisible","errors","setErrors","birthCountry","visaCategory","clearForm","classNamePrefix","isClearable","Object","values","some","x","forEach","err","visa_bulletin_application_date_status_path","params","birth_country","spouse_birth_country","visa_category","priority_date","handleSubmit","array","DataTable","FollowUpActions","ApplicationDateResponse","currentMonthStatus","currentVisaBulletin","bulletin_url","format","nextMonthStatus","nextVisaBulletin","add","useScript","hbspt","forms","create","portalId","formId","template","AlertTemplate","timeout","position","positions","TOP_RIGHT","offset","customConfig","config","Promise","reject","handler","listener","CheckboxItem","FormInput","personId","send_welcome_email_client_path","describe","console","warn","beforeEach","once","mockUser","afterEach","resetMocks","it","container","render","waitFor","expect","getByText","mock","calls","toEqual","IconStack","span","getByTestId","queryAllByText","birthCountrySelectDiv","fireEvent","focus","keyDown","code","visaCategorySelectDiv","change","click","within","spouseCountryOfBirthDiv","searchStringValue","setSearchStringEvent","SearchBarInput","PaginationWidget","upshift","showingAll","__Dropdown","dropdownContent","useDeprecated","module","exports","blueDark","blueLight","blueLighter","green","gold","grayLightest","variant","rest","OutlinedButton","TextButton","StyledButton","handleFontSize","handleSize","handleBackgroundColor","handleHoverColor","handleColor","sections","section","replace","content","Avatar","UserAvatar"],"mappings":"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","file":"js/application~1f075a2e-fff0109977abb5fa4728.chunk.js","sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useHotkeys } from \"../../../hooks/useHotKeys\";\nimport { useOnClickOutside } from \"../../../hooks/useOnClickOutside\";\n\nconst handleAnimation = ({ open, reverse }) => {\n if (reverse) {\n if (open) return \"roadRunnerInReverse\";\n return \"roadRunnerOutReverse\";\n }\n if (open) return \"roadRunnerIn\";\n return \"roadRunnerOut\";\n};\n\nconst Container = styled.div`\n padding: 1.75rem;\n background: white;\n border: none;\n border-radius: 6px;\n flex-shrink: 0;\n position: fixed;\n animation: ${props => `${handleAnimation(props)}\n 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards`};\n z-index: 100;\n width: auto;\n box-shadow: 0px 6px 6px 0px 0, 0, 0, 0.75;\n\n @media (min-width: 900px) {\n width: 528px;\n }\n`;\n\nconst Overlay = styled.div`\n z-index: 10;\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: rgb(58, 72, 97, 0.37);\n\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport default function Modal({ show, reverse, cleanup, children }) {\n const [modalVisible, setModalVisible] = useState(true);\n const [shouldRender, setRender] = useState(show);\n\n const containerRef = useRef();\n\n useOnClickOutside(containerRef, () => {\n setModalVisible(false);\n cleanup();\n });\n\n useHotkeys(\"esc\", () => {\n setModalVisible(false);\n cleanup();\n });\n\n useEffect(() => {\n if (show) setRender(true);\n }, [show]);\n\n const onAnimationEnd = () => {\n if (!show) setRender(false);\n };\n\n if (modalVisible)\n return (\n \n {shouldRender && (\n \n {children}\n \n )}\n \n );\n return null;\n}\n","import hotkeys from \"hotkeys-js\";\nimport { useCallback, useEffect } from \"react\";\n\nexport function useHotkeys(keys, callback, deps = []) {\n const memoisedCallback = useCallback(callback, deps);\n\n useEffect(() => {\n hotkeys.filter = () => true;\n hotkeys(keys, memoisedCallback);\n\n return () => hotkeys.unbind(keys);\n }, [keys, memoisedCallback]);\n}\n","import styled from \"styled-components\";\nimport { grayDark } from \"../../../styles/colors\";\n\nexport const IndexItem = styled.div`\n font-weight: ${props => (props.bold ? 700 : 300)};\n color: ${props => (props.grayDark ? grayDark : \"\")};\n margin-bottom: ${props => (props.marginBottom ? \"0.25rem\" : \"\")};\n display: flex;\n justify-content: left;\n align-items: center;\n`;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport { blue, blueLightest } from \"../../styles/colors\";\nimport { adjustColor } from \"../../utils/styleHelpers\";\n\nconst Button = styled.button`\n &&& {\n color: ${blue};\n background-color: white;\n border: 1px solid ${blue};\n border-radius: 4px;\n padding: 0.75rem 1rem;\n margin: 1rem 0;\n &:hover {\n color: ${adjustColor(blue, -18)};\n border: 1px solid ${adjustColor(blue, -18)};\n background-color: ${blueLightest};\n }\n }\n`;\n\nexport default function ButtonSecondary(props) {\n const { text, onClick, isDisabled, dataTestId } = props;\n const disabledClass = isDisabled ? \"disabled\" : \"\";\n return (\n \n {text}\n \n );\n}\n\nButtonSecondary.propTypes = {\n text: PropTypes.string,\n onClick: PropTypes.func,\n isDisabled: PropTypes.bool,\n dataTestId: PropTypes.string\n};\n","import { useEffect, useRef } from \"react\";\n\nexport const useDidMountEffect = (func, deps) => {\n const didMount = useRef(false);\n\n useEffect(() => {\n if (didMount.current) func();\n else didMount.current = true;\n }, deps);\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport * as colors from \"../../../styles/colors\";\nimport { adjustColor } from \"../../../utils/styleHelpers\";\n\nconst TagContainer = styled.div`\n font-weight: 700;\n padding: 0.25rem;\n width: fit-content;\n border-radius: 4px;\n align-items: baseline;\n border: 1px solid ${props => props.color};\n color: ${props => props.color};\n background-color: ${props => adjustColor(props.color, 50)};\n margin: ${props => props.margin};\n\n &:hover {\n color: ${props => adjustColor(props.color, -10)};\n }\n`;\nexport default function StatusTag(props) {\n const { color = colors.orange, text = \"Status\", margin = \"0\" } = props;\n\n return (\n \n {text}\n \n );\n}\n\nStatusTag.propTypes = {\n color: PropTypes.string,\n text: PropTypes.string,\n margin: PropTypes.string\n};\n\n// Example Usage:\n// \n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useAlert } from \"react-alert\";\nimport Loader from \"react-loader-spinner\";\nimport styled from \"styled-components\";\nimport PhoneField from \"../../FormFields/PhoneField\";\nimport { formHeaders } from \"../../../utils/form\";\nimport { blue, grayDarker } from \"../../../styles/colors\";\nimport ButtonSecondary from \"../ButtonSecondary\";\nimport SelectBox from \"../../SalesFlow/SelectBox\";\n\nconst ExistingPersonPrompt = styled.div`\n width: 21rem;\n &&& {\n h6 {\n margin-bottom: 1rem;\n color: ${grayDarker};\n font-weight: 600;\n }\n a {\n text-decoration: none;\n }\n }\n`;\n\nexport default function OrganizationPersonForm(props) {\n const { organizationId, updateParentObject, personType = \"person\" } = props;\n\n const popup = useAlert();\n\n const [formState, setFormState] = useState({\n firstName: \"\",\n lastName: \"\",\n email: \"\"\n });\n\n const handleChange = e => {\n setFormState({\n ...formState,\n [e.target.name]: e.target.value\n });\n };\n\n const [showForm, setShowForm] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n\n const [existingPerson, setExistingPerson] = useState(null);\n\n const [loading, setLoading] = useState(false);\n\n const createPerson = async () => {\n setLoading(true);\n try {\n const url = Routes.people_organization_path(organizationId);\n\n const { firstName, lastName, email } = formState;\n\n const requestBody = {\n person: {\n first_name: firstName,\n last_name: lastName,\n email\n }\n };\n\n const response = await fetch(url, {\n method: \"PUT\",\n headers: formHeaders(),\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n popup.show(\"Person could not be created\", { type: \"error\" });\n setLoading(false);\n }\n\n if (response.ok) {\n const json = await response.json();\n\n if (json.preexisting) {\n setTimeout(() => {\n setExistingPerson(json.person);\n setLoading(false);\n }, 1500);\n } else {\n updateParentObject(json);\n setFormState({\n firstName: \"\",\n lastName: \"\",\n email: \"\"\n });\n setShowForm(false);\n setLoading(false);\n }\n }\n } catch (error) {\n popup.show(error.message, { type: \"error\" });\n setLoading(false);\n }\n };\n\n const handleExistingPerson = person => {\n updateParentObject(person);\n setFormState({\n firstName: \"\",\n lastName: \"\",\n email: \"\"\n });\n setExistingPerson(null);\n setShowForm(false);\n };\n\n return (\n <>\n {!showForm && (\n setShowForm(true)}\n />\n )}\n {showForm && (\n
\n
\n

Add a new person

\n setShowForm(false)}\n onKeyDown={() => setShowForm(false)}\n >\n REMOVE\n \n
\n {existingPerson && (\n \n
Is this the person you're looking for?
\n {}}\n />\n \n setExistingPerson(null)}\n onKeyDown={() => setExistingPerson(null)}\n >\n No, wrong person.\n \n handleExistingPerson(existingPerson)}\n onKeyDown={() => handleExistingPerson(existingPerson)}\n >\n Yes\n \n
\n \n )}\n {!existingPerson && (\n <>\n
\n handleChange(e)}\n >\n \n
\n
\n handleChange(e)}\n >\n \n
\n
\n handleChange(e)}\n >\n \n
\n {showDetails && (\n <>\n setShowDetails(false)}\n onKeyDown={() => setShowDetails(false)}\n role=\"button\"\n tabIndex={0}\n >\n Hide Details\n \n
\n \n
\n
\n \n
\n
US Mailing Address
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n )}\n {loading && (\n \n )}\n
\n
\n createPerson()}\n style={{\n border: `1px solid ${blue}`,\n width: \"6rem\",\n marginLeft: \"auto\",\n gridColumn: 2\n }}\n >\n Save\n \n
\n \n )}\n
\n )}\n \n );\n}\n\nOrganizationPersonForm.propTypes = {\n organizationId: PropTypes.string,\n updateParentObject: PropTypes.func\n};\n","import React, { useEffect } from \"react\"\n\nexport function useDeprecated(component, message) {\n useEffect(() => {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`${component.name} has been deprecated.`, message)\n }\n })\n}","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Container = styled.div`\n @import url(\"https://fonts.googleapis.com/css2?family=Inter&display=swap\");\n\n margin: 1rem;\n height: fit-content;\n max-width: 500px;\n box-shadow: 0px 1px 2px #e8e8e8;\n background-color: #ffffff;\n border-left: 3px;\n border-radius: 4px;\n display: inline-flex;\n animation: grow 0.5s ease-in forwards;\n font-family: \"Inter\";\n`;\n\nconst Rectangle = styled.div`\n height: auto;\n width: 4px;\n border-radius: 4px;\n background-color: ${props => props.color};\n`;\n\nconst Icon = styled.i`\n align-self: center;\n font-size: 30px;\n margin-right: 1rem;\n color: ${props => props.color};\n`;\n\nconst Message = styled.div`\n width: fit-content;\n font-size: 18px;\n align-self: center;\n`;\n\nconst Info = styled.div`\n display: inline-flex;\n font-size: 16px;\n padding: 1rem;\n line-height: 20px;\n`;\n\nexport default function AlertTemplate({ options, message }) {\n let color;\n let icon;\n\n switch (options.type) {\n case \"error\":\n color = \"#FF5C5C\";\n icon = \"far fa-exclamation-circle\";\n break;\n case \"success\":\n color = \"#41CD7E\";\n icon = \"far fa-check-circle\";\n break;\n default:\n color = \"#2680FA\";\n icon = \"fas fa-arrow-alt-circle-right\";\n }\n\n return (\n \n \n \n \n {message}\n \n \n );\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n white,\n grayLight,\n gray,\n grayDarkest,\n red\n} from \"../../../styles/colors\";\nimport UserAvatar from \"../UserAvatar\";\n\nconst UserMenuBox = styled.div`\n background: ${white};\n border-radius: 6px;\n width: 229px;\n height: auto;\n position: absolute;\n top: 5rem;\n right: 1rem;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 1rem;\n box-shadow: 0px 3px 5px ${gray};\n\n hr {\n margin: 1rem -1.5rem;\n height: 1px;\n background-color: ${grayLight};\n border: none;\n }\n\n text-align: left;\n\n ul {\n display: grid;\n margin-bottom: 0;\n a {\n font-size: 16px;\n font-weight: 300;\n color: ${grayDarkest};\n &:visited {\n color: ${grayDarkest};\n }\n :last-child {\n margin-top: 0.5rem;\n }\n }\n }\n`;\n\nexport default function UserMenu(props) {\n const { user, avatarInitials } = props;\n\n return (\n \n \n {avatarInitials}\n \n
{user.fullName}
\n {user.email}\n
\n \n
\n \n Sign Out\n \n
\n );\n}\n","import { useState } from \"react\";\n\nexport function usePagination(data, ipp) {\n const [currentPage, setCurrentPage] = useState(1);\n const [itemsPerPage, setItemsPerPage] = useState(ipp);\n const maxPage = Math.ceil(data.length / itemsPerPage);\n\n const nextPage = () => setCurrentPage(cp => Math.min(cp + 1, maxPage));\n\n const prevPage = () => setCurrentPage(cp => Math.max(cp - 1, 1));\n\n const currentData = () => {\n const start = (currentPage - 1) * itemsPerPage;\n const end = start + itemsPerPage;\n return data.slice(start, end);\n };\n\n const showAll = () => {\n setCurrentPage(1);\n setItemsPerPage(data.length);\n };\n\n const repaginate = () => setItemsPerPage(ipp);\n\n const startIndex = (currentPage - 1) * itemsPerPage + 1;\n\n const endIndex = Math.min(startIndex + itemsPerPage - 1, data.length);\n\n return {\n nextPage,\n prevPage,\n currentData,\n currentPage,\n setCurrentPage,\n showAll,\n repaginate,\n maxPage,\n startIndex,\n endIndex\n };\n}\n","/* eslint-disable react/destructuring-assignment */\nimport React from \"react\";\n\nexport default function Select(props) {\n /*\n Props: {\n options* List of label and value pairs to populate the select field\n value Default value applied to the component\n name* Name to be applied to the field\n placeholder Default first option in the list\n onSelect Callback function to be executed onChange of the select input\n }\n */\n\n const optionsForSelect = props.options.map(option => {\n let label;\n let value;\n if (typeof option === \"object\" && option.length > 1) {\n [label, value] = option;\n } else {\n label = option;\n value = option;\n }\n return (\n \n );\n });\n const placeholder = props.placeholder || \"Please select one\";\n\n return (\n props.onSelect(e)}\n >\n \n {optionsForSelect}\n \n );\n}\n","import React from \"react\";\nimport RadioButton from \"./RadioButton\";\n\nexport default function RadioButtonGroup(props) {\n /*\n Props: {\n options: array of options\n value: existing value if any\n name: name of the attribute being passed to the server\n onChange: function of how to handle change\n labelClassName: class to be applied to the label\n }\n */\n\n return props.options.map(option => {\n const [label, value] = option;\n const attributeValue = props.value;\n return (\n \n );\n });\n}\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport DataListInput from \"../DataListInput/DataListInput\";\n\nexport default function AutoSuggest(props) {\n const {\n items,\n label,\n placeholder = \"Select an option from the drop down menu...\",\n initialValue,\n handleSelect,\n handleInputChange,\n inputComponent\n } = props;\n // selectedItem\n const [, setSelectedItem] = useState();\n\n const onSelect = useCallback(selected => {\n setSelectedItem(selected);\n handleSelect(selected);\n }, []);\n\n const onInput = useCallback(value => {\n // clear selected item when input value changes\n handleSelect({});\n handleInputChange(value);\n });\n\n // the array you want to pass to the react-data-list component\n // key and label are required properties\n const memoizedItems = useMemo(\n () =>\n items.map(item => ({\n // required: what to show to the user\n label: item.label,\n // required: key to identify the item within the array\n key: item.id,\n // feel free to add your own app logic to access those properties in the onSelect function\n someAdditionalValue: item.someAdditionalValue,\n // or just keep everything\n ...item\n })),\n [items]\n );\n\n return (\n <>\n \n \n );\n}\n","export const generateDocumentReducer = (state, action) => {\n switch (action.type) {\n case \"GENERATE_STARTED\": {\n return {\n ...state,\n loading: true,\n generated: false,\n popupMessage: null,\n popupType: null\n };\n }\n case \"GENERATE_COMPLETE\": {\n return {\n ...state,\n generated: true,\n response: action.response,\n popupMessage: \"Your document was successfully generated.\",\n popupType: \"success\",\n loading: false\n };\n }\n case \"GENERATE_ERROR\": {\n return {\n ...state,\n generated: false,\n popupMessage: `Your document could not be generated. ${action.popupMessage}`,\n popupType: \"error\",\n loading: false\n };\n }\n default: {\n return state;\n }\n }\n};\n","import styled from \"styled-components\";\nimport {\n gray,\n grayDarkest,\n grayLight,\n red,\n white\n} from \"../../../styles/colors\";\n\nexport const ContextMenu = styled.div`\n background: ${white};\n border-radius: 2px;\n width: auto;\n height: auto;\n box-shadow: 0px 3px 5px ${gray};\n\n a {\n padding: 1rem;\n height: 100%;\n width: 100%;\n color: ${grayDarkest};\n &:visited {\n color: ${grayDarkest};\n }\n :last-child {\n color: ${red};\n }\n }\n\n hr {\n margin: 0;\n height: 1px;\n background-color: ${grayLight};\n border: none;\n }\n`;\n","import React, { createContext, useState, useContext } from \"react\";\n\nconst DashboardContext = createContext(null);\n\nexport const useDashboardContext = () => {\n const dashboardContext = useContext(DashboardContext);\n\n if (dashboardContext === null) {\n throw new Error(\n \"useDashboardContext must be used within a DashboardContextProvider tag\"\n );\n }\n return dashboardContext;\n};\n\nexport function DashboardContextProvider({ children }) {\n // this is the global state store for the client dashboard\n const [state, setState] = useState(null);\n\n return (\n \n {children}\n \n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useHotkeys } from \"../../../hooks/useHotKeys\";\nimport { useOnClickOutside } from \"../../../hooks/useOnClickOutside\";\n\nconst Container = styled.div`\n padding: 1.5rem;\n display: grid;\n grid-template-rows: 6fr 1fr;\n background: white;\n border: none;\n border-radius: 6px;\n flex-shrink: 0;\n position: fixed;\n animation: scaleUp 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards;\n z-index: 100;\n width: auto;\n height: auto;\n\n box-shadow: 0px 6px 6px 0px 0, 0, 0, 0.75;\n\n @media (min-width: 900px) {\n width: 42rem;\n height: 26rem;\n }\n`;\n\nconst Overlay = styled.div`\n z-index: 10;\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: rgb(58, 72, 97, 0.37);\n\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport default function ProgressTrackerModal({ show, cleanup, children }) {\n const [modalVisible, setModalVisible] = useState(true);\n const [shouldRender, setRender] = useState(show);\n\n const containerRef = useRef();\n\n useOnClickOutside(containerRef, () => {\n setModalVisible(false);\n cleanup();\n });\n\n useHotkeys(\"esc\", () => {\n setModalVisible(false);\n cleanup();\n });\n\n useEffect(() => {\n if (show) setRender(true);\n }, [show]);\n\n const onAnimationEnd = () => {\n if (!show) setRender(false);\n };\n\n if (modalVisible)\n return (\n \n {shouldRender && (\n \n {children}\n \n )}\n \n );\n return null;\n}\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { useState } from \"react\";\nimport Collapse from \"react-css-collapse\";\nimport styled from \"styled-components\";\nimport { grayDarker } from \"../../../styles/colors\";\n\nconst Container = styled.div`\n header {\n display: flex;\n align-items: baseline;\n color: ${grayDarker};\n cursor: pointer;\n outline: none;\n h4 {\n font-weight: 400px;\n }\n }\n i {\n width: 36px;\n }\n button {\n width: 100%;\n padding: 1rem;\n }\n`;\nexport default function Dropdown(props) {\n const { name, children } = props;\n\n const [dropdownOpen, setDropdownOpen] = useState(true);\n\n return (\n \n setDropdownOpen(!dropdownOpen)}\n onKeyDown={() => setDropdownOpen(!dropdownOpen)}\n >\n \n

{name}

\n \n \n {children}\n \n
\n );\n}\n","/* eslint-disable import/no-unresolved */\n/* eslint-disable global-require */\nimport React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport { NavLink } from \"react-router-dom\";\nimport UserMenu from \"../UserMenu/UserMenu\";\nimport UserAvatar from \"../UserAvatar\";\nimport { avatarInitials } from \"../../../utils/userHelpers\";\nimport {\n blue,\n grayDark,\n grayDarker,\n grayDarkest,\n grayLighter\n} from \"../../../styles/colors\";\nimport { formHeaders } from \"../../../utils/form\";\n\nconst NavIcon = styled.img`\n margin-right: 1.5rem;\n cursor: pointer;\n`;\n\nconst Drawer = styled.nav`\n &&& {\n position: fixed;\n top: 64;\n left: 0;\n z-index: 10;\n padding: 1.5rem;\n height: 100%;\n width: 14rem;\n display: flex;\n flex-direction: column;\n background-color: ${grayLighter};\n box-shadow: 0px 6px 0px ${grayLighter};\n\n a {\n font-size: 1em;\n color: ${grayDarker};\n font-weight: 300;\n &:hover {\n color: ${blue};\n }\n margin: 0.5rem 0;\n\n i {\n width: 0.5rem;\n margin-right: 1.5rem;\n }\n }\n }\n`;\n\nconst MenuItem = styled.a`\n &&& {\n font-weight: ${props => (props.isActive ? 600 : 300)} !important;\n }\n`;\n\nconst Overlay = styled.div`\n z-index: 9;\n position: fixed;\n top: 64;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0.5;\n background-color: black;\n`;\n\nfunction NavDrawer(props) {\n const { useBrowserRouter } = props;\n const { pathname } = window.location;\n\n return (\n \n \n \n Petitions\n \n \n \n People\n \n \n \n Employees\n \n \n \n Clients\n \n \n \n Help Center\n \n {!useBrowserRouter && (\n <>\n \n \n New Deal\n \n \n \n Deals\n \n \n \n Services\n \n \n \n Workflows\n \n \n )}\n {/* use react router when possible for speedy transitions */}\n {/* common nav must be wrapped in `` */}\n {useBrowserRouter && (\n <>\n \n \n New Deal\n \n\n \n \n Deals\n \n\n \n \n Services\n \n\n \n \n Workflows\n \n \n )}\n \n );\n}\n\nexport default function CommonNav(props) {\n const {\n home = { text: \"Legalpad\", href: \"/petitions\" },\n title = null,\n subTitle = null,\n useBrowserRouter = false\n } = props;\n\n const { pathname } = window.location;\n\n const parsedTitle = pathname.split(\"/\")[2];\n\n const [user, setUser] = useState({});\n\n const [navVisible, setNavVisible] = useState(false);\n\n const [showUserMenu, setShowUserMenu] = useState(false);\n\n useEffect(() => {\n setNavVisible(false);\n }, [pathname]);\n\n useEffect(() => {\n const fetchUser = async () => {\n try {\n const url = Routes.users_current_path();\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: formHeaders()\n });\n\n if (!response.ok) {\n alert(\"Something went wrong fetching the current user\");\n }\n\n if (response.ok) {\n const json = await response.json();\n setUser(json);\n }\n } catch (error) {\n alert(error);\n }\n };\n fetchUser();\n }, []);\n\n return (\n <>\n
\n
\n {user.superuser && (\n setNavVisible(!navVisible)}\n />\n )}\n \n {home.text}\n \n {(title || parsedTitle) && (\n \n )}\n \n
\n {title?.text ?? parsedTitle}\n
\n
\n {subTitle && (\n \n )}\n \n
{subTitle?.text}
\n
\n
\n
\n setShowUserMenu(!showUserMenu)}\n onKeyDown={() => setShowUserMenu(!showUserMenu)}\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }}\n >\n \n {avatarInitials(user.firstName, user.lastName)}\n \n \n
\n {showUserMenu && (\n \n )}\n \n
\n {navVisible && (\n <>\n \n setNavVisible(!navVisible)} />\n \n )}\n \n );\n}\n\nCommonNav.propTypes = {\n home: PropTypes.object,\n title: PropTypes.object\n};\n","import React from \"react\";\n\nexport default function RadioButton(props) {\n /*\n Props: {\n name: name of the attribute being passed to the server\n label: display name of the radio button option\n value: value to be sent to the server\n onChange: function of how to handle change\n defaultChecked: True/False if the radio button should be checked\n labelClassName: class to be applied to the label\n }\n */\n\n const { labelClassName, label, ...inputProps } = props;\n return (\n \n );\n}\n","import styled from \"styled-components\";\nimport { blue, gray, grayLight, white } from \"../../../styles/colors\";\n\nexport const IndexRow = styled.tr`\n :first-child {\n div,\n th {\n cursor: pointer;\n text-align: left;\n font-weight: 500;\n :last-child {\n margin-right: -0.5rem;\n }\n }\n padding: 1rem;\n }\n\n &:not(:first-child) {\n background: ${white};\n border: 1px solid ${grayLight};\n border-radius: 8px;\n margin-bottom: 1rem;\n border-left: 4px solid transparent;\n\n &:hover {\n border-left: 4px solid ${blue};\n box-shadow: 0px 3px 5px ${gray};\n cursor: ${props => (props.clickable ? \"pointer\" : \"\")};\n }\n }\n .actions {\n text-align: right;\n button {\n display: inline-block;\n }\n }\n\n display: grid;\n justify-content: center;\n align-items: center;\n grid-template-columns: repeat(auto-fit, minmax(min(12rem, 100%), 1fr));\n column-gap: 0.5rem;\n padding: 1rem;\n\n td:not(:last-child) {\n max-width: max(10rem, 100%);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function FileUpload(props) {\n const { attribute = {}, setLoading, filesPresent = false } = props;\n\n const handleChange = e => {\n setLoading(true);\n props.handleUpload(e);\n };\n\n const inputId = Math.random();\n\n return (\n <>\n \n \n \n handleChange(e)}\n />\n \n \n );\n}\n\nFileUpload.propTypes = {\n attribute: PropTypes.object,\n setLoading: PropTypes.func,\n // eslint-disable-next-line react/boolean-prop-naming\n filesPresent: PropTypes.bool\n};\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport { Checkbox } from \"./Checkbox\";\n\nconst Label = styled.label`\n display: flex;\n align-items: baseline;\n`;\n\nexport default function CheckBoxItem(props) {\n const { checked, handleChange, text, name, value } = props;\n return (\n \n );\n}\n\nCheckBoxItem.propTypes = {\n // eslint-disable-next-line react/boolean-prop-naming\n checked: PropTypes.bool,\n handleChange: PropTypes.func,\n text: PropTypes.string,\n name: PropTypes.string\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst CheckboxContainer = styled.div`\n display: inline-block;\n vertical-align: middle;\n cursor: pointer;\n`;\n\nconst Icon = styled.svg`\n fill: none;\n stroke: white;\n stroke-width: 2px;\n`;\n// Hide checkbox visually but remain accessible to screen readers.\n// Source: https://polished.js.org/docs/#hidevisually\nconst HiddenCheckbox = styled.input.attrs({ type: \"checkbox\" })`\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n`;\n\nconst StyledCheckbox = styled.div`\n display: inline-block;\n width: 16px;\n height: 16px;\n background: ${props => (props.checked ? \"#2680FA\" : \"white\")};\n border: 1px solid #b9bfcb;\n border-radius: 3px;\n transition: all 150ms;\n\n ${Icon} {\n visibility: ${props => (props.checked ? \"visible\" : \"hidden\")};\n }\n`;\n\nexport const Checkbox = ({ className, checked, ...props }) => (\n \n \n \n \n \n \n \n \n);\n","export const fetchReducer = (state, action) => {\n switch (action.type) {\n case \"FETCH_STARTED\": {\n return {\n ...state,\n loading: true,\n success: false,\n response: null\n };\n }\n case \"FETCH_COMPLETE\": {\n return {\n ...state,\n loading: false,\n success: true,\n response: action.response\n };\n }\n case \"FETCH_ERROR\": {\n return {\n ...state,\n loading: false,\n success: false\n };\n }\n default: {\n return state;\n }\n }\n};\n","import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo\n} from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport useStateRef from \"./useStateRef\";\n\nconst Container = styled.div`\n .datalist-input {\n /*the container must be positioned relative:*/\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n .datalist-input .autocomplete-input {\n width: 100%;\n }\n\n .datalist-input .datalist-items {\n position: absolute;\n z-index: 99;\n /*position the autocomplete items to be the same width as the container:*/\n top: 100%;\n left: 0;\n right: 0;\n border-radius: 0 0 4px 4px;\n max-height: 24rem;\n overflow: auto;\n div:last-child {\n border-radius: 0 0 4px 4px;\n }\n }\n\n .datalist-input .default-datalist-items {\n border: 1px solid #d4d4d4;\n border-bottom: none;\n border-top: none;\n }\n\n .datalist-input .default-datalist-items div:not(.datalist-active-item) {\n padding: 10px;\n cursor: pointer;\n background-color: #fff;\n border-bottom: 1px solid #d4d4d4;\n }\n\n .datalist-input .default-datalist-items div:not(.datalist-active-item):hover {\n /*when hovering an item:*/\n background-color: #e9e9e9;\n }\n\n .datalist-input .datalist-active-item {\n /*when navigating through the items using the arrow keys:*/\n cursor: pointer;\n }\n\n .datalist-input .datalist-active-item-default {\n background-color: #2680fa;\n color: #ffffff;\n border-bottom: 1px solid #d4d4d4;\n padding: 10px;\n }\n`;\n\n/**\n * default matching function\n * @param currentInput\n * @param item\n * @returns {boolean}\n */\nconst labelMatch = (currentInput, item) =>\n item.label?.toLowerCase().includes(currentInput.toLowerCase());\n\n/**\n * function for getting the index of the currentValue inside a value of the values array\n * @param currentInput\n * @param item\n * @returns {number}\n */\nconst indexOfMatch = (currentInput, item) =>\n item.label.toLowerCase().indexOf(currentInput.toLowerCase());\n\n/**\n * index of item in items\n * @param {*} item\n * @param {*} items\n */\nconst indexOfItem = (item, items) =>\n items.indexOf(items.find(i => i.key === item.key));\n\nconst DataListInput = ({\n activeItemClassName,\n clearInputOnSelect,\n debounceLoader,\n debounceTime,\n dropdownClassName,\n dropDownLength,\n initialValue,\n inputClassName,\n itemClassName,\n match,\n onDropdownClose,\n onDropdownOpen,\n onInput,\n onSelect,\n label,\n placeholder,\n requiredInputLength,\n suppressReselect,\n items,\n inputComponent\n}) => {\n /* last valid item that was selected from the drop down menu */\n const [lastValidItem, setLastValidItem] = useState();\n /* current input text */\n const [currentInput, setCurrentInput, currentInputRef] = useStateRef(\n initialValue\n );\n /* current set of matching items */\n const [matchingItems, setMatchingItems] = useState([]);\n /* visibility property of the drop down menu */\n const [visible, setVisible, visibleRef] = useStateRef(false);\n /* index of the currently focused item in the drop down menu */\n const [focusIndex, setFocusIndex] = useState(0);\n /* cleaner click events, click interaction within dropdown menu */\n const interactionHappenedRef = useRef(false);\n /* show loader if still matching in debounced mode */\n const [isMatchingDebounced, setIsMatchingDebounced] = useState(false);\n\n /* to manage debouncing of matching, typing input into the input field */\n const inputHappenedTimeout = useRef();\n const menu = useRef();\n const inputField = useRef();\n\n useEffect(() => {\n const onClickCloseMenu = event => {\n if (!menu.current) return;\n // if rerender, items inside might change, allow one click without further checking\n if (interactionHappenedRef.current) {\n interactionHappenedRef.current = false;\n return;\n }\n // do not do anything if input is clicked, as we have a dedicated func for that\n if (!inputField.current) return;\n const targetIsInput = event.target === inputField.current;\n const targetInInput = inputField.current.contains(event.target);\n if (targetIsInput || targetInInput) return;\n\n // do not close menu if user clicked inside\n const targetInMenu = menu.current.contains(event.target);\n const targetIsMenu = event.target === menu.current;\n if (targetInMenu || targetIsMenu) return;\n\n if (visibleRef.current) {\n setVisible(false);\n setFocusIndex(-1);\n onDropdownClose();\n }\n };\n window.addEventListener(\"click\", onClickCloseMenu, false);\n return () => {\n window.removeEventListener(\"click\", onClickCloseMenu);\n };\n }, [onDropdownClose, setVisible, visibleRef]);\n\n useEffect(() => {\n // if we have an initialValue, we want to reset it everytime we update and are empty\n // also setting a new initialValue will trigger this\n if (!currentInput && initialValue && !visible && !isMatchingDebounced) {\n setCurrentInput(initialValue);\n }\n }, [\n currentInput,\n visible,\n isMatchingDebounced,\n initialValue,\n setCurrentInput\n ]);\n\n /**\n * runs the matching process of the current input\n * and handles debouncing the different callback calls to reduce lag time\n * for bigger datasets or heavier matching algorithms\n * @param nextInput\n */\n const debouncedMatchingUpdateStep = useCallback(\n nextInput => {\n // cleanup waiting update step\n if (inputHappenedTimeout.current) {\n clearTimeout(inputHappenedTimeout.current);\n inputHappenedTimeout.current = null;\n }\n\n // set nextInput into input field and show loading if debounced mode is on\n const reachedRequiredLength = nextInput.length >= requiredInputLength;\n const showMatchingStillLoading =\n debounceTime >= 0 && reachedRequiredLength;\n setCurrentInput(nextInput);\n setIsMatchingDebounced(showMatchingStillLoading);\n // no matching if we do not reach required input length\n if (!reachedRequiredLength) return;\n\n const updateMatchingItems = () => {\n // matching process to find matching entries in items array\n const updatedMatchingItems = items.filter(item => {\n if (typeof match === typeof Function) return match(nextInput, item);\n return labelMatch(nextInput, item);\n });\n const displayableItems = updatedMatchingItems.slice(0, dropDownLength);\n const showDragIndex = lastValidItem && !clearInputOnSelect;\n const index = showDragIndex\n ? indexOfItem(lastValidItem, displayableItems)\n : 0;\n if (displayableItems.length) {\n if (!visibleRef.current) {\n onDropdownOpen();\n }\n setMatchingItems(displayableItems);\n setFocusIndex(index > 0 ? index : 0);\n setIsMatchingDebounced(false);\n setVisible(true);\n } else {\n if (visibleRef.current) {\n setVisible(false);\n onDropdownClose();\n }\n setMatchingItems(displayableItems);\n setFocusIndex(-1);\n setIsMatchingDebounced(false);\n }\n };\n\n if (debounceTime <= 0) {\n updateMatchingItems();\n } else {\n inputHappenedTimeout.current = setTimeout(\n updateMatchingItems,\n debounceTime\n );\n }\n },\n [\n requiredInputLength,\n debounceTime,\n setCurrentInput,\n items,\n dropDownLength,\n lastValidItem,\n clearInputOnSelect,\n match,\n setVisible,\n onDropdownOpen,\n visibleRef,\n onDropdownClose\n ]\n );\n\n /**\n * gets called when someone starts to write in the input field\n * @param value\n */\n const onHandleInput = useCallback(\n event => {\n const { value } = event.target;\n debouncedMatchingUpdateStep(value);\n onInput(value);\n },\n [debouncedMatchingUpdateStep, onInput]\n );\n\n const onClickInput = useCallback(() => {\n let value = currentInputRef.current;\n // if user clicks on input field with initialValue,\n // the user most likely wants to clear the input field\n if (initialValue && value === initialValue) {\n value = \"\";\n }\n\n const reachedRequiredLength = value.length >= requiredInputLength;\n if (reachedRequiredLength && !visibleRef.current) {\n debouncedMatchingUpdateStep(value);\n }\n }, [\n currentInputRef,\n initialValue,\n requiredInputLength,\n visibleRef,\n debouncedMatchingUpdateStep\n ]);\n\n /**\n * handleSelect is called onClickItem and onEnter upon an option of the drop down menu\n * does nothing if the key has not changed since the last onSelect event\n * @param selectedItem\n */\n const onHandleSelect = useCallback(\n selectedItem => {\n // block select call until last matching went through\n if (isMatchingDebounced) return;\n\n setCurrentInput(clearInputOnSelect ? \"\" : selectedItem.label);\n setVisible(false);\n setFocusIndex(-1);\n interactionHappenedRef.current = true;\n onDropdownClose();\n\n if (\n suppressReselect &&\n lastValidItem &&\n selectedItem.key === lastValidItem.key\n ) {\n // do not trigger the callback function\n // but still change state to fit new selection\n return;\n }\n // change state to fit new selection\n setLastValidItem(selectedItem);\n // callback function onSelect\n onSelect(selectedItem);\n },\n [\n isMatchingDebounced,\n setCurrentInput,\n clearInputOnSelect,\n setVisible,\n onDropdownClose,\n suppressReselect,\n lastValidItem,\n onSelect\n ]\n );\n\n /**\n * handle key events\n * @param event\n */\n const onHandleKeydown = useCallback(\n event => {\n // only do something if drop-down div is visible\n if (!visibleRef.current) return;\n let currentFocusIndex = focusIndex;\n if (event.keyCode === 40 || event.keyCode === 9) {\n // If the arrow DOWN key or tab is pressed increase the currentFocus variable:\n currentFocusIndex += 1;\n if (currentFocusIndex >= matchingItems.length) currentFocusIndex = 0;\n setFocusIndex(currentFocusIndex);\n // prevent tab to jump to the next input field if drop down is still open\n event.preventDefault();\n } else if (event.keyCode === 38) {\n // If the arrow UP key is pressed, decrease the currentFocus variable:\n currentFocusIndex -= 1;\n if (currentFocusIndex <= -1)\n currentFocusIndex = matchingItems.length - 1;\n setFocusIndex(currentFocusIndex);\n } else if (event.keyCode === 13) {\n // Enter pressed, similar to onClickItem\n if (focusIndex > -1) {\n // Simulate a click on the \"active\" item:\n const selectedItem = matchingItems[currentFocusIndex];\n onHandleSelect(selectedItem);\n }\n }\n },\n [focusIndex, matchingItems, onHandleSelect, visibleRef]\n );\n\n const renderItemLabel = useCallback(\n item => {\n const index = indexOfMatch(currentInput, item);\n const inputLength = currentInput.length;\n return (\n <>\n {index >= 0 && inputLength ? (\n // renders label with matching search string marked\n <>\n {item.label.substr(0, index)}\n {item.label.substr(index, inputLength)}\n {item.label.substr(index + inputLength, item.label.length)}\n \n ) : (\n item.label\n )}\n \n );\n },\n [currentInput]\n );\n\n const renderItems = useCallback(\n () => (\n <>\n {matchingItems.map((item, i) => {\n const isActive = focusIndex === i;\n const itemActiveClasses = isActive\n ? `datalist-active-item ${activeItemClassName ||\n \"datalist-active-item-default\"}`\n : \"\";\n const itemClasses = `${itemClassName} ${itemActiveClasses}`;\n return (\n onHandleSelect(item)}\n className={itemClasses}\n key={item.key}\n tabIndex={0}\n role=\"button\"\n aria-label={item.label}\n onKeyUp={event => event.preventDefault()}\n >\n {renderItemLabel(item)}\n \n );\n })}\n \n ),\n [\n matchingItems,\n focusIndex,\n activeItemClassName,\n itemClassName,\n onHandleSelect,\n renderItemLabel\n ]\n );\n const dropDown = useMemo(() => {\n const reachedRequiredLength =\n currentInputRef.current.length >= requiredInputLength;\n if (reachedRequiredLength && isMatchingDebounced) {\n return (\n \n
{debounceLoader || \"loading...\"}
\n \n );\n }\n if (reachedRequiredLength && visible) {\n return (\n \n {renderItems()}\n \n );\n }\n return undefined;\n }, [\n currentInputRef,\n requiredInputLength,\n isMatchingDebounced,\n visible,\n dropdownClassName,\n itemClassName,\n debounceLoader,\n renderItems\n ]);\n return (\n \n
\n
\n \n \n {dropDown}\n
\n
\n
\n );\n};\nDataListInput.propTypes = {\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired\n })\n ).isRequired,\n placeholder: PropTypes.string,\n onSelect: PropTypes.func.isRequired,\n onDropdownOpen: PropTypes.func,\n onDropdownClose: PropTypes.func,\n match: PropTypes.func,\n inputClassName: PropTypes.string,\n dropdownClassName: PropTypes.string,\n itemClassName: PropTypes.string,\n activeItemClassName: PropTypes.string,\n requiredInputLength: PropTypes.number,\n clearInputOnSelect: PropTypes.bool,\n suppressReselect: PropTypes.bool,\n dropDownLength: PropTypes.number,\n initialValue: PropTypes.string,\n debounceTime: PropTypes.number,\n debounceLoader: PropTypes.node,\n onInput: PropTypes.func\n};\nDataListInput.defaultProps = {\n placeholder: \"\",\n match: undefined,\n inputClassName: \"\",\n dropdownClassName: \"\",\n itemClassName: \"\",\n activeItemClassName: \"\",\n requiredInputLength: 0,\n clearInputOnSelect: false,\n suppressReselect: true,\n dropDownLength: Infinity,\n initialValue: \"\",\n debounceTime: 0,\n debounceLoader: undefined,\n onDropdownOpen: () => {},\n onDropdownClose: () => {},\n onInput: () => {}\n};\nexport default DataListInput;\n","import { useState, useRef } from \"react\";\n\nconst useStateRef = initalState => {\n const [state, setState] = useState(initalState);\n const ref = useRef(initalState);\n const setStateRef = newState => {\n setState(newState);\n ref.current = newState;\n };\n return [state, setStateRef, ref];\n};\n\nexport default useStateRef;\n","import React, { createContext, useState, useEffect, useContext } from \"react\";\nimport { formHeaders } from \"../../../utils/form\";\n\nconst AuthContext = createContext(null);\n\nexport const useAuthContext = () => {\n const authContext = useContext(AuthContext);\n\n if (authContext === null) {\n throw new Error(\n \"useAuthContext must be used within an AuthContextProvider tag\"\n );\n }\n return authContext;\n};\n\nexport const AuthContextProvider = ({ children }) => {\n const [user, setUser] = useState(null);\n\n useEffect(() => {\n const fetchUser = async () => {\n try {\n const url = Routes.users_current_path();\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: formHeaders()\n });\n\n if (!response.ok) {\n alert(\"Something went wrong fetching the current user\");\n }\n\n if (response.ok) {\n const json = await response.json();\n setUser(json);\n }\n } catch (error) {\n alert(error);\n }\n };\n fetchUser();\n }, []);\n\n if (user)\n return {children};\n return
;\n};\n","import React from \"react\";\n\nfunction useExpiration(expirationDate) {\n const [shouldRender, setShouldRender] = React.useState(true);\n React.useEffect(() => {\n const timeoutId = setTimeout(() => {\n setShouldRender(false);\n }, expirationDate - Date.now());\n\n return () => clearTimeout(timeoutId);\n }, [expirationDate]);\n return shouldRender;\n}\n\nfunction useExpirationUI(expirationDate, renderableThing) {\n return useExpiration(expirationDate) ? renderableThing : null;\n}\n\nfunction SelfDestruct({ expirationDate, children }) {\n return useExpirationUI(expirationDate, children);\n}\n\nexport default SelfDestruct;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst DeleteConfirmContainer = styled.div`\n max-width: 24rem;\n padding: 1rem;\n border-radius: 4px;\n box-shadow: 2px 2px 2px 2px lightgray;\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n button {\n margin-left: 1rem;\n }\n`;\n\nexport default function DeleteConfirmModal(props) {\n const { setDeleteConfirmVisible, handleDelete, itemId } = props;\n\n return (\n \n Delete this note?\n
\n setDeleteConfirmVisible(false)}\n >\n Cancel\n \n handleDelete(itemId)}\n >\n Delete\n \n
\n
\n );\n}\n","import { useState, useEffect } from \"react\";\n\nexport function useScript(src) {\n // Keep track of script status (\"idle\", \"loading\", \"ready\", \"error\")\n const [status, setStatus] = useState(src ? \"loading\" : \"idle\");\n\n useEffect(\n () => {\n // Allow falsy src value if waiting on other data needed for\n // constructing the script URL passed to this hook.\n if (!src) {\n setStatus(\"idle\");\n return;\n }\n\n // Fetch existing script element by src\n // It may have been added by another intance of this hook\n let script = document.querySelector(`script[src=\"${src}\"]`);\n\n if (!script) {\n // Create script\n script = document.createElement(\"script\");\n script.src = src;\n script.async = true;\n script.setAttribute(\"data-status\", \"loading\");\n // Add script to document body\n document.body.appendChild(script);\n\n // Store status in attribute on script\n // This can be read by other instances of this hook\n const setAttributeFromEvent = event => {\n script.setAttribute(\n \"data-status\",\n event.type === \"load\" ? \"ready\" : \"error\"\n );\n };\n\n script.addEventListener(\"load\", setAttributeFromEvent);\n script.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n // Grab existing script status from attribute and set to state.\n setStatus(script.getAttribute(\"data-status\"));\n }\n\n // Script event handler to update status in state\n // Note: Even if the script already exists we still need to add\n // event handlers to update the state for *this* hook instance.\n const setStateFromEvent = event => {\n setStatus(event.type === \"load\" ? \"ready\" : \"error\");\n };\n\n // Add event listeners\n script.addEventListener(\"load\", setStateFromEvent);\n script.addEventListener(\"error\", setStateFromEvent);\n\n // Remove event listeners on cleanup\n return () => {\n if (script) {\n script.removeEventListener(\"load\", setStateFromEvent);\n script.removeEventListener(\"error\", setStateFromEvent);\n }\n };\n },\n [src] // Only re-run effect if script src changes\n );\n\n return status;\n}\n","/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n// Support component names relative to this directory:\nimport * as Routes from 'routes';\n\nconst componentRequireContext = require.context(\"components\", true);\nconst ReactRailsUJS = require(\"react_ujs\");\n\nReactRailsUJS.useContext(componentRequireContext);\n\nwindow.Routes = Routes;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport Select from \"react-select\";\nimport { useAlert } from \"react-alert\";\nimport RadioButtonGroup from \"../Shared/RadioButtonGroup\";\nimport { formHeaders } from \"../../utils/form\";\nimport { red } from \"../../styles/colors\";\nimport ApplicationDateResponse from \"./ApplicationDateResponse\";\n\nconst Logo = styled.header`\n padding: 1rem;\n`;\n\nconst VibuHeader = styled.div`\n margin-bottom: 3rem;\n\n h5 {\n font-size: 18px;\n color: gray;\n }\n\n p {\n font-size: 24px;\n max-width: 68rem;\n }\n`;\n\nconst Container = styled.div`\n width: 100%;\n height: 100%;\n\n main {\n padding: 0 4rem;\n }\n\n .red {\n color: ${red};\n }\n`;\n\nconst Input = styled.input`\n padding: 0.5rem;\n width: 16rem;\n border-radius: 4px;\n border: 1px solid #b9bfcb;\n`;\n\nconst ToolTip = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 16px;\n width: auto;\n border-radius: 4px;\n box-shadow: 2px 2px 2px 2px lightgray;\n background-color: white;\n padding: 0.5rem;\n margin-top: 1rem;\n\n i {\n cursor: pointer;\n }\n`;\n\nexport default function ApplicationDateQuestionare(props) {\n const { countriesList = [], visaCategoriesList = [], logoUrl = null } = props;\n\n const countryOptions = countriesList.map((c, i) => ({ value: i, label: c }));\n const visaOptions = visaCategoriesList.map((v, i) => ({\n value: i,\n label: v\n }));\n\n const [selectedBirthCountry, setSelectedBirthCountry] = useState(null);\n const [selectedVisaCategory, setSelectedVisaCategory] = useState(null);\n const [priorityDate, setPriorityDate] = useState(\"\");\n const [isMarried, setIsMarried] = useState(null);\n const [isFilingWithSpouse, setIsFilingWithSpouse] = useState(null);\n const [spouseBirthCountry, setSpouseBirthCountry] = useState(null);\n\n const [vibuStatus, setVibuStatus] = useState();\n\n const [submitted, setSubmitted] = useState(false);\n\n // Tooltip hide/show\n const [piToolTipVisible, setPiToolTipVisible] = useState(false);\n const [siToolTipVisible, setSiToolTipVisible] = useState(false);\n\n const clearForm = () => {\n setSubmitted(false);\n setSelectedBirthCountry(null);\n setSelectedVisaCategory(null);\n setPriorityDate(\"\");\n setIsMarried(null);\n setIsFilingWithSpouse(null);\n setSpouseBirthCountry(null);\n setVibuStatus(null);\n };\n\n const [errors, setErrors] = useState({\n birthCountry: null,\n visaCategory: null,\n isMarried: null,\n isFilingWithSpouse: null,\n spouseBirthCountry: null\n });\n\n const alert = useAlert();\n\n const handleSubmit = async () => {\n setSubmitted(true);\n\n const hasErrors = Object.values(errors).some(x => x !== null);\n\n if (hasErrors) {\n const messages = Object.keys(errors).map(key => errors[key]);\n return messages.forEach(err =>\n err ? alert.show(err, { type: \"error\" }) : null\n );\n }\n\n try {\n const url = Routes.visa_bulletin_application_date_status_path();\n\n const params = {\n birth_country: selectedBirthCountry.label,\n spouse_birth_country: spouseBirthCountry?.label ?? null,\n visa_category: selectedVisaCategory.label,\n priority_date: priorityDate ?? null\n };\n\n const response = await fetch(url, {\n method: \"PUT\",\n body: JSON.stringify(params),\n headers: formHeaders()\n });\n\n if (!response.ok) {\n alert.show(\"Something went wrong\", { type: \"error\" });\n }\n\n if (response.ok) {\n const json = await response.json();\n setVibuStatus(json);\n alert.show(\"Great, thanks for filling that out!\", { type: \"success\" });\n }\n } catch (error) {\n alert.show(error, { type: \"error\" });\n }\n };\n\n const filingWithSpouseError = () => {\n if (isMarried && isFilingWithSpouse === null) {\n return \"Please indicate if you are filing with your spouse\";\n }\n return null;\n };\n\n const spouseBirthCountryError = () => {\n if (isFilingWithSpouse && spouseBirthCountry == null) {\n return \"Please select your spouses country of birth\";\n }\n return null;\n };\n\n useEffect(() => {\n // setSubmitted(false);\n setErrors({\n birthCountry: selectedBirthCountry\n ? null\n : \"Please select your country of birth\",\n visaCategory: selectedVisaCategory\n ? null\n : \"Please select your desired visa category\",\n isMarried:\n isMarried === true || isMarried === false\n ? null\n : \"Please indicate your marriage status\",\n isFilingWithSpouse: filingWithSpouseError(),\n spouseBirthCountry: spouseBirthCountryError()\n });\n }, [\n selectedBirthCountry,\n selectedVisaCategory,\n isMarried,\n isFilingWithSpouse,\n spouseBirthCountry\n ]);\n\n return (\n \n \n \"Legalpad\n \n
\n {!vibuStatus && (\n \n
Visa Bulletin
\n

\n 5 easy questions to find out if you can file your Green Card\n application.\n

\n
\n )}\n {vibuStatus && (\n \n )}\n {!vibuStatus && (\n <>\n
\n

\n Where were you born?{\" \"}\n {submitted && errors.birthCountry && (\n \n )}\n

\n \n \n
\n \n
\n

\n What I-140 Employment Based Category are you applying for?{\" \"}\n {submitted && errors.visaCategory && (\n \n )}\n

\n \n \n \n
\n \n

\n Do you have an existing I-140 Priority Date? (if not, leave this\n blank){\" \"}\n \n setPiToolTipVisible(!piToolTipVisible)}\n onKeyDown={() => setPiToolTipVisible(!piToolTipVisible)}\n role=\"button\"\n tabIndex={0}\n >\n What is a priority date?\n \n \n {piToolTipVisible && (\n \n \n This is your place in line. It determines when you can\n file the green card application (I-485). For more\n information{\" \"}\n \n visit our blog\n \n \n \n setPiToolTipVisible(false)}\n />\n \n )}\n

\n setPriorityDate(e.target.value)}\n />\n \n \n

\n Are you legally married?{\" \"}\n {submitted && errors.isMarried && (\n \n )}\n

\n setIsMarried(e.target.value === \"true\")}\n labelClassName=\"input-button-label small inline\"\n />\n \n {isMarried && (\n \n

\n Will you and your spouse be filing the I-485 at the same time?{\" \"}\n \n setSiToolTipVisible(!siToolTipVisible)}\n onKeyDown={() => setSiToolTipVisible(!siToolTipVisible)}\n role=\"button\"\n tabIndex={0}\n >\n Why is this important?\n \n \n {siToolTipVisible && (\n \n \n If you and your spouse are filing the I-485 at the same\n time, you can use either your or your spouse’s country\n of birth, whichever bulletin date is earlier in line.\n For more information{\" \"}\n \n visit our blog\n \n \n \n setSiToolTipVisible(false)}\n />\n \n )}\n {submitted && errors.isFilingWithSpouse && (\n \n )}\n

\n \n setIsFilingWithSpouse(e.target.value === \"true\")\n }\n labelClassName=\"input-button-label small inline\"\n />\n \n )}\n {isMarried && isFilingWithSpouse && (\n \n

\n What is your spouse's country of birth?{\" \"}\n {submitted && errors.spouseBirthCountry && (\n \n )}\n

\n
\n \n
\n \n )}\n handleSubmit()}\n >\n Check your eligibility\n \n \n )}\n \n \n );\n}\n\nApplicationDateQuestionare.propTypes = {\n countriesList: PropTypes.array,\n visaCategoriesList: PropTypes.array\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport moment from \"moment\";\nimport HubspotForm from \"./HubspotForm\";\n\nconst DataTable = styled.div`\n margin-top: 4rem;\n display: grid;\n grid-gap: 1rem;\n grid-template-columns: repeat(6, 1fr);\n\n p {\n margin-top: 0.5rem;\n }\n`;\n\nconst FollowUpActions = styled.div`\n margin-top: 1rem;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n a {\n margin-right: 1rem;\n font-weight: 300;\n }\n`;\n\nexport default function ApplicationDateResponse(props) {\n const { vibuStatus, clearForm, isMarried, isFilingWithSpouse } = props;\n\n return (\n <>\n \n
\n
Birth country
\n

{vibuStatus.birthCountry}

\n
\n
\n
Visa type
\n

{vibuStatus.visaCategory}

\n
\n
\n
Priority date
\n

{vibuStatus.priorityDate}

\n
\n
\n
Married?
\n

{isMarried ? \"Yes\" : \"No\"}

\n
\n
\n
Filing with spouse?
\n

{isFilingWithSpouse ? \"Yes\" : \"No\"}

\n
\n {vibuStatus.spouseBirthCountry && (\n
\n
Spouse birth country
\n

{vibuStatus.spouseBirthCountry}

\n
\n )}\n
\n {vibuStatus.currentMonthStatus && (\n

\n Congratulations! You are eligible to file the I-485 based on the{\" \"}\n \n {moment().format(\"MMMM YYYY\")} Visa Bulletin{\" \"}\n \n

\n )}\n {!vibuStatus.currentMonthStatus && (\n

\n Unfortunately, you are not currently eligible to file the I-485 based\n on the{\" \"}\n \n {moment().format(\"MMMM YYYY\")} Visa Bulletin{\" \"}\n \n

\n )}\n {vibuStatus.nextMonthStatus && (\n

\n {!vibuStatus.currentMonthStatus ? \"However\" : \"Additionally\"}, you\n will be eligible to file the I-485 based on the upcoming{\" \"}\n \n {moment()\n .add(1, \"M\")\n .format(\"MMMM YYYY\")}{\" \"}\n Visa Bulletin{\" \"}\n \n

\n )}\n {!vibuStatus.nextMonthStatus && vibuStatus.nextVisaBulletin && (\n

\n {vibuStatus.currentMonthStatus ? \"However\" : \"Additionally\"}, you will\n not be eligible to file the I-485 based on the upcoming{\" \"}\n \n {moment()\n .add(1, \"M\")\n .format(\"MMMM YYYY\")}{\" \"}\n Visa Bulletin{\" \"}\n \n

\n )}\n\n {vibuStatus.currentMonthStatus && (\n <>\n

\n What now? We can walk you through your options and answer any\n questions free of charge.\n

\n \n \n Get in touch\n \n clearForm()}\n onKeyDown={() => clearForm()}\n role=\"link\"\n tabIndex={0}\n >\n Answer questions again\n \n \n \n )}\n {!vibuStatus.currentMonthStatus && (\n <>\n

\n Want to be notified when the State Department releases the next visa\n bulletin? Sign up for notifications below. We will let you know when\n it is time to check your status again.\n

\n \n clearForm()}\n onKeyDown={() => clearForm()}\n role=\"link\"\n tabIndex={0}\n >\n Answer questions again\n \n \n )}\n \n );\n}\n\nApplicationDateResponse.propTypes = {\n vibuStatus: PropTypes.object,\n isMarried: PropTypes.bool,\n isFilingWithSpouse: PropTypes.bool\n};\n","import React, { useEffect } from \"react\";\nimport { useScript } from \"../../hooks/useScript\";\n\nexport default function HubspotForm(props) {\n const status = useScript(\"//js.hsforms.net/forms/v2.js\");\n\n useEffect(() => {\n if (status === \"ready\") {\n window.hbspt.forms.create({\n portalId: \"5589333\",\n formId: \"078acabb-8bf7-4a66-9c96-18c77b3ccc19\",\n target: \"#hubspot-form\"\n });\n }\n }, [status]);\n\n if (status !== \"ready\") {\n return

Loading...

;\n }\n\n return
;\n}\n","import React from \"react\";\nimport { Provider as AlertProvider, positions } from \"react-alert\";\nimport AlertTemplate from \"../Shared/AlertTemplate\";\nimport ApplicationDateQuestionare from \"./ApplicationDateQuestionare\";\n\nconst options = {\n timeout: 5000,\n position: positions.TOP_RIGHT,\n offset: \"30px\"\n};\n\nexport default function ApplicationDateQuestionaireWrapper(props) {\n return (\n \n \n \n );\n}\n","import { formHeaders } from \"../utils/form\";\n\nexport default async function request(url, { body, ...customConfig } = {}) {\n const headers = formHeaders();\n\n const config = {\n method: body ? \"POST\" : \"GET\",\n ...customConfig,\n headers: {\n ...headers,\n ...customConfig.headers\n }\n };\n\n if (body) {\n config.body = JSON.stringify(body);\n }\n\n const response = await fetch(url, config);\n\n const data = await response.json();\n\n if (response.ok) {\n return data;\n }\n\n return Promise.reject(data);\n}\n","import { useEffect } from \"react\";\n\nexport function useOnClickOutside(ref, handler) {\n useEffect(\n () => {\n const listener = event => {\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target)) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n },\n // Wrap the passed in handler function in useCallback for better perf\n [ref, handler]\n );\n}\n","import styled from \"styled-components\";\n\nexport const CheckboxItem = styled.div`\n // override the existing css that makes it impossible to use a standard html checkbox 😩\n\n &&& {\n input {\n opacity: 100;\n position: relative;\n left: 0;\n cursor: ${props => (props.disabled ? \"not-allowed\" : \"pointer\")};\n }\n label {\n margin: 0 8px;\n cursor: ${props => (props.disabled ? \"not-allowed\" : \"pointer\")};\n }\n }\n`;\n","import styled from \"styled-components\";\nimport { blue, gray, red } from \"../../../styles/colors\";\n\nexport const FormInput = styled.input`\n padding: 0.5rem;\n border: 1px solid ${props => (props.error ? red : gray)};\n border-radius: 4px;\n width: ${props => props.width};\n &:focus {\n border: 1px solid ${blue};\n }\n`;\n","import { formHeaders } from \"../utils/form\";\n\nexport const sendConfirmationEmail = async (personId, popup) => {\n try {\n const url = Routes.send_welcome_email_client_path(personId);\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: formHeaders(),\n body: JSON.stringify({})\n });\n\n if (!response.ok) {\n popup.show(response.error.message, { type: \"error\" });\n throw new Error(response.error.message);\n }\n\n if (response.ok) {\n const json = await response.json();\n popup.show(\"Confirmation email sent.\", { type: \"success\" });\n return json;\n }\n } catch (error) {\n popup.show(error.message, {\n type: \"error\"\n });\n }\n};\n","import { render, waitFor } from \"@testing-library/react\";\nimport CommonNav from \"./CommonNav\";\nimport { mockUser } from \"../../../testHelpers/userMocks\";\n\ndescribe(\"The CommonNav component\", () => {\n // eslint-disable-next-line no-console\n window.alert = alert => console.warn(alert);\n\n beforeEach(() => {\n fetch.once(JSON.stringify(mockUser));\n });\n\n afterEach(() => {\n fetch.resetMocks();\n });\n\n it(\"renders without crashing\", async () => {\n const { container } = render(\n \n );\n await waitFor(() => expect(container));\n });\n\n it(\"makes a fetch call for the user and updates the ui\", async () => {\n const { getByText } = render(\n \n );\n\n await waitFor(() => {\n expect(fetch.mock.calls.length).toEqual(1);\n expect(getByText(\"HS\"));\n });\n });\n});\n","import styled from \"styled-components\";\n\nexport const IconStack = styled.span`\n display: grid;\n svg {\n grid-area: 1 / 1;\n }\n`;\n","import { render, fireEvent, within, waitFor } from \"@testing-library/react\";\nimport ApplicationDateQuestionaireWrapper from \"./ApplicationDateQuestionareWrapper\";\n\ndescribe(\"The ApplicationDateQuestionare component\", () => {\n beforeEach(() => {\n fetch.resetMocks();\n });\n\n it(\"renders without crashing\", () => {\n const { container } = render();\n expect(container);\n });\n\n it(\"allows the user to input the necessary data\", async () => {\n fetch.once(\n JSON.stringify({\n currentVisaBulletin: {},\n nextVisaBulletin: {},\n currentMonthStatus: true,\n nextMonthStatus: false,\n birthCountry: \"China\",\n spouseBirthCountry: \"China\",\n visaCategory: \"EB-1\",\n priorityDate: null\n })\n );\n\n const { getByTestId, getByText, queryAllByText } = render(\n \n );\n const birthCountrySelectDiv = getByTestId(\"select-birth-country\");\n fireEvent.focus(birthCountrySelectDiv.querySelector(\"input\"));\n fireEvent.keyDown(birthCountrySelectDiv.querySelector(\"input\"), {\n key: \"ArrowDown\",\n code: 40\n });\n fireEvent.keyDown(birthCountrySelectDiv.querySelector(\"input\"), {\n key: \"Enter\",\n code: 13\n });\n const visaCategorySelectDiv = getByTestId(\"select-visa-category\");\n fireEvent.focus(visaCategorySelectDiv.querySelector(\"input\"));\n fireEvent.keyDown(visaCategorySelectDiv.querySelector(\"input\"), {\n key: \"ArrowDown\",\n code: 40\n });\n fireEvent.keyDown(visaCategorySelectDiv.querySelector(\"input\"), {\n key: \"Enter\",\n code: 13\n });\n fireEvent.change(\n getByTestId(\"input-priority-date\").querySelector(\"input\"),\n {\n target: { value: \"02/09/2020\" }\n }\n );\n fireEvent.click(\n within(getByTestId(\"yes-no-married\")).getByTestId(\"Yes-radio\")\n );\n expect(\n getByText(\n \"Will you and your spouse be filing the I-485 at the same time?\"\n )\n );\n fireEvent.click(\n within(getByTestId(\"yes-no-filing-with-spouse\")).getByTestId(\"Yes-radio\")\n );\n expect(getByText(\"What is your spouse's country of birth?\"));\n const spouseCountryOfBirthDiv = getByTestId(\n \"select-spouse-country-of-birth\"\n );\n fireEvent.focus(spouseCountryOfBirthDiv.querySelector(\"input\"));\n fireEvent.keyDown(spouseCountryOfBirthDiv.querySelector(\"input\"), {\n key: \"ArrowDown\",\n code: 40\n });\n fireEvent.keyDown(spouseCountryOfBirthDiv.querySelector(\"input\"), {\n key: \"Enter\",\n code: 13\n });\n fireEvent.click(getByText(\"Check your eligibility\"));\n await waitFor(() =>\n getByText(\n \"What now? We can walk you through your options and answer any questions free of charge.\"\n )\n );\n\n expect(getByText(\"Birth country\"));\n expect(queryAllByText(\"China\")[0]);\n expect(getByText(\"Visa type\"));\n expect(getByText(\"EB-1\"));\n expect(getByText(\"Married?\"));\n expect(queryAllByText(\"Yes\")[0]);\n expect(getByText(\"Filing with spouse?\"));\n expect(queryAllByText(\"Yes\")[1]);\n expect(getByText(\"Spouse birth country\"));\n expect(queryAllByText(\"China\")[1]);\n });\n});\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { blue, gray, white } from \"../../../styles/colors\";\n\nconst SearchBarInput = styled.input`\n background: ${white};\n border: 1px solid ${gray};\n border-radius: 6px;\n padding: 1rem;\n width: 562px;\n\n &:focus {\n outline: 1px solid ${blue};\n }\n`;\n\nexport default function SearchBar(props) {\n const {\n id,\n dataTestId,\n placeholder,\n searchStringValue,\n setSearchStringEvent\n } = props;\n\n return (\n setSearchStringEvent(e.target.value)}\n />\n );\n}\n","import styled from \"styled-components\";\nimport { blue, grayDark } from \"../../../styles/colors\";\n\nexport const PaginationWidget = styled.div`\n width: 100%;\n display: flexbox;\n justify-content: flex-end;\n align-items: baseline;\n color: ${grayDark};\n margin-top: ${props => (props.upshift ? \"-2rem\" : \"\")};\n\n p {\n margin: 0;\n }\n\n a {\n margin-left: 0.75rem;\n }\n\n i {\n margin: 0 0.5rem;\n color: ${props => (props.showingAll ? grayDark : blue)};\n cursor: ${props => (props.showingAll ? \"default\" : \"pointer\")};\n\n &:first-of-type {\n color: ${props => (props.currentPage === 1 ? grayDark : blue)};\n cursor: ${props => (props.currentPage === 1 ? \"default\" : \"pointer\")};\n }\n\n &:last-of-type {\n color: ${props =>\n props.currentPage === props.maxPage ? grayDark : blue};\n cursor: ${props =>\n props.currentPage === props.maxPage ? \"default\" : \"pointer\"};\n }\n }\n`;\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { useState } from \"react\";\nimport Collapse from \"react-css-collapse\";\nimport { useDeprecated } from \"../../../hooks/useDeprecated\";\n\nexport default function __Dropdown(props) {\n const { name, dropdownContent, children } = props;\n\n const [dropdownOpen, setDropdownOpen] = useState(true);\n\n useDeprecated(__Dropdown, \"Please use Shared/Dropdown/Dropdown instead\");\n\n return (\n <>\n setDropdownOpen(!dropdownOpen)}\n >\n {\" \"}\n {name}\n \n \n {dropdownContent}\n {children}\n \n \n );\n}\n","module.exports = {\n blue: \"#2680FA\",\n blueDark: \"#275BC0\",\n blueLight: \"#80A6F2\",\n blueLighter: \"#E9F2FE\",\n blueLightest: \"#F5F9FF\",\n\n green: \"#41CD7E\",\n gold: \"#F5D75B\",\n\n gray: \"#B9BFCB\",\n grayDark: \"#818DA4\",\n grayDarker: \"#3A4861\",\n grayDarkest: \"#0B1C38\",\n grayLight: \"#E9EDF0\",\n grayLighter: \"#F1F5F9\",\n grayLightest: \"#F8FAFC\",\n\n orange: \"#ff784f\",\n red: \"#FF5C5C\",\n white: \"#FFF\"\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n gold,\n blue,\n red,\n grayLightest,\n grayLight\n} from \"../../../styles/colors\";\n\nconst handleSize = size => {\n switch (size) {\n case \"large\":\n return \"1.75rem 3rem\";\n case \"medium\":\n return \"1.25rem 2rem\";\n case \"small\":\n return \".5rem .75rem\";\n default:\n return \".5rem .75rem\";\n }\n};\n\nconst handleBackgroundColor = (color, disabled) => {\n if (disabled) return grayLightest;\n switch (color) {\n case \"primary\":\n return gold;\n case \"secondary\":\n return blue;\n case \"danger\":\n return red;\n default:\n return \"#fff\";\n }\n};\n\nconst handleHoverColor = (color, disabled) => {\n if (disabled) return \"\";\n switch (color) {\n case \"primary\":\n return \"#fecd6b\";\n case \"secondary\":\n return \"dodgerblue\";\n case \"danger\":\n return \"#d74c4c\";\n default:\n return \"#fff\";\n }\n};\n\nconst handleBorder = variant => {\n switch (variant) {\n case \"outlined\":\n return `1px solid ${blue}`;\n case \"text\":\n return \"none\";\n default:\n return \"none\";\n }\n};\n\nconst handleFontSize = size => {\n switch (size) {\n case \"large\":\n return \"18px\";\n case \"medium\":\n return \"16px\";\n case \"small\":\n return \"14px\";\n default:\n return \"14px\";\n }\n};\n\nconst handleColor = (color, disabled) => {\n if (disabled) return grayLightest;\n\n switch (color) {\n case \"secondary\":\n return blue;\n case \"danger\":\n return red;\n default:\n return blue;\n }\n};\n\nconst StyledButton = styled.button`\n &&& {\n transition: all 0.4s ease-out;\n font-size: ${({ size }) => handleFontSize(size)};\n color: ${({ color, disabled }) =>\n disabled ? grayLight : color === \"primary\" ? \"black\" : \"white\"};\n border: none;\n border-radius: 4px;\n cursor: ${({ disabled }) => (disabled ? \"not-allowed\" : \"pointer\")};\n padding: ${({ size }) => handleSize(size)};\n background: ${({ color, disabled }) =>\n handleBackgroundColor(color, disabled)};\n &:hover {\n background: ${({ color, disabled }) => handleHoverColor(color, disabled)};\n }\n }\n`;\n\nconst OutlinedButton = styled(StyledButton)`\n &&& {\n border: 2px solid #2680fa;\n color: #2680fa;\n background: #e9f2fe;\n\n &:hover {\n background: #c4dcfd;\n }\n }\n`;\n\nconst TextButton = styled(StyledButton)`\n background: none;\n color: ${({ color }) => handleColor(color)};\n\n &:hover {\n background: ${({ color }) => (color === \"danger\" ? `${red}` : \"#e9f2fe\")};\n color: ${({ color }) => (color === \"danger\" ? \"white\" : null)};\n }\n`;\n\nexport function Button({\n size = \"medium\",\n color = \"primary\",\n variant,\n disabled = false,\n ...rest\n}) {\n if (variant === \"outlined\") {\n return ;\n }\n\n if (variant === \"text\") {\n return ;\n }\n\n return (\n \n );\n}\n","import React from \"react\";\nimport Dropdown from \"../Dropdown/__Dropdown\";\n\nexport default function SectionDropdowns(props) {\n const { sections } = props;\n\n return sections.map((section, index) => (\n \n \n \n ));\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { white, blueLight } from \"../../styles/colors\";\n\nconst Avatar = styled.div`\n width: ${props => props.size}px;\n height: ${props => props.size}px;\n background-color: ${blueLight};\n text-align: center;\n border-radius: 50%;\n margin: auto;\n\n span {\n position: relative;\n top: ${props => props.size / 4}px;\n font-size: ${props => props.size / 3}px;\n line-height: ${props => props.size / 2}px;\n color: ${white};\n font-weight: 300;\n }\n`;\n\nexport default function UserAvatar(props) {\n const { size, children } = props;\n return {children};\n}\n\nUserAvatar.defaultProps = { size: 100 };\n"],"sourceRoot":""}