11import {
2- Admin , Create , Datagrid , Edit , EditButton , List , HttpError , Resource , SimpleForm ,
2+ Admin , Create , Datagrid , DatagridConfigurable , Edit , EditButton , List , HttpError , Resource , SimpleForm ,
3+ SelectColumnsButton , CreateButton , FilterButton , ExportButton , TopToolbar ,
4+ AppBar , InspectorButton , Layout , TitlePortal ,
35 BulkDeleteButton , BulkExportButton , BulkUpdateButton ,
46 SimpleShowLayout , Show ,
57 AutocompleteInput ,
@@ -106,11 +108,10 @@ const authProvider = {
106108} ;
107109
108110
109- function createFields ( resource , name , permissions , display_only = false ) {
111+ function createFields ( resource , name , permissions ) {
110112 let components = [ ] ;
111113 for ( const [ field , state ] of Object . entries ( resource [ "fields" ] ) ) {
112- if ( ( display_only && ! resource [ "display" ] . includes ( field ) )
113- || ! hasPermission ( `${ name } .${ field } .view` , permissions ) )
114+ if ( ! hasPermission ( `${ name } .${ field } .view` , permissions ) )
114115 continue ;
115116
116117 const C = COMPONENTS [ state [ "type" ] ] ;
@@ -128,7 +129,7 @@ function createFields(resource, name, permissions, display_only=false) {
128129 c = < C source = { field } { ...state [ "props" ] } /> ;
129130 }
130131 // Show icon if user doesn't have permission to view this field (based on filters).
131- components . push ( < WithRecord label = { state [ "props" ] [ "label" ] || field } render = {
132+ components . push ( < WithRecord source = { field } label = { state [ "props" ] [ "label" ] || field } render = {
132133 ( record ) => hasPermission ( `${ name } .${ field } .view` , permissions , record ) ? c : < VisibilityOffIcon />
133134 } /> ) ;
134135 }
@@ -164,7 +165,7 @@ function createInputs(resource, name, perm_type, permissions) {
164165 const c = < C source = { field } { ...state [ "props" ] } /> ;
165166 if ( perm_type === "edit" )
166167 // Don't render if filters disallow editing this field.
167- components . push ( < WithRecord render = {
168+ components . push ( < WithRecord source = { field } render = {
168169 ( record ) => hasPermission ( `${ name } .${ field } .${ perm_type } ` , permissions , record ) && c
169170 } /> ) ;
170171 else
@@ -191,6 +192,14 @@ function createBulkUpdates(resource, name, permissions) {
191192}
192193
193194const AiohttpList = ( resource , name , permissions ) => {
195+ const ListActions = ( ) => (
196+ < TopToolbar >
197+ < SelectColumnsButton />
198+ < FilterButton />
199+ { hasPermission ( `${ name } .add` , permissions ) && < CreateButton /> }
200+ < ExportButton />
201+ </ TopToolbar >
202+ ) ;
194203 const BulkActionButtons = ( ) => (
195204 < >
196205 { hasPermission ( `${ name } .edit` , permissions ) && createBulkUpdates ( resource , name , permissions ) }
@@ -200,11 +209,11 @@ const AiohttpList = (resource, name, permissions) => {
200209 ) ;
201210
202211 return (
203- < List filters = { createInputs ( resource , name , "view" , permissions ) } >
204- < Datagrid rowClick = "show" bulkActionButtons = { < BulkActionButtons /> } >
205- { createFields ( resource , name , permissions , true ) }
206- < WithRecord render = { ( record ) => hasPermission ( `${ name } .edit` , permissions , record ) && < EditButton /> } />
207- </ Datagrid >
212+ < List actions = { < ListActions /> } filters = { createInputs ( resource , name , "view" , permissions ) } >
213+ < DatagridConfigurable omit = { resource [ "list_omit" ] } rowClick = "show" bulkActionButtons = { < BulkActionButtons /> } >
214+ { createFields ( resource , name , permissions ) }
215+ < WithRecord label = "[Edit]" render = { ( record ) => hasPermission ( `${ name } .edit` , permissions , record ) && < EditButton /> } />
216+ </ DatagridConfigurable >
208217 </ List >
209218 ) ;
210219}
@@ -303,8 +312,16 @@ function createResources(resources, permissions) {
303312 return components ;
304313}
305314
315+ const AiohttpAppBar = ( ) => (
316+ < AppBar >
317+ < TitlePortal />
318+ < InspectorButton />
319+ </ AppBar >
320+ ) ;
321+
306322const App = ( ) => (
307- < Admin dataProvider = { dataProvider } authProvider = { authProvider } title = { STATE [ "view" ] [ "name" ] } disableTelemetry requireAuth >
323+ < Admin dataProvider = { dataProvider } authProvider = { authProvider } title = { STATE [ "view" ] [ "name" ] }
324+ layout = { ( props ) => < Layout { ...props } appBar = { AiohttpAppBar } /> } disableTelemetry requireAuth >
308325 { permissions => createResources ( STATE [ "resources" ] , permissions ) }
309326 </ Admin >
310327) ;
0 commit comments