提交 2a227a9a 编写于 作者: D DCloud_LXH

fix: textarea picker ssr

上级 a9b9b9a5
import { Ref, ref, computed, watch } from 'vue'
import { Ref, ref, computed, watch, onMounted } from 'vue'
import { extend } from '@vue/shared'
import { defineBuiltInComponent } from '../../helpers/component'
import {
......@@ -23,6 +23,18 @@ const props = /*#__PURE__*/ extend({}, fieldProps, {
},
})
let fixMargin: Boolean = false
function setFixMargin() {
// iOS 13 以下版本需要修正边距
const DARK_TEST_STRING = '(prefers-color-scheme: dark)'
fixMargin = __NODE_JS__
? false
: String(navigator.platform).indexOf('iP') === 0 &&
String(navigator.vendor).indexOf('Apple') === 0 &&
window.matchMedia(DARK_TEST_STRING).media !== DARK_TEST_STRING
}
export default /*#__PURE__*/ defineBuiltInComponent({
name: 'Textarea',
props,
......@@ -88,12 +100,11 @@ export default /*#__PURE__*/ defineBuiltInComponent({
}
}
// iOS 13 以下版本需要修正边距
const DARK_TEST_STRING = '(prefers-color-scheme: dark)'
const fixMargin =
String(navigator.platform).indexOf('iP') === 0 &&
String(navigator.vendor).indexOf('Apple') === 0 &&
window.matchMedia(DARK_TEST_STRING).media !== DARK_TEST_STRING
if (__NODE_JS__) {
onMounted(setFixMargin)
} else {
setFixMargin()
}
return () => {
let textareaNode =
......@@ -120,6 +131,7 @@ export default /*#__PURE__*/ defineBuiltInComponent({
value={state.value}
disabled={!!props.disabled}
maxlength={state.maxlength}
// @ts-ignore
enterkeyhint={props.confirmType}
class={{
'uni-textarea-textarea': true,
......@@ -148,6 +160,7 @@ export default /*#__PURE__*/ defineBuiltInComponent({
{valueCompute.value.map((item) => (
<div>{item.trim() ? item : '.'}</div>
))}
{/* @ts-ignore */}
<ResizeSensor initial onResize={onResize} />
</div>
{props.confirmType === 'search' ? (
......
......@@ -11,6 +11,7 @@ import {
Transition,
Ref,
ExtractPropTypes,
onMounted,
} from 'vue'
import {
useBooleanAttr,
......@@ -440,6 +441,43 @@ function usePickerState(props: Props) {
}
}
const getiPadFlag = () =>
String(navigator.vendor).indexOf('Apple') === 0 &&
navigator.maxTouchPoints > 0
function useIsiPad() {
const isiPad = ref(false)
if (__NODE_JS__) {
onMounted(() => (isiPad.value = getiPadFlag()))
} else {
isiPad.value = getiPadFlag()
}
return isiPad
}
const getSystem = () => {
if (/win|mac/i.test(navigator.platform)) {
if (navigator.vendor === 'Google Inc.') {
return 'chrome'
} else if (/Firefox/.test(navigator.userAgent)) {
return 'firefox'
}
}
return ''
}
function useSystem() {
const _system = ref('')
if (__NODE_JS__) {
onMounted(() => (_system.value = getSystem()))
} else {
_system.value = getSystem()
}
return _system
}
let __contentVisibleDelay: number
function usePickerMethods(
props: Props,
......@@ -450,29 +488,24 @@ function usePickerMethods(
selectRef: HTMLRef,
inputRef: HTMLRef
) {
const isiPad = useIsiPad()
const _system = useSystem()
const selectorTypeComputed = computed(() => {
const type = props.selectorType
if (Object.values(selectorType).includes(type)) {
return type
}
return String(navigator.vendor).indexOf('Apple') === 0 &&
navigator.maxTouchPoints > 0
? selectorType.PICKER
: selectorType.SELECT
return isiPad.value ? selectorType.PICKER : selectorType.SELECT
})
const system = computed(() => {
if (__NODE_JS__) return ''
if (
props.mode === mode.DATE &&
!Object.values(fields).includes(props.fields) &&
state.isDesktop &&
/win|mac/i.test(navigator.platform)
state.isDesktop
) {
if (navigator.vendor === 'Google Inc.') {
return 'chrome'
} else if (/Firefox/.test(navigator.userAgent)) {
return 'firefox'
}
return _system.value
}
return ''
})
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册