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

feat(MultiFilter): add MultiFilter component #3703

Merged
merged 28 commits into from
Jun 22, 2024
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1bf65de
add TableContextualMenu Component
h2ls Jun 17, 2024
9fb341f
add CustomFilter
h2ls Jun 20, 2024
cc0a38b
add OnSearchValueChanged
h2ls Jun 20, 2024
d04dee0
实现单选过滤
h2ls Jun 20, 2024
ca9652f
refactor: 增加关系运算符
ArgoZhang Jun 20, 2024
ec9b466
添加隔离css
h2ls Jun 21, 2024
a93dfb8
重构代码
h2ls Jun 21, 2024
cca2ad5
添加本地化
h2ls Jun 21, 2024
4489787
添加demo,重构代码
h2ls Jun 21, 2024
cbf9255
优化UI布局
h2ls Jun 21, 2024
4163bd1
Merge remote-tracking branch 'origin/main' into lee/TableFilter
ArgoZhang Jun 21, 2024
4fea405
Merge branch 'main' into lee/TableFilter
ArgoZhang Jun 21, 2024
449f4b7
refactor: 重命名组件
ArgoZhang Jun 21, 2024
2934420
refactor: 更新 scss 源
ArgoZhang Jun 21, 2024
1c9787f
refactor: 移除 CustomFilter 参数
ArgoZhang Jun 21, 2024
63ff317
refactor: 精简代码
ArgoZhang Jun 21, 2024
a715ce1
doc: 更新资源文件
ArgoZhang Jun 21, 2024
19eaf2c
doc: 更新示例
ArgoZhang Jun 21, 2024
e7e8b5c
refactor: 更新样式
ArgoZhang Jun 21, 2024
2644763
feat: 增加 ShowSearch 参数
ArgoZhang Jun 21, 2024
8836fcb
refactor: 更新全选框状态
ArgoZhang Jun 21, 2024
72b3c04
refactor: 重置更新搜索框值
ArgoZhang Jun 21, 2024
4767b1d
style: 更新样式
ArgoZhang Jun 21, 2024
0f51dcf
固定宽高
h2ls Jun 22, 2024
43c4f7f
feat: 弃用属性不参与序列化
ArgoZhang Jun 22, 2024
c08e8df
doc: 更新说明文档
ArgoZhang Jun 22, 2024
02f0f52
test: 增加单元测试
ArgoZhang Jun 22, 2024
ecc2ebb
chore: bump version 8.6.3
ArgoZhang Jun 22, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
</DemoBlock>

<DemoBlock Title="@Localizer["FilterTemplateTitle"]"
Introduction="@Localizer["FilterTemplateIntro"]" Name="CustomerFilter">
Introduction="@Localizer["FilterTemplateIntro"]" Name="CustomerFilter">
<section ignore>@((MarkupString)Localizer["TablesFilterTemplateDescription", ComponentSourceCodeUrl].Value)</section>

<Table TItem="Foo"
Expand Down Expand Up @@ -192,3 +192,38 @@
</TableColumns>
</Table>
</DemoBlock>

