Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 9577 - Text can be typed whilst the package manager syncs with the server. #9583

Merged
merged 8 commits into from Apr 17, 2019
9 changes: 9 additions & 0 deletions src/DynamoCoreWpf/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/DynamoCoreWpf/Properties/Resources.en-US.resx
Expand Up @@ -2184,4 +2184,7 @@ Do you want to install the latest Dynamo update?</value>
<data name="RerunButtonToolTip" xml:space="preserve">
<value>Rerun the graph.</value>
</data>
<data name="PackageSearchViewSearchTextBoxSyncing" xml:space="preserve">
<value>Please wait...</value>
</data>
</root>
3 changes: 3 additions & 0 deletions src/DynamoCoreWpf/Properties/Resources.resx
Expand Up @@ -2187,4 +2187,7 @@ Want to publish a different package?</value>
<data name="CrashPromptGithubNewIssueTitle" xml:space="preserve">
<value>Crash report from Dynamo {0}</value>
</data>
<data name="PackageSearchViewSearchTextBoxSyncing" xml:space="preserve">
<value>Please wait...</value>
</data>
</root>
Expand Up @@ -82,6 +82,42 @@ public PackageSortingDirection SortingDirection
}
}

/// <summary>
/// The string that is displayed in the search box prompt depending on the search state.
/// </summary>
public string SearchBoxPrompt
QilongTang marked this conversation as resolved.
Show resolved Hide resolved
{
get
{
if(SearchState == PackageSearchState.Syncing)
{
return Resources.PackageSearchViewSearchTextBoxSyncing;
}
return Resources.PackageSearchViewSearchTextBox;
}
}

/// <summary>
/// Determines whether the the search text box should be displayed.
/// <para>
/// Returns false if the search state is syncing,
/// </para>
/// </summary>
public bool ShowSearchText
{
get
{
if(SearchState == PackageSearchState.Syncing)
{
return false;
}
else
{
return true;
}
}
}

/// <summary>
/// SearchText property
/// </summary>
Expand Down Expand Up @@ -145,17 +181,21 @@ public bool HasNoResults
get { return this.SearchResults.Count == 0; }
}


public PackageSearchState _searchState;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@RyaPorter Can you add a comment suggesting that this backing field be set to private in Dynamo 3.0? Doing so now would unfortunately introduce an API breaking change.


/// <summary>
/// Gives the current state of search.
/// </summary>
public PackageSearchState _searchState;
public PackageSearchState SearchState
{
get { return _searchState; }
set
{
_searchState = value;
RaisePropertyChanged("SearchState");
RaisePropertyChanged(nameof(this.SearchState));
RaisePropertyChanged(nameof(this.SearchBoxPrompt));
RaisePropertyChanged(nameof(this.ShowSearchText));
}
}

Expand Down
Expand Up @@ -12,6 +12,7 @@

<Window.Resources>
<ResourceDictionary>

<!-- An unstyled button -->
<Style x:Key="FlatButton" TargetType="Button">
<Setter Property="Background" Value="{x:Null}" />
Expand Down Expand Up @@ -121,22 +122,21 @@

<TextBlock Grid.Row ="1" Grid.ZIndex ="1" FontSize="13" HorizontalAlignment="Center" Foreground="Gray" VerticalAlignment="Center" Name="NoResultsIndicator" TextAlignment="Center" Margin="20" Text="{Binding Path=SearchState, Converter={StaticResource PackageSearchStateToStringConverter}}"/>

<Grid Name="RSearchBoxStackPanel" Grid.Row="0">
<Grid Name="RSearchBoxStackPanel" Grid.Row="0" Background="#222">

<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>

<TextBox Grid.Column="0" Name="SearchTextBox" KeyboardNavigation.TabIndex="0" Foreground="WhiteSmoke" Background="#222" BorderThickness="0" FontSize ="13" Padding="10,10,5,10" Margin ="0"
IsEnabled="True" TextChanged="SearchTextBox_TextChanged" VerticalAlignment="Stretch" Text="{Binding Path=SearchText, Mode=TwoWay}">
<TextBox Visibility="{Binding ShowSearchText, Converter={StaticResource BooleanToVisibilityConverter}}" Text="{Binding Path=SearchText, Mode=TwoWay}"
Grid.Column="0" Name="SearchTextBox" KeyboardNavigation.TabIndex="0" Foreground="WhiteSmoke" Background="Transparent" CaretBrush="White"
BorderThickness="0" FontSize ="13" Padding="10,10,5,10" Margin ="0" TextChanged="SearchTextBox_TextChanged" VerticalAlignment="Stretch">
</TextBox>

