{"version":3,"sources":["static/config.js","library/components/animalsearch/numberOfPages.js","serviceWorker.js","library/components/animalsearch/useSearchBox.js","library/components/animalsearch/searchBox.js","library/components/animalsearch/animalOptions.js","library/components/animalsearch/defaultColumns.js","library/components/animalsearch/pagination.js","library/toolbox/buttonToggle.js","library/components/animalsearch/societyTab.js","library/components/animalsearch/helpers/searchDataLayer.js","library/components/animalsearch/standardSearch.js","library/components/animalsearch/progenySearch.js","library/components/animalsearch/helpModal.js","library/helpers/cookies.js","library/components/animalsearch/animalSearch.js"],"names":["__webpack_require__","r","__webpack_exports__","d","settings","host","window","location","hostname","toLowerCase","animalSearchAPI","googleAnalyticsCode","console","log","react__WEBPACK_IMPORTED_MODULE_0__","react__WEBPACK_IMPORTED_MODULE_0___default","n","NumberOfPages","props","a","createElement","Fragment","className","labelClass","selectClass","onChange","event","setTableSettingPaging","Number","target","value","pageSizeOptions","map","item","id","key","Boolean","match","useSearchBox","searchBox","_useState","useState","term","searchTerm","_useState2","Object","slicedToArray","inputs","setInputs","handleSubmit","preventDefault","handleInputChange","persist","objectSpread","defineProperty","name","callback","SearchBox","label","undefined","_useSearchBox","executeScroll","ref","noScroll","myRef","current","scrollTo","offsetTop","useRef","react_default","autoFocus","searchBoxClass","placeholder","style","paddingLeft","AnimalOptions","progenyButton","sex","fontSize","onClick","launchProgenySearch","page","hasGenomics","open","defaultColumns","dateFormat","require","mobileColumns","Header","accessor","Cell","cellProps","rel","href","original","HasGenomics","AnimalId","FullName","getProps","state","rowInfo","column","textAlign","fontWeight","width","animalOptions","callBack","Sex","show","Show","hasGenonics","HasGenonics","assessor","DOB","toString","BreedCode","HBN","columns","mobile","defaultButton","children","Pagination","_this","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","filterPages","visiblePages","totalPages","filter","getVisiblePages","total","changePage","bind","assertThisInitialized","pages","nextProps","setState","onPageChange","_this2","_this$props$PageButto","PageButtonComponent","activePage","disabled","previousText","index","array","concat","nextText","React","Component","ButtonToggle","title","buttons","buttonProps","classString","text","toggle","SocietyTab","renderTabs","tabProps","societyIndex","apiCount","useAnimalSearch","config","callAPIData","_x","_callAPIData","apply","arguments","asyncToGenerator","regenerator_default","mark","_callee","encodedSearchTerm","data","wrap","_context","prev","next","encodeURIComponent","axios","url","searchParameters","age","method","responseType","then","response","catch","error","sent","abrupt","stop","_getData","_callee2","tableText","_context2","Count","setData","Animals","length","setNoDataText","searchTermCallback","getData","_x2","StandardSearch","tableSettingPaging","_useState3","_useState4","tableData","_useState5","_useState6","noDataText","animalSearch","useEffect","standardSearchTerm","setShow","animalId","slice","forEach","element","noDataComponent","defaultSociety","societyTab","changeSociety","buttonToggle","changeSex","buttonNormal","buttonActive","buttonClass","changeAge","animalsearch_searchBox","numberOfPages","index_es","whiteSpace","data-tip","react_media","query","matches","es","defaultPageSize","pageSize","PaginationComponent","NoDataComponent","lazy","Promise","resolve","Loader","e","ProgenySearch","tableDate","isLoaded","progenyCount","progenyAnimal","AnimalName","progenyState","setProgenyState","progenyFilter","setProgenyFilter","_useState7","_useState8","setNoTextData","options","responseData","Type","DateStart","DateEnd","ProgenyAnimal","dangerouslySetInnerHTML","__html","calculateDOBDate","days","dateCalc","Date","now","setDate","getDate","onChangeDateOfBirth","dataEnd","selectedOptions","attributes","dataStart","dateStart","dateEnd","renderButton","data-id","ProgenyDateOfBirthFilter","renderProgenyDateOfBirthFilter","class","data-end","data-start","return","react","fallback","HelpModal","cname","ca","decodeURIComponent","document","cookie","split","i","c","charAt","substring","indexOf","getCookie","lib_default","isOpen","cvalue","exdays","setTime","getTime","expires","toUTCString","setCookie","close","float","AnimalSearch","progenyAnimalId","updateProgenyAnimalId","searchType","society","updateSearchParameters","showModal","updateShowModal","updateStandardSearchTerm","renderStandardSearch","standardSearch","renderProgenySearch","progenySearch","type","renderSearch","showHelpModal","helpModal","wrapper","getElementById","getAttribute","ReactDOM","render","animalSearch_AnimalSearch","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.483d8012.chunk.js","sourcesContent":["export const settings = () => {\r\n const HOLSTEIN_GA = \"UA-55339512-1\";\r\n\r\n const host = window.location.hostname.toLowerCase();\r\n\r\n if (host === \"localhost\")\r\n return {\r\n animalSearchAPI: \"http://localhost:61229\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n };\r\n if (\r\n host === \"shottledev\" ||\r\n host === \"dev.hukdev.co.uk\" ||\r\n host === \"dev2.hukdev.co.uk\"\r\n )\r\n return {\r\n animalSearchAPI: \"https://dev2.hukdev.co.uk\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n };\r\n if (host === \"staging.holstein-uk.org\" || host === \"staging2.holstein-uk.org\")\r\n return {\r\n animalSearchAPI: \"https://www2.holstein-uk.org\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n };\r\n if (\r\n host === \"www2.holstein-uk.org\" ||\r\n host === \"www.holstein-uk.org\" ||\r\n host === \"holstein-uk.org\"\r\n )\r\n return {\r\n animalSearchAPI: \"http://www2.holstein-uk.org\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n };\r\n\r\n if (host === \"shottledev\" || host === \"dev.nbdc.uk\")\r\n return {\r\n animalSearchAPI: \"https://dev2.hukdev.co.uk\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n };\r\n if (host === \"www.nbdc.uk\") {\r\n return {\r\n animalSearchAPI: \"https://www.nbdc.uk\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n }\r\n }\r\n if (host === \"nbdc.uk\")\r\n return {\r\n animalSearchAPI: \"https://nbdc.uk\",\r\n googleAnalyticsCode: HOLSTEIN_GA,\r\n };\r\n console.log(\"HOST:\" + host);\r\n};\r\n","import React from 'react';\r\n \r\nconst NumberOfPages = (props) => {\r\n return ( \r\n <> \r\n <div className={props.labelClass}><strong>ANIMALS PER PAGE</strong>\r\n </div>\r\n <div className={props.selectClass}>\r\n <select className=\"rounded border form-control\" onChange={(event) => props.setTableSettingPaging(Number(event.target.value))}> \r\n {props.pageSizeOptions.map((item) => (\r\n <option id={item} key={item} value={item}> {item} \r\n </option>\r\n ))} \r\n </select> \r\n </div>\r\n </>\r\n )\r\n }\r\n export default NumberOfPages;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { useState } from 'react';\r\n\r\n\r\nconst useSearchBox = (searchBox) => {\r\n const [inputs, setInputs] = useState({term:searchBox.searchTerm});\r\n const handleSubmit = (event) => {\r\n if (event) { \r\n event.preventDefault();\r\n }\r\n }\r\n const handleInputChange = (event) => {\r\n event.persist();\r\n setInputs(inputs => ({...inputs, [event.target.name]: event.target.value})); \r\n searchBox.callback(event.target.value);\r\n }\r\n return {\r\n handleSubmit,\r\n handleInputChange,\r\n inputs\r\n };\r\n }\r\n export default useSearchBox;","import React,{useRef} from \"react\";\r\nimport useSearchBox from './useSearchBox';\r\n\r\n\r\nconst scrollToRef = (ref) => {\r\n if(ref!==null && ref.current!==null) { \r\n window.scrollTo(0, ref.current.offsetTop) \r\n }\r\n}\r\n\r\nconst SearchBox = (props) => { \r\n\r\n const label = (props.label === undefined ? \"SEARCH\" : props.label);\r\n const {inputs, handleInputChange} = useSearchBox(props); \r\n \r\n const executeScroll = () => {\r\n if( props.noScroll === undefined) {\r\n scrollToRef(myRef) \r\n }\r\n }\r\n\r\n const myRef = useRef(null) \r\n\r\n return (\r\n <> \r\n <div ref={myRef} className={props.labelClass}>{label}</div> \r\n <input autoFocus className={props.searchBoxClass} placeholder=\"Enter prefix, animal name, ear tag, serial number or HBN\" name=\"term\" \r\n onChange={(event) => {executeScroll();handleInputChange(event)}} value={inputs.term} style={{paddingLeft: '4px'}}></input> \r\n </>\r\n )\r\n} \r\n\r\nexport default SearchBox;","import React from \"react\";\r\n\r\nconst AnimalOptions = (props) => {\r\n const progenyButton =\r\n props.sex === \"M\" ? (\r\n <button\r\n style={{ fontSize: \"small\" }}\r\n onClick={() => props.launchProgenySearch(props.id)}\r\n className=\"btn ml-1 btn-light \"\r\n >\r\n Progeny\r\n </button>\r\n ) : (\r\n \"\"\r\n );\r\n const page = props.hasGenomics ? \"genomics\" : \"factsheet\";\r\n return (\r\n <>\r\n <button\r\n style={{ fontSize: \"small\" }}\r\n onClick={() =>\r\n window.open(\r\n \"http://holstein-uk.org/animaldata/animal/\" + page + \"/\" + props.id,\r\n \"_blank\"\r\n )\r\n }\r\n className=\"btn btn-light\"\r\n >\r\n FactSheet\r\n </button>\r\n <button\r\n style={{ fontSize: \"small\" }}\r\n onClick={() =>\r\n window.open(\r\n \"http://holstein-uk.org/animaldata/animal/ancestry/\" + props.id,\r\n \"_blank\"\r\n )\r\n }\r\n className=\"btn btn-light ml-1\"\r\n >\r\n Ancestry\r\n </button>\r\n {progenyButton}\r\n </>\r\n );\r\n};\r\nexport default AnimalOptions;\r\n","import React from \"react\";\r\nimport AnimalOptions from \"./animalOptions\";\r\n\r\nconst defaultColumns = (props) => {\r\n let dateFormat = require(\"dateformat\");\r\n\r\n const mobileColumns = [\r\n {\r\n Header: \"Animal Name\",\r\n accessor: \"FullName\",\r\n Cell: (cellProps) => {\r\n return (\r\n <a\r\n rel=\"noopener noreferrer\"\r\n target=\"_blank\"\r\n href={\r\n \"http://holstein-uk.org/animaldata/animal/\" +\r\n (cellProps.original.HasGenomics ? \"genomics\" : \"factsheet\") +\r\n \"/\" +\r\n cellProps.original.AnimalId\r\n }\r\n >\r\n {cellProps.original.FullName}\r\n </a>\r\n );\r\n },\r\n getProps: (state, rowInfo, column) => {\r\n return {\r\n style: {\r\n textAlign: \"left\",\r\n fontWeight: \"700\",\r\n },\r\n };\r\n },\r\n width: 300,\r\n },\r\n {\r\n Header: \"Page Options\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div>\r\n <AnimalOptions\r\n id={cellProps.original.AnimalId}\r\n launchProgenySearch={props.launchProgenySearch}\r\n callBack={props.callback}\r\n sex={cellProps.original.Sex}\r\n show={cellProps.original.Show}\r\n hasGenonics={cellProps.original.HasGenonics}\r\n ></AnimalOptions>\r\n </div>\r\n );\r\n },\r\n assessor: \"AnimalId\",\r\n width: 255,\r\n },\r\n {\r\n Header: \"Gender\",\r\n accessor: \"Sex\",\r\n width: 105,\r\n },\r\n {\r\n Header: \"DOB\",\r\n accessor: \"DOB\",\r\n Cell: (cellProps) => {\r\n const date = cellProps.original.DOB;\r\n if (date.toString() !== \"0001-01-01T00:00:00\")\r\n return dateFormat(cellProps.original.DOB, \"dd/mm/yyyy\");\r\n else return \"\";\r\n },\r\n width: 100,\r\n },\r\n {\r\n Header: \"Ear Tag\",\r\n accessor: \"EarTag\",\r\n width: 160,\r\n },\r\n\r\n {\r\n Header: \"HBN\",\r\n accessor: \"HBN\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div>\r\n {cellProps.original.BreedCode} {cellProps.original.HBN}\r\n </div>\r\n );\r\n },\r\n width: 150,\r\n },\r\n ];\r\n\r\n const columns = [\r\n {\r\n Header: \"Page Options\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div>\r\n <AnimalOptions\r\n id={cellProps.original.AnimalId}\r\n launchProgenySearch={props.launchProgenySearch}\r\n callBack={props.callback}\r\n sex={cellProps.original.Sex}\r\n show={cellProps.original.Show}\r\n hasGenomics={cellProps.original.HasGenomics}\r\n ></AnimalOptions>\r\n </div>\r\n );\r\n },\r\n assessor: \"AnimalId\",\r\n width: 255,\r\n },\r\n {\r\n Header: \"Gender\",\r\n accessor: \"Sex\",\r\n width: 105,\r\n },\r\n {\r\n Header: \"Animal Name\",\r\n accessor: \"FullName\",\r\n Cell: (cellProps) => {\r\n return (\r\n <a\r\n rel=\"noopener noreferrer\"\r\n target=\"_blank\"\r\n href={\r\n \"http://holstein-uk.org/animaldata/animal/\" +\r\n (cellProps.original.HasGenomics ? \"genomics\" : \"factsheet\") +\r\n \"/\" +\r\n cellProps.original.AnimalId\r\n }\r\n >\r\n {cellProps.original.FullName}\r\n </a>\r\n );\r\n },\r\n getProps: (state, rowInfo, column) => {\r\n return {\r\n style: {\r\n textAlign: \"left\",\r\n fontWeight: \"700\",\r\n },\r\n };\r\n },\r\n },\r\n {\r\n Header: \"DOB\",\r\n accessor: \"DOB\",\r\n Cell: (cellProps) => {\r\n const date = cellProps.original.DOB;\r\n if (date.toString() !== \"0001-01-01T00:00:00\")\r\n return dateFormat(cellProps.original.DOB, \"dd/mm/yyyy\");\r\n else return \"\";\r\n },\r\n width: 100,\r\n },\r\n {\r\n Header: \"Ear Tag\",\r\n accessor: \"EarTag\",\r\n width: 160,\r\n },\r\n\r\n {\r\n Header: \"HBN\",\r\n accessor: \"HBN\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div>\r\n {cellProps.original.BreedCode} {cellProps.original.HBN}\r\n </div>\r\n );\r\n },\r\n width: 150,\r\n },\r\n ];\r\n return props.mobile ? mobileColumns : columns;\r\n};\r\nexport default defaultColumns;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst defaultButton = props => <button {...props}>{props.children}</button>;\r\n\r\nclass Pagination extends React.Component {\r\n constructor(props) {\r\n super();\r\n\r\n this.changePage = this.changePage.bind(this);\r\n\r\n this.state = {\r\n visiblePages: this.getVisiblePages(null, props.pages)\r\n };\r\n }\r\n\r\n static propTypes = {\r\n pages: PropTypes.number,\r\n page: PropTypes.number,\r\n PageButtonComponent: PropTypes.any,\r\n onPageChange: PropTypes.func,\r\n previousText: PropTypes.string,\r\n nextText: PropTypes.string\r\n };\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({\r\n visiblePages: this.getVisiblePages(nextProps.page, nextProps.pages)\r\n });\r\n\r\n this.changePage(nextProps.page + 1);\r\n }\r\n\r\n\r\n filterPages = (visiblePages, totalPages) => {\r\n return visiblePages.filter(page => page <= totalPages);\r\n };\r\n\r\n getVisiblePages = (page, total) => {\r\n if (total < 7) {\r\n return this.filterPages([1, 2, 3, 4, 5, 6], total);\r\n } else {\r\n if (page % 5 >= 0 && page > 4 && page + 2 < total) {\r\n return [1, page - 1, page, page + 1, total];\r\n } else if (page % 5 >= 0 && page > 4 && page + 2 >= total) {\r\n return [1, total - 3, total - 2, total - 1, total];\r\n } else {\r\n return [1, 2, 3, 4, 5, total];\r\n }\r\n }\r\n };\r\n\r\n changePage(page) {\r\n const activePage = this.props.page + 1;\r\n\r\n if (page === activePage) {\r\n return;\r\n }\r\n\r\n const visiblePages = this.getVisiblePages(page, this.props.pages);\r\n\r\n this.setState({\r\n visiblePages: this.filterPages(visiblePages, this.props.pages)\r\n });\r\n\r\n this.props.onPageChange(page - 1);\r\n }\r\n\r\n render() {\r\n const { PageButtonComponent = defaultButton } = this.props;\r\n const { visiblePages } = this.state;\r\n const activePage = this.props.page + 1;\r\n return (\r\n <div>\r\n <PageButtonComponent className=\"btn btn-outline-secondary\"\r\n \r\n onClick={() => {\r\n if (activePage === 1) return;\r\n this.changePage(activePage - 1);\r\n }}\r\n disabled={activePage === 1}\r\n >\r\n {this.props.previousText}\r\n </PageButtonComponent>\r\n {visiblePages.map((page, index, array) => {\r\n return (\r\n <PageButtonComponent\r\n key={page}\r\n className={\r\n activePage === page\r\n ? \"btn btn-primary\"\r\n : \"btn btn-outline-secondary\"\r\n }\r\n onClick={this.changePage.bind(null, page)}\r\n >\r\n {array[index - 1] + 2 < page ? `...${page}` : page}\r\n </PageButtonComponent>\r\n );\r\n })}\r\n <PageButtonComponent\r\n className=\"btn btn-outline-secondary\"\r\n onClick={() => {\r\n if (activePage === this.props.pages) return;\r\n this.changePage(activePage + 1);\r\n }}\r\n disabled={activePage === this.props.pages}\r\n >\r\n {this.props.nextText}\r\n </PageButtonComponent>\r\n </div>\r\n );\r\n }\r\n}\r\nexport default Pagination;","import React from 'react';\r\n\r\nconst ButtonToggle = (props) => {\r\n\r\n const renderButtons = () => {\r\n return props.buttons.map((buttonProps) => {\r\n const classString = (buttonProps.value === props.value) ? \"btn-active\" : \"btn-secondary\";\r\n return (\r\n <button key={buttonProps.text} \r\n onClick = {() =>props.toggle(buttonProps.value)} \r\n className={\"mt-1 ml-0 mr-1 btn \" + classString}>{buttonProps.text}</button> \r\n )\r\n })\r\n }\r\n\r\n return (<> \r\n {props.title!==undefined ? <div className=\"col-12 col-md-2 mt-2 font-weight-bold\">{props.title}</div> : null}\r\n <div className=\"col-8 pl-0 ml-0\">\r\n {renderButtons()}\r\n </div> \r\n </> \r\n )\r\n}\r\nexport default ButtonToggle;","import React from 'react';\r\n\r\nconst SocietyTab = (props) => {\r\n\r\n const renderTabs = (tabProps) => {\r\n const className=(tabProps.index===props.societyIndex) ? \"btn btn-active\" : \"btn btn-secondary\";\r\n \r\n return (\r\n <div className=\"col-md-3 col-sm-4 pl-0 mt-1\">\r\n <button style={{width:'100%'}} className={className} onClick={() => {props.callBack(tabProps.index);} }>{tabProps.title}</button>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <div className=\"row\">\r\n <div className=\"col-md-2 font-weight-bold pt-2\">SOCIETY</div>\r\n <div className=\"col-md-10\">\r\n <div className=\"row\">\r\n {renderTabs({index:'01',title:'Holstein Friesian'})} \r\n {renderTabs({index:'2',title:'Jersey UK'})} \r\n {renderTabs({index:'5',title:'Ayrshire'})}\r\n {renderTabs({index:'7',title:'Brown Swiss'})}\r\n {renderTabs({index:'4',title:'Guernsey'})}\r\n {renderTabs({index:'11',title:'Montbeliarde'})}\r\n {renderTabs({index:'12',title:'Jersey Island'})}\r\n {/*{renderTabs({index:'14',title:'European Angus'})}*/}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n )\r\n}\r\nexport default SocietyTab;","import axios from 'axios';\r\n\r\nlet apiCount = 0;\r\n\r\nconst useAnimalSearch = (props) => {\r\n\r\n const config = require('../../../../static/config');\r\n //// HELPERS /////\r\n\r\n async function callAPIData (searchTerm) { \r\n const encodedSearchTerm = encodeURIComponent(searchTerm) ; \r\n const data = await axios({\r\n url: config.settings().animalSearchAPI + '/umbraco/api/animalsearch/searchAnimals?searchTerm=' + encodedSearchTerm + '&count=' + apiCount \r\n + '&society=' + props.searchParameters.societyIndex + '&age=' + props.searchParameters.age + '&sex=' + props.searchParameters.sex,\r\n method: 'GET',\r\n responseType: 'json'\r\n })\r\n .then(response => {return response.data;}\r\n ).catch(error => {console.log(error); return {error:'Unable to return results because of: Server Error'}});\r\n return data;\r\n }\r\n\r\n async function getData (searchTerm) { \r\n let tableText = '';\r\n apiCount++;\r\n if(searchTerm!=='') { \r\n const response = await callAPIData(searchTerm); \r\n if(response!==undefined && response!==null && response.Count>=apiCount){\r\n props.setData(response.Animals); \r\n if(response.Animals.length===0) {\r\n tableText = \"No animals found\";\r\n }\r\n } else {\r\n \r\n if(response.error!==undefined) {\r\n tableText = response.error;\r\n }\r\n \r\n }\r\n } else {\r\n props.setData([]);\r\n }\r\n props.setNoDataText(tableText);\r\n props.searchTermCallback(searchTerm); \r\n }\r\n return {getData}\r\n\r\n}\r\n\r\nexport default useAnimalSearch;\r\n\r\n","import React,{useState, useEffect } from 'react';\r\nimport ReactTable from 'react-table';\r\nimport SearchBox from './searchBox';\r\nimport defaultColumns from './defaultColumns'; \r\nimport 'react-table/react-table.css';\r\nimport Pagination from './pagination';\r\nimport NumberOfPages from './numberOfPages';\r\nimport Media from 'react-media';\r\nimport ReactTooltip from 'react-tooltip'\r\nimport ButtonToggle from './../../toolbox/buttonToggle';\r\nimport SocietyTab from './societyTab';\r\nimport useAnimalSearch from './helpers/searchDataLayer';\r\n\r\n\r\n\r\n\r\nconst StandardSearch = (props) => {\r\n\r\n const [tableSettingPaging, setTableSettingPaging] = useState(10);\r\n const [tableData, setData] = useState([]);\r\n const [noDataText, setNoDataText] = useState('');\r\n\r\n const sexButtons = [{text:'All', value:''},{text:'Male', value:'M'},{text:'Female', value:'F'}];\r\n const ageButtons = [{text:'All', value:'0'},{text:'Up to 5', value:'5'},{text:'Up to 10', value:'10'}];\r\n\r\n const animalSearch = useAnimalSearch({setData, setNoDataText, searchTermCallback: props.searchTermCallback, searchParameters: props.searchParameters});\r\n\r\n useEffect(() => { \r\n if(props.searchParameters.standardSearchTerm!=='') {\r\n animalSearch.getData(props.searchParameters.standardSearchTerm);\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n useEffect(() => { \r\n animalSearch.getData(props.searchParameters.standardSearchTerm);\r\n // eslint-disable-next-line\r\n },[props.searchParameters.societyIndex,props.searchParameters.age, props.searchParameters.sex]) \r\n \r\n\r\n const setShow = (animalId) =>\r\n { \r\n let data = tableData.slice(); \r\n data.forEach((element,index) => { \r\n data[index].Show = (Number(element.AnimalId) === Number(animalId)); \r\n });\r\n setData(data); \r\n }\r\n \r\n const noDataComponent = () => {\r\n return (\r\n <div className=\"NoResultsComponent\">{noDataText}</div>\r\n )\r\n }\r\n\r\n const warning = () => {\r\n if(tableData.length===300) {\r\n return (\r\n <>\r\n <ReactTooltip />\r\n <div style={{whiteSpace:'normal'}} className=\"col-md-1 mt-2 ml-2 badge badge-warning\" data-tip=\"Showing the first 300 animals, please refine your search\">Showing first 300 Animals ...</div> \r\n </>\r\n )\r\n }\r\n return (<></>)\r\n }\r\n\r\n const changeAge = (age) => {\r\n props.changeAge(age);\r\n }\r\n\r\n const changeSex = (sex) => {\r\n props.changeSex(sex);\r\n }\r\n\r\n ///// RENDER /////\r\n\r\n return (\r\n <> \r\n {props.defaultSociety===null ? <SocietyTab callBack={(index) => {props.changeSociety(index)}} societyIndex={props.searchParameters.societyIndex} ></SocietyTab> : null} \r\n <div className=\"row\">\r\n <div className=\"col-sm-12 col-md-6\">\r\n <div className=\"row\">\r\n <div className=\"col-sm-6 col-md-2 m-md-2\"><strong>SEX</strong></div>\r\n <ButtonToggle buttons={sexButtons} value={props.searchParameters.sex} toggle={changeSex} \r\n buttonNormal=\"btn-secondary\" buttonActive=\"btn-active\" buttonClass=\"col m-2 btn\"></ButtonToggle>\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-6\">\r\n <div className=\"row\">\r\n <div className=\"col-sm-6 col-md-2 m-md-2\"><strong>AGE (years)</strong></div>\r\n <ButtonToggle buttons={ageButtons} value={props.searchParameters.age} toggle={changeAge} \r\n buttonNormal=\"btn-secondary\" buttonActive=\"btn-active\" buttonClass=\"col m-2 btn\"></ButtonToggle>\r\n </div>\r\n </div>\r\n </div> \r\n <div className=\"row\"> \r\n <div className=\"col-sm-12 col-md-6\">\r\n <div className=\"form-inline\">\r\n <SearchBox callback={(searchTerm) => {setNoDataText('Loading');animalSearch.getData(searchTerm)}} searchTerm={props.searchParameters.standardSearchTerm} \r\n labelClass=\"col-sm-2 m-md-2 mt-2 font-weight-bold pl-0\" searchBoxClass=\" mt-2 form-control col-md ml-md-0 col-sm-12\"></SearchBox>\r\n </div> \r\n </div> \r\n <NumberOfPages labelClass=\"col-sm-6 col-md-3 mt-sm-2 m-md-2\" \r\n selectClass=\"mt-sm-2 float-right col-sm-12 col-md-2\"\r\n pageSizeOptions={[10, 20, 50, 100]} setTableSettingPaging={setTableSettingPaging}></NumberOfPages> \r\n {warning()} \r\n </div>\r\n \r\n <div className=\"row table-responsive mt-2 mx-auto\">\r\n <Media query=\"(max-width: 1049px)\">\r\n {matches => \r\n <ReactTable \r\n className=\"table table-bordered -striped -highlight\"\r\n data={tableData} \r\n columns={defaultColumns({callback:setShow, launchProgenySearch:props.launchProgenySearch, mobile:matches})}\r\n previousText=\"<\"\r\n nextText=\">\"\r\n defaultPageSize={10} \r\n pageSize={tableSettingPaging} \r\n PaginationComponent={Pagination} \r\n NoDataComponent={noDataComponent} \r\n />\r\n } \r\n </Media> \r\n </div> \r\n </>\r\n )\r\n}\r\nexport default StandardSearch;\r\n","import React, { useState, Suspense, useEffect } from \"react\";\r\nimport ReactTable from \"react-table\";\r\nimport axios from \"axios\";\r\nimport \"react-table/react-table.css\";\r\n\r\nimport Pagination from \"./pagination\";\r\nimport AnimalOptions from \"./animalOptions\";\r\n\r\n//const window = (new JSDOM('')).window\r\n//const DOMPurify = createDOMPurify(window)\r\n\r\nconst NumberOfPages = React.lazy(() => import(\"./numberOfPages\"));\r\nconst Loader = React.lazy(() => import(\"./loader\"));\r\n\r\nconst config = require(\"../../../static/config\");\r\n\r\nconst ProgenySearch = (props) => {\r\n const [progenyState, setProgenyState] = useState({\r\n tableDate: [],\r\n isLoaded: false,\r\n progenyCount: 0,\r\n progenyAnimal: { AnimalName: \"\" },\r\n });\r\n const [progenyFilter, setProgenyFilter] = useState(10);\r\n const [tableSettingPaging, setTableSettingPaging] = useState(10);\r\n const [noDataText, setNoTextData] = useState(\"No animals found\");\r\n\r\n useEffect(() => {\r\n getData({ Type: 10, DateStart: 0, DateEnd: 0 });\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n async function getData(options) {\r\n setProgenyState({\r\n isLoaded: false,\r\n progenyCount: 0,\r\n progenyAnimal: { AnimalName: \"\" },\r\n });\r\n const responseData = await axios({\r\n url:\r\n config.settings().animalSearchAPI +\r\n \"/umbraco/api/animalsearch/ProgenySearch?AnimalId=\" +\r\n props.animalId +\r\n \"&Type=\" +\r\n options.Type +\r\n \"&startDateOfBirth=\" +\r\n options.DateStart +\r\n \"&endDateOfBirth=\" +\r\n options.DateEnd,\r\n method: \"GET\",\r\n responseType: \"json\",\r\n })\r\n .then((response) => {\r\n if (response.data !== null) {\r\n setNoTextData(\"No animals found\");\r\n setProgenyState({\r\n tableData: response.data.Animals,\r\n isLoaded: true,\r\n progenyCount: response.data.Count,\r\n progenyAnimal: response.data.ProgenyAnimal,\r\n });\r\n }\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n setNoTextData(\"Unable to return results because of: Server Error\");\r\n setProgenyState({\r\n tableData: [],\r\n isLoaded: true,\r\n progenyCount: 0,\r\n progenyAnimal: {},\r\n });\r\n return { error: \"Unable to return results because of: Server Error\" };\r\n });\r\n return responseData;\r\n }\r\n\r\n const columns = [\r\n {\r\n Header: \"Options\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div>\r\n <AnimalOptions\r\n id={cellProps.original.AnimalId}\r\n launchProgenySearch={props.launchProgenySearch}\r\n callBack={props.callback}\r\n sex={cellProps.original.Sex}\r\n show={cellProps.original.Show}\r\n ></AnimalOptions>\r\n </div>\r\n );\r\n },\r\n assessor: \"AnimalId\",\r\n width: 245,\r\n },\r\n {\r\n Header: \"HBN\",\r\n accessor: \"HBN\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div>\r\n {cellProps.original.BreedCode} {cellProps.original.HBN}\r\n </div>\r\n );\r\n },\r\n width: 140,\r\n },\r\n {\r\n Header: \"Animal Name\",\r\n accessor: \"AnimalName\",\r\n Cell: (cellProps) => {\r\n return (\r\n <div style={{ textAlign: \"left\", fontWeight: \"700\" }}>\r\n <a\r\n dangerouslySetInnerHTML={{\r\n __html: cellProps.original.AnimalName,\r\n }}\r\n rel=\"noopener noreferrer\"\r\n target=\"_blank\"\r\n href={\r\n \"http://holstein-uk.org/animaldata/animal/factsheet/\" +\r\n cellProps.original.AnimalId\r\n }\r\n ></a>\r\n </div>\r\n );\r\n },\r\n },\r\n {\r\n Header: \"DOB\",\r\n accessor: \"DOB\",\r\n Cell: (cellProps) => {\r\n const date = cellProps.original.DOB;\r\n if (date.toString() !== \"0001-01-01T00:00:00\")\r\n return dateFormat(cellProps.original.DOB, \"dd/mm/yyyy\");\r\n else return \"\";\r\n },\r\n width: 100,\r\n },\r\n {\r\n Header: \"Gender\",\r\n accessor: \"Sex\",\r\n width: 105,\r\n },\r\n { Header: \"Score\", accessor: \"Score\", width: 90 },\r\n ];\r\n\r\n const onChange = (buttonProps) => {\r\n const dateStart =\r\n buttonProps.dateStart !== undefined\r\n ? calculateDOBDate(buttonProps.dateStart)\r\n : 0;\r\n const dateEnd =\r\n buttonProps.dateStart !== undefined\r\n ? calculateDOBDate(buttonProps.dateEnd)\r\n : 0;\r\n setProgenyFilter(buttonProps.index);\r\n getData({\r\n Type: buttonProps.index,\r\n DateStart: dateEnd,\r\n DateEnd: dateStart,\r\n });\r\n };\r\n\r\n let dateFormat = require(\"dateformat\");\r\n\r\n const calculateDOBDate = (days) => {\r\n const dateCalc = new Date(Date.now());\r\n dateCalc.setDate(dateCalc.getDate() - days);\r\n return dateFormat(dateCalc, \"yyyymmdd\");\r\n };\r\n\r\n const onChangeDateOfBirth = (event) => {\r\n const dataEnd =\r\n event.target.selectedOptions[0].attributes[\"data-end\"].value;\r\n const dataStart =\r\n event.target.selectedOptions[0].attributes[\"data-start\"].value;\r\n const dateStart = new Date(Date.now());\r\n dateStart.setDate(dateStart.getDate() - dataStart);\r\n const dateEnd = new Date(Date.now());\r\n dateEnd.setDate(dateEnd.getDate() - dataEnd);\r\n getData({\r\n Type: 0,\r\n DateStart: Number(dateFormat(dateStart, \"yyyymmdd\")),\r\n DateEnd: Number(dateFormat(dateEnd, \"yyyymmdd\")),\r\n });\r\n };\r\n\r\n const renderButton = (buttonProps) => {\r\n const className =\r\n buttonProps.index === progenyFilter\r\n ? \"btn btn-primary\"\r\n : \"btn btn-secondary\";\r\n if (buttonProps.show === undefined || buttonProps.show) {\r\n return (\r\n <div className=\"col-xl-2 col-lg-3 col-md-4 col-sm-6 m-2\">\r\n <button\r\n style={{ width: \"120%\" }}\r\n className={className}\r\n data-id={buttonProps.index}\r\n onClick={() => {\r\n onChange(buttonProps);\r\n }}\r\n >\r\n {buttonProps.title}\r\n </button>\r\n </div>\r\n );\r\n }\r\n return <></>;\r\n };\r\n\r\n const ProgenyFilters = () => {\r\n return (\r\n <>\r\n {renderButton({ title: \"Last 500 registered\", index: 10 })}\r\n {renderButton({ title: \"Classified progeny\", index: 2 })}\r\n {renderButton({ title: \"Classified progeny (EX)\", index: 3 })}\r\n {renderButton({ title: \"Classified progeny (VG)\", index: 4 })}\r\n {/*renderButton({title:'Classified progeny (GP)',index:5})*/}\r\n {renderButton({ title: \"1st Lactation\", index: 6 })}\r\n {ProgenyDateOfBirthFilter()}\r\n </>\r\n );\r\n };\r\n\r\n const ProgenyDateOfBirthFilter = () => {\r\n const renderProgenyDateOfBirthFilter =\r\n progenyFilter === 0 ? (\r\n <div class=\"col-xl-2 col-l-3 col-md-4 col-s-4 col-xs-6 m-2\">\r\n <select\r\n style={{ width: \"120%\" }}\r\n className=\"form-control\"\r\n onChange={onChangeDateOfBirth}\r\n >\r\n <option data-end={0} data-start={183}>\r\n Last 6 Months\r\n </option>\r\n <option data-end={184} data-start={365}>\r\n Last 6-12 Months\r\n </option>\r\n <option data-end={366} data-start={730}>\r\n Last 12-24 Months\r\n </option>\r\n <option data-end={731} data-start={1095}>\r\n Last 24-36 Months\r\n </option>\r\n </select>\r\n </div>\r\n ) : (\r\n \"\"\r\n );\r\n return (\r\n <>\r\n {renderButton({\r\n title: \"Date of Birth Range\",\r\n index: 0,\r\n dateStart: 0,\r\n dateEnd: 183,\r\n })}\r\n {renderProgenyDateOfBirthFilter}\r\n </>\r\n );\r\n };\r\n\r\n const pageSizeOptions = [10, 20, 50, 100];\r\n\r\n const table = () => {\r\n return (\r\n <>\r\n <div className=\"row table-responsive mt-2 mx-auto\">\r\n <ReactTable\r\n className=\"table table-bordered \"\r\n data={progenyState.tableData}\r\n columns={columns}\r\n previousText=\"<\"\r\n nextText=\">\"\r\n defaultPageSize={10}\r\n noDataText={\r\n progenyState.isLoaded ? (\r\n noDataText\r\n ) : (\r\n <Suspense fallback={<div></div>}>\r\n <Loader></Loader>\r\n </Suspense>\r\n )\r\n }\r\n PaginationComponent={Pagination}\r\n pageSize={tableSettingPaging}\r\n />\r\n </div>\r\n <div>NOTE: Animals listed are limited to the first 1,000.</div>\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <div className=\"row\">\r\n <div className=\"col-12 font-weight-bold\">\r\n <hr />\r\n <div className=\"row\">\r\n <div className=\"col-3\">\r\n {progenyState.progenyCount} {\"progeny found for\"}\r\n </div>\r\n <div\r\n className=\"col-md-7 text-primary\"\r\n dangerouslySetInnerHTML={{\r\n __html: progenyState.progenyAnimal.AnimalName,\r\n }}\r\n ></div>\r\n <button className=\"btn btn-primary\" onClick={props.return}>\r\n Back to animal search\r\n </button>\r\n </div>\r\n </div>\r\n <div className=\"row mt-2\">{ProgenyFilters()}</div>\r\n </div>\r\n <Suspense fallback={<div></div>}>\r\n <NumberOfPages\r\n pageSizeOptions={pageSizeOptions}\r\n setTableSettingPaging={setTableSettingPaging}\r\n ></NumberOfPages>\r\n </Suspense>\r\n {table()}\r\n </>\r\n );\r\n};\r\n\r\nexport default ProgenySearch;\r\n","import React from 'react';\r\nimport ReactModel from 'react-modal';\r\nimport { getCookie, setCookie } from \"../../helpers/cookies\";\r\n\r\nconst HelpModal = (props) => { \r\n \r\n const onClose = () => {\r\n setCookie(\"HelpModal\", true, 360);\r\n props.close();\r\n }\r\n\r\n if(!getCookie(\"HelpModal\")) \r\n return (\r\n <>\r\n <ReactModel className='ReactModal' isOpen={props.isOpen} >\r\n <div className=\"ReactModalContent\">\r\n <h3 className=\"modal-title\">Welcome to the NBDC animal search.</h3>\r\n <hr/>\r\n <div>Just type in the search box and the results will appear.</div>\r\n <div>The search box will let you enter animal names with or without serial numbers. Ear tags and HBNs.</div>\r\n <div> </div>\r\n <div>\r\n Try the following searches under the Holstein Friesian society: <ul className=\"list-group\">\r\n <li className=\"list-group-item\">Picston Shottle</li>\r\n <li className=\"list-group-item\">Royan Anita 17</li>\r\n <li className=\"list-group-item\">UK289370703987</li>\r\n <li className=\"list-group-item\">598172</li></ul>\r\n <div className=\"mt-3\">NOTE: A maximum of 300 animals will be returned at any one time.</div>\r\n </div>\r\n <button className=\"btn btn-primary mt-2\" onClick={onClose} style={{float:'right'}}>Close</button>\r\n <div className=\"mt-3\"> </div>\r\n </div>\r\n \r\n </ReactModel>\r\n </>\r\n )\r\n return (<></>);\r\n} \r\nexport default HelpModal;","//Cookies\r\nexport function setCookie(cname, cvalue, exdays) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n var expires = \"expires=\" + d.toUTCString();\r\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\r\n }\r\n \r\n export function deleteCookie(cname) {\r\n var d = new Date();\r\n d.setTime(d.getTime() - (1000 * 60 * 60 * 24)); \r\n var expires = \"expires=\" + d.toGMTString();\r\n document.cookie = cname + \"=; \" + expires + \";path=/\";\r\n }\r\n \r\n \r\n export function getCookie(cname) {\r\n var name = cname + \"=\";\r\n var decodedCookie = decodeURIComponent(document.cookie);\r\n var ca = decodedCookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n }\r\n ","import React, { useState, Suspense } from \"react\";\r\nimport StandardSearch from \"./standardSearch\";\r\nimport ProgenySearch from \"./progenySearch\";\r\nimport HelpModal from \"./helpModal\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\nconst AnimalSearch = (props) => {\r\n ///// STATE /////\r\n\r\n const [progenyAnimalId, updateProgenyAnimalId] = useState(0);\r\n const [searchParameters, updateSearchParameters] = useState({\r\n searchType: 0,\r\n societyIndex: props.society === null ? \"01\" : props.society,\r\n standardSearchTerm: \"\",\r\n age: \"0\",\r\n sex: \"\",\r\n });\r\n const [showModal, updateShowModal] = useState(true);\r\n\r\n ///// EVENTS /////\r\n\r\n const launchProgenySearch = (animalId) => {\r\n updateProgenyAnimalId(animalId);\r\n updateSearchParameters({ ...searchParameters, searchType: 4 });\r\n };\r\n\r\n const changeSociety = (index) => {\r\n updateSearchParameters({\r\n ...searchParameters,\r\n societyIndex: index,\r\n searchType: 0,\r\n });\r\n };\r\n\r\n const changeSex = (sex) => {\r\n updateSearchParameters({ ...searchParameters, sex: sex });\r\n };\r\n\r\n const changeAge = (age) => {\r\n updateSearchParameters({ ...searchParameters, age: age });\r\n };\r\n\r\n const updateStandardSearchTerm = (term) => {\r\n updateSearchParameters({ ...searchParameters, standardSearchTerm: term });\r\n };\r\n\r\n const updateSearchType = (type) => {\r\n updateSearchParameters({ ...searchParameters, searchType: type });\r\n };\r\n\r\n ///// RENDERS /////\r\n\r\n const renderSearch = () => {\r\n switch (searchParameters.searchType) {\r\n case 0:\r\n return renderStandardSearch();\r\n // case 1 : return renderGeneticsIndex();\r\n case 4:\r\n return renderProgenySearch();\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n const renderStandardSearch = () => {\r\n return (\r\n <StandardSearch\r\n searchParameters={searchParameters}\r\n launchProgenySearch={launchProgenySearch}\r\n searchTermCallback={updateStandardSearchTerm}\r\n changeAge={changeAge}\r\n changeSex={changeSex}\r\n changeSociety={changeSociety}\r\n defaultSociety={props.society}\r\n ></StandardSearch>\r\n );\r\n };\r\n\r\n const renderProgenySearch = () => {\r\n return (\r\n <Suspense fallback={<div></div>}>\r\n <ProgenySearch\r\n animalId={progenyAnimalId}\r\n return={() => updateSearchType(0)}\r\n ></ProgenySearch>\r\n </Suspense>\r\n );\r\n };\r\n\r\n const renderHelpModal = () => {\r\n return (\r\n <HelpModal\r\n isOpen={showModal}\r\n close={() => updateShowModal(false)}\r\n ></HelpModal>\r\n );\r\n };\r\n\r\n ///// MAIN RENDER /////\r\n return (\r\n <div className=\"container-fluid m-1\">\r\n {renderSearch()}\r\n {(showHelpModal === null || showHelpModal === \"true\") &&\r\n renderHelpModal()}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AnimalSearch;\r\n\r\nconst wrapper = document.getElementById(\"react-animalsearch\");\r\nconst society = wrapper ? wrapper.getAttribute(\"data-society\") : null;\r\nconst showHelpModal = wrapper\r\n ? wrapper.getAttribute(\"data-showHelpModal\")\r\n : \"true\";\r\n\r\nif (wrapper) {\r\n ReactDOM.render(\r\n <AnimalSearch society={society} showHelpModal={showHelpModal} />,\r\n wrapper\r\n );\r\n}\r\n"],"sourceRoot":""}