diff --git a/Magento_BundleConfig/Block/Html/Head/Config.php b/Magento_BundleConfig/Block/Html/Head/Config.php
deleted file mode 100644
index 3fa9236..0000000
--- a/Magento_BundleConfig/Block/Html/Head/Config.php
+++ /dev/null
@@ -1,111 +0,0 @@
-fileManager = $fileManager;
- $this->pageConfig = $pageConfig;
- $this->appState = $appState;
- $this->dir = $dir;
- $this->httpRequest = $httpRequest;
- }
-
- /**
- * Include specified AMD bundle as an asset on the page
- *
- * @return \Magento\Framework\View\Element\AbstractBlock
- */
- protected function _prepareLayout()
- {
- if ($this->appState->getMode() === AppState::MODE_DEVELOPER) {
- return parent::_prepareLayout();
- }
-
- $staticDir = $this->dir->getPath('static');
- $fullActionName = $this->httpRequest->getFullActionName();
-
- $assetCollection = $this->pageConfig->getAssetCollection();
-
- $shared = $this->fileManager->createSharedJsBundleAsset();
- $sharedBundleRelPath = $shared->getFilePath();
- $sharedBundleAbsPath = $staticDir . "/" . $sharedBundleRelPath;
-
- if (file_exists($sharedBundleAbsPath)) {
- $assetCollection->insert(
- $sharedBundleRelPath,
- $shared,
- RequireJsConfig::REQUIRE_JS_FILE_NAME
- );
- }
-
- $bundleConfig = $this->fileManager->createJsBundleAsset($fullActionName);
- $pageSpecificBundleRelPath = $bundleConfig->getFilePath();
- $pageSpecificBundleAbsPath = $staticDir . "/" . $pageSpecificBundleRelPath;
-
- if (file_exists($pageSpecificBundleAbsPath)) {
- $assetCollection->insert(
- $pageSpecificBundleRelPath,
- $bundleConfig,
- $sharedBundleRelPath
- );
- }
-
- return parent::_prepareLayout();
- }
-}
diff --git a/Magento_BundleConfig/ViewModel/PageSpecificBundle.php b/Magento_BundleConfig/ViewModel/PageSpecificBundle.php
new file mode 100644
index 0000000..6254ca3
--- /dev/null
+++ b/Magento_BundleConfig/ViewModel/PageSpecificBundle.php
@@ -0,0 +1,122 @@
+assetRepo = $assetRepo;
+ $this->httpRequest = $httpRequest;
+ $this->dir = $dir;
+ $this->appState = $appState;
+ }
+
+ /**
+ * Return page specific bundle asset url.
+ *
+ * @return string
+ * @throws LocalizedException
+ */
+ public function getPageSpecificBundleUrl()
+ {
+ $this->asset = $this->asset ?? $this->getAsset();
+
+ return $this->asset->getUrl();
+ }
+
+ /**
+ * Check if page specific bundle asset exists.
+ *
+ * @return bool
+ * @throws LocalizedException
+ * @throws \Magento\Framework\Exception\FileSystemException
+ */
+ public function fileExists()
+ {
+ $this->asset = $this->asset ?? $this->getAsset();
+
+ $staticDir = $this->dir->getPath('static');
+
+ $pageSpecificBundleRelPath = $this->asset->getPath();
+ $pageSpecificBundleAbsPath = $staticDir . "/" . $pageSpecificBundleRelPath;
+
+ return file_exists($pageSpecificBundleAbsPath);
+ }
+
+ /**
+ * Get page specific bundle asset.
+ *
+ * @return File
+ * @throws LocalizedException
+ */
+ private function getAsset()
+ {
+ $fullActionName = $this->httpRequest->getFullActionName();
+
+ $formattedActionName = str_replace("_", "-", $fullActionName);
+ $filePath = 'bundles/' . $formattedActionName . '.js';
+
+ return $this->assetRepo->createAsset($filePath);
+ }
+
+ /**
+ * Check if developer mode is enabled.
+ *
+ * @return bool
+ */
+ public function isDeveloperModeEnabled()
+ {
+ return $this->appState->getMode() === AppState::MODE_DEVELOPER;
+ }
+}
diff --git a/Magento_BundleConfig/ViewModel/SharedBundle.php b/Magento_BundleConfig/ViewModel/SharedBundle.php
new file mode 100644
index 0000000..18c6639
--- /dev/null
+++ b/Magento_BundleConfig/ViewModel/SharedBundle.php
@@ -0,0 +1,116 @@
+assetRepo = $assetRepo;
+ $this->dir = $dir;
+ $this->appState = $appState;
+ $this->filePath = $filePath;
+ }
+
+ /**
+ * Return shared bundle asset url.
+ *
+ * @return string
+ * @throws LocalizedException
+ */
+ public function getSharedBundleUrl()
+ {
+ $this->asset = $this->asset ?? $this->getAsset();
+
+ return $this->asset->getUrl();
+ }
+
+ /**
+ * Check if shared bundle asset exists.
+ *
+ * @return bool
+ * @throws LocalizedException
+ * @throws \Magento\Framework\Exception\FileSystemException
+ */
+ public function fileExists()
+ {
+ $this->asset = $this->asset ?? $this->getAsset();
+
+ $staticDir = $this->dir->getPath('static');
+
+ $sharedBundleRelPath = $this->asset->getPath();
+ $sharedBundleAbsPath = $staticDir . "/" . $sharedBundleRelPath;
+
+ return file_exists($sharedBundleAbsPath);
+ }
+
+ /**
+ * Get shared bundle asset.
+ *
+ * @return File
+ * @throws LocalizedException
+ */
+ private function getAsset()
+ {
+ return $this->assetRepo->createAsset($this->filePath);
+ }
+
+ /**
+ * Check if developer mode is enabled.
+ *
+ * @return bool
+ */
+ public function isDeveloperModeEnabled()
+ {
+ return $this->appState->getMode() === AppState::MODE_DEVELOPER;
+ }
+}
diff --git a/Magento_BundleConfig/etc/di.xml b/Magento_BundleConfig/etc/di.xml
index ba4092c..ba42146 100644
--- a/Magento_BundleConfig/etc/di.xml
+++ b/Magento_BundleConfig/etc/di.xml
@@ -9,4 +9,9 @@
+
+
+ bundles/shared.js
+
+
diff --git a/Magento_BundleConfig/view/frontend/layout/default.xml b/Magento_BundleConfig/view/frontend/layout/default.xml
index 8be69df..2eae4c9 100644
--- a/Magento_BundleConfig/view/frontend/layout/default.xml
+++ b/Magento_BundleConfig/view/frontend/layout/default.xml
@@ -6,10 +6,18 @@
*/
-->
-
-
-
-
+
+
+
+ Magento\BundleConfig\ViewModel\SharedBundle
+
+
+
+
+ Magento\BundleConfig\ViewModel\PageSpecificBundle
+
+
+
diff --git a/Magento_BundleConfig/view/frontend/templates/page_specific_bundle.phtml b/Magento_BundleConfig/view/frontend/templates/page_specific_bundle.phtml
new file mode 100644
index 0000000..49a3fb1
--- /dev/null
+++ b/Magento_BundleConfig/view/frontend/templates/page_specific_bundle.phtml
@@ -0,0 +1,13 @@
+getData('pageSpecificBundleViewModel');
+if (!$viewModel->isDeveloperModeEnabled() && $viewModel->fileExists()) {
+ ?>
+
+ getData('sharedBundleViewModel');
+if (!$viewModel->isDeveloperModeEnabled() && $viewModel->fileExists()) {
+ ?>
+
+