def METHOD_NAME(cls, slc: Slice) -> Slice:
    clz = cls(slc.params)
    form_data_bak = copy.deepcopy(clz.data)
    clz._pre_action()
    clz._migrate()
    clz._post_action()
    # viz_type depends on the migration and should be set after its execution
    # because a source viz can be mapped to different target viz types
    slc.viz_type = clz.target_viz_type
    # only backup params
    slc.params = json.dumps({**clz.data, FORM_DATA_BAK_FIELD_NAME: form_data_bak})
    if "form_data" in (query_context := try_load_json(slc.query_context)):
        query_context["form_data"] = clz.data
        slc.query_context = json.dumps(query_context)
    return slc