From 74e0371fa617d49da79a2fc3f12df2cfd890112d Mon Sep 17 00:00:00 2001
From: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
Date: Fri, 3 May 2024 13:57:39 +0100
Subject: [PATCH 01/20] Add options for cli common with disable preview of
 datasets

Signed-off-by: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
---
 package/kedro_viz/api/rest/requests.py        |  1 +
 package/kedro_viz/api/rest/responses.py       | 12 +++----
 package/kedro_viz/api/rest/router.py          |  2 +-
 .../integrations/deployment/aws_deployer.py   |  4 ++-
 .../integrations/deployment/azure_deployer.py |  4 ++-
 .../integrations/deployment/base_deployer.py  |  4 ++-
 .../deployment/deployer_factory.py            | 10 +++---
 .../integrations/deployment/gcp_deployer.py   |  4 ++-
 .../integrations/deployment/local_deployer.py |  4 ++-
 package/kedro_viz/launchers/cli.py            | 31 +++++++++++++++----
 package/kedro_viz/models/flowchart.py         | 19 ++++++++++++
 package/kedro_viz/server.py                   |  3 +-
 12 files changed, 74 insertions(+), 24 deletions(-)

diff --git a/package/kedro_viz/api/rest/requests.py b/package/kedro_viz/api/rest/requests.py
index 857ee12963..7a8c726e5e 100644
--- a/package/kedro_viz/api/rest/requests.py
+++ b/package/kedro_viz/api/rest/requests.py
@@ -7,5 +7,6 @@ class DeployerConfiguration(BaseModel):
     """Credentials for Deployers."""
 
     platform: str
+    preview: bool
     endpoint: str
     bucket_name: str
diff --git a/package/kedro_viz/api/rest/responses.py b/package/kedro_viz/api/rest/responses.py
index 13aaa05a6d..d06aeb2c0d 100644
--- a/package/kedro_viz/api/rest/responses.py
+++ b/package/kedro_viz/api/rest/responses.py
@@ -320,7 +320,7 @@ def get_default_response() -> GraphAPIResponse:
     )
 
 
-def get_node_metadata_response(node_id: str):
+def get_node_metadata_response(node_id: str, preview: bool = True):
     """API response for `/api/nodes/node_id`."""
     node = data_access_manager.nodes.get_node_by_id(node_id)
     if not node:
@@ -333,7 +333,7 @@ def get_node_metadata_response(node_id: str):
         return TaskNodeMetadata(task_node=node)
 
     if isinstance(node, DataNode):
-        return DataNodeMetadata(data_node=node)
+        return DataNodeMetadata(data_node=node, is_preview_enabled_for_all_nodes=preview)
 
     if isinstance(node, TranscodedDataNode):
         return TranscodedDataNodeMetadata(transcoded_data_node=node)
@@ -419,12 +419,12 @@ def save_api_main_response_to_fs(main_path: str, remote_fs: Any):
         raise exc
 
 
