@codeleap/web 3.12.22 → 3.13.0-touchable-analytics.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeleap/web",
3
- "version": "3.12.22",
3
+ "version": "3.13.0-touchable-analytics.0",
4
4
  "main": "src/index.ts",
5
5
  "repository": {
6
6
  "url": "https://github.com/codeleap-uk/internal-libs-monorepo.git",
@@ -335,9 +335,11 @@ export const Modal = (props) => {
335
335
  if (visible) {
336
336
  document.body.style.overflowY = 'hidden'
337
337
  document.body.style.overflowX = 'hidden'
338
+ document.body.style.maxHeight = '100svh'
338
339
  } else {
339
340
  document.body.style.overflowY = 'visible'
340
341
  document.body.style.overflowX = 'hidden'
342
+ document.body.style.maxHeight = 'unset'
341
343
  }
342
344
  }, [visible])
343
345
 
@@ -273,11 +273,8 @@ export const Select = forwardRef<HTMLInputElement, SelectProps>(
273
273
  focus: () => {
274
274
  innerInputRef.current?.focus?.()
275
275
  },
276
- blur: () => {
277
- innerInputRef.current?.blur?.()
278
- },
279
276
  }
280
- }, [!!innerInputRef?.current?.focus, !!innerInputRef?.current?.blur])
277
+ }, [!!innerInputRef?.current?.focus])
281
278
 
282
279
  const onLoadOptions = async (inputValue, cb) => {
283
280
  if (!!loadOptions) {
@@ -380,7 +377,7 @@ export const Select = forwardRef<HTMLInputElement, SelectProps>(
380
377
 
381
378
  const MenuComponent = React.useCallback((props) => {
382
379
  return <CustomMenu {...props} Footer={FooterComponent} />
383
- }, [FooterComponent])
380
+ }, [])
384
381
 
385
382
  const MenuListComponent = React.useCallback((props) => {
386
383
  return <CustomMenuList {...props} defaultStyles={menuWrapperStyles} />
@@ -412,7 +409,6 @@ export const Select = forwardRef<HTMLInputElement, SelectProps>(
412
409
  hideSelectedOptions={false}
413
410
  tabSelectsValue={false}
414
411
  tabIndex={0}
415
- backspaceRemovesValue={true}
416
412
  {...otherProps}
417
413
  {..._props}
418
414
  onKeyDown={isFocused ? handleKeyDown : null}
@@ -21,30 +21,53 @@ export type TouchableProps<T extends ElementType = 'button'> = ComponentPropsWit
21
21
  debounce?: number
22
22
  leadingDebounce?: boolean
23
23
  setPressed?: (pressed: boolean) => void
24
+ analyticsEnabled?: boolean
25
+ analyticsName?: string
26
+ analyticsData?: Record<string, any>
24
27
  } & ComponentVariants<typeof TouchablePresets>
25
28
 
29
+ const defaultProps: TouchableProps<'button'> = {
30
+ propagate: true,
31
+ debounce: null,
32
+ component: View,
33
+ style: {},
34
+ styles: {},
35
+ responsiveVariants: {},
36
+ variants: [],
37
+ css: [],
38
+ analyticsEnabled: false,
39
+ analyticsName: null,
40
+ analyticsData: {},
41
+ }
26
42
  export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
27
43
  touchableProps: TouchableProps<T>,
28
44
  ref,
29
45
  ) => {
46
+ const mergedProps: TouchableProps = {
47
+ ...(defaultProps),
48
+ ...(touchableProps),
49
+ }
30
50
  const {
31
- propagate = true,
32
- debounce = null,
51
+ propagate,
52
+ debounce,
33
53
  leadingDebounce,
34
54
  setPressed,
35
- component: Component = View,
55
+ component: Component,
36
56
  disabled,
37
57
  onPress,
38
58
  onClick,
39
59
  debugName,
40
60
  debugComponent,
41
- style = {},
42
- styles = {},
43
- responsiveVariants = {},
44
- variants = [],
45
- css = [],
61
+ style,
62
+ styles,
63
+ responsiveVariants,
64
+ variants,
65
+ css,
66
+ analyticsEnabled,
67
+ analyticsName,
68
+ analyticsData,
46
69
  ...props
47
- } = touchableProps as TouchableProps
70
+ } = mergedProps
48
71
 
49
72
  const pressed = React.useRef(!!leadingDebounce)
50
73
 
@@ -60,7 +83,7 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
60
83
  responsiveVariants,
61
84
  variants,
62
85
  styles,
63
- rootElement: 'wrapper'
86
+ rootElement: 'wrapper',
64
87
  })
65
88
 
66
89
  const { logger } = useCodeleapContext()
@@ -76,7 +99,7 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
76
99
  logger.warn(
77
100
  'No onPress passed to touchable',
78
101
  touchableProps,
79
- 'User interaction'
102
+ 'User interaction',
80
103
  )
81
104
  return
82
105
  }
@@ -85,8 +108,14 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
85
108
  logger.log(
86
109
  `<${debugComponent || 'Touchable'}/> pressed`,
87
110
  { debugName, debugComponent },
88
- 'User interaction'
111
+ 'User interaction',
89
112
  )
113
+ if (analyticsEnabled) {
114
+ const name = analyticsName || debugName
115
+ if (!!name?.trim?.()) {
116
+ logger.analytics?.interaction(name, analyticsData)
117
+ }
118
+ }
90
119
 
91
120
  if (TypeGuards.isFunction(onClick)) onClick?.(event)
92
121
  onPress?.()
@@ -127,6 +156,8 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
127
156
  )
128
157
  }
129
158
 
130
- export const Touchable = forwardRef(TouchableCP) as <T extends NativeHTMLElement = 'button'>(
159
+ export const Touchable = forwardRef(TouchableCP) as (<T extends NativeHTMLElement = 'button'>(
131
160
  touchableProps: TouchableProps<T>
132
- ) => JSX.Element
161
+ ) => JSX.Element) & {
162
+ defaultProps: Partial<TouchableProps<'button'>>
163
+ }