Files
mixtape/zero.Core/Utils/TableBuilder/TableExport.cs
T
2022-02-18 14:31:56 +01:00

51 lines
1.0 KiB
C#

using System.IO;
namespace zero.Utils;
public abstract class TableExport<TEntity> : ITableExport<TEntity> where TEntity : ZeroIdEntity
{
protected ILocalizer Localizer { get; private set; }
public TableExport(ILocalizer localizer)
{
Localizer = localizer;
}
public virtual async Task<Stream> Export(TableFormat format = TableFormat.Excel)
{
ITableBuilder<TEntity> builder = new TableBuilder<TEntity>(Localizer, format);
await Warmup();
Build(builder);
IAsyncEnumerable<TEntity> items = Load();
MemoryStream stream = await builder.ToStream(items);
return stream;
}
protected virtual Task Warmup() => Task.CompletedTask;
protected virtual async IAsyncEnumerable<TEntity> Load()
{
await Task.Delay(0);
yield break;
}
protected virtual void Build(ITableBuilder<TEntity> builder)
{
builder.Column("@ui.id").For(c => c.Id).Size(40);
}
}
public interface ITableExport<TEntity> where TEntity : ZeroIdEntity
{
Task<Stream> Export(TableFormat format = TableFormat.Excel);
}