public GroupWindowViewModel() { SetGroup = ReactiveCommand.CreateFromObservable <string, GroupObject>(identity => Locator.Current.GetService <ADFacade>().GetGroup(identity)); _group = SetGroup .ToProperty(this, vm => vm.Group); this.WhenActivated(disposables => { SetGroup.ThrownExceptions .SelectMany(ex => _messages.Handle(new MessageInfo(MessageType.Error, ex.Message, "Could not load group"))) .Subscribe() .DisposeWith(disposables); }); }
public static void InvokeSetGroup(GameObject player, ref UserGroup group, ref bool allow) { SetGroup setGroup = SetGroupEvent; if (setGroup == null) { return; } SetGroupEvent ev = new SetGroupEvent() { Player = Player.GetPlayer(player), Group = group, Allow = allow }; SetGroupEvent?.Invoke(ev); allow = ev.Allow; group = ev.Group; }
public EditMembersDialogViewModel() { SetGroup = ReactiveCommand.CreateFromObservable <string, GroupObject>(identity => _adFacade.GetGroup(identity)); GetGroupMembers = ReactiveCommand.CreateFromObservable(() => GetGroupMembersImpl(_group.Value)); Search = ReactiveCommand.Create(() => _adFacade.SearchDirectory(_searchQuery, TaskPoolScheduler.Default).Take(1000)); OpenSearchResult = ReactiveCommand.CreateFromTask(() => NavigateToPrincipal(_selectedSearchResult.Properties.Get <string>("name"))); OpenGroupMember = ReactiveCommand.CreateFromTask(() => NavigateToPrincipal(_selectedGroupMember.Properties.Get <string>("name"))); AddToGroup = ReactiveCommand.Create( () => { if (_groupMembers.Contains(_selectedSearchResult) || _membersToAdd.Contains(_selectedSearchResult)) { return; } _membersToRemove.Remove(_selectedSearchResult); _groupMembers.Add(_selectedSearchResult); _membersToAdd.Add(_selectedSearchResult); }, this.WhenAnyValue(vm => vm.SelectedSearchResult).IsNotNull()); RemoveFromGroup = ReactiveCommand.Create( () => { if (_membersToAdd.Contains(_selectedGroupMember)) { _membersToAdd.Remove(_selectedGroupMember); } else { _membersToRemove.Add(_selectedGroupMember); } _groupMembers.Remove(_selectedGroupMember); }, this.WhenAnyValue(vm => vm.SelectedGroupMember).IsNotNull()); Save = ReactiveCommand.CreateFromTask( async() => await SaveImpl(_group.Value, _membersToAdd, _membersToRemove), Observable.CombineLatest(_membersToAdd.CountChanged.StartWith(0), _membersToRemove.CountChanged.StartWith(0), (x, y) => x > 0 || y > 0)); Cancel = ReactiveCommand.Create(() => _close()); _group = SetGroup .ToProperty(this, vm => vm.Group); this.WhenActivated(disposables => { GetGroupMembers .ObserveOnDispatcher() .Subscribe(directoryEntry => _groupMembers.Add(directoryEntry)) .DisposeWith(disposables); Search .Do(_ => _searchResults.Clear()) .Switch() .ObserveOnDispatcher() .Subscribe(directoryEntry => _searchResults.Add(directoryEntry)) .DisposeWith(disposables); Save .SelectMany(groups => groups.Any() ? _messages.Handle(new MessageInfo(MessageType.Warning, $"The following messages were generated:\n{string.Join(Environment.NewLine, groups)}")) : Observable.Return(0)) .ObserveOnDispatcher() .Do(_ => _close()) .Subscribe() .DisposeWith(disposables); Observable.Merge <(string Title, string Message)>( SetGroup.ThrownExceptions.Select(ex => (("Could not load group", ex.Message))), GetGroupMembers.ThrownExceptions.Select(ex => (("Could not get members", ex.Message))), Search.ThrownExceptions.Select(ex => (("Could not complete search", ex.Message))), OpenSearchResult.ThrownExceptions.Select(ex => (("Could not open AD object", ex.Message))), OpenGroupMember.ThrownExceptions.Select(ex => (("Could not open AD object", ex.Message))), AddToGroup.ThrownExceptions.Select(ex => (("Could not add member", ex.Message))), RemoveFromGroup.ThrownExceptions.Select(ex => (("Could not remove member", ex.Message))), Save.ThrownExceptions.Select(ex => (("Could not save changes", ex.Message))), Cancel.ThrownExceptions.Select(ex => (("Could not close dialog", ex.Message)))) .SelectMany(dialogContent => _messages.Handle(new MessageInfo(MessageType.Error, dialogContent.Message, dialogContent.Title))) .Subscribe() .DisposeWith(disposables); }); }