Add FolderProvider
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public record FileFilter(string Name, List<string> Extensions, bool AllowMultiple = false);
|
||||
public record FileFilter(string Name, List<string> Extensions, bool AllowMultiple = false);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public record FolderFilter(bool AllowMultiple = false);
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public interface IFolderProvider
|
||||
{
|
||||
Task<IReadOnlyCollection<string>> SelectFolders(FolderFilter filter);
|
||||
}
|
||||
@@ -12,3 +12,22 @@ public record Result<TValue> :
|
||||
|
||||
public static implicit operator Result<TValue>(TValue? value) => Create(value);
|
||||
}
|
||||
|
||||
|
||||
public record Result(bool IsSuccess, Error Error)
|
||||
{
|
||||
public bool IsFailure => !IsSuccess;
|
||||
|
||||
public static Result Success() => new(true, Error.None);
|
||||
|
||||
public static Result<TValue> Success<TValue>(TValue value) => new(value, true, Error.None);
|
||||
|
||||
public static Result Failure(Error error) => new(false, error);
|
||||
|
||||
public static Result<TValue> Failure<TValue>(Error error) => new(default, false, error);
|
||||
|
||||
public static Result Create(bool condition) => condition ? Success() : Failure(Error.ConditionNotMet);
|
||||
|
||||
public static Result<TValue> Create<TValue>(TValue? value) => value is not null ? Success(value) : Failure<TValue>(Error.Null);
|
||||
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public record Result(bool IsSuccess, Error Error)
|
||||
{
|
||||
public bool IsFailure => !IsSuccess;
|
||||
|
||||
public static Result Success() => new(true, Error.None);
|
||||
|
||||
public static Result<TValue> Success<TValue>(TValue value) => new(value, true, Error.None);
|
||||
|
||||
public static Result Failure(Error error) => new(false, error);
|
||||
|
||||
public static Result<TValue> Failure<TValue>(Error error) => new(default, false, error);
|
||||
|
||||
public static Result Create(bool condition) => condition ? Success() : Failure(Error.ConditionNotMet);
|
||||
|
||||
public static Result<TValue> Create<TValue>(TValue? value) => value is not null ? Success(value) : Failure<TValue>(Error.Null);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public class SelectFoldersHandler(IFolderProvider folderProvider) :
|
||||
IHandler<SelectionEventArgs<FolderFilter>, IReadOnlyCollection<string>?>
|
||||
{
|
||||
public async Task<IReadOnlyCollection<string>?> Handle(SelectionEventArgs<FolderFilter> args,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (args.Sender is FolderFilter filter)
|
||||
{
|
||||
if (await folderProvider.SelectFolders(filter)
|
||||
is { Count: > 0 } folders)
|
||||
{
|
||||
return folders;
|
||||
}
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user