| File: WebEventData\DragEventArgsReader.cs | Web Access |
| Project: src\aspnetcore\src\Components\Web\src\Microsoft.AspNetCore.Components.Web.csproj (Microsoft.AspNetCore.Components.Web) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.Text.Json; namespace Microsoft.AspNetCore.Components.Web; internal static class DragEventArgsReader { private static readonly JsonEncodedText DataTransfer = JsonEncodedText.Encode("dataTransfer"); private static readonly JsonEncodedText DropEffect = JsonEncodedText.Encode("dropEffect"); private static readonly JsonEncodedText EffectAllowed = JsonEncodedText.Encode("effectAllowed"); private static readonly JsonEncodedText Files = JsonEncodedText.Encode("files"); private static readonly JsonEncodedText Items = JsonEncodedText.Encode("items"); private static readonly JsonEncodedText Types = JsonEncodedText.Encode("types"); private static readonly JsonEncodedText Kind = JsonEncodedText.Encode("kind"); private static readonly JsonEncodedText Type = JsonEncodedText.Encode("type"); internal static DragEventArgs Read(JsonElement jsonElement) { var eventArgs = new DragEventArgs(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(DataTransfer.EncodedUtf8Bytes)) { eventArgs.DataTransfer = ReadDataTransfer(property.Value); } else { MouseEventArgsReader.ReadProperty(eventArgs, property); } } return eventArgs; } private static DataTransfer ReadDataTransfer(JsonElement jsonElement) { var dataTransfer = new DataTransfer(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(DropEffect.EncodedUtf8Bytes)) { dataTransfer.DropEffect = property.Value.GetString()!; } else if (property.NameEquals(EffectAllowed.EncodedUtf8Bytes)) { dataTransfer.EffectAllowed = property.Value.GetString(); } else if (property.NameEquals(Files.EncodedUtf8Bytes)) { dataTransfer.Files = ReadStringArray(property.Value); } else if (property.NameEquals(Items.EncodedUtf8Bytes)) { var value = property.Value; var items = new DataTransferItem[value.GetArrayLength()]; var i = 0; foreach (var item in value.EnumerateArray()) { items[i++] = ReadDataTransferItem(item); } dataTransfer.Items = items; } else if (property.NameEquals(Types.EncodedUtf8Bytes)) { dataTransfer.Types = ReadStringArray(property.Value); } else { throw new JsonException($"Unknown property {property.Name}"); } } return dataTransfer; } private static DataTransferItem ReadDataTransferItem(JsonElement jsonElement) { var item = new DataTransferItem(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(Kind.EncodedUtf8Bytes)) { item.Kind = property.Value.GetString()!; } else if (property.NameEquals(Type.EncodedUtf8Bytes)) { item.Type = property.Value.GetString()!; } else { throw new JsonException($"Unknown property {property.Name}"); } } return item; } private static string[] ReadStringArray(JsonElement value) { var values = new string[value.GetArrayLength()]; var i = 0; foreach (var item in value.EnumerateArray()) { values[i++] = item.GetString()!; } return values; } }