@tecsinapse/react-native-kit 1.18.5 → 1.20.0

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 (190) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/components/atoms/Avatar/Avatar.js +1 -1
  3. package/dist/components/atoms/Avatar/Avatar.js.map +1 -1
  4. package/dist/components/atoms/Avatar/index.js.map +1 -1
  5. package/dist/components/atoms/Badge/Badge.js +1 -1
  6. package/dist/components/atoms/Badge/Badge.js.map +1 -1
  7. package/dist/components/atoms/Badge/index.js.map +1 -1
  8. package/dist/components/atoms/BottomNavigator/BottomNavigator.js +1 -1
  9. package/dist/components/atoms/BottomNavigator/BottomNavigator.js.map +1 -1
  10. package/dist/components/atoms/BottomNavigator/Item.js +1 -1
  11. package/dist/components/atoms/BottomNavigator/Item.js.map +1 -1
  12. package/dist/components/atoms/BottomNavigator/index.js +1 -1
  13. package/dist/components/atoms/BottomNavigator/index.js.map +1 -1
  14. package/dist/components/atoms/BottomNavigator/styled.js +1 -1
  15. package/dist/components/atoms/BottomNavigator/styled.js.map +1 -1
  16. package/dist/components/atoms/Button/Button.d.ts +2 -2
  17. package/dist/components/atoms/Button/Button.js +1 -1
  18. package/dist/components/atoms/Button/Button.js.map +1 -1
  19. package/dist/components/atoms/Button/States/Error.js +1 -1
  20. package/dist/components/atoms/Button/States/Error.js.map +1 -1
  21. package/dist/components/atoms/Button/States/Loading.js +1 -1
  22. package/dist/components/atoms/Button/States/Loading.js.map +1 -1
  23. package/dist/components/atoms/Button/States/Success.js +1 -1
  24. package/dist/components/atoms/Button/States/Success.js.map +1 -1
  25. package/dist/components/atoms/Button/States/index.js.map +1 -1
  26. package/dist/components/atoms/Button/index.js.map +1 -1
  27. package/dist/components/atoms/GroupButton/GroupButtonOption.js +1 -1
  28. package/dist/components/atoms/GroupButton/GroupButtonOption.js.map +1 -1
  29. package/dist/components/atoms/GroupButton/index.js.map +1 -1
  30. package/dist/components/atoms/Header/Header.js +1 -1
  31. package/dist/components/atoms/Header/Header.js.map +1 -1
  32. package/dist/components/atoms/Header/index.js.map +1 -1
  33. package/dist/components/atoms/Header/styled.js +1 -1
  34. package/dist/components/atoms/Header/styled.js.map +1 -1
  35. package/dist/components/atoms/Input/Input.d.ts +3 -2
  36. package/dist/components/atoms/Input/Input.js +1 -2
  37. package/dist/components/atoms/Input/Input.js.map +1 -1
  38. package/dist/components/atoms/Input/index.js.map +1 -1
  39. package/dist/components/atoms/Input/styled.js.map +1 -1
  40. package/dist/components/atoms/InputMask/InputMask.js +1 -1
  41. package/dist/components/atoms/InputMask/InputMask.js.map +1 -1
  42. package/dist/components/atoms/InputMask/index.js.map +1 -1
  43. package/dist/components/atoms/InputMask/styled.js.map +1 -1
  44. package/dist/components/atoms/Modal/ModalGroupManager.js +2 -2
  45. package/dist/components/atoms/Modal/ModalGroupManager.js.map +1 -1
  46. package/dist/components/atoms/Modal/ModalLifecycleHandler.d.ts +2 -2
  47. package/dist/components/atoms/Modal/ModalLifecycleHandler.js +76 -85
  48. package/dist/components/atoms/Modal/ModalLifecycleHandler.js.map +1 -1
  49. package/dist/components/atoms/Modal/index.js.map +1 -1
  50. package/dist/components/atoms/Modal/ui/BaseModalView.d.ts +2 -2
  51. package/dist/components/atoms/Modal/ui/BaseModalView.js +4 -4
  52. package/dist/components/atoms/Modal/ui/BaseModalView.js.map +1 -1
  53. package/dist/components/atoms/Modal/ui/styled.js +12 -12
  54. package/dist/components/atoms/Modal/ui/styled.js.map +1 -1
  55. package/dist/components/atoms/Modal/ui/types.d.ts +1 -1
  56. package/dist/components/atoms/Modal/ui/types.js.map +1 -1
  57. package/dist/components/atoms/Modal/useLazyModalManager.d.ts +2 -2
  58. package/dist/components/atoms/Modal/useLazyModalManager.js.map +1 -1
  59. package/dist/components/atoms/Modal/useModalManager.d.ts +2 -2
  60. package/dist/components/atoms/Modal/useModalManager.js.map +1 -1
  61. package/dist/components/atoms/Modal/useModalRemoteControl.js.map +1 -1
  62. package/dist/components/atoms/Skeleton/Pulse.js.map +1 -1
  63. package/dist/components/atoms/Skeleton/Skeleton.js +1 -1
  64. package/dist/components/atoms/Skeleton/Skeleton.js.map +1 -1
  65. package/dist/components/atoms/Skeleton/Wave.js.map +1 -1
  66. package/dist/components/atoms/Skeleton/animation.js +1 -1
  67. package/dist/components/atoms/Skeleton/animation.js.map +1 -1
  68. package/dist/components/atoms/Skeleton/index.js.map +1 -1
  69. package/dist/components/atoms/Skeleton/styled.js.map +1 -1
  70. package/dist/components/atoms/Skeleton/types.js.map +1 -1
  71. package/dist/components/atoms/SnappingSlider/SnappingSlider.js +1 -1
  72. package/dist/components/atoms/SnappingSlider/SnappingSlider.js.map +1 -1
  73. package/dist/components/atoms/SnappingSlider/index.js.map +1 -1
  74. package/dist/components/atoms/Tag/Tag.js +1 -1
  75. package/dist/components/atoms/Tag/Tag.js.map +1 -1
  76. package/dist/components/atoms/Tag/index.js.map +1 -1
  77. package/dist/components/atoms/Text/Text.js.map +1 -1
  78. package/dist/components/atoms/Text/index.js.map +1 -1
  79. package/dist/components/atoms/Text/styled.js +1 -1
  80. package/dist/components/atoms/Text/styled.js.map +1 -1
  81. package/dist/components/atoms/TextArea/TextArea.js +1 -1
  82. package/dist/components/atoms/TextArea/TextArea.js.map +1 -1
  83. package/dist/components/atoms/TextArea/index.js.map +1 -1
  84. package/dist/components/atoms/TextArea/styled.js.map +1 -1
  85. package/dist/components/molecules/Calendar/Calendar.js +1 -1
  86. package/dist/components/molecules/Calendar/Calendar.js.map +1 -1
  87. package/dist/components/molecules/Calendar/index.js.map +1 -1
  88. package/dist/components/molecules/DatePicker/DatePicker.js +1 -1
  89. package/dist/components/molecules/DatePicker/DatePicker.js.map +1 -1
  90. package/dist/components/molecules/DatePicker/index.js.map +1 -1
  91. package/dist/components/molecules/DatePicker/styled.js +1 -1
  92. package/dist/components/molecules/DatePicker/styled.js.map +1 -1
  93. package/dist/components/molecules/DateTimePicker/DateTimePicker.js +1 -1
  94. package/dist/components/molecules/DateTimePicker/DateTimePicker.js.map +1 -1
  95. package/dist/components/molecules/DateTimePicker/index.js.map +1 -1
  96. package/dist/components/molecules/DateTimeSelector/DateTimeSelector.js +1 -1
  97. package/dist/components/molecules/DateTimeSelector/DateTimeSelector.js.map +1 -1
  98. package/dist/components/molecules/DateTimeSelector/index.js.map +1 -1
  99. package/dist/components/molecules/Grid/Grid.d.ts +5 -0
  100. package/dist/components/molecules/Grid/Grid.js +57 -0
  101. package/dist/components/molecules/Grid/Grid.js.map +1 -0
  102. package/dist/components/molecules/Grid/Item/Item.d.ts +7 -0
  103. package/dist/components/molecules/Grid/Item/Item.js +78 -0
  104. package/dist/components/molecules/Grid/Item/Item.js.map +1 -0
  105. package/dist/components/molecules/Grid/Item/index.d.ts +1 -0
  106. package/dist/components/molecules/Grid/Item/index.js +14 -0
  107. package/dist/components/molecules/Grid/Item/index.js.map +1 -0
  108. package/dist/components/molecules/Grid/index.d.ts +2 -0
  109. package/dist/components/molecules/Grid/index.js +15 -0
  110. package/dist/components/molecules/Grid/index.js.map +1 -0
  111. package/dist/components/molecules/IconTextButton/IconTextButton.d.ts +6 -0
  112. package/dist/components/molecules/IconTextButton/IconTextButton.js +50 -0
  113. package/dist/components/molecules/IconTextButton/IconTextButton.js.map +1 -0
  114. package/dist/components/molecules/IconTextButton/TextComponent.d.ts +12 -0
  115. package/dist/components/molecules/IconTextButton/TextComponent.js +34 -0
  116. package/dist/components/molecules/IconTextButton/TextComponent.js.map +1 -0
  117. package/dist/components/molecules/IconTextButton/index.d.ts +1 -0
  118. package/dist/components/molecules/IconTextButton/index.js +14 -0
  119. package/dist/components/molecules/IconTextButton/index.js.map +1 -0
  120. package/dist/components/molecules/IconTextButton/styled.d.ts +2 -0
  121. package/dist/components/molecules/IconTextButton/styled.js +46 -0
  122. package/dist/components/molecules/IconTextButton/styled.js.map +1 -0
  123. package/dist/components/molecules/InputPassword/InputPassword.d.ts +3 -2
  124. package/dist/components/molecules/InputPassword/InputPassword.js +1 -1
  125. package/dist/components/molecules/InputPassword/InputPassword.js.map +1 -1
  126. package/dist/components/molecules/InputPassword/index.js.map +1 -1
  127. package/dist/components/molecules/LabeledSwitch/LabelComponent.d.ts +13 -0
  128. package/dist/components/molecules/LabeledSwitch/LabelComponent.js +36 -0
  129. package/dist/components/molecules/LabeledSwitch/LabelComponent.js.map +1 -0
  130. package/dist/components/molecules/LabeledSwitch/LabeledSwitch.d.ts +8 -0
  131. package/dist/components/molecules/LabeledSwitch/LabeledSwitch.js +53 -0
  132. package/dist/components/molecules/LabeledSwitch/LabeledSwitch.js.map +1 -0
  133. package/dist/components/molecules/LabeledSwitch/index.d.ts +1 -0
  134. package/dist/components/molecules/LabeledSwitch/index.js +14 -0
  135. package/dist/components/molecules/LabeledSwitch/index.js.map +1 -0
  136. package/dist/components/molecules/LabeledSwitch/styled.d.ts +9 -0
  137. package/dist/components/molecules/LabeledSwitch/styled.js +35 -0
  138. package/dist/components/molecules/LabeledSwitch/styled.js.map +1 -0
  139. package/dist/components/molecules/Select/Modal.d.ts +1 -1
  140. package/dist/components/molecules/Select/Modal.js +1 -2
  141. package/dist/components/molecules/Select/Modal.js.map +1 -1
  142. package/dist/components/molecules/Select/Select.js +3 -3
  143. package/dist/components/molecules/Select/Select.js.map +1 -1
  144. package/dist/components/molecules/Select/index.js.map +1 -1
  145. package/dist/components/molecules/Select/styled.js +1 -1
  146. package/dist/components/molecules/Select/styled.js.map +1 -1
  147. package/dist/components/molecules/Snackbar/Snackbar.js +1 -1
  148. package/dist/components/molecules/Snackbar/Snackbar.js.map +1 -1
  149. package/dist/components/molecules/Snackbar/index.js.map +1 -1
  150. package/dist/components/molecules/Snackbar/styled.js.map +1 -1
  151. package/dist/index.d.ts +17 -14
  152. package/dist/index.js +112 -91
  153. package/dist/index.js.map +1 -1
  154. package/dist/utils/date.js.map +1 -1
  155. package/package.json +5 -5
  156. package/src/components/atoms/BottomNavigator/BottomNavigator.tsx +3 -6
  157. package/src/components/atoms/Button/Button.tsx +19 -13
  158. package/src/components/atoms/Button/index.ts +1 -1
  159. package/src/components/atoms/Input/Input.tsx +8 -6
  160. package/src/components/atoms/Input/styled.ts +1 -3
  161. package/src/components/atoms/Modal/ModalGroupManager.tsx +22 -17
  162. package/src/components/atoms/Modal/ModalLifecycleHandler.ts +139 -126
  163. package/src/components/atoms/Modal/index.ts +7 -7
  164. package/src/components/atoms/Modal/ui/BaseModalView.tsx +150 -127
  165. package/src/components/atoms/Modal/ui/styled.ts +17 -17
  166. package/src/components/atoms/Modal/ui/types.ts +9 -8
  167. package/src/components/atoms/Modal/useLazyModalManager.ts +32 -31
  168. package/src/components/atoms/Modal/useModalManager.ts +28 -26
  169. package/src/components/atoms/Modal/useModalRemoteControl.ts +16 -18
  170. package/src/components/molecules/Calendar/Calendar.tsx +5 -1
  171. package/src/components/molecules/DatePicker/DatePicker.tsx +26 -17
  172. package/src/components/molecules/DatePicker/styled.ts +4 -4
  173. package/src/components/molecules/DateTimePicker/DateTimePicker.tsx +18 -16
  174. package/src/components/molecules/DateTimeSelector/DateTimeSelector.tsx +4 -1
  175. package/src/components/molecules/Grid/Grid.tsx +68 -0
  176. package/src/components/molecules/Grid/Item/Item.tsx +77 -0
  177. package/src/components/molecules/Grid/Item/index.ts +1 -0
  178. package/src/components/molecules/Grid/index.ts +2 -0
  179. package/src/components/molecules/IconTextButton/IconTextButton.tsx +55 -0
  180. package/src/components/molecules/IconTextButton/TextComponent.tsx +43 -0
  181. package/src/components/molecules/IconTextButton/index.ts +4 -0
  182. package/src/components/molecules/IconTextButton/styled.ts +35 -0
  183. package/src/components/molecules/InputPassword/InputPassword.tsx +3 -2
  184. package/src/components/molecules/LabeledSwitch/LabelComponent.tsx +46 -0
  185. package/src/components/molecules/LabeledSwitch/LabeledSwitch.tsx +59 -0
  186. package/src/components/molecules/LabeledSwitch/index.ts +4 -0
  187. package/src/components/molecules/LabeledSwitch/styled.ts +27 -0
  188. package/src/components/molecules/Select/Modal.tsx +88 -66
  189. package/src/components/molecules/Select/Select.tsx +2 -2
  190. package/src/index.ts +38 -29
