about summary refs log tree commit diff
path: root/MatrixRoomUtils.Web/Pages/Dev/ModalTest.razor
blob: 4a0487fd0bf0ea411aeff2de6e6b4a5ea5e3af8a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
@page "/Dev/ModalTest"
@inject IJSRuntime JsRuntime
<h3>ModalTest</h3>

@foreach (var (key, value) in _windowInfos) {
   @* <ModalWindow X="@value.X" Y="@value.Y" Title="@value.Title">@value.Content</ModalWindow> *@
}
@for (var i = 0; i < 5; i++) {
     var i1 = i;
     <ModalWindow X="@Random.Shared.Next(1400)" Y="@Random.Shared.Next(1000)" Title="@("Window " + i1)" OnCloseClicked="() => OnCloseClicked(i1)">
          @for (var j = 0; j < i1; j++) {
              <h1>@j</h1>
          }
     </ModalWindow>
}

@code {

    private Dictionary<int, WindowInfo> _windowInfos = new();

    private class WindowInfo {
        public double X;
        public double Y;
        public string Title;
        public RenderFragment Content;
    }

    protected override async Task OnInitializedAsync() {
        double _x = 2;
        double _xv = 20;
        double _y = 0;
        double multiplier = 1;

        for (var i = 0; i < 200; i++) {
            var i1 = i;
            _windowInfos.Add(_windowInfos.Count, new WindowInfo {
                X = _x,
                Y = _y,
                Title = "Win" + i1,
                Content = builder => {
                    builder.OpenComponent<ModalWindow>(0);
                    builder.AddAttribute(1, "X", _x);
                    builder.AddAttribute(2, "Y", _y);
                    builder.AddAttribute(3, "Title", "Win" + i1);
                    builder.AddAttribute(4, "ChildContent", (RenderFragment)(builder2 => {
                        builder2.OpenElement(0, "h1");
                        builder2.AddContent(1, "Hello " + i1);
                        builder2.CloseElement();
                    }));
                    builder.CloseComponent();
                }
            });
            //_x += _xv /= 1000/System.Math.Sqrt((double)_windowInfos.Count)*_windowInfos.Count.ToString().Length*multiplier;
            _y += 20;
	    _x += 20;
            var dimension = await JsRuntime.InvokeAsync<WindowDimension>("getWindowDimensions");
            if (_x > dimension.Width - 100) _x %= dimension.Width - 100;
            if (_y > dimension.Height - 50) {
                _y %= dimension.Height - 50;
                _xv = 20;
            }
            if (
                (_windowInfos.Count < 10 && _windowInfos.Count % 2 == 0) ||
                (_windowInfos.Count < 100 && _windowInfos.Count % 10 == 0) ||
                (_windowInfos.Count < 1000 && _windowInfos.Count % 50 == 0) ||
                (_windowInfos.Count < 10000 && _windowInfos.Count % 100 == 0)
                ) {
                StateHasChanged();
                await Task.Delay(25);
            }
            if(_windowInfos.Count > 750) multiplier = 2;
            if(_windowInfos.Count > 1500) multiplier = 3;

        }

        await base.OnInitializedAsync();
    }

    private void OnCloseClicked(int i1) {
        Console.WriteLine("Close clicked on " + i1);
    }

    public class WindowDimension {
        public int Width { get; set; }
        public int Height { get; set; }
    }

}