<DemoBlock Title="@Localizer["CustomFilterTitle"]"
Introduction="@Localizer["CustomFilterIntro"]"
Name="CustomFilter">
<Table TItem="Foo"
IsPagination="true" PageItemsSource="@PageItemsSource"
IsStriped="true" IsBordered="true" IsMultipleSelect="true"
ShowSkeleton="true"
OnQueryAsync="@OnQueryAsync">
<TableColumns>
<TableColumn @bind-Field="@context.DateTime" Width="180" Sortable="true" />
<TableColumn @bind-Field="@context.Name" Width="100" Sortable="true" Filterable="true">
<FilterTemplate>
<MultiFilter Items="Items.Select(i => new SelectedItem(i.Name!, i.Name!)).DistinctBy(i => i.Value).ToList()"></MultiFilter>
</FilterTemplate>
</TableColumn>
<TableColumn @bind-Field="@context.Address" Sortable="true" Filterable="true">
<FilterTemplate>
<MultiFilter Items="Items.Select(i => new SelectedItem(i.Address!, i.Address!)).DistinctBy(i => i.Value).ToList()"></MultiFilter>
</FilterTemplate>
</TableColumn>
<TableColumn @bind-Field="@context.Complete" Width="100" Sortable="true" Filterable="true">
<FilterTemplate>
<MultiFilter Items="Items.Select(i => new SelectedItem(i.Complete.ToString()!, i.Complete.ToString()!)).DistinctBy(i => i.Value).ToList()"></MultiFilter>
</FilterTemplate>
</TableColumn>
<TableColumn @bind-Field="@context.Education" Width="100" Sortable="true" Filterable="true">
<FilterTemplate>
<MultiFilter Items="Items.Select(i => new SelectedItem(i.Education.ToString()!, i.Education.ToString()!)).DistinctBy(i => i.Value).ToList()"></MultiFilter>
</FilterTemplate>
</TableColumn>
<TableColumn @bind-Field="@context.Count" Width="150" Sortable="true" />
</TableColumns>
</Table>
</DemoBlock>
2 changes: 2 additions & 0 deletions src/BootstrapBlazor.Server/Locales/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -5448,6 +5448,8 @@
"AutoHeightIntro": "<p><b>Highly Adaptive</b></p><p>In this example, when the parent container height is set to <code>600px</code> expand/collapse the search bar, the table automatically fills the parent container</p>"
},
"BootstrapBlazor.Server.Components.Samples.Table.TablesFilter": {
"CustomFilterTitle": "List filtering",
"CustomFilterIntro": "Provide a custom filtering list for columns",
"TablesFilterTitle": "Filter and sort function",
"TablesFilterDesc": "Filter to quickly find the data you want to see; sort to quickly find or compare data.",
"TablesFilterDescLi1": "Filters a column of data to specify the column to be filtered by specifying the <code>filterable</code> property of the column",
Expand Down
2 changes: 2 additions & 0 deletions src/BootstrapBlazor.Server/Locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -5448,6 +5448,8 @@
"AutoHeightIntro": "<p><b>高度自适应</b></p><p>本例中设置父容器高度为 <code>600px</code> 展开/收起搜索栏时,表格自动充满父容器</p>"
},
"BootstrapBlazor.Server.Components.Samples.Table.TablesFilter": {
"CustomFilterTitle": "列表筛选",
"CustomFilterIntro": "为列提供自定义筛选列表",
"TablesFilterTitle": "筛选和排序功能",
"TablesFilterDesc": "筛选可快速查找到自己想看的数据;排序可快速查找或对比数据。",
"TablesFilterDescLi1": "对某一列数据进行筛选,通过指定列的 <code>Filterable</code> 属性来指定需要筛选的列",
Expand Down
6 changes: 3 additions & 3 deletions src/BootstrapBlazor/Components/Filters/BoolFilter.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ protected override void OnParametersSet()

Items ??= new SelectedItem[]
{
new SelectedItem("", Localizer["BoolFilter.AllText"].Value),
new SelectedItem("true", Localizer["BoolFilter.TrueText"].Value),
new SelectedItem("false", Localizer["BoolFilter.FalseText"].Value)
new("", Localizer["BoolFilter.AllText"].Value),
new("true", Localizer["BoolFilter.TrueText"].Value),
new("false", Localizer["BoolFilter.FalseText"].Value)
};
}

Expand Down
27 changes: 27 additions & 0 deletions src/BootstrapBlazor/Components/Filters/MultiFilter.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
@using Microsoft.Extensions.Localization
@namespace BootstrapBlazor.Components
@inherits FilterBase
@inject IStringLocalizer<MultiFilter> Localizer

<div class="bb-multi-filter">
@if (ShowSearch)
{

Check warning on line 8 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor#L8

Added line #L8 was not covered by tests
<BootstrapInput UseInputEvent="true" class="bb-multi-filter-search"
Value="@_searchText" bind-value:event="oninput" IsAutoFocus="true"
PlaceHolder="@SearchPlaceHolderText" IsSelectAllTextOnFocus="true"
OnValueChanged="OnSearchValueChanged" />
}

Check warning on line 13 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor#L13

Added line #L13 was not covered by tests
<div class="bb-multi-filter-list">
<div class="bb-multi-filter-header">
<Checkbox Value="checkAll" ShowAfterLabel="true" ShowLabel="false" DisplayText="@SelectAllText" OnStateChanged="@OnStateChanged" State="GetState()" />
</div>
<div class="bb-multi-filter-body scroll">
@foreach (var item in GetItems())
{

Check warning on line 20 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor#L20

Added line #L20 was not covered by tests
<div class="bb-multi-filter-body-item">
<Checkbox @bind-Value="@item.Checked" ShowAfterLabel="true" ShowLabel="false" DisplayText="@item.Text" />
</div>
}

