imio.smartweb.core 1.2.38__py3-none-any.whl → 1.2.80__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. imio/smartweb/core/behaviors/categorization.py +24 -0
  2. imio/smartweb/core/behaviors/configure.zcml +7 -0
  3. imio/smartweb/core/browser/controlpanel.py +43 -0
  4. imio/smartweb/core/browser/faceted/block_view.pt +4 -4
  5. imio/smartweb/core/browser/faceted/summary_view.pt +4 -4
  6. imio/smartweb/core/browser/sitemap.py +10 -3
  7. imio/smartweb/core/browser/static/icons/action-delete.svg +3 -0
  8. imio/smartweb/core/browser/static/icons/action-engagement-2.svg +4 -0
  9. imio/smartweb/core/browser/static/icons/action-panneaux.svg +3 -0
  10. imio/smartweb/core/browser/static/icons/action-vote.svg +3 -0
  11. imio/smartweb/core/browser/static/icons/categorie-attention.svg +3 -0
  12. imio/smartweb/core/browser/static/icons/categorie-infos-travaux-2.svg +4 -0
  13. imio/smartweb/core/browser/static/icons/categorie-mon-dossier.svg +1 -1
  14. imio/smartweb/core/browser/static/icons/categorie-nature.svg +3 -0
  15. imio/smartweb/core/browser/static/icons/categorie-parcs-a-conteneurs.svg +4 -0
  16. imio/smartweb/core/browser/static/icons/categorie-plus.svg +3 -0
  17. imio/smartweb/core/browser/static/icons/categorie-primes-2.svg +5 -0
  18. imio/smartweb/core/browser/static/icons/categorie-sport-natation.svg +4 -0
  19. imio/smartweb/core/browser/static/icons/organisation-ecole-sac.svg +4 -0
  20. imio/smartweb/core/browser/static/icons/organisation-scout.svg +3 -0
  21. imio/smartweb/core/browser/static/icons/reseausocial-behance.svg +3 -0
  22. imio/smartweb/core/browser/static/icons/reseausocial-linkedin.svg +3 -0
  23. imio/smartweb/core/browser/static/smartweb-edit-compiled.css +1 -1
  24. imio/smartweb/core/browser/static/smartweb-view-compiled.css +1 -1
  25. imio/smartweb/core/browser/static/src/edit.less +42 -0
  26. imio/smartweb/core/browser/static/src/view.less +109 -56
  27. imio/smartweb/core/browser/vocabulary.py +8 -3
  28. imio/smartweb/core/contents/__init__.py +2 -0
  29. imio/smartweb/core/contents/configure.zcml +1 -0
  30. imio/smartweb/core/contents/folder/block_view.pt +8 -8
  31. imio/smartweb/core/contents/folder/summary_view.pt +4 -4
  32. imio/smartweb/core/contents/pages/cirkwi/content.py +5 -0
  33. imio/smartweb/core/contents/pages/cirkwi/view.py +2 -1
  34. imio/smartweb/core/contents/pages/configure.zcml +1 -0
  35. imio/smartweb/core/contents/pages/portal_page/view.py +3 -0
  36. imio/smartweb/core/contents/pages/views.py +47 -1
  37. imio/smartweb/core/contents/publication/__init__.py +0 -0
  38. imio/smartweb/core/contents/publication/configure.zcml +5 -0
  39. imio/smartweb/core/contents/publication/content.py +23 -0
  40. imio/smartweb/core/contents/rest/base.py +9 -7
  41. imio/smartweb/core/contents/rest/directory/endpoint.py +2 -2
  42. imio/smartweb/core/contents/rest/directory/view.pt +2 -1
  43. imio/smartweb/core/contents/rest/events/content.py +13 -0
  44. imio/smartweb/core/contents/rest/events/endpoint.py +5 -3
  45. imio/smartweb/core/contents/rest/events/view.pt +5 -1
  46. imio/smartweb/core/contents/rest/events/view.py +12 -0
  47. imio/smartweb/core/contents/rest/news/content.py +6 -0
  48. imio/smartweb/core/contents/rest/news/endpoint.py +4 -2
  49. imio/smartweb/core/contents/rest/news/view.pt +4 -1
  50. imio/smartweb/core/contents/rest/news/view.py +8 -0
  51. imio/smartweb/core/contents/rest/utils.py +0 -1
  52. imio/smartweb/core/contents/rest/view.py +4 -0
  53. imio/smartweb/core/contents/sections/common_templates/carousel.pt +5 -1
  54. imio/smartweb/core/contents/sections/common_templates/table.pt +18 -4
  55. imio/smartweb/core/contents/sections/configure.zcml +18 -0
  56. imio/smartweb/core/contents/sections/contact/content.py +2 -2
  57. imio/smartweb/core/contents/sections/contact/macros.pt +28 -3
  58. imio/smartweb/core/contents/sections/contact/utils.py +2 -0
  59. imio/smartweb/core/contents/sections/contact/view.py +28 -12
  60. imio/smartweb/core/contents/sections/events/content.py +12 -4
  61. imio/smartweb/core/contents/sections/events/view.py +20 -2
  62. imio/smartweb/core/contents/sections/external_content/view.pt +4 -4
  63. imio/smartweb/core/contents/sections/external_content/views.py +6 -4
  64. imio/smartweb/core/contents/sections/files/content.py +7 -1
  65. imio/smartweb/core/contents/sections/files/view.py +43 -12
  66. imio/smartweb/core/contents/sections/links/view.py +5 -0
  67. imio/smartweb/core/contents/sections/macros.pt +26 -0
  68. imio/smartweb/core/contents/sections/news/content.py +11 -3
  69. imio/smartweb/core/contents/sections/news/view.py +20 -2
  70. imio/smartweb/core/contents/sections/text/views.py +2 -0
  71. imio/smartweb/core/contents/sections/views.py +73 -10
  72. imio/smartweb/core/interfaces.py +4 -0
  73. imio/smartweb/core/profiles/default/metadata.xml +1 -1
  74. imio/smartweb/core/profiles/default/taxonomies/page_category.xml +16 -0
  75. imio/smartweb/core/profiles/default/taxonomies/procedure_category.xml +26 -0
  76. imio/smartweb/core/profiles/default/types/imio.smartweb.EventsView.xml +1 -0
  77. imio/smartweb/core/profiles/default/types/imio.smartweb.NewsView.xml +1 -0
  78. imio/smartweb/core/profiles/default/types/imio.smartweb.Publication.xml +38 -0
  79. imio/smartweb/core/profiles/default/types/imio.smartweb.SectionEvents.xml +1 -0
  80. imio/smartweb/core/profiles/default/types/imio.smartweb.SectionFiles.xml +2 -0
  81. imio/smartweb/core/profiles/default/types/imio.smartweb.SectionNews.xml +1 -0
  82. imio/smartweb/core/profiles/default/types.xml +1 -0
  83. imio/smartweb/core/profiles/icons/basic/registry.xml +120 -0
  84. imio/smartweb/core/rest/authentic_sources.py +17 -2
  85. imio/smartweb/core/subscribers.py +48 -0
  86. imio/smartweb/core/subscribers.zcml +12 -0
  87. imio/smartweb/core/tests/resources/json_iadeliberations_institutions.json +60 -0
  88. imio/smartweb/core/tests/resources/json_iadeliberations_publication.json +105 -0
  89. imio/smartweb/core/tests/resources/json_iadeliberations_publications.json +270 -0
  90. imio/smartweb/core/tests/resources/json_rest_events.json +6 -2
  91. imio/smartweb/core/tests/resources/json_rest_news.json +2 -2
  92. imio/smartweb/core/tests/resources/json_rest_specific_events.json +1 -1
  93. imio/smartweb/core/tests/test_htmx_in_sections.py +131 -0
  94. imio/smartweb/core/tests/test_iadeliberations.py +136 -0
  95. imio/smartweb/core/tests/test_icons.py +1 -1
  96. imio/smartweb/core/tests/test_rest.py +58 -17
  97. imio/smartweb/core/tests/test_section_contact.py +42 -10
  98. imio/smartweb/core/tests/test_section_events.py +28 -5
  99. imio/smartweb/core/tests/test_section_external_content.py +28 -2
  100. imio/smartweb/core/tests/test_section_news.py +30 -8
  101. imio/smartweb/core/tests/test_sections.py +17 -0
  102. imio/smartweb/core/tests/test_vocabularies.py +60 -3
  103. imio/smartweb/core/tests/test_vocabulary.py +43 -0
  104. imio/smartweb/core/upgrades/configure.zcml +108 -0
  105. imio/smartweb/core/upgrades/profiles/1055_to_1056/types/imio.smartweb.SectionFiles.xml +12 -0
  106. imio/smartweb/core/upgrades/profiles/1056_to_1057/types/imio.smartweb.EventsView.xml +11 -0
  107. imio/smartweb/core/upgrades/profiles/1056_to_1057/types/imio.smartweb.NewsView.xml +11 -0
  108. imio/smartweb/core/upgrades/profiles/1056_to_1057/types/imio.smartweb.SectionEvents.xml +11 -0
  109. imio/smartweb/core/upgrades/profiles/1056_to_1057/types/imio.smartweb.SectionNews.xml +11 -0
  110. imio/smartweb/core/upgrades/profiles/1057_to_1058/taxonomies/page_category.cfg +9 -0
  111. imio/smartweb/core/upgrades/profiles/1057_to_1058/taxonomies/page_category.xml +73 -0
  112. imio/smartweb/core/upgrades/profiles/1057_to_1058/taxonomies/procedure_category.cfg +9 -0
  113. imio/smartweb/core/upgrades/profiles/1057_to_1058/taxonomies/procedure_category.xml +118 -0
  114. imio/smartweb/core/upgrades/profiles/1058_to_1059/registry/linkedin-icon.xml +126 -0
  115. imio/smartweb/core/upgrades/profiles/1059_to_1060/registry/iadeliberation.xml +9 -0
  116. imio/smartweb/core/upgrades/profiles/1060_to_1061/types/imio.smartweb.Publication.xml +38 -0
  117. imio/smartweb/core/upgrades/profiles/1060_to_1061/types/imio.smartweb.SectionFiles.xml +11 -0
  118. imio/smartweb/core/upgrades/profiles/1060_to_1061/types.xml +4 -0
  119. imio/smartweb/core/upgrades/profiles/1060_to_1061/workflows.xml +6 -0
  120. imio/smartweb/core/utils.py +33 -2
  121. imio/smartweb/core/viewlets/configure.zcml +23 -1
  122. imio/smartweb/core/viewlets/footer.pt +5 -0
  123. imio/smartweb/core/viewlets/footer.py +5 -0
  124. imio/smartweb/core/viewlets/htmx.py +15 -0
  125. imio/smartweb/core/viewlets/htmx_js_header.pt +64 -0
  126. imio/smartweb/core/viewlets/ogptags.py +4 -3
  127. imio/smartweb/core/viewlets/social.py +23 -0
  128. imio/smartweb/core/vocabularies.py +65 -3
  129. imio/smartweb/core/vocabularies.zcml +18 -0
  130. imio/smartweb/core/webcomponents/build/1c1605a5fe9a2b10a88f.png +1 -0
  131. imio/smartweb/core/webcomponents/build/524db40e119aa11f4478.png +1 -0
  132. imio/smartweb/core/webcomponents/build/57d3b7cb1ab874660b39.svg +1 -0
  133. imio/smartweb/core/webcomponents/build/6cf03871df23ed2ee8b3.png +1 -0
  134. imio/smartweb/core/webcomponents/build/css/373.smartweb-webcomponents-compiled.css +1 -1
  135. imio/smartweb/core/webcomponents/build/css/486.smartweb-webcomponents-compiled.css +1 -1
  136. imio/smartweb/core/webcomponents/build/css/884.smartweb-webcomponents-compiled.css +1 -0
  137. imio/smartweb/core/webcomponents/build/css/919.smartweb-webcomponents-compiled.css +1 -1
  138. imio/smartweb/core/webcomponents/build/css/smartweb-webcomponents-compiled.css +1 -1
  139. imio/smartweb/core/webcomponents/build/js/218.smartweb-webcomponents-compiled.js +1 -1
  140. imio/smartweb/core/webcomponents/build/js/218.smartweb-webcomponents-compiled.js.LICENSE.txt +10 -8
  141. imio/smartweb/core/webcomponents/build/js/373.smartweb-webcomponents-compiled.js +2 -1
  142. imio/smartweb/core/webcomponents/build/js/{568.smartweb-webcomponents-compiled.js.LICENSE.txt → 373.smartweb-webcomponents-compiled.js.LICENSE.txt} +0 -4
  143. imio/smartweb/core/webcomponents/build/js/486.smartweb-webcomponents-compiled.js +1 -1
  144. imio/smartweb/core/webcomponents/build/js/499.smartweb-webcomponents-compiled.js +2 -0
  145. imio/smartweb/core/webcomponents/build/js/{674.smartweb-webcomponents-compiled.js.LICENSE.txt → 499.smartweb-webcomponents-compiled.js.LICENSE.txt} +1 -8
  146. imio/smartweb/core/webcomponents/build/js/799.smartweb-webcomponents-compiled.js +1 -1
  147. imio/smartweb/core/webcomponents/build/js/824.smartweb-webcomponents-compiled.js +2 -0
  148. imio/smartweb/core/webcomponents/build/js/828.smartweb-webcomponents-compiled.js +2 -0
  149. imio/smartweb/core/webcomponents/build/js/828.smartweb-webcomponents-compiled.js.LICENSE.txt +32 -0
  150. imio/smartweb/core/webcomponents/build/js/884.smartweb-webcomponents-compiled.js +1 -0
  151. imio/smartweb/core/webcomponents/build/js/919.smartweb-webcomponents-compiled.js +1 -1
  152. imio/smartweb/core/webcomponents/build/js/{568.smartweb-webcomponents-compiled.js → 963.smartweb-webcomponents-compiled.js} +2 -2
  153. imio/smartweb/core/webcomponents/build/js/963.smartweb-webcomponents-compiled.js.LICENSE.txt +3 -0
  154. imio/smartweb/core/webcomponents/build/js/smartweb-webcomponents-compiled.js +1 -1
  155. imio/smartweb/core/webcomponents/build/js/smartweb-webcomponents-compiled.js.LICENSE.txt +11 -14
  156. imio/smartweb/core/webcomponents/package.json +42 -40
  157. imio/smartweb/core/webcomponents/src/components/Annuaire/Annuaire.jsx +146 -79
  158. imio/smartweb/core/webcomponents/src/components/Annuaire/Annuaire.scss +415 -351
  159. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactCard/ContactCard.jsx +95 -62
  160. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactContent/ContactContent.jsx +328 -168
  161. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactList/ContactList.jsx +21 -4
  162. imio/smartweb/core/webcomponents/src/components/Annuaire/Filters/Filter.jsx +213 -100
  163. imio/smartweb/core/webcomponents/src/components/Annuaire/index.js +1 -1
  164. imio/smartweb/core/webcomponents/src/components/Events/EventCard/EventCard.jsx +76 -33
  165. imio/smartweb/core/webcomponents/src/components/Events/EventContent/EventContent.jsx +604 -377
  166. imio/smartweb/core/webcomponents/src/components/Events/EventList/EventList.jsx +29 -4
  167. imio/smartweb/core/webcomponents/src/components/Events/Events.jsx +162 -88
  168. imio/smartweb/core/webcomponents/src/components/Events/Events.scss +496 -378
  169. imio/smartweb/core/webcomponents/src/components/Events/Filters/Filter.jsx +259 -91
  170. imio/smartweb/core/webcomponents/src/components/Filters/DateFilter.jsx +62 -55
  171. imio/smartweb/core/webcomponents/src/components/Filters/DateFilter.scss +68 -17
  172. imio/smartweb/core/webcomponents/src/components/Filters/IamData.jsx +42 -0
  173. imio/smartweb/core/webcomponents/src/components/Filters/MainFilter.scss +229 -0
  174. imio/smartweb/core/webcomponents/src/components/Filters/PublicTargetData.jsx +94 -0
  175. imio/smartweb/core/webcomponents/src/components/Filters/SelectStyles.js +58 -0
  176. imio/smartweb/core/webcomponents/src/components/Filters/TaxonomyFilter.jsx +149 -0
  177. imio/smartweb/core/webcomponents/src/components/Filters/TaxonomyFilter.scss +70 -0
  178. imio/smartweb/core/webcomponents/src/components/News/Filters/Filter.jsx +139 -83
  179. imio/smartweb/core/webcomponents/src/components/News/News.jsx +133 -67
  180. imio/smartweb/core/webcomponents/src/components/News/News.scss +170 -127
  181. imio/smartweb/core/webcomponents/src/components/News/NewsCard/NewsCard.jsx +76 -44
  182. imio/smartweb/core/webcomponents/src/components/News/NewsContent/NewsContent.jsx +261 -188
  183. imio/smartweb/core/webcomponents/src/components/News/NewsList/NewsList.jsx +48 -9
  184. imio/smartweb/core/webcomponents/src/components/Search/ContactResult/ContactResult.jsx +21 -10
  185. imio/smartweb/core/webcomponents/src/components/Search/EventsResult/EventsResult.jsx +21 -10
  186. imio/smartweb/core/webcomponents/src/components/Search/Filters/Filter.jsx +8 -9
  187. imio/smartweb/core/webcomponents/src/components/Search/NewsResult/NewsResult.jsx +23 -12
  188. imio/smartweb/core/webcomponents/src/components/Search/Search.jsx +7 -6
  189. imio/smartweb/core/webcomponents/src/components/Search/Search.scss +115 -96
  190. imio/smartweb/core/webcomponents/src/components/Search/WebResult/WebResult.jsx +12 -3
  191. imio/smartweb/core/webcomponents/src/components/Search/index.js +1 -1
  192. imio/smartweb/core/webcomponents/src/hooks/ScrollContext.jsx +3 -0
  193. imio/smartweb/core/webcomponents/src/hooks/useAxios.js +3 -3
  194. imio/smartweb/core/webcomponents/src/hooks/useFilterQuery.js +1 -2
  195. imio/smartweb/core/webcomponents/src/index.scss +255 -211
  196. imio/smartweb/core/webcomponents/src/utils/Map.jsx +26 -19
  197. imio/smartweb/core/webcomponents/src/utils/Map.scss +2 -2
  198. imio/smartweb/core/webcomponents/src/utils/translation.js +129 -9
  199. imio.smartweb.core-1.2.80-py3.8-nspkg.pth +2 -0
  200. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/METADATA +410 -10
  201. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/RECORD +207 -161
  202. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/WHEEL +1 -1
  203. imio/smartweb/core/webcomponents/build/assets/location-bla.1423bcce16ddcb21141430cac1428dc1.svg +0 -1
  204. imio/smartweb/core/webcomponents/build/assets/next-react-white.819cb069ac8eec300a9db6a7707712d6.svg +0 -1
  205. imio/smartweb/core/webcomponents/build/assets/next-react.17bc43ff4a6a86f4520f5782f6a89a72.svg +0 -1
  206. imio/smartweb/core/webcomponents/build/assets/search.57bdbf5b191499cd77514097d1c4972c.svg +0 -1
  207. imio/smartweb/core/webcomponents/build/css/686.smartweb-webcomponents-compiled.css +0 -1
  208. imio/smartweb/core/webcomponents/build/js/209.smartweb-webcomponents-compiled.js +0 -2
  209. imio/smartweb/core/webcomponents/build/js/40.smartweb-webcomponents-compiled.js +0 -1
  210. imio/smartweb/core/webcomponents/build/js/674.smartweb-webcomponents-compiled.js +0 -2
  211. imio/smartweb/core/webcomponents/build/js/686.smartweb-webcomponents-compiled.js +0 -1
  212. imio/smartweb/core/webcomponents/src/assets/facebook-news.svg +0 -1
  213. imio/smartweb/core/webcomponents/src/assets/location-bla.svg +0 -1
  214. imio/smartweb/core/webcomponents/src/assets/next-react.svg +0 -1
  215. imio/smartweb/core/webcomponents/src/assets/search.svg +0 -1
  216. imio/smartweb/core/webcomponents/src/assets/skeleton.svg +0 -1
  217. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactContent/download.svg +0 -1
  218. imio.smartweb.core-1.2.38-py3.8-nspkg.pth +0 -3
  219. /imio/smartweb/core/webcomponents/build/js/{209.smartweb-webcomponents-compiled.js.LICENSE.txt → 824.smartweb-webcomponents-compiled.js.LICENSE.txt} +0 -0
  220. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/LICENSE.GPL +0 -0
  221. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/LICENSE.rst +0 -0
  222. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/namespace_packages.txt +0 -0
  223. {imio.smartweb.core-1.2.38.dist-info → imio.smartweb.core-1.2.80.dist-info}/top_level.txt +0 -0
