浏览代码

Fixes text on mobile (iOS)

main
Steve Ruiz 4 年前
父节点
当前提交
5f71f5c38b
共有 4 个文件被更改,包括 21 次插入5 次删除
  1. 5
    1
      components/canvas/shape.tsx
  2. 11
    1
      hooks/useShapeEvents.ts
  3. 4
    2
      lib/shape-utils/text.tsx
  4. 1
    1
      state/state.ts

+ 5
- 1
components/canvas/shape.tsx 查看文件

27
 
27
 
28
   useEffect(() => {
28
   useEffect(() => {
29
     if (isEditing) {
29
     if (isEditing) {
30
-      setTimeout(() => rFocusable.current?.focus(), 0)
30
+      setTimeout(() => {
31
+        const elm = rFocusable.current
32
+        if (!elm) return
33
+        elm.focus()
34
+      }, 0)
31
     }
35
     }
32
   }, [isEditing])
36
   }, [isEditing])
33
 
37
 

+ 11
- 1
hooks/useShapeEvents.ts 查看文件

1
-import { MutableRefObject, useCallback, useRef } from 'react'
1
+import React, { MutableRefObject, useCallback, useRef } from 'react'
2
 import state from 'state'
2
 import state from 'state'
3
 import inputs from 'state/inputs'
3
 import inputs from 'state/inputs'
4
 
4
 
76
     [id]
76
     [id]
77
   )
77
   )
78
 
78
 
79
+  const handleTouchStart = useCallback((e: React.TouchEvent) => {
80
+    e.preventDefault()
81
+  }, [])
82
+
83
+  const handleTouchEnd = useCallback((e: React.TouchEvent) => {
84
+    e.preventDefault()
85
+  }, [])
86
+
79
   return {
87
   return {
80
     onPointerDown: handlePointerDown,
88
     onPointerDown: handlePointerDown,
81
     onPointerUp: handlePointerUp,
89
     onPointerUp: handlePointerUp,
82
     onPointerEnter: handlePointerEnter,
90
     onPointerEnter: handlePointerEnter,
83
     onPointerMove: handlePointerMove,
91
     onPointerMove: handlePointerMove,
84
     onPointerLeave: handlePointerLeave,
92
     onPointerLeave: handlePointerLeave,
93
+    onTouchStart: handleTouchStart,
94
+    onTouchEnd: handleTouchEnd,
85
   }
95
   }
86
 }
96
 }

+ 4
- 2
lib/shape-utils/text.tsx 查看文件

1
-import { uniqueId } from 'utils/utils'
1
+import { uniqueId, isMobile } from 'utils/utils'
2
 import vec from 'utils/vec'
2
 import vec from 'utils/vec'
3
 import { TextShape, ShapeType, FontSize, SizeStyle } from 'types'
3
 import { TextShape, ShapeType, FontSize, SizeStyle } from 'types'
4
 import { registerShapeUtils } from './index'
4
 import { registerShapeUtils } from './index'
118
             autoComplete="false"
118
             autoComplete="false"
119
             autoCapitalize="false"
119
             autoCapitalize="false"
120
             autoCorrect="false"
120
             autoCorrect="false"
121
+            autoFocus={isMobile() ? true : false}
121
             onFocus={handleFocus}
122
             onFocus={handleFocus}
122
             onBlur={handleBlur}
123
             onBlur={handleBlur}
123
             onKeyDown={handleKeyDown}
124
             onKeyDown={handleKeyDown}
236
   pointerEvents: 'none',
237
   pointerEvents: 'none',
237
   userSelect: 'none',
238
   userSelect: 'none',
238
   display: 'inline-block',
239
   display: 'inline-block',
239
-  position: 'relative',
240
 })
240
 })
241
 
241
 
242
 const StyledTextArea = styled('textarea', {
242
 const StyledTextArea = styled('textarea', {
254
   pointerEvents: 'all',
254
   pointerEvents: 'all',
255
   backfaceVisibility: 'hidden',
255
   backfaceVisibility: 'hidden',
256
   display: 'inline-block',
256
   display: 'inline-block',
257
+  userSelect: 'text',
258
+  WebkitUserSelect: 'text',
257
 })
259
 })

+ 1
- 1
state/state.ts 查看文件

114
 const state = createState({
114
 const state = createState({
115
   data: initialData,
115
   data: initialData,
116
   on: {
116
   on: {
117
-    UNMOUNTED: [{ unless: 'isReadOnly', do: 'forceSave' }, { to: 'loading' }],
117
+    UNMOUNTED: { to: 'loading' },
118
   },
118
   },
119
   initial: 'loading',
119
   initial: 'loading',
120
   states: {
120
   states: {

正在加载...
取消
保存