@@ -2,7 +2,7 @@ import { ThemeProvider as ThemeUIProvider } from 'theme-ui'
22import { get , unset } from 'lodash-es'
33import { createContext , ReactNode , useContext } from 'react'
44import { KeyArg , Recipe , EditorData } from './types'
5- import { applyRecipe } from './util'
5+ import { applyRecipe , parentPath } from './util'
66import { ThemeProvider , useTheme } from './ThemeContext'
77import { EditorConfigProvider , EditorConfig } from './EditorConfigContext'
88import { theme as uiTheme } from '../ui/theme'
@@ -14,6 +14,7 @@ export interface EditorContextValue<V> extends EditorData<V> {
1414 theme ?: Theme
1515 setValue ( value : Recipe < V > ) : void
1616 getField < T = any > ( key : KeyArg ) : T
17+ getParentField < T = any > ( key : KeyArg ) : T
1718 setField < T > ( key : KeyArg , value : Recipe < T > ) : void
1819 setFields < T > ( fields : Record < string , Recipe < T > > , removeFields ?: KeyArg [ ] ) : void
1920 removeField ( key : KeyArg ) : void
@@ -29,6 +30,14 @@ export function useEditor() {
2930 return field ? ( get ( value , field ) as T ) : value
3031 }
3132
33+ function getParentField < T = any > ( field : KeyArg | undefined ) {
34+ if ( ! field || ! Array . isArray ( field ) ) {
35+ return value
36+ }
37+
38+ return get ( value , parentPath ( field ) )
39+ }
40+
3241 function getFields < T = any > ( fields : KeyArg [ ] | undefined ) {
3342 const fieldsValue = fields ?. reduce ( ( acc : any , curr : KeyArg ) => {
3443 const fieldValue = get ( value , curr ) as T
@@ -83,6 +92,7 @@ export function useEditor() {
8392 return {
8493 ...context ,
8594 getField,
95+ getParentField,
8696 getFields,
8797 setField,
8898 setFields,
0 commit comments