Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

183 rader
6.5 KiB

  1. import './search-form.scss';
  2. import $ from 'jquery';
  3. import {createElement} from "../../_global/scripts/helpers";
  4. import {createSearchInput} from "../../atoms/search-input/SearchInputComponent";
  5. import {createSearchButton} from "../../atoms/search-button/SearchButtonComponent";
  6. import {createFormElement} from "../form-element/FormElementComponent";
  7. import {SearchTargetGroups} from "./SearchFormData";
  8. import {createButton} from "../../atoms/button/ButtonComponent";
  9. import IHKExtendedSearch from "./search-form";
  10. import {createCheckboxGroup} from "../checkbox-group/CheckboxGroupComponent";
  11. export const createSearchForm = ({
  12. isExtended = false,
  13. }) => {
  14. const form = createElement('form', ['search-filter-form']);
  15. form.id = 'search-form';
  16. form.onsubmit = 'return false';
  17. const wrapper = createElement('div', ['search-results-search'], null, form);
  18. createElement('h2', [], isExtended ? 'Veranstaltungen' : 'Suche', wrapper);
  19. const fieldset = createElement('fieldset', [], null, wrapper);
  20. createElement('legend', ['visuallyhidden'], 'Suche', fieldset);
  21. fieldset.appendChild(createSearchInput({
  22. placeholder: 'Ihr Suchbegriff oder Nummer',
  23. id: 'query',
  24. }))
  25. fieldset.appendChild(createSearchButton({}));
  26. if (isExtended) {
  27. const toggleActions = createElement('div', ['toggle-actions'], null, wrapper);
  28. const expandButton = createButton({
  29. label: 'ERWEITERTE SUCHE',
  30. icon: 'plus',
  31. iconPosition: 'icon-left',
  32. size: 'small',
  33. });
  34. expandButton.id = 'search-expand-collapse';
  35. toggleActions.appendChild(expandButton);
  36. wrapper.appendChild(createFormElement({
  37. inputType: 'checkbox',
  38. label: 'ODER-Suche',
  39. name: 'abfragemodus',
  40. wrapperClasses: 'extend-left',
  41. }))
  42. const extendedWrapper = createElement('div', ['extended-search'], null, form);
  43. extendedWrapper.ariaHidden = true;
  44. extendedWrapper.dataset.showExtendedSearch = 'false';
  45. const inputRow = createElement('div', ['input-row'], null, extendedWrapper);
  46. inputRow.appendChild(createFormElement({
  47. inputType: 'checkbox',
  48. label: 'Nur kostenfreie Veranstaltungen',
  49. wrapperClasses: 'input-wrapper',
  50. name: 'nur-kostenfreie',
  51. }))
  52. inputRow.appendChild(createFormElement({
  53. inputType: 'checkbox',
  54. label: 'Nur buchbare Termine',
  55. wrapperClasses: 'input-wrapper',
  56. name: 'nur-buchbare',
  57. }))
  58. extendedWrapper.appendChild(createSearchFormButton('Zielgruppe wählen'));
  59. const targetWrapper = createElement('div', ['ev-filter', 'ev-items'], null, extendedWrapper);
  60. const targets = SearchTargetGroups;
  61. targets.map((target, index) => {
  62. targetWrapper.appendChild(createFormElement({
  63. inputType: 'checkbox',
  64. label: target,
  65. name: 'target-' + index,
  66. wrapperClasses: 'ev-filter-wrapper',
  67. }))
  68. });
  69. extendedWrapper.appendChild(createSearchFormButton('Zeitraum wählen'));
  70. const timeWrapper = createElement('div', ['ev-filter'], null, extendedWrapper);
  71. const timeRow = createElement('div', ['row'], null, timeWrapper);
  72. timeRow.appendChild(createFormElement({
  73. wrapperClasses: 'ev-filter-wrapper data col-sm-3',
  74. name: 'von-datum',
  75. label: 'Von',
  76. inputType: 'date',
  77. }));
  78. timeRow.appendChild(createFormElement({
  79. wrapperClasses: 'ev-filter-wrapper data col-sm-3',
  80. name: 'bis-datum',
  81. label: 'Bis',
  82. inputType: 'date',
  83. }))
  84. extendedWrapper.appendChild(createSearchFormButton('Ort / Region wählen'));
  85. const placeWrapper = createElement('div', ['ev-filter'], null, extendedWrapper);
  86. const placeRow = createElement('div', ['row'], null, placeWrapper);
  87. const radiusRow = createElement('div', ['row'], null, placeWrapper);
  88. placeRow.appendChild(createFormElement({
  89. wrapperClasses: 'ev-filter-wrapper location col-sm-3',
  90. name: 'plzort',
  91. label: 'PLZ',
  92. inputType: 'number',
  93. }));
  94. placeRow.appendChild(createFormElement({
  95. wrapperClasses: 'ev-filter-wrapper location col-sm-6',
  96. name: 'ort',
  97. label: 'Bis',
  98. }))
  99. radiusRow.appendChild(createFormElement({
  100. wrapperClasses: 'ev-filter-wrapper location col-sm-9',
  101. name: 'bis-datum',
  102. label: 'Umkreis',
  103. inputType: 'select',
  104. placeholder: ' ',
  105. selectOptions: [
  106. {label: '1 km', value: '1'},
  107. {label: '5 km', value: '5'},
  108. {label: '10 km', value: '10'},
  109. {label: '20 km', value: '20'},
  110. {label: '50 km', value: '50'},
  111. ]
  112. }))
  113. extendedWrapper.appendChild(createSearchFormButton('Kategorie wählen'));
  114. const categoryWrapper = createElement('div', ['ev-filter', 'ev-items'], null, extendedWrapper);
  115. categoryWrapper.appendChild(createCheckboxGroup({}))
  116. categoryWrapper.appendChild(createCheckboxGroup({
  117. title: 'Innovation und Umwelt',
  118. namespace: 'innovation',
  119. items: ['E-Business / IuK-Wirtschaft', 'Energie und Umweltschutz', 'Energiefragen', 'Innovations- / Technologieberatung', 'Potentiale', 'Profile', 'Umwelt']
  120. }))
  121. categoryWrapper.appendChild(createCheckboxGroup({
  122. title: 'Recht und Fair Play',
  123. namespace: 'law',
  124. items: [
  125. 'Arbeitsrecht',
  126. 'Handels- und Gewerberecht',
  127. 'Steuerrecht',
  128. 'Wettbewerbsrecht',
  129. ]
  130. }))
  131. extendedWrapper.appendChild(createSearchFormButton('Veranstaltungsart wählen'));
  132. const typeWrapper = createElement('div', ['ev-filter', 'ev-items'], null, extendedWrapper);
  133. const types = SearchTargetGroups;
  134. types.map((typ, index) => {
  135. typeWrapper.appendChild(createFormElement({
  136. inputType: 'checkbox',
  137. label: typ,
  138. name: 'type-' + index,
  139. wrapperClasses: 'ev-filter-wrapper',
  140. }))
  141. });
  142. const btnWrapper = createElement('div', ['btn-wrapper'], null, extendedWrapper);
  143. const resetLink = createElement('a', ['reset'], 'Suchkriterien zurücksetzen', btnWrapper);
  144. resetLink.role = 'button';
  145. resetLink.href = '#';
  146. resetLink.id = 'search-reset';
  147. const submitButton = createButton({
  148. elementType: 'button',
  149. label: 'Suche starten',
  150. color: 'secondary',
  151. icon: 'suche',
  152. iconPosition: 'icon-right',
  153. })
  154. submitButton.type = 'submit';
  155. btnWrapper.appendChild(submitButton);
  156. $(document).ready(() => {
  157. new IHKExtendedSearch($(extendedWrapper));
  158. })
  159. }
  160. return form;
  161. }
  162. function createSearchFormButton(title) {
  163. const btn = createElement('div', ['ev-search-btn'], title);
  164. btn.role = 'button';
  165. btn.ariaPressed = false;
  166. btn.tabIndex = 0;
  167. return btn;
  168. }