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