@tmf_ciclica/ciclicastorybook 1.0.12 → 1.0.15

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 (134) hide show
  1. package/package.json +32 -54
  2. package/.storybook/main.js +0 -21
  3. package/.storybook/preview.jsx +0 -31
  4. package/eslint.config.js +0 -38
  5. package/index.html +0 -13
  6. package/public/vite.svg +0 -1
  7. package/src/App.css +0 -0
  8. package/src/App.jsx +0 -36
  9. package/src/_variables.scss +0 -56
  10. package/src/assets/img/arrowDown.svg +0 -3
  11. package/src/assets/img/closeIcon.svg +0 -4
  12. package/src/assets/img/copyIcon.svg +0 -17
  13. package/src/assets/img/deleteIcon.svg +0 -6
  14. package/src/assets/img/eyeActiveIcon.svg +0 -6
  15. package/src/assets/img/eyeNotActiveIcon.svg +0 -8
  16. package/src/assets/img/filtersIcon.svg +0 -6
  17. package/src/assets/img/langarrow.png +0 -0
  18. package/src/assets/img/pause.svg +0 -5
  19. package/src/assets/img/play.svg +0 -4
  20. package/src/assets/img/processingIcon.svg +0 -20
  21. package/src/assets/img/sample-image.png +0 -0
  22. package/src/assets/img/sample2.png +0 -0
  23. package/src/assets/img/world.svg +0 -3
  24. package/src/assets/mapStyles/mapStyle.js +0 -781
  25. package/src/components/AmbitSelector/AmbitItem/AmbitItem.jsx +0 -74
  26. package/src/components/AmbitSelector/AmbitItem/AmbitItem.module.scss +0 -27
  27. package/src/components/AmbitSelector/AmbitSelector.jsx +0 -68
  28. package/src/components/AmbitSelector/AmbitSelector.module.scss +0 -29
  29. package/src/components/AmbitSelector/AmbitSelector.stories.jsx +0 -21
  30. package/src/components/ButtonsList/ButtonsList.jsx +0 -92
  31. package/src/components/ButtonsList/ButtonsList.module.scss +0 -37
  32. package/src/components/ButtonsList/ButtonsList.stories.jsx +0 -55
  33. package/src/components/DropdownList/DropdownList.jsx +0 -69
  34. package/src/components/DropdownList/DropdownList.module.scss +0 -20
  35. package/src/components/DropdownList/DropdownList.stories.jsx +0 -22
  36. package/src/components/DropdownList/DropdownListExample/DropDownListExample.jsx +0 -33
  37. package/src/components/DropdownList/DropdownListExample/DropdownListExample.stories.jsx +0 -11
  38. package/src/components/EditAmbit/EditAmbit.jsx +0 -7
  39. package/src/components/FiltersAmbit/AppliedFilters/AppliedFilters.jsx +0 -57
  40. package/src/components/FiltersAmbit/AppliedFilters/AppliedFilters.module.scss +0 -13
  41. package/src/components/FiltersAmbit/AppliedFilters/AppliedFilters.stories.jsx +0 -47
  42. package/src/components/FiltersAmbit/FiltersAmbit.jsx +0 -58
  43. package/src/components/FiltersAmbit/FiltersAmbit.module.scss +0 -28
  44. package/src/components/FiltersAmbit/FiltersAmbit.stories.jsx +0 -36
  45. package/src/components/FiltersAmbit/GeographicFilters/GeographicalFilters.jsx +0 -33
  46. package/src/components/FiltersAmbit/GeographicFilters/GeographicalFilters.module.scss +0 -13
  47. package/src/components/FiltersAmbit/GeographicFilters/GeographicalFilters.stories.jsx +0 -47
  48. package/src/components/FiltersAmbit/TematicalFilters/TematicalFilters.jsx +0 -83
  49. package/src/components/FiltersAmbit/TematicalFilters/TematicalFilters.module.scss +0 -8
  50. package/src/components/FiltersAmbit/TematicalFilters/TematicalFilters.stories.jsx +0 -17
  51. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersCategory/TematicalFiltersCategory.jsx +0 -60
  52. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/AbsoluteSlider/AbsoluteSlider.jsx +0 -61
  53. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/AbsoluteSlider/AbsoluteSlider.module.scss +0 -45
  54. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/CategoryCheckbox/CategoryChackbox.module.scss +0 -18
  55. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/CategoryCheckbox/CategoryCheckbox.jsx +0 -47
  56. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/TematicalFiltersInput.jsx +0 -267
  57. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/TematicalFiltersInput.module.scss +0 -31
  58. package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersSubcat/TematicalFiltersSubcat.jsx +0 -58
  59. package/src/components/FiltersAmbit/useAmbitStore.jsx +0 -10
  60. package/src/components/Graphic/BarChart/BarChart.jsx +0 -146
  61. package/src/components/Graphic/BarChart/BarChart.module.scss +0 -5
  62. package/src/components/Graphic/BarChart/BarChart.stories.jsx +0 -18
  63. package/src/components/Graphic/Graphic.jsx +0 -55
  64. package/src/components/Graphic/Graphic.module.scss +0 -12
  65. package/src/components/Graphic/Graphic.stories.jsx +0 -25
  66. package/src/components/IndicatorsList/Indicator/Indicator.jsx +0 -180
  67. package/src/components/IndicatorsList/Indicator/Indicator.module.scss +0 -46
  68. package/src/components/IndicatorsList/IndicatorSubCategory/IndicatorSubCategory.jsx +0 -76
  69. package/src/components/IndicatorsList/IndicatorSubCategory/IndicatorSubCategory.module.scss +0 -12
  70. package/src/components/IndicatorsList/IndicatorsCategory/IndicatorsCategory.jsx +0 -122
  71. package/src/components/IndicatorsList/IndicatorsCategory/IndicatorsCategory.module.scss +0 -20
  72. package/src/components/IndicatorsList/IndicatorsList.jsx +0 -173
  73. package/src/components/IndicatorsList/IndicatorsList.module.scss +0 -10
  74. package/src/components/IndicatorsList/IndicatorsList.stories.jsx +0 -263
  75. package/src/components/LangSelector/LangSelector.jsx +0 -70
  76. package/src/components/LangSelector/LangSelector.module.scss +0 -41
  77. package/src/components/LangSelector/LangSelector.stories.jsx +0 -27
  78. package/src/components/Legend/Legend.jsx +0 -132
  79. package/src/components/Legend/Legend.module.scss +0 -121
  80. package/src/components/Legend/Legend.stories.jsx +0 -53
  81. package/src/components/LogoApp/LogoApp.jsx +0 -33
  82. package/src/components/LogoApp/LogoApp.module.scss +0 -7
  83. package/src/components/LogoApp/LogoApp.stories.jsx +0 -27
  84. package/src/components/MapboxMap/MapboxMap.jsx +0 -160
  85. package/src/components/MapboxMap/MapboxMap.module.scss +0 -4
  86. package/src/components/MapboxMap/MapboxMap.stories.jsx +0 -57
  87. package/src/components/MaplibreMap/MaplibreMap.jsx +0 -166
  88. package/src/components/MaplibreMap/MaplibreMap.module.scss +0 -5
  89. package/src/components/MaplibreMap/MaplibreMap.stories.jsx +0 -55
  90. package/src/components/SectionBar/SectionBar.jsx +0 -41
  91. package/src/components/SectionBar/SectionBar.module.scss +0 -40
  92. package/src/components/SectionBar/SectionBar.stories.jsx +0 -35
  93. package/src/components/TimeSlider/TimeSlider.jsx +0 -147
  94. package/src/components/TimeSlider/TimeSlider.module.scss +0 -63
  95. package/src/components/TimeSlider/TimeSlider.stories.jsx +0 -9
  96. package/src/components/Tooltip/Tooltip.jsx +0 -40
  97. package/src/components/Tooltip/Tooltip.module.scss +0 -141
  98. package/src/components/Tooltip/Tooltip.stories.jsx +0 -51
  99. package/src/components/TopNavMenu/TopNavMenu.jsx +0 -62
  100. package/src/components/TopNavMenu/TopNavMenu.module.scss +0 -21
  101. package/src/components/TopNavMenu/TopNavMenu.stories.jsx +0 -20
  102. package/src/components/UserMenuTrigger/UserMenuTrigger.jsx +0 -47
  103. package/src/components/UserMenuTrigger/UserMenuTrigger.module.scss +0 -5
  104. package/src/components/UserMenuTrigger/UserMenuTrigger.stories.jsx +0 -33
  105. package/src/components/index.jsx +0 -17
  106. package/src/constants/indicators.js +0 -1371
  107. package/src/constants/mapTexts.js +0 -161
  108. package/src/constants/textLayers.js +0 -639
  109. package/src/constants/topNavMenuOptions.js +0 -14
  110. package/src/i18n.js +0 -19
  111. package/src/index.jsx +0 -2
  112. package/src/index.scss +0 -87
  113. package/src/locales/ca.json +0 -8
  114. package/src/locales/es.json +0 -15
  115. package/src/main.jsx +0 -10
  116. package/src/sections/HeaderSection/HeaderSection.jsx +0 -51
  117. package/src/sections/HeaderSection/HeaderSection.module.scss +0 -33
  118. package/src/sections/HeaderSection/HeaderSection.stories.jsx +0 -61
  119. package/src/sections/RightSidebar/RightSidebar.jsx +0 -35
  120. package/src/sections/RightSidebar/RightSidebar.module.scss +0 -39
  121. package/src/sections/RightSidebar/RightSidebar.stories.jsx +0 -21
  122. package/src/sections/index.jsx +0 -2
  123. package/src/store/index.js +0 -1
  124. package/src/store/mapSlice/index.js +0 -1
  125. package/src/store/mapSlice/mapSlice.js +0 -30
  126. package/src/store/rightBarSlice/index.js +0 -1
  127. package/src/store/rightBarSlice/rightBarSlice.js +0 -28
  128. package/src/store/routerSlice/index.js +0 -1
  129. package/src/store/routerSlice/routerSlice.js +0 -14
  130. package/src/store/store.js +0 -14
  131. package/src/store/userSlice/index.js +0 -1
  132. package/src/store/userSlice/userSlice.js +0 -22
  133. package/tmf_ciclica-ciclicastorybook-1.0.8.tgz +0 -0
  134. package/vite.config.js +0 -49
