imio.smartweb.core 1.2.48__py3-none-any.whl → 1.2.50__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 (42) hide show
  1. imio/smartweb/core/contents/rest/base.py +8 -6
  2. imio/smartweb/core/contents/rest/directory/endpoint.py +2 -2
  3. imio/smartweb/core/contents/rest/events/endpoint.py +2 -2
  4. imio/smartweb/core/contents/rest/news/endpoint.py +2 -2
  5. imio/smartweb/core/tests/test_rest.py +16 -16
  6. imio/smartweb/core/webcomponents/build/css/373.smartweb-webcomponents-compiled.css +1 -1
  7. imio/smartweb/core/webcomponents/build/css/420.smartweb-webcomponents-compiled.css +1 -0
  8. imio/smartweb/core/webcomponents/build/css/486.smartweb-webcomponents-compiled.css +1 -1
  9. imio/smartweb/core/webcomponents/build/css/884.smartweb-webcomponents-compiled.css +1 -1
  10. imio/smartweb/core/webcomponents/build/css/smartweb-webcomponents-compiled.css +1 -1
  11. imio/smartweb/core/webcomponents/build/js/373.smartweb-webcomponents-compiled.js +1 -1
  12. imio/smartweb/core/webcomponents/build/js/486.smartweb-webcomponents-compiled.js +1 -1
  13. imio/smartweb/core/webcomponents/build/js/884.smartweb-webcomponents-compiled.js +1 -1
  14. imio/smartweb/core/webcomponents/build/js/919.smartweb-webcomponents-compiled.js +1 -1
  15. imio/smartweb/core/webcomponents/build/js/smartweb-webcomponents-compiled.js +1 -1
  16. imio/smartweb/core/webcomponents/package.json +1 -0
  17. imio/smartweb/core/webcomponents/src/components/Annuaire/Annuaire.jsx +12 -1
  18. imio/smartweb/core/webcomponents/src/components/Annuaire/Annuaire.scss +10 -0
  19. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactCard/ContactCard.jsx +5 -5
  20. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactContent/ContactContent.jsx +2 -2
  21. imio/smartweb/core/webcomponents/src/components/Events/EventCard/EventCard.jsx +1 -1
  22. imio/smartweb/core/webcomponents/src/components/Events/EventContent/EventContent.jsx +86 -23
  23. imio/smartweb/core/webcomponents/src/components/Events/Events.jsx +13 -2
  24. imio/smartweb/core/webcomponents/src/components/Events/Events.scss +27 -1
  25. imio/smartweb/core/webcomponents/src/components/Events/Filters/Filter.jsx +1 -1
  26. imio/smartweb/core/webcomponents/src/components/Filters/DateFilter.jsx +1 -2
  27. imio/smartweb/core/webcomponents/src/components/Filters/MainFilter.scss +14 -4
  28. imio/smartweb/core/webcomponents/src/components/News/Filters/Filter.jsx +15 -3
  29. imio/smartweb/core/webcomponents/src/components/News/News.jsx +12 -2
  30. imio/smartweb/core/webcomponents/src/components/News/NewsContent/NewsContent.jsx +2 -2
  31. imio/smartweb/core/webcomponents/src/index.scss +14 -3
  32. imio/smartweb/core/webcomponents/src/utils/Map.jsx +2 -2
  33. imio/smartweb/core/webcomponents/src/utils/translation.js +12 -0
  34. imio.smartweb.core-1.2.50-py3.11-nspkg.pth +2 -0
  35. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/METADATA +20 -3
  36. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/RECORD +41 -40
  37. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/WHEEL +1 -1
  38. imio.smartweb.core-1.2.48-py3.10-nspkg.pth +0 -3
  39. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/LICENSE.GPL +0 -0
  40. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/LICENSE.rst +0 -0
  41. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/namespace_packages.txt +0 -0
  42. {imio.smartweb.core-1.2.48.dist-info → imio.smartweb.core-1.2.50.dist-info}/top_level.txt +0 -0