@@ -1,154 +1,167 @@
1
- import React, { Dispatch, ReactElement } from "react"
2
- import { IBaseModal } from "./ui/types"
1
+ import React, { Dispatch, ReactElement } from 'react';
2
+ import { IBaseModal } from './ui/types';
3
3
 
4
4
  /**
5
5
  * It Represents a node (usually a modal component) in the modal's lifecycle handler.
6
6
  */
7
7
  interface ModalNode {
8
- id: string
9
- visible?: boolean
10
- lastVisualization?: Date
11
- modal: () => ReactElement<IBaseModal>
8
+ id: string;
9
+ visible?: boolean;
10
+ lastVisualization?: Date;
11
+ modal: () => ReactElement<IBaseModal>;
12
12
  }
13
13
 
14
14
  /**
15
15
  * Manage all modal's lifecycle.
16
16
  */
17
17
  export class ModalLifecycleHandler {
18
-
19
- nodeGroup: Map<string, ModalNode>
20
- state: [ReactElement<IBaseModal>[], Dispatch<ReactElement<IBaseModal>[]>] | undefined
18
+ nodeGroup: Map<string, ModalNode>;
19
+ state:
20
+ | [ReactElement<IBaseModal>[], Dispatch<ReactElement<IBaseModal>[]>]
21
+ | undefined;
21
22
 
22
- constructor() {
23
- this.nodeGroup = new Map()
24
- this.state = undefined
25
- }
23
+ constructor() {
24
+ this.nodeGroup = new Map();
25
+ this.state = undefined;
26
+ }
26
27
 
27
- /**
28
- * Holds the ModalGroupManager state.
29
- *
30
- * @param state
31
- */
32
- public attach = (state: [ReactElement<IBaseModal>[], Dispatch<ReactElement<IBaseModal>[]>]) => {
33
- this.state = state
34
- }
28
+ /**
29
+ * Holds the ModalGroupManager state.
30
+ *
31
+ * @param state
32
+ */
33
+ public attach = (
34
+ state: [ReactElement<IBaseModal>[], Dispatch<ReactElement<IBaseModal>[]>]
35
+ ) => {
36
+ this.state = state;
37
+ };
35
38
 
36
- /**
37
- * Updates all the modal components.
38
- */
39
- public update = () => {
40
- requestAnimationFrame(() => {
41
- const nodes = Array.from(this.nodeGroup.values())
42
- .filter(node => node.visible || !!node.lastVisualization)
43
- .sort((nodeA, nodeB) => (nodeA.lastVisualization?.getTime() || 0) - (nodeB.lastVisualization?.getTime() || 0))
44
- .map((node, index, filteredNodes) => {
45
- let modalElement = node.modal()
46
- let { props } = modalElement
47
- return React.cloneElement(modalElement, {
48
- ...props,
49
- key: node.id,
50
- visible: node.visible,
51
- isLastShown: filteredNodes.length - 1 === index,
52
- close: () => this.close(node.id),
53
- onClose: () => {
54
- this.remove(node.id)
55
- props.onClose?.()
56
- }
57
- })
58
- })
59
-
60
- const [, updateState ] = this.state || []
61
- updateState?.(nodes)
62
- })
63
- }
39
+ /**
40
+ * Updates all the modal components.
41
+ */
42
+ public update = () => {
43
+ requestAnimationFrame(() => {
44
+ const nodes = Array.from(this.nodeGroup.values())
45
+ .filter(node => node.visible || !!node.lastVisualization)
46
+ .sort(
47
+ (nodeA, nodeB) =>
48
+ (nodeA.lastVisualization?.getTime() || 0) -
49
+ (nodeB.lastVisualization?.getTime() || 0)
50
+ )
51
+ .map((node, index, filteredNodes) => {
52
+ const modalElement = node.modal();
53
+ const { props } = modalElement;
54
+ return React.cloneElement(modalElement, {
55
+ ...props,
56
+ key: node.id,
57
+ visible: node.visible,
58
+ isLastShown: filteredNodes.length - 1 === index,
59
+ close: () => this.close(node.id),
60
+ onClose: () => {
61
+ this.remove(node.id);
62
+ props.onClose?.();
63
+ },
64
+ });
65
+ });
64
66
 
65
- /**
66
- * Renders all selected modals.
67
- *
68
- * @returns
69
- */
70
- public render = (): ReactElement<IBaseModal>[] => {
71
- const [ modals ] = this.state || []
72
- return modals || []
73
- }
67
+ const [, updateState] = this.state || [];
68
+ updateState?.(nodes);
69
+ });
70
+ };
74
71
 
75
- /**
76
- * Tells to the lifecycle handler that a modal component needs to be handled.
77
- *
78
- * @param id
79
- * @param modal
80
- * @returns
81
- */
82
- public sync = (id: string, modal: () => ReactElement<IBaseModal>) => {
83
- if (this.nodeGroup.has(id)) {
84
- const savedNode = this.findNode(id)
85
- savedNode && this.nodeGroup.set(id, { ...savedNode, modal })
86
- return
87
- }
88
- this.nodeGroup.set(id, { id, modal })
89
- }
72
+ /**
73
+ * Renders all selected modals.
74
+ *
75
+ * @returns
76
+ */
77
+ public render = (): ReactElement<IBaseModal>[] => {
78
+ const [modals] = this.state || [];
79
+ return modals || [];
80
+ };
90
81
 
91
- /**
92
- * Destroy a modal from the lifecycle handler.
93
- *
94
- * @param id
95
- */
96
- public destroy = (id: string) => {
97
- this.nodeGroup.delete(id)
98
- this.update()
82
+ /**
83
+ * Tells to the lifecycle handler that a modal component needs to be handled.
84
+ *
85
+ * @param id
86
+ * @param modal
87
+ * @returns
88
+ */
89
+ public sync = (id: string, modal: () => ReactElement<IBaseModal>) => {
90
+ if (this.nodeGroup.has(id)) {
91
+ const savedNode = this.findNode(id);
92
+ savedNode && this.nodeGroup.set(id, { ...savedNode, modal });
93
+ return;
99
94
  }
95
+ this.nodeGroup.set(id, { id, modal });
96
+ };
100
97
 
101
- /**
102
- * Removes a modal from the rendering stack. It tells to the lifecycle handler that a modal
103
- * component is no longer used by the application.
104
- *
105
- * @param id
106
- */
107
- private remove = (id: string) => {
108
- const savedNode = this.findNode(id)
109
- savedNode && this.nodeGroup.set(id, { ...savedNode, lastVisualization: undefined })
110
- this.update()
111
- }
98
+ /**
99
+ * Destroy a modal from the lifecycle handler.
100
+ *
101
+ * @param id
102
+ */
103
+ public destroy = (id: string) => {
104
+ this.nodeGroup.delete(id);
105
+ this.update();
106
+ };
112
107
 
113
- /**
114
- * Find a modal node by id.
115
- *
116
- * @param id
117
- */
118
- private findNode = (id: string) => {
119
- const node = this.nodeGroup.get(id)
120
- !node && console.warn(`No modal was found with the id "${id}"`)
121
- return node
122
- }
108
+ /**
109
+ * Removes a modal from the rendering stack. It tells to the lifecycle handler that a modal
110
+ * component is no longer used by the application.
111
+ *
112
+ * @param id
113
+ */
114
+ private remove = (id: string) => {
115
+ const savedNode = this.findNode(id);
116
+ savedNode &&
117
+ this.nodeGroup.set(id, { ...savedNode, lastVisualization: undefined });
118
+ this.update();
119
+ };
123
120
 
124
- /**
125
- * Makes a modal appears.
126
- *
127
- * @param id
128
- */
129
- public show = (id: string) => {
130
- const savedNode = this.findNode(id)
131
- savedNode && this.nodeGroup.set(id, { ...savedNode, visible: true, lastVisualization: new Date() })
132
- this.update()
133
- }
121
+ /**
122
+ * Find a modal node by id.
123
+ *
124
+ * @param id
125
+ */
126
+ private findNode = (id: string) => {
127
+ const node = this.nodeGroup.get(id);
128
+ !node && console.warn(`No modal was found with the id "${id}"`);
129
+ return node;
130
+ };
134
131
 
135
- /**
136
- * Makes a modal disappears.
137
- *
138
- * @param id
139
- */
140
- public close = (id: string) => {
141
- const savedNode = this.findNode(id)
142
- savedNode && this.nodeGroup.set(id, { ...savedNode, visible: false })
143
- this.update()
144
- }
132
+ /**
133
+ * Makes a modal appears.
134
+ *
135
+ * @param id
136
+ */
137
+ public show = (id: string) => {
138
+ const savedNode = this.findNode(id);
139
+ savedNode &&
140
+ this.nodeGroup.set(id, {
141
+ ...savedNode,
142
+ visible: true,
143
+ lastVisualization: new Date(),
144
+ });
145
+ this.update();
146
+ };
147
+
148
+ /**
149
+ * Makes a modal disappears.
150
+ *
151
+ * @param id
152
+ */
153
+ public close = (id: string) => {
154
+ const savedNode = this.findNode(id);
155
+ savedNode && this.nodeGroup.set(id, { ...savedNode, visible: false });
156
+ this.update();
157
+ };
145
158
  }
146
159
 
147
160
  /**
148
161
  * Creates a new ModalLifecycleHandlere instance.
149
- *
150
- * @returns
162
+ *
163
+ * @returns
151
164
  */
152
165
  export const createModalLifecycleHandler = () => {
153
- return new ModalLifecycleHandler()
154
- }
166
+ return new ModalLifecycleHandler();
167
+ };
@@ -1,7 +1,7 @@
1
- export * from './ModalGroupManager'
2
- export * from './ModalLifecycleHandler'
3
- export * from './ui/BaseModalView'
4
- export * from './ui/types'
5
- export * from './useModalManager'
6
- export * from './useLazyModalManager'
7
- export * from './useModalRemoteControl'
1
+ export * from './ModalGroupManager';
2
+ export * from './ModalLifecycleHandler';
3
+ export * from './ui/BaseModalView';
4
+ export * from './ui/types';
5
+ export * from './useModalManager';
6
+ export * from './useLazyModalManager';
7
+ export * from './useModalRemoteControl';
@@ -1,141 +1,164 @@
1
- import { BoxContent } from "@tecsinapse/react-core";
2
- import React, { FC, useCallback, useEffect, useRef, useState } from "react";
3
- import { Animated, Dimensions, Easing, Keyboard, LayoutChangeEvent, Pressable, StatusBar } from "react-native";
1
+ import { BoxContent } from '@tecsinapse/react-core';
2
+ import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
3
+ import {
4
+ Animated,
5
+ Dimensions,
6
+ Easing,
7
+ Keyboard,
8
+ LayoutChangeEvent,
9
+ Pressable,
10
+ StatusBar,
11
+ } from 'react-native';
4
12
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
5
- import { BackDropView, CloseBar, StyledPressableBackDrop } from "./styled";
6
- import { IBaseModal } from "./types";
13
+ import { BackDropView, CloseBar, StyledPressableBackDrop } from './styled';
14
+ import { IBaseModal } from './types';
7
15
 
