josenanodev-react-components-library 0.0.12 → 0.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 (188) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/Services/MulticalendarStatesAndSettings.d.ts +17 -17
  3. package/dist/cjs/Services/MulticalendarStatesAndSettings.js +29 -29
  4. package/dist/cjs/Services/accessToken.d.ts +3 -3
  5. package/dist/cjs/Services/accessToken.js +15 -15
  6. package/dist/cjs/common/constants.d.ts +5 -5
  7. package/dist/cjs/common/constants.js +8 -8
  8. package/dist/cjs/common/turboSuiteUrls.d.ts +7 -7
  9. package/dist/cjs/common/turboSuiteUrls.js +9 -9
  10. package/dist/cjs/common/types.d.ts +113 -113
  11. package/dist/cjs/components/Modal/Modal.css +43 -43
  12. package/dist/cjs/components/Modal/Modal.d.ts +5 -5
  13. package/dist/cjs/components/Modal/Modal.js +82 -82
  14. package/dist/cjs/components/Modal/types.d.ts +9 -9
  15. package/dist/cjs/components/Multicalendar/Multicalendar.css +191 -191
  16. package/dist/cjs/components/Multicalendar/Multicalendar.d.ts +5 -5
  17. package/dist/cjs/components/Multicalendar/Multicalendar.js +302 -302
  18. package/dist/cjs/components/Multicalendar/MulticalendarOwnFunctions.d.ts +86 -86
  19. package/dist/cjs/components/Multicalendar/MulticalendarOwnFunctions.js +192 -192
  20. package/dist/cjs/components/Multicalendar/subcomponents/composites/CellsRow/CellsRow.css +5 -5
  21. package/dist/cjs/components/Multicalendar/subcomponents/composites/CellsRow/CellsRow.d.ts +5 -5
  22. package/dist/cjs/components/Multicalendar/subcomponents/composites/CellsRow/CellsRow.js +20 -20
  23. package/dist/cjs/components/Multicalendar/subcomponents/composites/CellsRow/types.d.ts +11 -11
  24. package/dist/cjs/components/Multicalendar/subcomponents/composites/DatesGrid/DatesGrid.css +7 -7
  25. package/dist/cjs/components/Multicalendar/subcomponents/composites/DatesGrid/DatesGrid.d.ts +5 -5
  26. package/dist/cjs/components/Multicalendar/subcomponents/composites/DatesGrid/DatesGrid.js +20 -20
  27. package/dist/cjs/components/Multicalendar/subcomponents/composites/DatesGrid/types.d.ts +13 -13
  28. package/dist/cjs/components/Multicalendar/subcomponents/composites/ListElementsColumn/ListElementsColumn.css +3 -3
  29. package/dist/cjs/components/Multicalendar/subcomponents/composites/ListElementsColumn/ListElementsColumn.d.ts +5 -5
  30. package/dist/cjs/components/Multicalendar/subcomponents/composites/ListElementsColumn/ListElementsColumn.js +15 -15
  31. package/dist/cjs/components/Multicalendar/subcomponents/composites/ListElementsColumn/types.d.ts +9 -9
  32. package/dist/cjs/components/Multicalendar/subcomponents/individuals/Cell/Cell.css +7 -7
  33. package/dist/cjs/components/Multicalendar/subcomponents/individuals/Cell/Cell.d.ts +5 -5
  34. package/dist/cjs/components/Multicalendar/subcomponents/individuals/Cell/Cell.js +12 -12
  35. package/dist/cjs/components/Multicalendar/subcomponents/individuals/Cell/types.d.ts +10 -10
  36. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DatesRow/DatesRow.css +60 -60
  37. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DatesRow/DatesRow.d.ts +5 -5
  38. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DatesRow/DatesRow.js +56 -56
  39. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DatesRow/types.d.ts +10 -10
  40. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation.css +13 -13
  41. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation.d.ts +5 -5
  42. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation.js +13 -13
  43. package/dist/cjs/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/types.d.ts +5 -5
  44. package/dist/cjs/components/Multicalendar/subcomponents/individuals/ListElement/ListElement.css +14 -14
  45. package/dist/cjs/components/Multicalendar/subcomponents/individuals/ListElement/ListElement.d.ts +5 -5
  46. package/dist/cjs/components/Multicalendar/subcomponents/individuals/ListElement/ListElement.js +14 -14
  47. package/dist/cjs/components/Multicalendar/subcomponents/individuals/ListElement/types.d.ts +7 -7
  48. package/dist/cjs/components/Multicalendar/types.d.ts +45 -45
  49. package/dist/cjs/components/PopUp/PopUp.css +15 -15
  50. package/dist/cjs/components/PopUp/PopUp.d.ts +5 -5
  51. package/dist/cjs/components/PopUp/PopUp.js +50 -50
  52. package/dist/cjs/components/PopUp/types.d.ts +8 -8
  53. package/dist/cjs/components/SearchBar/SearchBar.css +35 -35
  54. package/dist/cjs/components/SearchBar/SearchBar.d.ts +5 -5
  55. package/dist/cjs/components/SearchBar/SearchBar.js +67 -67
  56. package/dist/cjs/components/SearchBar/types.d.ts +10 -10
  57. package/dist/cjs/components/SideBar/SideBar.css +50 -50
  58. package/dist/cjs/components/SideBar/SideBar.d.ts +8 -8
  59. package/dist/cjs/components/SideBar/SideBar.js +70 -70
  60. package/dist/cjs/components/SideBar/types.d.ts +8 -8
  61. package/dist/cjs/hooks/useOutsideClick.d.ts +6 -6
  62. package/dist/cjs/hooks/useOutsideClick.js +25 -25
  63. package/dist/cjs/hooks/useResizeObserver.d.ts +7 -7
  64. package/dist/cjs/hooks/useResizeObserver.js +30 -30
  65. package/dist/cjs/hooks/useWindowsSize.d.ts +6 -6
  66. package/dist/cjs/hooks/useWindowsSize.js +20 -20
  67. package/dist/cjs/index.css +77 -77
  68. package/dist/cjs/index.d.ts +7 -7
  69. package/dist/cjs/index.js +18 -18
  70. package/dist/cjs/languages/en-EN.d.ts +3 -3
  71. package/dist/cjs/languages/en-EN.js +25 -25
  72. package/dist/cjs/languages/es-ES.d.ts +3 -3
  73. package/dist/cjs/languages/es-ES.js +25 -25
  74. package/dist/cjs/languages/it-IT.d.ts +3 -3
  75. package/dist/cjs/languages/it-IT.js +25 -25
  76. package/dist/cjs/languages/types.d.ts +21 -21
  77. package/dist/cjs/mocks/ReactComponentMocksForTesting/CellChildrenMock.d.ts +4 -4
  78. package/dist/cjs/mocks/ReactComponentMocksForTesting/CellChildrenMock.js +13 -13
  79. package/dist/cjs/mocks/ReactComponentMocksForTesting/ListElementChildrenMock.d.ts +4 -4
  80. package/dist/cjs/mocks/ReactComponentMocksForTesting/ListElementChildrenMock.js +10 -10
  81. package/dist/cjs/react-app-env.d.ts +1 -1
  82. package/dist/cjs/setupTests.d.ts +2 -2
  83. package/dist/cjs/setupTests.js +8 -8
  84. package/dist/cjs/stories/css-presets.css +77 -77
  85. package/dist/cjs/utils/datesArray.d.ts +8 -8
  86. package/dist/cjs/utils/datesArray.js +23 -23
  87. package/dist/cjs/utils/jsToSqlDate.d.ts +7 -7
  88. package/dist/cjs/utils/jsToSqlDate.js +22 -22
  89. package/dist/cjs/utils/monthYearString.d.ts +3 -3
  90. package/dist/cjs/utils/monthYearString.js +27 -27
  91. package/dist/cjs/utils/numberOfDaysInAMonth.d.ts +6 -6
  92. package/dist/cjs/utils/numberOfDaysInAMonth.js +12 -12
  93. package/dist/cjs/utils/sqlToJsDate.d.ts +7 -7
  94. package/dist/cjs/utils/sqlToJsDate.js +14 -14
  95. package/dist/esm/Services/MulticalendarStatesAndSettings.d.ts +17 -17
  96. package/dist/esm/Services/MulticalendarStatesAndSettings.js +23 -23
  97. package/dist/esm/Services/accessToken.d.ts +3 -3
  98. package/dist/esm/Services/accessToken.js +9 -9
  99. package/dist/esm/common/constants.d.ts +5 -5
  100. package/dist/esm/common/constants.js +5 -5
  101. package/dist/esm/common/turboSuiteUrls.d.ts +7 -7
  102. package/dist/esm/common/turboSuiteUrls.js +7 -7
  103. package/dist/esm/common/types.d.ts +113 -113
  104. package/dist/esm/components/Modal/Modal.css +43 -43
  105. package/dist/esm/components/Modal/Modal.d.ts +5 -5
  106. package/dist/esm/components/Modal/Modal.js +54 -54
  107. package/dist/esm/components/Modal/types.d.ts +9 -9
  108. package/dist/esm/components/Multicalendar/Multicalendar.css +191 -191
  109. package/dist/esm/components/Multicalendar/Multicalendar.d.ts +5 -5
  110. package/dist/esm/components/Multicalendar/Multicalendar.js +274 -274
  111. package/dist/esm/components/Multicalendar/MulticalendarOwnFunctions.d.ts +86 -86
  112. package/dist/esm/components/Multicalendar/MulticalendarOwnFunctions.js +176 -176
  113. package/dist/esm/components/Multicalendar/subcomponents/composites/CellsRow/CellsRow.css +5 -5
  114. package/dist/esm/components/Multicalendar/subcomponents/composites/CellsRow/CellsRow.d.ts +5 -5
  115. package/dist/esm/components/Multicalendar/subcomponents/composites/CellsRow/CellsRow.js +15 -15
  116. package/dist/esm/components/Multicalendar/subcomponents/composites/CellsRow/types.d.ts +11 -11
  117. package/dist/esm/components/Multicalendar/subcomponents/composites/DatesGrid/DatesGrid.css +7 -7
  118. package/dist/esm/components/Multicalendar/subcomponents/composites/DatesGrid/DatesGrid.d.ts +5 -5
  119. package/dist/esm/components/Multicalendar/subcomponents/composites/DatesGrid/DatesGrid.js +15 -15
  120. package/dist/esm/components/Multicalendar/subcomponents/composites/DatesGrid/types.d.ts +13 -13
  121. package/dist/esm/components/Multicalendar/subcomponents/composites/ListElementsColumn/ListElementsColumn.css +3 -3
  122. package/dist/esm/components/Multicalendar/subcomponents/composites/ListElementsColumn/ListElementsColumn.d.ts +5 -5
  123. package/dist/esm/components/Multicalendar/subcomponents/composites/ListElementsColumn/ListElementsColumn.js +10 -10
  124. package/dist/esm/components/Multicalendar/subcomponents/composites/ListElementsColumn/types.d.ts +9 -9
  125. package/dist/esm/components/Multicalendar/subcomponents/individuals/Cell/Cell.css +7 -7
  126. package/dist/esm/components/Multicalendar/subcomponents/individuals/Cell/Cell.d.ts +5 -5
  127. package/dist/esm/components/Multicalendar/subcomponents/individuals/Cell/Cell.js +7 -7
  128. package/dist/esm/components/Multicalendar/subcomponents/individuals/Cell/types.d.ts +10 -10
  129. package/dist/esm/components/Multicalendar/subcomponents/individuals/DatesRow/DatesRow.css +60 -60
  130. package/dist/esm/components/Multicalendar/subcomponents/individuals/DatesRow/DatesRow.d.ts +5 -5
  131. package/dist/esm/components/Multicalendar/subcomponents/individuals/DatesRow/DatesRow.js +51 -51
  132. package/dist/esm/components/Multicalendar/subcomponents/individuals/DatesRow/types.d.ts +10 -10
  133. package/dist/esm/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation.css +13 -13
  134. package/dist/esm/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation.d.ts +5 -5
  135. package/dist/esm/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation.js +8 -8
  136. package/dist/esm/components/Multicalendar/subcomponents/individuals/DropdownMonthNavigation/types.d.ts +5 -5
  137. package/dist/esm/components/Multicalendar/subcomponents/individuals/ListElement/ListElement.css +14 -14
  138. package/dist/esm/components/Multicalendar/subcomponents/individuals/ListElement/ListElement.d.ts +5 -5
  139. package/dist/esm/components/Multicalendar/subcomponents/individuals/ListElement/ListElement.js +9 -9
  140. package/dist/esm/components/Multicalendar/subcomponents/individuals/ListElement/types.d.ts +7 -7
  141. package/dist/esm/components/Multicalendar/types.d.ts +45 -45
  142. package/dist/esm/components/PopUp/PopUp.css +15 -15
  143. package/dist/esm/components/PopUp/PopUp.d.ts +5 -5
  144. package/dist/esm/components/PopUp/PopUp.js +22 -22
  145. package/dist/esm/components/PopUp/types.d.ts +8 -8
  146. package/dist/esm/components/SearchBar/SearchBar.css +35 -35
  147. package/dist/esm/components/SearchBar/SearchBar.d.ts +5 -5
  148. package/dist/esm/components/SearchBar/SearchBar.js +42 -42
  149. package/dist/esm/components/SearchBar/types.d.ts +10 -10
  150. package/dist/esm/components/SideBar/SideBar.css +50 -50
  151. package/dist/esm/components/SideBar/SideBar.d.ts +8 -8
  152. package/dist/esm/components/SideBar/SideBar.js +42 -42
  153. package/dist/esm/components/SideBar/types.d.ts +8 -8
  154. package/dist/esm/hooks/useOutsideClick.d.ts +6 -6
  155. package/dist/esm/hooks/useOutsideClick.js +23 -23
  156. package/dist/esm/hooks/useResizeObserver.d.ts +7 -7
  157. package/dist/esm/hooks/useResizeObserver.js +28 -28
  158. package/dist/esm/hooks/useWindowsSize.d.ts +6 -6
  159. package/dist/esm/hooks/useWindowsSize.js +18 -18
  160. package/dist/esm/index.css +77 -77
  161. package/dist/esm/index.d.ts +7 -7
  162. package/dist/esm/index.js +7 -7
  163. package/dist/esm/languages/en-EN.d.ts +3 -3
  164. package/dist/esm/languages/en-EN.js +23 -23
  165. package/dist/esm/languages/es-ES.d.ts +3 -3
  166. package/dist/esm/languages/es-ES.js +23 -23
  167. package/dist/esm/languages/it-IT.d.ts +3 -3
  168. package/dist/esm/languages/it-IT.js +23 -23
  169. package/dist/esm/languages/types.d.ts +21 -21
  170. package/dist/esm/mocks/ReactComponentMocksForTesting/CellChildrenMock.d.ts +4 -4
  171. package/dist/esm/mocks/ReactComponentMocksForTesting/CellChildrenMock.js +8 -8
  172. package/dist/esm/mocks/ReactComponentMocksForTesting/ListElementChildrenMock.d.ts +4 -4
  173. package/dist/esm/mocks/ReactComponentMocksForTesting/ListElementChildrenMock.js +5 -5
  174. package/dist/esm/react-app-env.d.ts +1 -1
  175. package/dist/esm/setupTests.d.ts +2 -2
  176. package/dist/esm/setupTests.js +6 -6
  177. package/dist/esm/stories/css-presets.css +77 -77
  178. package/dist/esm/utils/datesArray.d.ts +8 -8
  179. package/dist/esm/utils/datesArray.js +21 -21
  180. package/dist/esm/utils/jsToSqlDate.d.ts +7 -7
  181. package/dist/esm/utils/jsToSqlDate.js +20 -20
  182. package/dist/esm/utils/monthYearString.d.ts +3 -3
  183. package/dist/esm/utils/monthYearString.js +25 -25
  184. package/dist/esm/utils/numberOfDaysInAMonth.d.ts +6 -6
  185. package/dist/esm/utils/numberOfDaysInAMonth.js +8 -8
  186. package/dist/esm/utils/sqlToJsDate.d.ts +7 -7
  187. package/dist/esm/utils/sqlToJsDate.js +12 -12
  188. package/package.json +103 -93
