Skip to content

Commit

Permalink
Add Tree Grid state persistence sample. Fixes to regular grid sample.
Browse files Browse the repository at this point in the history
  • Loading branch information
skrustev committed Dec 21, 2023
1 parent c35e908 commit 2f66276
Show file tree
Hide file tree
Showing 20 changed files with 1,008 additions and 18 deletions.
68 changes: 50 additions & 18 deletions samples/grids/grid/state-persistence-main/App.razor
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
FilterMode="FilterMode.ExcelStyleFilter"
ColumnSelection="GridSelectionMode.Multiple"
RowSelection="GridSelectionMode.Multiple">
<IgbGridState @ref="gridState"></IgbGridState>
<IgbGridState @ref="gridState" Options="options"></IgbGridState>
<IgbGridToolbar>
<IgbGridToolbarActions>
<IgbGridToolbarHiding></IgbGridToolbarHiding>
Expand Down Expand Up @@ -120,7 +120,8 @@
Columns = true,
Expansion = true,
RowPinning = true,
ColumnSelection= true
ColumnSelection= true,
Moving = true
};
private string stateKey = "grid-state";
private IgbIcon IconRef;
Expand Down Expand Up @@ -209,26 +210,57 @@
if (action == "AllFeatures")
{
var newOptions = new IgbGridStateOptions()
{
CellSelection = eventArgs.Detail,
RowSelection = eventArgs.Detail,
Filtering = eventArgs.Detail,
AdvancedFiltering = eventArgs.Detail,
Paging = eventArgs.Detail,
Sorting = eventArgs.Detail,
GroupBy = eventArgs.Detail,
Columns = eventArgs.Detail,
Expansion = eventArgs.Detail,
RowPinning = eventArgs.Detail,
ColumnSelection = eventArgs.Detail
};
{
CellSelection = eventArgs.Detail,
RowSelection = eventArgs.Detail,
Filtering = eventArgs.Detail,
AdvancedFiltering = eventArgs.Detail,
Paging = eventArgs.Detail,
Sorting = eventArgs.Detail,
GroupBy = eventArgs.Detail,
Columns = eventArgs.Detail,
Expansion = eventArgs.Detail,
RowPinning = eventArgs.Detail,
ColumnSelection = eventArgs.Detail,
Moving = eventArgs.Detail
};
allOptions = eventArgs.Detail;
options = newOptions;
gridState.Options = newOptions;
}
else
{
options.GetType().GetProperty(action).SetValue(options, eventArgs.Detail);
gridState.Options = options;
var newOptions = new IgbGridStateOptions()
{
CellSelection = options.CellSelection,
RowSelection = options.RowSelection,
Filtering = options.Filtering,
AdvancedFiltering = options.AdvancedFiltering,
Paging = options.Paging,
Sorting = options.Sorting,
GroupBy = options.GroupBy,
Columns = options.Columns,
Expansion = options.Expansion,
RowPinning = options.RowPinning,
ColumnSelection = options.ColumnSelection,
Moving = options.Moving
};
newOptions.GetType().GetProperty(action).SetValue(newOptions, eventArgs.Detail);
options = newOptions;

allOptions = !eventArgs.Detail ? false : options.GetType().GetProperties().All(prop =>
{
if (prop.Name == "CellSelection" || prop.Name == "RowSelection" || prop.Name == "Filtering"
|| prop.Name == "AdvancedFiltering" || prop.Name == "Paging" || prop.Name == "Sorting"
|| prop.Name == "GroupBy" || prop.Name == "Columns" || prop.Name == "Expansion"
|| prop.Name == "RowPinning" || prop.Name == "ColumnSelection" || prop.Name == "Moving")
{
bool testParse = false;
bool.TryParse(prop.GetValue(options).ToString(), out testParse);
return testParse;
}
return true;
}
);
}
}

Expand Down
22 changes: 22 additions & 0 deletions samples/grids/tree-grid/state-persistence-about/App.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
@using IgniteUI.Blazor.Controls

@inject IJSRuntime JS

<div class="container vertical">
<div class="container vertical fill">
<div style="text-align: center; width: 900px">
<br />
<span>By default navigating to the previous page, components will reinitialize as per their initial configuration, therefore the IgbTreeGrid will lose its state.</span>
<br />
<span>What our Sample App does is reading the state from the window.localStorage object and applying the corresponding state on the Tree Grid's Rendered event.</span><br />
<IgbButton @onclick="LeavePage" Variant="ButtonVariant.Contained">Go Back</IgbButton>
</div>
</div>
</div>