@@ -1,147 +0,0 @@
1
- /*
2
- TimeSlider es un selector de año que permite la animación del cambio de año mediante un botón play/pause.
3
- Se coloca en la parte superior derecha de la pantalla, su posición exacta depende de si el sidebar derecho está abierto o no.
4
- El cambio de año se guarda en el slice de map, en la propiedad sliderSelectedYear mediante la acción setYear.
5
- Recibe:
6
- onResults (heredado de hdr): nos dice si el slider se ve sobre el mapa o sobre la pantalla de resultados y se le aplican unos estilos u otros.
7
- defaultYear: año seleccionado por defecto al montar el componente
8
- firstYear: primer año del slider
9
- lastYear: último año del slider
10
- z-index: propiedad css z-index del slider
11
- rightBarOpen: está o no abierto el sidebar de la derecha
12
- */
13
-
14
- import PropTypes from 'prop-types';
15
- import { useEffect, useRef, useState } from 'react'
16
- import { useDispatch } from 'react-redux';
17
- //store
18
- import { setYear } from '../../store/mapSlice';
19
- //assets
20
- import Play from '../../assets/img/play.svg';
21
- import Pause from '../../assets/img/pause.svg';
22
- //elementos ui
23
- import Slider from '@mui/material/Slider';
24
- import { Box, createTheme } from '@mui/material';
25
- import { ThemeProvider } from '@emotion/react';
26
- // Style
27
- import style from './TimeSlider.module.scss'
28
- export const TimeSlider = ({ onResults = false, defaultYear = 2025, firstYear = 2025, lastYear = 2050, zIndex = 10, rightBarOpen = false }) => {
29
-
30
- const [localYear, setLocalYear] = useState(defaultYear)
31
- const dispatch = useDispatch()
32
- const handleChange = (event, newValue) => {
33
- setLocalYear(newValue)
34
- dispatch(setYear(newValue - 2000))
35
- };
36
- const [isRunning, setIsRunning] = useState(false);
37
-
38
- const handlePlay = () => {
39
- setIsRunning(true)
40
- }
41
- const handleStop = () => {
42
- setIsRunning(false)
43
- }
44
- const useInterval = (callback, delay) => {
45
- const savedCallback = useRef();
46
-
47
- // Remember the latest function.
48
- useEffect(() => {
49
- savedCallback.current = callback;
50
- }, [callback]);
51
-
52
- // Set up the interval.
53
- useEffect(() => {
54
- function tick() {
55
- savedCallback.current();
56
- }
57
- if (delay !== null) {
58
- let id = setInterval(tick, delay);
59
- return () => clearInterval(id);
60
- }
61
- }, [delay]);
62
- }
63
- useInterval(() => {
64
- // Your custom logic here
65
- if (isRunning) {
66
- if (localYear != 2050) {
67
- setLocalYear(localYear + 1);
68
- dispatch(setYear((localYear - 2000) + 1))
69
- } else {
70
- setLocalYear(2025);
71
- dispatch(setYear(25))
72
- }
73
- }
74
-
75
- }, 1000);
76
-
77
- const theme = createTheme({
78
- palette: {
79
- primary: {
80
- main: '#605b56'
81
- }
82
- },
83
- components: {
84
- MuiSlider: {
85
- styleOverrides: {
86
- mark: {
87
- height: 10,
88
- backgroundColor: '#605b56'
89
- },
90
- valueLabel: {
91
- backgroundColor: 'transparent',
92
- color: '#605b56',
93
- padding: 0,
94
- top: 3
95
- }
96
- }
97
- }
98
- }
99
- });
100
- const marcas = [
101
- { label: '', value: 2025 },
102
- { label: '', value: 2032 },
103
- { label: '', value: 2041 },
104
- { label: '', value: 2050 }
105
- ]
106
- return (
107
- <ThemeProvider theme={theme}>
108
- <Box
109
- sx={{ width: 400 }}
110
- className={`${onResults ? style.sliderResults : style.slider} ${rightBarOpen ? style.sliderOpen : ''}`}
111
- style={{zIndex: zIndex}}
112
- >
113
- {firstYear}
114
- <Slider
115
- aria-label="TimeSlider"
116
- value={localYear}
117
- valueLabelDisplay="on"
118
- step={1}
119
- marks={marcas}
120
- min={firstYear}
121
- max={lastYear}
122
- onChange={handleChange}
123
- color="primary"
124
- size="small"
125
- />
126
- {lastYear}
127
- {!isRunning &&
128
- <button className={style.playButton} onClick={handlePlay}>
129
- <img src={Play} alt="Play" />
130
- </button>}
131
- {isRunning &&
132
- <button className={style.playButton} onClick={handleStop}>
133
- <img src={Pause} alt="Pause" />
134
- </button>}
135
- </Box>
136
- </ThemeProvider>
137
- )
138
- }
139
-
140
- TimeSlider.propTypes = {
141
- defaultYear: PropTypes.number,
142
- onResults: PropTypes.bool,
143
- firstYear: PropTypes.number,
144
- lastYear: PropTypes.number,
145
- zIndex: PropTypes.number,
146
- rightBarOpen: PropTypes.bool
147
- }
@@ -1,63 +0,0 @@
1
- .slider {
2
- position: absolute;
3
- padding: 5px 20px;
4
- right: 150px;
5
- border: 1px solid;
6
- border-radius: 10px;
7
- display: flex;
8
- gap: 20px;
9
- color: #605b56;
10
- justify-content: center;
11
- align-items: center;
12
- background-color: white;
13
- top: 188px;
14
- transition: all 0.5s ease-out;
15
-
16
- .playButton {
17
- background-color: transparent !important;
18
-
19
- &.hover {
20
- background-color: transparent !important;
21
- }
22
-
23
- img {
24
- height: 30px;
25
- width: 30px;
26
-
27
- }
28
- }
29
- }
30
-
31
- .sliderOpen {
32
- right: 490px;
33
- }
34
-
35
- .sliderResults {
36
- position: absolute;
37
- top: 75px;
38
- right: 430px;
39
- padding: 5px 20px;
40
- border: 1px solid;
41
- border-radius: 10px;
42
- display: flex;
43
- gap: 20px;
44
- color: #605b56;
45
- justify-content: center;
46
- align-items: center;
47
- background-color: white;
48
- transition: all 0.5s ease-out;
49
-
50
- .playButton {
51
- background-color: transparent !important;
52
-
53
- &.hover {
54
- background-color: transparent !important;
55
- }
56
-
57
- img {
58
- height: 30px;
59
- width: 30px;
60
-
61
- }
62
- }
63
- }
@@ -1,9 +0,0 @@
1
- import { TimeSlider } from './TimeSlider'
2
-
3
- export default {
4
- title: "Components/TimeSlider",
5
- component: TimeSlider,
6
- };
7
- const Template = () => <TimeSlider />;
8
-
9
- export const Default = Template.bind({});
@@ -1,40 +0,0 @@
1
- /*
2
- Componente genérico para añadir tooltips.
3
- Recibe:
4
- -text: textp del tooltip (código i18n),
5
- -position: top, bottom, left, right
6
- -styleCustom: estilo propio si necesario
7
- IMPORTANTE
8
- para su uso, el elemento que necesita tooltip y el componente Tooltip tienen que estar dentro de un componente padre con la clase css: "tooltip-parent" y el siguien código css tiene que incluirse en el archivo de estilos de la aplicación:
9
- .tooltip-parent {
10
- position: relative;
11
- width: fit-content;
12
-
13
- .tooltip {
14
- display: none;
15
- }
16
-
17
- &:hover {
18
- .tooltip {
19
- display:flex;
20
- align-items: center;
21
-
22
- }
23
- }
24
- }
25
- */
26
-
27
- import { useTranslation } from "react-i18next"
28
- import PropTypes from "prop-types";
29
- import styles from "./Tooltip.module.scss"
30
-
31
- export const Tooltip = ({ text, position, styleCustom = null }) => {
32
- const { t } = useTranslation()
33
-
34
- return <div className={`tooltip ${styles[position]}`} style={styleCustom}>{t(text)}</div>
35
- }
36
- Tooltip.propTypes = {
37
- text: PropTypes.string.isRequired,
38
- position: PropTypes.oneOf(["top", "bottom", "left", "right"]).isRequired,
39
- styleCustom: PropTypes.object,
40
- };
@@ -1,141 +0,0 @@
1
- @use "../../variables.scss" as *;
2
- .left {
3
- position: absolute;
4
- //display: inline-block;
5
- width: auto;
6
- bottom: 50%;
7
- right: calc(100% + 10px);
8
- transform: translateY(50%);
9
- font-size: 16px;
10
- background-color: #fff;
11
- border-radius: 4px;
12
- padding: 10px;
13
- margin: 0;
14
- white-space: nowrap;
15
- color: #000;
16
-
17
- &::after {
18
- content: "";
19
- z-index: -1;
20
- left: 100%;
21
- top: 50%;
22
- transform: translateY(-50%);
23
- border-width: 0.5em;
24
- border-style: solid;
25
- border-color: #fff;
26
- position: absolute;
27
- border-top-color: transparent;
28
- border-bottom-color: transparent;
29
- // border-left-color:transparent;
30
- border-right-color: transparent;
31
- transform-origin: center right;
32
- }
33
- }
34
-
35
- .top {
36
- position: absolute;
37
- //display: inline-block;
38
- width: auto;
39
- bottom: calc(100% + 10px);
40
- right: 50%;
41
- transform: translateX(50%);
42
- font-size: 16px;
43
- background-color: #fff;
44
- border-radius: 4px;
45
- padding: 10px;
46
- margin: 0;
47
- white-space: nowrap;
48
- color: #000;
49
- z-index: 10;
50
- color: #000;
51
-
52
- &::after {
53
- content: "";
54
- z-index: -1;
55
- right: 50%;
56
- top: 100%;
57
- transform: translateX(50%);
58
- border-width: 0.5em;
59
- border-style: solid;
60
- border-color: #fff;
61
- position: absolute;
62
- border-bottom-color: transparent;
63
- border-left-color: transparent;
64
- border-right-color: transparent;
65
- color: #000;
66
-
67
- transform-origin: center right;
68
- }
69
- }
70
-
71
- .bottom {
72
- position: absolute;
73
- //display: inline-block;
74
- width: auto;
75
- top: calc(100% + 10px);
76
- right: 50%;
77
- height: fit-content;
78
- transform: translateX(50%);
79
- font-size: 16px;
80
- background-color: #fff;
81
- border-radius: 4px;
82
- padding: 10px;
83
- margin: 0;
84
- color: #000;
85
- z-index: 10;
86
- color: #000;
87
-
88
- &::after {
89
- content: "";
90
- z-index: -1;
91
- right: 50%;
92
- bottom: 100%; /* Cambia `top: 100%` por `bottom: 100%` */
93
- transform: translateX(50%);
94
- border-width: 0.5em;
95
- border-style: solid;
96
- border-color: transparent; /* Deja todos los bordes transparentes por defecto */
97
- border-bottom-color: #fff; /* Colorea solo el borde inferior */
98
- position: absolute;
99
-
100
- /* Opcional: mantiene el centro de transformación para futuras transformaciones */
101
- transform-origin: center right;
102
- }
103
- }
104
-
105
- .right {
106
- position: absolute;
107
- //display: inline-block;
108
- width: auto;
109
- //max-width: 200px;
110
- bottom: 50%;
111
- left: calc(100% + 10px);
112
- transform: translateY(50%);
113
- font-size: 16px;
114
- background-color: #fff;
115
- border-radius: 4px;
116
- padding: 20px;
117
- margin: 0;
118
- white-space: nowrap;
119
- height: fit-content;
120
- color: #000;
121
- z-index: 10;
122
- &::after {
123
- content: "";
124
- z-index: -1;
125
- right: 100%;
126
- top: 50%;
127
- color: #000;
128
-
129
- transform: translateY(-50%);
130
- border-width: 0.5em;
131
- border-style: solid;
132
- border-color: #fff;
133
- position: absolute;
134
- border-top-color: transparent;
135
- border-bottom-color: transparent;
136
- border-left-color: transparent;
137
- transform-origin: center right;
138
- }
139
- }
140
-
141
-
@@ -1,51 +0,0 @@
1
- import { Tooltip } from "./Tooltip";
2
-
3
- export default {
4
- title: "Components/Tooltip",
5
- component: Tooltip,
6
- argTypes: {
7
- text: { control: "text" },
8
- position: {
9
- control: {
10
- type: "select",
11
- options: ["top", "bottom", "left", "right"],
12
- },
13
- },
14
- styleCustom: { control: "object" },
15
- },
16
- };
17
-
18
- const Template = (args) => (
19
-
20
- <div className="tooltip-parent" style={{background: "black", color: "white", marginTop: "150px", marginLeft:"100px"}}>
21
- <Tooltip {...args} />
22
- <button style={{ padding: "8px 16px" }}>Elemento con tooltip</button>
23
- </div>
24
-
25
- );
26
-
27
- export const Default = Template.bind({});
28
- Default.args = {
29
- text: "sampleText", // clave i18n
30
- position: "top",
31
- styleCustom: null,
32
- };
33
- export const Right = Template.bind({});
34
- Right.args = {
35
- text: "sampleText", // clave i18n
36
- position: "right",
37
- styleCustom: null,
38
- };
39
- export const Left = Template.bind({});
40
- Left.args = {
41
- text: "sampleText", // clave i18n
42
- position: "left",
43
- styleCustom: null,
44
- };
45
- export const Bottom = Template.bind({});
46
- Bottom.args = {
47
- text: "sampleText", // clave i18n
48
- position: "bottom",
49
- styleCustom: null,
50
- };
51
-
@@ -1,62 +0,0 @@
1
- /*
2
- Esta sección muestra un menu que te permite navegar por diferentes rutas de la aplicacion.
3
- Los args que recibe son propiedades css y listado de constantes.
4
- Propiedades css= borderColor y TextColor
5
- Listados de constantes = options
6
- Es un array de los siguientes objetos:
7
- {
8
- name: 'TopNavMenu.opt1', -> Nombre que aparecera en el menu haciendo referencia a locales
9
- url: "/" -> ruta a la que ira al hacerle click
10
- }
11
- */
12
-
13
- import { NavLink } from 'react-router-dom';
14
- import PropTypes from 'prop-types'
15
- // Styles
16
- import styles from './TopNavMenu.module.scss'
17
- import { useTranslation } from 'react-i18next';
18
-
19
- export const TopNavMenu = ({ options = [], cssProps = {} }) => {
20
- const { t } = useTranslation()
21
-
22
- const textColor = cssProps.textColor || 'inherit';
23
- const borderColor = cssProps.borderColor || 'transparent';
24
-
25
-
26
- return (
27
- <div className={styles.TopNavMenuContainer}>
28
-
29
- {
30
- options.map((option, id) => (
31
- <NavLink to={option.url}
32
- className={({ isActive }) => `${styles.topNavOptions} ${isActive ? styles.active : ''}`}
33
- key={id}
34
- style={{
35
- color: textColor,
36
- }}
37
- >
38
- {t(option.name)}
39
-
40
- </NavLink>
41
- ))
42
- }
43
-
44
- </div>
45
- )
46
-
47
- }
48
-
49
-
50
-
51
- TopNavMenu.propTypes = {
52
- options: PropTypes.arrayOf(
53
- PropTypes.object
54
- ),
55
- cssProps: PropTypes.shape({
56
- borderColor: PropTypes.string.isRequired,
57
- textColor: PropTypes.string.isRequired,
58
- // height: PropTypes.string.isRequired,
59
- }),
60
- // activeColor: PropTypes.string,
61
- // defaultColor: PropTypes.string
62
- }
@@ -1,21 +0,0 @@
1
- @use '../../variables.scss' as *;
2
-
3
- .TopNavMenuContainer {
4
- @include flex(row, start, start, $gap: 80px);
5
- width: fit-content;
6
-
7
-
8
-
9
-
10
- .topNavOptions {
11
- @include flex();
12
- cursor: pointer;
13
- height: calc($headerHeight - 10px);
14
- padding: 0px 10px;
15
-
16
- }
17
-
18
- .active {
19
- box-shadow: 0 5px 0 0 #F8A925;
20
- }
21
- }
@@ -1,20 +0,0 @@
1
- import Options from '../../constants/topNavMenuOptions'
2
- import { TopNavMenu } from './TopNavMenu'
3
-
4
- export default {
5
- title: "Components/TopNavMenu",
6
- component: TopNavMenu,
7
- };
8
- // const Template = () => <TopNavMenu />;
9
-
10
- // export const Default = Template.bind({});
11
-
12
- export const Default = {
13
- args: {
14
- options: Options,
15
- cssProps: {
16
- borderColor: '#777777',
17
- textColor: '#F8A925'
18
- }
19
- }
20
- }
@@ -1,47 +0,0 @@
1
- /*
2
- Este componente es el texto que usamos para mostrar el menú de login (si el usuario no está logeado) o el nombre del usuario (si está logeado).
3
- Recibe: cssClass y loginLocale
4
- log: bool, define si el usuario está o no logeado. Se puede coger del store desde este mismo componente o enviarlo como propiedad. Si se coge del store, la ruta predefinida es =>state.userState.user.isLoggedIn
5
- - cssClass => clase css si se le quiere añadir
6
- - loginLocale => ruta del archivo locale para el texto 'Login', por defecto 'login'
7
- */
8
- import PropTypes from 'prop-types';
9
- import { useDispatch, useSelector } from 'react-redux';
10
- import { useTranslation } from "react-i18next";
11
- //store
12
- import { setShowLogIn, setShowUserMenu } from '../../store/userSlice';
13
- //styles
14
- import styles from './UserMenuTrigger.module.scss'
15
-
16
- export const UserMenuTrigger = ({cssClass, loginLocale= 'login'}) => {
17
- const dispatch = useDispatch();
18
- //traemos isLoggedIn y username directamente del store
19
- const isLoggedIn = useSelector((state) => state.userState.user.isLoggedIn);
20
- const username = useSelector((state) => state.userState.user.username);
21
-
22
- const { t } = useTranslation();
23
-
24
- const handleClick = () => {
25
- if (!isLoggedIn) {
26
- dispatch(setShowUserMenu(true));
27
- } else {
28
- dispatch(setShowLogIn(true))
29
- }
30
- };
31
-
32
- return (
33
- <div className={`${styles.UserMenuTrigger} link ${cssClass}`} onClick={handleClick}>
34
- {isLoggedIn ? username : t(loginLocale)}
35
- </div>
36
- );
37
- };
38
-
39
- UserMenuTrigger.propTypes = {
40
- onClickLoggedIn: PropTypes.func.isRequired,
41
- onClickLoggedOut: PropTypes.func.isRequired,
42
- log: PropTypes.bool,
43
- name: PropTypes.string,
44
- cssClass: PropTypes.string,
45
- loginLocale: PropTypes.string
46
- };
47
-
@@ -1,5 +0,0 @@
1
-
2
- .UserMenuTrigger {
3
- height: 100%;
4
- @include flex($justify: space-between, $align: center);
5
- }
@@ -1,33 +0,0 @@
1
- import { Provider } from 'react-redux';
2
- import { configureStore } from '@reduxjs/toolkit';
3
- import { UserMenuTrigger } from './UserMenuTrigger';
4
-
5
- export default {
6
- title: 'Components/UserMenuTrigger',
7
- component: UserMenuTrigger,
8
- args: {
9
-
10
- }
11
- };
12
-
13
- const Template = (args) => <UserMenuTrigger {...args} />;
14
-
15
- export const LoggedOut = Template.bind({});
16
-
17
-
18
- export const LoggedIn = Template.bind({});
19
-
20
- LoggedIn.decorators = [
21
- (Story) => {
22
- const loggedInStore = configureStore({
23
- reducer: {
24
- userState: (state = {user:{ isLoggedIn: true, username: 'JohnDoe' }}) => state,
25
- },
26
- });
27
- return (
28
- <Provider store={loggedInStore}>
29
- <Story />
30
- </Provider>
31
- );
32
- },
33
- ];
@@ -1,17 +0,0 @@
1
- export { AmbitSelector } from './AmbitSelector/AmbitSelector.jsx'
2
- export { ButtonsList } from './ButtonsList/ButtonsList.jsx'
3
- export { DropdownList } from './DropdownList/DropdownList.jsx'
4
- export { EditAmbit } from './EditAmbit/EditAmbit.jsx'
5
- export { FiltersAmbit } from './FiltersAmbit/FiltersAmbit.jsx'
6
- export { Graphic } from './Graphic/Graphic.jsx'
7
- export { IndicatorsList } from './IndicatorsList/IndicatorsList.jsx'
8
- export { LangSelector } from './LangSelector/LangSelector.jsx'
9
- export { Legend } from './Legend/Legend.jsx'
10
- export { LogoApp } from './LogoApp/LogoApp.jsx'
11
- export { MapboxMap } from './MapboxMap/MapboxMap.jsx'
12
- export { MaplibreMap } from './MaplibreMap/MaplibreMap.jsx'
13
- export { SectionBar } from './SectionBar/SectionBar.jsx'
14
- export { TimeSlider } from './TimeSlider/TimeSlider.jsx'
15
- export { Tooltip } from './Tooltip/Tooltip.jsx'
16
- export { TopNavMenu } from './TopNavMenu/TopNavMenu.jsx'
17
- export { UserMenuTrigger } from './UserMenuTrigger/UserMenuTrigger.jsx'