hunk.code_window:                 });
       }
       @Override
       public Mono<Datasource> update(String id, Datasource datasource) {
           if (id == null) {
               return Mono.error(new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.ID));
  
hunk.labels: keep keep add keep keep keep keep
hunk.after_edit:     @Override
       public Mono<Datasource> getValidDatasourceFromActionMono(ActionDTO actionDTO, AclPermission aclPermission) {
           // Global datasource requires us to fetch the datasource from DB.
           if (actionDTO.getDatasource() != null && actionDTO.getDatasource().getId() != null) {
               return this.findById(actionDTO.getDatasource().getId(), aclPermission)
                       .switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND,
                               FieldName.DATASOURCE,
                               actionDTO.getDatasource().getId())));
           }
           // This is a nested datasource. Return as is.
           return Mono.justOrEmpty(actionDTO.getDatasource());
       }
  
hunk.file_path: app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceServiceCEImpl.java
hunk.type: add
file: import { ColumnTypes, TableWidgetProps } from "widgets/TableWidgetV2/constants";
  import { get } from "lodash";
  import {
    getBasePropertyPath,
    showByColumnType,
    hideByColumnType,
  } from "../../propertyUtils";
  
  export default {
    sectionName: "Events",
    hidden: (props: TableWidgetProps, propertyPath: string) => {
      if (showByColumnType(props, propertyPath, [ColumnTypes.IMAGE], true)) {
        return false;
      } else {
        const columnType = get(props, `${propertyPath}.columnType`, "");
        const isEditable = get(props, `${propertyPath}.isEditable`, "");
        return (
          !(
            columnType === ColumnTypes.TEXT ||
            columnType === ColumnTypes.NUMBER ||
            columnType === ColumnTypes.CHECKBOX ||
            columnType === ColumnTypes.SWITCH ||
            columnType === ColumnTypes.SELECT
          ) || !isEditable
        );
      }
    },
    children: [
      // Image onClick
      {
        propertyName: "onClick",
        label: "onClick",
        controlType: "ACTION_SELECTOR",
        hidden: (props: TableWidgetProps, propertyPath: string) => {
          const baseProperty = getBasePropertyPath(propertyPath);
          const columnType = get(props, `${baseProperty}.columnType`, "");
          return columnType !== ColumnTypes.IMAGE;
        },
        dependencies: ["primaryColumns", "columnOrder"],
        isJSConvertible: true,
        isBindProperty: true,
        isTriggerProperty: true,
      },
      {
        propertyName: "onSubmit",
        label: "onSubmit",
        controlType: "ACTION_SELECTOR",
        hidden: (props: TableWidgetProps, propertyPath: string) => {
          const baseProperty = getBasePropertyPath(propertyPath);
          const columnType = get(props, `${baseProperty}.columnType`, "");
          const isEditable = get(props, `${baseProperty}.isEditable`, "");
          return (
            !(
              columnType === ColumnTypes.TEXT || columnType === ColumnTypes.NUMBER
            ) || !isEditable
          );
        },
        dependencies: ["primaryColumns", "inlineEditingSaveOption"],
        isJSConvertible: true,
        isBindProperty: true,
        isTriggerProperty: true,
      },
      {
        propertyName: "onOptionChange",
        label: "onOptionChange",
        controlType: "ACTION_SELECTOR",
        hidden: (props: TableWidgetProps, propertyPath: string) => {
          const baseProperty = getBasePropertyPath(propertyPath);
          const columnType = get(props, `${baseProperty}.columnType`, "");
          const isEditable = get(props, `${baseProperty}.isEditable`, "");
          return columnType !== ColumnTypes.SELECT || !isEditable;
        },
        dependencies: ["primaryColumns"],
        isJSConvertible: true,
        isBindProperty: true,
        isTriggerProperty: true,
      },
      {
        propertyName: "onCheckChange",
        label: (props: TableWidgetProps, propertyPath: string) => {
          const basePropertyPath = getBasePropertyPath(propertyPath);
          const columnType = get(props, `${basePropertyPath}.columnType`);
          return columnType === ColumnTypes.SWITCH ? "onChange" : "onCheckChange";
        },
        controlType: "ACTION_SELECTOR",
        hidden: (props: TableWidgetProps, propertyPath: string) => {
          return hideByColumnType(props, propertyPath, [
            ColumnTypes.CHECKBOX,
            ColumnTypes.SWITCH,
          ]);
        },
        dependencies: ["primaryColumns"],
        isJSConvertible: true,
        isBindProperty: true,
        isTriggerProperty: true,
      },
      {
        propertyName: "onFilterUpdate",
        helpText: "Trigger an action on change of filterText",
        hidden: (props: TableWidgetProps, propertyPath: string) => {
          const baseProperty = getBasePropertyPath(propertyPath);
          const columnType = get(props, `${baseProperty}.columnType`, "");
          const isEditable = get(props, `${baseProperty}.isEditable`, "");
          const serverSideFiltering = get(
            props,
            `${baseProperty}.serverSideFiltering`,
            false,
          );
          return (
            columnType !== ColumnTypes.SELECT ||
            !isEditable ||
            !serverSideFiltering
          );
        },
        dependencies: ["primaryColumns"],
        label: "onFilterUpdate",
        controlType: "ACTION_SELECTOR",
        isJSConvertible: true,
        isBindProperty: true,
        isTriggerProperty: true,
        additionalAutoComplete: () => ({
          filterText: "",
        }),
      },
    ],
  };
  