<TextBlock Grid.Column="0" FontSize ="13" Padding="20,10,5,10" Margin ="0" Background="Transparent"
Foreground="#666"
IsHitTestVisible="False"
Visibility="{Binding Path=SearchText, Converter={StaticResource NonEmptyStringToCollapsedConverter}}"
Text="{x:Static p:Resources.PackageSearchViewSearchTextBox}"/>
<TextBlock Text="{Binding SearchBoxPrompt}" Visibility="{Binding Path=SearchText, Converter={StaticResource NonEmptyStringToCollapsedConverter}}"
Grid.Column="0" FontSize ="13" Padding="20,10,5,10" Margin ="0" Background="Transparent" Foreground="#666" IsHitTestVisible="False">
</TextBlock>

<Button Width="auto" MinWidth="80" Grid.Column="1" Click="OnSortButtonClicked"
Style="{DynamicResource ResourceKey=STextButton}" Content="{x:Static p:Resources.PackageSearchViewSortByButton}">
Expand Down
78 changes: 78 additions & 0 deletions test/DynamoCoreWpfTests/PackageManagerUITests.cs
Expand Up @@ -158,6 +158,84 @@ public void PackageSearchDialogClosesWithDynamo()

}

[Test]
public void PackageSearchDialogSearchTextCollapsedWhileSyncing()
{
// Arrange
PackageManagerSearchViewModel searchViewModel = new PackageManagerSearchViewModel();

// Act
searchViewModel.SearchState = PackageManagerSearchViewModel.PackageSearchState.Syncing;

// Assert
Assert.AreEqual(false, searchViewModel.ShowSearchText);
}

[Test]
public void PackageSearchDialogSearchTextVisibleWithResults()
{
// Arrange
PackageManagerSearchViewModel searchViewModel = new PackageManagerSearchViewModel();

// Act
searchViewModel.SearchState = PackageManagerSearchViewModel.PackageSearchState.Results;

// Assert
Assert.AreEqual(true, searchViewModel.ShowSearchText);
}

[Test]
public void PackageSearchDialogSearchTextVisibleWhenSearching()
{
// Arrange
PackageManagerSearchViewModel searchViewModel = new PackageManagerSearchViewModel();

// Act
searchViewModel.SearchState = PackageManagerSearchViewModel.PackageSearchState.Searching;

// Assert
Assert.AreEqual(true, searchViewModel.ShowSearchText);
}

[Test]
public void PackageSearchDialogSearchTextVisibleWhenNoResults()
{
// Arrange
PackageManagerSearchViewModel searchViewModel = new PackageManagerSearchViewModel();

// Act
searchViewModel.SearchState = PackageManagerSearchViewModel.PackageSearchState.NoResults;

// Assert
Assert.AreEqual(true, searchViewModel.ShowSearchText);
}

[Test]
public void PackageSearchDialogSearchBoxPromptTextWhileSyncing()
{
// Arrange
PackageManagerSearchViewModel searchViewModel = new PackageManagerSearchViewModel();

// Act
searchViewModel.SearchState = PackageManagerSearchViewModel.PackageSearchState.Syncing;

// Assert
Assert.AreEqual(Dynamo.Wpf.Properties.Resources.PackageSearchViewSearchTextBoxSyncing, searchViewModel.SearchBoxPrompt);
}

[Test]
public void PackageSearchDialogSearchBoxPromptTextWhenNotSyncing()
{
// Arrange
PackageManagerSearchViewModel searchViewModel = new PackageManagerSearchViewModel();

// Act
searchViewModel.SearchState = PackageManagerSearchViewModel.PackageSearchState.Results;

// Assert
Assert.AreEqual(Dynamo.Wpf.Properties.Resources.PackageSearchViewSearchTextBox, searchViewModel.SearchBoxPrompt);
}

#endregion

}
Expand Down