Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Tree Grid state persistence sample. Fixes to regular grid sample. #579

Open
wants to merge 1 commit into
base: vnext
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading