MainMudIse.razor 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. @layout DevEjectionSeat
  2. @using Color = MudBlazor.Color
  3. @using Size = MudBlazor.Size
  4. @inject IEventBus EventBus;
  5. @inject IJSRuntime JSRuntime;
  6. @* Required *@
  7. <MudThemeProvider />
  8. <MudPopoverProvider />
  9. @* Needed for dialogs *@
  10. <MudDialogProvider />
  11. @* Needed for snackbars *@
  12. <MudSnackbarProvider />
  13. @{
  14. RenderFragment<ItemChild> RenderItemChild = child => __builder=>
  15. {
  16. <MudPaper Class="pa-1 my-1">
  17. <MudStack Row StretchItems="StretchItems.Start" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Class="mud-paper mud-paper-square stack-adorner">
  18. <MudText Class="hideable">@child.Name</MudText>
  19. <MudStack Row>
  20. <MudIcon Icon="@Icons.Material.Sharp.ConnectWithoutContact"></MudIcon>
  21. <MudIcon Icon="@Icons.Custom.Uncategorized.AlertSuccess"></MudIcon>
  22. </MudStack>
  23. <MudMenu Icon="@Icons.Material.Outlined.Menu" Variant="Variant.Filled" AnchorOrigin="Origin.BottomRight" TransformOrigin="Origin.TopRight" Color="Color.Default" Size="Size.Large">
  24. <MudMenuItem Icon="@Icons.Material.Sharp.PrivateConnectivity">Connect</MudMenuItem>
  25. <MudMenuItem Icon="@Icons.Material.Sharp.DisabledByDefault">Disconnect</MudMenuItem>
  26. <MudMenuItem Icon="@Icons.Material.Sharp.Edit">Edit...</MudMenuItem>
  27. <MudMenuItem Icon="@Icons.Material.Sharp.Delete" IconColor="Color.Error">Delete Trusted Peer</MudMenuItem>
  28. </MudMenu>
  29. </MudStack>
  30. </MudPaper>
  31. };
  32. RenderFragment<Item> RenderItem = item => __builder =>
  33. {
  34. <MudPaper Class="pa-1 my-1">
  35. <MudStack Row StretchItems="StretchItems.Start" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Class="mud-paper mud-paper-square stack-adorner">
  36. <MudText Class="hideable">@item.Name</MudText>
  37. <MudStack Row>
  38. <MudIcon Icon="@Icons.Material.Sharp.Start"></MudIcon>
  39. <MudIcon Icon="@Icons.Custom.Uncategorized.AlertSuccess"></MudIcon>
  40. </MudStack>
  41. <MudMenu Icon="@Icons.Material.Outlined.Menu" Variant="Variant.Filled" AnchorOrigin="Origin.BottomRight" TransformOrigin="Origin.TopRight" Color="Color.Default" Size="Size.Large">
  42. <MudMenuItem Icon="@Icons.Material.Sharp.PlayArrow" >Start Listener</MudMenuItem>
  43. <MudMenuItem Icon="@Icons.Material.Sharp.Stop" >Stop Listener</MudMenuItem>
  44. <MudMenuItem Icon="@Icons.Material.Sharp.Edit" >Edit...</MudMenuItem>
  45. <MudMenuItem Icon="@Icons.Material.Sharp.Delete" IconColor="Color.Error">Delete Local Peer</MudMenuItem>
  46. </MudMenu>
  47. </MudStack>
  48. <MudDropContainer T="ItemChild" Items="@item.Children" ItemsSelector="(_, _) => true" Class="flex-grow-1">
  49. <ChildContent>
  50. <MudDropZone AllowReorder T="ItemChild">
  51. <ItemRenderer>
  52. @RenderItemChild(context)
  53. </ItemRenderer>
  54. </MudDropZone>
  55. </ChildContent>
  56. </MudDropContainer>
  57. </MudPaper>
  58. };
  59. RenderFragment RenderContacts = __builder =>
  60. {
  61. <MudStack StretchItems="StretchItems.End" AlignItems="AlignItems.Stretch" Spacing="1" Style="width:100%;height:100%">
  62. <MudStack Row AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Spacing="1" Class="mud-paper mud-paper-square stack-adorner">
  63. <MudText Class="hideable">Contacts</MudText>
  64. <MudMenu Icon="@Icons.Material.Outlined.Menu" Variant="Variant.Filled" AnchorOrigin="Origin.BottomRight" TransformOrigin="Origin.TopRight" Color="Color.Default" Size="Size.Large">
  65. <MudMenuItem Icon="@Icons.Material.Sharp.Add">Add Local Peer...</MudMenuItem>
  66. <MudMenuItem Icon="@Icons.Material.Sharp.Settings">Settings...</MudMenuItem>
  67. <MudMenuItem Icon="@Icons.Material.Sharp.Refresh" IconColor="Color.Warning" OnClick="@ReloadUI">Reload UI</MudMenuItem>
  68. <MudMenuItem Icon="@Icons.Material.Sharp.ExitToApp" IconColor="Color.Error">Quit</MudMenuItem>
  69. </MudMenu>
  70. </MudStack>
  71. <MudStack Row Class="mud-background-gray stack-adorner" Style="overflow-x: auto;">
  72. <MudDropContainer T="Item" Items="_items" ItemsSelector="(_, _) =>true " Class="flex-grow-1">
  73. <ChildContent>
  74. <MudDropZone AllowReorder T="Item">
  75. <ItemRenderer>
  76. @RenderItem(context)
  77. </ItemRenderer>
  78. </MudDropZone>
  79. </ChildContent>
  80. </MudDropContainer>
  81. </MudStack>
  82. </MudStack>
  83. };
  84. }
  85. <DevEjectionSeat>
  86. <Splitter Direction="SplitterDirection.Horizontal" GutterSize="5">
  87. <SplitterSection Size="30">
  88. @RenderContacts
  89. </SplitterSection>
  90. <SplitterSection Size="70">
  91. <Splitter Direction="SplitterDirection.Vertical" GutterSize="5">
  92. <SplitterSection Size="70">
  93. <div>Chat!</div>
  94. </SplitterSection>
  95. <SplitterSection Size="30">
  96. <div>Input!</div>
  97. </SplitterSection>
  98. </Splitter>
  99. </SplitterSection>
  100. </Splitter>
  101. </DevEjectionSeat>
  102. @code {
  103. protected override async Task OnAfterRenderAsync(bool firstRender)
  104. {
  105. if (firstRender)
  106. {
  107. EventBus.Publish<UiShownEvent>();
  108. }
  109. }
  110. private void ReloadUI()
  111. {
  112. JSRuntime.InvokeVoidAsync("window.location.reload");
  113. }
  114. private List<Item> _items = new()
  115. {
  116. new()
  117. {
  118. Name = "Item 1",
  119. Children =
  120. {
  121. new ItemChild() { Name = "1A" },
  122. new ItemChild() { Name = "1B" },
  123. new ItemChild() { Name = "1C" },
  124. }
  125. },
  126. new()
  127. {
  128. Name = "Item 2",
  129. Children =
  130. {
  131. new ItemChild() { Name = "2A" },
  132. new ItemChild() { Name = "2B" },
  133. new ItemChild() { Name = "2C" },
  134. }
  135. },
  136. new()
  137. {
  138. Name = "Item 3",
  139. Children =
  140. {
  141. new ItemChild() { Name = "2A" },
  142. new ItemChild() { Name = "2B" },
  143. new ItemChild() { Name = "2C" },
  144. }
  145. },
  146. };
  147. private class Item
  148. {
  149. public string Name { get; init; }
  150. public List<ItemChild> Children { get; set; } = new();
  151. }
  152. private class ItemChild
  153. {
  154. public string Name { get; init; }
  155. }
  156. }