8
- const BACKDROP_ALPHA = .65
9
- const INTERPOLATION_STEPS = 10
10
- const INTERPOLATION_DURATION = 195 //ms
11
- const OPACITY_DURATION = 25 //ms
16
+ const BACKDROP_ALPHA = 0.65;
17
+ const INTERPOLATION_STEPS = 10;
18
+ const INTERPOLATION_DURATION = 195; //ms
19
+ const OPACITY_DURATION = 25; //ms
12
20
 
13
21
  export const ModalView: FC<IBaseModal> = ({
14
- children,
15
- visible,
16
- BoxComponent = BoxContent,
17
- frozen,
18
- isLastShown,
19
- showCloseBar = true,
20
- close,
21
- onClose
22
+ children,
23
+ visible,
24
+ BoxComponent = BoxContent,
25
+ frozen,
26
+ isLastShown,
27
+ showCloseBar = true,
28
+ close,
29
+ onClose,
22
30
  }) => {
23
-
24
- const { bottom } = useSafeAreaInsets()
25
- const [ ready, setReady ] = useState(false)
26
- const [ keyboardOpened, setKeyboardOpened ] = useState(0)
27
- const [ boxHeight, setBoxHeight ] = useState(0)
28
- const backgroundCarrier = useRef(new Animated.Value(0)).current
29
- const translationCarrier = useRef(new Animated.Value(0)).current
30
- const opacityCarrier = useRef(new Animated.Value(0)).current
31
- const offset = isLastShown && keyboardOpened > 0 ? 0 : bottom
31
+ const { bottom } = useSafeAreaInsets();
32
+ const [ready, setReady] = useState(false);
33
+ const [keyboardOpened, setKeyboardOpened] = useState(0);
34
+ const [boxHeight, setBoxHeight] = useState(0);
35
+ const backgroundCarrier = useRef(new Animated.Value(0)).current;
36
+ const translationCarrier = useRef(new Animated.Value(0)).current;
37
+ const opacityCarrier = useRef(new Animated.Value(0)).current;
38
+ const offset = isLastShown && keyboardOpened > 0 ? 0 : bottom;
32
39
 
33
- const getKeyboardHeight = (keyboard: number) => {
34
- if (keyboard === 0) return 0
35
-
36
- let wHeight = Math.ceil(Dimensions.get('window').height)
37
- let sHeight = Math.ceil(Dimensions.get('screen').height)
38
- if (wHeight !== sHeight) {
39
- return keyboard + (sHeight - wHeight - (StatusBar.currentHeight || 0))
40
- }
41
- return keyboard
40
+ const getKeyboardHeight = (keyboard: number) => {
41
+ if (keyboard === 0) return 0;
42
+
43
+ const wHeight = Math.ceil(Dimensions.get('window').height);
44
+ const sHeight = Math.ceil(Dimensions.get('screen').height);
45
+ if (wHeight !== sHeight) {
46
+ return keyboard + (sHeight - wHeight - (StatusBar.currentHeight || 0));
42
47
  }
48
+ return keyboard;
49
+ };
50
+
51
+ const show = useCallback(() => {
52
+ Animated.sequence([
53
+ Animated.timing(backgroundCarrier, {
54
+ toValue: INTERPOLATION_STEPS,
55
+ duration: INTERPOLATION_DURATION,
56
+ easing: Easing.out(Easing.circle),
57
+ useNativeDriver: false,
58
+ }),
59
+ Animated.timing(opacityCarrier, {
60
+ toValue: 1,
61
+ duration: OPACITY_DURATION,
62
+ useNativeDriver: true,
63
+ }),
64
+ Animated.timing(translationCarrier, {
65
+ toValue: 0,
66
+ duration: INTERPOLATION_DURATION,
67
+ easing: Easing.out(Easing.circle),
68
+ useNativeDriver: true,
69
+ }),
70
+ ]).start();
71
+ }, []);
43
72
 
44
- const show = useCallback(() => {
45
- Animated.sequence([
46
- Animated.timing(backgroundCarrier, {
47
- toValue: INTERPOLATION_STEPS,
48
- duration: INTERPOLATION_DURATION,
49
- easing: Easing.out(Easing.circle),
50
- useNativeDriver: false
51
- }),
52
- Animated.timing(opacityCarrier, {
53
- toValue: 1,
54
- duration: OPACITY_DURATION,
55
- useNativeDriver: true
56
- }),
57
- Animated.timing(translationCarrier, {
58
- toValue: 0,
59
- duration: INTERPOLATION_DURATION,
60
- easing: Easing.out(Easing.circle),
61
- useNativeDriver: true
62
- })
63
- ]).start()
64
- }, [])
73
+ const hide = useCallback(
74
+ (to: number) => {
75
+ Animated.sequence([
76
+ Animated.parallel([
77
+ Animated.timing(translationCarrier, {
78
+ toValue: to,
79
+ duration: INTERPOLATION_DURATION,
80
+ easing: Easing.out(Easing.circle),
81
+ useNativeDriver: true,
82
+ }),
83
+ Animated.timing(opacityCarrier, {
84
+ toValue: 0,
85
+ duration: INTERPOLATION_DURATION,
86
+ useNativeDriver: true,
87
+ }),
88
+ ]),
89
+ Animated.timing(backgroundCarrier, {
90
+ toValue: 0,
91
+ duration: INTERPOLATION_DURATION,
92
+ easing: Easing.out(Easing.circle),
93
+ useNativeDriver: false,
94
+ }),
95
+ ]).start(onClose);
96
+ },
97
+ [onClose]
98
+ );
65
99
 
66
- const hide = useCallback((to: number) => {
67
- Animated.sequence([
68
- Animated.parallel([
69
- Animated.timing(translationCarrier, {
70
- toValue: to,
71
- duration: INTERPOLATION_DURATION,
72
- easing: Easing.out(Easing.circle),
73
- useNativeDriver: true
74
- }),
75
- Animated.timing(opacityCarrier, {
76
- toValue: 0,
77
- duration: INTERPOLATION_DURATION,
78
- useNativeDriver: true
79
- })
80
- ]),
81
- Animated.timing(backgroundCarrier, {
82
- toValue: 0,
83
- duration: INTERPOLATION_DURATION,
84
- easing: Easing.out(Easing.circle),
85
- useNativeDriver: false
86
- }),
87
- ]).start(onClose)
88
- }, [onClose])
100
+ const backgroundInterpolation = backgroundCarrier.interpolate({
101
+ inputRange: [0, INTERPOLATION_STEPS],
102
+ outputRange: ['rgba(0, 0, 0, 0)', `rgba(0, 0, 0, ${BACKDROP_ALPHA})`],
103
+ });
89
104
 
90
- const backgroundInterpolation = backgroundCarrier.interpolate({
91
- inputRange: [0, INTERPOLATION_STEPS],
92
- outputRange: ['rgba(0, 0, 0, 0)', `rgba(0, 0, 0, ${BACKDROP_ALPHA})`]
93
- })
105
+ const handleBoxLayoutChanges = useCallback(
106
+ (lce: LayoutChangeEvent) => {
107
+ const boxHeightEvent = lce.nativeEvent.layout.height;
108
+ setBoxHeight(boxHeightEvent);
94
109
 
95
- const handleBoxLayoutChanges = useCallback((lce: LayoutChangeEvent) => {
96
- let boxHeightEvent = lce.nativeEvent.layout.height
97
- setBoxHeight(boxHeightEvent)
98
-
99
- if (visible && !ready) {
100
- translationCarrier.setValue(boxHeightEvent)
101
- setReady(true)
102
- }
103
- }, [show, ready, visible, setReady])
110
+ if (visible && !ready) {
111
+ translationCarrier.setValue(boxHeightEvent);
112
+ setReady(true);
113
+ }
114
+ },
115
+ [show, ready, visible, setReady]
116
+ );
104
117
 
105
- useEffect(() => {
106
- if (visible && ready) requestAnimationFrame(() => show())
107
- if (!visible && !ready) {
108
- Keyboard.dismiss()
109
- requestAnimationFrame(() => hide(boxHeight))
110
- }
111
- if (!visible && ready) setReady(false)
112
- }, [ready, visible])
118
+ useEffect(() => {
119
+ if (visible && ready) requestAnimationFrame(() => show());
120
+ if (!visible && !ready) {
121
+ Keyboard.dismiss();
122
+ requestAnimationFrame(() => hide(boxHeight));
123
+ }
124
+ if (!visible && ready) setReady(false);
125
+ }, [ready, visible]);
113
126
 
114
- useEffect(() => {
115
- const showEvent = Keyboard.addListener('keyboardDidShow', (e) => setKeyboardOpened(e.endCoordinates.height))
116
- const hideEvent = Keyboard.addListener('keyboardDidHide', () => setKeyboardOpened(0))
117
- return () => {
118
- showEvent.remove()
119
- hideEvent.remove()
120
- }
121
- }, [])
127
+ useEffect(() => {
128
+ const showEvent = Keyboard.addListener('keyboardDidShow', e =>
129
+ setKeyboardOpened(e.endCoordinates.height)
130
+ );
131
+ const hideEvent = Keyboard.addListener('keyboardDidHide', () =>
132
+ setKeyboardOpened(0)
133
+ );
134
+ return () => {
135
+ showEvent.remove();
136
+ hideEvent.remove();
137
+ };
138
+ }, []);
122
139
 
123
- return (
124
- <StyledPressableBackDrop onPress={!frozen ? close : undefined}>
125
- <BackDropView style={{ backgroundColor: backgroundInterpolation }}>
126
- <Animated.View style={{
127
- paddingBottom: isLastShown ? getKeyboardHeight(keyboardOpened) : 0,
128
- opacity: opacityCarrier,
129
- transform: [{ translateY: translationCarrier }]
130
- }}>
131
- <Pressable>
132
- <BoxComponent onLayout={handleBoxLayoutChanges} style={{ paddingBottom: offset }} variant="bottom">
133
- {showCloseBar && <CloseBar/>}
134
- {children}
135
- </BoxComponent>
136
- </Pressable>
137
- </Animated.View>
138
- </BackDropView>
139
- </StyledPressableBackDrop>
140
- )
141
- }
140
+ return (
141
+ <StyledPressableBackDrop onPress={!frozen ? close : undefined}>
142
+ <BackDropView style={{ backgroundColor: backgroundInterpolation }}>
143
+ <Animated.View
144
+ style={{
145
+ paddingBottom: isLastShown ? getKeyboardHeight(keyboardOpened) : 0,
146
+ opacity: opacityCarrier,
147
+ transform: [{ translateY: translationCarrier }],
148
+ }}
149
+ >
150
+ <Pressable>
151
+ <BoxComponent
152
+ onLayout={handleBoxLayoutChanges}
153
+ style={{ paddingBottom: offset }}
154
+ variant="bottom"
155
+ >
156
+ {showCloseBar && <CloseBar />}
157
+ {children}
158
+ </BoxComponent>
159
+ </Pressable>
160
+ </Animated.View>
161
+ </BackDropView>
162
+ </StyledPressableBackDrop>
163
+ );
164
+ };
@@ -1,23 +1,23 @@
1
- import styled from "@emotion/native";
2
- import { RFValueStr, StyleProps } from "@tecsinapse/react-core";
3
- import { Animated } from "react-native";
1
+ import styled from '@emotion/native';
2
+ import { RFValueStr, StyleProps } from '@tecsinapse/react-core';
3
+ import { Animated } from 'react-native';
4
4
 
