Skip to content

Commit

Permalink
npm build implementation
Browse files Browse the repository at this point in the history
- now builds from the latest npm package
- webView2 swapped to DynamoWebView2 class
  • Loading branch information
dnenov committed Feb 19, 2024
1 parent 0518aef commit 2927d6e
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 65 deletions.
47 changes: 40 additions & 7 deletions src/DynamoCoreWpf/DynamoCoreWpf.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,46 @@

<!--Deletes the tgz file-->
<Delete Files="$(MSBuildProjectDirectory)\$(Last).tgz" />
</Target>

<ItemGroup>
<None Remove="Packages\HomePage\build\bundle.js" />
<None Remove="Packages\HomePage\build\index.html" />
</Target>


<Target Name="NpmRunBuildHomePage" BeforeTargets="BeforeBuild">
<!--This command updates the npm registry configuration if necessary-->
<Exec Command="$(PowerShellCommand) -ExecutionPolicy ByPass -Command $(SolutionDir)\setnpmreg.ps1" />
<!--Download the latest build of the Dynamo Home package-->
<Exec Command="npm pack @dynamods/dynamo-home@latest" />
</Target>

<Target Name="ExtractTGZFile" DependsOnTargets="NpmRunBuildHomePage" BeforeTargets="BeforeBuild">
<!--Locate the .tgz files for the Dynamo Home package-->
<ItemGroup>
<TGZFiles Include="./dynamods-dynamo-home-*.tgz" />
</ItemGroup>

<!--Reverse the order of the files to get the higher version-->
<ItemGroup>
<ReversedDynamoHome Include="@(TGZFiles-&gt;Reverse())" />
</ItemGroup>

<PropertyGroup>
<Last>%(TGZFiles.Filename)</Last>
</PropertyGroup>

<!--Create the folder for the Dynamo Home package-->
<MakeDir Directories="Packages/DynamoHome" />

<!--Extract the file to the specified directory-->
<Exec Command="tar -xzf $(MSBuildProjectDirectory)\$(Last).tgz --strip-components=1 --directory=Packages/DynamoHome"></Exec>

<!--Delete the tgz file-->
<Delete Files="$(MSBuildProjectDirectory)\$(Last).tgz" />
</Target>

<ItemGroup>
<None Remove="Packages\SplashScreen\build\index.bundle.js" />
<None Remove="Packages\SplashScreen\build\index.html" />
<None Remove="Packages\DynamoHome\build\index.bundle.js" />
<None Remove="Packages\DynamoHome\build\index.html" />
<None Remove="UI\Images\Canvas\canvas-button-geometry-scaling.png" />
<None Remove="UI\Images\checkmark_16px.png" />
<None Remove="UI\Images\close_16px.png" />
Expand Down Expand Up @@ -88,8 +121,8 @@
<None Remove="Views\SplashScreen\WebApp\splashScreenBackground.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Packages\HomePage\build\bundle.js" />
<EmbeddedResource Include="Packages\HomePage\build\index.html" />
<EmbeddedResource Include="Packages\DynamoHome\build\index.bundle.js" />
<EmbeddedResource Include="Packages\DynamoHome\build\index.html" />
<EmbeddedResource Include="Packages\SplashScreen\build\index.bundle.js" />
<EmbeddedResource Include="Packages\SplashScreen\build\index.html" />
<EmbeddedResource Include="Views\SplashScreen\WebApp\splashScreenBackground.png" />
Expand Down
2 changes: 0 additions & 2 deletions src/DynamoCoreWpf/Packages/HomePage/build/bundle.js

This file was deleted.

13 changes: 0 additions & 13 deletions src/DynamoCoreWpf/Packages/HomePage/build/index.html

This file was deleted.

52 changes: 26 additions & 26 deletions src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Dynamo.UI.Controls;
using Dynamo.Utilities;
using Dynamo.Wpf.UI.GuidedTour;
using Dynamo.Wpf.Utilities;
using DynamoUtilities;
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.Wpf;
Expand All @@ -25,9 +26,8 @@ namespace Dynamo.UI.Views
/// </summary>
public partial class HomePage : UserControl, IDisposable

Check failure on line 27 in src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs

View workflow job for this annotation

GitHub Actions / analyze