-def save_api_node_response_to_fs(nodes_path: str, remote_fs: Any):
+def save_api_node_response_to_fs(nodes_path: str, remote_fs: Any, preview: bool):
     """Saves API /nodes/{node} response to a directory."""
     for nodeId in data_access_manager.nodes.get_node_ids():
         try:
             write_api_response_to_fs(
-                f"{nodes_path}/{nodeId}", get_node_metadata_response(nodeId), remote_fs
+                f"{nodes_path}/{nodeId}", get_node_metadata_response(nodeId, preview), remote_fs
             )
         except Exception as exc:  # pragma: no cover
             logger.exception(
@@ -451,7 +451,7 @@ def save_api_pipeline_response_to_fs(pipelines_path: str, remote_fs: Any):
             raise exc
 
 
-def save_api_responses_to_fs(path: str, remote_fs: Any):
+def save_api_responses_to_fs(path: str, remote_fs: Any, preview: bool):
     """Saves all Kedro Viz API responses to a directory."""
     try:
         logger.debug(
@@ -469,7 +469,7 @@ def save_api_responses_to_fs(path: str, remote_fs: Any):
             remote_fs.makedirs(pipelines_path, exist_ok=True)
 
         save_api_main_response_to_fs(main_path, remote_fs)
-        save_api_node_response_to_fs(nodes_path, remote_fs)
+        save_api_node_response_to_fs(nodes_path, remote_fs, preview)
         save_api_pipeline_response_to_fs(pipelines_path, remote_fs)
 
     except Exception as exc:  # pragma: no cover
diff --git a/package/kedro_viz/api/rest/router.py b/package/kedro_viz/api/rest/router.py
index 51d445c1a2..1b85d0d425 100644
--- a/package/kedro_viz/api/rest/router.py
+++ b/package/kedro_viz/api/rest/router.py
@@ -61,7 +61,7 @@ async def get_single_pipeline_data(registered_pipeline_id: str):
 async def deploy_kedro_viz(input_values: DeployerConfiguration):
     try:
         deployer = DeployerFactory.create_deployer(
-            input_values.platform, input_values.endpoint, input_values.bucket_name
+            input_values.platform, input_values.preview, input_values.endpoint, input_values.bucket_name
         )
         deployer.deploy()
         response = {
diff --git a/package/kedro_viz/integrations/deployment/aws_deployer.py b/package/kedro_viz/integrations/deployment/aws_deployer.py
index 2a9f4636f4..4e1815283d 100644
--- a/package/kedro_viz/integrations/deployment/aws_deployer.py
+++ b/package/kedro_viz/integrations/deployment/aws_deployer.py
@@ -16,19 +16,21 @@
 class AWSDeployer(BaseDeployer):
     """A class to handle the deployment of Kedro-viz to AWS S3.
     Attributes:
+        _preview (bool): Flag to indicate if dataset preview is enabled.
         _endpoint (str): AWS endpoint of the hosted site.
         _bucket_name (str): Name of the S3 bucket.
         _path (str): S3 protocol with bucket name.
         _fs (fsspec.filesystem): Filesystem for S3 protocol.
     """
 
-    def __init__(self, endpoint, bucket_name):
+    def __init__(self, preview, endpoint, bucket_name):
         """Initialize S3Deployer with endpoint and bucket name.
         Args:
             endpoint (str): AWS endpoint of the hosted site.
             bucket_name (str): Name of the S3 bucket.
         """
         super().__init__()
+        self._preview = preview
         self._endpoint = endpoint
         self._bucket_name = bucket_name
         self._path = f"{_S3_PROTOCOL}://{bucket_name}"
diff --git a/package/kedro_viz/integrations/deployment/azure_deployer.py b/package/kedro_viz/integrations/deployment/azure_deployer.py
index a147902545..0b135069b2 100644
--- a/package/kedro_viz/integrations/deployment/azure_deployer.py
+++ b/package/kedro_viz/integrations/deployment/azure_deployer.py
@@ -24,13 +24,14 @@ class AzureDeployer(BaseDeployer):
     """A class to handle the deployment of Kedro-viz to AzureBlobStorage.
 
     Attributes:
+        _preview (bool): Flag to indicate if dataset preview is enabled.
         _endpoint (str): Azure endpoint of the hosted site.
         _bucket_name (str): Name of the AzureBlobStorage account.
         _path (str): Container path for the AzureBlobStorage account.
         _fs (fsspec.filesystem): Filesystem for Azure protocol.
     """
 
-    def __init__(self, endpoint, bucket_name):
+    def __init__(self, preview, endpoint, bucket_name):
         """Initialize AzureBlobStorage with endpoint and bucket name.
 
         Args:
@@ -38,6 +39,7 @@ def __init__(self, endpoint, bucket_name):
             bucket_name (str): Name of the AzureBlobStorage account.
         """
         super().__init__()
+        self._preview = preview
         self._endpoint = endpoint
         self._bucket_name = bucket_name
         self._path = f"{_AZ_PROTOCOL}://$web"
diff --git a/package/kedro_viz/integrations/deployment/base_deployer.py b/package/kedro_viz/integrations/deployment/base_deployer.py
index 22c4fcc819..4f9bf698a5 100644
--- a/package/kedro_viz/integrations/deployment/base_deployer.py
+++ b/package/kedro_viz/integrations/deployment/base_deployer.py
@@ -25,17 +25,19 @@ class BaseDeployer(abc.ABC):
     """A class to handle the creation of Kedro-viz build.
 
     Attributes:
+        _preview (bool): Flag to indicate if dataset preview is enabled.
         _path (str): build path name.
         _fs (fsspec.filesystem): Filesystem for local/remote protocol.
     """
 
     def __init__(self):
+        self._preview = False
         self._path = None
         self._fs = None
 
     def _upload_api_responses(self):
         """Write API responses to the build."""
-        save_api_responses_to_fs(self._path, self._fs)
+        save_api_responses_to_fs(self._path, self._fs, self._preview)
 
     def _ingest_heap_analytics(self):
         """Ingest heap analytics to index file in the build."""
diff --git a/package/kedro_viz/integrations/deployment/deployer_factory.py b/package/kedro_viz/integrations/deployment/deployer_factory.py
index 5215bf8c00..eb331105c3 100644
--- a/package/kedro_viz/integrations/deployment/deployer_factory.py
+++ b/package/kedro_viz/integrations/deployment/deployer_factory.py
@@ -12,17 +12,17 @@ class DeployerFactory:
     """A class to handle creation of deployer class instances."""
 
     @staticmethod
-    def create_deployer(platform, endpoint=None, bucket_name=None):
+    def create_deployer(platform, preview, endpoint=None, bucket_name=None):
         """Instantiate Kedro-viz deployer classes"""
         platform_name = platform.lower()
         if platform_name == "aws":
-            return AWSDeployer(endpoint, bucket_name)
+            return AWSDeployer(preview, endpoint, bucket_name)
         if platform_name == "azure":
-            return AzureDeployer(endpoint, bucket_name)
+            return AzureDeployer(preview, endpoint, bucket_name)
         if platform_name == "gcp":
-            return GCPDeployer(endpoint, bucket_name)
+            return GCPDeployer(preview, endpoint, bucket_name)
         if platform_name == "local":
-            return LocalDeployer()
+            return LocalDeployer(preview)
         raise ValueError(
             f"Invalid platform '{platform}' specified. \n"
             f"Kedro-Viz supports the following platforms - {*SHAREABLEVIZ_SUPPORTED_PLATFORMS,}"
diff --git a/package/kedro_viz/integrations/deployment/gcp_deployer.py b/package/kedro_viz/integrations/deployment/gcp_deployer.py
index c02010b24f..e9b9a3402e 100644
--- a/package/kedro_viz/integrations/deployment/gcp_deployer.py
+++ b/package/kedro_viz/integrations/deployment/gcp_deployer.py
@@ -18,13 +18,14 @@ class GCPDeployer(BaseDeployer):
     """A class to handle the deployment of Kedro-viz to Google Cloud Storage Bucket.
 
     Attributes:
+        _preview (bool): Flag to indicate if dataset preview is enabled.
         _endpoint (str): GCP endpoint of the hosted site.
         _bucket_name (str): Name of the GCP storage bucket.
         _path (str): GCP protocol with bucket name.
         _fs (fsspec.filesystem): Filesystem for GCP protocol.
     """
 
-    def __init__(self, endpoint, bucket_name):
+    def __init__(self, preview, endpoint, bucket_name):
         """Initialize GCPDeployer with endpoint and bucket name.
 
         Args:
@@ -32,6 +33,7 @@ def __init__(self, endpoint, bucket_name):
             bucket_name (str): Name of the GCP storage bucket.
         """
         super().__init__()
+        self._preview = preview
         self._endpoint = endpoint
         self._bucket_name = bucket_name
         self._path = f"{_GCP_PROTOCOL}://{bucket_name}"
diff --git a/package/kedro_viz/integrations/deployment/local_deployer.py b/package/kedro_viz/integrations/deployment/local_deployer.py
index e3e5778521..a3cee9e2e6 100644
--- a/package/kedro_viz/integrations/deployment/local_deployer.py
+++ b/package/kedro_viz/integrations/deployment/local_deployer.py
@@ -19,12 +19,14 @@ class LocalDeployer(BaseDeployer):
     """A class to handle the creation of Kedro-viz build folder.
 
     Attributes:
+        _preview (bool): Flag to indicate if dataset preview is enabled.
         _build_path (str): build path name.
         _local_fs (fsspec.filesystem): Filesystem for local file protocol.
     """
 
-    def __init__(self):
+    def __init__(self, preview):
         super().__init__()
+        self._preview = preview
         self._path = Path(_BUILD_PATH)
         self._path.mkdir(parents=True, exist_ok=True)
         self._fs = fsspec.filesystem(_FILE_PROTOCOL)
diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 5c2bcac75f..a9c6ef23b4 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -108,6 +108,11 @@ def viz(ctx):  # pylint: disable=unused-argument
     is_flag=True,
     help="A flag to include all registered hooks in your Kedro Project",
 )
+@click.option(
+    "--preview",
+    default=True,
+    help="A flag to preview your node dataset"
+)
 @click.option(
     "--params",
     type=click.UNPROCESSED,
@@ -127,6 +132,7 @@ def run(
     autoreload,
     include_hooks,
     params,
+    preview,
 ):
     """Launch local Kedro Viz instance"""
     from kedro_viz.server import run_server
@@ -170,6 +176,7 @@ def run(
             "include_hooks": include_hooks,
             "package_name": PACKAGE_NAME,
             "extra_params": params,
+            "preview": preview,
         }
         if autoreload:
             run_process_kwargs = {
@@ -234,7 +241,12 @@ def run(
     is_flag=True,
     help="A flag to include all registered hooks in your Kedro Project",
 )
-def deploy(platform, endpoint, bucket_name, include_hooks):
+@click.option(
+    "--preview",
+    default=False,
+    help="A flag to preview your node dataset",
+)
+def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     """Deploy and host Kedro Viz on provided platform"""
     if not platform or platform.lower() not in SHAREABLEVIZ_SUPPORTED_PLATFORMS:
         display_cli_message(
@@ -252,7 +264,7 @@ def deploy(platform, endpoint, bucket_name, include_hooks):
         )
         return
 
-    create_shareableviz_process(platform, endpoint, bucket_name, include_hooks)
+    create_shareableviz_process(platform, preview, endpoint, bucket_name, include_hooks)
 
 
 @viz.command(context_settings={"help_option_names": ["-h", "--help"]})
@@ -261,14 +273,19 @@ def deploy(platform, endpoint, bucket_name, include_hooks):
     is_flag=True,
     help="A flag to include all registered hooks in your Kedro Project",
 )
-def build(include_hooks):
+@click.option(
+    "--preview",
+    default=False,
+    help="A flag to preview your node dataset",
+)
+def build(include_hooks, preview):
     """Create build directory of local Kedro Viz instance with Kedro project data"""
 
-    create_shareableviz_process("local", include_hooks=include_hooks)
+    create_shareableviz_process("local", preview, include_hooks=include_hooks)
 
 
 def create_shareableviz_process(
-    platform, endpoint=None, bucket_name=None, include_hooks=False
+    platform, preview, endpoint=None, bucket_name=None, include_hooks=False
 ):
     """Creates platform specific deployer process"""
     try:
@@ -279,6 +296,7 @@ def create_shareableviz_process(
             target=load_and_deploy_viz,
             args=(
                 platform,
+                preview,
                 endpoint,
                 bucket_name,
                 include_hooks,
@@ -354,6 +372,7 @@ def create_shareableviz_process(
 
 def load_and_deploy_viz(
     platform,
+    preview,
     endpoint,
     bucket_name,
     include_hooks,
@@ -368,7 +387,7 @@ def load_and_deploy_viz(
         )
 
         # Start the deployment
-        deployer = DeployerFactory.create_deployer(platform, endpoint, bucket_name)
+        deployer = DeployerFactory.create_deployer(platform, preview, endpoint, bucket_name)
         deployer.deploy()
 
     except (
diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index e93418323c..308c836a5e 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -728,12 +728,14 @@ class DataNodeMetadata(GraphNodeMetadata):
 
     Args:
         data_node (DataNode): Data node to which this metadata belongs to.
+        is_preview_enabled_for_all_nodes (bool): Determines whether preview is enabled for all nodes
 
     Raises:
         AssertionError: If data_node is not supplied during instantiation
     """
 
     data_node: DataNode = Field(..., exclude=True)
+    is_preview_enabled_for_all_nodes: bool = Field(..., exclude=True)
 
     type: Optional[str] = Field(
         default=None, validate_default=True, description="The type of the data node"
@@ -769,6 +771,17 @@ class DataNodeMetadata(GraphNodeMetadata):
         description="The statistics for the data node.",
     )
 
+    @model_validator(mode="before")
+    @classmethod
+    def check_is_preview_enabled_for_all_nodes_exists(cls, values):
+        assert "is_preview_enabled_for_all_nodes" in values
+        cls.set_is_preview_enabled_for_all_nodes(values["is_preview_enabled_for_all_nodes"])
+        return values
+
+    @classmethod
+    def set_is_preview_enabled_for_all_nodes(cls, is_preview_enabled_for_all_nodes):
+        cls.is_preview_enabled_for_all_nodes = is_preview_enabled_for_all_nodes
+
     @model_validator(mode="before")
     @classmethod
     def check_data_node_exists(cls, values):
@@ -806,6 +819,9 @@ def set_run_command(cls, _):
     @field_validator("preview")
     @classmethod
     def set_preview(cls, _):
+        if not cls.is_preview_enabled_for_all_nodes:
+            return None
+        
         if cls.data_node.is_preview_disabled() or not hasattr(cls.dataset, "preview"):
             return None
 
@@ -829,6 +845,9 @@ def set_preview(cls, _):
     @field_validator("preview_type")
     @classmethod
     def set_preview_type(cls, _):
+        if not cls.is_preview_enabled_for_all_nodes:
+            return None
+
         if cls.data_node.is_preview_disabled() or not hasattr(cls.dataset, "preview"):
             return None
 
diff --git a/package/kedro_viz/server.py b/package/kedro_viz/server.py
index eb31f7a9c9..cb76ab781f 100644
--- a/package/kedro_viz/server.py
+++ b/package/kedro_viz/server.py
@@ -90,6 +90,7 @@ def run_server(
     include_hooks: bool = False,
     package_name: Optional[str] = None,
     extra_params: Optional[Dict[str, Any]] = None,
+    preview: bool = True,
 ):  # pylint: disable=redefined-outer-name
     """Run a uvicorn server with a FastAPI app that either launches API response data from a file
     or from reading data from a real Kedro project.
@@ -127,7 +128,7 @@ def run_server(
         )
 
         if save_file:
-            save_api_responses_to_fs(save_file, fsspec.filesystem("file"))
+            save_api_responses_to_fs(save_file, fsspec.filesystem("file"), preview)
 
         app = apps.create_api_app_from_project(path, autoreload)
     else:

From 5398a1131cb9cf107ff2f92d9f04b624342d08d8 Mon Sep 17 00:00:00 2001
From: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
Date: Tue, 7 May 2024 18:38:24 +0100
Subject: [PATCH 02/20] New approach for disable preview

Signed-off-by: <>
---
 package/kedro_viz/api/rest/responses.py       | 12 ++++----
 package/kedro_viz/api/rest/router.py          |  6 +++-
 package/kedro_viz/data_access/managers.py     | 10 +++++++
 .../integrations/deployment/aws_deployer.py   |  4 +--
 .../integrations/deployment/azure_deployer.py |  4 +--
 .../integrations/deployment/base_deployer.py  |  4 +--
 .../deployment/deployer_factory.py            | 10 +++----
 .../integrations/deployment/gcp_deployer.py   |  4 +--
 .../integrations/deployment/local_deployer.py |  4 +--
 package/kedro_viz/launchers/cli.py            |  2 +-
 package/kedro_viz/models/flowchart.py         | 29 ++++++-------------
 package/kedro_viz/server.py                   |  9 ++++--
 12 files changed, 47 insertions(+), 51 deletions(-)

diff --git a/package/kedro_viz/api/rest/responses.py b/package/kedro_viz/api/rest/responses.py
index d06aeb2c0d..13aaa05a6d 100644
--- a/package/kedro_viz/api/rest/responses.py
+++ b/package/kedro_viz/api/rest/responses.py
@@ -320,7 +320,7 @@ def get_default_response() -> GraphAPIResponse:
     )
 
 
-def get_node_metadata_response(node_id: str, preview: bool = True):
+def get_node_metadata_response(node_id: str):
     """API response for `/api/nodes/node_id`."""
     node = data_access_manager.nodes.get_node_by_id(node_id)
     if not node:
@@ -333,7 +333,7 @@ def get_node_metadata_response(node_id: str, preview: bool = True):
         return TaskNodeMetadata(task_node=node)
 
     if isinstance(node, DataNode):
-        return DataNodeMetadata(data_node=node, is_preview_enabled_for_all_nodes=preview)
+        return DataNodeMetadata(data_node=node)
 
     if isinstance(node, TranscodedDataNode):
         return TranscodedDataNodeMetadata(transcoded_data_node=node)
@@ -419,12 +419,12 @@ def save_api_main_response_to_fs(main_path: str, remote_fs: Any):
         raise exc
 
 
-def save_api_node_response_to_fs(nodes_path: str, remote_fs: Any, preview: bool):
+def save_api_node_response_to_fs(nodes_path: str, remote_fs: Any):
     """Saves API /nodes/{node} response to a directory."""
     for nodeId in data_access_manager.nodes.get_node_ids():
         try:
             write_api_response_to_fs(
-                f"{nodes_path}/{nodeId}", get_node_metadata_response(nodeId, preview), remote_fs
+                f"{nodes_path}/{nodeId}", get_node_metadata_response(nodeId), remote_fs
             )
         except Exception as exc:  # pragma: no cover
             logger.exception(
@@ -451,7 +451,7 @@ def save_api_pipeline_response_to_fs(pipelines_path: str, remote_fs: Any):
             raise exc
 
 
-def save_api_responses_to_fs(path: str, remote_fs: Any, preview: bool):
+def save_api_responses_to_fs(path: str, remote_fs: Any):
     """Saves all Kedro Viz API responses to a directory."""
     try:
         logger.debug(
@@ -469,7 +469,7 @@ def save_api_responses_to_fs(path: str, remote_fs: Any, preview: bool):
             remote_fs.makedirs(pipelines_path, exist_ok=True)
 
         save_api_main_response_to_fs(main_path, remote_fs)
-        save_api_node_response_to_fs(nodes_path, remote_fs, preview)
+        save_api_node_response_to_fs(nodes_path, remote_fs)
         save_api_pipeline_response_to_fs(pipelines_path, remote_fs)
 
     except Exception as exc:  # pragma: no cover
diff --git a/package/kedro_viz/api/rest/router.py b/package/kedro_viz/api/rest/router.py
index 1b85d0d425..82381f3e35 100644
--- a/package/kedro_viz/api/rest/router.py
+++ b/package/kedro_viz/api/rest/router.py
@@ -2,6 +2,7 @@
 
 # pylint: disable=missing-function-docstring, broad-exception-caught
 import logging
+from pathlib import Path
 from typing import List
 
 from fastapi import APIRouter
@@ -10,6 +11,7 @@
 from kedro_viz.api.rest.requests import DeployerConfiguration
 from kedro_viz.constants import PACKAGE_REQUIREMENTS
 from kedro_viz.integrations.deployment.deployer_factory import DeployerFactory
+from package.kedro_viz.server import load_and_populate_data
 
 from .responses import (
     APIErrorMessage,
@@ -60,8 +62,10 @@ async def get_single_pipeline_data(registered_pipeline_id: str):
 @router.post("/deploy")
 async def deploy_kedro_viz(input_values: DeployerConfiguration):
     try:
+        load_and_populate_data(Path.cwd(), input_values.preview)
+        
         deployer = DeployerFactory.create_deployer(
-            input_values.platform, input_values.preview, input_values.endpoint, input_values.bucket_name
+            input_values.platform, input_values.endpoint, input_values.bucket_name
         )
         deployer.deploy()
         response = {
diff --git a/package/kedro_viz/data_access/managers.py b/package/kedro_viz/data_access/managers.py
index 4e4e772e5a..4770db9108 100644
--- a/package/kedro_viz/data_access/managers.py
+++ b/package/kedro_viz/data_access/managers.py
@@ -64,6 +64,7 @@ def __init__(self):
         self.runs = RunsRepository()
         self.tracking_datasets = TrackingDatasetsRepository()
         self.dataset_stats = {}
+        self.is_preview_enabled_for_all_nodes = False
 
     def set_db_session(self, db_session_class: sessionmaker):
         """Set db session on repositories that need it."""
@@ -127,6 +128,14 @@ def add_dataset_stats(self, stats_dict: Dict):
 
         self.dataset_stats = stats_dict
 
+    def add_is_preview_enabled_for_all_nodes(self, is_preview_enabled_for_all_nodes: bool):
+        """Add the preview flag to the data access manager.
+        Args:
+            preview: A boolean flag to indicate whether the preview mode is enabled.
+        """
+
+        self.is_preview_enabled_for_all_nodes = is_preview_enabled_for_all_nodes
+
     def get_stats_for_data_node(self, data_node_name: str) -> Union[Dict, None]:
         """Returns the dataset statistics for the data node if found
 
@@ -304,6 +313,7 @@ def add_dataset(
                 dataset=obj,
                 stats=self.get_stats_for_data_node(_strip_transcoding(dataset_name)),
                 is_free_input=is_free_input,
+                is_preview_enabled_for_all_nodes=self.is_preview_enabled_for_all_nodes,
             )
         graph_node = self.nodes.add_node(graph_node)
         graph_node.add_pipeline(registered_pipeline_id)
diff --git a/package/kedro_viz/integrations/deployment/aws_deployer.py b/package/kedro_viz/integrations/deployment/aws_deployer.py
index 4e1815283d..2a9f4636f4 100644
--- a/package/kedro_viz/integrations/deployment/aws_deployer.py
+++ b/package/kedro_viz/integrations/deployment/aws_deployer.py
@@ -16,21 +16,19 @@
 class AWSDeployer(BaseDeployer):
     """A class to handle the deployment of Kedro-viz to AWS S3.
     Attributes:
-        _preview (bool): Flag to indicate if dataset preview is enabled.
         _endpoint (str): AWS endpoint of the hosted site.
         _bucket_name (str): Name of the S3 bucket.
         _path (str): S3 protocol with bucket name.
         _fs (fsspec.filesystem): Filesystem for S3 protocol.
     """
 
-    def __init__(self, preview, endpoint, bucket_name):
+    def __init__(self, endpoint, bucket_name):
         """Initialize S3Deployer with endpoint and bucket name.
         Args:
             endpoint (str): AWS endpoint of the hosted site.
             bucket_name (str): Name of the S3 bucket.
         """
         super().__init__()
-        self._preview = preview
         self._endpoint = endpoint
         self._bucket_name = bucket_name
         self._path = f"{_S3_PROTOCOL}://{bucket_name}"
diff --git a/package/kedro_viz/integrations/deployment/azure_deployer.py b/package/kedro_viz/integrations/deployment/azure_deployer.py
index 0b135069b2..a147902545 100644
--- a/package/kedro_viz/integrations/deployment/azure_deployer.py
+++ b/package/kedro_viz/integrations/deployment/azure_deployer.py
@@ -24,14 +24,13 @@ class AzureDeployer(BaseDeployer):
     """A class to handle the deployment of Kedro-viz to AzureBlobStorage.
 
     Attributes:
-        _preview (bool): Flag to indicate if dataset preview is enabled.
         _endpoint (str): Azure endpoint of the hosted site.
         _bucket_name (str): Name of the AzureBlobStorage account.
         _path (str): Container path for the AzureBlobStorage account.
         _fs (fsspec.filesystem): Filesystem for Azure protocol.
     """
 
-    def __init__(self, preview, endpoint, bucket_name):
+    def __init__(self, endpoint, bucket_name):
         """Initialize AzureBlobStorage with endpoint and bucket name.
 
         Args:
@@ -39,7 +38,6 @@ def __init__(self, preview, endpoint, bucket_name):
             bucket_name (str): Name of the AzureBlobStorage account.
         """
         super().__init__()
-        self._preview = preview
         self._endpoint = endpoint
         self._bucket_name = bucket_name
         self._path = f"{_AZ_PROTOCOL}://$web"
diff --git a/package/kedro_viz/integrations/deployment/base_deployer.py b/package/kedro_viz/integrations/deployment/base_deployer.py
index 4f9bf698a5..22c4fcc819 100644
--- a/package/kedro_viz/integrations/deployment/base_deployer.py
+++ b/package/kedro_viz/integrations/deployment/base_deployer.py
@@ -25,19 +25,17 @@ class BaseDeployer(abc.ABC):
     """A class to handle the creation of Kedro-viz build.
 
     Attributes:
-        _preview (bool): Flag to indicate if dataset preview is enabled.
         _path (str): build path name.
         _fs (fsspec.filesystem): Filesystem for local/remote protocol.
     """
 
     def __init__(self):
-        self._preview = False
         self._path = None
         self._fs = None
 
     def _upload_api_responses(self):
         """Write API responses to the build."""
-        save_api_responses_to_fs(self._path, self._fs, self._preview)
+        save_api_responses_to_fs(self._path, self._fs)
 
     def _ingest_heap_analytics(self):
         """Ingest heap analytics to index file in the build."""
diff --git a/package/kedro_viz/integrations/deployment/deployer_factory.py b/package/kedro_viz/integrations/deployment/deployer_factory.py
index eb331105c3..5215bf8c00 100644
--- a/package/kedro_viz/integrations/deployment/deployer_factory.py
+++ b/package/kedro_viz/integrations/deployment/deployer_factory.py
@@ -12,17 +12,17 @@ class DeployerFactory:
     """A class to handle creation of deployer class instances."""
 
     @staticmethod
-    def create_deployer(platform, preview, endpoint=None, bucket_name=None):
+    def create_deployer(platform, endpoint=None, bucket_name=None):
         """Instantiate Kedro-viz deployer classes"""
         platform_name = platform.lower()
         if platform_name == "aws":
-            return AWSDeployer(preview, endpoint, bucket_name)
+            return AWSDeployer(endpoint, bucket_name)
         if platform_name == "azure":
-            return AzureDeployer(preview, endpoint, bucket_name)
+            return AzureDeployer(endpoint, bucket_name)
         if platform_name == "gcp":
-            return GCPDeployer(preview, endpoint, bucket_name)
+            return GCPDeployer(endpoint, bucket_name)
         if platform_name == "local":
-            return LocalDeployer(preview)
+            return LocalDeployer()
         raise ValueError(
             f"Invalid platform '{platform}' specified. \n"
             f"Kedro-Viz supports the following platforms - {*SHAREABLEVIZ_SUPPORTED_PLATFORMS,}"
diff --git a/package/kedro_viz/integrations/deployment/gcp_deployer.py b/package/kedro_viz/integrations/deployment/gcp_deployer.py
index e9b9a3402e..c02010b24f 100644
--- a/package/kedro_viz/integrations/deployment/gcp_deployer.py
+++ b/package/kedro_viz/integrations/deployment/gcp_deployer.py
@@ -18,14 +18,13 @@ class GCPDeployer(BaseDeployer):
     """A class to handle the deployment of Kedro-viz to Google Cloud Storage Bucket.
 
     Attributes:
-        _preview (bool): Flag to indicate if dataset preview is enabled.
         _endpoint (str): GCP endpoint of the hosted site.
         _bucket_name (str): Name of the GCP storage bucket.
         _path (str): GCP protocol with bucket name.
         _fs (fsspec.filesystem): Filesystem for GCP protocol.
     """
 
-    def __init__(self, preview, endpoint, bucket_name):
+    def __init__(self, endpoint, bucket_name):
         """Initialize GCPDeployer with endpoint and bucket name.
 
         Args:
@@ -33,7 +32,6 @@ def __init__(self, preview, endpoint, bucket_name):
             bucket_name (str): Name of the GCP storage bucket.
         """
         super().__init__()
-        self._preview = preview
         self._endpoint = endpoint
         self._bucket_name = bucket_name
         self._path = f"{_GCP_PROTOCOL}://{bucket_name}"
diff --git a/package/kedro_viz/integrations/deployment/local_deployer.py b/package/kedro_viz/integrations/deployment/local_deployer.py
index a3cee9e2e6..e3e5778521 100644
--- a/package/kedro_viz/integrations/deployment/local_deployer.py
+++ b/package/kedro_viz/integrations/deployment/local_deployer.py
@@ -19,14 +19,12 @@ class LocalDeployer(BaseDeployer):
     """A class to handle the creation of Kedro-viz build folder.
 
     Attributes:
-        _preview (bool): Flag to indicate if dataset preview is enabled.
         _build_path (str): build path name.
         _local_fs (fsspec.filesystem): Filesystem for local file protocol.
     """
 
-    def __init__(self, preview):
+    def __init__(self):
         super().__init__()
-        self._preview = preview
         self._path = Path(_BUILD_PATH)
         self._path.mkdir(parents=True, exist_ok=True)
         self._fs = fsspec.filesystem(_FILE_PROTOCOL)
diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index a9c6ef23b4..8ad959d9d8 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -383,7 +383,7 @@ def load_and_deploy_viz(
     """Loads Kedro Project data, creates a deployer and deploys to a platform"""
     try:
         load_and_populate_data(
-            Path.cwd(), include_hooks=include_hooks, package_name=package_name
+            Path.cwd(), is_preview_enabled_for_all_nodes=preview, include_hooks=include_hooks, package_name=package_name
         )
 
         # Start the deployment
diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index 308c836a5e..8d2a9cbc6b 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -228,6 +228,7 @@ def create_data_node(
         dataset: AbstractDataset,
         stats: Optional[Dict],
         is_free_input: bool = False,
+        is_preview_enabled_for_all_nodes: bool = False,
     ) -> Union["DataNode", "TranscodedDataNode"]:
         """Create a graph node of type data for a given Kedro Dataset instance.
         Args:
@@ -263,6 +264,7 @@ def create_data_node(
             kedro_obj=dataset,
             is_free_input=is_free_input,
             stats=stats,
+            is_preview_enabled_for_all_nodes=is_preview_enabled_for_all_nodes,
         )
 
     @classmethod
@@ -576,6 +578,10 @@ class DataNode(GraphNode):
     )
     stats: Optional[Dict] = Field(None, description="The statistics for the data node.")
 
+    is_preview_enabled_for_all_nodes: bool = Field(
+        None, description="The preview flag for all nodes"
+    )
+
     dataset_type: Optional[str] = Field(
         default=None,
         validate_default=True,
@@ -648,7 +654,9 @@ def get_preview_args(self):
     def is_preview_disabled(self):
         """Checks if the dataset has a preview disabled"""
         return (
-            self.viz_metadata is not None and self.viz_metadata.get("preview") is False
+            self.is_preview_enabled_for_all_nodes
+            or self.viz_metadata is not None
+            and self.viz_metadata.get("preview") is False
         )
 
 
@@ -728,14 +736,12 @@ class DataNodeMetadata(GraphNodeMetadata):
 
     Args:
         data_node (DataNode): Data node to which this metadata belongs to.
-        is_preview_enabled_for_all_nodes (bool): Determines whether preview is enabled for all nodes
 
     Raises:
         AssertionError: If data_node is not supplied during instantiation
     """
 
     data_node: DataNode = Field(..., exclude=True)
-    is_preview_enabled_for_all_nodes: bool = Field(..., exclude=True)
 
     type: Optional[str] = Field(
         default=None, validate_default=True, description="The type of the data node"
@@ -771,17 +777,6 @@ class DataNodeMetadata(GraphNodeMetadata):
         description="The statistics for the data node.",
     )
 
-    @model_validator(mode="before")
-    @classmethod
-    def check_is_preview_enabled_for_all_nodes_exists(cls, values):
-        assert "is_preview_enabled_for_all_nodes" in values
-        cls.set_is_preview_enabled_for_all_nodes(values["is_preview_enabled_for_all_nodes"])
-        return values
-
-    @classmethod
-    def set_is_preview_enabled_for_all_nodes(cls, is_preview_enabled_for_all_nodes):
-        cls.is_preview_enabled_for_all_nodes = is_preview_enabled_for_all_nodes
-
     @model_validator(mode="before")
     @classmethod
     def check_data_node_exists(cls, values):
@@ -819,9 +814,6 @@ def set_run_command(cls, _):
     @field_validator("preview")
     @classmethod
     def set_preview(cls, _):
-        if not cls.is_preview_enabled_for_all_nodes:
-            return None
-        
         if cls.data_node.is_preview_disabled() or not hasattr(cls.dataset, "preview"):
             return None
 
@@ -845,9 +837,6 @@ def set_preview(cls, _):
     @field_validator("preview_type")
     @classmethod
     def set_preview_type(cls, _):
-        if not cls.is_preview_enabled_for_all_nodes:
-            return None
-
         if cls.data_node.is_preview_disabled() or not hasattr(cls.dataset, "preview"):
             return None
 
diff --git a/package/kedro_viz/server.py b/package/kedro_viz/server.py
index cb76ab781f..3130d0f56d 100644
--- a/package/kedro_viz/server.py
+++ b/package/kedro_viz/server.py
@@ -30,6 +30,7 @@ def populate_data(
     pipelines: Dict[str, Pipeline],
     session_store: BaseSessionStore,
     stats_dict: Dict,
+    is_preview_enabled_for_all_nodes: bool,
 ):  # pylint: disable=redefined-outer-name
     """Populate data repositories. Should be called once on application start
     if creating an api app from project.
@@ -48,9 +49,12 @@ def populate_data(
 
     data_access_manager.add_pipelines(pipelines)
 
+    data_access_manager.add_is_preview_enabled_for_all_nodes(is_preview_enabled_for_all_nodes)
+
 
 def load_and_populate_data(
     path: Path,
+    is_preview_enabled_for_all_nodes: bool,
     env: Optional[str] = None,
     include_hooks: bool = False,
     package_name: Optional[str] = None,
@@ -75,7 +79,7 @@ def load_and_populate_data(
     )
 
     # Creates data repositories which are used by Kedro Viz Backend APIs
-    populate_data(data_access_manager, catalog, pipelines, session_store, stats_dict)
+    populate_data(data_access_manager, catalog, pipelines, session_store, stats_dict, is_preview_enabled_for_all_nodes)
 
 
 def run_server(
@@ -90,7 +94,6 @@ def run_server(
     include_hooks: bool = False,
     package_name: Optional[str] = None,
     extra_params: Optional[Dict[str, Any]] = None,
-    preview: bool = True,
 ):  # pylint: disable=redefined-outer-name
     """Run a uvicorn server with a FastAPI app that either launches API response data from a file
     or from reading data from a real Kedro project.
@@ -128,7 +131,7 @@ def run_server(
         )
 
         if save_file:
-            save_api_responses_to_fs(save_file, fsspec.filesystem("file"), preview)
+            save_api_responses_to_fs(save_file, fsspec.filesystem("file"))
 
         app = apps.create_api_app_from_project(path, autoreload)
     else:

From 4da365f4f596aed92d4112dd8c625df326a1e901 Mon Sep 17 00:00:00 2001
From: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
Date: Tue, 7 May 2024 20:19:05 +0100
Subject: [PATCH 03/20] Disable preview for cli and lint fix

Signed-off-by: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
---
 package/kedro_viz/api/rest/router.py      |  7 ++++---
 package/kedro_viz/data_access/managers.py |  4 +++-
 package/kedro_viz/launchers/cli.py        | 13 ++++++-------
 package/kedro_viz/models/flowchart.py     |  2 +-
 package/kedro_viz/server.py               | 17 ++++++++++++++---
 5 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/package/kedro_viz/api/rest/router.py b/package/kedro_viz/api/rest/router.py
index 82381f3e35..15dad02039 100644
--- a/package/kedro_viz/api/rest/router.py
+++ b/package/kedro_viz/api/rest/router.py
@@ -11,7 +11,8 @@
 from kedro_viz.api.rest.requests import DeployerConfiguration
 from kedro_viz.constants import PACKAGE_REQUIREMENTS
 from kedro_viz.integrations.deployment.deployer_factory import DeployerFactory
-from package.kedro_viz.server import load_and_populate_data
+
+# from kedro_viz.server import load_and_populate_data
 
 from .responses import (
     APIErrorMessage,
@@ -62,8 +63,8 @@ async def get_single_pipeline_data(registered_pipeline_id: str):
 @router.post("/deploy")
 async def deploy_kedro_viz(input_values: DeployerConfiguration):
     try:
-        load_and_populate_data(Path.cwd(), input_values.preview)
-        
+        # load_and_populate_data(Path.cwd(), input_values.preview)
+
         deployer = DeployerFactory.create_deployer(
             input_values.platform, input_values.endpoint, input_values.bucket_name
         )
diff --git a/package/kedro_viz/data_access/managers.py b/package/kedro_viz/data_access/managers.py
index 4770db9108..74cdce5fb0 100644
--- a/package/kedro_viz/data_access/managers.py
+++ b/package/kedro_viz/data_access/managers.py
@@ -128,7 +128,9 @@ def add_dataset_stats(self, stats_dict: Dict):
 
         self.dataset_stats = stats_dict
 
-    def add_is_preview_enabled_for_all_nodes(self, is_preview_enabled_for_all_nodes: bool):
+    def add_is_preview_enabled_for_all_nodes(
+        self, is_preview_enabled_for_all_nodes: bool
+    ):
         """Add the preview flag to the data access manager.
         Args:
             preview: A boolean flag to indicate whether the preview mode is enabled.
diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 8ad959d9d8..d07add41c0 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -108,11 +108,6 @@ def viz(ctx):  # pylint: disable=unused-argument
     is_flag=True,
     help="A flag to include all registered hooks in your Kedro Project",
 )
-@click.option(
-    "--preview",
-    default=True,
-    help="A flag to preview your node dataset"
-)
 @click.option(
     "--params",
     type=click.UNPROCESSED,
@@ -120,6 +115,7 @@ def viz(ctx):  # pylint: disable=unused-argument
     help=PARAMS_ARG_HELP,
     callback=_split_params,
 )
+@click.option("--preview", default=True, help="A flag to preview your node dataset")
 # pylint: disable=import-outside-toplevel, too-many-locals
 def run(
     host,
@@ -383,11 +379,14 @@ def load_and_deploy_viz(
     """Loads Kedro Project data, creates a deployer and deploys to a platform"""
     try:
         load_and_populate_data(
-            Path.cwd(), is_preview_enabled_for_all_nodes=preview, include_hooks=include_hooks, package_name=package_name
+            Path.cwd(),
+            is_preview_enabled_for_all_nodes=preview,
+            include_hooks=include_hooks,
+            package_name=package_name,
         )
 
         # Start the deployment
-        deployer = DeployerFactory.create_deployer(platform, preview, endpoint, bucket_name)
+        deployer = DeployerFactory.create_deployer(platform, endpoint, bucket_name)
         deployer.deploy()
 
     except (
diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index 8d2a9cbc6b..f49a7fd378 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -654,7 +654,7 @@ def get_preview_args(self):
     def is_preview_disabled(self):
         """Checks if the dataset has a preview disabled"""
         return (
-            self.is_preview_enabled_for_all_nodes
+            self.is_preview_enabled_for_all_nodes is False
             or self.viz_metadata is not None
             and self.viz_metadata.get("preview") is False
         )
diff --git a/package/kedro_viz/server.py b/package/kedro_viz/server.py
index 3130d0f56d..f3168e6c8e 100644
--- a/package/kedro_viz/server.py
+++ b/package/kedro_viz/server.py
@@ -41,6 +41,10 @@ def populate_data(
         session_class = make_db_session_factory(session_store.location)
         data_access_manager.set_db_session(session_class)
 
+    data_access_manager.add_is_preview_enabled_for_all_nodes(
+        is_preview_enabled_for_all_nodes
+    )
+
     data_access_manager.add_catalog(catalog, pipelines)
 
     # add dataset stats before adding pipelines as the data nodes
@@ -49,8 +53,6 @@ def populate_data(
 
     data_access_manager.add_pipelines(pipelines)
 
-    data_access_manager.add_is_preview_enabled_for_all_nodes(is_preview_enabled_for_all_nodes)
-
 
 def load_and_populate_data(
     path: Path,
@@ -79,12 +81,20 @@ def load_and_populate_data(
     )
 
     # Creates data repositories which are used by Kedro Viz Backend APIs
-    populate_data(data_access_manager, catalog, pipelines, session_store, stats_dict, is_preview_enabled_for_all_nodes)
+    populate_data(
+        data_access_manager,
+        catalog,
+        pipelines,
+        session_store,
+        stats_dict,
+        is_preview_enabled_for_all_nodes,
+    )
 
 
 def run_server(
     host: str = DEFAULT_HOST,
     port: int = DEFAULT_PORT,
+    preview: bool = True,
     load_file: Optional[str] = None,
     save_file: Optional[str] = None,
     pipeline_name: Optional[str] = None,
@@ -123,6 +133,7 @@ def run_server(
     if load_file is None:
         load_and_populate_data(
             path,
+            preview,
             env,
             include_hooks,
             package_name,

From 9f2afa257b5078629029359d25864900af6306cb Mon Sep 17 00:00:00 2001
From: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
Date: Wed, 8 May 2024 11:34:59 +0100
Subject: [PATCH 04/20] deploy api with preview

Signed-off-by: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
---
 package/kedro_viz/api/rest/router.py                      | 5 ++++-
 src/components/shareable-url-modal/shareable-url-modal.js | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/package/kedro_viz/api/rest/router.py b/package/kedro_viz/api/rest/router.py
index 15dad02039..c320ff374b 100644
--- a/package/kedro_viz/api/rest/router.py
+++ b/package/kedro_viz/api/rest/router.py
@@ -62,8 +62,11 @@ async def get_single_pipeline_data(registered_pipeline_id: str):
 
 @router.post("/deploy")
 async def deploy_kedro_viz(input_values: DeployerConfiguration):
+    # Importing here to avoid circular imports
+    from kedro_viz.server import load_and_populate_data # pylint: disable=import-outside-toplevel
+
     try:
-        # load_and_populate_data(Path.cwd(), input_values.preview)
+        load_and_populate_data(Path.cwd(), input_values.preview)
 
         deployer = DeployerFactory.create_deployer(
             input_values.platform, input_values.endpoint, input_values.bucket_name
diff --git a/src/components/shareable-url-modal/shareable-url-modal.js b/src/components/shareable-url-modal/shareable-url-modal.js
index 9d58bee238..58c582d4e9 100644
--- a/src/components/shareable-url-modal/shareable-url-modal.js
+++ b/src/components/shareable-url-modal/shareable-url-modal.js
@@ -104,7 +104,7 @@ const ShareableUrlModal = ({ onToggleModal, visible }) => {
           'Content-Type': 'application/json',
         },
         method: 'POST',
-        body: JSON.stringify(inputValues),
+        body: JSON.stringify({ ...inputValues, preview: false }), // preview appended to the body to disable the preview data
       });
       const response = await request.json();
 

From 35f14367a4c1e2c232172541550fe42762671a9c Mon Sep 17 00:00:00 2001
From: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
Date: Wed, 8 May 2024 14:45:10 +0100
Subject: [PATCH 05/20] Removing UI changes

Signed-off-by: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
---
 package/kedro_viz/api/rest/router.py                   |  8 --------
 package/kedro_viz/data_access/managers.py              |  2 +-
 package/kedro_viz/launchers/cli.py                     | 10 +++++++---
 package/kedro_viz/models/flowchart.py                  |  6 ++++--
 .../shareable-url-modal/shareable-url-modal.js         |  2 +-
 5 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/package/kedro_viz/api/rest/router.py b/package/kedro_viz/api/rest/router.py
index c320ff374b..51d445c1a2 100644
--- a/package/kedro_viz/api/rest/router.py
+++ b/package/kedro_viz/api/rest/router.py
@@ -2,7 +2,6 @@
 
 # pylint: disable=missing-function-docstring, broad-exception-caught
 import logging
-from pathlib import Path
 from typing import List
 
 from fastapi import APIRouter
@@ -12,8 +11,6 @@
 from kedro_viz.constants import PACKAGE_REQUIREMENTS
 from kedro_viz.integrations.deployment.deployer_factory import DeployerFactory
 
-# from kedro_viz.server import load_and_populate_data
-
 from .responses import (
     APIErrorMessage,
     GraphAPIResponse,
@@ -62,12 +59,7 @@ async def get_single_pipeline_data(registered_pipeline_id: str):
 
 @router.post("/deploy")
 async def deploy_kedro_viz(input_values: DeployerConfiguration):
-    # Importing here to avoid circular imports
-    from kedro_viz.server import load_and_populate_data # pylint: disable=import-outside-toplevel
-
     try:
-        load_and_populate_data(Path.cwd(), input_values.preview)
-
         deployer = DeployerFactory.create_deployer(
             input_values.platform, input_values.endpoint, input_values.bucket_name
         )
diff --git a/package/kedro_viz/data_access/managers.py b/package/kedro_viz/data_access/managers.py
index 74cdce5fb0..5ec03035cf 100644
--- a/package/kedro_viz/data_access/managers.py
+++ b/package/kedro_viz/data_access/managers.py
@@ -133,7 +133,7 @@ def add_is_preview_enabled_for_all_nodes(
     ):
         """Add the preview flag to the data access manager.
         Args:
-            preview: A boolean flag to indicate whether the preview mode is enabled.
+            is_preview_enabled_for_all_nodes: A boolean flag to indicate whether the preview is enabled for all the nodes.
         """
 
         self.is_preview_enabled_for_all_nodes = is_preview_enabled_for_all_nodes
diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index d07add41c0..47b64ab586 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -115,7 +115,11 @@ def viz(ctx):  # pylint: disable=unused-argument
     help=PARAMS_ARG_HELP,
     callback=_split_params,
 )
-@click.option("--preview", default=True, help="A flag to preview your node dataset")
+@click.option(
+    "--preview",
+    default=True,
+    help="A flag to enable/disable a quick preview of node datasets.",
+)
 # pylint: disable=import-outside-toplevel, too-many-locals
 def run(
     host,
@@ -240,7 +244,7 @@ def run(
 @click.option(
     "--preview",
     default=False,
-    help="A flag to preview your node dataset",
+    help="A flag to enable/disable a quick preview of node datasets.",
 )
 def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     """Deploy and host Kedro Viz on provided platform"""
@@ -272,7 +276,7 @@ def deploy(platform, endpoint, bucket_name, include_hooks, preview):
 @click.option(
     "--preview",
     default=False,
-    help="A flag to preview your node dataset",
+    help="A flag to enable/disable a quick preview of node datasets.",
 )
 def build(include_hooks, preview):
     """Create build directory of local Kedro Viz instance with Kedro project data"""
diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index f49a7fd378..8b228e4f72 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -227,8 +227,8 @@ def create_data_node(
         tags: Set[str],
         dataset: AbstractDataset,
         stats: Optional[Dict],
+        is_preview_enabled_for_all_nodes: bool,
         is_free_input: bool = False,
-        is_preview_enabled_for_all_nodes: bool = False,
     ) -> Union["DataNode", "TranscodedDataNode"]:
         """Create a graph node of type data for a given Kedro Dataset instance.
         Args:
@@ -240,6 +240,7 @@ def create_data_node(
             dataset: A dataset in a Kedro pipeline.
             stats: The dictionary of dataset statistics, e.g.
                 {"rows":2, "columns":3, "file_size":100}
+            is_preview_enabled_for_all_nodes: A flag to enable/disable a quick preview of node datasets.
             is_free_input: Whether the dataset is a free input in the pipeline
         Returns:
             An instance of DataNode.
@@ -565,6 +566,7 @@ class DataNode(GraphNode):
         layer (Optional[str]): The layer that this data node belongs to. Defaults to `None`.
         is_free_input (bool): Determines whether the data node is a free input. Defaults to `False`.
         stats (Optional[Dict]): Statistics for the data node. Defaults to `None`.
+        is_preview_enabled_for_all_nodes (bool): A flag to enable/disable a quick preview of node datasets. Defaults to `False`.
 
     Raises:
         AssertionError: If kedro_obj, name are not supplied during instantiation
@@ -579,7 +581,7 @@ class DataNode(GraphNode):
     stats: Optional[Dict] = Field(None, description="The statistics for the data node.")
 
     is_preview_enabled_for_all_nodes: bool = Field(
-        None, description="The preview flag for all nodes"
+        False, description="A flag to enable/disable a quick preview of node datasets."
     )
 
     dataset_type: Optional[str] = Field(
diff --git a/src/components/shareable-url-modal/shareable-url-modal.js b/src/components/shareable-url-modal/shareable-url-modal.js
index 58c582d4e9..9d58bee238 100644
--- a/src/components/shareable-url-modal/shareable-url-modal.js
+++ b/src/components/shareable-url-modal/shareable-url-modal.js
@@ -104,7 +104,7 @@ const ShareableUrlModal = ({ onToggleModal, visible }) => {
           'Content-Type': 'application/json',
         },
         method: 'POST',
-        body: JSON.stringify({ ...inputValues, preview: false }), // preview appended to the body to disable the preview data
+        body: JSON.stringify(inputValues),
       });
       const response = await request.json();
 

From 85e1a2da211ffdd20ee6c2d0c488b5ee45c3a9f9 Mon Sep 17 00:00:00 2001
From: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
Date: Wed, 8 May 2024 14:47:14 +0100
Subject: [PATCH 06/20] Removing UI changes

Signed-off-by: Jitendra Gundaniya <jitendra_gundaniya@mckinsey.com>
---
 package/kedro_viz/api/rest/requests.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/package/kedro_viz/api/rest/requests.py b/package/kedro_viz/api/rest/requests.py
index 7a8c726e5e..857ee12963 100644
--- a/package/kedro_viz/api/rest/requests.py
+++ b/package/kedro_viz/api/rest/requests.py
@@ -7,6 +7,5 @@ class DeployerConfiguration(BaseModel):
     """Credentials for Deployers."""
 
     platform: str
-    preview: bool
     endpoint: str
     bucket_name: str

From cb100c7e5000a7d16e0e06e0c8ac5749abeba74d Mon Sep 17 00:00:00 2001
From: Huong Nguyen <32060364+Huongg@users.noreply.github.com>
Date: Fri, 10 May 2024 11:55:15 +0100
Subject: [PATCH 07/20] Docs/use kedro sphinx theme (#1898)

* remove layout.html

Signed-off-by: huongg <huongg1409@gmail.com>

* refers to kedro-sphinx-theme in setup

Signed-off-by: huongg <huongg1409@gmail.com>

* refers to kedro-sphinx-theme in confy.py

Signed-off-by: huongg <huongg1409@gmail.com>

* update release note

Signed-off-by: huongg <huongg1409@gmail.com>

* update conf.py in doc/source

Signed-off-by: huongg <huongg1409@gmail.com>

* update setup.py in demo project

Signed-off-by: huongg <huongg1409@gmail.com>

* revert changes for demo-project/docs/source

Signed-off-by: huongg <huongg1409@gmail.com>

---------

Signed-off-by: huongg <huongg1409@gmail.com>
---
 RELEASE.md                         |  1 +
 docs/source/_templates/layout.html | 76 ------------------------------
 docs/source/conf.py                |  2 +-
 package/setup.py                   |  6 +--
 4 files changed, 3 insertions(+), 82 deletions(-)
 delete mode 100644 docs/source/_templates/layout.html

diff --git a/RELEASE.md b/RELEASE.md
index 1fa28a68d5..3d2420e1bb 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -15,6 +15,7 @@ Please follow the established format:
 - Refactor backend integration with Kedro by replacing bootstrap_project with configure_project. (#1796)
 - Enhance kedro-viz doc integration. (#1874)
 - Fix Kedro-Viz waiting for valid Kedro project. (#1871)
+- Enhance Kedro-Viz documentation by using Kedro-sphinx-theme. (#1898)
 
 # Release 9.0.0
 
diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html
deleted file mode 100644
index 5e2cd48b45..0000000000
--- a/docs/source/_templates/layout.html
+++ /dev/null
@@ -1,76 +0,0 @@
-{% extends "!layout.html" %} {%- block extrabody %}
-
-<div class="wy-grid-header">
-  <div class="wy-header-logo">
-    {%- set _logo_url = logo_url|default(pathto('_static/' + (logo or ""), 1))
-    %} {%- set _root_doc = root_doc|default(master_doc) %}
-    <a href="{{ pathto(_root_doc) }}">
-      <img src="https://raw.githubusercontent.com/kedro-org/kedro-brand-identity/main/horizontal/color/kedro-horizontal-color-on-light.svg" class="logo" alt="{{ _('Logo') }}" />
-    </a>
-  </div>
-
-  <div class="wy-main-nav">
-    <a href="https://docs.kedro.org">Kedro</a>
-    <a href="/" class="active">Kedro-Viz</a>
-    <a href="https://docs.kedro.org/projects/kedro-datasets">Kedro-Datasets</a>
-  </div>
-
-  {%- include "searchbox.html" %}
-</div>
-
-{% endblock %} {%- block extrahead %}
-<script type="text/javascript">
-    window.heap=window.heap||[],heap.load=function(e,t){window.heap.appid=e,window.heap.config=t=t||{};var r=document.createElement("script");r.type="text/javascript",r.async=!0,r.src="https://cdn.heapanalytics.com/js/heap-"+e+".js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(r,a);for(var n=function(e){return function(){heap.push([e].concat(Array.prototype.slice.call(arguments,0)))}},p=["addEventProperties","addUserProperties","clearEventProperties","identify","resetIdentity","removeEventProperty","setEventProperties","track","unsetEventProperty"],o=0;o<p.length;o++)heap[p[o]]=n(p[o])};
-
-    heap.load({{ "522942930" }});
-
-    //inline styling for read-the-docs flyout
-    document.documentElement.style.setProperty('--readthedocs-flyout-font-size', '0.9em');
-
-    // Wait for DOM to load and clone main nav into the sidebar
-    document.addEventListener("DOMContentLoaded", function() {
-
-      function showReadTheDocsSearch() {
-        const searchEvent = new CustomEvent("readthedocs-search-show");
-        document.dispatchEvent(searchEvent);
-      }
-
-      // Activate read-the-docs search when user focuses on search
-      document.querySelector('div[role="search"] form input').addEventListener("focus", showReadTheDocsSearch);
-
-      // Add keyboard event listener for Cmd+K (Mac) or Ctrl+K (Windows)
-      document.addEventListener("keydown", function(e) {
-        if ((e.key === 'k' || e.key === 'K') && (e.metaKey || e.ctrlKey)) {
-          e.preventDefault(); 
-          showReadTheDocsSearch();
-        }
-      });
-
-      // Clone main nav into the sidebar
-      var sidebarSearch = document.querySelector('.wy-side-nav-search div[role="search"]');
-      sidebarSearch.parentNode.insertBefore(document.querySelector('.wy-main-nav').cloneNode(true), sidebarSearch);
-
-      // Prepend close button to mobile header
-      var closeBtn = document.createElement("span");
-      closeBtn.dataset.toggle = 'wy-nav-top';
-      closeBtn.classList.add('wy-nav-top-close');
-      document.querySelector('.wy-nav-top').prepend(closeBtn);
-
-      // Prepend open button to mobile header
-      var openBtn = document.createElement("span");
-      openBtn.dataset.toggle = 'wy-nav-top';
-      openBtn.classList.add('wy-nav-top-open');
-      document.querySelector('.wy-nav-top').prepend(openBtn);
-  });
-</script>
-<link
-  rel="stylesheet"
-  href="https://kedro-shared-files.s3.eu-west-2.amazonaws.com/qb1-sphinx-rtd.css"
-  type="text/css"
-/>
-<link
-  rel="stylesheet"
-  href="https://kedro-shared-files.s3.eu-west-2.amazonaws.com/theme-overrides.css"
-  type="text/css"
-/>
-{% endblock %}
diff --git a/docs/source/conf.py b/docs/source/conf.py
index be246d7c16..1d3edbd09d 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -62,7 +62,7 @@
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
 #
-html_theme = "sphinx_rtd_theme"
+html_theme = "kedro-sphinx-theme"
 
 # Theme options are theme-specific and customise the look and feel of a theme
 # further.  For a list of options available for each theme, see the
diff --git a/package/setup.py b/package/setup.py
index d2257d6f6d..e04cda700f 100644
--- a/package/setup.py
+++ b/package/setup.py
@@ -52,11 +52,7 @@
     },
     extras_require={
         "docs": [
-            "sphinx>=5.3,<7.3",
-            "sphinx_copybutton==0.5.2",
-            "sphinx-notfound-page",
-            "sphinx_rtd_theme==1.3.0",
-            "myst-parser>=1.0,<2.1",
+            "kedro-sphinx-theme==2024.4.0",
         ],
         "aws": ["s3fs>=2021.4"],
         "azure": ["adlfs>=2021.4"],

From aabb3a2063b416d35d1906e0b9ff2f0307dd1ce0 Mon Sep 17 00:00:00 2001
From: Ravi Kumar Pilla <ravi_kumar_pilla@mckinsey.com>
Date: Wed, 15 May 2024 09:39:30 -0500
Subject: [PATCH 08/20] Fix for schema change in strawberry-graphql JSON scalar
 (#1903)

* merge main from remote

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* hot fix for strawberry graphql schema change

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* update release note and file permissions

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

---------

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 RELEASE.md                | 1 +
 src/apollo/schema.graphql | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/RELEASE.md b/RELEASE.md
index 3d2420e1bb..3ab55e08b4 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -16,6 +16,7 @@ Please follow the established format:
 - Enhance kedro-viz doc integration. (#1874)
 - Fix Kedro-Viz waiting for valid Kedro project. (#1871)
 - Enhance Kedro-Viz documentation by using Kedro-sphinx-theme. (#1898)
+- Fix for schema change in strawberry-graphql JSON scalar. (#1903)
 
 # Release 9.0.0
 
diff --git a/src/apollo/schema.graphql b/src/apollo/schema.graphql
index e48274ebb0..2fd62c4204 100644
--- a/src/apollo/schema.graphql
+++ b/src/apollo/schema.graphql
@@ -1,7 +1,7 @@
 """
-The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
+The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf).
 """
-scalar JSON @specifiedBy(url: "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf")
+scalar JSON @specifiedBy(url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf")
 
 """Metric data"""
 type MetricPlotDataset {

From a8f57adb304bc8abda5922ce6d121cad1de80067 Mon Sep 17 00:00:00 2001
From: Ravi Kumar Pilla <ravi_kumar_pilla@mckinsey.com>
Date: Wed, 15 May 2024 13:59:51 -0500
Subject: [PATCH 09/20] Fix messaging level when package compatibility is not
 satisfied (#1904)

* merge main from remote

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* initial draft

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* revert permissions

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* update release note

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

---------

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 RELEASE.md                                    |  1 +
 package/kedro_viz/api/rest/responses.py       |  9 +--
 package/kedro_viz/constants.py                | 12 +++-
 .../test_api/test_rest/test_responses.py      | 61 ++++++++++++++-----
 4 files changed, 63 insertions(+), 20 deletions(-)

diff --git a/RELEASE.md b/RELEASE.md
index 3ab55e08b4..c3cd6e3edf 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -17,6 +17,7 @@ Please follow the established format:
 - Fix Kedro-Viz waiting for valid Kedro project. (#1871)
 - Enhance Kedro-Viz documentation by using Kedro-sphinx-theme. (#1898)
 - Fix for schema change in strawberry-graphql JSON scalar. (#1903)
+- Fix messaging level when package compatibility is not satisfied. (#1904)
 
 # Release 9.0.0
 
diff --git a/package/kedro_viz/api/rest/responses.py b/package/kedro_viz/api/rest/responses.py
index 13aaa05a6d..7850d091ad 100644
--- a/package/kedro_viz/api/rest/responses.py
+++ b/package/kedro_viz/api/rest/responses.py
@@ -372,16 +372,17 @@ def get_selected_pipeline_response(registered_pipeline_id: str):
 
 
 def get_package_compatibilities_response(
-    package_requirements: Dict[str, str],
+    package_requirements: Dict[str, Dict[str, str]],
 ) -> List[PackageCompatibilityAPIResponse]:
     """API response for `/api/package_compatibility`."""
     package_requirements_response = []
 
-    for package_name, compatible_version in package_requirements.items():
+    for package_name, package_info in package_requirements.items():
+        compatible_version = package_info["min_compatible_version"]
         try:
             package_version = get_package_version(package_name)
-        except PackageNotFoundError as exc:
-            logger.exception("Failed to get package version. Error: %s", str(exc))
+        except PackageNotFoundError:
+            logger.warning(package_info["warning_message"])
             package_version = "0.0.0"
 
         is_compatible = packaging.version.parse(
diff --git a/package/kedro_viz/constants.py b/package/kedro_viz/constants.py
index 9afb7eddd4..620fa951e3 100644
--- a/package/kedro_viz/constants.py
+++ b/package/kedro_viz/constants.py
@@ -14,4 +14,14 @@
 
 SHAREABLEVIZ_SUPPORTED_PLATFORMS = ["aws", "azure", "gcp"]
 
-PACKAGE_REQUIREMENTS = {"fsspec": "2023.9.0", "kedro-datasets": "2.1.0"}
+PACKAGE_REQUIREMENTS = {
+    "fsspec": {
+        "min_compatible_version": "2023.9.0",
+        "warning_message": "Publish and share Kedro-Viz requires fsspec >= 2023.9.0",
+    },
+    "kedro-datasets": {
+        "min_compatible_version": "2.1.0",
+        "warning_message": "Experiment Tracking is exclusively supported "
+        "for users with kedro-datasets >= 2.1.0",
+    },
+}
diff --git a/package/tests/test_api/test_rest/test_responses.py b/package/tests/test_api/test_rest/test_responses.py
index 1842ee51f1..79c05092e4 100644
--- a/package/tests/test_api/test_rest/test_responses.py
+++ b/package/tests/test_api/test_rest/test_responses.py
@@ -1,4 +1,5 @@
 # pylint: disable=too-many-lines
+import logging
 import operator
 from pathlib import Path
 from typing import Any, Dict, Iterable, List
@@ -7,7 +8,6 @@
 
 import pytest
 from fastapi.testclient import TestClient
-from importlib_metadata import PackageNotFoundError
 
 from kedro_viz.api import apps
 from kedro_viz.api.rest.responses import (
@@ -829,10 +829,30 @@ class TestPackageCompatibilities:
     @pytest.mark.parametrize(
         "package_name, package_version, package_requirements, expected_compatibility_response",
         [
-            ("fsspec", "2023.9.1", {"fsspec": "2023.0.0"}, True),
-            ("fsspec", "2023.9.1", {"fsspec": "2024.0.0"}, False),
-            ("kedro-datasets", "2.1.0", {"kedro-datasets": "2.1.0"}, True),
-            ("kedro-datasets", "1.8.0", {"kedro-datasets": "2.1.0"}, False),
+            (
+                "fsspec",
+                "2023.9.1",
+                {"fsspec": {"min_compatible_version": "2023.0.0"}},
+                True,
+            ),
+            (
+                "fsspec",
+                "2023.9.1",
+                {"fsspec": {"min_compatible_version": "2024.0.0"}},
+                False,
+            ),
+            (
+                "kedro-datasets",
+                "2.1.0",
+                {"kedro-datasets": {"min_compatible_version": "2.1.0"}},
+                True,
+            ),
+            (
+                "kedro-datasets",
+                "1.8.0",
+                {"kedro-datasets": {"min_compatible_version": "2.1.0"}},
+                False,
+            ),
         ],
     )
     def test_get_package_compatibilities_response(
@@ -854,16 +874,27 @@ def test_get_package_compatibilities_response(
             assert package_response.package_version == package_version
             assert package_response.is_compatible is expected_compatibility_response
 
-    def test_get_package_compatibilities_exception_response(
-        self,
-        mocker,
-    ):
-        mocker.patch(
-            "kedro_viz.api.rest.responses.get_package_compatibilities_response",
-            side_effect=PackageNotFoundError("random-package"),
-        )
-        package_name = "random-package"
-        response = get_package_compatibilities_response({package_name: "1.0.0"})
+    def test_get_package_compatibilities_exception_response(self, caplog):
+        mock_package_requirement = {
+            "random-package": {
+                "min_compatible_version": "1.0.0",
+                "warning_message": "random-package is not available",
+            }
+        }
+
+        with caplog.at_level(logging.WARNING):
+            response = get_package_compatibilities_response(mock_package_requirement)
+
+            assert len(caplog.records) == 1
+
+            record = caplog.records[0]
+
+            assert record.levelname == "WARNING"
+            assert (
+                mock_package_requirement["random-package"]["warning_message"]
+                in record.message
+            )
+
         expected_response = PackageCompatibilityAPIResponse(
             package_name="random-package", package_version="0.0.0", is_compatible=False
         )

From d8ef988ca76876b817d11a2be83c9dacdea3d98a Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Wed, 15 May 2024 16:27:33 -0500
Subject: [PATCH 10/20] refactor disable preview cli

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/api/rest/responses.py       | 17 +++++++++---
 package/kedro_viz/data_access/managers.py     | 12 ---------
 .../integrations/deployment/base_deployer.py  | 10 ++++---
 package/kedro_viz/launchers/cli.py            | 10 +------
 package/kedro_viz/models/flowchart.py         | 26 +++++++++----------
 package/kedro_viz/server.py                   |  9 -------
 6 files changed, 34 insertions(+), 50 deletions(-)

diff --git a/package/kedro_viz/api/rest/responses.py b/package/kedro_viz/api/rest/responses.py
index 13aaa05a6d..94ff986e08 100644
--- a/package/kedro_viz/api/rest/responses.py
+++ b/package/kedro_viz/api/rest/responses.py
@@ -419,8 +419,15 @@ def save_api_main_response_to_fs(main_path: str, remote_fs: Any):
         raise exc
 
 
-def save_api_node_response_to_fs(nodes_path: str, remote_fs: Any):
+def save_api_node_response_to_fs(
+    nodes_path: str, remote_fs: Any, is_preview_enabled_for_all_datasets: bool
+):
     """Saves API /nodes/{node} response to a directory."""
+    # Set if preview is enabled/disabled for all data nodes
+    DataNodeMetadata.set_is_preview_enabled_for_all_datasets(
+        is_preview_enabled_for_all_datasets
+    )
+
     for nodeId in data_access_manager.nodes.get_node_ids():
         try:
             write_api_response_to_fs(
@@ -451,7 +458,9 @@ def save_api_pipeline_response_to_fs(pipelines_path: str, remote_fs: Any):
             raise exc
 
 
-def save_api_responses_to_fs(path: str, remote_fs: Any):
+def save_api_responses_to_fs(
+    path: str, remote_fs: Any, is_preview_enabled_for_all_datasets: bool
+):
     """Saves all Kedro Viz API responses to a directory."""
     try:
         logger.debug(
@@ -469,7 +478,9 @@ def save_api_responses_to_fs(path: str, remote_fs: Any):
             remote_fs.makedirs(pipelines_path, exist_ok=True)
 
         save_api_main_response_to_fs(main_path, remote_fs)
-        save_api_node_response_to_fs(nodes_path, remote_fs)
+        save_api_node_response_to_fs(
+            nodes_path, remote_fs, is_preview_enabled_for_all_datasets
+        )
         save_api_pipeline_response_to_fs(pipelines_path, remote_fs)
 
     except Exception as exc:  # pragma: no cover
diff --git a/package/kedro_viz/data_access/managers.py b/package/kedro_viz/data_access/managers.py
index 5ec03035cf..4e4e772e5a 100644
--- a/package/kedro_viz/data_access/managers.py
+++ b/package/kedro_viz/data_access/managers.py
@@ -64,7 +64,6 @@ def __init__(self):
         self.runs = RunsRepository()
         self.tracking_datasets = TrackingDatasetsRepository()
         self.dataset_stats = {}
-        self.is_preview_enabled_for_all_nodes = False
 
     def set_db_session(self, db_session_class: sessionmaker):
         """Set db session on repositories that need it."""
@@ -128,16 +127,6 @@ def add_dataset_stats(self, stats_dict: Dict):
 
         self.dataset_stats = stats_dict
 
-    def add_is_preview_enabled_for_all_nodes(
-        self, is_preview_enabled_for_all_nodes: bool
-    ):
-        """Add the preview flag to the data access manager.
-        Args:
-            is_preview_enabled_for_all_nodes: A boolean flag to indicate whether the preview is enabled for all the nodes.
-        """
-
-        self.is_preview_enabled_for_all_nodes = is_preview_enabled_for_all_nodes
-
     def get_stats_for_data_node(self, data_node_name: str) -> Union[Dict, None]:
         """Returns the dataset statistics for the data node if found
 
@@ -315,7 +304,6 @@ def add_dataset(
                 dataset=obj,
                 stats=self.get_stats_for_data_node(_strip_transcoding(dataset_name)),
                 is_free_input=is_free_input,
-                is_preview_enabled_for_all_nodes=self.is_preview_enabled_for_all_nodes,
             )
         graph_node = self.nodes.add_node(graph_node)
         graph_node.add_pipeline(registered_pipeline_id)
diff --git a/package/kedro_viz/integrations/deployment/base_deployer.py b/package/kedro_viz/integrations/deployment/base_deployer.py
index 22c4fcc819..ff4a3800ad 100644
--- a/package/kedro_viz/integrations/deployment/base_deployer.py
+++ b/package/kedro_viz/integrations/deployment/base_deployer.py
@@ -33,9 +33,11 @@ def __init__(self):
         self._path = None
         self._fs = None
 
-    def _upload_api_responses(self):
+    def _upload_api_responses(self, is_preview_enabled_for_all_datasets: bool):
         """Write API responses to the build."""
-        save_api_responses_to_fs(self._path, self._fs)
+        save_api_responses_to_fs(
+            self._path, self._fs, is_preview_enabled_for_all_datasets
+        )
 
     def _ingest_heap_analytics(self):
         """Ingest heap analytics to index file in the build."""
@@ -98,9 +100,9 @@ def _upload_deploy_viz_metadata_file(self):
             logger.exception("Upload failed: %s ", exc)
             raise exc
 
-    def deploy(self):
+    def deploy(self, is_preview_enabled_for_all_datasets: bool = False):
         """Create and deploy all static files to local/remote file system"""
 
-        self._upload_api_responses()
+        self._upload_api_responses(is_preview_enabled_for_all_datasets)
         self._upload_static_files(_HTML_DIR)
         self._upload_deploy_viz_metadata_file()
diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 47b64ab586..2e3b37e016 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -115,11 +115,6 @@ def viz(ctx):  # pylint: disable=unused-argument
     help=PARAMS_ARG_HELP,
     callback=_split_params,
 )
-@click.option(
-    "--preview",
-    default=True,
-    help="A flag to enable/disable a quick preview of node datasets.",
-)
 # pylint: disable=import-outside-toplevel, too-many-locals
 def run(
     host,
@@ -132,7 +127,6 @@ def run(
     autoreload,
     include_hooks,
     params,
-    preview,
 ):
     """Launch local Kedro Viz instance"""
     from kedro_viz.server import run_server
@@ -176,7 +170,6 @@ def run(
             "include_hooks": include_hooks,
             "package_name": PACKAGE_NAME,
             "extra_params": params,
-            "preview": preview,
         }
         if autoreload:
             run_process_kwargs = {
@@ -384,14 +377,13 @@ def load_and_deploy_viz(
     try:
         load_and_populate_data(
             Path.cwd(),
-            is_preview_enabled_for_all_nodes=preview,
             include_hooks=include_hooks,
             package_name=package_name,
         )
 
         # Start the deployment
         deployer = DeployerFactory.create_deployer(platform, endpoint, bucket_name)
-        deployer.deploy()
+        deployer.deploy(preview)
 
     except (
         # pylint: disable=catching-non-exception
diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index 8b228e4f72..5ad504297e 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -8,7 +8,7 @@
 from enum import Enum
 from pathlib import Path
 from types import FunctionType
-from typing import Any, Dict, List, Optional, Set, Union, cast
+from typing import Any, ClassVar, Dict, List, Optional, Set, Union, cast
 
 from kedro.pipeline.node import Node as KedroNode
 
@@ -227,7 +227,6 @@ def create_data_node(
         tags: Set[str],
         dataset: AbstractDataset,
         stats: Optional[Dict],
-        is_preview_enabled_for_all_nodes: bool,
         is_free_input: bool = False,
     ) -> Union["DataNode", "TranscodedDataNode"]:
         """Create a graph node of type data for a given Kedro Dataset instance.
@@ -240,7 +239,6 @@ def create_data_node(
             dataset: A dataset in a Kedro pipeline.
             stats: The dictionary of dataset statistics, e.g.
                 {"rows":2, "columns":3, "file_size":100}
-            is_preview_enabled_for_all_nodes: A flag to enable/disable a quick preview of node datasets.
             is_free_input: Whether the dataset is a free input in the pipeline
         Returns:
             An instance of DataNode.
@@ -265,7 +263,6 @@ def create_data_node(
             kedro_obj=dataset,
             is_free_input=is_free_input,
             stats=stats,
-            is_preview_enabled_for_all_nodes=is_preview_enabled_for_all_nodes,
         )
 
     @classmethod
@@ -566,7 +563,6 @@ class DataNode(GraphNode):
         layer (Optional[str]): The layer that this data node belongs to. Defaults to `None`.
         is_free_input (bool): Determines whether the data node is a free input. Defaults to `False`.
         stats (Optional[Dict]): Statistics for the data node. Defaults to `None`.
-        is_preview_enabled_for_all_nodes (bool): A flag to enable/disable a quick preview of node datasets. Defaults to `False`.
 
     Raises:
         AssertionError: If kedro_obj, name are not supplied during instantiation
@@ -580,10 +576,6 @@ class DataNode(GraphNode):
     )
     stats: Optional[Dict] = Field(None, description="The statistics for the data node.")
 
-    is_preview_enabled_for_all_nodes: bool = Field(
-        False, description="A flag to enable/disable a quick preview of node datasets."
-    )
-
     dataset_type: Optional[str] = Field(
         default=None,
         validate_default=True,
@@ -656,9 +648,7 @@ def get_preview_args(self):
     def is_preview_disabled(self):
         """Checks if the dataset has a preview disabled"""
         return (
-            self.is_preview_enabled_for_all_nodes is False
-            or self.viz_metadata is not None
-            and self.viz_metadata.get("preview") is False
+            self.viz_metadata is not None and self.viz_metadata.get("preview") is False
         )
 
 
@@ -745,6 +735,8 @@ class DataNodeMetadata(GraphNodeMetadata):
 
     data_node: DataNode = Field(..., exclude=True)
 
+    is_preview_enabled_for_all_datasets: ClassVar[bool] = False
+
     type: Optional[str] = Field(
         default=None, validate_default=True, description="The type of the data node"
     )
@@ -786,6 +778,10 @@ def check_data_node_exists(cls, values):
         cls.set_data_node_and_dataset(values["data_node"])
         return values
 
+    @classmethod
+    def set_is_preview_enabled_for_all_datasets(cls, value: bool):
+        cls.is_preview_enabled_for_all_datasets = value
+
     @classmethod
     def set_data_node_and_dataset(cls, data_node):
         cls.data_node = data_node
@@ -816,7 +812,11 @@ def set_run_command(cls, _):
     @field_validator("preview")
     @classmethod
     def set_preview(cls, _):
-        if cls.data_node.is_preview_disabled() or not hasattr(cls.dataset, "preview"):
+        if (
+            cls.data_node.is_preview_disabled()
+            or not hasattr(cls.dataset, "preview")
+            or not cls.is_preview_enabled_for_all_datasets
+        ):
             return None
 
         try:
diff --git a/package/kedro_viz/server.py b/package/kedro_viz/server.py
index f3168e6c8e..07b25d049c 100644
--- a/package/kedro_viz/server.py
+++ b/package/kedro_viz/server.py
@@ -30,7 +30,6 @@ def populate_data(
     pipelines: Dict[str, Pipeline],
     session_store: BaseSessionStore,
     stats_dict: Dict,
-    is_preview_enabled_for_all_nodes: bool,
 ):  # pylint: disable=redefined-outer-name
     """Populate data repositories. Should be called once on application start
     if creating an api app from project.
@@ -41,10 +40,6 @@ def populate_data(
         session_class = make_db_session_factory(session_store.location)
         data_access_manager.set_db_session(session_class)
 
-    data_access_manager.add_is_preview_enabled_for_all_nodes(
-        is_preview_enabled_for_all_nodes
-    )
-
     data_access_manager.add_catalog(catalog, pipelines)
 
     # add dataset stats before adding pipelines as the data nodes
@@ -56,7 +51,6 @@ def populate_data(
 
 def load_and_populate_data(
     path: Path,
-    is_preview_enabled_for_all_nodes: bool,
     env: Optional[str] = None,
     include_hooks: bool = False,
     package_name: Optional[str] = None,
@@ -87,14 +81,12 @@ def load_and_populate_data(
         pipelines,
         session_store,
         stats_dict,
-        is_preview_enabled_for_all_nodes,
     )
 
 
 def run_server(
     host: str = DEFAULT_HOST,
     port: int = DEFAULT_PORT,
-    preview: bool = True,
     load_file: Optional[str] = None,
     save_file: Optional[str] = None,
     pipeline_name: Optional[str] = None,
@@ -133,7 +125,6 @@ def run_server(
     if load_file is None:
         load_and_populate_data(
             path,
-            preview,
             env,
             include_hooks,
             package_name,

From 3377832e04368e2c6914376acb25268881a845a7 Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Wed, 15 May 2024 17:04:31 -0500
Subject: [PATCH 11/20] fix lint

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/api/rest/responses.py       | 14 +++-------
 .../integrations/deployment/base_deployer.py  | 10 +++----
 package/kedro_viz/launchers/cli.py            | 28 +++++++++++++------
 package/kedro_viz/models/flowchart.py         |  8 +++---
 package/kedro_viz/server.py                   |  5 ++--
 .../test_api/test_rest/test_responses.py      | 18 +++++++-----
 .../test_integrations/test_base_deployer.py   |  2 +-
 package/tests/test_launchers/test_cli.py      | 12 +++++---
 8 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/package/kedro_viz/api/rest/responses.py b/package/kedro_viz/api/rest/responses.py
index 94ff986e08..46d02173b1 100644
--- a/package/kedro_viz/api/rest/responses.py
+++ b/package/kedro_viz/api/rest/responses.py
@@ -420,13 +420,11 @@ def save_api_main_response_to_fs(main_path: str, remote_fs: Any):
 
 
 def save_api_node_response_to_fs(
-    nodes_path: str, remote_fs: Any, is_preview_enabled_for_all_datasets: bool
+    nodes_path: str, remote_fs: Any, is_datasets_previewed: bool
 ):
     """Saves API /nodes/{node} response to a directory."""
     # Set if preview is enabled/disabled for all data nodes
-    DataNodeMetadata.set_is_preview_enabled_for_all_datasets(
-        is_preview_enabled_for_all_datasets
-    )
+    DataNodeMetadata.set_is_datasets_previewed(is_datasets_previewed)
 
     for nodeId in data_access_manager.nodes.get_node_ids():
         try:
@@ -458,9 +456,7 @@ def save_api_pipeline_response_to_fs(pipelines_path: str, remote_fs: Any):
             raise exc
 
 
-def save_api_responses_to_fs(
-    path: str, remote_fs: Any, is_preview_enabled_for_all_datasets: bool
-):
+def save_api_responses_to_fs(path: str, remote_fs: Any, is_datasets_previewed: bool):
     """Saves all Kedro Viz API responses to a directory."""
     try:
         logger.debug(
@@ -478,9 +474,7 @@ def save_api_responses_to_fs(
             remote_fs.makedirs(pipelines_path, exist_ok=True)
 
         save_api_main_response_to_fs(main_path, remote_fs)
-        save_api_node_response_to_fs(
-            nodes_path, remote_fs, is_preview_enabled_for_all_datasets
-        )
+        save_api_node_response_to_fs(nodes_path, remote_fs, is_datasets_previewed)
         save_api_pipeline_response_to_fs(pipelines_path, remote_fs)
 
     except Exception as exc:  # pragma: no cover
diff --git a/package/kedro_viz/integrations/deployment/base_deployer.py b/package/kedro_viz/integrations/deployment/base_deployer.py
index ff4a3800ad..555d25c4f2 100644
--- a/package/kedro_viz/integrations/deployment/base_deployer.py
+++ b/package/kedro_viz/integrations/deployment/base_deployer.py
@@ -33,11 +33,9 @@ def __init__(self):
         self._path = None
         self._fs = None
 
-    def _upload_api_responses(self, is_preview_enabled_for_all_datasets: bool):
+    def _upload_api_responses(self, is_datasets_previewed: bool):
         """Write API responses to the build."""
-        save_api_responses_to_fs(
-            self._path, self._fs, is_preview_enabled_for_all_datasets
-        )
+        save_api_responses_to_fs(self._path, self._fs, is_datasets_previewed)
 
     def _ingest_heap_analytics(self):
         """Ingest heap analytics to index file in the build."""
@@ -100,9 +98,9 @@ def _upload_deploy_viz_metadata_file(self):
             logger.exception("Upload failed: %s ", exc)
             raise exc
 
-    def deploy(self, is_preview_enabled_for_all_datasets: bool = False):
+    def deploy(self, is_datasets_previewed: bool = False):
         """Create and deploy all static files to local/remote file system"""
 
-        self._upload_api_responses(is_preview_enabled_for_all_datasets)
+        self._upload_api_responses(is_datasets_previewed)
         self._upload_static_files(_HTML_DIR)
         self._upload_deploy_viz_metadata_file()
diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 2e3b37e016..0a341cb23e 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -239,7 +239,7 @@ def run(
     default=False,
     help="A flag to enable/disable a quick preview of node datasets.",
 )
-def deploy(platform, endpoint, bucket_name, include_hooks, preview):
+def deploy(platform, endpoint, bucket_name, include_hooks, is_datasets_previewed):
     """Deploy and host Kedro Viz on provided platform"""
     if not platform or platform.lower() not in SHAREABLEVIZ_SUPPORTED_PLATFORMS:
         display_cli_message(
@@ -257,7 +257,13 @@ def deploy(platform, endpoint, bucket_name, include_hooks, preview):
         )
         return
 
-    create_shareableviz_process(platform, preview, endpoint, bucket_name, include_hooks)
+    create_shareableviz_process(
+        platform,
+        is_datasets_previewed,
+        endpoint,
+        bucket_name,
+        include_hooks,
+    )
 
 
 @viz.command(context_settings={"help_option_names": ["-h", "--help"]})
@@ -271,14 +277,20 @@ def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     default=False,
     help="A flag to enable/disable a quick preview of node datasets.",
 )
-def build(include_hooks, preview):
+def build(include_hooks, is_datasets_previewed):
     """Create build directory of local Kedro Viz instance with Kedro project data"""
 
-    create_shareableviz_process("local", preview, include_hooks=include_hooks)
+    create_shareableviz_process(
+        "local", is_datasets_previewed, include_hooks=include_hooks
+    )
 
 
 def create_shareableviz_process(
-    platform, preview, endpoint=None, bucket_name=None, include_hooks=False
+    platform,
+    is_datasets_previewed,
+    endpoint=None,
+    bucket_name=None,
+    include_hooks=False,
 ):
     """Creates platform specific deployer process"""
     try:
@@ -289,7 +301,7 @@ def create_shareableviz_process(
             target=load_and_deploy_viz,
             args=(
                 platform,
-                preview,
+                is_datasets_previewed,
                 endpoint,
                 bucket_name,
                 include_hooks,
@@ -365,7 +377,7 @@ def create_shareableviz_process(
 
 def load_and_deploy_viz(
     platform,
-    preview,
+    is_datasets_previewed,
     endpoint,
     bucket_name,
     include_hooks,
@@ -383,7 +395,7 @@ def load_and_deploy_viz(
 
         # Start the deployment
         deployer = DeployerFactory.create_deployer(platform, endpoint, bucket_name)
-        deployer.deploy(preview)
+        deployer.deploy(is_datasets_previewed)
 
     except (
         # pylint: disable=catching-non-exception
diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index 5ad504297e..75a759a178 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -735,7 +735,7 @@ class DataNodeMetadata(GraphNodeMetadata):
 
     data_node: DataNode = Field(..., exclude=True)
 
-    is_preview_enabled_for_all_datasets: ClassVar[bool] = False
+    is_datasets_previewed: ClassVar[bool] = False
 
     type: Optional[str] = Field(
         default=None, validate_default=True, description="The type of the data node"
@@ -779,8 +779,8 @@ def check_data_node_exists(cls, values):
         return values
 
     @classmethod
-    def set_is_preview_enabled_for_all_datasets(cls, value: bool):
-        cls.is_preview_enabled_for_all_datasets = value
+    def set_is_datasets_previewed(cls, value: bool):
+        cls.is_datasets_previewed = value
 
     @classmethod
     def set_data_node_and_dataset(cls, data_node):
@@ -815,7 +815,7 @@ def set_preview(cls, _):
         if (
             cls.data_node.is_preview_disabled()
             or not hasattr(cls.dataset, "preview")
-            or not cls.is_preview_enabled_for_all_datasets
+            or not cls.is_datasets_previewed
         ):
             return None
 
diff --git a/package/kedro_viz/server.py b/package/kedro_viz/server.py
index 07b25d049c..445da9bbe0 100644
--- a/package/kedro_viz/server.py
+++ b/package/kedro_viz/server.py
@@ -131,9 +131,10 @@ def run_server(
             pipeline_name,
             extra_params,
         )
-
+        # [TODO: As we can do this with `kedro viz build`,
+        # we need to shift this feature outside of kedro viz run]
         if save_file:
-            save_api_responses_to_fs(save_file, fsspec.filesystem("file"))
+            save_api_responses_to_fs(save_file, fsspec.filesystem("file"), True)
 
         app = apps.create_api_app_from_project(path, autoreload)
     else:
diff --git a/package/tests/test_api/test_rest/test_responses.py b/package/tests/test_api/test_rest/test_responses.py
index 5e5d32a4c2..4c1194870a 100644
--- a/package/tests/test_api/test_rest/test_responses.py
+++ b/package/tests/test_api/test_rest/test_responses.py
@@ -948,7 +948,7 @@ def test_save_api_node_response_to_fs(self, mocker):
         )
         remote_fs = Mock()
 
-        save_api_node_response_to_fs(nodes_path, remote_fs)
+        save_api_node_response_to_fs(nodes_path, remote_fs, False)
 
         assert mock_write_api_response_to_fs.call_count == len(nodeIds)
         assert mock_get_node_metadata_response.call_count == len(nodeIds)
@@ -1000,14 +1000,16 @@ def test_save_api_pipeline_response_to_fs(self, mocker):
         mock_write_api_response_to_fs.assert_has_calls(expected_calls, any_order=True)
 
     @pytest.mark.parametrize(
-        "file_path, protocol",
+        "file_path, protocol, is_datasets_previewed",
         [
-            ("s3://shareableviz", "s3"),
-            ("abfs://shareableviz", "abfs"),
-            ("shareableviz", "file"),
+            ("s3://shareableviz", "s3", True),
+            ("abfs://shareableviz", "abfs", False),
+            ("shareableviz", "file", True),
         ],
     )
-    def test_save_api_responses_to_fs(self, file_path, protocol, mocker):
+    def test_save_api_responses_to_fs(
+        self, file_path, protocol, is_datasets_previewed, mocker
+    ):
         mock_api_main_response_to_fs = mocker.patch(
             "kedro_viz.api.rest.responses.save_api_main_response_to_fs"
         )
@@ -1021,7 +1023,9 @@ def test_save_api_responses_to_fs(self, file_path, protocol, mocker):
         mock_filesystem = mocker.patch("fsspec.filesystem")
         mock_filesystem.return_value.protocol = protocol
 
-        save_api_responses_to_fs(file_path, mock_filesystem.return_value)
+        save_api_responses_to_fs(
+            file_path, mock_filesystem.return_value, is_datasets_previewed
+        )
 
         mock_api_main_response_to_fs.assert_called_once_with(
             f"{file_path}/api/main", mock_filesystem.return_value
diff --git a/package/tests/test_integrations/test_base_deployer.py b/package/tests/test_integrations/test_base_deployer.py
index d05947408e..e1ebfd671b 100644
--- a/package/tests/test_integrations/test_base_deployer.py
+++ b/package/tests/test_integrations/test_base_deployer.py
@@ -14,7 +14,7 @@ def test_upload_api_responses(self, mocker):
             "kedro_viz.integrations.deployment.base_deployer.save_api_responses_to_fs"
         )
         build = ConcreteBaseDeployer()
-        build._upload_api_responses()
+        build._upload_api_responses(False)
 
         save_api_responses_to_fs_mock.assert_called_once_with(build._path, build._fs)
 
diff --git a/package/tests/test_launchers/test_cli.py b/package/tests/test_launchers/test_cli.py
index 4ad1b6dd86..218b7e3258 100755
--- a/package/tests/test_launchers/test_cli.py
+++ b/package/tests/test_launchers/test_cli.py
@@ -670,10 +670,11 @@ def test_create_shareableviz_process(
 
 
 @pytest.mark.parametrize(
-    "platform, endpoint, bucket_name, include_hooks, package_name",
+    "platform, is_datasets_previewed, endpoint, bucket_name, include_hooks, package_name",
     [
         (
             "azure",
+            False,
             "https://example-bucket.web.core.windows.net",
             "example-bucket",
             False,
@@ -681,17 +682,19 @@ def test_create_shareableviz_process(
         ),
         (
             "aws",
+            True,
             "http://example-bucket.s3-website.us-east-2.amazonaws.com/",
             "example-bucket",
             True,
             "demo_project",
         ),
-        ("gcp", "http://34.120.87.227/", "example-bucket", False, "demo_project"),
-        ("local", None, None, True, "demo_project"),
+        ("gcp", True, "http://34.120.87.227/", "example-bucket", False, "demo_project"),
+        ("local", False, None, None, True, "demo_project"),
     ],
 )
 def test_load_and_deploy_viz_success(
     platform,
+    is_datasets_previewed,
     endpoint,
     bucket_name,
     include_hooks,
@@ -707,6 +710,7 @@ def test_load_and_deploy_viz_success(
 
     cli.load_and_deploy_viz(
         platform,
+        is_datasets_previewed,
         endpoint,
         bucket_name,
         include_hooks,
@@ -721,5 +725,5 @@ def test_load_and_deploy_viz_success(
     mock_DeployerFactory.create_deployer.assert_called_once_with(
         platform, endpoint, bucket_name
     )
-    deployer_mock.deploy.assert_called_once()
+    deployer_mock.deploy.assert_called_once_with(is_datasets_previewed)
     mock_click_echo.echo.assert_not_called()

From 7a317293cce90b3115c755900351e98ec8182673 Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Wed, 15 May 2024 17:09:26 -0500
Subject: [PATCH 12/20] fix lint

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/server.py | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/package/kedro_viz/server.py b/package/kedro_viz/server.py
index 445da9bbe0..384a3545dc 100644
--- a/package/kedro_viz/server.py
+++ b/package/kedro_viz/server.py
@@ -75,13 +75,7 @@ def load_and_populate_data(
     )
 
     # Creates data repositories which are used by Kedro Viz Backend APIs
-    populate_data(
-        data_access_manager,
-        catalog,
-        pipelines,
-        session_store,
-        stats_dict,
-    )
+    populate_data(data_access_manager, catalog, pipelines, session_store, stats_dict)
 
 
 def run_server(

From c9142cd34867e9e0d3be2a09a3a99f15d4027d1b Mon Sep 17 00:00:00 2001
From: Ravi Kumar Pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 11:07:42 -0500
Subject: [PATCH 13/20] Fix build failure due to incompatible seaborn and
 matplotlib versions (#1910)

* merge main from remote

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* fix build issue due to matplotlib new update

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* update release note

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

* update release note

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>

---------

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 demo-project/src/demo_project/requirements.in | 2 +-
 demo-project/src/docker_requirements.txt      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/demo-project/src/demo_project/requirements.in b/demo-project/src/demo_project/requirements.in
index af486a91a6..dff89fa8d9 100644
--- a/demo-project/src/demo_project/requirements.in
+++ b/demo-project/src/demo_project/requirements.in
@@ -16,4 +16,4 @@ wheel>=0.35, <0.37
 pillow~=9.0
 matplotlib==3.5.0
 pre-commit~=1.17
-seaborn~=0.11.2
+seaborn>=0.13.0
diff --git a/demo-project/src/docker_requirements.txt b/demo-project/src/docker_requirements.txt
index 407cdfb038..5f220c35cf 100644
--- a/demo-project/src/docker_requirements.txt
+++ b/demo-project/src/docker_requirements.txt
@@ -2,4 +2,4 @@ kedro>=0.18.0
 kedro-datasets[pandas.CSVDataset,pandas.ExcelDataset, pandas.ParquetDataset, plotly.PlotlyDataset, matplotlib.MatplotlibWriter]>=2.1.0
 scikit-learn~=1.0
 pillow~=9.0
-seaborn~=0.11.2
+seaborn>=0.13.0

From 78f44bb4a9323bf374c338ba36f98dc5bbee481c Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 15:01:38 -0500
Subject: [PATCH 14/20] testing 1

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/launchers/cli.py | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 0a341cb23e..09c27f21cd 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -237,9 +237,9 @@ def run(
 @click.option(
     "--preview",
     default=False,
-    help="A flag to enable/disable a quick preview of node datasets.",
+    help="Enable/disable a quick preview of node datasets.",
 )
-def deploy(platform, endpoint, bucket_name, include_hooks, is_datasets_previewed):
+def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     """Deploy and host Kedro Viz on provided platform"""
     if not platform or platform.lower() not in SHAREABLEVIZ_SUPPORTED_PLATFORMS:
         display_cli_message(
@@ -259,7 +259,7 @@ def deploy(platform, endpoint, bucket_name, include_hooks, is_datasets_previewed
 
     create_shareableviz_process(
         platform,
-        is_datasets_previewed,
+        preview,
         endpoint,
         bucket_name,
         include_hooks,
@@ -275,14 +275,12 @@ def deploy(platform, endpoint, bucket_name, include_hooks, is_datasets_previewed
 @click.option(
     "--preview",
     default=False,
-    help="A flag to enable/disable a quick preview of node datasets.",
+    help="Enable/disable a quick preview of node datasets.",
 )
-def build(include_hooks, is_datasets_previewed):
+def build(include_hooks, preview):
     """Create build directory of local Kedro Viz instance with Kedro project data"""
 
-    create_shareableviz_process(
-        "local", is_datasets_previewed, include_hooks=include_hooks
-    )
+    create_shareableviz_process("local", preview, include_hooks=include_hooks)
 
 
 def create_shareableviz_process(

From 663924c81252681f6dd09bb52126f11f3e180d42 Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 15:23:01 -0500
Subject: [PATCH 15/20] change help text

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/launchers/cli.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 09c27f21cd..449242e7cd 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -237,7 +237,7 @@ def run(
 @click.option(
     "--preview",
     default=False,
-    help="Enable/disable a quick preview of node datasets.",
+    help="Enable/disable preview of node datasets.",
 )
 def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     """Deploy and host Kedro Viz on provided platform"""
@@ -275,7 +275,7 @@ def deploy(platform, endpoint, bucket_name, include_hooks, preview):
 @click.option(
     "--preview",
     default=False,
-    help="Enable/disable a quick preview of node datasets.",
+    help="Enable/disable preview of node datasets.",
 )
 def build(include_hooks, preview):
     """Create build directory of local Kedro Viz instance with Kedro project data"""

From defbf6640992fb39a347fdc9aa931ef16ec13a2e Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 15:25:33 -0500
Subject: [PATCH 16/20] change help text

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/launchers/cli.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index 449242e7cd..af8909d603 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -237,7 +237,7 @@ def run(
 @click.option(
     "--preview",
     default=False,
-    help="Enable/disable preview of node datasets.",
+    help="Enable/disable the preview of all datasets.",
 )
 def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     """Deploy and host Kedro Viz on provided platform"""
@@ -275,7 +275,7 @@ def deploy(platform, endpoint, bucket_name, include_hooks, preview):
 @click.option(
     "--preview",
     default=False,
-    help="Enable/disable preview of node datasets.",
+    help="Enable/disable the preview of all datasets.",
 )
 def build(include_hooks, preview):
     """Create build directory of local Kedro Viz instance with Kedro project data"""

From 91951508f07369e96e3d1c7366b7f97b130e2efe Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 17:27:49 -0500
Subject: [PATCH 17/20] update tests

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 .../test_api/test_rest/test_responses.py      |  4 +-
 .../test_integrations/test_base_deployer.py   |  4 +-
 package/tests/test_launchers/test_cli.py      | 45 +++++++++++++++++--
 package/tests/test_models/test_flowchart.py   |  6 ++-
 package/tests/test_server.py                  |  2 +-
 5 files changed, 52 insertions(+), 9 deletions(-)
 mode change 100644 => 100755 package/tests/test_integrations/test_base_deployer.py

diff --git a/package/tests/test_api/test_rest/test_responses.py b/package/tests/test_api/test_rest/test_responses.py
index 01881ab626..7464efefd9 100644
--- a/package/tests/test_api/test_rest/test_responses.py
+++ b/package/tests/test_api/test_rest/test_responses.py
@@ -1062,7 +1062,9 @@ def test_save_api_responses_to_fs(
             f"{file_path}/api/main", mock_filesystem.return_value
         )
         mock_api_node_response_to_fs.assert_called_once_with(
-            f"{file_path}/api/nodes", mock_filesystem.return_value
+            f"{file_path}/api/nodes",
+            mock_filesystem.return_value,
+            is_datasets_previewed,
         )
         mock_api_pipeline_response_to_fs.assert_called_once_with(
             f"{file_path}/api/pipelines", mock_filesystem.return_value
diff --git a/package/tests/test_integrations/test_base_deployer.py b/package/tests/test_integrations/test_base_deployer.py
old mode 100644
new mode 100755
index e1ebfd671b..a933e6229a
--- a/package/tests/test_integrations/test_base_deployer.py
+++ b/package/tests/test_integrations/test_base_deployer.py
@@ -16,7 +16,9 @@ def test_upload_api_responses(self, mocker):
         build = ConcreteBaseDeployer()
         build._upload_api_responses(False)
 
-        save_api_responses_to_fs_mock.assert_called_once_with(build._path, build._fs)
+        save_api_responses_to_fs_mock.assert_called_once_with(
+            build._path, build._fs, False
+        )
 
     def test_upload_static_files(self, mocker):
         mocker.patch("fsspec.filesystem")
diff --git a/package/tests/test_launchers/test_cli.py b/package/tests/test_launchers/test_cli.py
index 218b7e3258..7ff37d9a5a 100755
--- a/package/tests/test_launchers/test_cli.py
+++ b/package/tests/test_launchers/test_cli.py
@@ -445,6 +445,26 @@ def test_viz_command_group(mocker, mock_click_echo):
                 "include_hooks": True,
             },
         ),
+        (
+            [
+                "viz",
+                "deploy",
+                "--platform",
+                "aws",
+                "--endpoint",
+                "http://example-bucket.s3-website.us-east-2.amazonaws.com/",
+                "--bucket-name",
+                "example-bucket",
+                "--preview",
+                "true",
+            ],
+            {
+                "platform": "aws",
+                "endpoint": "http://example-bucket.s3-website.us-east-2.amazonaws.com/",
+                "bucket_name": "example-bucket",
+                "preview": True,
+            },
+        ),
     ],
 )
 def test_viz_deploy_valid_endpoint_and_bucket(command_options, deployer_args, mocker):
@@ -461,6 +481,7 @@ def test_viz_deploy_valid_endpoint_and_bucket(command_options, deployer_args, mo
 
     create_shareableviz_process_mock.assert_called_once_with(
         deployer_args.get("platform"),
+        deployer_args.get("preview", False),
         deployer_args.get("endpoint"),
         deployer_args.get("bucket_name"),
         deployer_args.get("include_hooks", False),
@@ -539,6 +560,10 @@ def test_viz_deploy_invalid_endpoint(mocker, mock_click_echo):
             ["viz", "build", "--include-hooks"],
             {"platform": "local", "include_hooks": True},
         ),
+        (
+            ["viz", "build", "--preview", "true"],
+            {"platform": "local", "preview": True},
+        ),
     ],
 )
 def test_successful_build_with_existing_static_files(
@@ -557,15 +582,18 @@ def test_successful_build_with_existing_static_files(
 
     create_shareableviz_process_mock.assert_called_once_with(
         build_args.get("platform"),
+        build_args.get("preview", False),
         include_hooks=build_args.get("include_hooks", False),
     )
 
 
 @pytest.mark.parametrize(
-    "platform, endpoint, bucket_name, include_hooks, process_completed_value",
+    "platform, is_datasets_previewed, endpoint, bucket_name,"
+    "include_hooks, process_completed_value",
     [
         (
             "azure",
+            True,
             "https://example-bucket.web.core.windows.net",
             "example-bucket",
             True,
@@ -573,6 +601,7 @@ def test_successful_build_with_existing_static_files(
         ),
         (
             "aws",
+            True,
             "http://example-bucket.s3-website.us-east-2.amazonaws.com/",
             "example-bucket",
             True,
@@ -580,14 +609,16 @@ def test_successful_build_with_existing_static_files(
         ),
         (
             "gcp",
+            False,
             "http://34.120.87.227/",
             "example-bucket",
             False,
             1,
         ),
-        ("local", None, None, False, 1),
+        ("local", False, None, None, False, 1),
         (
             "azure",
+            True,
             "https://example-bucket.web.core.windows.net",
             "example-bucket",
             False,
@@ -595,6 +626,7 @@ def test_successful_build_with_existing_static_files(
         ),
         (
             "aws",
+            False,
             "http://example-bucket.s3-website.us-east-2.amazonaws.com/",
             "example-bucket",
             False,
@@ -602,16 +634,18 @@ def test_successful_build_with_existing_static_files(
         ),
         (
             "gcp",
+            True,
             "http://34.120.87.227/",
             "example-bucket",
             True,
             0,
         ),
-        ("local", None, None, True, 0),
+        ("local", True, None, None, True, 0),
     ],
 )
 def test_create_shareableviz_process(
     platform,
+    is_datasets_previewed,
     endpoint,
     bucket_name,
     include_hooks,
@@ -624,13 +658,16 @@ def test_create_shareableviz_process(
     mock_click_echo,
 ):
     mock_process_completed.return_value.value = process_completed_value
-    cli.create_shareableviz_process(platform, endpoint, bucket_name, include_hooks)
+    cli.create_shareableviz_process(
+        platform, is_datasets_previewed, endpoint, bucket_name, include_hooks
+    )
 
     # Assert the mocks were called as expected
     mock_viz_deploy_process.assert_called_once_with(
         target=mock_viz_load_and_deploy,
         args=(
             platform,
+            is_datasets_previewed,
             endpoint,
             bucket_name,
             include_hooks,
diff --git a/package/tests/test_models/test_flowchart.py b/package/tests/test_models/test_flowchart.py
index d9f7a75235..a81e4c45c1 100644
--- a/package/tests/test_models/test_flowchart.py
+++ b/package/tests/test_models/test_flowchart.py
@@ -404,6 +404,8 @@ def test_preview_data_node_metadata(self, example_data_node):
                 [12345, "80%", "Barbados"],
             ],
         }
+
+        DataNodeMetadata.set_is_datasets_previewed(True)
         preview_node_metadata = DataNodeMetadata(data_node=example_data_node)
 
         assert preview_node_metadata.preview == expected_preview_data
@@ -444,10 +446,10 @@ def test_preview_default_data_node_metadata(
         assert preview_node_metadata.preview == expected_preview_data
 
     def test_preview_data_node_metadata_not_exist(self, example_data_node, mocker):
-        mocker.patch("kedro_datasets.pandas.CSVDataset.preview", return_value=False)
+        mocker.patch("kedro_datasets.pandas.CSVDataset.preview", return_value=None)
 
         preview_node_metadata = DataNodeMetadata(data_node=example_data_node)
-        assert preview_node_metadata.preview is False
+        assert preview_node_metadata.preview is None
 
     def test_transcoded_data_node_metadata(self):
         dataset = CSVDataset(filepath="/tmp/dataset.csv")
diff --git a/package/tests/test_server.py b/package/tests/test_server.py
index 391f9511c7..33fe6f2e1b 100644
--- a/package/tests/test_server.py
+++ b/package/tests/test_server.py
@@ -156,5 +156,5 @@ def test_save_file(self, tmp_path, mocker):
         save_file = tmp_path / "save.json"
         run_server(save_file=save_file)
         save_api_responses_to_fs_mock.assert_called_once_with(
-            save_file, mock_filesystem.return_value
+            save_file, mock_filesystem.return_value, True
         )

From c4c7375d1003530ae42913697ef64d8a42eb3d43 Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 17:33:31 -0500
Subject: [PATCH 18/20] format help text

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/launchers/cli.py | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/package/kedro_viz/launchers/cli.py b/package/kedro_viz/launchers/cli.py
index af8909d603..37491cfce7 100644
--- a/package/kedro_viz/launchers/cli.py
+++ b/package/kedro_viz/launchers/cli.py
@@ -237,7 +237,7 @@ def run(
 @click.option(
     "--preview",
     default=False,
-    help="Enable/disable the preview of all datasets.",
+    help="Enable/disable preview for all the datasets.",
 )
 def deploy(platform, endpoint, bucket_name, include_hooks, preview):
     """Deploy and host Kedro Viz on provided platform"""
@@ -275,7 +275,7 @@ def deploy(platform, endpoint, bucket_name, include_hooks, preview):
 @click.option(
     "--preview",
     default=False,
-    help="Enable/disable the preview of all datasets.",
+    help="Enable/disable preview for all the datasets.",
 )
 def build(include_hooks, preview):
     """Create build directory of local Kedro Viz instance with Kedro project data"""
@@ -386,9 +386,7 @@ def load_and_deploy_viz(
     """Loads Kedro Project data, creates a deployer and deploys to a platform"""
     try:
         load_and_populate_data(
-            Path.cwd(),
-            include_hooks=include_hooks,
-            package_name=package_name,
+            Path.cwd(), include_hooks=include_hooks, package_name=package_name
         )
 
         # Start the deployment

From 6eaaaebeca7fb4af9bb1b9263b7ef11fdc2abee1 Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 17:40:37 -0500
Subject: [PATCH 19/20] change default preview for run

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 package/kedro_viz/models/flowchart.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package/kedro_viz/models/flowchart.py b/package/kedro_viz/models/flowchart.py
index 75a759a178..ff891bc779 100644
--- a/package/kedro_viz/models/flowchart.py
+++ b/package/kedro_viz/models/flowchart.py
@@ -735,7 +735,7 @@ class DataNodeMetadata(GraphNodeMetadata):
 
     data_node: DataNode = Field(..., exclude=True)
 
-    is_datasets_previewed: ClassVar[bool] = False
+    is_datasets_previewed: ClassVar[bool] = True
 
     type: Optional[str] = Field(
         default=None, validate_default=True, description="The type of the data node"

From 8372ec3b641b65c2693972e171721d714acd742d Mon Sep 17 00:00:00 2001
From: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
Date: Thu, 16 May 2024 17:59:40 -0500
Subject: [PATCH 20/20] update release note

Signed-off-by: ravi-kumar-pilla <ravi_kumar_pilla@mckinsey.com>
---
 RELEASE.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/RELEASE.md b/RELEASE.md
index c3cd6e3edf..a868f9b2ed 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -9,6 +9,8 @@ Please follow the established format:
 
 ## Major features and improvements
 
+- Enable/disable preview for all the datasets when publishing Kedro-Viz via CLI. (#1894)
+
 ## Bug fixes and other changes
 
 - Upgrade the gitpod workspace-full to a newer version which includes both Node 18 and Python 3.11.5. (#1862)