ZauberCMS
  • 🪄Welcome to ZauberCMS
  • Getting Started
    • 💡Quick Start
      • Databases
  • Creating A Website
    • 📹Website Build Video Tutorial
    • Content Types
      • Element Types
      • Compositions
    • Current Content Properties
      • Textbox & Textarea
      • Text Editor (Radzen)
      • Text Editor (TinyMCE)
      • Numeric
      • True / False
      • Rating
      • Checkbox, Dropdown & Radio Lists
      • Media Picker
      • Navigation
      • Material Icon Picker
      • Content Picker
      • Date Picker
      • Custom Component Picker
      • Api Key Picker
      • Colour Picker
      • Block List Editor
      • Editor Notes
      • Google Map Location Picker
      • Simple List Manager
      • Simple Dictionary Manager
      • SEO Property
      • Code Editor
      • Colour Theme Picker
    • Content
      • Publish & Unpublish
    • Querying Data
      • Extension Methods
    • Views
    • Controllers (Route Hi-Jacking)
    • Custom Components
    • Users & Roles
      • Restrict Access By Role
    • Logs
    • Audit
    • Global Settings
      • Using Global Settings
    • SEO Sitemaps
    • Hosting
  • Extending ZauberCMS
    • Overview
    • BlockListEditor
      • Content Block Preview
      • Content Block
    • Custom List Data
    • Custom Content Property
    • Custom Validation
    • Custom Admin Sections
      • Section Nav Group Menu
      • Trees
        • Tree Context Menus
      • Reusing Content Editors
    • Saving Custom Data
    • Using AppState Events
    • Before & After Save
    • Email & Storage Providers
    • Seed Data
    • SEO Checks
  • Identity
    • Overview
    • External Authentication Providers
    • Account Layout
  • Language
    • Overview
    • Adding Language Dictionaries
    • Setting The Language
    • Using Language Dictionaries
  • AppSettings
    • Detailed Errors
    • Media Settings
    • Enable Path Urls
Powered by GitBook
On this page
  • Subscribing To Events
  • Triggering The Events
  1. Extending ZauberCMS

Using AppState Events

If you want to update other components when an item is Saved, Changed or Deleted then you can use the AppState class.

In your component make sure you inject the AppState first

[Inject] public AppState AppState { get; set; } = default!;

Subscribing To Events

The AppState has several events you can subscribe to in your component, these are:

public event Func<ContentType?, string, Task>? OnContentTypeChanged;
public event Func<Content.Models.Content?, string, Task>? OnContentChanged;
public event Func<User?, string, Task>? OnUserChanged;
public event Func<Media.Models.Media?, string, Task>? OnMediaChanged;

public event Func<ContentType?, string, Task>? OnContentTypeSaved;
public event Func<Content.Models.Content?, string, Task>? OnContentSaved;
public event Func<User?, string, Task>? OnUserSaved;
public event Func<Media.Models.Media?, string, Task>? OnMediaSaved;

public event Func<ContentType?, string, Task>? OnContentTypeDeleted;
public event Func<Content.Models.Content?, string, Task>? OnContentDeleted;
public event Func<User?, string, Task>? OnUserDeleted;
public event Func<Media.Models.Media?, string, Task>? OnMediaDeleted;

Below is an example of subscribing to the OnUserChanged event and then refreshing some data on the page.

protected override async Task OnInitializedAsync()
{
    await DataRefresh();
    AppState.OnUserChanged += HandleUsersChanged;
}

public void Dispose()
{
    AppState.OnUserChanged -= HandleUsersChanged;
}

private async Task HandleUsersChanged(User? user, string username)
{
    await DataRefresh();
    StateHasChanged();
}

As you can see, the item being changed or updated is passing in to most events, so you could update or check data when the events are triggered.

Triggering The Events

There may be times where you change some data and want to notify other components, this can be done like so (Example below is notifying a user change and passing in the User being updated and the current logged in User), you would do the same for Content, Media & ContentTypes

await AppState.NotifyUserChanged(User, AuthState.User.Identity?.Name!);

PreviousSaving Custom DataNextBefore & After Save

Last updated 10 months ago