OrganizationPanel.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEditor.UIElements;
  4. using UnityEngine.UIElements;
  5. using PlasticGui;
  6. using Unity.PlasticSCM.Editor.UI.UIElements;
  7. using PlasticGui.WebApi;
  8. namespace Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome
  9. {
  10. internal class OrganizationPanel : VisualElement
  11. {
  12. internal OrganizationPanel(
  13. CloudEditionWelcomeWindow parentWindow,
  14. IPlasticWebRestApi restApi,
  15. string title,
  16. List<string> organizations,
  17. bool canCreateAnOrganization)
  18. {
  19. mParentWindow = parentWindow;
  20. mRestApi = restApi;
  21. mOrganizations = organizations;
  22. InitializeLayoutAndStyles();
  23. BuildComponents(title, canCreateAnOrganization);
  24. }
  25. void BuildComponents(string title, bool canCreateAnOrganization)
  26. {
  27. mParentWindow.titleContent = new UnityEngine.GUIContent(title);
  28. this.SetControlText<Label>("confirmationMessage",
  29. PlasticLocalization.Name.SignedUpTitle);
  30. if (mOrganizations.Count == 1)
  31. {
  32. BuildSingleOrganizationSection(mOrganizations.First());
  33. mJoinSingleOrganizationButton = this.Q<Button>("joinSingleOrganizationButton");
  34. mJoinSingleOrganizationButton.clicked += JoinOrganizationButton_clicked;
  35. }
  36. else if (mOrganizations.Count > 1)
  37. {
  38. BuildMultipleOrganizationsSection(mOrganizations);
  39. mJoinMultipleOrganizationsButton = this.Q<Button>("joinMultipleOrganizationsButton");
  40. mJoinMultipleOrganizationsButton.clicked += JoinOrganizationButton_clicked;
  41. mOrganizationToJoin = mOrganizations.First();
  42. }
  43. if (canCreateAnOrganization)
  44. {
  45. BuildCreateOrganizationSection(!mOrganizations.Any());
  46. mCreateOrganizationButton = this.Q<Button>("createOrganizationButton");
  47. mCreateOrganizationButton.clicked += CreateOrganizationButton_Clicked;
  48. }
  49. }
  50. internal void Dispose()
  51. {
  52. mParentWindow.CancelJoinOrganization();
  53. if (mJoinSingleOrganizationButton != null)
  54. mJoinSingleOrganizationButton.clicked -= JoinOrganizationButton_clicked;
  55. if (mJoinMultipleOrganizationsButton != null)
  56. mJoinMultipleOrganizationsButton.clicked -= JoinOrganizationButton_clicked;
  57. if (mCreateOrganizationButton != null)
  58. mCreateOrganizationButton.clicked -= CreateOrganizationButton_Clicked;
  59. }
  60. private void JoinOrganizationButton_clicked()
  61. {
  62. mParentWindow.JoinOrganizationAndWelcomePage(mOrganizationToJoin);
  63. // TODO: Closing the window for now. Need to connect this event to the main on boarding
  64. // workflow.
  65. mParentWindow.Close();
  66. }
  67. private void CreateOrganizationButton_Clicked()
  68. {
  69. mParentWindow.ReplaceRootPanel(new CreateOrganizationPanel(mParentWindow, this, mRestApi));
  70. }
  71. void BuildSingleOrganizationSection(string organizationName)
  72. {
  73. mOrganizationToJoin = organizationName;
  74. this.Query<VisualElement>("joinSingleOrganization").First().RemoveFromClassList("display-none");
  75. this.SetControlText<Label>("joinSingleOrganizationLabel",
  76. PlasticLocalization.Name.YouBelongToOrganization, organizationName);
  77. this.SetControlText<Button>("joinSingleOrganizationButton",
  78. PlasticLocalization.Name.JoinButton);
  79. }
  80. void BuildMultipleOrganizationsSection(List<string> organizationNames)
  81. {
  82. this.Query<VisualElement>("joinMultipleOrganizations").First().RemoveFromClassList("display-none");
  83. this.SetControlText<Label>("joinMultipleOrganizationsLabel",
  84. PlasticLocalization.Name.YouBelongToSeveralOrganizations);
  85. VisualElement organizationDropdown = this.Query<VisualElement>("organizationDropdown").First();
  86. ToolbarMenu toolbarMenu = new ToolbarMenu
  87. {
  88. text = organizationNames.FirstOrDefault()
  89. };
  90. foreach (string name in organizationNames)
  91. {
  92. toolbarMenu.menu.AppendAction(name, x =>
  93. {
  94. toolbarMenu.text = name;
  95. mOrganizationToJoin = name;
  96. }, DropdownMenuAction.AlwaysEnabled);
  97. organizationDropdown.Add(toolbarMenu);
  98. }
  99. this.SetControlText<Button>("joinMultipleOrganizationsButton",
  100. PlasticLocalization.Name.JoinButton);
  101. }
  102. void BuildCreateOrganizationSection(bool firstOrganization)
  103. {
  104. this.Query<VisualElement>("createOrganization").First().RemoveFromClassList("display-none");
  105. PlasticLocalization.Name createOrganizationLabelName = firstOrganization ?
  106. PlasticLocalization.Name.CreateFirstOrganizationLabel :
  107. PlasticLocalization.Name.CreateOtherOrganizationLabel;
  108. this.SetControlText<Label>("createOrganizationLabel",
  109. createOrganizationLabelName);
  110. this.SetControlText<Button>("createOrganizationButton",
  111. PlasticLocalization.Name.CreateButton);
  112. }
  113. void InitializeLayoutAndStyles()
  114. {
  115. this.LoadLayout(typeof(OrganizationPanel).Name);
  116. this.LoadStyle("SignInSignUp");
  117. this.LoadStyle(typeof(OrganizationPanel).Name);
  118. }
  119. List<string> mOrganizations;
  120. Button mJoinSingleOrganizationButton = null;
  121. Button mJoinMultipleOrganizationsButton = null;
  122. Button mCreateOrganizationButton = null;
  123. public string mOrganizationToJoin = "";
  124. readonly CloudEditionWelcomeWindow mParentWindow;
  125. readonly IPlasticWebRestApi mRestApi;
  126. }
  127. }