@@ -29,7 +29,9 @@ import { useList, useListItem } from '../../../../admin-ui/context'
2929import {
3030 deserializeItemToValue ,
3131 Fields ,
32+ resolveConditionalActionMode ,
3233 serializeValueToOperationItem ,
34+ serializeItemForConditionalFilters ,
3335 useHasChanges ,
3436 useInvalidFields ,
3537} from '../../../../admin-ui/utils'
@@ -328,17 +330,19 @@ function ItemPage({ listKey }: ItemPageProps) {
328330 setValue ( initialValue )
329331 } , [ initialValue ] )
330332
331- const { actionsInContext, fieldModes, fieldPositions, isRequireds } = useMemo ( ( ) => {
332- const actionModes = Object . fromEntries (
333- Object . entries ( list . actions ) . map ( ( [ k , v ] ) => [ k , v . itemView . actionMode ] )
334- )
335- const fieldModes = Object . fromEntries (
336- Object . entries ( list . fields ) . map ( ( [ k , v ] ) => [ k , v . itemView . fieldMode ] )
337- )
338- const fieldPositions = Object . fromEntries (
333+ const { actionModes, fieldModes, fieldPositions, isRequireds } = useMemo ( ( ) => {
334+ const actionModes : Record <
335+ string ,
336+ ConditionalFilter < 'enabled' | 'disabled' | 'hidden' , BaseListTypeInfo >
337+ > = Object . fromEntries ( list . actions . map ( action => [ action . key , action . itemView . actionMode ] ) )
338+ const fieldModes : Record <
339+ string ,
340+ ConditionalFilter < 'edit' | 'read' | 'hidden' , BaseListTypeInfo >
341+ > = Object . fromEntries ( Object . entries ( list . fields ) . map ( ( [ k , v ] ) => [ k , v . itemView . fieldMode ] ) )
342+ const fieldPositions : Record < string , 'form' | 'sidebar' > = Object . fromEntries (
339343 Object . entries ( list . fields ) . map ( ( [ k , v ] ) => [ k , v . itemView . fieldPosition ] )
340344 )
341- const isRequireds = Object . fromEntries (
345+ const isRequireds : Record < string , ConditionalFilterCase < BaseListTypeInfo > > = Object . fromEntries (
342346 Object . entries ( list . fields ) . map ( ( [ k , v ] ) => [ k , v . itemView . isRequired ] )
343347 )
344348 for ( const field of data ?. keystone ?. adminMeta ?. list ?. fields ?? [ ] ) {
@@ -359,24 +363,32 @@ function ItemPage({ listKey }: ItemPageProps) {
359363 actionModes [ action . key ] = action . itemView . actionMode
360364 }
361365
362- // actions within context of an item
363- const actionsInContext = list . actions
366+ return {
367+ actionModes,
368+ fieldModes,
369+ fieldPositions,
370+ isRequireds,
371+ }
372+ } , [
373+ data ?. keystone ?. adminMeta ?. list ?. actions ,
374+ data ?. keystone ?. adminMeta ?. list ?. fields ,
375+ list . actions ,
376+ list . fields ,
377+ ] )
378+
379+ const actionsInContext = useMemo ( ( ) => {
380+ if ( ! value ) return [ ]
381+ const serializedValue = serializeItemForConditionalFilters ( list . fields , value )
382+ return list . actions
364383 . map ( action => ( {
365384 ...action ,
366385 itemView : {
367386 ...action . itemView ,
368- actionMode : actionModes [ action . key ] ,
387+ actionMode : resolveConditionalActionMode ( actionModes [ action . key ] , serializedValue ) ,
369388 } ,
370389 } ) )
371390 . filter ( action => action . itemView . actionMode !== 'hidden' )
372-
373- return {
374- actionsInContext,
375- fieldModes,
376- fieldPositions,
377- isRequireds,
378- }
379- } , [ data ?. keystone ?. adminMeta , list . fields ] )
391+ } , [ actionModes , list . actions , value ] )
380392
381393 function onAction ( action : ActionMeta , resultId : string | null ) {
382394 const { navigation } = action . itemView
0 commit comments