Skip to content

Commit

Permalink
Triggers final part
Browse files Browse the repository at this point in the history
  • Loading branch information
Mewriick committed Jan 12, 2020
1 parent e4ebcf8 commit f9160c4
Show file tree
Hide file tree
Showing 22 changed files with 195 additions and 69 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ GridView component for Blazor
<script src="_content/Blazor.FlexGrid/flexGridIntereop.js"></script>
```

**Version 0.11.0 contains new Triggers feature more info in [wiki](https://github.com/Mewriick/Blazor.FlexGrid/wiki/Triggers)**
# Instalation
[![NuGet Pre Release](https://img.shields.io/badge/nuget-0.10.2-orange.svg)](https://www.nuget.org/packages/Blazor.FlexGrid)
[![NuGet Pre Release](https://img.shields.io/badge/nuget-0.11.0-orange.svg)](https://www.nuget.org/packages/Blazor.FlexGrid)
After nuget instalation you must create in Blazor.Client app Linker.xml file because nuget use some features which are not supported in default mono managed interpreter from WebAssembly
(https://github.com/mono/mono/issues/8872)
Expand Down
10 changes: 8 additions & 2 deletions demo/Blazor.Components.Demo.FlexGrid/Pages/Grid.razor
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
@*<BlazorButton>Test</BlazorButton>*@
<GridView DataAdapter="@dataAdapter" PageSize="@pageSize" LazyLoadingOptions="@op"></GridView>
<button class="btn btn-primary" @onclick="@SetPageSize">Click me</button>
<button class="btn btn-primary" @onclick="@ReloadCurrentPage">Reload data</button>

@*@{
RenderFragment<WeatherForecast> weatherTemp = (weather) => @<MatButton Raised="true" Icon="favorite">@weather.Summary</MatButton>;
Expand All @@ -34,8 +35,8 @@ Collection.AddColumnEditValueRenderer(w => w.Summary, editWeatherSummary);


@code {
CollectionTableDataAdapter<WeatherForecast>
dataAdapter;
bool forceReload;
CollectionTableDataAdapter<WeatherForecast> dataAdapter;

int pageSize = 5;
LazyLoadingOptions op;
Expand All @@ -52,4 +53,9 @@ Collection.AddColumnEditValueRenderer(w => w.Summary, editWeatherSummary);
var forecast = await WeatherService.GetForecastAsync(new DateTime(2020, 3, 19));
dataAdapter = new CollectionTableDataAdapter<WeatherForecast>(forecast);
}

async Task ReloadCurrentPage()
{
await dataAdapter.ReloadCurrentPage();
}
}
49 changes: 44 additions & 5 deletions demo/Blazor.FlexGrid.Demo.Client/Pages/LazyLoadedGrid.razor
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,35 @@
<p>This component demonstrates fetching data from the server.</p>


<GridView DataAdapter="@forecastAdapter"
LazyLoadingOptions="@(new LazyLoadingOptions() {
DataUri = "api/SampleData/WeatherForecasts",
PutDataUri = "api/SampleData/UpdateWeatherForecast",
DeleteUri = "api/SampleData/Delete/{Id}" })"
<GridView DataAdapter="@dataAdapter"
LazyLoadingOptions="@options"
PageSize="10"
SaveOperationFinished="@ItemSavedOperationFinished"
DeleteOperationFinished="@ItemDeletedOperationFinished"
NewItemCreated="@ItemCreated">
</GridView>

<button class="btn btn-primary" @onclick="@ChangeOptions">Change options</button>
<button class="btn btn-primary" @onclick="@ReloadCurrentPage">Reload data</button>
<button class="btn btn-primary" @onclick="@ChangeDataAdapter">Change data adapter</button>

@code{

ITableDataAdapter dataAdapter;
LazyLoadingOptions options = new LazyLoadingOptions()
{
DataUri = "api/SampleData/WeatherForecasts",
PutDataUri = "api/SampleData/UpdateWeatherForecast",
DeleteUri = "api/SampleData/Delete/{Id}"
};

protected override void OnInitialized()
{
base.OnInitialized();

dataAdapter = forecastAdapter;
}

public void ItemSavedOperationFinished(SaveResultArgs saveResultArgs)
{
Console.WriteLine($"Item saved result: {saveResultArgs.ItemSucessfullySaved}");
Expand All @@ -44,6 +60,29 @@
{
Console.WriteLine($"Item created result: {itemCreatedArgs.CreatedItem}");
}

void ChangeOptions()
{
options = new LazyLoadingOptions()
{
DataUri = "api/SampleData/WeatherForecasts",
PutDataUri = "api/SampleData/UpdateWeatherForecast",
DeleteUri = "api/SampleData/Delete/{Id}"
};

options.RequestParams.Add("test", "value");
}

async Task ReloadCurrentPage()
{
await dataAdapter.ReloadCurrentPage();
}

async Task ChangeDataAdapter()
{
var forecast = await Http.GetJsonAsync<WeatherForecast[]>("api/SampleData/WeatherForecastsSimple");
dataAdapter = new CollectionTableDataAdapter<WeatherForecast>(forecast);
}
}


Expand Down
6 changes: 3 additions & 3 deletions src/Blazor.FlexGrid/Blazor.FlexGrid.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
<BlazorLinkOnBuild>false</BlazorLinkOnBuild>
<LangVersion>7.3</LangVersion>
<PackageId>Blazor.FlexGrid</PackageId>
<PackageVersion>0.10.2</PackageVersion>
<PackageVersion>0.11.0</PackageVersion>
<Title>Blazor.FlexGrid</Title>
<Description>GridView component for Blazor</Description>
<Authors>Jaroslav Surala</Authors>
<PackageProjectUrl>https://github.com/Mewriick/Blazor.FlexGrid</PackageProjectUrl>
<PackageTags>Blazor;GridView;Component</PackageTags>
<Version>0.10.2</Version>
<PackageReleaseNotes>Fix saving row issue</PackageReleaseNotes>
<Version>0.11.0</Version>
<PackageReleaseNotes>Add triggers feature</PackageReleaseNotes>
<PackageIconUrl>https://msdnshared.blob.core.windows.net/media/2018/04/Blazor-300x280.jpg</PackageIconUrl>
<RestoreAdditionalProjectSources>
https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
Expand Down
2 changes: 1 addition & 1 deletion src/Blazor.FlexGrid/Components/GridViewGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected override Task OnInitializedAsync()

protected override async Task OnParametersSetAsync()
{
tableDataSet = GetTableDataSet();
GetTableDataSet();
await tableDataSet.GoToPage(0);
}
}
Expand Down
41 changes: 29 additions & 12 deletions src/Blazor.FlexGrid/Components/GridViewInternal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public class GridViewInternal : ComponentBase
private bool tableDataSetInitialized;
private int pageSize;
private ITableDataAdapter dataAdapter;
private ILazyLoadingOptions lazyLoadingOptions;

private FlexGridContext fixedFlexGridContext;
private (ImutableGridRendererContext ImutableRendererContext, PermissionContext PermissionContext) gridRenderingContexts;
Expand All @@ -49,24 +50,41 @@ public ITableDataAdapter DataAdapter
get => dataAdapter;
set
{
dataAdapter = value;
AddTrigger(() => new RefreshDataAdapterTrigger(GetTableDataSet));
if (dataAdapter != value)
{
dataAdapter = value;
AddTrigger(() => new RefreshDataAdapterTrigger(GetTableDataSet));
}
}
}

[Parameter] public ILazyLoadingOptions LazyLoadingOptions { get; set; } = new LazyLoadingOptions();
[Parameter]
public ILazyLoadingOptions LazyLoadingOptions
{
get => lazyLoadingOptions;
set
{
if (lazyLoadingOptions != value)
{
lazyLoadingOptions = value;
AddTrigger(() => new RefreshLazyLoadingOptionsTrigger(tableDataSet, value));
}
}
}

[Parameter]
public int PageSize
{
get => pageSize;
set
{
pageSize = value;
AddTrigger(() => new RefreshPageSizeTrigger(tableDataSet.PageableOptions, value));
if (pageSize != value)
{
pageSize = value;
AddTrigger(() => new RefreshPageSizeTrigger(tableDataSet.PageableOptions, value));
}
}
}

[Parameter] public Action<SaveResultArgs> SaveOperationFinished { get; set; }

[Parameter] public Action<DeleteResultArgs> DeleteOperationFinished { get; set; }
Expand Down Expand Up @@ -137,7 +155,7 @@ protected override async Task OnInitializedAsync()
ConventionsSet.ApplyConventions(DataAdapter.UnderlyingTypeOfItem);
}

tableDataSet = GetTableDataSet();
GetTableDataSet();
await tableDataSet.GoToPage(0);

if (DataAdapter != null)
Expand All @@ -152,7 +170,7 @@ protected override async Task OnParametersSetAsync()
DataAdapter != null)
{
ConventionsSet.ApplyConventions(DataAdapter.UnderlyingTypeOfItem);
tableDataSet = GetTableDataSet();
GetTableDataSet();
await tableDataSet.GoToPage(0);

fixedFlexGridContext.FirstPageLoaded = true;
Expand All @@ -161,9 +179,7 @@ protected override async Task OnParametersSetAsync()
if (fixedFlexGridContext.FirstPageLoaded)
{
await actionTriggerCollection.ExecuteTriggers(() =>
actionTriggerCollection.HasMasterAction
? tableDataSet.GoToPage(0)
: tableDataSet.GoToPage(tableDataSet.PageableOptions.CurrentPage)
tableDataSet.GoToPage(tableDataSet.PageableOptions.CurrentPage)
);
}
}
Expand All @@ -173,7 +189,7 @@ protected virtual FlexGridContext CreateFlexGridContext()

protected ITableDataSet GetTableDataSet()
{
var tableDataSet = DataAdapter?.GetTableDataSet(conf =>
tableDataSet = DataAdapter?.GetTableDataSet(conf =>
{
conf.LazyLoadingOptions = LazyLoadingOptions;
conf.PageableOptions.PageSize = PageSize;
Expand All @@ -192,6 +208,7 @@ protected ITableDataSet GetTableDataSet()
}
else
{
DataAdapter.AfterReloadPage = fixedFlexGridContext.RequestRerenderTableRowsNotification;
tableDataSet = MasterDetailTableDataSetFactory.ConvertToMasterTableIfIsRequired(tableDataSet);
if (fixedFlexGridContext.IsFeatureActive<FilteringFeature>())
{
Expand Down
16 changes: 16 additions & 0 deletions src/Blazor.FlexGrid/DataAdapters/BaseTableDataAdapter.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@
using Blazor.FlexGrid.DataSet;
using Blazor.FlexGrid.DataSet.Options;
using System;
using System.Threading.Tasks;

namespace Blazor.FlexGrid.DataAdapters
{
public abstract class BaseTableDataAdapter : ITableDataAdapter
{
protected ITableDataSet currentTableDataSet;

public abstract Type UnderlyingTypeOfItem { get; }

public Action AfterReloadPage { get; set; }

public void Accept(IDataTableAdapterVisitor dataTableAdapterVisitor)
=> dataTableAdapterVisitor?.Visit(this);

public async Task ReloadCurrentPage()
{
if (currentTableDataSet is null)
{
return;
}

await currentTableDataSet.GoToPage(currentTableDataSet.PageableOptions.CurrentPage);
AfterReloadPage?.Invoke();
}

public abstract ITableDataSet GetTableDataSet(Action<TableDataSetOptions> configureDataSet);

public abstract object Clone();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ public override ITableDataSet GetTableDataSet(Action<TableDataSetOptions> config
var tableDataSetOptions = new TableDataSetOptions();
configureDataSet?.Invoke(tableDataSetOptions);

var tableDataSet = new TableDataSet<TItem>(items.Where(Filter.Compile()).AsQueryable(), new FilterExpressionTreeBuilder<TItem>())
currentTableDataSet = new TableDataSet<TItem>(items.Where(Filter.Compile()).AsQueryable(), new FilterExpressionTreeBuilder<TItem>())
{
PageableOptions = tableDataSetOptions.PageableOptions,
SortingOptions = tableDataSetOptions.SortingOptions,
GridViewEvents = tableDataSetOptions.GridViewEvents,
GroupingOptions = tableDataSetOptions.GroupingOptions,
};

return tableDataSet;
return currentTableDataSet;
}

public override object Clone()
Expand Down
12 changes: 12 additions & 0 deletions src/Blazor.FlexGrid/DataAdapters/IRefreshableDataSource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using System.Threading.Tasks;

namespace Blazor.FlexGrid.DataAdapters
{
public interface IRefreshableDataSource
{
Action AfterReloadPage { get; set; }

Task ReloadCurrentPage();
}
}
2 changes: 1 addition & 1 deletion src/Blazor.FlexGrid/DataAdapters/ITableDataAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Blazor.FlexGrid.DataAdapters
/// <summary>
/// Define contract which create and configure <seealso cref="ITableDataSet"/> for GridComponent
/// </summary>
public interface ITableDataAdapter : ICloneable
public interface ITableDataAdapter : IRefreshableDataSource, ICloneable
{
Type UnderlyingTypeOfItem { get; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public override ITableDataSet GetTableDataSet(Action<TableDataSetOptions> config
var lazyLoadingOptions = tableDataSetOptions.LazyLoadingOptions;
AddRequestParamsAction?.Invoke(lazyLoadingOptions.RequestParams);

var tableDataSet = new LazyTableDataSet<TItem>(lazyDataSetLoader, lazyGroupableDataSetLoader, lazyDataSetItemSaver)
currentTableDataSet = new LazyTableDataSet<TItem>(lazyDataSetLoader, lazyGroupableDataSetLoader, lazyDataSetItemSaver)
{
LazyLoadingOptions = lazyLoadingOptions,
PageableOptions = tableDataSetOptions.PageableOptions,
Expand All @@ -46,7 +46,7 @@ public override ITableDataSet GetTableDataSet(Action<TableDataSetOptions> config
GridViewEvents = tableDataSetOptions.GridViewEvents
};

return tableDataSet;
return currentTableDataSet;
}

public override object Clone()
Expand Down
2 changes: 2 additions & 0 deletions src/Blazor.FlexGrid/DataSet/Options/ILazyLoadingOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@ public interface ILazyLoadingOptions
string DeleteUri { get; set; }

QueryBuilder RequestParams { get; }

void Copy(ILazyLoadingOptions lazyLoadingOptions);
}
}
10 changes: 9 additions & 1 deletion src/Blazor.FlexGrid/DataSet/Options/LazyLoadingOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ public class LazyLoadingOptions : ILazyLoadingOptions

public string DeleteUri { get; set; }

public QueryBuilder RequestParams { get; } = new QueryBuilder();
public QueryBuilder RequestParams { get; private set; } = new QueryBuilder();

public void Copy(ILazyLoadingOptions lazyLoadingOptions)
{
DataUri = lazyLoadingOptions.DataUri;
PutDataUri = lazyLoadingOptions.PutDataUri;
DeleteUri = lazyLoadingOptions.DeleteUri;
RequestParams = lazyLoadingOptions.RequestParams;
}
}
}
2 changes: 1 addition & 1 deletion src/Blazor.FlexGrid/DataSet/Options/PageableOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace Blazor.FlexGrid.DataSet.Options
{
public class PageableOptions : IPagingOptions
{
public int PageSize { get; set; }
public int PageSize { get; set; } = 5;

public int TotalItemsCount { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ namespace Blazor.FlexGrid.Triggers
{
public interface IParameterActionTriggerCollection : ITriggerCollection
{
bool HasMasterAction { get; }

bool AddTrigger(IParamterChangedTrigger trigger);

Task ExecuteTriggers(Func<Task> onActionExecuted);
Expand Down
2 changes: 1 addition & 1 deletion src/Blazor.FlexGrid/Triggers/IParamterChangedTrigger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public interface IParamterChangedTrigger : ITrigger
/// <summary>
/// Indicates that trigger is for paramter which recreate whole table data set
/// </summary>
bool IsMasterAction { get; }
bool RefreshPage { get; }
}
}
6 changes: 4 additions & 2 deletions src/Blazor.FlexGrid/Triggers/ITrigger.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
namespace Blazor.FlexGrid.Triggers
using System.Threading.Tasks;

namespace Blazor.FlexGrid.Triggers
{
public interface ITrigger
{
void Execute();
Task Execute();
}
}
Loading

0 comments on commit f9160c4

Please sign in to comment.