CommunityToolkit / CommunityToolkit/Graph-Controls

[Feature] GraphPresenter should react to global provider state changes

Offen
#166 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Area: Controls Controls: GraphPresenter
Vorherrschende Sprache
C#
Sterne
156
Forks
38
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## Describe the problem this feature would solve

The `GraphPresenter` requires an `IBaseRequestBuilder` implementation to determine what data to fetch from Graph. We don't currently have a good way to define the `RequestBuilder` property in XAML, so this must be done from code. The problem is that if the provider state changes after the `RequestBuilder` property is set, the `GraphPresenter` will fail. The way to fix this is to nullify the `RequestBuilder`, and then re-set it.

## Describe the solution

Update the `GraphPresenter` to listen for changes in the global provider state, and do whatever is required to keep the control functional after a login change.

The `GraphPresenter` should not display any content if the global provider is not signed in.

## Describe alternatives you've considered

None

## Additional context & Screenshots

All of this code is required to support a single instance of the `GraphPresenter` control:

```csharp
namespace SampleTest.Samples.GraphPresenter
{
public sealed partial class MailMessagesSample : Page
{
public IBaseRequestBuilder MessagesRequestBuilder { get; set; }

public MailMessagesSample()
{
this.InitializeComponent();
ProviderManager.Instance.ProviderUpdated += OnProviderUpdated;
ProviderManager.Instance.ProviderStateChanged += OnProviderStateChanged;
}

private void OnProviderUpdated(object sender, IProvider provider)
{
if (provider == null)
{
ClearRequestBuilders();
}
}

private void OnProviderStateChanged(object sender, ProviderStateChangedEventArgs e)
{
if (e.NewState == ProviderState.SignedIn)
{
var graphClient = ProviderManager.Instance.GlobalProvider.GetClient();

MessagesRequestBuilder = graphClient.Me.Messages;
}
else
{
ClearRequestBuilders();
}
}

private void ClearRequestBuilders()
{
MessagesRequestBuilder = null;
}
}
}
```

```xml



...

```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginnen Sie mit dem GraphPresenter-Steuerelement und seiner RequestBuilder-Verarbeitung, und untersuchen Sie anschließend die Provider- und provider-state-Ereignisse von ProviderManager, die im Beispiel MailMessagesSample verwendet werden. Verfolgen Sie, was passiert, wenn sich der Provider ändert oder abgemeldet wird; als abgeschlossen gilt die Aufgabe, wenn das Steuerelement nach Änderungen der Anmeldung funktionsfähig bleibt und im abgemeldeten Zustand keine Inhalte anzeigt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
csharp
Bereich
authentication, frontend
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.