@@ -55,6 +55,7 @@
55
55
  "@loadable/component": "^5.16.3",
56
56
  "axios": "^1.6.8",
57
57
  "babel-polyfill": "^6.26.0",
58
+ "bootstrap-icons": "^1.11.3",
58
59
  "date-fns": "^3.6.0",
59
60
  "flexbin": "^0.2.0",
60
61
  "leaflet": "^1.9.4",
@@ -110,7 +110,7 @@ function AnnuaireView(props) {
110
110
  height: filterRef.current.clientHeight,
111
111
  });
112
112
  setHeaderHeight(filterRef.current.offsetTop);
113
- }, [filterRef.current]);
113
+ }, [response]);
114
114
 
115
115
  // coditional list render
116
116
  let listRender;
@@ -170,6 +170,17 @@ function AnnuaireView(props) {
170
170
  <div className="r-add-contact">
171
171
  <a target="_blank" rel="noreferrer" href={props.proposeUrl}>
172
172
  <Translate text="Proposer un contact" />
173
+ <svg
174
+ xmlns="http://www.w3.org/2000/svg"
175
+ width="16"
176
+ height="16"
177
+ fill="currentColor"
178
+ className="bi bi-plus-circle"
179
+ viewBox="0 0 16 16"
180
+ >
181
+ <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16" />
182
+ <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4" />
183
+ </svg>
173
184
  </a>
174
185
  </div>
175
186
  )}
@@ -365,6 +365,16 @@ article>header {
365
365
 
366
366
  .r-item-contact {
367
367
  width: 100%;
368
+ .topics {
369
+ margin-top: 10px;
370
+ span {
371
+ padding: 5px;
372
+ background: #f1f1f1;
373
+ border-radius: 5px;
374
+ margin-right: 5px;
375
+
376
+ }
377
+ }
368
378
  }
369
379
  }
370
380
  }
@@ -113,11 +113,11 @@ const ContactCard = ({ item }) => {
113
113
  : ""}
114
114
  </div>
115
115
  <div className="topics">
116
- {topics
117
- ? topics.map((mail, i) => {
118
- return <span key={i}>{mail.title}</span>;
119
- })
120
- : ""}
116
+ {topics
117
+ ? topics.slice(0, 3).map((mail, i) => {
118
+ return <span key={i}>{mail.title}</span>;
119
+ })
120
+ : ""}
121
121
  </div>
122
122
  </div>
123
123
  </div>
