@codeleap/mobile 5.8.21 → 6.0.1

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 (316) 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/DatePickerModal/index.d.ts +2 -3
  58. package/dist/components/DatePickerModal/index.js +13 -21
  59. package/dist/components/DatePickerModal/index.js.map +1 -1
  60. package/dist/components/EmptyPlaceholder/components/Button.d.ts +1 -2
  61. package/dist/components/EmptyPlaceholder/components/Button.js +2 -2
  62. package/dist/components/EmptyPlaceholder/components/Button.js.map +1 -1
  63. package/dist/components/EmptyPlaceholder/components/Content.d.ts +1 -1
  64. package/dist/components/EmptyPlaceholder/components/Content.js +6 -8
  65. package/dist/components/EmptyPlaceholder/components/Content.js.map +1 -1
  66. package/dist/components/EmptyPlaceholder/components/Illustration.d.ts +1 -2
  67. package/dist/components/EmptyPlaceholder/components/Illustration.js +2 -5
  68. package/dist/components/EmptyPlaceholder/components/Illustration.js.map +1 -1
  69. package/dist/components/EmptyPlaceholder/components/Info.d.ts +1 -2
  70. package/dist/components/EmptyPlaceholder/components/Info.js +2 -5
  71. package/dist/components/EmptyPlaceholder/components/Info.js.map +1 -1
  72. package/dist/components/EmptyPlaceholder/components/Loading.d.ts +1 -2
  73. package/dist/components/EmptyPlaceholder/components/Loading.js +3 -4
  74. package/dist/components/EmptyPlaceholder/components/Loading.js.map +1 -1
  75. package/dist/components/EmptyPlaceholder/context.d.ts +4 -5
  76. package/dist/components/EmptyPlaceholder/context.js.map +1 -1
  77. package/dist/components/EmptyPlaceholder/index.d.ts +5 -6
  78. package/dist/components/EmptyPlaceholder/index.js +2 -6
  79. package/dist/components/EmptyPlaceholder/index.js.map +1 -1
  80. package/dist/components/FileInput/index.d.ts +1 -1
  81. package/dist/components/FileInput/index.js +1 -1
  82. package/dist/components/FileInput/index.js.map +1 -1
  83. package/dist/components/Grid/index.js +11 -10
  84. package/dist/components/Grid/index.js.map +1 -1
  85. package/dist/components/Grid/types.d.ts +0 -1
  86. package/dist/components/Icon/index.d.ts +1 -2
  87. package/dist/components/Icon/index.js +3 -5
  88. package/dist/components/Icon/index.js.map +1 -1
  89. package/dist/components/Image/index.js +9 -15
  90. package/dist/components/Image/index.js.map +1 -1
  91. package/dist/components/Image/types.d.ts +1 -2
  92. package/dist/components/ImageView/Spotlight.d.ts +4 -4
  93. package/dist/components/ImageView/Spotlight.js +4 -5
  94. package/dist/components/ImageView/Spotlight.js.map +1 -1
  95. package/dist/components/ImageView/component.d.ts +1 -2
  96. package/dist/components/ImageView/component.js +4 -2
  97. package/dist/components/ImageView/component.js.map +1 -1
  98. package/dist/components/InputBase/index.js +3 -16
  99. package/dist/components/InputBase/index.js.map +1 -1
  100. package/dist/components/InputBase/types.d.ts +3 -4
  101. package/dist/components/InputBase/useInputBase.d.ts +2 -3
  102. package/dist/components/InputBase/useInputBase.js +1 -1
  103. package/dist/components/InputBase/useInputBase.js.map +1 -1
  104. package/dist/components/InputBase/useInputBasePartialStyles.js.map +1 -1
  105. package/dist/components/InputOverlay/index.d.ts +3 -4
  106. package/dist/components/InputOverlay/index.js +6 -21
  107. package/dist/components/InputOverlay/index.js.map +1 -1
  108. package/dist/components/InputOverlay/store.js.map +1 -1
  109. package/dist/components/List/index.js +5 -4
  110. package/dist/components/List/index.js.map +1 -1
  111. package/dist/components/List/types.d.ts +0 -1
  112. package/dist/components/LoadingOverlay/index.d.ts +2 -3
  113. package/dist/components/LoadingOverlay/index.js +5 -7
  114. package/dist/components/LoadingOverlay/index.js.map +1 -1
  115. package/dist/components/Modal/index.d.ts +2 -3
  116. package/dist/components/Modal/index.js +13 -39
  117. package/dist/components/Modal/index.js.map +1 -1
  118. package/dist/components/Modal/types.d.ts +0 -1
  119. package/dist/components/NumberIncrement/index.js +5 -7
  120. package/dist/components/NumberIncrement/index.js.map +1 -1
  121. package/dist/components/NumberIncrement/useNumberIncrement.d.ts +3 -4
  122. package/dist/components/NumberIncrement/useNumberIncrement.js.map +1 -1
  123. package/dist/components/Pager/PagerDots.d.ts +1 -2
  124. package/dist/components/Pager/PagerDots.js +3 -6
  125. package/dist/components/Pager/PagerDots.js.map +1 -1
  126. package/dist/components/Pager/PagerItem.d.ts +1 -2
  127. package/dist/components/Pager/PagerItem.js +3 -2
  128. package/dist/components/Pager/PagerItem.js.map +1 -1
  129. package/dist/components/Pager/index.d.ts +2 -3
  130. package/dist/components/Pager/index.js +9 -16
  131. package/dist/components/Pager/index.js.map +1 -1
  132. package/dist/components/Pager/types.d.ts +2 -2
  133. package/dist/components/PaginationIndicator/index.d.ts +2 -3
  134. package/dist/components/PaginationIndicator/index.js +3 -3
  135. package/dist/components/PaginationIndicator/index.js.map +1 -1
  136. package/dist/components/PaginationIndicator/types.d.ts +2 -3
  137. package/dist/components/PlacesAutocomplete/index.d.ts +6 -7
  138. package/dist/components/PlacesAutocomplete/index.js +11 -17
  139. package/dist/components/PlacesAutocomplete/index.js.map +1 -1
  140. package/dist/components/PlacesAutocomplete/types.d.ts +3 -4
  141. package/dist/components/RadioInput/index.d.ts +2 -3
  142. package/dist/components/RadioInput/index.js +4 -22
  143. package/dist/components/RadioInput/index.js.map +1 -1
  144. package/dist/components/RefreshControl/index.d.ts +2 -3
  145. package/dist/components/RefreshControl/index.js +2 -2
  146. package/dist/components/RefreshControl/index.js.map +1 -1
  147. package/dist/components/Scroll/index.d.ts +2 -3
  148. package/dist/components/Scroll/index.js +9 -12
  149. package/dist/components/Scroll/index.js.map +1 -1
  150. package/dist/components/SearchInput/index.d.ts +7 -4
  151. package/dist/components/SearchInput/index.js +4 -3
  152. package/dist/components/SearchInput/index.js.map +1 -1
  153. package/dist/components/SectionFilters/context.d.ts +3 -24
  154. package/dist/components/SectionFilters/index.d.ts +1 -2
  155. package/dist/components/SectionFilters/index.js +5 -7
  156. package/dist/components/SectionFilters/index.js.map +1 -1
  157. package/dist/components/SectionFilters/useSectionFilters.js.map +1 -1
  158. package/dist/components/Sections/index.d.ts +2 -3
  159. package/dist/components/Sections/index.js +5 -4
  160. package/dist/components/Sections/index.js.map +1 -1
  161. package/dist/components/Sections/types.d.ts +0 -1
  162. package/dist/components/SegmentedControl/Option.d.ts +1 -1
  163. package/dist/components/SegmentedControl/Option.js +7 -13
  164. package/dist/components/SegmentedControl/Option.js.map +1 -1
  165. package/dist/components/SegmentedControl/index.js +16 -26
  166. package/dist/components/SegmentedControl/index.js.map +1 -1
  167. package/dist/components/SegmentedControl/types.d.ts +2 -3
  168. package/dist/components/Select/index.d.ts +2 -3
  169. package/dist/components/Select/index.js +20 -25
  170. package/dist/components/Select/index.js.map +1 -1
  171. package/dist/components/Select/types.d.ts +2 -3
  172. package/dist/components/Slider/index.d.ts +2 -3
  173. package/dist/components/Slider/index.js +23 -38
  174. package/dist/components/Slider/index.js.map +1 -1
  175. package/dist/components/Slider/types.d.ts +0 -1
  176. package/dist/components/SortablePhotos/index.d.ts +2 -3
  177. package/dist/components/SortablePhotos/index.js +7 -18
  178. package/dist/components/SortablePhotos/index.js.map +1 -1
  179. package/dist/components/SortablePhotos/useSortablePhotos.d.ts +0 -2
  180. package/dist/components/SortablePhotos/useSortablePhotos.js.map +1 -1
  181. package/dist/components/Switch/index.d.ts +2 -3
  182. package/dist/components/Switch/index.js +9 -13
  183. package/dist/components/Switch/index.js.map +1 -1
  184. package/dist/components/Tabs/Context.d.ts +2 -3
  185. package/dist/components/Tabs/Context.js +2 -1
  186. package/dist/components/Tabs/Context.js.map +1 -1
  187. package/dist/components/Tabs/Panel.d.ts +1 -1
  188. package/dist/components/Tabs/Panel.js +3 -5
  189. package/dist/components/Tabs/Panel.js.map +1 -1
  190. package/dist/components/Tabs/Tab.d.ts +1 -2
  191. package/dist/components/Tabs/Tab.js +12 -16
  192. package/dist/components/Tabs/Tab.js.map +1 -1
  193. package/dist/components/Tabs/TabList.d.ts +1 -2
  194. package/dist/components/Tabs/TabList.js +2 -1
  195. package/dist/components/Tabs/TabList.js.map +1 -1
  196. package/dist/components/Tabs/index.d.ts +197 -192
  197. package/dist/components/Tabs/index.js +2 -6
  198. package/dist/components/Tabs/index.js.map +1 -1
  199. package/dist/components/Text/index.js +5 -7
  200. package/dist/components/Text/index.js.map +1 -1
  201. package/dist/components/Text/types.d.ts +2 -2
  202. package/dist/components/TextInput/index.js +13 -14
  203. package/dist/components/TextInput/index.js.map +1 -1
  204. package/dist/components/TextInput/types.d.ts +0 -1
  205. package/dist/components/TextInput/useTextInput.d.ts +2 -3
  206. package/dist/components/TimeInput/index.d.ts +2 -3
  207. package/dist/components/TimeInput/index.js +8 -12
  208. package/dist/components/TimeInput/index.js.map +1 -1
  209. package/dist/components/Touchable/index.js +5 -10
  210. package/dist/components/Touchable/index.js.map +1 -1
  211. package/dist/components/Touchable/types.d.ts +0 -1
  212. package/dist/components/View/index.d.ts +4 -6
  213. package/dist/components/View/index.js +4 -3
  214. package/dist/components/View/index.js.map +1 -1
  215. package/dist/components/View/types.d.ts +2 -3
  216. package/dist/index.d.ts +0 -1
  217. package/dist/index.js +0 -1
  218. package/dist/index.js.map +1 -1
  219. package/dist/modules/PressableRipple/ripple.d.ts +2 -2
  220. package/dist/modules/PressableRipple/ripple.js +4 -11
  221. package/dist/modules/PressableRipple/ripple.js.map +1 -1
  222. package/dist/modules/PressableRipple/styles.d.ts +5 -5
  223. package/dist/modules/backgroundTimer.js.map +1 -1
  224. package/dist/modules/reactNavigation.js.map +1 -1
  225. package/dist/modules/scroll.d.ts +3 -3
  226. package/dist/modules/scroll.js +3 -4
  227. package/dist/modules/scroll.js.map +1 -1
  228. package/dist/modules/textInputMask.d.ts +1 -2
  229. package/dist/types/index.d.ts +2 -3
  230. package/dist/types/utility.d.ts +2 -2
  231. package/dist/utils/NotificationManager/index.js.map +1 -1
  232. package/dist/utils/OSAlert.js.map +1 -1
  233. package/dist/utils/StorageManager.js.map +1 -1
  234. package/dist/utils/Subscription.js.map +1 -1
  235. package/dist/utils/hooks.d.ts +3 -3
  236. package/dist/utils/hooks.js.map +1 -1
  237. package/dist/utils/input.d.ts +1 -1
  238. package/dist/utils/input.js.map +1 -1
  239. package/dist/utils/misc.d.ts +0 -1
  240. package/dist/utils/misc.js.map +1 -1
  241. package/dist/utils/useQueryListRefresh.js.map +1 -1
  242. package/package.json +30 -32
  243. package/package.json.bak +14 -16
  244. package/src/components/Autocomplete/types.ts +1 -1
  245. package/src/components/Badge/types.ts +1 -1
  246. package/src/components/FileInput/index.tsx +2 -2
  247. package/src/components/Image/types.ts +1 -1
  248. package/src/components/ImageView/Spotlight.tsx +2 -2
  249. package/src/components/ImageView/component.tsx +1 -0
  250. package/src/components/InputBase/types.ts +3 -3
  251. package/src/components/InputBase/useInputBase.ts +1 -1
  252. package/src/components/Pager/PagerItem.tsx +1 -1
  253. package/src/components/Pager/index.tsx +1 -0
  254. package/src/components/Pager/types.ts +1 -1
  255. package/src/components/PaginationIndicator/types.ts +2 -2
  256. package/src/components/PlacesAutocomplete/types.ts +3 -3
  257. package/src/components/Scroll/index.tsx +1 -1
  258. package/src/components/SearchInput/index.tsx +7 -3
  259. package/src/components/SectionFilters/index.tsx +1 -1
  260. package/src/components/SegmentedControl/types.ts +2 -2
  261. package/src/components/Select/types.ts +2 -2
  262. package/src/components/Slider/index.tsx +1 -0
  263. package/src/components/Text/types.ts +2 -2
  264. package/src/components/View/index.tsx +1 -1
  265. package/src/components/View/types.ts +2 -2
  266. package/src/components/components.ts +1 -1
  267. package/src/index.ts +0 -1
  268. package/src/modules/scroll.tsx +1 -1
  269. package/src/types/index.ts +2 -2
  270. package/src/types/utility.ts +2 -2
  271. package/src/utils/hooks.ts +3 -3
  272. package/dist/deprecated/index.d.ts +0 -2
  273. package/dist/deprecated/index.js +0 -5
  274. package/dist/deprecated/index.js.map +0 -1
  275. package/dist/deprecated/modals/Context.d.ts +0 -48
  276. package/dist/deprecated/modals/Context.js +0 -187
  277. package/dist/deprecated/modals/Context.js.map +0 -1
  278. package/dist/deprecated/modals/components.d.ts +0 -15
  279. package/dist/deprecated/modals/components.js +0 -53
  280. package/dist/deprecated/modals/components.js.map +0 -1
  281. package/dist/deprecated/modals/index.d.ts +0 -10
  282. package/dist/deprecated/modals/index.js +0 -9
  283. package/dist/deprecated/modals/index.js.map +0 -1
  284. package/dist/deprecated/permissions/Context.d.ts +0 -53
  285. package/dist/deprecated/permissions/Context.js +0 -208
  286. package/dist/deprecated/permissions/Context.js.map +0 -1
  287. package/dist/deprecated/permissions/index.d.ts +0 -5
  288. package/dist/deprecated/permissions/index.js +0 -4
  289. package/dist/deprecated/permissions/index.js.map +0 -1
  290. package/dist/deprecated/permissions/package/Manager.d.ts +0 -23
  291. package/dist/deprecated/permissions/package/Manager.js +0 -84
  292. package/dist/deprecated/permissions/package/Manager.js.map +0 -1
  293. package/dist/deprecated/permissions/package/Permission.d.ts +0 -19
  294. package/dist/deprecated/permissions/package/Permission.js +0 -65
  295. package/dist/deprecated/permissions/package/Permission.js.map +0 -1
  296. package/dist/deprecated/permissions/package/index.d.ts +0 -3
  297. package/dist/deprecated/permissions/package/index.js +0 -5
  298. package/dist/deprecated/permissions/package/index.js.map +0 -1
  299. package/dist/deprecated/permissions/package/types.d.ts +0 -31
  300. package/dist/deprecated/permissions/package/types.js +0 -2
  301. package/dist/deprecated/permissions/package/types.js.map +0 -1
  302. package/dist/deprecated/permissions/types.d.ts +0 -16
  303. package/dist/deprecated/permissions/types.js +0 -2
  304. package/dist/deprecated/permissions/types.js.map +0 -1
  305. package/mobile-packages.code-workspace +0 -27
  306. package/src/deprecated/index.ts +0 -2
  307. package/src/deprecated/modals/Context.tsx +0 -259
  308. package/src/deprecated/modals/components.tsx +0 -84
  309. package/src/deprecated/modals/index.ts +0 -13
  310. package/src/deprecated/permissions/Context.tsx +0 -316
  311. package/src/deprecated/permissions/index.ts +0 -16
  312. package/src/deprecated/permissions/package/Manager.ts +0 -123
  313. package/src/deprecated/permissions/package/Permission.ts +0 -79
  314. package/src/deprecated/permissions/package/index.ts +0 -3
  315. package/src/deprecated/permissions/package/types.ts +0 -43
  316. package/src/deprecated/permissions/types.ts +0 -27
