Skip to content

Commit 06c6afa

Browse files
committed
(CommunityToolkit#298) Pass the conflict resolver through all the entity options in the builder.
1 parent 9dbe6ed commit 06c6afa

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/CommunityToolkit.Datasync.Client/Offline/DatasyncOfflineOptionsBuilder.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public DatasyncOfflineOptionsBuilder Entity<TEntity>(Action<EntityOfflineOptions
9595
EntityOfflineOptions<TEntity> entity = new();
9696
configure(entity);
9797
options.ClientName = entity.ClientName;
98+
options.ConflictResolver = entity.ConflictResolver;
9899
options.Endpoint = entity.Endpoint;
99100
options.QueryDescription = new QueryTranslator<TEntity>(entity.Query).Translate();
100101
return this;
@@ -137,7 +138,7 @@ internal OfflineOptions Build()
137138

138139
foreach (EntityOfflineOptions entity in this._entities.Values)
139140
{
140-
result.AddEntity(entity.EntityType, entity.ClientName, entity.Endpoint, entity.QueryDescription);
141+
result.AddEntity(entity.EntityType, entity.ClientName, entity.ConflictResolver, entity.Endpoint, entity.QueryDescription);
141142
}
142143

143144
return result;

src/CommunityToolkit.Datasync.Client/Offline/Models/OfflineOptions.cs

+9-2
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,18 @@ internal class OfflineOptions()
2525
/// </summary>
2626
/// <param name="entityType">The type of the entity being stored.</param>
2727
/// <param name="clientName">The name of the client.</param>
28+
/// <param name="conflictResolver">The conflict resolver to use.</param>
2829
/// <param name="endpoint">The endpoint serving the datasync services.</param>
2930
/// <param name="queryDescription">The optional query description to describe what entities need to be pulled.</param>
30-
public void AddEntity(Type entityType, string clientName, Uri endpoint, QueryDescription? queryDescription = null)
31+
public void AddEntity(Type entityType, string clientName, IConflictResolver? conflictResolver, Uri endpoint, QueryDescription? queryDescription = null)
3132
{
32-
this._cache.Add(entityType, new EntityOptions { ClientName = clientName, Endpoint = endpoint, QueryDescription = queryDescription });
33+
this._cache.Add(entityType, new EntityOptions
34+
{
35+
ClientName = clientName,
36+
ConflictResolver = conflictResolver,
37+
Endpoint = endpoint,
38+
QueryDescription = queryDescription
39+
});
3340
}
3441

3542
/// <summary>

tests/CommunityToolkit.Datasync.Client.Test/Offline/ConflictResolver_Tests.cs

+9-2
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,15 @@ public async Task PushAsync_WithClientWinsResolver_ShouldResolveConflictAndRetry
151151
var context = CreateContext();
152152

153153
// Configure context to use client wins resolver
154-
context.Configurator = builder => builder.Entity<ClientMovie>(c =>
155-
c.ConflictResolver = new ClientWinsConflictResolver());
154+
context.Configurator = builder =>
155+
{
156+
builder.Entity<ClientMovie>(c =>
157+
{
158+
c.ClientName = "movies";
159+
c.Endpoint = new Uri("/tables/movies", UriKind.Relative);
160+
c.ConflictResolver = new ClientWinsConflictResolver();
161+
});
162+
};
156163

157164
// Create a client movie and save it to generate operation
158165
var clientMovie = new ClientMovie(TestData.Movies.BlackPanther)

0 commit comments

Comments
 (0)