private convertElement()

in packages/core/src/shared/wizards/wizardForm.ts [167:205]


    private convertElement<TProp>(
        prop: string,
        element: FormDataElement<TProp, any>,
        options?: ContextOptions<TState, TProp>
    ): FormDataElement<TState, any> {
        const wrappedElement: FormDataElement<TState, any> = {}

        if (element.provider !== undefined) {
            wrappedElement.provider = (state) => {
                const stateWithCache = Object.assign(_.get(state, prop, {}), {
                    stepCache: state.stepCache,
                    estimator: state.estimator,
                })

                return element.provider!(stateWithCache as StateWithCache<WizardState<TProp>, any>)
            }
        }

        if (element.showWhen !== undefined || options?.showWhen !== undefined || options?.requireParent === true) {
            wrappedElement.showWhen = (state) =>
                (options?.requireParent !== true || _.get(state, prop) !== undefined) &&
                (element.showWhen !== undefined ? element.showWhen!(_.get(state, prop, {})) : true) &&
                (options?.showWhen !== undefined ? options.showWhen!(state) : true)
        }

        wrappedElement.setDefault =
            element.setDefault !== undefined
                ? (state) =>
                      options?.requireParent !== true || _.get(state, prop) !== undefined
                          ? options?.showWhen === undefined || options.showWhen(state)
                              ? element.setDefault!(_.get(state, prop, {}))
                              : undefined
                          : undefined
                : undefined

        wrappedElement.requireParent = element.requireParent

        return wrappedElement
    }