public void QueryChanged(string query) { var activeItem = GetActiveResponsiveItem(query); if (activeItem != ActiveItem) { ActiveItem = activeItem; StateHasChanged(); } }
public async Task AddQueryAsync(ResponsiveLayoutItem item, string query) { _mediaQueries[item] = query; Debug.WriteLine($"registering query: {query}"); var handler = await _jsRuntime.InvokeAsync <double>("BlazorFabricResponsiveLayout.registerMediaQueryWatcher", DotNetObjectReference.Create(this), query); if (_handlers.ContainsKey(item)) { await _jsRuntime.InvokeVoidAsync("BlazorFabricResponsiveLayout.unregisterHandler", _handlers[item]); _handlers.Remove(item); } _handlers.Add(item, handler); var valid = await _jsRuntime.InvokeAsync <bool>("BlazorFabricResponsiveLayout.testQuery", query); if (valid) { Debug.WriteLine($"query was valid: {query}"); var activeItems = GetActiveResponsiveItems(query); var itemsToRemove = ActiveItems.Except(activeItems).ToList(); var itemsToAdd = activeItems.Except(ActiveItems).ToList(); if (itemsToAdd.Any() || itemsToRemove.Any()) { ActiveItems = activeItems; } foreach (var changeItem in itemsToRemove) { changeItem.NotifyStateChange(); } foreach (var changeItem in itemsToAdd) { changeItem.NotifyStateChange(); } //Force a new render since we don't want the Default to stay on screen if it's not correct StateHasChanged(); //if (ActiveItems.Except(activeItems).Any() || activeItems.Except(ActiveItems).Any()) //{ // ActiveItems = activeItems; // StateHasChanged(); //} } //_semaphore.Release(); }
public async Task AddQueryAsync(ResponsiveLayoutItem item, string query) { Debug.WriteLine($"waiting for semaphore: {query}"); await _semaphore.WaitAsync(); Debug.WriteLine($"got through: {query}"); if (_mediaQueries.ContainsKey(item) && _handlers.ContainsKey(item)) { if (_mediaQueries[item] == query) { _semaphore.Release(); return; } await _jsRuntime.InvokeVoidAsync("BlazorFabricResponsiveLayout.unregisterHandler", _handlers[item]); _handlers.Remove(item); } _mediaQueries[item] = query; Debug.WriteLine($"registering query: {query}"); var handler = await _jsRuntime.InvokeAsync <double>("BlazorFabricResponsiveLayout.registerMediaQueryWatcher", DotNetObjectReference.Create(this), query); _handlers.Add(item, handler); var valid = await _jsRuntime.InvokeAsync <bool>("BlazorFabricResponsiveLayout.testQuery", query); if (valid) { Debug.WriteLine($"query was valid: {query}"); var activeItem = GetActiveResponsiveItem(query); if (activeItem != ActiveItem) { ActiveItem = activeItem; StateHasChanged(); } } _semaphore.Release(); }