hunk.code_window: @EqualsAndHashCode
   public class DslActionDTO {
       String id;
       String name;
       PluginType pluginType;
       Set<String> jsonPathKeys;
       Integer timeoutInMillisecond = DEFAULT_ACTION_EXECUTION_TIMEOUT_MS;
   }
hunk.labels: keep keep keep add keep keep keep keep
hunk.after_edit:     String collectionId;
       Boolean clientSideExecution;
  
hunk.file_path: app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/DslActionDTO.java
hunk.type: add
file: import { get } from "lodash";
  import { WidgetProps } from "widgets/BaseWidget";
  import { ListWidgetProps } from "../constants";
  
  import { ValidationTypes } from "constants/WidgetValidation";
  import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory";
  import { EVAL_VALUE_PATH } from "utils/DynamicBindingUtils";
  import { AutocompleteDataType } from "utils/autocomplete/TernServer";
  
  const PropertyPaneConfig = [
    {
      sectionName: "General",
      children: [
        {
          helpText: "Takes in an array of objects to display items in the list.",
          propertyName: "listData",
          label: "Items",
          controlType: "INPUT_TEXT",
          placeholderText: '[{ "name": "John" }]',
          inputType: "ARRAY",
          isBindProperty: true,
          isTriggerProperty: false,
          validation: { type: ValidationTypes.ARRAY },
          evaluationSubstitutionType: EvaluationSubstitutionType.SMART_SUBSTITUTE,
        },
        {
          propertyName: "backgroundColor",
          label: "Background",
          controlType: "COLOR_PICKER",
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: false,
          validation: {
            type: ValidationTypes.TEXT,
            params: {
              expected: {
                type: "Color name | hex code",
                example: "#FFFFFF",
                autocompleteDataType: AutocompleteDataType.STRING,
              },
            },
          },
        },
        {
          propertyName: "itemBackgroundColor",
          label: "Item Background",
          controlType: "COLOR_PICKER",
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: false,
          defaultValue: "#FFFFFF",
          validation: {
            type: ValidationTypes.TEXT,
            params: {
              expected: {
                type: "Color name | hex code",
                example: "#FFFFFF",
                autocompleteDataType: AutocompleteDataType.STRING,
              },
            },
          },
        },
  
        {
          helpText: "Spacing between items in Pixels",
          placeholderText: "0",
          propertyName: "gridGap",
          label: "Item Spacing (px)",
          controlType: "INPUT_TEXT",
          isBindProperty: true,
          isTriggerProperty: false,
          inputType: "INTEGER",
          validation: { type: ValidationTypes.NUMBER, params: { min: -8 } },
        },
        {
          helpText:
            "Bind the List.pageNo property in your API and call it onPageChange",
          propertyName: "serverSidePaginationEnabled",
          label: "Server Side Pagination",
          controlType: "SWITCH",
          isBindProperty: false,
          isTriggerProperty: false,
        },
        {
          propertyName: "isVisible",
          label: "Visible",
          helpText: "Controls the visibility of the widget",
          controlType: "SWITCH",
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: false,
          validation: {
            type: ValidationTypes.BOOLEAN,
          },
        },
        {
          propertyName: "animateLoading",
          label: "Animate Loading",
          controlType: "SWITCH",
          helpText: "Controls the loading of the widget",
          defaultValue: true,
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: false,
          validation: { type: ValidationTypes.BOOLEAN },
        },
      ],
    },
    {
      sectionName: "Events",
      children: [
        {
          helpText: "Triggers an action when a grid list item is clicked",
          propertyName: "onListItemClick",
          label: "onListItemClick",
          controlType: "ACTION_SELECTOR",
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: true,
          additionalAutoComplete: (props: ListWidgetProps<WidgetProps>) => {
            let items = get(props, `${EVAL_VALUE_PATH}.listData`, []);
  
            if (Array.isArray(items)) {
              items = items.filter(Boolean);
            } else {
              items = [];
            }
  
            return {
              currentItem: Object.assign(
                {},
                ...Object.keys(get(items, "0", {})).map((key) => ({
                  [key]: "",
                })),
              ),
            };
          },
          dependencies: ["listData"],
        },
        {
          helpText: "Triggers an action when a list page is changed",
          propertyName: "onPageChange",
          label: "onPageChange",
          controlType: "ACTION_SELECTOR",
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: true,
          hidden: (props: ListWidgetProps<WidgetProps>) =>
            !props.serverSidePaginationEnabled,
          dependencies: ["serverSidePaginationEnabled"],
        },
        {
          helpText: "Triggers an action when a list page size is changed",
          propertyName: "onPageSizeChange",
          label: "onPageSizeChange",
          controlType: "ACTION_SELECTOR",
          isJSConvertible: true,
          isBindProperty: true,
          isTriggerProperty: true,
          hidden: (props: ListWidgetProps<WidgetProps>) =>
            !props.serverSidePaginationEnabled,
          dependencies: ["serverSidePaginationEnabled"],
        },
      ],
    },
  ];
  
  export { PropertyPaneConfig as default };
  