Ejemplo n.º 1
0
        public void QueryChanged(string query)
        {
            var activeItem = GetActiveResponsiveItem(query);

            if (activeItem != ActiveItem)
            {
                ActiveItem = activeItem;
                StateHasChanged();
            }
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
        }