From b0324f6b759877f24f1b80376e5cc1a2ee63eddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 18 Nov 2020 16:54:37 +0300 Subject: [PATCH] Documented Blazor UI: Toolbars --- docs/en/UI/Blazor/Toolbars.md | 74 +++++++++++++++++- .../blazor-notification-bell-component.png | Bin 0 -> 17540 bytes 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 docs/en/images/blazor-notification-bell-component.png diff --git a/docs/en/UI/Blazor/Toolbars.md b/docs/en/UI/Blazor/Toolbars.md index 25c5f077a2..011531a141 100644 --- a/docs/en/UI/Blazor/Toolbars.md +++ b/docs/en/UI/Blazor/Toolbars.md @@ -1,3 +1,75 @@ # Blazor UI: Toolbars -TODO \ No newline at end of file +The Toolbar system is used to define **toolbars** on the user interface. Modules (or your application) can add **items** to a toolbar, then the [theme](Theming.md) renders the toolbar on the **layout**. + +There is only one **standard toolbar** named "Main" (defined as a constant: `StandardToolbars.Main`). The [Basic Theme](Basic-Theme) renders the main toolbar as shown below: + +![bookstore-toolbar-highlighted](../../images/bookstore-toolbar-highlighted.png) + +In the screenshot above, there are two items added to the main toolbar: Language switch component & user menu. You can add your own items here. + +## Example: Add a Notification Icon + +In this example, we will add a **notification (bell) icon** to the left of the language switch item. A item in the toolbar should be a **Razor Component**. So, first, create a new razor component in your project (the location of the component doesn't matter): + +![bookstore-notification-view-component](../../images/blazor-notification-bell-component.png) + +The content of the `Notification.razor` is shown below: + +````html +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase +
+ +
+@code { + private async Task ShowNotifications() + { + await Message.Info("TODO: Show notifications"); + } +} +```` + +This sample simply shows a message. In real life, you probably want to call an HTTP API to get notifications and show on the UI. + +Now, we can create a class implementing the `IToolbarContributor` interface: + +````csharp +using System.Threading.Tasks; +using MyCompanyName.MyProjectName.Blazor.Components; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars; + +namespace MyCompanyName.MyProjectName.Blazor +{ + public class MyToolbarContributor : IToolbarContributor + { + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items.Insert(0, new ToolbarItem(typeof(Notification))); + } + + return Task.CompletedTask; + } + } +} +```` + +This class adds the `NotificationViewComponent` as the first item in the `Main` toolbar. + +Finally, you need to add this contributor to the `AbpToolbarOptions`, in the `ConfigureServices` of your [module](../../Module-Development-Basics.md): + +````csharp +Configure(options => +{ + options.Contributors.Add(new MyToolbarContributor()); +}); +```` + +That's all, you will see the notification icon on the toolbar when you run the application: + +![bookstore-notification-icon-on-toolbar](D:/Github/abp/docs/en/images/bookstore-notification-icon-on-toolbar.png) + +## IToolbarManager + +`IToolbarManager` is used to render the toolbar. It returns the toolbar items by a toolbar name. This is generally used by the [themes](Theming.md) to render the toolbar on the layout. \ No newline at end of file diff --git a/docs/en/images/blazor-notification-bell-component.png b/docs/en/images/blazor-notification-bell-component.png new file mode 100644 index 0000000000000000000000000000000000000000..65934ec24bc556adcc42461a36489b0c195ed787 GIT binary patch literal 17540 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 K5~X4veE$!J^(qno literal 0 HcmV?d00001