{"version":3,"file":"static/js/160.042cdf96.chunk.js","mappings":"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","sources":["containers/searchbox/SearchBoxContainer.tsx","components/Home.tsx","models/MatchField.ts","../node_modules/reactstrap/es/CardBody.js","../node_modules/ts-debounce/src/index.ts"],"sourcesContent":["import * as React from \"react\";\r\nimport { Card } from \"reactstrap\";\r\nimport { LiveSearch, ILiveResultItemProps, IconType, LiveResultTemplateEnum } from \"@lexdania/components\";\r\nimport { debounce } from \"ts-debounce\";\r\nimport { apiGET } from \"../../store/api\";\r\nimport * as qs from \"query-string\";\r\nimport { LiveSearchHitDto } from \"../../models/LiveSearchHitDto\";\r\nimport { MatchField } from \"../../models/MatchField\";\r\nimport { connect } from \"react-redux\";\r\nimport { AppState } from \"../../store\";\r\n\r\nexport interface ISearchBoxContainerProps {\r\n sendToSearch: (queryString: string) => void;\r\n activePageSize?: number;\r\n}\r\n\r\ninterface ILiveSearchState {\r\n liveSearchTerm: string;\r\n hits: ILiveResultItemProps[];\r\n staticLiveSearchItemsCount: number;\r\n}\r\n\r\ninterface ISearchBoxContainerState {\r\n currentSearchTerm: string;\r\n liveSearchState: ILiveSearchState;\r\n yearStart: number;\r\n yearEnd: number;\r\n documentNumberRange: string;\r\n}\r\n\r\nconst defaultLiveSearchState: Readonly<{ liveSearchTerm: string; hits: ILiveResultItemProps[]; staticLiveSearchItemsCount: number }> = {\r\n liveSearchTerm: \"\",\r\n hits: [],\r\n staticLiveSearchItemsCount: 0,\r\n};\r\n\r\nconst yearLow = 2008;\r\nconst yearHigh = 2012;\r\n\r\n// does the rawSearchTerm match number/year pattern\r\n// match for: 20 2018 | >10 2009 | <50 2010 | 22-33 2011\r\nconst numberAndYearRegExp: RegExp = /(^(<|>)([1-9]\\d*)|^([1-9]\\d*)|^([1-9]\\d*)(-)([1-9]\\d*))( (2008|2009|2010|2011|2012))?$/;\r\nconst allNumbersRegExp: RegExp = /\\d+/g;\r\nconst validYearsRegExp: RegExp = /(?:^|\\D)(2008|2009|2010|2011|2012)(?!\\d)/g;\r\n\r\nfunction getNumberText(number: string | null) {\r\n if (number === null || number === \"\") return \"\";\r\n return \"Søg efter nummer <strong>\" + number + \"</strong>\";\r\n}\r\n\r\nfunction getYearText(year: string | null) {\r\n if (year === null) return \"\";\r\n return \" i årgang <strong>\" + year + \"</strong>\";\r\n}\r\n\r\nfunction getNumberAndYearText(arr: RegExpMatchArray | null): string {\r\n let buildText = \"\";\r\n if (arr === null) {\r\n return \"\";\r\n }\r\n\r\n if (arr[2] === undefined) {\r\n buildText = getNumberText(arr[1]);\r\n }\r\n\r\n if (arr[2] === \"<\") {\r\n buildText = \"Søg efter numre <strong>mindre end \" + arr[3] + \"</strong>\";\r\n }\r\n\r\n if (arr[2] === \">\") {\r\n buildText = \"Søg efter numre <strong>større end \" + arr[3] + \"</strong>\";\r\n }\r\n\r\n if (arr[6] === \"-\") {\r\n buildText = \"Søg efter numre i intervallet <strong>\" + arr[1] + \"</strong>\";\r\n }\r\n\r\n if (arr[8] !== undefined) {\r\n buildText = buildText + getYearText(arr[8]);\r\n }\r\n return buildText;\r\n}\r\n\r\nexport class SearchBoxContainer extends React.Component<ISearchBoxContainerProps, ISearchBoxContainerState> {\r\n public readonly state: ISearchBoxContainerState = {\r\n currentSearchTerm: \"\",\r\n liveSearchState: defaultLiveSearchState,\r\n yearStart: yearLow,\r\n yearEnd: yearHigh,\r\n documentNumberRange: \"\",\r\n };\r\n\r\n public render() {\r\n const { liveSearchState, currentSearchTerm } = this.state;\r\n return (\r\n <Card color=\"primary\" className=\"searchbox-container p-4 mb-2\">\r\n <LiveSearch\r\n onChange={this.onLiveSearchTermChange}\r\n onSearchButtonClicked={this.onSearchButtonClicked}\r\n searchTerm={currentSearchTerm}\r\n data={liveSearchState.hits}\r\n searchPlaceHolder=\"Søg efter nummer og år, titel eller populærtitel\"\r\n buttonStyle=\"secondary\"\r\n autofocus={true}\r\n />\r\n </Card>\r\n );\r\n }\r\n\r\n private onSearchButtonClicked = (searchTerm: string) => {\r\n const numberYearMatch = searchTerm.match(numberAndYearRegExp);\r\n const numberMatches = searchTerm.match(allNumbersRegExp);\r\n\r\n if (numberYearMatch !== null) {\r\n this.onYearAndNumberMatchClicked(numberYearMatch[1], numberYearMatch[8]);\r\n } else if (numberMatches) {\r\n var validYearsMatch = searchTerm.match(validYearsRegExp);\r\n var year = validYearsMatch && numberMatches.length !== 1 ? validYearsMatch[validYearsMatch.length - 1].replace(/\\D/, \"\") : null;\r\n var num = numberMatches.find(x => x !== year) || \"\";\r\n this.onYearAndNumberMatchClicked(num, year);\r\n } else {\r\n this.setParamsAndRedirect();\r\n }\r\n };\r\n\r\n private doLiveSearchDebounced = debounce(this.doLiveSearch, 200);\r\n\r\n private onLiveSearchTermChange = (rawSearchTerm: string) => {\r\n const trimmedSearchTerm = rawSearchTerm.trim();\r\n const newLiveSearchState: ILiveSearchState = { liveSearchTerm: trimmedSearchTerm, hits: [], staticLiveSearchItemsCount: 0 };\r\n let counter = 0; // counter for static live search items\r\n\r\n const numberMatches = rawSearchTerm.match(allNumbersRegExp);\r\n if (numberMatches === null && trimmedSearchTerm.length < 3) {\r\n this.setState({ currentSearchTerm: rawSearchTerm, liveSearchState: newLiveSearchState });\r\n return;\r\n }\r\n\r\n const numberYearMatch = rawSearchTerm.match(numberAndYearRegExp);\r\n if (numberYearMatch !== null) {\r\n const buildText = getNumberAndYearText(numberYearMatch);\r\n\r\n newLiveSearchState.hits.push({\r\n text: buildText,\r\n onClick: () => this.onYearAndNumberMatchClicked(numberYearMatch[1], numberYearMatch[8]),\r\n aria: \"Klik her for: \" + buildText,\r\n icon: IconType.Hashtag,\r\n });\r\n counter++;\r\n } else if (numberMatches !== null && typeof numberMatches !== \"undefined\") {\r\n var validYearsMatch = rawSearchTerm.match(validYearsRegExp);\r\n var year = validYearsMatch && numberMatches.length !== 1 ? validYearsMatch[validYearsMatch.length - 1].replace(/\\D/, \"\") : null;\r\n var num = numberMatches.find(x => x !== year) || \"\";\r\n\r\n const buildText = getNumberText(num) + getYearText(year);\r\n newLiveSearchState.hits.push({\r\n text: buildText,\r\n onClick: () => this.onYearAndNumberMatchClicked(num, year),\r\n aria: \"Klik her for: \" + buildText,\r\n icon: IconType.Hashtag,\r\n });\r\n counter++;\r\n }\r\n if (trimmedSearchTerm.length >= 3) {\r\n const quoteDelimited: RegExp = /\"[^\"]+\"$/;\r\n\r\n if (quoteDelimited.test(trimmedSearchTerm)) {\r\n newLiveSearchState.hits.push({\r\n text: \"Søg efter nøjagtigt udtryk <strong>\" + trimmedSearchTerm + \"</strong>\",\r\n onClick: () => this.setState({ currentSearchTerm: trimmedSearchTerm }, () => this.setParamsAndRedirect()),\r\n aria: \"Klik her for at søge efter nøjagtigt udtryk \" + trimmedSearchTerm,\r\n });\r\n counter++;\r\n } else {\r\n newLiveSearchState.hits.push({\r\n text: \"Søg efter <strong>\" + trimmedSearchTerm + \"</strong>\",\r\n onClick: () => this.setState({ currentSearchTerm: trimmedSearchTerm }, () => this.setParamsAndRedirect()),\r\n aria: \"Klik her for at søge efter \" + trimmedSearchTerm,\r\n });\r\n counter++;\r\n\r\n newLiveSearchState.hits.push({\r\n text: 'Søg efter nøjagtigt udtryk \"<strong>' + trimmedSearchTerm + '</strong>\"',\r\n onClick: () => this.setState({ currentSearchTerm: '\"' + trimmedSearchTerm + '\"' }, () => this.setParamsAndRedirect()),\r\n aria: \"Klik her for at søge efter nøjagtigt udtryk \" + trimmedSearchTerm,\r\n });\r\n counter++;\r\n }\r\n }\r\n\r\n // update the static live search items counter\r\n newLiveSearchState.staticLiveSearchItemsCount = counter;\r\n this.setState({ currentSearchTerm: rawSearchTerm, liveSearchState: newLiveSearchState }, () => this.doLiveSearchDebounced(newLiveSearchState));\r\n };\r\n\r\n // reuse then yearStart and yearEnd filter, update the documentNumberRange\r\n private onYearAndNumberMatchClicked = (numRange: string, year: string | null) => {\r\n if (year) {\r\n this.setState(\r\n {\r\n yearStart: +year,\r\n yearEnd: +year,\r\n documentNumberRange: numRange,\r\n liveSearchState: defaultLiveSearchState,\r\n currentSearchTerm: \"\",\r\n },\r\n this.setParamsAndRedirect\r\n );\r\n } else {\r\n this.setState(\r\n {\r\n yearStart: +yearLow,\r\n yearEnd: +yearHigh,\r\n documentNumberRange: numRange,\r\n liveSearchState: defaultLiveSearchState,\r\n currentSearchTerm: \"\",\r\n },\r\n this.setParamsAndRedirect\r\n );\r\n }\r\n };\r\n\r\n private doLiveSearch(lst: ILiveSearchState) {\r\n apiGET<LiveSearchHitDto[]>(\"api/document/search/matching\", {\r\n params: { q: lst.liveSearchTerm },\r\n paramsSerializer: (p: object) => qs.stringify(p),\r\n }).then(result => {\r\n if (this.state.currentSearchTerm !== lst.liveSearchTerm) {\r\n return;\r\n }\r\n const searchForSearchTermItm = lst.hits.slice(0, lst.staticLiveSearchItemsCount);\r\n const hits: ILiveResultItemProps[] = result.map((hit: LiveSearchHitDto) => ({\r\n text: `${hit.value.replace(/\\\\n/g, \"<br />\")}`,\r\n count: 0,\r\n icon: IconType.Search,\r\n onClick: () => this.liveSearchHitSelected(hit),\r\n label: hit.field === MatchField.Title ? \"(titel)\" : \"(populærtitel)\",\r\n template: LiveResultTemplateEnum.DOUBLE_LINE_WITH_LABEL,\r\n aria: \"Klik her for at søge efter dokumenter med \" + (hit.field === MatchField.Title ? \"titlen\" : \"populærtitlen\") + \": \" + hit.value,\r\n }));\r\n this.setState({ liveSearchState: { ...lst, hits: [...searchForSearchTermItm, ...hits] } });\r\n });\r\n }\r\n\r\n /**\r\n * This function is called when searchbutton is clicked (or enter press in the livesearch input field)\r\n */\r\n private setParamsAndRedirect = () => {\r\n const paramsElements = [];\r\n\r\n if (this.state.currentSearchTerm.trim() !== \"\") {\r\n paramsElements.push(\"t=\" + this.state.currentSearchTerm.trim());\r\n }\r\n\r\n if (this.state.yearStart !== yearLow) {\r\n paramsElements.push(\"yl=\" + this.state.yearStart);\r\n }\r\n\r\n if (this.state.yearEnd !== yearHigh) {\r\n paramsElements.push(\"yh=\" + this.state.yearEnd);\r\n }\r\n\r\n if (this.state.documentNumberRange !== \"\") {\r\n paramsElements.push(\"dnr=\" + this.state.documentNumberRange);\r\n }\r\n\r\n // Reset searchpage on empty searchterm and no other search elements\r\n if (paramsElements.length === 0) paramsElements.push(\"t=\");\r\n\r\n if (this.props.activePageSize) {\r\n paramsElements.push(\"ps=\" + this.props.activePageSize);\r\n }\r\n\r\n const params = paramsElements.join(\"&\");\r\n this.props.sendToSearch(params);\r\n };\r\n\r\n /**\r\n * This function is called when a element from the livesearch dropdown list is selected\r\n */\r\n private liveSearchHitSelected = (hit: LiveSearchHitDto) => {\r\n const paramsElements = [];\r\n\r\n if (hit.field === MatchField.Title) {\r\n paramsElements.push(\"ttl=\" + hit.value);\r\n } else if (hit.field === MatchField.PopularTitle) {\r\n paramsElements.push(\"pttl=\" + hit.value);\r\n }\r\n\r\n const params = paramsElements.join(\"&\");\r\n this.props.sendToSearch(params);\r\n };\r\n}\r\n\r\nexport default connect(\r\n ({ documentSearch }: AppState, ownProps: ISearchBoxContainerProps): ISearchBoxContainerProps => {\r\n return {\r\n ...ownProps,\r\n activePageSize: +documentSearch.paramsParsed.ps!,\r\n };\r\n }\r\n)(SearchBoxContainer);\r\n","import React, { lazy } from \"react\";\r\nimport { Card, CardBody, Row, Col } from \"reactstrap\";\r\nimport \"./Home.scss\";\r\nimport { RouteComponentProps } from \"react-router\";\r\nconst AargangList = lazy(() => import(\"./aargang/AargangList\"));\r\nimport SearchBoxContainer from \"../containers/searchbox/SearchBoxContainer\";\r\n\r\nconst Home: React.FC<RouteComponentProps<any>> = props => {\r\n document.title = \"Ministerialtidende\";\r\n\r\n return (\r\n <>\r\n <Row>\r\n <Col className=\"px-xs-0\">\r\n <SearchBoxContainer sendToSearch={(queryString: string) => props.history.push(\"/documents?\" + queryString)} />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"px-xs-0\">\r\n <Card className=\"bemaerk-box border-0 mt-3\">\r\n <CardBody>\r\n <p className=\"mb-0 pl-4\">\r\n <strong>BEMÆRK</strong> - Ministerialtidende er nedlagt pr. 1. januar 2013. Her findes elektronisk Ministerialtidende, årgangene 2008-2012.\r\n </p>\r\n </CardBody>\r\n </Card>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col className=\"px-xs-0\">\r\n <AargangList />\r\n </Col>\r\n </Row>\r\n </>\r\n );\r\n};\r\nexport default Home;\r\n","export enum MatchField {\r\n Title = 1,\r\n PopularTitle = 2,\r\n}\r\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"cssModule\", \"innerRef\", \"tag\"];\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func])\n};\nvar defaultProps = {\n tag: 'div'\n};\n\nvar CardBody = function CardBody(props) {\n var className = props.className,\n cssModule = props.cssModule,\n innerRef = props.innerRef,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, _excluded);\n\n var classes = mapToCssModules(classNames(className, 'card-body'), cssModule);\n return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n className: classes,\n ref: innerRef\n }));\n};\n\nCardBody.propTypes = propTypes;\nCardBody.defaultProps = defaultProps;\nexport default CardBody;","/**\n * A function that emits a side effect and does not return anything.\n */\nexport type Procedure = (...args: any[]) => void;\n\nexport type Options = {\n isImmediate: boolean,\n}\n\nexport function debounce<F extends Procedure>(\n func: F,\n waitMilliseconds = 50,\n options: Options = {\n isImmediate: false\n },\n): F {\n let timeoutId: NodeJS.Timeout | undefined;\n\n return function(this: any, ...args: any[]) {\n const context = this;\n\n const doLater = function() {\n timeoutId = undefined;\n if (!options.isImmediate) {\n func.apply(context, args);\n }\n }\n\n const shouldCallNow = options.isImmediate && timeoutId === undefined;\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(doLater, waitMilliseconds);\n\n if (shouldCallNow) {\n func.apply(context, args);\n }\n } as any\n}\n"],"names":["defaultLiveSearchState","liveSearchTerm","hits","staticLiveSearchItemsCount","yearLow","yearHigh","numberAndYearRegExp","allNumbersRegExp","validYearsRegExp","getNumberText","number","getYearText","year","getNumberAndYearText","arr","buildText","undefined","SearchBoxContainer","state","currentSearchTerm","liveSearchState","yearStart","yearEnd","documentNumberRange","onSearchButtonClicked","searchTerm","numberYearMatch","match","numberMatches","onYearAndNumberMatchClicked","validYearsMatch","length","replace","num","find","x","setParamsAndRedirect","doLiveSearchDebounced","debounce","doLiveSearch","onLiveSearchTermChange","rawSearchTerm","trimmedSearchTerm","trim","newLiveSearchState","counter","setState","push","text","onClick","aria","icon","IconType","test","numRange","paramsElements","props","activePageSize","params","join","sendToSearch","liveSearchHitSelected","hit","field","MatchField","value","this","Card","color","className","LiveSearch","onChange","data","searchPlaceHolder","buttonStyle","autofocus","lst","apiGET","q","paramsSerializer","p","qs","then","result","searchForSearchTermItm","slice","map","count","label","template","LiveResultTemplateEnum","React","connect","ownProps","documentSearch","paramsParsed","ps","AargangList","lazy","document","title","Row","Col","queryString","history","CardBody","_excluded","propTypes","tag","tagPropType","PropTypes","cssModule","innerRef","Tag","attributes","_objectWithoutPropertiesLoose","classes","mapToCssModules","classNames","_extends","ref","defaultProps","func","waitMilliseconds","options","timeoutId","isImmediate","_i","args","context","shouldCallNow","clearTimeout","setTimeout","apply"],"sourceRoot":""}