{"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":""}