You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

184 rivejä
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. expandButton.ariaLabel = 'Suchen';
  36. toggleActions.appendChild(expandButton);
  37. wrapper.appendChild(createFormElement({
  38. inputType: 'checkbox',
  39. label: 'ODER-Suche',
  40. name: 'abfragemodus',
  41. wrapperClasses: 'extend-left',
  42. }))
  43. const extendedWrapper = createElement('div', ['extended-search'], null, form);
  44. extendedWrapper.ariaHidden = true;
  45. extendedWrapper.dataset.showExtendedSearch = 'false';
  46. const inputRow = createElement('div', ['input-row'], null, extendedWrapper);
  47. inputRow.appendChild(createFormElement({
  48. inputType: 'checkbox',
  49. label: 'Nur kostenfreie Veranstaltungen',
  50. wrapperClasses: 'input-wrapper',
  51. name: 'nur-kostenfreie',
  52. }))
  53. inputRow.appendChild(createFormElement({
  54. inputType: 'checkbox',
  55. label: 'Nur buchbare Termine',
  56. wrapperClasses: 'input-wrapper',
  57. name: 'nur-buchbare',
  58. }))
  59. extendedWrapper.appendChild(createSearchFormButton('Zielgruppe wählen'));
  60. const targetWrapper = createElement('div', ['ev-filter', 'ev-items'], null, extendedWrapper);
  61. const targets = SearchTargetGroups;
  62. targets.map((target, index) => {
  63. targetWrapper.appendChild(createFormElement({
  64. inputType: 'checkbox',
  65. label: target,
  66. name: 'target-' + index,
  67. wrapperClasses: 'ev-filter-wrapper',
  68. }))
  69. });
  70. extendedWrapper.appendChild(createSearchFormButton('Zeitraum wählen'));
  71. const timeWrapper = createElement('div', ['ev-filter'], null, extendedWrapper);
  72. const timeRow = createElement('div', ['row'], null, timeWrapper);
  73. timeRow.appendChild(createFormElement({
  74. wrapperClasses: 'ev-filter-wrapper data col-sm-3',
  75. name: 'von-datum',
  76. label: 'Von',
  77. inputType: 'date',
  78. }));
  79. timeRow.appendChild(createFormElement({
  80. wrapperClasses: 'ev-filter-wrapper data col-sm-3',
  81. name: 'bis-datum',
  82. label: 'Bis',
  83. inputType: 'date',
  84. }))
  85. extendedWrapper.appendChild(createSearchFormButton('Ort / Region wählen'));
  86. const placeWrapper = createElement('div', ['ev-filter'], null, extendedWrapper);
  87. const placeRow = createElement('div', ['row'], null, placeWrapper);
  88. const radiusRow = createElement('div', ['row'], null, placeWrapper);
  89. placeRow.appendChild(createFormElement({
  90. wrapperClasses: 'ev-filter-wrapper location col-sm-3',
  91. name: 'plzort',
  92. label: 'PLZ',
  93. inputType: 'number',
  94. }));
  95. placeRow.appendChild(createFormElement({
  96. wrapperClasses: 'ev-filter-wrapper location col-sm-6',
  97. name: 'ort',
  98. label: 'Bis',
  99. }))
  100. radiusRow.appendChild(createFormElement({
  101. wrapperClasses: 'ev-filter-wrapper location col-sm-9',
  102. name: 'bis-datum',
  103. label: 'Umkreis',
  104. inputType: 'select',
  105. placeholder: ' ',
  106. selectOptions: [
  107. {label: '1 km', value: '1'},
  108. {label: '5 km', value: '5'},
  109. {label: '10 km', value: '10'},
  110. {label: '20 km', value: '20'},
  111. {label: '50 km', value: '50'},
  112. ]
  113. }))
  114. extendedWrapper.appendChild(createSearchFormButton('Kategorie wählen'));
  115. const categoryWrapper = createElement('div', ['ev-filter', 'ev-items'], null, extendedWrapper);
  116. categoryWrapper.appendChild(createCheckboxGroup({}))
  117. categoryWrapper.appendChild(createCheckboxGroup({
  118. title: 'Innovation und Umwelt',
  119. namespace: 'innovation',
  120. items: ['E-Business / IuK-Wirtschaft', 'Energie und Umweltschutz', 'Energiefragen', 'Innovations- / Technologieberatung', 'Potentiale', 'Profile', 'Umwelt']
  121. }))
  122. categoryWrapper.appendChild(createCheckboxGroup({
  123. title: 'Recht und Fair Play',
  124. namespace: 'law',
  125. items: [
  126. 'Arbeitsrecht',
  127. 'Handels- und Gewerberecht',
  128. 'Steuerrecht',
  129. 'Wettbewerbsrecht',
  130. ]
  131. }))
  132. extendedWrapper.appendChild(createSearchFormButton('Veranstaltungsart wählen'));
  133. const typeWrapper = createElement('div', ['ev-filter', 'ev-items'], null, extendedWrapper);
  134. const types = SearchTargetGroups;
  135. types.map((typ, index) => {
  136. typeWrapper.appendChild(createFormElement({
  137. inputType: 'checkbox',
  138. label: typ,
  139. name: 'type-' + index,
  140. wrapperClasses: 'ev-filter-wrapper',
  141. }))
  142. });
  143. const btnWrapper = createElement('div', ['btn-wrapper'], null, extendedWrapper);
  144. const resetLink = createElement('a', ['reset'], 'Suchkriterien zurücksetzen', btnWrapper);
  145. resetLink.role = 'button';
  146. resetLink.href = '#';
  147. resetLink.id = 'search-reset';
  148. const submitButton = createButton({
  149. elementType: 'button',
  150. label: 'Suche starten',
  151. color: 'secondary',
  152. icon: 'suche',
  153. iconPosition: 'icon-right',
  154. })
  155. submitButton.type = 'submit';
  156. btnWrapper.appendChild(submitButton);
  157. $(document).ready(() => {
  158. new IHKExtendedSearch($(extendedWrapper));
  159. })
  160. }
  161. return form;
  162. }
  163. function createSearchFormButton(title) {
  164. const btn = createElement('div', ['ev-search-btn'], title);
  165. btn.role = 'button';
  166. btn.ariaPressed = false;
  167. btn.tabIndex = 0;
  168. return btn;
  169. }