@@ -1,274 +1,274 @@
1
- import React, { useEffect, useState, useRef } from "react";
2
- import * as Funciones from "./MulticalendarOwnFunctions";
3
- import "./Multicalendar.css";
4
- //Assets
5
- import { BsChevronLeft, BsChevronRight } from "react-icons/bs";
6
- //Componentes
7
- import DatesRow from "./subcomponents/individuals/DatesRow/DatesRow";
8
- import ListElementsColumn from "./subcomponents/composites/ListElementsColumn/ListElementsColumn";
9
- import DatesGrid from "./subcomponents/composites/DatesGrid/DatesGrid";
10
- import DropdownMonthNavigation from "./subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation";
11
- //Hooks
12
- import useWindowSize from "../../hooks/useWindowsSize";
13
- //Utils
14
- import sqlToJsDate from "../../utils/sqlToJsDate";
15
- //Services
16
- import { eraseMulticalendarYScrollPosition, getMulticalendarYScrollPosition, } from "../../Services/MulticalendarStatesAndSettings";
17
- const Multicalendar = ({ multicalendarId, ReactCellChildren, ReactListElementChildren, listElementsIdsArray, language, pastDatesVisible = true, cellsWidth = 120, cellsHeight = 80, verticalAxisWidth = 280, horizontalAxisHeight = 148, pastDaysInitialQuantity = 365, futureDaysInitialQuantity = 365, chunkRenderX = 0, chunkRenderY = 0, dynamicDaysQuantity = false, draggingOverDateCells = false, waitTimeForCalls = 500, callsOnScrollingMoves, callsOnScrollingStops, aditionalControlsComponents, upperLeftComponent, }) => {
18
- //Constantes del componente
19
- const origin = {
20
- x: pastDatesVisible ? Math.ceil(pastDaysInitialQuantity) * cellsWidth : 0,
21
- y: 0,
22
- };
23
- const initialDateOffset = 2 + chunkRenderX;
24
- //Refs
25
- const datesRowRef = useRef(null);
26
- const destiniesColumnRef = useRef(null);
27
- const gridWrapperRef = useRef(null);
28
- //Estados
29
- const [firtsCall, setFirtsCall] = useState(false);
30
- const [windowWidth, windowHeight] = useWindowSize();
31
- const [futureDaysQuantity, setFutureDaysQuantity] = useState(Math.ceil(futureDaysInitialQuantity));
32
- const [pastDaysQuantity, setPastDaysQuantity] = useState(pastDatesVisible ? Math.ceil(pastDaysInitialQuantity) : 0);
33
- const [paginationWidth, setPaginationWidth] = useState(0);
34
- const [paginationHeight, setPaginationHeight] = useState(0);
35
- const [xOffset, setXOffset] = useState(1);
36
- const [yOffset, setYOffset] = useState(0);
37
- const [visibleDates, setVisibleDates] = useState([]);
38
- const [visibleListElementsIds, setVisibleListElementsIds] = useState([]);
39
- const [updateList, setUpdateList] = useState(false);
40
- const [xPosition, setXPosition] = useState(origin.x);
41
- const [yPosition, setYPosition] = useState(origin.y);
42
- const [renderCoordinates, setRenderCoordinates] = useState({
43
- x: origin.x,
44
- y: origin.y,
45
- });
46
- const [minimumVisibleDate, setMinimumVisibleDate] = useState(new Date());
47
- const [idTimeoutForCalls, setIdTimeoutForCalls] = useState(undefined);
48
- const [clientXPositionOnGrid, setClientXPositionOnGrid] = useState(undefined);
49
- const [clientYPositionOnGrid, setClientYPositionOnGrid] = useState(undefined);
50
- const [scrollingOnCourse, setScrollingOnCourse] = useState(false);
51
- //UseEffects
52
- useEffect(() => {
53
- if (pastDatesVisible) {
54
- setPastDaysQuantity(Math.ceil(pastDaysInitialQuantity));
55
- }
56
- else {
57
- setPastDaysQuantity(0);
58
- }
59
- }, [pastDatesVisible, pastDaysInitialQuantity]);
60
- useEffect(() => {
61
- //Delegamos un cambio de estado a los primero renderes para evitar duplicado de llamadas a la API
62
- if (!firtsCall) {
63
- setFirtsCall(true);
64
- //Cached Y position
65
- let newYPosition = getMulticalendarYScrollPosition(multicalendarId);
66
- if (newYPosition !== null && newYPosition !== "0") {
67
- if (gridWrapperRef.current) {
68
- gridWrapperRef.current.scrollTop = Number(newYPosition);
69
- eraseMulticalendarYScrollPosition(multicalendarId);
70
- }
71
- }
72
- }
73
- }, [firtsCall]);
74
- useEffect(() => {
75
- // Posicionamiento inicial en X
76
- if (gridWrapperRef.current !== null) {
77
- gridWrapperRef.current.scrollLeft = origin.x;
78
- }
79
- }, [origin.x]);
80
- useEffect(() => {
81
- setUpdateList(true);
82
- // Dimensiones de paginacion, requiere agregar 1 para no ver espacios en blanco
83
- setPaginationWidth(Math.ceil((windowWidth - verticalAxisWidth) / cellsWidth) + 1);
84
- setPaginationHeight(Math.ceil((windowHeight - horizontalAxisHeight) / cellsHeight) + 1);
85
- // Redefinicion de posicion X ante cambios en el tamaño de la ventana
86
- if (gridWrapperRef.current !== null) {
87
- setXPosition(gridWrapperRef.current.scrollLeft);
88
- setRenderCoordinates({
89
- x: gridWrapperRef.current.scrollLeft,
90
- y: gridWrapperRef.current.scrollTop,
91
- });
92
- setXOffset(Math.floor(gridWrapperRef.current.scrollLeft / cellsWidth) - chunkRenderX);
93
- }
94
- }, [
95
- windowWidth,
96
- windowHeight,
97
- verticalAxisWidth,
98
- horizontalAxisHeight,
99
- cellsHeight,
100
- cellsWidth,
101
- chunkRenderX,
102
- ]);
103
- useEffect(() => {
104
- // Definicion de visibilidad y renderizacion del Eje Y
105
- if ((renderCoordinates.x === origin.x && renderCoordinates.y === origin.y) ||
106
- Math.abs(renderCoordinates.y - yPosition) / cellsHeight > chunkRenderY ||
107
- updateList) {
108
- if (!(renderCoordinates.x === origin.x && renderCoordinates.y === origin.y)) {
109
- if (gridWrapperRef.current !== null)
110
- setRenderCoordinates({
111
- x: gridWrapperRef.current.scrollLeft,
112
- y: gridWrapperRef.current.scrollTop,
113
- });
114
- }
115
- let desfase = Funciones.defineYOffset(yPosition, cellsHeight, chunkRenderY);
116
- setYOffset(desfase);
117
- setVisibleListElementsIds(Funciones.defineListElementsArrayVisibleList(paginationHeight, chunkRenderY, desfase, listElementsIdsArray));
118
- if (updateList)
119
- setUpdateList(false);
120
- }
121
- }, [
122
- updateList,
123
- yPosition,
124
- cellsHeight,
125
- chunkRenderY,
126
- origin.x,
127
- origin.y,
128
- paginationHeight,
129
- renderCoordinates.x,
130
- renderCoordinates.y,
131
- listElementsIdsArray,
132
- ]);
133
- useEffect(() => {
134
- // Definicion de visibilidad y renderizacion del Eje X
135
- if ((renderCoordinates.x === origin.x && renderCoordinates.y === origin.y) ||
136
- xPosition < cellsWidth ||
137
- Math.abs(renderCoordinates.x - xPosition) / cellsWidth > chunkRenderX ||
138
- updateList) {
139
- setVisibleDates([]);
140
- if (!(renderCoordinates.x === origin.x && renderCoordinates.y === origin.y)) {
141
- if (gridWrapperRef.current !== null)
142
- setRenderCoordinates({
143
- x: gridWrapperRef.current.scrollLeft,
144
- y: gridWrapperRef.current.scrollTop,
145
- });
146
- }
147
- setXOffset(Funciones.defineXOffset(xPosition, cellsWidth, chunkRenderX));
148
- const fechaMinimaMilisegundos = Funciones.minimalDateMilliseconds(xPosition, cellsWidth, pastDaysQuantity, initialDateOffset);
149
- setMinimumVisibleDate(Funciones.defineMinimalVisibleDate(fechaMinimaMilisegundos, initialDateOffset));
150
- if (updateList)
151
- setUpdateList(false);
152
- setVisibleDates(Funciones.defineVisibleDatesArray(paginationWidth, chunkRenderX, fechaMinimaMilisegundos));
153
- }
154
- }, [
155
- updateList,
156
- paginationWidth,
157
- xPosition,
158
- chunkRenderX,
159
- cellsWidth,
160
- initialDateOffset,
161
- pastDaysQuantity,
162
- renderCoordinates.x,
163
- renderCoordinates.y,
164
- origin.x,
165
- origin.y,
166
- ]);
167
- useEffect(() => {
168
- setScrollingOnCourse(true);
169
- clearTimeout(idTimeoutForCalls);
170
- setIdTimeoutForCalls(undefined);
171
- // eslint-disable-next-line
172
- }, [xPosition, yPosition]);
173
- useEffect(() => {
174
- if (idTimeoutForCalls === undefined) {
175
- let _id = setTimeout(() => setScrollingOnCourse(false), waitTimeForCalls);
176
- setIdTimeoutForCalls(_id);
177
- }
178
- }, [xPosition, yPosition, idTimeoutForCalls, waitTimeForCalls]);
179
- useEffect(() => {
180
- if (scrollingOnCourse && callsOnScrollingMoves) {
181
- callsOnScrollingMoves();
182
- }
183
- else if (!scrollingOnCourse && callsOnScrollingStops) {
184
- callsOnScrollingStops();
185
- }
186
- // eslint-disable-next-line
187
- }, [scrollingOnCourse]);
188
- //Cancelar idIntervalo Autoscroll de rango cuando se deja de seleccionar
189
- useEffect(() => {
190
- if (!draggingOverDateCells) {
191
- if (clientXPositionOnGrid !== undefined)
192
- setClientXPositionOnGrid(undefined);
193
- if (clientYPositionOnGrid !== undefined)
194
- setClientYPositionOnGrid(undefined);
195
- }
196
- }, [draggingOverDateCells, clientXPositionOnGrid, clientYPositionOnGrid]);
197
- //Render
198
- return (React.createElement("div", { "data-testid": "multicalendar", className: "multicalendar", style: {
199
- gridTemplateColumns: `${verticalAxisWidth}px`,
200
- gridTemplateRows: `70px ${horizontalAxisHeight - 70}px calc(100% - ${horizontalAxisHeight}px`,
201
- } },
202
- React.createElement("div", { className: "controls" },
203
- React.createElement("div", { className: "div-dates-navigation" },
204
- React.createElement(DropdownMonthNavigation, { minimumVisibleDate: minimumVisibleDate, onChangeAction: (valorDeOpcion) => {
205
- Funciones.scrollByDate(new Date(Number(Date.parse(sqlToJsDate(valorDeOpcion).toString()))), gridWrapperRef, pastDaysQuantity, cellsWidth);
206
- }, options: Funciones.defineMonthsArray(pastDaysQuantity, futureDaysQuantity, language) }),
207
- React.createElement("button", { onClick: () => Funciones.scrollByDate(new Date(), gridWrapperRef, pastDaysQuantity, cellsWidth) }, language["Today"])),
208
- aditionalControlsComponents && (React.createElement("div", { className: "div-aditional-controls-components" }, aditionalControlsComponents))),
209
- React.createElement("div", { className: "div-upper-left-component" }, upperLeftComponent),
210
- React.createElement("div", { className: "vertical-axis" },
211
- React.createElement("div", { ref: destiniesColumnRef, className: "div-list-element-column", onScroll: (e) => {
212
- // Se puede hacer funcion
213
- if (gridWrapperRef.current !== null)
214
- gridWrapperRef.current.scrollTop = e.target.scrollTop;
215
- } },
216
- React.createElement(ListElementsColumn, { listHeight: cellsHeight * listElementsIdsArray.length, yOffset: yOffset, elementsHeight: cellsHeight, idsArray: visibleListElementsIds, ReactListElementChildren: ReactListElementChildren }))),
217
- React.createElement("div", { className: "horizontal-axis" },
218
- React.createElement("div", { className: "div-weeks-buttons" },
219
- React.createElement("button", { className: "past-week-button", onClick: () => {
220
- // Se puede hacer funcion
221
- if (datesRowRef.current !== null)
222
- datesRowRef.current.scroll({
223
- left: datesRowRef.current.scrollLeft - cellsWidth * 7,
224
- });
225
- } },
226
- React.createElement(BsChevronLeft, null)),
227
- React.createElement("button", { onClick: () => {
228
- // Se puede hacer funcion
229
- if (datesRowRef.current !== null)
230
- datesRowRef.current.scroll({
231
- left: datesRowRef.current.scrollLeft + cellsWidth * 7,
232
- });
233
- }, className: "next-week-button" },
234
- React.createElement(BsChevronRight, null))),
235
- React.createElement("div", { ref: datesRowRef, className: "div-dates-row", onScroll: (e) => {
236
- if (gridWrapperRef.current !== null)
237
- gridWrapperRef.current.scrollLeft = e.target.scrollLeft;
238
- } },
239
- React.createElement(DatesRow, { visibleDates: visibleDates, width: (pastDaysQuantity + futureDaysQuantity) * cellsWidth, height: 64, cellsWidth: cellsWidth, cellsHeight: 64, offset: xOffset, language: language }))),
240
- React.createElement("div", { className: "div-main-container" },
241
- React.createElement("div", { ref: gridWrapperRef, className: "main-container", onScroll: (e) => {
242
- if (datesRowRef.current !== null) {
243
- datesRowRef.current.scrollLeft = e.target.scrollLeft;
244
- setXPosition(e.target.scrollLeft);
245
- }
246
- if (destiniesColumnRef.current !== null) {
247
- destiniesColumnRef.current.scrollTop = e.target.scrollTop;
248
- setYPosition(e.target.scrollTop);
249
- }
250
- if (dynamicDaysQuantity &&
251
- e.target.scrollLeft +
252
- e.target.offsetWidth >
253
- (pastDaysQuantity + futureDaysQuantity) * cellsWidth - cellsWidth) {
254
- setFutureDaysQuantity(futureDaysQuantity + 1);
255
- }
256
- if (pastDatesVisible &&
257
- dynamicDaysQuantity &&
258
- e.target.scrollLeft < cellsWidth) {
259
- setPastDaysQuantity(pastDaysQuantity + 1);
260
- e.target.scrollLeft = cellsWidth * 3;
261
- }
262
- Funciones.authomaticScrollInGrid(draggingOverDateCells, clientXPositionOnGrid, clientYPositionOnGrid, cellsWidth, cellsHeight, e.target);
263
- }, onMouseMove: (e) => {
264
- if (gridWrapperRef.current !== null && draggingOverDateCells) {
265
- let x = e.clientX - gridWrapperRef.current.getBoundingClientRect().left;
266
- let y = e.clientY - gridWrapperRef.current.getBoundingClientRect().top;
267
- setClientXPositionOnGrid(x);
268
- setClientYPositionOnGrid(y);
269
- Funciones.startAuthomaticScrollInGrid(draggingOverDateCells, x, y, cellsWidth, cellsHeight, gridWrapperRef);
270
- }
271
- } },
272
- React.createElement(DatesGrid, { gridWidth: (pastDaysQuantity + futureDaysQuantity) * cellsWidth, gridHeight: cellsHeight * listElementsIdsArray.length, xOffset: xOffset, yOffset: yOffset, cellsWidth: cellsWidth, cellsHeight: cellsHeight, visibleListElementsIdsArray: visibleListElementsIds, visibleDates: visibleDates, ReactCellChildren: ReactCellChildren })))));
273
- };
274
- export default Multicalendar;
1
+ import React, { useEffect, useState, useRef } from "react";
2
+ import * as Funciones from "./MulticalendarOwnFunctions";
3
+ import "./Multicalendar.css";
4
+ //Assets
5
+ import { BsChevronLeft, BsChevronRight } from "react-icons/bs";
6
+ //Componentes
7
+ import DatesRow from "./subcomponents/individuals/DatesRow/DatesRow";
8
+ import ListElementsColumn from "./subcomponents/composites/ListElementsColumn/ListElementsColumn";
9
+ import DatesGrid from "./subcomponents/composites/DatesGrid/DatesGrid";
10
+ import DropdownMonthNavigation from "./subcomponents/individuals/DropdownMonthNavigation/DropdownMonthNavigation";
11
+ //Hooks
12
+ import useWindowSize from "../../hooks/useWindowsSize";
13
+ //Utils
14
+ import sqlToJsDate from "../../utils/sqlToJsDate";
15
+ //Services
16
+ import { eraseMulticalendarYScrollPosition, getMulticalendarYScrollPosition, } from "../../Services/MulticalendarStatesAndSettings";
17
+ const Multicalendar = ({ multicalendarId, ReactCellChildren, ReactListElementChildren, listElementsIdsArray, language, pastDatesVisible = true, cellsWidth = 120, cellsHeight = 80, verticalAxisWidth = 280, horizontalAxisHeight = 148, pastDaysInitialQuantity = 365, futureDaysInitialQuantity = 365, chunkRenderX = 0, chunkRenderY = 0, dynamicDaysQuantity = false, draggingOverDateCells = false, waitTimeForCalls = 500, callsOnScrollingMoves, callsOnScrollingStops, aditionalControlsComponents, upperLeftComponent, }) => {
18
+ //Constantes del componente
19
+ const origin = {
20
+ x: pastDatesVisible ? Math.ceil(pastDaysInitialQuantity) * cellsWidth : 0,
21
+ y: 0,
22
+ };
23
+ const initialDateOffset = 2 + chunkRenderX;
24
+ //Refs
25
+ const datesRowRef = useRef(null);
26
+ const destiniesColumnRef = useRef(null);
27
+ const gridWrapperRef = useRef(null);
28
+ //Estados
29
+ const [firtsCall, setFirtsCall] = useState(false);
30
+ const [windowWidth, windowHeight] = useWindowSize();
31
+ const [futureDaysQuantity, setFutureDaysQuantity] = useState(Math.ceil(futureDaysInitialQuantity));
32
+ const [pastDaysQuantity, setPastDaysQuantity] = useState(pastDatesVisible ? Math.ceil(pastDaysInitialQuantity) : 0);
33
+ const [paginationWidth, setPaginationWidth] = useState(0);
34
+ const [paginationHeight, setPaginationHeight] = useState(0);
35
+ const [xOffset, setXOffset] = useState(1);
36
+ const [yOffset, setYOffset] = useState(0);
37
+ const [visibleDates, setVisibleDates] = useState([]);
38
+ const [visibleListElementsIds, setVisibleListElementsIds] = useState([]);
39
+ const [updateList, setUpdateList] = useState(false);
40
+ const [xPosition, setXPosition] = useState(origin.x);
41
+ const [yPosition, setYPosition] = useState(origin.y);
42
+ const [renderCoordinates, setRenderCoordinates] = useState({
43
+ x: origin.x,
44
+ y: origin.y,
45
+ });
46
+ const [minimumVisibleDate, setMinimumVisibleDate] = useState(new Date());
47
+ const [idTimeoutForCalls, setIdTimeoutForCalls] = useState(undefined);
48
+ const [clientXPositionOnGrid, setClientXPositionOnGrid] = useState(undefined);
49
+ const [clientYPositionOnGrid, setClientYPositionOnGrid] = useState(undefined);
50
+ const [scrollingOnCourse, setScrollingOnCourse] = useState(false);
51
+ //UseEffects
52
+ useEffect(() => {
53
+ if (pastDatesVisible) {
54
+ setPastDaysQuantity(Math.ceil(pastDaysInitialQuantity));
55
+ }
56
+ else {
57
+ setPastDaysQuantity(0);
58
+ }
59
+ }, [pastDatesVisible, pastDaysInitialQuantity]);
60
+ useEffect(() => {
61
+ //Delegamos un cambio de estado a los primero renderes para evitar duplicado de llamadas a la API
62
+ if (!firtsCall) {
63
+ setFirtsCall(true);
64
+ //Cached Y position
65
+ let newYPosition = getMulticalendarYScrollPosition(multicalendarId);
66
+ if (newYPosition !== null && newYPosition !== "0") {
67
+ if (gridWrapperRef.current) {
68
+ gridWrapperRef.current.scrollTop = Number(newYPosition);
69
+ eraseMulticalendarYScrollPosition(multicalendarId);
70
+ }
71
+ }
72
+ }
73
+ }, [firtsCall]);
74
+ useEffect(() => {
75
+ // Posicionamiento inicial en X
76
+ if (gridWrapperRef.current !== null) {
77
+ gridWrapperRef.current.scrollLeft = origin.x;
78
+ }
79
+ }, [origin.x]);
80
+ useEffect(() => {
81
+ setUpdateList(true);
82
+ // Dimensiones de paginacion, requiere agregar 1 para no ver espacios en blanco
83
+ setPaginationWidth(Math.ceil((windowWidth - verticalAxisWidth) / cellsWidth) + 1);
84
+ setPaginationHeight(Math.ceil((windowHeight - horizontalAxisHeight) / cellsHeight) + 1);
85
+ // Redefinicion de posicion X ante cambios en el tamaño de la ventana
86
+ if (gridWrapperRef.current !== null) {
87
+ setXPosition(gridWrapperRef.current.scrollLeft);
88
+ setRenderCoordinates({
89
+ x: gridWrapperRef.current.scrollLeft,
90
+ y: gridWrapperRef.current.scrollTop,
91
+ });
92
+ setXOffset(Math.floor(gridWrapperRef.current.scrollLeft / cellsWidth) - chunkRenderX);
93
+ }
94
+ }, [
95
+ windowWidth,
96
+ windowHeight,
97
+ verticalAxisWidth,
98
+ horizontalAxisHeight,
99
+ cellsHeight,
100
+ cellsWidth,
101
+ chunkRenderX,
102
+ ]);
103
+ useEffect(() => {
104
+ // Definicion de visibilidad y renderizacion del Eje Y
105
+ if ((renderCoordinates.x === origin.x && renderCoordinates.y === origin.y) ||
106
+ Math.abs(renderCoordinates.y - yPosition) / cellsHeight > chunkRenderY ||
107
+ updateList) {
108
+ if (!(renderCoordinates.x === origin.x && renderCoordinates.y === origin.y)) {
109
+ if (gridWrapperRef.current !== null)
110
+ setRenderCoordinates({
111
+ x: gridWrapperRef.current.scrollLeft,
112
+ y: gridWrapperRef.current.scrollTop,
113
+ });
114
+ }
115
+ let desfase = Funciones.defineYOffset(yPosition, cellsHeight, chunkRenderY);
116
+ setYOffset(desfase);
117
+ setVisibleListElementsIds(Funciones.defineListElementsArrayVisibleList(paginationHeight, chunkRenderY, desfase, listElementsIdsArray));
118
+ if (updateList)
119
+ setUpdateList(false);
120
+ }
121
+ }, [
122
+ updateList,
123
+ yPosition,
124
+ cellsHeight,
125
+ chunkRenderY,
126
+ origin.x,
127
+ origin.y,
128
+ paginationHeight,
129
+ renderCoordinates.x,
130
+ renderCoordinates.y,
131
+ listElementsIdsArray,
132
+ ]);
133
+ useEffect(() => {
134
+ // Definicion de visibilidad y renderizacion del Eje X
135
+ if ((renderCoordinates.x === origin.x && renderCoordinates.y === origin.y) ||
136
+ xPosition < cellsWidth ||
137
+ Math.abs(renderCoordinates.x - xPosition) / cellsWidth > chunkRenderX ||
138
+ updateList) {
139
+ setVisibleDates([]);
140
+ if (!(renderCoordinates.x === origin.x && renderCoordinates.y === origin.y)) {
141
+ if (gridWrapperRef.current !== null)
142
+ setRenderCoordinates({
143
+ x: gridWrapperRef.current.scrollLeft,
144
+ y: gridWrapperRef.current.scrollTop,
145
+ });
146
+ }
147
+ setXOffset(Funciones.defineXOffset(xPosition, cellsWidth, chunkRenderX));
148
+ const fechaMinimaMilisegundos = Funciones.minimalDateMilliseconds(xPosition, cellsWidth, pastDaysQuantity, initialDateOffset);
149
+ setMinimumVisibleDate(Funciones.defineMinimalVisibleDate(fechaMinimaMilisegundos, initialDateOffset));
150
+ if (updateList)
151
+ setUpdateList(false);
152
+ setVisibleDates(Funciones.defineVisibleDatesArray(paginationWidth, chunkRenderX, fechaMinimaMilisegundos));
153
+ }
154
+ }, [
155
+ updateList,
156
+ paginationWidth,
157
+ xPosition,
158
+ chunkRenderX,
159
+ cellsWidth,
160
+ initialDateOffset,
161
+ pastDaysQuantity,
162
+ renderCoordinates.x,
163
+ renderCoordinates.y,
164
+ origin.x,
165
+ origin.y,
166
+ ]);
167
+ useEffect(() => {
168
+ setScrollingOnCourse(true);
169
+ clearTimeout(idTimeoutForCalls);
170
+ setIdTimeoutForCalls(undefined);
171
+ // eslint-disable-next-line
172
+ }, [xPosition, yPosition]);
173
+ useEffect(() => {
174
+ if (idTimeoutForCalls === undefined) {
175
+ let _id = setTimeout(() => setScrollingOnCourse(false), waitTimeForCalls);
176
+ setIdTimeoutForCalls(_id);
177
+ }
178
+ }, [xPosition, yPosition, idTimeoutForCalls, waitTimeForCalls]);
179
+ useEffect(() => {
180
+ if (scrollingOnCourse && callsOnScrollingMoves) {
181
+ callsOnScrollingMoves();
182
+ }
183
+ else if (!scrollingOnCourse && callsOnScrollingStops) {
184
+ callsOnScrollingStops();
185
+ }
186
+ // eslint-disable-next-line
187
+ }, [scrollingOnCourse]);
188
+ //Cancelar idIntervalo Autoscroll de rango cuando se deja de seleccionar
189
+ useEffect(() => {
190
+ if (!draggingOverDateCells) {
191
+ if (clientXPositionOnGrid !== undefined)
192
+ setClientXPositionOnGrid(undefined);
193
+ if (clientYPositionOnGrid !== undefined)
194
+ setClientYPositionOnGrid(undefined);
195
+ }
196
+ }, [draggingOverDateCells, clientXPositionOnGrid, clientYPositionOnGrid]);
197
+ //Render
198
+ return (React.createElement("div", { "data-testid": "multicalendar", className: "multicalendar", style: {
199
+ gridTemplateColumns: `${verticalAxisWidth}px`,
200
+ gridTemplateRows: `70px ${horizontalAxisHeight - 70}px calc(100% - ${horizontalAxisHeight}px`,
201
+ } },
202
+ React.createElement("div", { className: "controls" },
203
+ React.createElement("div", { className: "div-dates-navigation" },
204
+ React.createElement(DropdownMonthNavigation, { minimumVisibleDate: minimumVisibleDate, onChangeAction: (valorDeOpcion) => {
205
+ Funciones.scrollByDate(new Date(Number(Date.parse(sqlToJsDate(valorDeOpcion).toString()))), gridWrapperRef, pastDaysQuantity, cellsWidth);
206
+ }, options: Funciones.defineMonthsArray(pastDaysQuantity, futureDaysQuantity, language) }),
207
+ React.createElement("button", { onClick: () => Funciones.scrollByDate(new Date(), gridWrapperRef, pastDaysQuantity, cellsWidth) }, language["Today"])),
208
+ aditionalControlsComponents && (React.createElement("div", { className: "div-aditional-controls-components" }, aditionalControlsComponents))),
209
+ React.createElement("div", { className: "div-upper-left-component" }, upperLeftComponent),
210
+ React.createElement("div", { className: "vertical-axis" },
211
+ React.createElement("div", { ref: destiniesColumnRef, className: "div-list-element-column", onScroll: (e) => {
212
+ // Se puede hacer funcion
213
+ if (gridWrapperRef.current !== null)
214
+ gridWrapperRef.current.scrollTop = e.target.scrollTop;
215
+ } },
216
+ React.createElement(ListElementsColumn, { listHeight: cellsHeight * listElementsIdsArray.length, yOffset: yOffset, elementsHeight: cellsHeight, idsArray: visibleListElementsIds, ReactListElementChildren: ReactListElementChildren }))),
217
+ React.createElement("div", { className: "horizontal-axis" },
218
+ React.createElement("div", { className: "div-weeks-buttons" },
219
+ React.createElement("button", { className: "past-week-button", onClick: () => {
220
+ // Se puede hacer funcion
221
+ if (datesRowRef.current !== null)
222
+ datesRowRef.current.scroll({
223
+ left: datesRowRef.current.scrollLeft - cellsWidth * 7,
224
+ });
225
+ } },
226
+ React.createElement(BsChevronLeft, null)),
227
+ React.createElement("button", { onClick: () => {
228
+ // Se puede hacer funcion
229
+ if (datesRowRef.current !== null)
230
+ datesRowRef.current.scroll({
231
+ left: datesRowRef.current.scrollLeft + cellsWidth * 7,
232
+ });
233
+ }, className: "next-week-button" },
234
+ React.createElement(BsChevronRight, null))),
235
+ React.createElement("div", { ref: datesRowRef, className: "div-dates-row", onScroll: (e) => {
236
+ if (gridWrapperRef.current !== null)
237
+ gridWrapperRef.current.scrollLeft = e.target.scrollLeft;
238
+ } },
239
+ React.createElement(DatesRow, { visibleDates: visibleDates, width: (pastDaysQuantity + futureDaysQuantity) * cellsWidth, height: 64, cellsWidth: cellsWidth, cellsHeight: 64, offset: xOffset, language: language }))),
240
+ React.createElement("div", { className: "div-main-container" },
241
+ React.createElement("div", { ref: gridWrapperRef, className: "main-container", onScroll: (e) => {
242
+ if (datesRowRef.current !== null) {
243
+ datesRowRef.current.scrollLeft = e.target.scrollLeft;
244
+ setXPosition(e.target.scrollLeft);
245
+ }
246
+ if (destiniesColumnRef.current !== null) {
247
+ destiniesColumnRef.current.scrollTop = e.target.scrollTop;
248
+ setYPosition(e.target.scrollTop);
249
+ }
250
+ if (dynamicDaysQuantity &&
251
+ e.target.scrollLeft +
252
+ e.target.offsetWidth >
253
+ (pastDaysQuantity + futureDaysQuantity) * cellsWidth - cellsWidth) {
254
+ setFutureDaysQuantity(futureDaysQuantity + 1);
255
+ }
256
+ if (pastDatesVisible &&
257
+ dynamicDaysQuantity &&
258
+ e.target.scrollLeft < cellsWidth) {
259
+ setPastDaysQuantity(pastDaysQuantity + 1);
260
+ e.target.scrollLeft = cellsWidth * 3;
261
+ }
262
+ Funciones.authomaticScrollInGrid(draggingOverDateCells, clientXPositionOnGrid, clientYPositionOnGrid, cellsWidth, cellsHeight, e.target);
263
+ }, onMouseMove: (e) => {
264
+ if (gridWrapperRef.current !== null && draggingOverDateCells) {
265
+ let x = e.clientX - gridWrapperRef.current.getBoundingClientRect().left;
266
+ let y = e.clientY - gridWrapperRef.current.getBoundingClientRect().top;
267
+ setClientXPositionOnGrid(x);
268
+ setClientYPositionOnGrid(y);
269
+ Funciones.startAuthomaticScrollInGrid(draggingOverDateCells, x, y, cellsWidth, cellsHeight, gridWrapperRef);
270
+ }
271
+ } },
272
+ React.createElement(DatesGrid, { gridWidth: (pastDaysQuantity + futureDaysQuantity) * cellsWidth, gridHeight: cellsHeight * listElementsIdsArray.length, xOffset: xOffset, yOffset: yOffset, cellsWidth: cellsWidth, cellsHeight: cellsHeight, visibleListElementsIdsArray: visibleListElementsIds, visibleDates: visibleDates, ReactCellChildren: ReactCellChildren })))));
273
+ };
274
+ export default Multicalendar;