@@ -176,7 +176,7 @@ const ContactContent = ({ queryUrl, onChange }) => {
176
176
  width="16"
177
177
  height="16"
178
178
  fill="currentColor"
179
- class="bi bi-clock-fill"
179
+ className="bi bi-clock-fill"
180
180
  viewBox="0 0 16 16"
181
181
  >
182
182
  <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71z" />
@@ -199,7 +199,7 @@ const ContactContent = ({ queryUrl, onChange }) => {
199
199
  width="10"
200
200
  height="10"
201
201
  fill="currentColor"
202
- class="bi bi-caret-down-fill"
202
+ className="bi bi-caret-down-fill"
203
203
  viewBox="0 0 16 16"
204
204
  >
205
205
  <path d="M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z" />
@@ -34,7 +34,7 @@ const ContactCard = ({ item, showCategoriesOrTopics }) => {
34
34
  )}
35
35
  <span className="r-item-title">{title}</span>
36
36
  {showCategoriesOrTopics === "topic" ? (
37
- item.topics[0] && (
37
+ item.topics && item.topics[0] && (
38
38
  <span className="r-item-categorie">{item.topics[0].title}</span>
39
39
  )
40
40
  ) : showCategoriesOrTopics === "category" ? (
@@ -9,11 +9,13 @@ import "../../../../node_modules/flexbin/flexbin.css";
9
9
  import { Translate } from "react-translated";
10
10
  import queryString from "query-string";
11
11
 
12
- const ContactContent = ({ queryUrl, onChange }) => {
12
+ const ContactContent = ({ queryUrl, onChange, onlyPastEvents }) => {
13
13
  let navigate = useNavigate();
14
14
  const { u, ...parsed } = Object.assign({
15
15
  UID: queryString.parse(useFilterQuery().toString())["u"],
16
16
  fullobjects: 1,
17
+ "event_dates.query": moment().format("YYYY-MM-DD"),
18
+ "event_dates.range": onlyPastEvents === "True" ? "max" : "min",
17
19
  });
18
20
  const [params, setParams] = useState(parsed);
19
21
  const [item, setitem] = useState({});
@@ -44,7 +46,11 @@ const ContactContent = ({ queryUrl, onChange }) => {
44
46
  // set recurrence
45
47
  if (response.items.length > 1) {
46
48
  response.items.map((item, i) => {
47
- setRecurence((prevRecurrence) => [...prevRecurrence, item.start]);
49
+ const currentDate = new Date();
50
+ const itemDate = new Date(item.start);
51
+ if (itemDate >= currentDate) {
52
+ setRecurence((prevRecurrence) => [...prevRecurrence, item.start]);
53
+ }
48
54
  });
49
55
  } else {
50
56
  setRecurence(null);
@@ -117,8 +123,19 @@ const ContactContent = ({ queryUrl, onChange }) => {
117
123
  <Translate text="Retour" />
118
124
  </button>
119
125
  <article>
120
- <header>
126
+ <header className="r-content-header">
121
127
  <h2 className="r-content-title">{item.title}</h2>
128
+ {item.local_category ? (
129
+ <span className="r-content-title-cat">{item.local_category.title}</span>
130
+ ) : (
131
+ ""
132
+ )}
133
+ {item.category ? (
134
+ <span className="r-content-title-cat">{item.category.title}</span>
135
+ ) : (
136
+ ""
137
+ )}
138
+ <span></span>
122
139
  </header>
123
140
  <figure>
124
141
  <div
@@ -236,9 +253,33 @@ const ContactContent = ({ queryUrl, onChange }) => {
236
253
  aria-expanded="false"
237
254
  >
238
255
  <p>
239
- {moment(futureDates[0]).format("DD-MM-YYYY")}
256
+ {item.whole_day ? (
257
+ moment(futureDates[0]).format("DD-MM-YYYY")
258
+ ) : (
259
+ <>
260
+ {moment(futureDates[0]).format("DD-MM-YYYY")}
261
+ <div className="r-content-recur-start-hours">
262
+ <span>
263
+ <Translate text="de" />
264
+ &nbsp;
265
+ </span>
266
+ <div className="r-time-hours">
267
+ {startHours}
268
+ </div>
269
+ <span>
270
+ &nbsp;
271
+ <Translate text="à" />
272
+ &nbsp;
273
+ </span>
274
+ <div className="r-time-hours">
275
+ {endHours}
276
+ </div>
277
+ </div>
278
+ </>
279
+ )}
240
280
  <span className="recurence-schedul-more">
241
- Prochaines dates (+)
281
+ Prochaines dates
282
+ <i class="bi bi-arrow-down-short"></i>
242
283
  </span>
243
284
  </p>
244
285
  <div
@@ -248,11 +289,12 @@ const ContactContent = ({ queryUrl, onChange }) => {
248
289
  : "recurence-modal-hide"
249
290
  }
250
291
  >
251
- <span>Prochaines dates</span>
252
292
  <ul>
253
293
  {futureDates.map((date, i) => {
254
294
  return (
255
- <li>{moment(date).format("DD-MM-YYYY")}</li>
295
+ <li key={i}>
296
+ {moment(date).format("DD-MM-YYYY")}
297
+ </li>
256
298
  );
257
299
  })}
258
300
  </ul>
@@ -295,28 +337,39 @@ const ContactContent = ({ queryUrl, onChange }) => {
295
337
  ) : (
296
338
  ""
297
339
  )}
340
+ {item.free_entry === true ? (
341
+ <div className="r-content-news-info--entry">
342
+ <span>
343
+ <Translate text="Gratuit" />
344
+ </span>
345
+ </div>
346
+ ) : (
347
+ ""
348
+ )}
298
349
  </div>
299
350
  </div>
300
351
  {/* contact */}
301
- <div className="r-content-news-info-contact">
302
- <div className="dpinlb">
303
- <div className="r-content-news-info--name">
304
- <span>{item.contact_name}</span>
305
- </div>
306
- <div className="r-content-news-info--phone">
307
- <span>
308
- <a href={`tel:${item.contact_phone}`}>
309
- {item.contact_phone}
352
+ {(item.contact_name || item.contact_phone || item.contact_email) && (
353
+ <div className="r-content-news-info-contact">
354
+ <div className="dpinlb">
355
+ <div className="r-content-news-info--name">
356
+ <span>{item.contact_name}</span>
357
+ </div>
358
+ <div className="r-content-news-info--phone">
359
+ <span>
360
+ <a href={`tel:${item.contact_phone}`}>
361
+ {item.contact_phone}
362
+ </a>
363
+ </span>
364
+ </div>
365
+ <div className="r-content-news-info--email">
366
+ <a href={`mailto:${item.contact_email}`}>
367
+ {item.contact_email}
310
368
  </a>
311
- </span>
312
- </div>
313
- <div className="r-content-news-info--email">
314
- <a href={`mailto:${item.contact_email}`}>
315
- {item.contact_email}
316
- </a>
369
+ </div>
317
370
  </div>
318
371
  </div>
319
- </div>
372
+ )}
320
373
  {/* link */}
321
374
  {item.event_url === null &&
322
375
  item.online_participation === null &&
@@ -514,6 +567,16 @@ const ContactContent = ({ queryUrl, onChange }) => {
514
567
  </div>
515
568
  </div>
516
569
  )}
570
+ {/* add category & Topics */}
571
+ {item.topics && item.topics.length > 0 && (
572
+ <div className="r-content-topics">
573
+ {item.topics.map((topic, i) => (
574
+ <a key={i}>
575
+ <span>{topic.title}</span>
576
+ </a>
577
+ ))}
578
+ </div>
579
+ )}
517
580
  </article>
518
581
  </div>
519
582
  );
@@ -119,7 +119,7 @@ function EventsView(props) {
119
119
  height: filterRef.current.clientHeight,
120
120
  });
121
121
  setHeaderHeight(filterRef.current.offsetTop);
122
- }, [filterRef.current]);
122
+ }, [response]);
123
123
 
124
124
  // coditional list render
125
125
  let listRender;
@@ -185,6 +185,17 @@ function EventsView(props) {
185
185
  <div className="r-add-event">
186
186
  <a target="_blank" href={props.proposeUrl}>
187
187
  <Translate text="Proposer un événement" />
188
+ <svg
189
+ xmlns="http://www.w3.org/2000/svg"
190
+ width="16"
191
+ height="16"
192
+ fill="currentColor"
193
+ className="bi bi-plus-circle"
194
+ viewBox="0 0 16 16"
195
+ >
196
+ <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16" />
197
+ <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4" />
198
+ </svg>
188
199
  </a>
189
200
  </div>
190
201
  )}
@@ -252,7 +263,7 @@ function EventsView(props) {
252
263
  element={
253
264
  <div className="r-wrapper container r-annuaire-wrapper">
254
265
  <div className="r-result r-annuaire-result">
255
- <EventContent queryUrl={props.queryUrl} onChange={clickID} />
266
+ <EventContent queryUrl={props.queryUrl} onChange={clickID} onlyPastEvents={props.onlyPastEvents} />
256
267
  </div>
257
268
  {displayMap && (
258
269
  <div
@@ -358,8 +358,16 @@ article>header {
358
358
  padding-bottom: 60%;
359
359
  }
360
360
 
361
+ .r-content-header {
362
+ margin-bottom: 1rem;
363
+ }
364
+
361
365
  .r-content-title {
362
- margin: 1rem 0;
366
+ margin: 0;
367
+ }
368
+
369
+ .r-content-recur-start-hours {
370
+ display: flex;
363
371
  }
364
372
 
365
373
  .news-info-title {
@@ -471,6 +479,24 @@ article>header {
471
479
  }
472
480
  }
473
481
 
482
+ .r-content-topics {
483
+ display: flex;
484
+ gap: 15px;
485
+
486
+ span {
487
+ padding: 5px;
488
+ background: #f1f1f1;
489
+ border-radius: 5px;
490
+ margin-right: 5px;
491
+ }
492
+ }
493
+
494
+ .r-content-title-cat {
495
+ color: #8e8e8e;
496
+ margin-right: 5px;
497
+ font-size: 14px;
498
+ }
499
+
474
500
  // // No Map
475
501
  // // Main
476
502
  .no-map {
@@ -62,7 +62,7 @@ function Filters(props) {
62
62
  // const to group category and local category
63
63
  const groupedOptions = [
64
64
  {
65
- label: <Translate text="Catégories locale" />,
65
+ label: <Translate text="Catégories spécifiques" />,
66
66
  options: localsCategoryFilter,
67
67
  },
68
68
  {
@@ -1,4 +1,4 @@
1
- import React, { useState, useContext } from "react";
1
+ import React, { useState } from "react";
2
2
  import DatePicker from "react-datepicker";
3
3
  import "react-datepicker/dist/react-datepicker.css";
4
4
  import moment from "moment";
@@ -15,7 +15,6 @@ const languageList = {
15
15
  en: enGB,
16
16
  };
17
17
  function DateFilter({ language, setDates }) {
18
- // const currentLanguage = useContext(LanguageContext);
19
18
  const [dateRange, setDateRange] = useState([null, null]);
20
19
  const [startDate, endDate] = dateRange;
21
20
  const [filter, setFilter] = useState(<Translate text="Quand" />);
@@ -2,14 +2,23 @@
2
2
  @media screen and (min-width:1200px) {
3
3
  position: sticky;
4
4
  }
5
-
6
5
  z-index: 1;
7
6
  background: #fff;
8
-
7
+ &:after {
8
+ content: "";
9
+ background: #fff;
10
+ position: absolute;
11
+ left: 0;
12
+ right: 0;
13
+ height: 312px;
14
+ top: 0;
15
+ transform: translateY(-100%);
16
+ }
9
17
  .r-result-filter {
10
18
  padding-top: 1rem;
11
19
  padding-bottom: 1rem;
12
20
  border-bottom: solid 1px #cccc;
21
+ position: relative;
13
22
  }
14
23
  }
15
24
 
@@ -23,8 +32,9 @@
23
32
  }
24
33
  }
25
34
 
26
-
27
-
35
+ .r-result-filter {
36
+ position: relative;
37
+ }
28
38
  // react filter menu
29
39
 
30
40
  .react-filters-menu {
@@ -5,7 +5,7 @@ import useAxios from "../../../hooks/useAxios";
5
5
  import { Translator, Translate} from "react-translated";
6
6
  import queryString from "query-string";
7
7
  import { iam } from "./../../Filters/IamData";
8
- import { menuStyles, moreFilterStyles } from "./../../Filters/SelectStyles";
8
+ import { menuStyles } from "./../../Filters/SelectStyles";
9
9
 
10
10
  function Filters(props) {
11
11
  let navigate = useNavigate();
@@ -52,7 +52,7 @@ function Filters(props) {
52
52
  // const to group category and local category
53
53
  const groupedOptions = [
54
54
  {
55
- label: <Translate text="Catégories locale" />,
55
+ label: <Translate text="Catégories spécifiques" />,
56
56
  options: localsCategoryFilter,
57
57
  },
58
58
  {
@@ -85,6 +85,18 @@ function Filters(props) {
85
85
  }
86
86
  });
87
87
 
88
+ const onChangeGroupSelect = useCallback((value, action) => {
89
+ if (value) {
90
+ setInputValues((state) => ({ ...state, [value.queryString]: value.value }), []);
91
+ } else {
92
+ setInputValues((prevState) => {
93
+ const state = { ...prevState };
94
+ const { [action.removedValues[0].queryString]: remove, ...rest } = state;
95
+ return rest;
96
+ });
97
+ }
98
+ });
99
+
88
100
  // make to no launch useEffect first time
89
101
  const firstUpdate = useRef(true);
90
102
  useEffect(() => {
@@ -180,7 +192,7 @@ function Filters(props) {
180
192
  name={"category"}
181
193
  className="select-custom-no-border library-facilities"
182
194
  isClearable
183
- onChange={onChangeHandlerSelect}
195
+ onChange={onChangeGroupSelect}
184
196
  options={localsCategoryFilter.length === 0 ? taxonomyFilter && taxonomyFilter : groupedOptions}
185
197
  placeholder={translate({
186
198
  text: "Catégories",
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState, createContext, useContex } from "react";
1
+ import React, { useEffect, useState, createContext } from "react";
2
2
  import { BrowserRouter, Routes, Route } from "react-router-dom";
3
3
  import Filters from "./Filters/Filter";
4
4
  import NewsContent from "./NewsContent/NewsContent";
@@ -124,7 +124,6 @@ const NewsView = (props) => {
124
124
  </div>
125
125
  </div>
126
126
  );
127
-
128
127
  return (
129
128
  <div>
130
129
  <div className="r-wrapper r-actu-wrapper">
@@ -145,6 +144,17 @@ const NewsView = (props) => {
145
144
  <div className="r-add-news">
146
145
  <a target="_blank" href={props.proposeUrl}>
147
146
  <Translate text="Proposer une actualité" />
147
+ <svg
148
+ xmlns="http://www.w3.org/2000/svg"
149
+ width="16"
150
+ height="16"
151
+ fill="currentColor"
152
+ className="bi bi-plus-circle"
153
+ viewBox="0 0 16 16"
154
+ >
155
+ <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16" />
156
+ <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4" />
157
+ </svg>
148
158
  </a>
149
159
  </div>
150
160
  )}
@@ -262,9 +262,9 @@ const ContactContent = ({ queryUrl, onChange }) => {
262
262
  {/* add gallery */}
263
263
  {gallery && (
264
264
  <div className="r-content-gallery">
265
- <div class="spotlight-group flexbin r-content-gallery">
265
+ <div className="spotlight-group flexbin r-content-gallery">
266
266
  {gallery.map((image, i) => (
267
- <a key={i} class="spotlight" href={image.image_full_scale}>
267
+ <a key={i} className="spotlight" href={image.image_full_scale}>
268
268
  <img src={image.image_preview_scale} alt="" />
269
269
  </a>
270
270
  ))}
@@ -31,11 +31,22 @@
31
31
  .r-add-event,
32
32
  .r-add-news,
33
33
  .r-add-contact {
34
+ @media screen and (min-width: 992px) {
35
+ position: absolute;
36
+ right: 0;
37
+ bottom: 0px;
38
+ padding-bottom: 1rem;
39
+ }
34
40
  a {
35
- background: #000;
36
- color: #fff;
41
+ color: #2d2d2d;
37
42
  text-decoration: none;
38
- padding: 1rem;
43
+ display: flex;
44
+ flex-direction: row;
45
+ align-items: center;
46
+ gap: 7px;
47
+ &:hover,&:focus {
48
+ text-decoration: underline;
49
+ }
39
50
  }
40
51
  }
41
52
 
@@ -91,9 +91,9 @@ function Map(props) {
91
91
  }, [filterGeoArray]);
92
92
  const position = [50.85034, 4.35171];
93
93
 
94
- const markers = filterGeoArray.map((mark) => (
94
+ const markers = filterGeoArray.map((mark,i) => (
95
95
  <Marker
96
- key={mark.UID}
96
+ key={i}
97
97
  icon={getMarkerIcon(mark.UID)}
98
98
  zIndexOffset={getMarkerZindex(mark.UID)}
99
99
  position={[
@@ -72,6 +72,12 @@ export default {
72
72
  de: "Lokale Kategorien",
73
73
  nl: "Lokale categorieën",
74
74
  },
75
+ "Catégories spécifiques": {
76
+ en: 'Specific categories',
77
+ fr: "Catégories spécifiques",
78
+ de: "Spezifische Kategorien",
79
+ nl: "Specifieke categorieën",
80
+ },
75
81
  "Quoi": {
76
82
  en: 'What',
77
83
  fr: "Quoi",
@@ -168,6 +174,12 @@ export default {
168
174
  de: ' Veranstaltung gefunden',
169
175
  nl: ' Evenement gevonden',
170
176
  },
177
+ 'Gratuit': {
178
+ en: 'Free',
179
+ fr: 'Gratuit',
180
+ de: 'Kostenlos',
181
+ nl: 'Gratis',
182
+ },
171
183
  "Aucun événement n'a été trouvé": {
172
184
  en: 'No event was found',
173
185
  fr: "Aucun événement n'a été trouvé",
@@ -0,0 +1,2 @@
1
+ import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('imio',));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('imio', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('imio', [os.path.dirname(p)])));m = m or sys.modules.setdefault('imio', types.ModuleType('imio'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
2
+ import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('imio', 'smartweb'));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('imio.smartweb', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('imio.smartweb', [os.path.dirname(p)])));m = m or sys.modules.setdefault('imio.smartweb', types.ModuleType('imio.smartweb'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p);m and setattr(sys.modules['imio'], 'smartweb', m)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imio.smartweb.core
3
- Version: 1.2.48
3
+ Version: 1.2.50
4
4
  Summary: Core product for iMio websites
5
5
  Home-page: https://github.com/imio/imio.smartweb.core
6
6
  Author: Christophe Boulanger
@@ -26,7 +26,7 @@ License-File: LICENSE.rst
26
26
  Requires-Dist: setuptools
27
27
  Requires-Dist: z3c.jbot
28
28
  Requires-Dist: z3c.unconfigure
29
- Requires-Dist: plone.api (>=1.8.4)
29
+ Requires-Dist: plone.api >=1.8.4
30
30
  Requires-Dist: plone.gallery
31
31
  Requires-Dist: plone.restapi
32
32
  Requires-Dist: plone.app.dexterity
@@ -48,7 +48,7 @@ Requires-Dist: imio.smartweb.common
48
48
  Requires-Dist: imio.smartweb.locales
49
49
  Provides-Extra: test
50
50
  Requires-Dist: plone.app.testing ; extra == 'test'
51
- Requires-Dist: plone.testing (>=5.0.0) ; extra == 'test'
51
+ Requires-Dist: plone.testing >=5.0.0 ; extra == 'test'
52
52
  Requires-Dist: plone.app.contenttypes ; extra == 'test'
53
53
  Requires-Dist: plone.app.robotframework[debug] ; extra == 'test'
54
54
  Requires-Dist: plone.restapi[test] ; extra == 'test'
@@ -189,6 +189,23 @@ Changelog
189
189
  =========
190
190
 
191
191
 
192
+ 1.2.50 (2024-05-30)
193
+ -------------------
194
+
195
+ - Fix loaded calcul of sticky filter menu in React view
196
+ [thomlamb]
197
+
198
+
199
+ 1.2.49 (2024-05-29)
200
+ -------------------
201
+
202
+ - WEB-4101 : Encode URLs parameters for `search-filters`. This fixes issues with special chars.
203
+ [laulaz]
204
+
205
+ - WEB-3802: Fix after testing, complited traduction, optimize code
206
+ [thomlamb]
207
+
208
+
192
209
  1.2.48 (2024-05-27)
193
210
  -------------------
194
211