@@ -274,7 +274,7 @@ const getResourceDataRequestSchema: AnySchemaObject = {
274274 filters : commonFiltersSchema ,
275275 columns : {
276276 type : 'array' ,
277- description : 'Optional list of resource column names to include in returned rows. When set, the response is projected to exactly these resource columns and computed helper fields such as _label and _clickUrl are omitted .' ,
277+ description : 'Optional list of resource column names to include in returned rows. For list requests, computed row helper fields such as _label and _clickUrl are still returned when available .' ,
278278 minItems : 1 ,
279279 uniqueItems : true ,
280280 items : { type : 'string' } ,
@@ -1316,6 +1316,7 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
13161316 }
13171317 }
13181318 const selectedColumnNameSet = selectedColumnNames ? new Set ( selectedColumnNames ) : undefined ;
1319+ const shouldAddListHelpers = source === 'list' ;
13191320 const selectedDataSourceColumnNameSet = selectedColumnNames
13201321 ? new Set ( selectedColumnNames . filter ( ( columnName ) => resource . dataSourceColumns . some ( ( col ) => col . name === columnName ) ) )
13211322 : undefined ;
@@ -1331,7 +1332,7 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
13311332 }
13321333 }
13331334
1334- const selectedDataSourceColumns = selectedDataSourceColumnNameSet
1335+ const selectedDataSourceColumns = selectedDataSourceColumnNameSet && ! shouldAddListHelpers
13351336 ? (
13361337 resource . dataSourceColumns . some ( ( col ) => selectedDataSourceColumnNameSet . has ( col . name ) )
13371338 ? resource . dataSourceColumns . filter ( ( col ) => selectedDataSourceColumnNameSet . has ( col . name ) )
@@ -1382,7 +1383,7 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
13821383 // for foreign keys, add references
13831384 await Promise . all (
13841385 resource . columns . filter ( ( col ) => (
1385- col . foreignResource && ( ! selectedColumnNameSet || selectedColumnNameSet . has ( col . name ) )
1386+ col . foreignResource && ( ! selectedColumnNameSet || shouldAddListHelpers || selectedColumnNameSet . has ( col . name ) )
13861387 ) ) . map ( async ( col ) => {
13871388 let targetDataMap = { } ;
13881389
@@ -1493,7 +1494,6 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
14931494 } )
14941495 ) ;
14951496
1496- const pkField = resource . columns . find ( ( col ) => col . primaryKey ) ?. name ;
14971497 // remove all columns which are not defined in resources, or defined but backendOnly
14981498 {
14991499 const ctx = {
@@ -1516,12 +1516,12 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
15161516 delete item [ key ] ;
15171517 }
15181518 }
1519- if ( ! selectedColumnNameSet ) {
1519+ if ( ! selectedColumnNameSet || shouldAddListHelpers ) {
15201520 item . _label = resource . recordLabel ( item ) ;
15211521 }
15221522 }
15231523 }
1524- if ( ! selectedColumnNameSet && source === 'list' && resource . options . listTableClickUrl ) {
1524+ if ( shouldAddListHelpers && resource . options . listTableClickUrl ) {
15251525 await Promise . all (
15261526 data . data . map ( async ( item ) => {
15271527 item . _clickUrl = await resource . options . listTableClickUrl ( item , adminUser , resource ) ;
@@ -1551,7 +1551,7 @@ export default class AdminForthRestAPI implements IAdminForthRestAPI {
15511551 if ( selectedColumnNameSet ) {
15521552 for ( const item of data . data ) {
15531553 for ( const key of Object . keys ( item ) ) {
1554- if ( ! selectedColumnNameSet . has ( key ) ) {
1554+ if ( ! selectedColumnNameSet . has ( key ) && key !== '_label' && key !== '_clickUrl' ) {
15551555 delete item [ key ] ;
15561556 }
15571557 }
0 commit comments