Check warning on line 24 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor#L24

Added line #L24 was not covered by tests
</div>
</div>
</div>
157 changes: 157 additions & 0 deletions src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Website: https://www.blazor.zone or https://argozhang.github.io/

namespace BootstrapBlazor.Components;

/// <summary>
/// 表格过滤菜单组件
/// </summary>
public partial class MultiFilter
{
/// <summary>
/// 获得/设置 搜索栏占位符 默认 nul 使用资源文件中值
/// </summary>
[Parameter]
public string? SearchPlaceHolderText { get; set; }

Check warning on line 16 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L16

Added line #L16 was not covered by tests

/// <summary>
/// 获得/设置 全选按钮文本 默认 nul 使用资源文件中值
/// </summary>
[Parameter]
public string? SelectAllText { get; set; }

Check warning on line 22 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L22

Added line #L22 was not covered by tests

/// <summary>
/// 获得/设置 是否显示搜索栏 默认 true
/// </summary>
[Parameter]
public bool ShowSearch { get; set; } = true;

Check warning on line 28 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L28

Added line #L28 was not covered by tests

private string? _searchText;

private bool checkAll = false;

Check warning on line 32 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L32

Added line #L32 was not covered by tests

private readonly List<MultiFilterItem> _source = [];

Check warning on line 34 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L34

Added line #L34 was not covered by tests

private IEnumerable<MultiFilterItem>? _items;

/// <summary>
/// OnInitialized 方法
/// </summary>
protected override void OnInitialized()
{
base.OnInitialized();

Check warning on line 43 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L42-L43

Added lines #L42 - L43 were not covered by tests

if (Items != null)
{
_source.AddRange(Items.Select(item => new MultiFilterItem() { Value = item.Value, Text = item.Text }));
}

Check warning on line 48 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L46-L48

Added lines #L46 - L48 were not covered by tests
if (TableFilter != null)
{
TableFilter.ShowMoreButton = false;
}
}

Check warning on line 53 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L50-L53

Added lines #L50 - L53 were not covered by tests

/// <summary>
/// <inheritdoc/>
/// </summary>
protected override void OnParametersSet()
{
base.OnParametersSet();

Check warning on line 60 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L59-L60

Added lines #L59 - L60 were not covered by tests

SearchPlaceHolderText ??= Localizer["MultiFilterSearchPlaceHolderText"];
SelectAllText ??= Localizer["MultiFilterSelectAllText"];
}

Check warning on line 64 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L64

Added line #L64 was not covered by tests

/// <summary>
/// 重置过滤条件方法
/// </summary>
public override void Reset()
{
checkAll = false;
_searchText = string.Empty;

Check warning on line 72 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L70-L72

Added lines #L70 - L72 were not covered by tests
foreach (var item in _source)
{
item.Checked = false;
}
StateHasChanged();
}

Check warning on line 78 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L74-L78

Added lines #L74 - L78 were not covered by tests

/// <summary>
/// 生成过滤条件方法
/// </summary>
/// <returns></returns>
public override FilterKeyValueAction GetFilterConditions()
{
var filter = new FilterKeyValueAction() { Filters = [], FilterLogic = FilterLogic.Or };

Check warning on line 86 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L85-L86

Added lines #L85 - L86 were not covered by tests

foreach (var item in GetItems().Where(i => i.Checked))
{
filter.Filters.Add(new FilterKeyValueAction()
{
FieldKey = FieldKey,
FieldValue = item.Value,
FilterAction = FilterAction.Equal
});
}
return filter;
}

Check warning on line 98 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L89-L98

Added lines #L89 - L98 were not covered by tests

private CheckboxState GetState() => GetItems().All(i => i.Checked)
? CheckboxState.Checked
: GetItems().All(i => !i.Checked) ? CheckboxState.UnChecked : CheckboxState.Indeterminate;

Check warning on line 102 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L101-L102

Added lines #L101 - L102 were not covered by tests

private Task OnStateChanged(CheckboxState state, bool val)
{
checkAll = val;

Check warning on line 106 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L105-L106

Added lines #L105 - L106 were not covered by tests
if (state == CheckboxState.Checked)
{

Check warning on line 108 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L108

Added line #L108 was not covered by tests
foreach (var item in _source)
{
item.Checked = true;
}
}

Check warning on line 113 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L110-L113

Added lines #L110 - L113 were not covered by tests
else
{

Check warning on line 115 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L115

Added line #L115 was not covered by tests
foreach (var item in _source)
{
item.Checked = false;
}
}
StateHasChanged();
return Task.CompletedTask;
}

Check warning on line 123 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L117-L123

Added lines #L117 - L123 were not covered by tests

/// <summary>
/// 过滤内容搜索
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
private Task OnSearchValueChanged(string? val)
{
_searchText = val;

Check warning on line 132 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L131-L132

Added lines #L131 - L132 were not covered by tests
if (!string.IsNullOrEmpty(_searchText))
{
_items = _source.Where(i => i.Text.Contains(_searchText));
}

Check warning on line 136 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L134-L136

Added lines #L134 - L136 were not covered by tests
else
{
_items = null;
}
StateHasChanged();
return Task.CompletedTask;
}

Check warning on line 143 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L138-L143

Added lines #L138 - L143 were not covered by tests

private IEnumerable<MultiFilterItem> GetItems() => _items ?? _source;

class MultiFilterItem
{
public bool Checked { get; set; }

Check warning on line 149 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L149

Added line #L149 was not covered by tests

[NotNull]
public string? Value { get; init; }

Check warning on line 152 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L152

Added line #L152 was not covered by tests

[NotNull]
public string? Text { get; init; }

Check warning on line 155 in src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs

View check run for this annotation

Codecov / codecov/patch

src/BootstrapBlazor/Components/Filters/MultiFilter.razor.cs#L155

Added line #L155 was not covered by tests
}
}
51 changes: 51 additions & 0 deletions src/BootstrapBlazor/Components/Filters/MultiFilter.razor.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
.bb-multi-filter {
--bb-multi-filter-height: 180px;
--bb-multi-filter-width: 224px;
--bb-multi-filter-search-margin-bottom: 1rem;
--bb-multi-filter-body-item-bg: #fff;
--bb-multi-filter-body-item-hover-bg: #fff;
--bb-multi-filter-body-item-margin: .5rem;

.bb-multi-filter-search {
margin-bottom: var(--bb-multi-filter-search-margin-bottom);
}

.bb-multi-filter-list {
border: var(--bs-border-width) solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
padding: var(--bb-multi-filter-body-item-margin);

.bb-multi-filter-header {
margin-bottom: var(--bb-multi-filter-body-item-margin);
padding-bottom: var(--bb-multi-filter-body-item-margin);
border-bottom: var(--bs-border-width) solid var(--bs-border-color);
}

.bb-multi-filter-body {
height: var(--bb-multi-filter-height);
width: var(--bb-multi-filter-width);
margin-top: var(--bb-multi-filter-body-item-margin);

.bb-multi-filter-body-item {
background-color: var(--bb-multi-filter-body-item-bg);

.form-check {
width: 100%;

.form-check-input + .form-check-label {
text-overflow: unset;
overflow: unset;
}
}

&:not(:last-child) {
margin-bottom: var(--bb-multi-filter-body-item-margin);
}

&:hover {
background-color: var(--bb-multi-filter-body-item-hover-bg);
}
}
}
}
}
4 changes: 4 additions & 0 deletions src/BootstrapBlazor/Locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@
"CloseAllTabsText": "Close All",
"NotFoundTabText": "NotFound"
},
"BootstrapBlazor.Components.MultiFilter": {
"MultiFilterSearchPlaceHolderText": "Please enter ...",
"MultiFilterSelectAllText": "Select All"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Add",
"EditButtonText": "Edit",
Expand Down
4 changes: 4 additions & 0 deletions src/BootstrapBlazor/Locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@
"CloseAllTabsText": "关闭所有标签",
"NotFoundTabText": "未找到"
},
"BootstrapBlazor.Components.MultiFilter": {
"MultiFilterSearchPlaceHolderText": "请输入 ...",
"MultiFilterSelectAllText": "全选"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "新建",
"EditButtonText": "编辑",
Expand Down
1 change: 1 addition & 0 deletions src/BootstrapBlazor/wwwroot/scss/components.scss
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
@import "../../Components/ErrorLogger/ErrorLogger.razor.scss";
@import "../../Components/FlipClock/FlipClock.razor.scss";
@import "../../Components/FileIcon/FileIcon.razor.scss";
@import "../../Components/Filters/MultiFilter.razor.scss";
@import "../../Components/Filters/TableFilter.razor.scss";
@import "../../Components/Footer/Footer.razor.scss";
@import "../../Components/FullScreen/FullScreenButton.razor.scss";
Expand Down