Skip to content

Commit

Permalink
fix(core): fix destruction default value is not work and fix typings (#…
Browse files Browse the repository at this point in the history
…808)

* fix(core): fix destruction default is not work and fix typings

* fix(core): fix ci

* fix(core): fix ci
  • Loading branch information
janryWang authored Apr 19, 2020
1 parent 03bbd0b commit e032d4e
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 46 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"version:major": "npm run prevesion && lerna version major --force-publish=* --no-git-tag-version -m \"chore(versions): publish packages %s\"",
"release:force": "lerna publish from-package --yes",
"release": "lerna publish",
"lint": "eslint --ext .ts,.tsx,.js \"packages/*/src/**.@(ts|tsx|js)\" \"scripts/**/*.js\"",
"lint": "eslint --ext .ts,.tsx,.js \"packages/*/src/**.@(ts|tsx|js)\" \"scripts/**/*.js\" --fix",
"postinstall": "opencollective-postinstall"
},
"resolutions": {
Expand Down
1 change: 1 addition & 0 deletions packages/.eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"@typescript-eslint/no-object-literal-type-assertion": 0,
"@typescript-eslint/no-use-before-define": 0,
"@typescript-eslint/no-unused-vars": 2,
"@typescript-eslint/no-namespace": 0,
"no-console": [
"error",
{
Expand Down
109 changes: 64 additions & 45 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
clone,
log,
isValid,
isEmpty,
FormPath,
FormPathPattern,
BigData,
Expand Down Expand Up @@ -47,9 +48,18 @@ import {
export * from './shared/lifecycle'
export * from './types'

export function createForm<FieldProps, VirtualFieldProps>(
options: IFormCreatorOptions = {}
) {
declare global {
namespace FormilyCore {
export interface FieldProps {
[key: string]: any
}
export interface VirtualFieldProps {
[key: string]: any
}
}
}

export function createForm(options: IFormCreatorOptions = {}) {
function onGraphChange({ type, payload }) {
heart.publish(LifeCycleTypes.ON_FORM_GRAPH_CHANGE, graph)
if (type === 'GRAPH_NODE_WILL_UNMOUNT') {
Expand Down Expand Up @@ -195,9 +205,11 @@ export function createForm<FieldProps, VirtualFieldProps>(

function updateRecoverableShownState(
parentState:
| IVirtualFieldState<VirtualFieldProps>
| IFieldState<FieldProps>,
childState: IVirtualFieldState<VirtualFieldProps> | IFieldState<FieldProps>,
| IVirtualFieldState<FormilyCore.VirtualFieldProps>
| IFieldState<FormilyCore.FieldProps>,
childState:
| IVirtualFieldState<FormilyCore.VirtualFieldProps>
| IFieldState<FormilyCore.FieldProps>,
name: 'visible' | 'display'
) {
const lastShownState = env.lastShownStates[childState.path]
Expand Down Expand Up @@ -251,7 +263,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
})
notifyFormInitialValuesChange()
}
return (published: IFieldState<FieldProps>) => {
return (published: IFieldState<FormilyCore.FieldProps>) => {
const valueChanged = field.isDirty('value')
const initialValueChanged = field.isDirty('initialValue')
const visibleChanged = field.isDirty('visible')
Expand All @@ -268,7 +280,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
const isEmptyValue = !isValid(published.value)
const isEmptyInitialValue = !isValid(published.initialValue)
if (isEmptyValue || isEmptyInitialValue) {
field.setSourceState((state: IFieldState<FieldProps>) => {
field.setSourceState((state: IFieldState<FormilyCore.FieldProps>) => {
if (isEmptyValue) {
const formValue = getFormValuesIn(state.name)
state.value = isValid(formValue) ? formValue : state.value
Expand Down Expand Up @@ -302,9 +314,11 @@ export function createForm<FieldProps, VirtualFieldProps>(
if (visibleChanged) {
if (!published.visible) {
if (isValid(published.value)) {
field.setSourceState((state: IFieldState<FieldProps>) => {
state.visibleCacheValue = published.value
})
field.setSourceState(
(state: IFieldState<FormilyCore.FieldProps>) => {
state.visibleCacheValue = published.value
}
)
}
deleteFormValuesIn(path)
notifyTreeFromValues()
Expand All @@ -322,7 +336,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
}
}
graph.eachChildren(path, childState => {
childState.setState((state: IFieldState<FieldProps>) => {
childState.setState((state: IFieldState<FormilyCore.FieldProps>) => {
if (visibleChanged) {
updateRecoverableShownState(published, state, 'visible')
}
Expand All @@ -339,9 +353,11 @@ export function createForm<FieldProps, VirtualFieldProps>(
) {
if (published.unmounted) {
if (isValid(published.value)) {
field.setSourceState((state: IFieldState<FieldProps>) => {
state.visibleCacheValue = published.value
})
field.setSourceState(
(state: IFieldState<FormilyCore.FieldProps>) => {
state.visibleCacheValue = published.value
}
)
}
deleteFormValuesIn(path, true)
notifyTreeFromValues()
Expand Down Expand Up @@ -386,7 +402,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
}

function onVirtualFieldChange({ field, path }) {
return (published: IVirtualFieldState<VirtualFieldProps>) => {
return (published: IVirtualFieldState<FormilyCore.VirtualFieldProps>) => {
const visibleChanged = field.isDirty('visible')
const displayChanged = field.isDirty('display')
const mountedChanged = field.isDirty('mounted')
Expand All @@ -399,7 +415,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
if (visibleChanged || displayChanged) {
graph.eachChildren(path, childState => {
childState.setState(
(state: IVirtualFieldState<VirtualFieldProps>) => {
(state: IVirtualFieldState<FormilyCore.VirtualFieldProps>) => {
if (visibleChanged) {
updateRecoverableShownState(published, state, 'visible')
}
Expand Down Expand Up @@ -451,16 +467,18 @@ export function createForm<FieldProps, VirtualFieldProps>(
heart.batch(() => {
//fix #766
field.batch(() => {
field.setState((state: IVirtualFieldState<VirtualFieldProps>) => {
state.initialized = true
state.props = props
if (isValid(visible)) {
state.visible = visible
}
if (isValid(display)) {
state.display = display
field.setState(
(state: IVirtualFieldState<FormilyCore.VirtualFieldProps>) => {
state.initialized = true
state.props = props
if (isValid(visible)) {
state.visible = visible
}
if (isValid(display)) {
state.display = display
}
}
})
)
batchRunTaskQueue(field, nodePath)
})
})
Expand Down Expand Up @@ -519,27 +537,26 @@ export function createForm<FieldProps, VirtualFieldProps>(

heart.batch(() => {
field.batch(() => {
field.setState((state: IFieldState<FieldProps>) => {
field.setState((state: IFieldState<FormilyCore.FieldProps>) => {
const formValue = getFormValuesIn(state.name)
const formInitialValue = getFormInitialValuesIn(state.name)

if (isValid(initialValue)) {
state.initialValue = initialValue
} else if (isValid(formInitialValue)) {
state.initialValue = formInitialValue
}

if (isValid(value)) {
// value > formValue > initialValue
state.value = value
} else if (
existFormValuesIn(state.name) ||
formValue !== undefined
) {
} else if (existFormValuesIn(state.name) || !isEmpty(formValue)) {
//to resolve empty array checker
state.value = formValue
} else if (isValid(initialValue)) {
state.value = initialValue
}

if (isValid(initialValue)) {
state.initialValue = initialValue
} else if (isValid(formInitialValue)) {
state.initialValue = formInitialValue
}

if (isValid(visible)) {
state.visible = visible
}
Expand Down Expand Up @@ -594,7 +611,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
return validate(value, rules).then(({ errors, warnings }) => {
clearTimeout((field as any).validateTimer)
return new Promise(resolve => {
field.setState((state: IFieldState<FieldProps>) => {
field.setState((state: IFieldState<FormilyCore.FieldProps>) => {
state.validating = false
state.ruleErrors = errors
state.ruleWarnings = warnings
Expand Down Expand Up @@ -786,7 +803,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
field = input
}
function setValue(...values: any[]) {
field.setState((state: IFieldState<FieldProps>) => {
field.setState((state: IFieldState<FormilyCore.FieldProps>) => {
state.value = values[0]
state.values = values
})
Expand Down Expand Up @@ -873,12 +890,12 @@ export function createForm<FieldProps, VirtualFieldProps>(
return values[0]
},
focus() {
field.setState((state: IFieldState<FieldProps>) => {
field.setState((state: IFieldState<FormilyCore.FieldProps>) => {
state.active = true
})
},
blur() {
field.setState((state: IFieldState<FieldProps>) => {
field.setState((state: IFieldState<FormilyCore.FieldProps>) => {
state.active = false
state.visited = true
})
Expand Down Expand Up @@ -993,7 +1010,7 @@ export function createForm<FieldProps, VirtualFieldProps>(
hostUpdate(() => {
graph.eachChildren('', selector, (field: IField) => {
;(field as any).disabledValidate = true
field.setState((state: IFieldState<FieldProps>) => {
field.setState((state: IFieldState<FormilyCore.FieldProps>) => {
state.modified = false
state.ruleErrors = []
state.ruleWarnings = []
Expand Down Expand Up @@ -1228,7 +1245,7 @@ export function createForm<FieldProps, VirtualFieldProps>(

function setFieldState(
path: FormPathPattern,
callback?: (state: IFieldState<FieldProps>) => void,
callback?: (state: IFieldState<FormilyCore.FieldProps>) => void,
silent?: boolean
) {
if (!isFn(callback)) return
Expand Down Expand Up @@ -1281,7 +1298,7 @@ export function createForm<FieldProps, VirtualFieldProps>(

function getFieldState(
path: FormPathPattern,
callback?: (state: IFieldState<FieldProps>) => any
callback?: (state: IFieldState<FormilyCore.FieldProps>) => any
) {
const field = graph.select(path)
return field && field.getState(callback)
Expand All @@ -1297,7 +1314,9 @@ export function createForm<FieldProps, VirtualFieldProps>(
each(
nodes,
(
node: IFieldState<FieldProps> | IVirtualFieldState<VirtualFieldProps>,
node:
| IFieldState<FormilyCore.FieldProps>
| IVirtualFieldState<FormilyCore.VirtualFieldProps>,
key
) => {
let nodeState: any
Expand Down
9 changes: 9 additions & 0 deletions packages/react-schema-renderer/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ import { ValidatePatternRules } from '@formily/validator'
import { Schema } from './shared/schema'
export * from '@formily/react'

declare global {
namespace FormilyCore {
// eslint-disable-next-line
export interface FieldProps extends ISchema {}
// eslint-disable-next-line
export interface VirtualFieldProps extends ISchema {}
}
}

export interface ISchemaFieldProps {
path?: FormPathPattern
schema?: Schema
Expand Down

0 comments on commit e032d4e

Please sign in to comment.