CommunityToolkit / CommunityToolkit/Graph-Controls
[Feature] GraphPresenter should react to global provider state changes
- 主要言語
- C#
- スター
- 156
- フォーク
- 38
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
## 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
...
```
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
GraphPresenter コントロールとその RequestBuilder の処理から始め、次に MailMessagesSample の例で使用されている ProviderManager の provider および provider-state イベントを調べます。provider が変更された場合やサインアウトされた場合に何が起こるかを追跡します。完了の条件は、ログイン状態の変更後もコントロールが機能し、サインアウト中はコンテンツを表示しないことです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- csharp
- 領域
- authentication, frontend
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100