@@ -1,21 +1,22 @@
1
1
  import React, { useEffect, useRef, useCallback, useState } from "react";
2
2
  import Select from "react-select";
3
- import { useHistory } from "react-router-dom";
3
+ import { useNavigate } from "react-router-dom";
4
4
  import useAxios from "../../../hooks/useAxios";
5
- import { Translator } from "react-translated";
5
+ import { Translator, Translate } from "react-translated";
6
6
  import DateFilter from "../../Filters/DateFilter";
7
7
  import moment from "moment";
8
+ import queryString from "query-string";
9
+ import { taxonomy_event_public } from "./../../Filters/PublicTargetData";
10
+ import { iam } from "./../../Filters/IamData";
11
+ import { menuStyles, moreFilterStyles } from "./../../Filters/SelectStyles";
8
12
 
9
13
  function Filters(props) {
10
- let history = useHistory();
11
- const queryString = require("query-string");
14
+ let navigate = useNavigate();
12
15
  const [inputValues, setInputValues] = useState(props.activeFilter);
13
16
  const [topicsFilter, setTopicsFilter] = useState(null);
14
17
  const [categoryFilter, setCategoryFilter] = useState(null);
15
-
16
- // const [dates, setDates] = useState({ start: moment().format('YYYY-MM-DD'), end: null});
18
+ const [localsCategoryFilter, setLocalsCategoryFilter] = useState([]);
17
19
  const [dates, setDates] = useState(null);
18
-
19
20
  // Get data
20
21
  const { response, error, isLoading } = useAxios({
21
22
  method: "get",
@@ -25,9 +26,11 @@ function Filters(props) {
25
26
  Accept: "application/json",
26
27
  },
27
28
  params: inputValues,
28
- paramsSerializer: { indexes: null }
29
+ paramsSerializer: { indexes: null },
29
30
  });
30
31
 
32
+
33
+ // set fitlers data to state
31
34
  useEffect(() => {
32
35
  if (response !== null) {
33
36
  const optionsTopics =
@@ -41,12 +44,33 @@ function Filters(props) {
41
44
  response.category.map((d) => ({
42
45
  value: d.token,
43
46
  label: d.title,
47
+ queryString: "category",
48
+ }));
49
+ const optionsLocalsCategory =
50
+ response.local_category &&
51
+ response.local_category.map((d) => ({
52
+ value: d.token,
53
+ label: d.title,
54
+ queryString: "local_category",
44
55
  }));
45
56
  setTopicsFilter(optionsTopics);
46
57
  setCategoryFilter(optionsCategory);
58
+ setLocalsCategoryFilter(optionsLocalsCategory)
47
59
  }
48
60
  }, [response]);
49
61
 
62
+ // const to group category and local category
63
+ const groupedOptions = [
64
+ {
65
+ label: <Translate text="Catégories spécifiques" />,
66
+ options: localsCategoryFilter,
67
+ },
68
+ {
69
+ label: <Translate text="Catégories" />,
70
+ options: categoryFilter,
71
+ },
72
+ ];
73
+
50
74
  const onChangeHandler = useCallback(({ target: { name, value } }) => {
51
75
  if (value.length > 2) {
52
76
  setInputValues((state) => ({ ...state, [name]: value }), []);
@@ -70,6 +94,29 @@ function Filters(props) {
70
94
  });
71
95
  }
72
96
  });
97
+ // const onChangeCheckbox = useCallback((value, action) => {
98
+ // if (value.target.checked) {
99
+ // setInputValues((state) => ({ ...state, free_entry: true }), []);
100
+ // } else {
101
+ // setInputValues((state) => {
102
+ // const newState = { ...state };
103
+ // delete newState["free_entry"];
104
+ // return newState;
105
+ // }, []);
106
+ // }
107
+ // });
108
+
109
+ const onChangeGroupSelect = useCallback((value, action) => {
110
+ if (value) {
111
+ setInputValues((state) => ({ ...state, [value.queryString]: value.value }), []);
112
+ } else {
113
+ setInputValues((prevState) => {
114
+ const state = { ...prevState };
115
+ const { [action.removedValues[0].queryString]: remove, ...rest } = state;
116
+ return rest;
117
+ });
118
+ }
119
+ });
73
120
 
74
121
  // make to no launch useEffect first time
75
122
  const firstUpdate = useRef(true);
@@ -78,7 +125,7 @@ function Filters(props) {
78
125
  firstUpdate.current = false;
79
126
  return;
80
127
  }
81
- history.push({
128
+ navigate({
82
129
  pathname: "./",
83
130
  search: queryString.stringify(inputValues),
84
131
  });
@@ -96,110 +143,231 @@ function Filters(props) {
96
143
  let actCategory =
97
144
  categoryFilter &&
98
145
  categoryFilter.filter((option) => option.value === props.activeFilter.category);
99
- const customStyles = {
100
- control: (styles) => ({
101
- ...styles,
102
- backgroundColor: "white",
103
- borderRadius: "0",
104
- height: "50px",
105
- }),
106
- placeholder: (styles) => ({
107
- ...styles,
108
- color: "000",
109
- fontWeight: "bold",
110
- fontSize: "12px",
111
- textTransform: "uppercase",
112
- letterSpacing: "1.2px",
113
- }),
114
- option: (styles, { data, isDisabled, isFocused, isSelected }) => {
115
- return {
116
- ...styles,
117
- };
118
- },
119
- };
146
+
147
+ let actTarget =
148
+ taxonomy_event_public &&
149
+ taxonomy_event_public.filter((option) => option.value === props.activeFilter.topics);
150
+
151
+ let actIam = iam && iam.filter((option) => option.value === props.activeFilter.topics);
152
+
120
153
  useEffect(() => {
121
154
  if (dates) {
122
- setInputValues(prevState => {
155
+ setInputValues((prevState) => {
123
156
  if (dates["event_dates.query"].length > 1) {
124
157
  const { "event_dates.range": _, ...rest } = dates;
125
158
  const newValue = "min:max";
126
159
  return { ...prevState, ...rest, "event_dates.range": newValue };
127
- } else if (dates["event_dates.query"].every(item => item === null)) {
128
- return { ...prevState, "event_dates.query": [moment().format('YYYY-MM-DD')], "event_dates.range": "min" }
129
- }
130
- else {
160
+ } else if (dates["event_dates.query"].every((item) => item === null)) {
161
+ return {
162
+ ...prevState,
163
+ "event_dates.query": [moment().format("YYYY-MM-DD")],
164
+ "event_dates.range": "min",
165
+ };
166
+ } else {
131
167
  return { ...prevState, ...dates, "event_dates.range": "min" };
132
168
  }
133
169
  });
134
170
  }
135
171
  }, [dates]);
172
+
136
173
  return (
137
174
  <React.Fragment>
138
- <form className="r-filter" onSubmit={handleSubmit}>
139
- {/* <label>Recherche</label> */}
140
- <div className="r-filter-search">
175
+ <div className="react-filters-menu">
176
+ <div className="react-filters-container">
177
+ <form className="r-filter r-filter-search" onSubmit={handleSubmit}>
178
+ {/* <label>Recherche</label> */}
179
+ <div className="relative">
180
+ <Translator>
181
+ {({ translate }) => (
182
+ <input
183
+ className="input-custom-class"
184
+ name="SearchableText"
185
+ type="text"
186
+ value={inputValues.SearchableText}
187
+ onChange={onChangeHandler}
188
+ placeholder={translate({
189
+ text: "Recherche",
190
+ })}
191
+ />
192
+ )}
193
+ </Translator>
194
+ <svg
195
+ xmlns="http://www.w3.org/2000/svg"
196
+ fill="none"
197
+ stroke="#9f9f9f"
198
+ strokeWidth="4"
199
+ aria-hidden="true"
200
+ display="block"
201
+ overflow="visible"
202
+ style={{ height: 16, width: 16 }}
203
+ viewBox="0 0 32 32"
204
+ >
205
+ <path d="M13 24a11 11 0 1 0 0-22 11 11 0 0 0 0 22zm8-3 9 9" />
206
+ </svg>
207
+ </div>
208
+ </form>
209
+ {/* More filter*/}
210
+ <button
211
+ className="more-filter-btn collapsed"
212
+ type="button"
213
+ data-bs-toggle="collapse"
214
+ data-bs-target="#collapseOne"
215
+ aria-expanded="false"
216
+ aria-controls="collapseOne"
217
+ >
218
+ <svg
219
+ xmlns="http://www.w3.org/2000/svg"
220
+ viewBox="0 0 32 32"
221
+ style={{ height: 16, width: 16 }}
222
+ fill="none"
223
+ stroke="currentColor"
224
+ strokeWidth="3"
225
+ aria-hidden="true"
226
+ display="block"
227
+ overflow="visible"
228
+ >
229
+ <path d="M7 16H3m26 0H15M29 6h-4m-8 0H3m26 20h-4M7 16a4 4 0 108 0 4 4 0 00-8 0zM17 6a4 4 0 108 0 4 4 0 00-8 0zm0 20a4 4 0 108 0 4 4 0 00-8 0zm0 0H3"></path>
230
+ </svg>
231
+ </button>
232
+ <div className="react-sep-menu"></div>
233
+ {props.onlyPastEvents === "False" && (
234
+ <div className="r-filter schedul-Filter">
235
+ <DateFilter language={props.language} setDates={setDates} />
236
+ </div>
237
+ )}
238
+ <div className="react-sep-menu"></div>
239
+
240
+ {/* <div className="r-filter top-filter facilities-Filter">
241
+ <Translator>
242
+ {({ translate }) => (
243
+ <Select
244
+ styles={menuStyles}
245
+ name={"category"}
246
+ className="select-custom-no-border library-facilities"
247
+ isClearable
248
+ onChange={onChangeHandlerSelect}
249
+ options={categoryFilter && categoryFilter}
250
+ placeholder={translate({
251
+ text: "Quoi",
252
+ })}
253
+ value={actCategory && actCategory[0]}
254
+ />
255
+ )}
256
+ </Translator>
257
+ </div> */}
258
+
259
+ {/* test */}
141
260
  <Translator>
142
261
  {({ translate }) => (
143
- <input
144
- className="input-custom-class"
145
- name="SearchableText"
146
- type="text"
147
- value={inputValues.SearchableText}
148
- onChange={onChangeHandler}
149
- placeholder={translate({
150
- text: 'Recherche'
151
- })}
152
- />
262
+ <div className="r-filter top-filter facilities-Filter">
263
+ {/* <label>Catégories</label> */}
264
+ <Select
265
+ styles={menuStyles}
266
+ name={"category"}
267
+ className="select-custom-no-border library-facilities"
268
+ isClearable
269
+ onChange={onChangeGroupSelect}
270
+ options={localsCategoryFilter.length === 0 ? categoryFilter && categoryFilter :groupedOptions}
271
+ placeholder={translate({
272
+ text: "Quoi",
273
+ })}
274
+ value={actCategory && actCategory[0]}
275
+ />
276
+ </div>
153
277
  )}
154
278
  </Translator>
155
- <button type="submit"></button>
156
279
  </div>
157
- </form>
158
-
159
- <div className="r-filter topics-Filter">
160
- {/* <label>Thématiques</label> */}
161
- <Translator>
162
- {({ translate }) => (
163
- <Select
164
- styles={customStyles}
165
- name={"topics"}
166
- className="select-custom-class library-topics"
167
- isClearable
168
- onChange={onChangeHandlerSelect}
169
- options={topicsFilter && topicsFilter}
170
- placeholder={translate({
171
- text: 'Thématiques'
172
- })}
173
- value={actTopi && actTopi[0]}
174
- />
175
- )}
176
- </Translator>
177
- </div>
178
- <div className="r-filter facilities-Filter">
179
- {/* <label>Catégories</label> */}
180
- <Translator>
181
- {({ translate }) => (
182
- <Select
183
- styles={customStyles}
184
- name={"category"}
185
- className="select-custom-class library-facilities"
186
- isClearable
187
- onChange={onChangeHandlerSelect}
188
- options={categoryFilter && categoryFilter}
189
- placeholder={translate({
190
- text: 'Catégories'
191
- })}
192
- value={actCategory && actCategory[0]}
193
- />
194
- )}
195
- </Translator>
196
280
  </div>
197
281
 
198
- <div className="r-filter schedul-Filter">
199
- <DateFilter language={props.language} setDates={setDates} />
282
+ {/* -------------- More filter -------------- */}
283
+
284
+ <div
285
+ id="collapseOne"
286
+ className="accordion-collapse collapse more-filter-container "
287
+ aria-labelledby="headingOne"
288
+ data-bs-parent="#accordionExample"
289
+ >
290
+ <div className="accordion-body">
291
+ {/* Filtre thématique */}
292
+ <div className="r-filter collapse-filter topics-Filter">
293
+ {/* <label>Thématiques</label> */}
294
+ <Translator>
295
+ {({ translate }) => (
296
+ <Select
297
+ styles={moreFilterStyles}
298
+ name={"topics"}
299
+ className="library-topics"
300
+ isClearable
301
+ onChange={onChangeHandlerSelect}
302
+ options={topicsFilter && topicsFilter}
303
+ placeholder={translate({
304
+ text: "Thématiques",
305
+ })}
306
+ value={actTopi && actTopi[0]}
307
+ />
308
+ )}
309
+ </Translator>
310
+ </div>
311
+ {/* Filtre Public cible */}
312
+ <div className="r-filter collapse-filter public-target-Filter">
313
+ {/* <label>Thématiques</label> */}
314
+ <Translator>
315
+ {({ translate }) => (
316
+ <Select
317
+ styles={moreFilterStyles}
318
+ name={"taxonomy_event_public"}
319
+ className="library-topics"
320
+ isClearable
321
+ onChange={onChangeHandlerSelect}
322
+ options={taxonomy_event_public && taxonomy_event_public}
323
+ placeholder={translate({
324
+ text: "Public cible",
325
+ })}
326
+ value={actTarget && actTarget[0]}
327
+ />
328
+ )}
329
+ </Translator>
330
+ </div>
331
+
332
+ {/* Filtre iam */}
333
+ <div className="r-filter collapse-filter iam-Filter">
334
+ {/* <label>Thématiques</label> */}
335
+ <Translator>
336
+ {({ translate }) => (
337
+ <Select
338
+ styles={moreFilterStyles}
339
+ name={"iam"}
340
+ className="library-topics"
341
+ isClearable
342
+ onChange={onChangeHandlerSelect}
343
+ options={iam && iam}
344
+ placeholder={translate({
345
+ text: "Profil",
346
+ })}
347
+ value={actIam && actIam[0]}
348
+ />
349
+ )}
350
+ </Translator>
351
+ </div>
352
+
353
+ {/* Filtre Gratuit */}
354
+ {/* <div className="r-filter collapse-filter free-Filter">
355
+ <div className="form-check form-switch">
356
+ <label className="form-check-label" htmlFor="flexSwitchCheckDefault">
357
+ Gratuit
358
+ </label>
359
+ <input
360
+ className="form-check-input"
361
+ onChange={onChangeCheckbox}
362
+ type="checkbox"
363
+ id="flexSwitchCheckDefault"
364
+ />
365
+ </div>
366
+ </div> */}
367
+ </div>
200
368
  </div>
201
369
  </React.Fragment>
202
370
  );
203
371
  }
204
372
 
205
- export default Filters;
373
+ export default Filters;
@@ -1,13 +1,12 @@
1
-
2
-
3
- import React, { useState,useContext } from "react";
4
- import DatePicker from 'react-datepicker';
5
- import 'react-datepicker/dist/react-datepicker.css';
1
+ import React, { useState } from "react";
2
+ import DatePicker from "react-datepicker";
3
+ import "react-datepicker/dist/react-datepicker.css";
6
4
  import moment from "moment";
7
- import { Dropdown, DropdownButton } from 'react-bootstrap';
5
+ import { Dropdown, DropdownButton } from "react-bootstrap";
8
6
  import { Translate, Translator } from "react-translated";
9
- import { nl,fr,enGB,de } from 'date-fns/locale';
10
- import './DateFilter.scss';
7
+ import { nl, fr, enGB, de } from "date-fns/locale";
8
+
9
+ import "./DateFilter.scss";
11
10
 
12
11
  const languageList = {
13
12
  fr: fr,
@@ -16,64 +15,63 @@ const languageList = {
16
15
  en: enGB,
17
16
  };
18
17
  function DateFilter({ language, setDates }) {
19
- // const currentLanguage = useContext(LanguageContext);
20
18
  const [dateRange, setDateRange] = useState([null, null]);
21
19
  const [startDate, endDate] = dateRange;
22
- const [filter, setFilter] = useState('Période');
20
+ const [filter, setFilter] = useState(<Translate text="Quand" />);
23
21
  const [languageToLocale, setLanguageToLocale] = useState();
24
22
 
25
23
  const handleApply = (e) => {
26
24
  setDateRange(e);
27
25
  const dates = e; // Remplacez ceci par votre tableau de dates
28
- const filteredDates = dates.filter(date => date !== null);
29
- const formattedDates = filteredDates.map(date => moment(date).format('YYYY-MM-DD'));
26
+ const filteredDates = dates.filter((date) => date !== null);
27
+ const formattedDates = filteredDates.map((date) => moment(date).format("YYYY-MM-DD"));
30
28
  setDates({ "event_dates.query": formattedDates });
31
- if(e.every(item => item === null)){
29
+ if (e.every((item) => item === null)) {
32
30
  setFilter(periodTitle.all);
33
- }else {
31
+ } else {
34
32
  setFilter(periodTitle.custom);
35
33
  }
36
34
  };
37
- const today = moment().format('YYYY-MM-DD');
35
+ const today = moment().format("YYYY-MM-DD");
38
36
 
39
37
  const periodTitle = {
40
38
  all: <Translate text="Toutes les dates" />,
41
39
  today: <Translate text="Aujourd'hui" />,
42
- tomorrow: <Translate text='Demain' />,
43
- thisWeekEnd: <Translate text='Ce week-end' />,
44
- thisWeek: <Translate text='Cette semaine' />,
45
- thisMonth: <Translate text='Ce mois-ci' />,
46
- custom: <Translate text='Personnalisé (Du ... au ...)'/>
47
- }
40
+ tomorrow: <Translate text="Demain" />,
41
+ thisWeekEnd: <Translate text="Ce week-end" />,
42
+ thisWeek: <Translate text="Cette semaine" />,
43
+ thisMonth: <Translate text="Ce mois-ci" />,
44
+ custom: <Translate text="Personnalisé (Du ... au ...)" />,
45
+ };
48
46
 
49
47
  const handleSelect = (eventKey) => {
50
48
  switch (eventKey) {
51
- case 'all':
49
+ case "all":
52
50
  setDates({ "event_dates.query": [today] });
53
51
  setFilter(periodTitle.all);
54
52
  break;
55
- case 'today':
53
+ case "today":
56
54
  setDates({ "event_dates.query": [today, today] });
57
55
  setFilter(periodTitle.today);
58
56
  break;
59
- case 'tomorrow':
60
- const tomorrow = moment().add(1, 'days').format('YYYY-MM-DD');
57
+ case "tomorrow":
58
+ const tomorrow = moment().add(1, "days").format("YYYY-MM-DD");
61
59
  setDates({ "event_dates.query": [tomorrow, tomorrow] });
62
60
  setFilter(periodTitle.tomorrow);
63
61
  break;
64
- case 'thisWeekEnd':
65
- const startOfWeekEnd = moment().endOf('week').format('YYYY-MM-DD');
66
- const endOfWeekEnd = moment().endOf('week').add(1, 'days').format('YYYY-MM-DD');
62
+ case "thisWeekEnd":
63
+ const startOfWeekEnd = moment().endOf("week").format("YYYY-MM-DD");
64
+ const endOfWeekEnd = moment().endOf("week").add(1, "days").format("YYYY-MM-DD");
67
65
  setDates({ "event_dates.query": [startOfWeekEnd, endOfWeekEnd] });
68
66
  setFilter(periodTitle.thisWeekEnd);
69
67
  break;
70
- case 'thisWeek':
71
- const endOfWeek = moment().endOf('week').add(1, 'days').format('YYYY-MM-DD');
68
+ case "thisWeek":
69
+ const endOfWeek = moment().endOf("week").add(1, "days").format("YYYY-MM-DD");
72
70
  setDates({ "event_dates.query": [today, endOfWeek] });
73
71
  setFilter(periodTitle.thisWeek);
74
72
  break;
75
- case 'thisMonth':
76
- const endOfMonth = moment().endOf('month').format('YYYY-MM-DD');
73
+ case "thisMonth":
74
+ const endOfMonth = moment().endOf("month").format("YYYY-MM-DD");
77
75
  setDates({ "event_dates.query": [today, endOfMonth] });
78
76
  setFilter(periodTitle.thisMonth);
79
77
  break;
@@ -83,13 +81,17 @@ function DateFilter({ language, setDates }) {
83
81
  };
84
82
 
85
83
  useState(() => {
86
- setLanguageToLocale(languageList[language])
84
+ setLanguageToLocale(languageList[language]);
87
85
  }, []);
88
86
 
89
87
  return (
90
88
  <>
91
89
  <div className="period-filter">
92
- <DropdownButton className="period-filter-toggler" onSelect={handleSelect} title={filter}>
90
+ <DropdownButton
91
+ className="period-filter-toggler"
92
+ onSelect={handleSelect}
93
+ title={filter}
94
+ >
93
95
  <Dropdown.Item eventKey="all">{periodTitle.all}</Dropdown.Item>
94
96
  <Dropdown.Item eventKey="today">{periodTitle.today}</Dropdown.Item>
95
97
  <Dropdown.Item eventKey="tomorrow">{periodTitle.tomorrow}</Dropdown.Item>
@@ -97,28 +99,33 @@ function DateFilter({ language, setDates }) {
97
99
  <Dropdown.Item eventKey="thisWeek">{periodTitle.thisWeek}</Dropdown.Item>
98
100
  <Dropdown.Item eventKey="thisMonth">{periodTitle.thisMonth}</Dropdown.Item>
99
101
  <div className="perdiod-filter-range">
100
- {languageToLocale && <Translator>
101
- {({ translate,language }) => (
102
- <DatePicker
103
- dateFormat="dd/MM/yyyy"
104
- placeholderText={translate({
105
- text: 'Personnalisé (Du ... au ...)'
106
- })}
107
- selectsRange={true}
108
- startDate={startDate}
109
- endDate={endDate}
110
- minDate={new Date().setDate(new Date().getDate() + 1)}
111
- onChange={(update) => {
112
- setDateRange(update);
113
- if (update[0] !== null && update[1] !== null || update[0] == null && update[1] == null) {
114
- handleApply(update)
115
- }
116
- }}
117
- isClearable={true}
118
- locale={languageToLocale}
119
- />
102
+ {languageToLocale && (
103
+ <Translator>
104
+ {({ translate, language }) => (
105
+ <DatePicker
106
+ dateFormat="dd/MM/yyyy"
107
+ placeholderText={translate({
108
+ text: "Personnalisé (Du ... au ...)",
109
+ })}
110
+ selectsRange={true}
111
+ startDate={startDate}
112
+ endDate={endDate}
113
+ minDate={new Date().setDate(new Date().getDate() + 1)}
114
+ onChange={(update) => {
115
+ setDateRange(update);
116
+ if (
117
+ (update[0] !== null && update[1] !== null) ||
118
+ (update[0] == null && update[1] == null)
119
+ ) {
120
+ handleApply(update);
121
+ }
122
+ }}
123
+ isClearable={true}
124
+ locale={languageToLocale}
125
+ />
126
+ )}
127
+ </Translator>
120
128
  )}
121
- </Translator>}
122
129
  </div>
123
130
  </DropdownButton>
124
131
  </div>