@codeleap/mobile 5.8.21 → 6.1.2

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 (326) hide show
  1. package/dist/Registry.js.map +1 -1
  2. package/dist/components/ActionIcon/index.d.ts +2 -3
  3. package/dist/components/ActionIcon/index.js +5 -11
  4. package/dist/components/ActionIcon/index.js.map +1 -1
  5. package/dist/components/ActivityIndicator/index.d.ts +2 -2
  6. package/dist/components/ActivityIndicator/index.js +2 -2
  7. package/dist/components/ActivityIndicator/index.js.map +1 -1
  8. package/dist/components/ActivityIndicator/types.d.ts +0 -1
  9. package/dist/components/Autocomplete/index.d.ts +2 -3
  10. package/dist/components/Autocomplete/index.js +15 -18
  11. package/dist/components/Autocomplete/index.js.map +1 -1
  12. package/dist/components/Autocomplete/types.d.ts +1 -2
  13. package/dist/components/Avatar/components/Badge.d.ts +1 -2
  14. package/dist/components/Avatar/components/Badge.js +2 -2
  15. package/dist/components/Avatar/components/Badge.js.map +1 -1
  16. package/dist/components/Avatar/components/Content.d.ts +1 -1
  17. package/dist/components/Avatar/components/Content.js +3 -7
  18. package/dist/components/Avatar/components/Content.js.map +1 -1
  19. package/dist/components/Avatar/components/Illustration.d.ts +1 -2
  20. package/dist/components/Avatar/components/Illustration.js +2 -5
  21. package/dist/components/Avatar/components/Illustration.js.map +1 -1
  22. package/dist/components/Avatar/components/OverlayIcon.d.ts +1 -2
  23. package/dist/components/Avatar/components/OverlayIcon.js +2 -3
  24. package/dist/components/Avatar/components/OverlayIcon.js.map +1 -1
  25. package/dist/components/Avatar/components/Text.d.ts +1 -2
  26. package/dist/components/Avatar/components/Text.js +2 -1
  27. package/dist/components/Avatar/components/Text.js.map +1 -1
  28. package/dist/components/Avatar/components/Wrapper.d.ts +1 -2
  29. package/dist/components/Avatar/components/Wrapper.js +3 -6
  30. package/dist/components/Avatar/components/Wrapper.js.map +1 -1
  31. package/dist/components/Avatar/context.d.ts +108 -111
  32. package/dist/components/Avatar/context.js.map +1 -1
  33. package/dist/components/Avatar/index.d.ts +6 -7
  34. package/dist/components/Avatar/index.js +2 -6
  35. package/dist/components/Avatar/index.js.map +1 -1
  36. package/dist/components/AvatarGroup/index.d.ts +2 -3
  37. package/dist/components/AvatarGroup/index.js +2 -4
  38. package/dist/components/AvatarGroup/index.js.map +1 -1
  39. package/dist/components/Backdrop/index.d.ts +2 -3
  40. package/dist/components/Backdrop/index.js +4 -8
  41. package/dist/components/Backdrop/index.js.map +1 -1
  42. package/dist/components/Badge/index.d.ts +2 -3
  43. package/dist/components/Badge/index.js +5 -9
  44. package/dist/components/Badge/index.js.map +1 -1
  45. package/dist/components/Badge/types.d.ts +1 -2
  46. package/dist/components/Button/index.js +3 -9
  47. package/dist/components/Button/index.js.map +1 -1
  48. package/dist/components/Calendar/index.d.ts +2 -3
  49. package/dist/components/Calendar/index.js +5 -4
  50. package/dist/components/Calendar/index.js.map +1 -1
  51. package/dist/components/CalendarInput/index.d.ts +2 -3
  52. package/dist/components/CalendarInput/index.js +11 -12
  53. package/dist/components/CalendarInput/index.js.map +1 -1
  54. package/dist/components/Checkbox/index.d.ts +2 -3
  55. package/dist/components/Checkbox/index.js +9 -15
  56. package/dist/components/Checkbox/index.js.map +1 -1
  57. package/dist/components/Collapse/index.d.ts +6 -0
  58. package/dist/components/Collapse/index.js +42 -0
  59. package/dist/components/Collapse/index.js.map +1 -0
  60. package/dist/components/Collapse/types.d.ts +14 -0
  61. package/dist/components/Collapse/types.js.map +1 -0
  62. package/dist/components/DatePickerModal/index.d.ts +2 -3
  63. package/dist/components/DatePickerModal/index.js +13 -21
  64. package/dist/components/DatePickerModal/index.js.map +1 -1
  65. package/dist/components/EmptyPlaceholder/components/Button.d.ts +1 -2
  66. package/dist/components/EmptyPlaceholder/components/Button.js +2 -2
  67. package/dist/components/EmptyPlaceholder/components/Button.js.map +1 -1
  68. package/dist/components/EmptyPlaceholder/components/Content.d.ts +1 -1
  69. package/dist/components/EmptyPlaceholder/components/Content.js +6 -8
  70. package/dist/components/EmptyPlaceholder/components/Content.js.map +1 -1
  71. package/dist/components/EmptyPlaceholder/components/Illustration.d.ts +1 -2
  72. package/dist/components/EmptyPlaceholder/components/Illustration.js +2 -5
  73. package/dist/components/EmptyPlaceholder/components/Illustration.js.map +1 -1
  74. package/dist/components/EmptyPlaceholder/components/Info.d.ts +1 -2
  75. package/dist/components/EmptyPlaceholder/components/Info.js +2 -5
  76. package/dist/components/EmptyPlaceholder/components/Info.js.map +1 -1
  77. package/dist/components/EmptyPlaceholder/components/Loading.d.ts +1 -2
  78. package/dist/components/EmptyPlaceholder/components/Loading.js +3 -4
  79. package/dist/components/EmptyPlaceholder/components/Loading.js.map +1 -1
  80. package/dist/components/EmptyPlaceholder/context.d.ts +4 -5
  81. package/dist/components/EmptyPlaceholder/context.js.map +1 -1
  82. package/dist/components/EmptyPlaceholder/index.d.ts +5 -6
  83. package/dist/components/EmptyPlaceholder/index.js +2 -6
  84. package/dist/components/EmptyPlaceholder/index.js.map +1 -1
  85. package/dist/components/FileInput/index.d.ts +1 -1
  86. package/dist/components/FileInput/index.js +1 -1
  87. package/dist/components/FileInput/index.js.map +1 -1
  88. package/dist/components/Grid/index.js +11 -10
  89. package/dist/components/Grid/index.js.map +1 -1
  90. package/dist/components/Grid/types.d.ts +0 -1
  91. package/dist/components/Icon/index.d.ts +1 -2
  92. package/dist/components/Icon/index.js +3 -5
  93. package/dist/components/Icon/index.js.map +1 -1
  94. package/dist/components/Image/index.js +9 -15
  95. package/dist/components/Image/index.js.map +1 -1
  96. package/dist/components/Image/types.d.ts +1 -2
  97. package/dist/components/ImageView/Spotlight.d.ts +4 -4
  98. package/dist/components/ImageView/Spotlight.js +4 -5
  99. package/dist/components/ImageView/Spotlight.js.map +1 -1
  100. package/dist/components/ImageView/component.d.ts +1 -2
  101. package/dist/components/ImageView/component.js +4 -2
  102. package/dist/components/ImageView/component.js.map +1 -1
  103. package/dist/components/InputBase/index.js +3 -16
  104. package/dist/components/InputBase/index.js.map +1 -1
  105. package/dist/components/InputBase/types.d.ts +3 -4
  106. package/dist/components/InputBase/useInputBase.d.ts +2 -3
  107. package/dist/components/InputBase/useInputBase.js +1 -1
  108. package/dist/components/InputBase/useInputBase.js.map +1 -1
  109. package/dist/components/InputBase/useInputBasePartialStyles.js.map +1 -1
  110. package/dist/components/InputOverlay/index.d.ts +3 -4
  111. package/dist/components/InputOverlay/index.js +6 -21
  112. package/dist/components/InputOverlay/index.js.map +1 -1
  113. package/dist/components/InputOverlay/store.js.map +1 -1
  114. package/dist/components/List/index.js +5 -4
  115. package/dist/components/List/index.js.map +1 -1
  116. package/dist/components/List/types.d.ts +0 -1
  117. package/dist/components/LoadingOverlay/index.d.ts +2 -3
  118. package/dist/components/LoadingOverlay/index.js +5 -7
  119. package/dist/components/LoadingOverlay/index.js.map +1 -1
  120. package/dist/components/Modal/index.d.ts +2 -3
  121. package/dist/components/Modal/index.js +13 -39
  122. package/dist/components/Modal/index.js.map +1 -1
  123. package/dist/components/Modal/types.d.ts +0 -1
  124. package/dist/components/NumberIncrement/index.js +5 -7
  125. package/dist/components/NumberIncrement/index.js.map +1 -1
  126. package/dist/components/NumberIncrement/useNumberIncrement.d.ts +3 -4
  127. package/dist/components/NumberIncrement/useNumberIncrement.js.map +1 -1
  128. package/dist/components/Pager/PagerDots.d.ts +1 -2
  129. package/dist/components/Pager/PagerDots.js +3 -6
  130. package/dist/components/Pager/PagerDots.js.map +1 -1
  131. package/dist/components/Pager/PagerItem.d.ts +1 -2
  132. package/dist/components/Pager/PagerItem.js +3 -2
  133. package/dist/components/Pager/PagerItem.js.map +1 -1
  134. package/dist/components/Pager/index.d.ts +2 -3
  135. package/dist/components/Pager/index.js +9 -16
  136. package/dist/components/Pager/index.js.map +1 -1
  137. package/dist/components/Pager/types.d.ts +2 -2
  138. package/dist/components/PaginationIndicator/index.d.ts +2 -3
  139. package/dist/components/PaginationIndicator/index.js +3 -3
  140. package/dist/components/PaginationIndicator/index.js.map +1 -1
  141. package/dist/components/PaginationIndicator/types.d.ts +2 -3
  142. package/dist/components/PlacesAutocomplete/index.d.ts +6 -7
  143. package/dist/components/PlacesAutocomplete/index.js +11 -17
  144. package/dist/components/PlacesAutocomplete/index.js.map +1 -1
  145. package/dist/components/PlacesAutocomplete/types.d.ts +3 -4
  146. package/dist/components/RadioInput/index.d.ts +2 -3
  147. package/dist/components/RadioInput/index.js +4 -22
  148. package/dist/components/RadioInput/index.js.map +1 -1
  149. package/dist/components/RefreshControl/index.d.ts +2 -3
  150. package/dist/components/RefreshControl/index.js +2 -2
  151. package/dist/components/RefreshControl/index.js.map +1 -1
  152. package/dist/components/Scroll/index.d.ts +2 -3
  153. package/dist/components/Scroll/index.js +9 -12
  154. package/dist/components/Scroll/index.js.map +1 -1
  155. package/dist/components/SearchInput/index.d.ts +7 -4
  156. package/dist/components/SearchInput/index.js +4 -3
  157. package/dist/components/SearchInput/index.js.map +1 -1
  158. package/dist/components/SectionFilters/context.d.ts +3 -24
  159. package/dist/components/SectionFilters/index.d.ts +1 -2
  160. package/dist/components/SectionFilters/index.js +5 -7
  161. package/dist/components/SectionFilters/index.js.map +1 -1
  162. package/dist/components/SectionFilters/useSectionFilters.js.map +1 -1
  163. package/dist/components/Sections/index.d.ts +2 -3
  164. package/dist/components/Sections/index.js +5 -4
  165. package/dist/components/Sections/index.js.map +1 -1
  166. package/dist/components/Sections/types.d.ts +0 -1
  167. package/dist/components/SegmentedControl/Option.d.ts +1 -1
  168. package/dist/components/SegmentedControl/Option.js +7 -13
  169. package/dist/components/SegmentedControl/Option.js.map +1 -1
  170. package/dist/components/SegmentedControl/index.js +16 -26
  171. package/dist/components/SegmentedControl/index.js.map +1 -1
  172. package/dist/components/SegmentedControl/types.d.ts +2 -3
  173. package/dist/components/Select/index.d.ts +2 -3
  174. package/dist/components/Select/index.js +20 -25
  175. package/dist/components/Select/index.js.map +1 -1
  176. package/dist/components/Select/types.d.ts +2 -3
  177. package/dist/components/Slider/index.d.ts +2 -3
  178. package/dist/components/Slider/index.js +23 -38
  179. package/dist/components/Slider/index.js.map +1 -1
  180. package/dist/components/Slider/types.d.ts +0 -1
  181. package/dist/components/SortablePhotos/index.d.ts +2 -3
  182. package/dist/components/SortablePhotos/index.js +7 -18
  183. package/dist/components/SortablePhotos/index.js.map +1 -1
  184. package/dist/components/SortablePhotos/useSortablePhotos.d.ts +0 -2
  185. package/dist/components/SortablePhotos/useSortablePhotos.js.map +1 -1
  186. package/dist/components/Switch/index.d.ts +2 -3
  187. package/dist/components/Switch/index.js +9 -13
  188. package/dist/components/Switch/index.js.map +1 -1
  189. package/dist/components/Tabs/Context.d.ts +2 -3
  190. package/dist/components/Tabs/Context.js +2 -1
  191. package/dist/components/Tabs/Context.js.map +1 -1
  192. package/dist/components/Tabs/Panel.d.ts +1 -1
  193. package/dist/components/Tabs/Panel.js +3 -5
  194. package/dist/components/Tabs/Panel.js.map +1 -1
  195. package/dist/components/Tabs/Tab.d.ts +1 -2
  196. package/dist/components/Tabs/Tab.js +12 -16
  197. package/dist/components/Tabs/Tab.js.map +1 -1
  198. package/dist/components/Tabs/TabList.d.ts +1 -2
  199. package/dist/components/Tabs/TabList.js +2 -1
  200. package/dist/components/Tabs/TabList.js.map +1 -1
  201. package/dist/components/Tabs/index.d.ts +197 -192
  202. package/dist/components/Tabs/index.js +2 -6
  203. package/dist/components/Tabs/index.js.map +1 -1
  204. package/dist/components/Text/index.js +5 -7
  205. package/dist/components/Text/index.js.map +1 -1
  206. package/dist/components/Text/types.d.ts +2 -2
  207. package/dist/components/TextInput/index.js +13 -14
  208. package/dist/components/TextInput/index.js.map +1 -1
  209. package/dist/components/TextInput/types.d.ts +0 -1
  210. package/dist/components/TextInput/useTextInput.d.ts +2 -3
  211. package/dist/components/TimeInput/index.d.ts +2 -3
  212. package/dist/components/TimeInput/index.js +8 -12
  213. package/dist/components/TimeInput/index.js.map +1 -1
  214. package/dist/components/Touchable/index.js +5 -10
  215. package/dist/components/Touchable/index.js.map +1 -1
  216. package/dist/components/Touchable/types.d.ts +0 -1
  217. package/dist/components/View/index.d.ts +4 -6
  218. package/dist/components/View/index.js +4 -3
  219. package/dist/components/View/index.js.map +1 -1
  220. package/dist/components/View/types.d.ts +2 -3
  221. package/dist/components/components.d.ts +1 -0
  222. package/dist/components/components.js +1 -0
  223. package/dist/components/components.js.map +1 -1
  224. package/dist/index.d.ts +0 -1
  225. package/dist/index.js +0 -1
  226. package/dist/index.js.map +1 -1
  227. package/dist/modules/PressableRipple/ripple.d.ts +2 -2
  228. package/dist/modules/PressableRipple/ripple.js +4 -11
  229. package/dist/modules/PressableRipple/ripple.js.map +1 -1
  230. package/dist/modules/PressableRipple/styles.d.ts +5 -5
  231. package/dist/modules/backgroundTimer.js.map +1 -1
  232. package/dist/modules/reactNavigation.js.map +1 -1
  233. package/dist/modules/scroll.d.ts +3 -3
  234. package/dist/modules/scroll.js +3 -4
  235. package/dist/modules/scroll.js.map +1 -1
  236. package/dist/modules/textInputMask.d.ts +1 -2
  237. package/dist/types/index.d.ts +2 -3
  238. package/dist/types/utility.d.ts +2 -2
  239. package/dist/utils/NotificationManager/index.js.map +1 -1
  240. package/dist/utils/OSAlert.js.map +1 -1
  241. package/dist/utils/StorageManager.js.map +1 -1
  242. package/dist/utils/Subscription.js.map +1 -1
  243. package/dist/utils/hooks.d.ts +3 -3
  244. package/dist/utils/hooks.js.map +1 -1
  245. package/dist/utils/input.d.ts +1 -1
  246. package/dist/utils/input.js.map +1 -1
  247. package/dist/utils/misc.d.ts +0 -1
  248. package/dist/utils/misc.js.map +1 -1
  249. package/dist/utils/useQueryListRefresh.js.map +1 -1
  250. package/package.json +30 -32
  251. package/package.json.bak +14 -16
  252. package/src/components/Autocomplete/types.ts +1 -1
  253. package/src/components/Badge/types.ts +1 -1
  254. package/src/components/Collapse/index.tsx +70 -0
  255. package/src/components/Collapse/types.ts +16 -0
  256. package/src/components/FileInput/index.tsx +2 -2
  257. package/src/components/Image/types.ts +1 -1
  258. package/src/components/ImageView/Spotlight.tsx +2 -2
  259. package/src/components/ImageView/component.tsx +1 -0
  260. package/src/components/InputBase/types.ts +3 -3
  261. package/src/components/InputBase/useInputBase.ts +1 -1
  262. package/src/components/Pager/PagerItem.tsx +1 -1
  263. package/src/components/Pager/index.tsx +1 -0
  264. package/src/components/Pager/types.ts +1 -1
  265. package/src/components/PaginationIndicator/types.ts +2 -2
  266. package/src/components/PlacesAutocomplete/types.ts +3 -3
  267. package/src/components/Scroll/index.tsx +1 -1
  268. package/src/components/SearchInput/index.tsx +7 -3
  269. package/src/components/SectionFilters/index.tsx +1 -1
  270. package/src/components/SegmentedControl/types.ts +2 -2
  271. package/src/components/Select/types.ts +2 -2
  272. package/src/components/Slider/index.tsx +1 -0
  273. package/src/components/Text/types.ts +2 -2
  274. package/src/components/View/index.tsx +1 -1
  275. package/src/components/View/types.ts +2 -2
  276. package/src/components/components.ts +2 -1
  277. package/src/index.ts +0 -1
  278. package/src/modules/scroll.tsx +1 -1
  279. package/src/types/index.ts +2 -2
  280. package/src/types/utility.ts +2 -2
  281. package/src/utils/hooks.ts +3 -3
  282. package/dist/deprecated/index.d.ts +0 -2
  283. package/dist/deprecated/index.js +0 -5
  284. package/dist/deprecated/index.js.map +0 -1
  285. package/dist/deprecated/modals/Context.d.ts +0 -48
  286. package/dist/deprecated/modals/Context.js +0 -187
  287. package/dist/deprecated/modals/Context.js.map +0 -1
  288. package/dist/deprecated/modals/components.d.ts +0 -15
  289. package/dist/deprecated/modals/components.js +0 -53
  290. package/dist/deprecated/modals/components.js.map +0 -1
  291. package/dist/deprecated/modals/index.d.ts +0 -10
  292. package/dist/deprecated/modals/index.js +0 -9
  293. package/dist/deprecated/modals/index.js.map +0 -1
  294. package/dist/deprecated/permissions/Context.d.ts +0 -53
  295. package/dist/deprecated/permissions/Context.js +0 -208
  296. package/dist/deprecated/permissions/Context.js.map +0 -1
  297. package/dist/deprecated/permissions/index.d.ts +0 -5
  298. package/dist/deprecated/permissions/index.js +0 -4
  299. package/dist/deprecated/permissions/index.js.map +0 -1
  300. package/dist/deprecated/permissions/package/Manager.d.ts +0 -23
  301. package/dist/deprecated/permissions/package/Manager.js +0 -84
  302. package/dist/deprecated/permissions/package/Manager.js.map +0 -1
  303. package/dist/deprecated/permissions/package/Permission.d.ts +0 -19
  304. package/dist/deprecated/permissions/package/Permission.js +0 -65
  305. package/dist/deprecated/permissions/package/Permission.js.map +0 -1
  306. package/dist/deprecated/permissions/package/index.d.ts +0 -3
  307. package/dist/deprecated/permissions/package/index.js +0 -5
  308. package/dist/deprecated/permissions/package/index.js.map +0 -1
  309. package/dist/deprecated/permissions/package/types.d.ts +0 -31
  310. package/dist/deprecated/permissions/package/types.js +0 -2
  311. package/dist/deprecated/permissions/package/types.js.map +0 -1
  312. package/dist/deprecated/permissions/types.d.ts +0 -16
  313. package/dist/deprecated/permissions/types.js.map +0 -1
  314. package/mobile-packages.code-workspace +0 -27
  315. package/src/deprecated/index.ts +0 -2
  316. package/src/deprecated/modals/Context.tsx +0 -259
  317. package/src/deprecated/modals/components.tsx +0 -84
  318. package/src/deprecated/modals/index.ts +0 -13
  319. package/src/deprecated/permissions/Context.tsx +0 -316
  320. package/src/deprecated/permissions/index.ts +0 -16
  321. package/src/deprecated/permissions/package/Manager.ts +0 -123
  322. package/src/deprecated/permissions/package/Permission.ts +0 -79
  323. package/src/deprecated/permissions/package/index.ts +0 -3
  324. package/src/deprecated/permissions/package/types.ts +0 -43
  325. package/src/deprecated/permissions/types.ts +0 -27
  326. /package/dist/{deprecated/permissions → components/Collapse}/types.js +0 -0