@@ -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
- }
@@ -1,123 +0,0 @@
1
- import { Permission } from './Permission'
2
- import * as PermissionTypes from './types'
3
-
4
- export class PermissionManager<
5
- T extends PermissionTypes.PermissionActionRecord,
6
- I extends PermissionTypes.IPermissionManager<T> = PermissionTypes.IPermissionManager<T>
7
- > implements PermissionTypes.IPermissionManager<T> {
8
- private _permissions: Record<keyof T, Permission>
9
-
10
- subscriberArgs: Parameters<PermissionTypes.ChangeListener<T>>
11
-
12
- private subscribers: PermissionTypes.ChangeListener<T>[]
13
-
14
- private permSubscribers: Record<keyof T, PermissionTypes.PermissionSubscriber[]>
15
-
16
- public _perms: T
17
-
18
- public opts: I
19
-
20
- private params: T
21
-
22
- public permissions: {
23
- [Property in keyof T as Uppercase<string & Property>]: Property
24
- }
25
-
26
- logger
27
-
28
- constructor(perms: T, options?: PermissionTypes.PermissionManagerOptions) {
29
- this.params = perms
30
- // @ts-ignore
31
- this._permissions = {}
32
- // @ts-ignore
33
- this.permissions = {}
34
-
35
- this.logger = options?.logger
36
- this.permSubscribers = {} as typeof this.permSubscribers
37
-
38
- for (const [permName, actions] of Object.entries(this.params)) {
39
- const name = permName as keyof T
40
- this._permissions[name] = new Permission({ ...actions, log: this.logger?.log || (() => null) }, permName)
41
-
42
- this.permSubscribers[name] = []
43
-
44
- // @ts-ignore
45
- this.permissions[(name as string).toUpperCase()] = name
46
- }
47
-
48
- this.subscribers = []
49
- }
50
-
51
- get values() {
52
- return this._permissions as unknown as Record<keyof T, PermissionTypes.PermissionState>
53
- }
54
-
55
- private async check(name: keyof T, options?: PermissionTypes.CheckOptions): Promise<PermissionTypes.PermissionState> {
56
- const previousStatus = this._permissions[name].status
57
-
58
- await this._permissions[name].check(options)
59
-
60
- if (this._permissions[name].status !== previousStatus) {
61
- this.permSubscribers[name].forEach(sub => sub(this._permissions[name]))
62
- this.subscribers.forEach(sub => sub(name, this._permissions[name]))
63
- }
64
- return this._permissions[name]
65
- }
66
-
67
- getMany: I['getMany'] = async (perms, options) => {
68
-
69
- const results = []
70
-
71
- for (const p of perms) {
72
- const isArray = Array.isArray(p)
73
- const name = isArray ? p[0] : p
74
- const opts = isArray ? p[1] : options
75
-
76
- results.push(await this.check(name, opts))
77
- }
78
-
79
- return results
80
- }
81
-
82
- // @ts-ignore
83
- get: I['get'] = async (name, options) => {
84
- return await this.check(name, options)
85
- }
86
-
87
- onPermissionChange(name: keyof T, callback: PermissionTypes.PermissionSubscriber) {
88
- const subIdx = this.permSubscribers[name].push(callback) - 1
89
-
90
- return () => {
91
- this.permSubscribers[name].splice(subIdx, 1)
92
- }
93
- }
94
-
95
- onChange(callback: PermissionTypes.ChangeListener<T>) {
96
- const subIdx = this.subscribers.push(callback) - 1
97
-
98
- return () => {
99
- this.subscribers.splice(subIdx, 1)
100
- }
101
- }
102
-
103
- getState() {
104
- const state = {}
105
-
106
- for (const [p, { ask: _ig2, check: _ig1, ...values }] of Object.entries(this._permissions)) {
107
- state[p] = { ...values }
108
- }
109
-
110
- return state as Record<keyof T, PermissionTypes.PermissionState>
111
- }
112
-
113
- async update() {
114
- const res = {} as Record<keyof T, PermissionTypes.PermissionState>
115
- for (const p of Object.keys(this._permissions)) {
116
- res[p as keyof T] = await this.check(p, {
117
- ask: false,
118
- })
119
- }
120
- return res
121
- }
122
-
123
- }
@@ -1,79 +0,0 @@
1
- import { AnyFunction } from '@codeleap/types'
2
- import * as PermissionTypes from './types'
3
-
4
- const SCOPE = 'Permissions'
5
-
6
- export class Permission implements PermissionTypes.IPermission {
7
- status: PermissionTypes.PermissionStatus
8
-
9
- shouldAsk: boolean
10
-
11
- constructor(private actions: PermissionTypes.PermissionActions & { log?: AnyFunction }, public name = '') {
12
- this.actions = actions
13
- this.shouldAsk = true
14
- this.status = 'pending'
15
-
16
- }
17
-
18
- async ask(): Promise<void> {
19
- const newState = await this.actions.onAsk()
20
- this.actions.log(`Request for permission ${this.name} returned`, newState, SCOPE)
21
- this.status = newState
22
-
23
- if (newState === 'blocked') {
24
- this.shouldAsk = false
25
- }
26
- }
27
-
28
- async check(options?: PermissionTypes.CheckOptions): Promise<void> {
29
- const _options: PermissionTypes.CheckOptions = {
30
- askOnPending: true,
31
- askOnDenied: false,
32
- ask: true,
33
- ...options,
34
- }
35
-
36
- this.status = await this.actions.onCheck()
37
- this.actions.log(`Check for permission ${this.name} returned`, this.status, SCOPE)
38
- if (!_options.ask) return
39
-
40
- switch (this.status) {
41
- case 'denied':
42
- if (_options.askOnDenied) {
43
- await this.ask()
44
- }
45
- break
46
- case 'pending':
47
- if (_options.askOnPending) {
48
- await this.ask()
49
- }
50
- break
51
- }
52
- }
53
-
54
- get isGranted() {
55
- return this.status === 'granted'
56
- }
57
-
58
- get isDenied() {
59
- return this.status === 'denied'
60
- }
61
-
62
- get isPending() {
63
- return this.status === 'pending'
64
- }
65
-
66
- get isBlocked() {
67
- return this.status === 'blocked'
68
- }
69
-
70
- get isUnavailable() {
71
- return this.status === 'unavailable'
72
-
73
- }
74
-
75
- get isLimited() {
76
- return this.status === 'limited'
77
-
78
- }
79
- }
@@ -1,3 +0,0 @@
1
- export * as PermissionTypes from './types'
2
- export * from './Permission'
3
- export * from './Manager'
@@ -1,43 +0,0 @@
1
- import { FunctionType } from '@codeleap/types'
2
-
3
- export const permissionStatuses = ['unavailable', 'pending', 'denied', 'limited', 'granted', 'blocked'] as const
4
- export type PermissionStatus = typeof permissionStatuses[number]
5
-
6
- export type PermissionState = {
7
- status: PermissionStatus
8
- shouldAsk: boolean
9
-
10
- } & Record<`is${Capitalize<PermissionStatus>}`, boolean>
11
-
12
- export type CheckOptions = {
13
- askOnPending?: boolean
14
- askOnDenied?: boolean
15
- ask?: boolean
16
-
17
- }
18
-
19
- export type IPermission = {
20
- ask(): Promise<void>
21
- check(options?: CheckOptions): Promise<void>
22
-
23
- } & PermissionState
24
-
25
- export type PermFunction = FunctionType<[], Promise<PermissionStatus>>
26
-
27
- export type PermissionActions = Record<'onAsk' | 'onCheck', PermFunction> & { init?: 'check' | PermissionState }
28
-
29
- export type PermissionActionRecord = Record<string, PermissionActions>
30
-
31
- export interface IPermissionManager<T extends PermissionActionRecord> {
32
- getMany(perms: PermissionArray<T>, options?: CheckOptions): Promise<PermissionState[]>
33
- get(name: keyof T, options?: CheckOptions): Promise<PermissionState>
34
- }
35
-
36
- export type ChangeListener<T> = FunctionType<[keyof T, PermissionState], any>
37
- export type PermissionSubscriber = FunctionType<[PermissionState], any>
38
-
39
- export type PermissionArray<T> = ([name: keyof T, options: CheckOptions])[] | (keyof T)[]
40
-
41
- export type PermissionManagerOptions = {
42
- logger?: any
43
- }
@@ -1,27 +0,0 @@
1
- import { ImageProps } from '../../components/Image'
2
- import { PermissionTypes } from './package'
3
- type NonGrantedPermissionTypes = Exclude<PermissionTypes.PermissionStatus, 'granted'>
4
-
5
- export type BasePermissionConfig = {
6
- fullscreenModal?: boolean
7
- dismissable?: boolean
8
- title: string
9
- onAllow: 'openSettings' | 'ask'
10
-
11
- description: string[]
12
- icon?: string
13
- image?: ImageProps['source']
14
- imageProps?: Omit<ImageProps, 'source'>
15
- }
16
-
17
- export type PermissionConfig = BasePermissionConfig &
18
- Partial<
19
- Record<
20
- NonGrantedPermissionTypes,
21
- Partial<BasePermissionConfig>
22
- >
23
- >
24
-
25
- export type PermissionModalsConfig<PermissionNames extends string | number | symbol> = Partial<
26
- Record<PermissionNames, PermissionConfig>
27
- >