code: def test_rdps008_unsaved_part_changed(dash_duo):
      app = Dash(__name__)
      app.layout = html.Div(
          [
              html.Button("toggle deletable", id="deletable"),
              html.Div(id="container"),
          ]
      )
  
      @app.callback(
          Output("container", "children"),
          [Input("deletable", "n_clicks")],
      )
      def toggle_deletable(n):
          if (n or 0) % 2:
              return simple_table(
                  columns=table_columns(("a", "b"), deletable=True)
              )
          return simple_table()
  
      dash_duo.start_server(app)
      check_table_names(dash_duo, ["a", "b"])
  
      rename_and_hide(dash_duo)
      check_table_names(dash_duo, [NEW_NAME])
      assert len(dash_duo.find_elements(".column-header--delete")) == 0
  
      dash_duo.find_element("#deletable").click()
      # column names still persisted when columns.deletable changed
      # because extracted name list didn't change
      check_table_names(dash_duo, [NEW_NAME])
      assert len(dash_duo.find_elements(".column-header--delete")) == 1
  
      dash_duo.find_element("#deletable").click()
      check_table_names(dash_duo, [NEW_NAME])
      assert len(dash_duo.find_elements(".column-header--delete")) == 0
  
imports: from multiprocessing import Value
  import pytest
  import time
  from selenium.webdriver.common.keys import Keys
  import dash
  from dash import Dash, Input, Output, State, MATCH, dcc, html, dash_table
  from dash_test_components import MyPersistedComponent
  from dash_test_components import MyPersistedComponentNested
label_desc: Use image node_id 14 for calling a global function with example usage: test_rdps008_unsaved_part_changed(dash_duo) and returns: simple_table, simple_table