diff --git a/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs b/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs index b297bc2..476f206 100644 --- a/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs +++ b/src/Ramstack.HtmxToolkit/Collections/SmallDictionary.cs @@ -184,8 +184,8 @@ public void Clear() var count = _count; if (count != 0) Array.Clear(_items, 0, count); - } + _count = 0; } diff --git a/src/Ramstack.HtmxToolkit/PendingEvents.cs b/src/Ramstack.HtmxToolkit/PendingEvents.cs index 233f978..0179884 100644 --- a/src/Ramstack.HtmxToolkit/PendingEvents.cs +++ b/src/Ramstack.HtmxToolkit/PendingEvents.cs @@ -1,8 +1,8 @@ -using System.Runtime.InteropServices; using System.Text.Json; using Microsoft.AspNetCore.Http; +using Ramstack.HtmxToolkit.Collections; using Ramstack.HtmxToolkit.Internal; namespace Ramstack.HtmxToolkit; @@ -16,9 +16,9 @@ internal sealed class PendingEvents private const string ProxyEventName = "rs:events"; private readonly HttpResponse _response; - private Dictionary? _receive; - private Dictionary? _afterSwap; - private Dictionary? _afterSettle; + private SmallDictionary? _receive; + private SmallDictionary? _afterSwap; + private SmallDictionary? _afterSettle; /// /// Initializes a new instance of the class. @@ -37,9 +37,9 @@ public void AddEvents(HtmxTriggerTiming timing, IReadOnlyDictionary _receive ??= new Dictionary(), - HtmxTriggerTiming.AfterSwap => _afterSwap ??= new Dictionary(), - _ => _afterSettle ??= new Dictionary() + HtmxTriggerTiming.Receive => _receive ??= new SmallDictionary(StringComparer.Ordinal), + HtmxTriggerTiming.AfterSwap => _afterSwap ??= new SmallDictionary(StringComparer.Ordinal), + _ => _afterSettle ??= new SmallDictionary(StringComparer.Ordinal) }; foreach (var (k, v) in events) @@ -47,9 +47,11 @@ public void AddEvents(HtmxTriggerTiming timing, IReadOnlyDictionary> collection) - value = collection = []; + if (!current.TryGetValue(ProxyEventName, out var value) || value is not List> collection) + { + collection = []; + current[ProxyEventName] = collection; + } collection.Add(new KeyValuePair(k, v)); } @@ -79,7 +81,7 @@ public void AddEvents(HtmxTriggerTiming timing, IReadOnlyDictionaryA dictionary containing event names as keys and event details as values. public void SetEvents(HtmxTriggerTiming timing, IReadOnlyDictionary events) { - var replacement = new Dictionary(events); + var replacement = new SmallDictionary(events, StringComparer.Ordinal); switch (timing) { case HtmxTriggerTiming.Receive: @@ -140,7 +142,7 @@ public static PendingEvents GetOrCreate(HttpResponse response) return pending; } - private void SetHeader(string name, Dictionary? events) + private void SetHeader(string name, SmallDictionary? events) { if (events is not null) _response.Headers[name] = JsonSerializer.Serialize(events, JsonOptions.CamelCase);