Use SourceCache, set SelectedItem and scroll to it

This commit is contained in:
2022-05-25 08:52:07 +02:00
parent d94d198344
commit 06f79ddfa9
14 changed files with 112 additions and 53 deletions

View File

@@ -41,7 +41,7 @@ public static class DynamicDataExtensions
}
public static async Task<IEnumerable<AbsolutePath>?> GetItemsAsync(
this IObservable<IObservable<IChangeSet<AbsolutePath>>?> stream)
this IObservable<IObservable<IChangeSet<AbsolutePath, string>>?> stream)
=> await GetItemsAsync(stream
.Select(s =>
s is null
@@ -50,7 +50,7 @@ public static class DynamicDataExtensions
.Switch());
public static async Task<IEnumerable<AbsolutePath>?> GetItemsAsync(
this IObservable<IChangeSet<AbsolutePath>> stream)
this IObservable<IChangeSet<AbsolutePath, string>> stream)
=> await GetItemsAsync(stream.ToCollection());
private static Task<IEnumerable<AbsolutePath>?> GetItemsAsync(

View File

@@ -4,6 +4,6 @@ namespace FileTime.Core.Models;
public interface IContainer : IItem
{
IObservable<IObservable<IChangeSet<AbsolutePath>>?> Items { get; }
IObservable<IObservable<IChangeSet<AbsolutePath, string>>?> Items { get; }
IObservable<bool> IsLoading { get; }
}

View File

@@ -8,7 +8,7 @@ public interface ITab : IInitable<IContainer>, IDisposable
{
IObservable<IContainer?> CurrentLocation { get; }
IObservable<AbsolutePath?> CurrentSelectedItem { get; }
IObservable<IObservable<IChangeSet<IItem>>?> CurrentItems { get; }
IObservable<IObservable<IChangeSet<IItem, string>>?> CurrentItems { get; }
FullName? LastDeepestSelectedPath { get; }
void SetCurrentLocation(IContainer newLocation);

View File

@@ -11,10 +11,10 @@ public abstract class ContentProviderBase : IContentProvider
{
private readonly ReadOnlyExtensionCollection _extensions;
protected BehaviorSubject<IObservable<IChangeSet<AbsolutePath>>?> Items { get; } = new(null);
protected BehaviorSubject<IObservable<IChangeSet<AbsolutePath, string>>?> Items { get; } = new(null);
protected ExtensionCollection Extensions { get; }
IObservable<IObservable<IChangeSet<AbsolutePath>>?> IContainer.Items => Items;
IObservable<IObservable<IChangeSet<AbsolutePath, string>>?> IContainer.Items => Items;
public string Name { get; }

View File

@@ -25,7 +25,7 @@ public record Container(
PointInTime PointInTime,
IObservable<IEnumerable<Exception>> Exceptions,
ReadOnlyExtensionCollection Extensions,
IObservable<IObservable<IChangeSet<AbsolutePath>>?> Items) : IContainer
IObservable<IObservable<IChangeSet<AbsolutePath, string>>?> Items) : IContainer
{
BehaviorSubject<bool> IsLoading { get; } = new BehaviorSubject<bool>(false);
IObservable<bool> IContainer.IsLoading => IsLoading.AsObservable();

View File

@@ -19,7 +19,7 @@ public class Tab : ITab
private PointInTime _currentPointInTime;
public IObservable<IContainer?> CurrentLocation { get; }
public IObservable<IObservable<IChangeSet<IItem>>?> CurrentItems { get; }
public IObservable<IObservable<IChangeSet<IItem, string>>?> CurrentItems { get; }
public IObservable<AbsolutePath?> CurrentSelectedItem { get; }
public FullName? LastDeepestSelectedPath { get; private set; }
@@ -55,9 +55,9 @@ public class Tab : ITab
(items, filters) => items?.Where(i => filters.All(f => f.Filter(i)))),
CurrentLocation
.Where(c => c is null)
.Select(_ => (IObservable<IChangeSet<IItem>>?)null)
.Select(_ => (IObservable<IChangeSet<IItem, string>>?)null)
)
.Publish((IObservable<IChangeSet<IItem>>?)null)
.Publish((IObservable<IChangeSet<IItem, string>>?)null)
.RefCount();
CurrentSelectedItem =