Eject
If you want to change one of Avo's built-in views, you can eject it, update it and use it in your admin panel.
WARNING
Once ejected, the views will not receive updates on new Avo releases. You must maintain them yourself.
-> --partial
Prepared templates
We prepared a few templates to make it easier for you.
bin/rails generate avo:eject --partial :logo
will eject the _logo.html.erb
partial.
▶ bin/rails generate avo:eject --partial :logo
Running via Spring preloader in process 20947
create app/views/avo/logo/_logo.html.erb
A list of prepared templates:
:logo
➡️app/views/avo/partials/_logo.html.erb
:head
➡️app/views/avo/partials/_head.html.erb
:header
➡️app/views/avo/partials/_header.html.erb
:footer
➡️app/views/avo/partials/_footer.html.erb
:scripts
➡️app/views/avo/partials/_scripts.html.erb
:sidebar_extra
➡️app/views/avo/partials/_sidebar_extra.html.erb
Logo
In the app/views/avo/partials
directory, you will find the _logo.html.erb
partial, which you may customize however you want. It will be displayed in place of Avo's logo.
Header
The _header.html.erb
partial enables you to customize the name and link of your app.
Footer
The _footer.html.erb
partial enables you to customize the footer of your admin.
Scripts
The _scripts.html.erb
partial enables you to insert scripts in the footer of your admin.
Eject any template
You can eject any partial from Avo using the partial path.
▶ bin/rails generate avo:eject --partial app/views/layouts/avo/application.html.erb
create app/views/layouts/avo/application.html.erb
-> --component
$ bin/rails generate avo:eject --component Avo::Index::TableRowComponent
or
$ bin/rails generate avo:eject --component avo/index/table_row_component
Have the same output:
create app/components/avo/index/table_row_component.rb
create app/components/avo/index/table_row_component.html.erb
-> --field-components
Check the --scope
and the components
field options for more details on how to override the components only on specific parts of the project.
$ rails g avo:eject --field-components text
create app/components/avo/fields/text_field
create app/components/avo/fields/text_field/edit_component.html.erb
create app/components/avo/fields/text_field/edit_component.rb
create app/components/avo/fields/text_field/index_component.html.erb
create app/components/avo/fields/text_field/index_component.rb
create app/components/avo/fields/text_field/show_component.html.erb
create app/components/avo/fields/text_field/show_component.rb
Let's say you want to override only the edit component of the TextField
, that can be achieved with this simple command.
$ rails g avo:eject --field-components text --view edit
create app/components/avo/fields/text_field/edit_component.rb
create app/components/avo/fields/text_field/edit_component.html.erb
-> --view
While utilizing the --field-components
option, you can selectively extract a specific view using the --view
parameter, as demonstrated in the example above. If this option is omitted, all components of the field will be ejected.
-> --scope
$ rails g avo:eject --component Avo::Views::ResourceIndexComponent --scope admins
create app/components/avo/views/admins/resource_index_component.rb
create app/components/avo/views/admins/resource_index_component.html.erb
$ rails g avo:eject --field-components text --view show --scope admins
create app/components/avo/fields/admins/text_field/show_component.rb
create app/components/avo/fields/admins/text_field/show_component.html.erb
The ejected file have the same code that original Avo::Views::ResourceIndexComponent
or Avo::Fields::TextField::ShowComponent
but you can notice that the class name and the directory has changed
class Avo::Views::Admins::ResourceIndexComponent < Avo::ResourceComponent
class Avo::Fields::Admins::TextField::ShowComponent < Avo::Fields::ShowComponent
Scopes transformation
--scope users_admins
-> Avo::Views::UsersAdmins::ResourceIndexComponent
--scope users/admins
-> Avo::Views::Users::Admins::ResourceIndexComponent