5
5
  export const StyledPressableBackDrop = styled.Pressable<Partial<StyleProps>>`
6
- flex: 1;
7
- position: absolute;
8
- width: 100%;
9
- height: 100%;
10
- `
6
+ flex: 1;
7
+ position: absolute;
8
+ width: 100%;
9
+ height: 100%;
10
+ `;
11
11
 
12
12
  export const BackDropView = styled(Animated.View)<Partial<StyleProps>>`
13
- justify-content: flex-end;
14
- flex: 1;
15
- `
13
+ justify-content: flex-end;
14
+ flex: 1;
15
+ `;
16
16
 
17
17
  export const CloseBar = styled.View<Partial<StyleProps>>`
18
- background-color: ${({ theme }) => theme.color.secondary.light};
19
- border-radius: ${RFValueStr('10px')};
20
- margin: ${`${RFValueStr('5px')} auto`};
21
- width: ${RFValueStr('42px')};
22
- height: ${RFValueStr('5px')};
23
- `
18
+ background-color: ${({ theme }) => theme.color.secondary.light};
19
+ border-radius: ${RFValueStr('10px')};
20
+ margin: ${`${RFValueStr('5px')} auto`};
21
+ width: ${RFValueStr('42px')};
22
+ height: ${RFValueStr('5px')};
23
+ `;