123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using InABox.Clients;
- using InABox.Core;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace InABox.Wpf.Dashboard;
- public interface IDynamicDashboardDataQuery
- {
- Type Type { get; }
- string Key { get; set; }
- IFilter? Filter { get; set; }
- IColumns Columns { get; set; }
- ISortOrder? SortOrder { get; set; }
- }
- public class DynamicDashboardDataQuery<T> : IDynamicDashboardDataQuery
- where T : Entity, IRemotable, new()
- {
- public string Key { get; set; } = typeof(T).Name;
- public Filter<T>? Filter { get; set; }
- public Columns<T> Columns { get; set; } = Core.Columns.None<T>();
- public SortOrder<T>? SortOrder { get; set; } = null;
- #region IDynamicDashboardDataQuery
- Type IDynamicDashboardDataQuery.Type => typeof(T);
- IFilter? IDynamicDashboardDataQuery.Filter
- {
- get => Filter;
- set => Filter = value as Filter<T>;
- }
- IColumns IDynamicDashboardDataQuery.Columns
- {
- get => Columns;
- set => Columns = (value as Columns<T>) ?? Core.Columns.None<T>();
- }
- ISortOrder? IDynamicDashboardDataQuery.SortOrder
- {
- get => SortOrder;
- set => SortOrder = value as SortOrder<T>;
- }
- #endregion
- }
- public class DynamicDashboardDataComponent
- {
- public List<IDynamicDashboardDataQuery> Queries { get; set; } = new();
- public IDynamicDashboardDataQuery GetQuery(string key)
- {
- return Queries.FirstOrDefault(x => x.Key == key)
- ?? throw new KeyNotFoundException($"Data query '{key}' does not exist.");
- }
- public bool TryGetQuery(string key, [NotNullWhen(true)] out IDynamicDashboardDataQuery? query)
- {
- query = Queries.FirstOrDefault(x => x.Key == key);
- return query != null;
- }
- public DynamicDashboardData RunQuery(int? maxRecords = null)
- {
- var range = maxRecords.HasValue ? CoreRange.Database(maxRecords.Value) : null;
- var queryDefs = Queries.Select(x => new KeyedQueryDef(x.Key, x.Type, x.Filter, x.Columns, x.SortOrder, range));
- var results = Client.QueryMultiple(queryDefs);
- return new DynamicDashboardData(results.Results);
- }
- public async Task<DynamicDashboardData> RunQueryAsync(int? maxRecords = null)
- {
- var range = maxRecords.HasValue ? CoreRange.Database(maxRecords.Value) : null;
- var queryDefs = Queries.Select(x => new KeyedQueryDef(x.Key, x.Type, x.Filter, x.Columns, x.SortOrder, range));
- var results = await Client.QueryMultipleAsync(queryDefs);
- return new DynamicDashboardData(results.Results);
- }
- }
- public class DynamicDashboardData(Dictionary<string, CoreTable> data)
- {
- public Dictionary<string, CoreTable> Data { get; set; } = data;
- public bool TryGetData(string key, [NotNullWhen(true)] out CoreTable? query)
- {
- return Data.TryGetValue(key, out query);
- }
- }
|