@@ -1,259 +0,0 @@
1
- import React from 'react'
2
- import { AnyFunction, TypeGuards } from '@codeleap/types'
3
- import { onUpdate, useState } from '@codeleap/hooks'
4
- import { PortalProvider } from '@gorhom/portal'
5
-
6
- export type AppModalProps = {
7
- visible: boolean
8
- attachments: string[]
9
- attachedTo: string[]
10
- props?: any
11
- }
12
- type TModalState = AppModalProps
13
- type ModalTransitionOptions = {
14
- duration?: number
15
- props?: any
16
- }
17
-
18
- type TModalContext = {
19
- state: Record<string, TModalState>
20
- toggleModal: (name: string, setTo?: boolean, props?: any) => void
21
- setModal: (name: string, to: Partial<TModalState>) => void
22
- currentModal: string
23
- isVisible: (name: string) => boolean
24
- transition: (from: string, to: string, options?: ModalTransitionOptions) => Promise<void>
25
- attach: (modal: string, to: string) => void
26
- remove(name: string): void
27
- transitionDuration: number
28
- }
29
-
30
- const ModalContext = React.createContext({} as TModalContext)
31
-
32
- export function Provider({ children }) {
33
- const [modals, setModals] = useState<TModalContext['state']>({})
34
- const currentModal = Object.keys(modals).find(name => modals[name].visible)
35
-
36
- function isVisible(name: string) {
37
- return !!modals[name]?.visible
38
- }
39
-
40
- const toggleModal: TModalContext['toggleModal'] = (name, set?: boolean, props?: any) => {
41
- const visible = isVisible(name)
42
-
43
- const newVisible = typeof set === 'boolean' ? set : !visible
44
-
45
- setModals((current) => {
46
- const attached = newVisible ? [] : current[name]?.attachments?.map?.(m => [m, { ...current[m], visible: false }])
47
- return {
48
- ...current,
49
- [name]: {
50
- ...current[name],
51
- visible: newVisible,
52
- props,
53
- },
54
- ...Object.fromEntries(attached ?? []),
55
- }
56
-
57
- })
58
- }
59
-
60
- const setModal: TModalContext['setModal'] = (name, to) => {
61
-
62
- setModals((current) => ({
63
- ...current,
64
- [name]: {
65
- ...current[name],
66
- ...to,
67
- },
68
- }))
69
-
70
- }
71
-
72
- // const codeleapCtx = useCodeleapContext()
73
- const defaultDuration = 300
74
- const transition: TModalContext['transition'] = (from, to, options) => {
75
- return new Promise((resolve) => {
76
- setTimeout(() => {
77
-
78
- if (!from) {
79
- toggleModal(to, true, options?.props)
80
- return
81
- }
82
- const _options: ModalTransitionOptions = {
83
- duration: defaultDuration,
84
- ...options,
85
- }
86
-
87
- const toVisible = isVisible(to)
88
- const fromVisible = isVisible(from)
89
-
90
- // if (!fromVisible && !toVisible) {
91
- // toggleModal(to, true, options?.props)
92
- // return
93
- // }
94
-
95
- toggleModal(from, false)
96
- setTimeout(() => {
97
-
98
- toggleModal(to, true, options?.props)
99
-
100
- resolve()
101
- }, _options.duration)
102
-
103
- })
104
- })
105
- }
106
-
107
- function attach(modal: string, to: string) {
108
- setModals((modals) => {
109
- const toModal = modals[to]
110
- const _modal = modals[modal]
111
- if (!toModal || !_modal) return modals
112
-
113
- const isAttached = toModal.attachments.includes(modal) || _modal.attachedTo.includes(to)
114
-
115
- const newVal = { ...modals }
116
- if (isAttached) {
117
-
118
- newVal[to].attachments = newVal[to].attachments.filter(x => x !== modal)
119
- newVal[modal].attachedTo = newVal[modal].attachedTo.filter(x => x !== to)
120
-
121
- } else {
122
-
123
- newVal[to].attachments.push(modal)
124
- newVal[modal].attachedTo.push(to)
125
-
126
- }
127
- return newVal
128
- })
129
- }
130
-
131
- function remove(id: string) {
132
- const newModals = { ...modals }
133
-
134
- delete newModals[id]
135
-
136
- setModals(newModals)
137
- }
138
-
139
- return (
140
- <ModalContext.Provider value={{
141
- state: modals,
142
- toggleModal,
143
- setModal,
144
- currentModal,
145
- attach,
146
- isVisible,
147
- remove,
148
- transition,
149
- transitionDuration: defaultDuration,
150
-
151
- }}>
152
- <PortalProvider>
153
-
154
- {children}
155
- </PortalProvider>
156
- </ModalContext.Provider>
157
- )
158
- }
159
-
160
- export function useModalContext() {
161
- const context = React.useContext(ModalContext)
162
- return context
163
- }
164
-
165
- export type UseModalSequenceOptions = {
166
- onFinish?: AnyFunction
167
- resetOnFinish?: boolean
168
- closeLastOnFinish?: boolean
169
- waitForLastToCloseBeforeCallingFinish?: boolean
170
- transitionOpts?: Partial<Parameters<TModalContext['transition']>[2]>
171
- autoOpen?: boolean
172
- }
173
-
174
- export function useModalSequence(ids: string[], options?: UseModalSequenceOptions) {
175
-
176
- const _options: UseModalSequenceOptions = {
177
- closeLastOnFinish: true,
178
- onFinish: () => { },
179
- resetOnFinish: false,
180
- waitForLastToCloseBeforeCallingFinish: true,
181
- ...options,
182
- }
183
-
184
- const modals = useModalContext()
185
- const [idx, setIdx] = useState(0)
186
-
187
- const state = {
188
- currentId: ids[idx],
189
- nextId: ids[idx + 1],
190
- previousId: ids[idx - 1],
191
- }
192
-
193
- onUpdate(() => {
194
- if (_options.autoOpen && typeof ids?.[0] === 'number') {
195
- if (!modals.isVisible(ids[0])) {
196
- modals.toggleModal(ids[0])
197
- }
198
- }
199
- }, [_options.autoOpen, ids?.[0]])
200
-
201
- function next(props?: any) {
202
- if (idx === ids.length - 1) {
203
- if (_options.closeLastOnFinish) {
204
- modals.transition(ids[idx], null).then(() => {
205
- if (_options.waitForLastToCloseBeforeCallingFinish) {
206
- _options.onFinish()
207
- }
208
- })
209
- }
210
- if (_options.resetOnFinish) {
211
- reset()
212
- }
213
- if (!(_options.waitForLastToCloseBeforeCallingFinish && _options.closeLastOnFinish)) {
214
- _options.onFinish()
215
- }
216
- return
217
- } else {
218
- if (!state.nextId) return
219
- modals.transition(ids[idx], state.nextId, props)
220
- setIdx(i => i + 1)
221
- }
222
- }
223
- function previous(props?: any) {
224
- if (!state.previousId) return
225
-
226
- modals.transition(ids[idx], state.previousId, props)
227
- setIdx(i => i - 1)
228
-
229
- }
230
-
231
- function goto(idxOrId: string | number, props?: any) {
232
- let newId: string = null
233
- if (TypeGuards.isString(idxOrId)) {
234
- newId = idxOrId
235
-
236
- } else {
237
- newId = ids[idxOrId]
238
- }
239
- modals.transition(ids[idx], newId, {
240
- props,
241
- })
242
- setIdx(ids.indexOf(newId))
243
- }
244
- function reset() {
245
- setIdx(0)
246
- }
247
-
248
- return {
249
- reset,
250
- next,
251
- previous,
252
- setModal: setIdx,
253
- goto,
254
- currentIdx: idx,
255
- ...state,
256
-
257
- }
258
-
259
- }
@@ -1,84 +0,0 @@
1
- import React from 'react'
2
- import { usePrevious, onMount, onUpdate } from '@codeleap/hooks'
3
- import { PropsOf } from '@codeleap/types'
4
- import { useModalContext } from './Context'
5
- import { Portal } from '@gorhom/portal'
6
- import { Modal as _Modal } from '../../components/Modal'
7
-
8
- type UseManagedModalArgs = {
9
- id?: string
10
- initialVisible?: boolean
11
- parent?: string
12
- visible?: boolean
13
- toggle?: PropsOf<typeof _Modal>['toggle']
14
- }
15
-
16
- function useManagedModal(props: UseManagedModalArgs) {
17
- const {
18
- initialVisible = false,
19
- parent,
20
- id,
21
- } = props
22
- const modalId = id
23
- const modals = useModalContext()
24
-
25
- onMount(() => {
26
- if (!modalId) return
27
- modals.setModal(modalId, {
28
- attachedTo: [],
29
- attachments: [],
30
- visible: initialVisible,
31
- })
32
- })
33
-
34
- const prevParent = usePrevious(parent)
35
-
36
- onUpdate(() => {
37
- if (!modalId) return
38
- if (!!parent || !!prevParent) {
39
- modals.attach(modalId, parent)
40
- }
41
- }, [parent])
42
-
43
- const visible = modalId ? modals.isVisible(modalId) : props.visible
44
-
45
- const ctxProps = modals?.state?.[modalId]?.props
46
-
47
- const componentProps = {
48
- ...props, ...ctxProps, visible: visible, toggle: () => {
49
- if (modalId) {
50
- modals.toggleModal(modalId)
51
- } else {
52
- props?.toggle?.()
53
- }
54
- },
55
- }
56
-
57
- return componentProps
58
- }
59
- export type ManagedModalProps<T = PropsOf<typeof _Modal>> = Omit<T, 'visible' | 'toggle'> & UseManagedModalArgs & {
60
-
61
- absolute?: boolean
62
-
63
- }
64
- export const Modal: React.FC<ManagedModalProps> = ({
65
- children,
66
- absolute = true,
67
- ...props
68
- }) => {
69
- const componentProps = useManagedModal(props)
70
-
71
- const content = (
72
- <_Modal {...componentProps}>
73
- {children}
74
- </_Modal>
75
- )
76
-
77
- if (absolute) {
78
- return <Portal>
79
- {content}
80
- </Portal>
81
- }
82
-
83
- return content
84
- }
@@ -1,13 +0,0 @@
1
- import { useModalContext, useModalSequence, Provider } from './Context'
2
- import { Modal, ManagedModalProps } from './components'
3
-
4
- export const ModalManager = {
5
- useModalContext,
6
- Modal,
7
- Provider,
8
- useModalSequence,
9
- }
10
-
11
- export type {
12
- ManagedModalProps,
13
- }
@@ -1,316 +0,0 @@
1
- import React, { useContext, useState } from 'react'
2
- import { onMount, onUpdate, useDebounce, usePrevious } from '@codeleap/hooks'
3
- import { deepEqual } from '@codeleap/utils'
4
- import { AppState, Linking } from 'react-native'
5
- import { PermissionConfig, PermissionModalsConfig } from './types'
6
- import { PermissionManager, PermissionTypes } from './package'
7
- import { useModalContext } from '../modals/Context'
8
-
9
- type TPermissionContext = {
10
- state: Record<string, PermissionTypes.PermissionStatus>
11
- modalConfig: PermissionModalsConfig<any>
12
- manager: PermissionManager<any, any>
13
- setState: (forPermission: string, status: PermissionTypes.PermissionState) => void
14
- }
15
-
16
- const PermissionContext = React.createContext({} as TPermissionContext)
17
-
18
- type PermissionProviderProps = {
19
- children: React.ReactElement
20
- AppPermissions: PermissionManager<any, any>
21
- modalConfig: PermissionModalsConfig<any>
22
- }
23
- type PermissionsRecord = PermissionManager<any, any>['values']
24
- function getStatuses(state: PermissionsRecord) {
25
- const statuses = Object.entries(state).map(([k, v]) => [k, v.status])
26
- return Object.fromEntries(statuses)
27
- }
28
-
29
- export function Provider({ children, AppPermissions, modalConfig }: PermissionProviderProps) {
30
-
31
- const [state, setState] = useState(() => getStatuses(AppPermissions.values))
32
-
33
- onMount(() => {
34
-
35
- AppState.addEventListener('change', (state) => {
36
- if (state === 'active') {
37
- AppPermissions.update().then((vals) => {
38
- const statuses = getStatuses(vals)
39
- if (!deepEqual(statuses, state)) {
40
- setState({ ...statuses })
41
- }
42
- })
43
- }
44
- })
45
-
46
- })
47
-
48
- const setPermissionState = (forPermission: string, status: PermissionTypes.PermissionState) => {
49
- setState({
50
- ...state,
51
- [forPermission]: status
52
- })
53
- }
54
-
55
-
56
- return <PermissionContext.Provider value={{
57
- state,
58
- modalConfig: modalConfig,
59
- manager: AppPermissions,
60
- setState: setPermissionState
61
- }}>
62
- {children}
63
- </PermissionContext.Provider>
64
- }
65
-
66
- type TAskManyResults<T extends string> = Record<T, PermissionTypes.PermissionStatus> & {
67
- overall
68
- : PermissionTypes.PermissionStatus
69
- }
70
-
71
- type AskManyOpts<T extends string | number | symbol> = {
72
- breakOnDenied?: T[]
73
- }
74
-
75
- export type UsePermissions<
76
- _PermissionNames extends string,
77
- PermissionNames extends string = `${_PermissionNames}?` | _PermissionNames> = () => TPermissionContext & {
78
- askPermission: (name: PermissionNames, onResolve?: (status: PermissionTypes.PermissionStatus) => any) => Promise<PermissionTypes.PermissionStatus>
79
- askMany<T extends PermissionNames, R = TAskManyResults<T>>(
80
- perms: T[],
81
- onResolve?: (res: R) => any,
82
- options?: AskManyOpts<T>
83
- ): Promise<
84
- R
85
- >
86
- }
87
-
88
- export const usePermissions: UsePermissions<any> = () => {
89
- const modalCtx = useModalContext()
90
- const permissionCtx = useContext(PermissionContext)
91
-
92
- function askPermission(name: string, onResolve?: (status: PermissionTypes.PermissionStatus, modalName?: string) => any) {
93
- return new Promise<PermissionTypes.PermissionStatus>((resolve, reject) => {
94
- permissionCtx.manager.get(name, {
95
- ask: false,
96
- askOnDenied: false,
97
- askOnPending: false,
98
- }).then(status => {
99
- const permissionModalName = `permissions.${name}`
100
-
101
- if (!status.isGranted) {
102
-
103
- modalCtx.toggleModal(permissionModalName, true, {
104
- onPermissionResolve: (status) => {
105
- modalCtx.toggleModal(permissionModalName, false, {})
106
- setTimeout(() => {
107
- onResolve?.(status, permissionModalName)
108
-
109
- resolve(status)
110
- }, modalCtx.transitionDuration)
111
- },
112
- })
113
-
114
- } else {
115
- onResolve?.(status.status as unknown as PermissionTypes.PermissionStatus)
116
- resolve(status)
117
- }
118
- })
119
- })
120
-
121
- }
122
-
123
- const askMany = async (
124
- perms: any[],
125
- onResolve?: (res: any) => any,
126
- options?: AskManyOpts<any>,
127
- ) => {
128
-
129
- let prevModal = null
130
- const results = {}
131
-
132
- for (const _permission of perms) {
133
- const permission = _permission.replace('?', '')
134
- const status = await permissionCtx.manager.get(permission, {
135
- ask: false,
136
- askOnDenied: false,
137
- askOnPending: false,
138
- })
139
- results[permission] = status.status
140
- const permissionModalName = `permissions.${permission}`
141
-
142
- if (!status.isGranted) {
143
- let onOpen = null
144
-
145
- if (prevModal) {
146
-
147
- onOpen = () => new Promise((resolve) => {
148
- setTimeout(() => {
149
-
150
- modalCtx.transition(prevModal, permissionModalName, {
151
- props: {
152
- onPermissionResolve: (status) => {
153
- resolve(status)
154
- permissionCtx.setState(permission, status)
155
- },
156
- },
157
- })
158
- })
159
- })
160
- } else {
161
- onOpen = () => new Promise((resolve) => {
162
- setTimeout(() => {
163
- modalCtx.toggleModal(permissionModalName, true, {
164
- onPermissionResolve: (status) => {
165
- resolve(status)
166
- permissionCtx.setState(permission, status)
167
-
168
- },
169
- })
170
- })
171
- })
172
-
173
- }
174
-
175
- results[permission] = await onOpen()
176
- prevModal = permissionModalName
177
-
178
- if (!_permission.endsWith('?') && results[permission] !== 'granted') {
179
- break
180
- }
181
- }
182
- }
183
- if (prevModal) {
184
-
185
- setTimeout(() => {
186
- modalCtx.toggleModal(prevModal, false, {})
187
- })
188
- }
189
- const res: Parameters<typeof onResolve>[0] = {
190
- ...results,
191
- overall: Object.values(results).every(x => x === 'granted') ? 'granted' : 'denied',
192
- }
193
- onResolve(res)
194
- return res
195
- }
196
-
197
- return {
198
- askPermission,
199
- askMany,
200
- ...permissionCtx,
201
- }
202
- }
203
-
204
- export function usePermissionModal(permissionName: string) {
205
-
206
- const modalId = `permissions.${permissionName}`
207
- const modals = useModalContext()
208
- const permissionCtx = usePermissions()
209
- const modalState = modals.state[modalId]
210
-
211
- const currentState = permissionCtx?.state?.[permissionName]
212
- const status = currentState
213
- const [debouncedStatus, reset] = useDebounce(status, modals.transitionDuration * 0.5)
214
-
215
- function getConfig(withStatus) {
216
- return {
217
- ...permissionCtx.modalConfig[permissionName],
218
- ...permissionCtx.modalConfig[permissionName]?.[withStatus],
219
- } as PermissionConfig
220
- }
221
- const config = getConfig(debouncedStatus)
222
-
223
- function onPermissionResolve(_status?: PermissionTypes.PermissionStatus) {
224
- modalState?.props?.onPermissionResolve?.(_status || status)
225
-
226
- }
227
-
228
- onUpdate(() => {
229
-
230
- if (modalState?.visible && !!status) {
231
-
232
- if (status === 'granted') {
233
- reset()
234
- onPermissionResolve()
235
- } else {
236
-
237
- if (!deepEqual(config, getConfig(status))) {
238
-
239
- modals.transition(modalId, modalId, {
240
- props: modalState?.props,
241
- })
242
- }
243
- }
244
-
245
- }
246
- }, [status, modalState?.visible])
247
-
248
- async function onAllow() {
249
-
250
- switch (config.onAllow) {
251
- case 'ask':
252
- const newStatus = await permissionCtx.manager.get(permissionName, {
253
- ask: true,
254
- askOnDenied: true,
255
- askOnPending: true,
256
- })
257
- if (!newStatus.isGranted) {
258
- onPermissionResolve(newStatus.status)
259
- }
260
- break
261
-
262
- case 'openSettings':
263
- default:
264
- Linking.openSettings()
265
- break
266
- }
267
-
268
- }
269
-
270
- function onDeny() {
271
- onPermissionResolve()
272
- }
273
-
274
- return {
275
- onAllow,
276
- onDeny,
277
- modalId,
278
- permissionName,
279
- modalState: {
280
- ...modalState,
281
-
282
- },
283
- currentState,
284
- config,
285
- }
286
- }
287
-
288
- type PermissionManagerArgTypes<M extends PermissionManager<any, any>> = {
289
- perms: M extends PermissionManager<infer P, any> ? P extends Record<string, any> ? P : never : never
290
- opts: M extends PermissionManager<any, infer O> ? O : never
291
- }
292
-
293
- type CreateTypedPermissionHooksArgs<
294
- M extends PermissionManager<any, any>,
295
- Args extends PermissionManagerArgTypes<M> = PermissionManagerArgTypes<M>,
296
- ModalConfig extends PermissionModalsConfig<keyof Args['perms']> = PermissionModalsConfig<keyof Args['perms']>
297
- > = {
298
- modalConfig: ModalConfig
299
- permissionsManager: M
300
- }
301
-
302
- export function createTypedPermissionHooks<
303
- M extends PermissionManager<any, any>,
304
- Args extends PermissionManagerArgTypes<M> = PermissionManagerArgTypes<M>
305
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
306
- >(configuration: CreateTypedPermissionHooksArgs<M>) {
307
-
308
- const _usePermissions = usePermissions as UsePermissions<Exclude<keyof Args['perms'], number | symbol>>
309
- const _usePermissionModal = usePermissionModal as ((name: keyof Args['perms']) => ReturnType<typeof usePermissionModal>)
310
-
311
- return {
312
- usePermissions: _usePermissions,
313
- usePermissionModal: _usePermissionModal,
314
-
315
- }
316
- }
@@ -1,16 +0,0 @@
1
- import { usePermissions, Provider, createTypedPermissionHooks, usePermissionModal } from './Context'
2
- import { PermissionConfig, PermissionModalsConfig } from './types'
3
-
4
- export * from './package'
5
-
6
- export {
7
- usePermissions,
8
- Provider,
9
- usePermissionModal,
10
- createTypedPermissionHooks,
11
- }
12
-
13
- export type {
14
- PermissionConfig,
15
- PermissionModalsConfig,
16
- }