]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat(transition): add runtime props validation for TransitionGroup
authorEvan You <yyx990803@gmail.com>
Fri, 29 Nov 2019 21:47:41 +0000 (16:47 -0500)
committerEvan You <yyx990803@gmail.com>
Fri, 29 Nov 2019 21:47:41 +0000 (16:47 -0500)
packages/runtime-dom/src/components/Transition.ts
packages/runtime-dom/src/components/TransitionGroup.ts

index 825802f061b7092860e3a85a9b8c7580d1b9371b..b3f9685d62f93b2ddd0b8754bcbafef346a138d0 100644 (file)
@@ -37,25 +37,27 @@ export const Transition: FunctionalComponent = (
   { slots }
 ) => h(BaseTransition, resolveTransitionProps(props), slots)
 
+export const TransitionPropsValidators = {
+  ...(BaseTransition as any).props,
+  name: String,
+  type: String,
+  // Cannot use Boolean otherwise it will be force casted to false when
+  // omitted
+  css: null,
+  duration: Object,
+  enterFromClass: String,
+  enterActiveClass: String,
+  enterToClass: String,
+  appearFromClass: String,
+  appearActiveClass: String,
+  appearToClass: String,
+  leaveFromClass: String,
+  leaveActiveClass: String,
+  leaveToClass: String
+}
+
 if (__DEV__) {
-  Transition.props = {
-    ...(BaseTransition as any).props,
-    name: String,
-    type: String,
-    // Cannot use Boolean otherwise it will be force casted to false when
-    // omitted
-    css: null,
-    duration: Object,
-    enterFromClass: String,
-    enterActiveClass: String,
-    enterToClass: String,
-    appearFromClass: String,
-    appearActiveClass: String,
-    appearToClass: String,
-    leaveFromClass: String,
-    leaveActiveClass: String,
-    leaveToClass: String
-  }
+  Transition.props = TransitionPropsValidators
 }
 
 export function resolveTransitionProps({
index 9646b3276ad204bab1eeb2ec0ca53dcfc2eea9da..bd372364486a07b37d5f2b492ae52ec164114e6c 100644 (file)
@@ -4,12 +4,12 @@ import {
   removeTransitionClass,
   ElementWithTransition,
   getTransitionInfo,
-  resolveTransitionProps
+  resolveTransitionProps,
+  TransitionPropsValidators
 } from './Transition'
 import {
   Fragment,
   VNode,
-  Slots,
   warn,
   resolveTransitionHooks,
   toRaw,
@@ -17,7 +17,8 @@ import {
   getCurrentInstance,
   setTransitionHooks,
   createVNode,
-  onUpdated
+  onUpdated,
+  SetupContext
 } from '@vue/runtime-core'
 
 interface Position {
@@ -33,8 +34,8 @@ export type TransitionGroupProps = Omit<TransitionProps, 'mode'> & {
   moveClass?: string
 }
 
-export const TransitionGroup = {
-  setup(props: TransitionGroupProps, { slots }: { slots: Slots }) {
+const TransitionGroupImpl = {
+  setup(props: TransitionGroupProps, { slots }: SetupContext) {
     const instance = getCurrentInstance()!
     const state = useTransitionState()
     let prevChildren: VNode[]
@@ -128,6 +129,21 @@ export const TransitionGroup = {
   }
 }
 
+export const TransitionGroup = (TransitionGroupImpl as unknown) as {
+  new (): {
+    $props: TransitionGroupProps
+  }
+}
+
+if (__DEV__) {
+  const props = ((TransitionGroup as any).props = {
+    ...TransitionPropsValidators,
+    tag: String,
+    moveClass: String
+  })
+  delete props.mode
+}
+
 function callPendingCbs(c: VNode) {
   if (c.el._moveCb) {
     c.el._moveCb()