mirror of https://github.com/abpframework/abp
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							127 lines
						
					
					
						
							4.6 KiB
						
					
					
				
			
		
		
	
	
							127 lines
						
					
					
						
							4.6 KiB
						
					
					
				# Page Toolbar Extensions for Blazor UI
 | 
						|
 | 
						|
Page toolbar system allows you to add components to the toolbar of any page. The page toolbar is the area right to the header of a page. A button ("Import users from excel") was added to the user management page below:
 | 
						|
 | 
						|

 | 
						|
 | 
						|
You can add any type of view component item to the page toolbar or modify existing items.
 | 
						|
 | 
						|
## How to Set Up
 | 
						|
 | 
						|
In this example, we will add an "Import users from excel" button and execute a C# code for the user management page of the [Identity Module](../../Modules/Identity.md). 
 | 
						|
 | 
						|
### Create a C# File
 | 
						|
 | 
						|
First, add a new C# file to your solution. We added inside the `/Pages/Identity/` folder of the `.Blazor` project:
 | 
						|
 | 
						|

 | 
						|
 | 
						|
We will use the [component override system](Customization-Overriding-Components.md) in the Blazor. After creating a class inherits from the `UserManagement` component, we will override the `SetToolbarItemsAsync` method and add the toolbar item programmatically.
 | 
						|
 | 
						|
Here, the content of the overridden `SetToolbarItemsAsync` method.
 | 
						|
 | 
						|
```csharp
 | 
						|
protected override async ValueTask SetToolbarItemsAsync()
 | 
						|
{
 | 
						|
    await base.SetToolbarItemsAsync();
 | 
						|
    Toolbar.AddButton("Import users from excel", () =>
 | 
						|
    {
 | 
						|
        //TODO: Write your custom code
 | 
						|
        return Task.CompletedTask;
 | 
						|
    }, "file-import", Blazorise.Color.Secondary);
 | 
						|
}
 | 
						|
```
 | 
						|
> In order to use the `AddButton` extension method, you need to add a using statement for the `Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars` namespace.
 | 
						|
 | 
						|
Here, the entire content of the file.
 | 
						|
 | 
						|
```csharp
 | 
						|
using System.Threading.Tasks;
 | 
						|
using Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars;
 | 
						|
using Volo.Abp.DependencyInjection;
 | 
						|
using Volo.Abp.Identity.Blazor.Pages.Identity;
 | 
						|
 | 
						|
namespace MyCompanyName.MyProjectName.Blazor.Pages.Identity
 | 
						|
{
 | 
						|
    [ExposeServices(typeof(UserManagement))]
 | 
						|
    [Dependency(ReplaceServices = true)]
 | 
						|
    public class CustomizedUserManagement : UserManagement
 | 
						|
    {
 | 
						|
        protected override async ValueTask SetToolbarItemsAsync()
 | 
						|
        {
 | 
						|
            await base.SetToolbarItemsAsync();
 | 
						|
            Toolbar.AddButton("Import users from excel", () =>
 | 
						|
            {
 | 
						|
                //TODO: Write your custom code
 | 
						|
                return Task.CompletedTask;
 | 
						|
            }, "file-import", Blazorise.Color.Secondary);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
When you run the application, you will see the button added next to the current button list. There are some other parameters of the `AddButton` method (for example, use `Order` to set the order of the button component relative to the other components).
 | 
						|
 | 
						|
## Advanced Use Cases
 | 
						|
 | 
						|
While you typically want to add a button action to the page toolbar, it is possible to add any type of blazor component.
 | 
						|
 | 
						|
### Add A Blazor Component to a Page Toolbar
 | 
						|
 | 
						|
First, create a new blazor component in your project:
 | 
						|
 | 
						|

 | 
						|
 | 
						|
For this example, we've created a `MyToolbarComponent` component under the `/Pages/Identity/` folder.
 | 
						|
 | 
						|
`MyToolbarComponent.razor` content:
 | 
						|
 | 
						|
````csharp
 | 
						|
<Button Color="Color.Dark">CLICK ME</Button>
 | 
						|
````
 | 
						|
We will leave the `MyToolbarComponent.razor.cs` file empty.
 | 
						|
 | 
						|
Then you can add the `MyToolbarComponent` to the user management page toolbar:
 | 
						|
 | 
						|
````csharp
 | 
						|
protected override async ValueTask SetToolbarItemsAsync()
 | 
						|
{
 | 
						|
    await base.SetToolbarItemsAsync();
 | 
						|
    Toolbar.AddComponent<MyToolbarComponent>();
 | 
						|
}
 | 
						|
````
 | 
						|
 | 
						|
* If your component accepts parameters, you can pass them as key/value pairs using the `arguments` parameter.
 | 
						|
 | 
						|
#### Permissions
 | 
						|
 | 
						|
If your button/component should be available based on a [permission/policy](../../Authorization.md), you can pass the permission/policy name as the `RequiredPolicyName` parameter to the `AddButton` and `AddComponent` methods.
 | 
						|
 | 
						|
### Add a Page Toolbar Contributor
 | 
						|
 | 
						|
If you perform advanced custom logic while adding an item to a page toolbar, you can create a class that implements the `IPageToolbarContributor` interface or inherits from the `PageToolbarContributor` class:
 | 
						|
 | 
						|
````csharp
 | 
						|
public class MyToolbarContributor : PageToolbarContributor
 | 
						|
{
 | 
						|
    public override Task ContributeAsync(PageToolbarContributionContext context)
 | 
						|
    {
 | 
						|
        context.Items.Insert(0, new PageToolbarItem(typeof(MyToolbarComponent)));
 | 
						|
        return Task.CompletedTask;
 | 
						|
    }
 | 
						|
}
 | 
						|
````
 | 
						|
 | 
						|
* You can use `context.ServiceProvider` to resolve dependencies if you need.
 | 
						|
 | 
						|
Then add your class to the `Contributors` list:
 | 
						|
 | 
						|
````csharp
 | 
						|
protected override async ValueTask SetToolbarItemsAsync()
 | 
						|
{
 | 
						|
    await base.SetToolbarItemsAsync();
 | 
						|
    Toolbar.Contributors.Add(new PageContributor());
 | 
						|
}
 | 
						|
````
 | 
						|
 |