{
// These are hardcoded string and should only change when npm package structure changed or image path changed
private static readonly string htmlEmbeddedFile = "Dynamo.Wpf.Packages.HomePage.build.index.html";
private static readonly string jsEmbeddedFile = "Dynamo.Wpf.Packages.HomePage.build.bundle.js";
private static readonly string htmlEmbeddedFile = "Dynamo.Wpf.Packages.DynamoHome.build.index.html";
private static readonly string jsEmbeddedFile = "Dynamo.Wpf.Packages.DynamoHome.build.index.bundle.js";
private static readonly string fontStylePath = "Dynamo.Wpf.Views.GuidedTour.HtmlPages.Resources.ArtifaktElement-Regular.woff";
private static readonly string virtualFolderName = "embeddedFonts";
private static readonly string virtualFolderPath = Path.Combine(Path.GetTempPath(), virtualFolderName);
Expand All @@ -39,7 +39,7 @@ public partial class HomePage : UserControl, IDisposable
/// <summary>
/// The WebView2 Browser instance used to display splash screen
/// </summary>
internal WebView2 webView;
internal DynamoWebView2 dynWebView;

internal Action<string> RequestOpenFile;
internal Action<string> RequestShowGuidedTour;
Expand All @@ -63,12 +63,12 @@ public HomePage()
InitializeComponent();
InitializeGuideTourItems();

webView = new WebView2();
dynWebView = new DynamoWebView2();

webView.Margin = new System.Windows.Thickness(0); // Set margin to zero
webView.ZoomFactor = 1.0; // Set zoom factor (optional)
dynWebView.Margin = new System.Windows.Thickness(0); // Set margin to zero
dynWebView.ZoomFactor = 1.0; // Set zoom factor (optional)

HostGrid.Children.Add(webView);
HostGrid.Children.Add(dynWebView);

// Bind event handlers
RequestOpenFile = OpenFile;
Expand Down Expand Up @@ -111,9 +111,9 @@ private void OnDataContextChanged(object sender, DependencyPropertyChangedEventA

private void DynamoViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(webView?.CoreWebView2 != null && e.PropertyName.Equals(nameof(startPage.DynamoViewModel.ShowStartPage)))
if(dynWebView?.CoreWebView2 != null && e.PropertyName.Equals(nameof(startPage.DynamoViewModel.ShowStartPage)))
{
webView.CoreWebView2.ExecuteScriptAsync(@$"window.setShowStartPageChanged('{startPage.DynamoViewModel.ShowStartPage}')");
dynWebView.CoreWebView2.ExecuteScriptAsync(@$"window.setShowStartPageChanged('{startPage.DynamoViewModel.ShowStartPage}')");
}
}

Expand All @@ -140,18 +140,18 @@ private async void UserControl_Loaded(object sender, System.Windows.RoutedEventA
PathHelper.CreateFolderIfNotExist(userDataDir.ToString());
var webBrowserUserDataFolder = userDataDir.Exists ? userDataDir : null;

webView.CreationProperties = new CoreWebView2CreationProperties
dynWebView.CreationProperties = new CoreWebView2CreationProperties
{
UserDataFolder = webBrowserUserDataFolder.FullName
};

//ContentRendered ensures that the webview2 component is visible.
await webView.EnsureCoreWebView2Async();
await dynWebView.Initialize();
// Context menu disabled
this.webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
this.dynWebView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
// Zoom control disabled
this.webView.CoreWebView2.Settings.IsZoomControlEnabled = false;
this.webView.CoreWebView2.Settings.AreDevToolsEnabled = true;
this.dynWebView.CoreWebView2.Settings.IsZoomControlEnabled = false;
this.dynWebView.CoreWebView2.Settings.AreDevToolsEnabled = true;

var assembly = Assembly.GetExecutingAssembly();

Expand Down Expand Up @@ -186,21 +186,21 @@ private async void UserControl_Loaded(object sender, System.Windows.RoutedEventA
}

// Set up virtual host name to folder mapping
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(virtualFolderName, virtualFolderPath, CoreWebView2HostResourceAccessKind.DenyCors);
dynWebView.CoreWebView2.SetVirtualHostNameToFolderMapping(virtualFolderName, virtualFolderPath, CoreWebView2HostResourceAccessKind.DenyCors);

htmlString = htmlString.Replace("mainJs", jsonString);

try
{
webView.NavigateToString(htmlString);
dynWebView.NavigateToString(htmlString);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}

// Exposing commands to the React front-end
webView.CoreWebView2.AddHostObjectToScript("scriptObject",
dynWebView.CoreWebView2.AddHostObjectToScript("scriptObject",
new ScriptHomeObject(RequestOpenFile,
RequestNewWorkspace,
RequestOpenWorkspace,
Expand All @@ -227,9 +227,9 @@ internal async void LoadingDone()

var userLocale = "en";

if (webView?.CoreWebView2 != null)
if (dynWebView?.CoreWebView2 != null)
{
await webView.CoreWebView2.ExecuteScriptAsync(@$"window.setLocale('{userLocale}');");
await dynWebView.CoreWebView2.ExecuteScriptAsync(@$"window.setLocale('{userLocale}');");
}
}

Expand All @@ -242,9 +242,9 @@ private async void LoadGraphs(ObservableCollection<StartPageListItem> data)
{
string jsonData = JsonSerializer.Serialize(data);

if (webView?.CoreWebView2 != null)
if (dynWebView?.CoreWebView2 != null)
{
await webView.CoreWebView2.ExecuteScriptAsync(@$"window.receiveGraphDataFromDotNet({jsonData})");
await dynWebView.CoreWebView2.ExecuteScriptAsync(@$"window.receiveGraphDataFromDotNet({jsonData})");
}
}

Expand All @@ -257,9 +257,9 @@ private async void SendSamplesData()

string jsonData = JsonSerializer.Serialize(this.startPage.SampleFiles);

if (webView?.CoreWebView2 != null)
if (dynWebView?.CoreWebView2 != null)
{
await webView.CoreWebView2.ExecuteScriptAsync(@$"window.receiveSamplesDataFromDotNet({jsonData})");
await dynWebView.CoreWebView2.ExecuteScriptAsync(@$"window.receiveSamplesDataFromDotNet({jsonData})");
}
}

Expand All @@ -273,9 +273,9 @@ private async void SendGuidesData()

string jsonData = JsonSerializer.Serialize(this.GuidedTourItems);

if (webView?.CoreWebView2 != null)
if (dynWebView?.CoreWebView2 != null)
{
await webView.CoreWebView2.ExecuteScriptAsync(@$"window.receiveInteractiveGuidesDataFromDotNet({jsonData})");
await dynWebView.CoreWebView2.ExecuteScriptAsync(@$"window.receiveInteractiveGuidesDataFromDotNet({jsonData})");
}
}
#endregion
Expand Down
32 changes: 16 additions & 16 deletions test/DynamoCoreWpfTests/HomePageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public void CanClickRecentGraph()
startPage.RecentFiles.Add(new StartPageListItem(filePath) { ContextData = filePath });
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -184,7 +184,7 @@ public void CanClickSampleGraph()
startPage.SampleFiles.Add(rootEntity);
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -218,7 +218,7 @@ public void CanClickTourGuide()

var homePage = View.homePage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -249,7 +249,7 @@ public void ReceiveCorrectNumberOfRecentGrphs()
startPage.RecentFiles.Add(new StartPageListItem(filePath) { ContextData=filePath });
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForIntInteractionToComplete(homePage, script, -1);
Expand Down Expand Up @@ -285,7 +285,7 @@ public void ReceiveCorrectNumberOfSamples()
startPage.SampleFiles.Add(rootEntity);
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForIntInteractionToComplete(homePage, script, -1);
Expand All @@ -305,7 +305,7 @@ public void ReceiveCorrectNumberOfTourGuides()
var script = CONTAINER_SCRIPT("guidesContainer");
var homePage = View.homePage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForIntInteractionToComplete(homePage, script, -1);
Expand All @@ -325,7 +325,7 @@ public void ReceiveCorrectNumberOfCarouselVideos()
var script = CONTAINER_SCRIPT("videoCarousel");
var homePage = View.homePage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForIntInteractionToComplete(homePage, script, -1);
Expand Down Expand Up @@ -361,7 +361,7 @@ void Model_WorkspaceCleared(WorkspaceModel model)
var homePage = View.homePage;
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -393,7 +393,7 @@ public void CanRunNewCustomNodeCommandFromHomePage()
var homePage = View.homePage;
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -425,7 +425,7 @@ public void CanOpenWorkspaceCommandFromHomePage()
var homePage = View.homePage;
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -457,7 +457,7 @@ public void ShowTemplateCommandFromHomePage()
var homePage = View.homePage;
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -490,7 +490,7 @@ public void ShowBackupFolderCommandFromHomePage()
var homePage = View.homePage;
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -520,7 +520,7 @@ public void ShowSampleFilesFolderCommandFromHomePage()
var homePage = View.homePage;
homePage.DataContext = startPage;

InitializeWebView2(homePage.webView);
InitializeWebView2(homePage.dynWebView);

// Act
var interactCompleted = WaitForBoolInteractionToComplete(homePage, script, (bool?)null);
Expand Down Expand Up @@ -556,7 +556,7 @@ void WebView_NavigationCompleted(object sender, CoreWebView2NavigationCompletedE

web.NavigationCompleted += WebView_NavigationCompleted;

// Wait until we have initialized webView or until the timeout is reached
// Wait until we have initialized dynWebView or until the timeout is reached
while (!navigationCompletedEvent.WaitOne(100))
{
if (DateTime.Now - startTime > timeout)
Expand Down Expand Up @@ -601,7 +601,7 @@ void WindowClosed(object sender, EventArgs e)
var interactCompleted = initialValue;
homePage.Dispatcher.Invoke(async () =>
{
interactCompleted = await Interact<bool>(homePage.webView, script);
interactCompleted = await Interact<bool>(homePage.dynWebView, script);
});

// Wait for the interaction to complete
Expand All @@ -627,7 +627,7 @@ private static int WaitForIntInteractionToComplete(HomePage homePage, string scr
var interactCompleted = initialValue;
homePage.Dispatcher.Invoke(async () =>
{
interactCompleted = await Interact<int>(homePage.webView, script);
interactCompleted = await Interact<int>(homePage.dynWebView, script);
});

// Wait for the interaction to complete
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void PressNotificationButtonAndShowPopup()
.FirstOrDefault(p => p.IsOpen);

Assert.NotNull(notificationUI);
var webView = notificationUI.FindName("webView");
var webView = notificationUI.FindName("dynWebView");
Assert.NotNull(webView);
}

Expand Down

0 comments on commit 2927d6e

Please sign in to comment.