@code {
public async void LeavePage()
{
await JS.InvokeVoidAsync("window.location.replace", "./grids/tree-grid/state-persistence-main");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RazorLangVersion>3.0</RazorLangVersion>
<AssemblyName>Infragistics.Samples</AssemblyName>
<RootNamespace>Infragistics.Samples</RootNamespace>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<NoWarn>1701;1702,IDE0028,BL0005,0219,CS1998</NoWarn>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="IgniteUI.Blazor" Version="23.2.97" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.25" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.25" />
<PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33213.308
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorClientApp", "BlazorClientApp.csproj", "{F69CC3F0-BCD1-4CE6-9F39-CBED14E7FA78}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F69CC3F0-BCD1-4CE6-9F39-CBED14E7FA78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F69CC3F0-BCD1-4CE6-9F39-CBED14E7FA78}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F69CC3F0-BCD1-4CE6-9F39-CBED14E7FA78}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F69CC3F0-BCD1-4CE6-9F39-CBED14E7FA78}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FC52AAC8-4488-40AE-9621-75F6BA744B18}
EndGlobalSection
EndGlobal
28 changes: 28 additions & 0 deletions samples/grids/tree-grid/state-persistence-about/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modules

namespace Infragistics.Samples
{
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbGridModule)
);
await builder.Build().RunAsync();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:4200",
"sslPort": 44385
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"BlazorSamples": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:4200"
}
}
}
67 changes: 67 additions & 0 deletions samples/grids/tree-grid/state-persistence-about/ReadMe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<!-- NOTE: do not change this file because it's auto re-generated from template: -->
<!-- https://github.com/IgniteUI/igniteui-blazor-examples/tree/vnext/templates/sample/ReadMe.md -->

This folder contains implementation of Blazor application with example of State Persistence About feature using [Grid](https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/general-getting-started.html) component.


<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<body>
<!-- https://static.infragistics.com/xplatform/images/browsers -->
<a target="_blank" href="https://www.infragistics.com/products/ignite-ui-blazor/blazor/components/general-getting-started.html" rel="noopener noreferrer">
<img height="40px" style="border-radius: 0rem" alt="View Docs" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-docs.png"/>
</a>
<a target="_blank" href="./App.razor" rel="noopener noreferrer">
<img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="View Code" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-code.png"/>
</a>
<a target="_blank" href="https://infragistics.com/blazor-client/samples/grids/tree-grid/state-persistence-about" rel="noopener noreferrer">
<img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="Run Sample" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-run.png"/>
</a>
<!-- <a target="_blank" href="https://codesandbox.io/s/github/IgniteUI/igniteui-blazor-examples/tree/master/samples/grids/tree-grid/state-persistence-about?fontsize=14&hidenavigation=1&theme=dark&view=preview&file=/src/App.razor" rel="noopener noreferrer">
<img height="40px" style="border-radius: 0rem; max-width: 100%;" alt="Run Sample" src="https://github.com/IgniteUI/igniteui-blazor-examples/raw/vnext/templates/sample/images/button-sandbox.png"/>
</a> -->
</body>
</html>

## Setup

- instal **.NET SDK** from this [website](https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/install)


## Running App in Visual Studio 2019

NOTE: VS 2019 has better code highlighting and error detection than VS Code does.

- open **Visual Studio 2019** as an administrator

- open the **BlazorClientApp.sln** solution

- right click solution and select **Restore NuGet Packages** menu item

- click **Debug** menu and select **Start Debugging** or press **F5** key


## Running App in VS Code

- open **VS Code** as an administrator

- open this folder in **VS Code**

- open a terminal window

- to restore assemblies, run this command:
```dotnet restore```

- to run samples, run this command:
```dotnet watch run```

- wait for for message:
**Now listening on: http://localhost:4200**

- open **http://localhost:4200** in your browser


## Resources

- [Razor Component Models](https://www.codemag.com/article/1911052)
- [Razor Syntax](https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-3.1#razor-syntax)
- [Getting reference to components](https://docs.microsoft.com/en-us/aspnet/core/blazor/components/?view=aspnetcore-3.1#capture-references-to-components)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// these namespaces are global to the app
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using Infragistics.Samples
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/
30 changes: 30 additions & 0 deletions samples/grids/tree-grid/state-persistence-about/wwwroot/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="description" content="Explore samples of IgniteUI for Blazor components.">
<meta name="keywords" content="Sample, Example, Blazor, IgniteUI for Blazor, Components, Infragistics">
<meta name="author" content="Infragistics">
<title>Samples | IgniteUI for Blazor | Infragistics</title>
<base href="/" />
<link href="https://static.infragistics.com/xplatform/images/browsers/blazor.ico" rel="icon" type="image/x-icon">
<link href="https://static.infragistics.com/xplatform/css/samples/shared.v6.css" rel="stylesheet" />
<link href="https://static.infragistics.com/xplatform/css/samples/blazor.css" rel="stylesheet" />
<link href="_content/IgniteUI.Blazor/themes/grid/light/bootstrap.css" rel="stylesheet" />
</head>

<body>
<app class="app"><img class="app-loading" src="https://static.infragistics.com/xplatform/images/browsers/loading.gif" /></app>
<div class="app-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="app-error-dismiss">🗙</a>
</div>
<!-- importing blazor bundle for IG controls: -->
<script src="_content/IgniteUI.Blazor/app.bundle.js"></script>
<script src="_framework/blazor.webassembly.js"></script>
</body>

</html>
Loading

0 comments on commit 2f66276

Please sign in to comment.