feature: custom details first-class

custom details (such as those from the UserDetails plugin) can now be more deeply integrated throughtout the system
This commit is contained in:
Gary Sharp
2021-02-07 18:15:52 +11:00
parent e11d0871c4
commit 3e57af394d
41 changed files with 2700 additions and 1279 deletions
@@ -0,0 +1,60 @@
using Disco.Data.Repository;
using Disco.Models.Services.Plugins.Details;
using Disco.Models.UI.Device;
using Disco.Models.UI.Job;
using Disco.Models.UI.User;
using System.Collections.Generic;
namespace Disco.Services.Plugins.Features.DetailsProvider
{
public static class DetailsProviderExtensions
{
public static void PopulateDetails(this UserShowModel model, DiscoDataContext database)
{
var service = new DetailsProviderService(database);
model.UserDetails = service.GetDetails(model.User);
model.HasUserPhoto = service.HasUserPhoto(model.User);
var currentAssignments = model.User.CurrentDeviceUserAssignments();
if (currentAssignments.Count > 0)
{
model.AssignedDevicesDetails = new Dictionary<string, DetailsResult>(currentAssignments.Count);
foreach (var device in currentAssignments)
{
model.AssignedDevicesDetails[device.DeviceSerialNumber] = service.GetDetails(device.Device);
}
}
}
public static void PopulateDetails(this DeviceShowModel model, DiscoDataContext database)
{
var service = new DetailsProviderService(database);
model.DeviceDetails = service.GetDetails(model.Device);
if (model.Device.AssignedUser != null)
{
model.AssignedUserDetails = service.GetDetails(model.Device.AssignedUser);
model.HasAssignedUserPhoto = service.HasUserPhoto(model.Device.AssignedUser);
}
}
public static void PopulateDetails(this JobShowModel model, DiscoDataContext database)
{
var service = new DetailsProviderService(database);
if (model.Job.Device != null)
model.DeviceDetails = service.GetDetails(model.Job.Device);
if (model.Job.User != null)
{
model.UserDetails = service.GetDetails(model.Job.User);
model.HasUserPhoto = service.HasUserPhoto(model.Job.User);
}
}
}
}