PromucFlow_constructor/app/client/src/components/formControls/DropDownControl.test.tsx

622 lines
16 KiB
TypeScript
Raw Normal View History

import React from "react";
import { render, screen, waitFor, fireEvent } from "test/testUtils";
import DropDownControl from "./DropDownControl";
import { reduxForm } from "redux-form";
import "@testing-library/jest-dom";
import { Provider } from "react-redux";
import configureStore from "redux-mock-store";
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
import type { SelectOptionProps } from "@appsmith/ads";
import type { ReduxAction } from "actions/ReduxActionTypes";
const mockStore = configureStore([]);
const initialValues = {
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
actionConfiguration: { testPath: ["option1", "option2"] },
};
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function TestForm(props: any) {
return <div>{props.children}</div>;
}
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
const ReduxFormDecorator = reduxForm({ form: "TestForm", initialValues })(
TestForm,
);
const mockOptions = [
{ label: "Option 1", value: "option1", children: "Option 1" },
{ label: "Option 2", value: "option2", children: "Option 2" },
{ label: "Option 3", value: "option3", children: "Option 3" },
];
const mockAction = {
type: "API_ACTION",
name: "Test API Action",
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
datasource: { id: "datasource1", name: "Datasource 1" },
actionConfiguration: {
body: "",
headers: [],
testPath: ["option1", "option2"],
},
};
const dropDownProps = {
options: mockOptions,
placeholderText: "Select Columns",
isMultiSelect: true,
configProperty: "actionConfiguration.testPath",
controlType: "PROJECTION",
propertyValue: "",
label: "Columns",
id: "column",
formName: "",
isValid: true,
formValues: mockAction,
isLoading: false,
chore: update select component (#38954) ![CleanShot 2025-02-03 at 13 51 45](https://github.com/user-attachments/assets/4c7a7a67-c1fc-4fe7-afbb-2342aea27fcc) Few known bugs: 1. --The placeholder value is cleared when the user is searching. This is happening cause we are using hack to put search into dropdown and it is conflicting with native behavior of rc-select-- [](https://github.com/user-attachments/assets/4d40607f-c9c9-4060-9086-cc9d8dc49553) /ok-to-test tags="@tag.All" <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a grouped dropdown with checkboxes for multi-select, making option organization more intuitive. - **Enhancements** - Upgraded dropdown search with auto-focus and dynamic filtering. - Improved tag display with responsive limits and an updated "info" style. - Added configuration options to control the number of visible tags. - **Documentation** - Expanded examples to showcase the new grouped and checkbox-enhanced dropdown features. - **Style** - Refined styling and animations for dropdown states, ensuring a fluid and consistent user experience. - **Bug Fixes** - Adjusted selectors in tests to improve interaction with dropdowns, enhancing test reliability. <!-- end of auto-generated comment: release notes by coderabbit.ai --> <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13173050535> > Commit: 33634093ddb9b6d699d8f9c50297c4245bea21fb > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13173050535&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 06 Feb 2025 07:34:34 UTC <!-- end of auto-generated comment: Cypress test results -->
2025-02-06 07:40:25 +00:00
maxTagCount: 3,
};
describe("DropDownControl", () => {
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let store: any;
beforeEach(() => {
store = mockStore({
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
form: { TestForm: { values: initialValues } },
appState: {},
});
});
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
afterEach(() => {
jest.clearAllMocks();
});
it("should renders dropdownControl and options properly", async () => {
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...dropDownProps} />
</ReduxFormDecorator>
</Provider>,
);
const dropdownSelect = await waitFor(async () =>
screen.findByTestId("t--dropdown-actionConfiguration.testPath"),
);
expect(dropdownSelect).toBeInTheDocument();
const options = screen.getAllByText(/Optio.../);
const optionCount = options.length;
chore: add blank line eslint rule (#36369) ## Description Added ESLint rule to force blank lines between statements. Fixes #`Issue Number` _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!CAUTION] > 🔴 🔴 🔴 Some tests have failed. > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/10924926728> > Commit: 34f57714a1575ee04e94e03cbcaf95e57a96c86c > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10924926728&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail" target="_blank">Cypress dashboard</a>. > Tags: @tag.All > Spec: > The following are new failures, please fix them before merging the PR: <ol> > <li>cypress/e2e/Regression/ClientSide/Anvil/AnvilModal_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCheckboxGroupWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCurrencyInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilIconButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInlineButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilParagraphWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilPhoneInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilStatsWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchGroupWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilTableWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilToolbarButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilZoneSectionWidgetSnapshot_spec.ts</ol> > <a href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master" target="_blank">List of identified flaky tests</a>. > <hr>Wed, 18 Sep 2024 16:33:36 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No --------- Co-authored-by: Valera Melnikov <valera@appsmith.com>
2024-09-18 16:35:28 +00:00
expect(optionCount).toBe(2);
});
it("should clear all selected options", async () => {
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...dropDownProps} />
</ReduxFormDecorator>
</Provider>,
);
const clearAllButton = document.querySelector(".rc-select-clear");
expect(clearAllButton).toBeInTheDocument();
fireEvent.click(clearAllButton!);
await waitFor(() => {
const options = screen.queryAllByText(/Option.../);
chore: add blank line eslint rule (#36369) ## Description Added ESLint rule to force blank lines between statements. Fixes #`Issue Number` _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!CAUTION] > 🔴 🔴 🔴 Some tests have failed. > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/10924926728> > Commit: 34f57714a1575ee04e94e03cbcaf95e57a96c86c > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10924926728&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail" target="_blank">Cypress dashboard</a>. > Tags: @tag.All > Spec: > The following are new failures, please fix them before merging the PR: <ol> > <li>cypress/e2e/Regression/ClientSide/Anvil/AnvilModal_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCheckboxGroupWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCurrencyInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilIconButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInlineButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilParagraphWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilPhoneInputWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilStatsWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchGroupWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilTableWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilToolbarButtonWidgetSnapshot_spec.ts > <li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilZoneSectionWidgetSnapshot_spec.ts</ol> > <a href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master" target="_blank">List of identified flaky tests</a>. > <hr>Wed, 18 Sep 2024 16:33:36 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No --------- Co-authored-by: Valera Melnikov <valera@appsmith.com>
2024-09-18 16:35:28 +00:00
expect(options.length).toBe(0);
});
});
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
it("should handle single select mode correctly", async () => {
const singleSelectProps = {
...dropDownProps,
isMultiSelect: false,
configProperty: "actionConfiguration.singlePath",
inputIcon: undefined,
showArrow: undefined,
};
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...singleSelectProps} />
</ReduxFormDecorator>
</Provider>,
);
// Wait for component to be fully rendered
const dropdownSelect = await screen.findByTestId(
"t--dropdown-actionConfiguration.singlePath",
);
// Open dropdown
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
// Wait for dropdown to be visible
await waitFor(() => {
expect(screen.getByRole("listbox")).toBeVisible();
});
// Select Option 1
const option = screen.getByRole("option", { name: "Option 1" });
fireEvent.click(option);
// Wait for selection to be applied and verify
await waitFor(() => {
// Check if the selection is displayed
const selectedItem = screen.getByText("Option 1", {
selector: ".rc-select-selection-item",
});
expect(selectedItem).toBeInTheDocument();
});
// Check if the option is marked as selected
const selectedOption = screen.getByRole("option", { name: "Option 1" });
expect(selectedOption).toHaveClass("rc-select-item-option-selected");
// Check that other options are not selected
const options = screen.getAllByRole("option");
const selectedCount = options.filter((opt: SelectOptionProps) =>
opt.classList.contains("rc-select-item-option-selected"),
).length;
expect(selectedCount).toBe(1);
});
it("should handle multi-select mode correctly", async () => {
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...dropDownProps} />
</ReduxFormDecorator>
</Provider>,
);
const dropdownSelect = await screen.findByTestId(
"t--dropdown-actionConfiguration.testPath",
);
// Open dropdown
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
await waitFor(() => {
expect(screen.getByRole("listbox")).toBeVisible();
});
// Verify initial selections (Option 1 and Option 2 are selected from initialValues)
const initialSelectedOptions = screen
.getAllByRole("option")
.filter((opt) => opt.getAttribute("aria-selected") === "true");
expect(initialSelectedOptions).toHaveLength(2);
});
it("should show placeholder if no option is selected", async () => {
const updatedProps = { ...dropDownProps, options: [] };
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...updatedProps} />
</ReduxFormDecorator>
</Provider>,
);
expect(screen.getByText("Select Columns")).toBeInTheDocument();
});
});
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
describe("DropDownControl grouping tests", () => {
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let store: any;
const formName = "GroupingTestForm";
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
beforeEach(() => {
store = mockStore({
form: {
[formName]: {
values: { actionConfiguration: { testPath: { data: "" } } },
},
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
},
});
});
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
it("should render grouped options correctly", async () => {
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
const mockOptionGroupConfig = {
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
group1: { label: "Group 1", children: [] },
group2: { label: "Group 2", children: [] },
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
};
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
const mockOptions = [
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
{
label: "Option 1",
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
value: "1",
optionGroupType: "group1",
children: [],
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
},
{
label: "Option 2",
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
value: "2",
children: [],
// No group - should go to Others
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
},
{
label: "Option 3",
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
value: "3",
optionGroupType: "group2",
children: [],
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
},
];
const props = {
...dropDownProps,
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
options: mockOptions,
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
optionGroupConfig: mockOptionGroupConfig,
};
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...props} />
</ReduxFormDecorator>
</Provider>,
);
// 1. Grab the dropdown container
const dropdownSelect = await waitFor(async () =>
screen.findByTestId("t--dropdown-actionConfiguration.testPath"),
);
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
// Open dropdown
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
// Verify group headers are present
await waitFor(() => {
expect(screen.getByText("Group 1")).toBeInTheDocument();
});
expect(screen.getByText("Group 2")).toBeInTheDocument();
expect(screen.getByText("Others")).toBeInTheDocument();
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
// Verify options are in correct groups
const group1Option = screen.getByText("Option 1");
const group2Option = screen.getByText("Option 3");
const othersOption = screen.getByText("Option 2");
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
feat: select widget lazy loading (#38867) ## Description This PR adds capability of server side pagination to the dropdown form component. There is another PR in works to add server side search. To ensure both grouping and pagination work correctly, the dropdown control component is refactored by adding memoization and fixing some rendering issues. Fixes #38079 ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13306719132> > Commit: 01f464953b487f2f066af6fe53ae2c79577b7fd3 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13306719132&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 13 Feb 2025 12:58:12 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enabled dynamic pagination for form options, allowing users to load additional choices smoothly. - Enhanced dropdown controls for both single and multi-select modes with improved responsiveness and clearer grouping. - Improved form evaluation processes for a more seamless and performant user experience. - Introduced new functionality for fetching paginated dynamic values, enhancing the overall data handling experience. - Added new function to retrieve conditional output based on form configuration. - **Bug Fixes** - Improved error handling and logging for dynamic value fetching processes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-02-13 13:19:44 +00:00
expect(group1Option).toBeInTheDocument();
expect(group2Option).toBeInTheDocument();
expect(othersOption).toBeInTheDocument();
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
});
it("should append group identifiers to values when appendGroupIdentifierToValue is true", async () => {
const mockOptionGroupConfig = {
group1: { label: "Group 1", children: [] },
group2: { label: "Group 2", children: [] },
};
const mockOptions = [
{
label: "Option 1",
value: "1",
optionGroupType: "group1",
children: [],
},
{
label: "Option 2",
value: "2",
children: [],
},
{
label: "Option 3",
value: "3",
optionGroupType: "group2",
children: [],
},
];
const props = {
...dropDownProps,
options: mockOptions,
optionGroupConfig: mockOptionGroupConfig,
appendGroupIdentifierToValue: true,
isMultiSelect: false,
};
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...props} />
</ReduxFormDecorator>
</Provider>,
);
// Open dropdown
const dropdownSelect = await waitFor(async () =>
screen.findByTestId("t--dropdown-actionConfiguration.testPath"),
);
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
// Select Option 1 (from group1)
const option1 = screen.getByText("Option 1");
fireEvent.click(option1);
const actions = store.getActions();
expect(actions[actions.length - 1].payload).toEqual("group1:1");
// // Select Option 2 (from others group)
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
const option2 = screen.getByText("Option 2");
fireEvent.click(option2);
expect(actions[actions.length - 1].payload).toEqual("others:2");
});
it("should handle multi-select with group identifiers correctly", async () => {
const mockOptionGroupConfig = {
group1: { label: "Group 1", children: [] },
group2: { label: "Group 2", children: [] },
};
const mockOptions = [
{
label: "Option 1",
value: "1",
optionGroupType: "group1",
children: [],
},
{
label: "Option 2",
value: "2",
children: [],
},
{
label: "Option 3",
value: "3",
optionGroupType: "group2",
children: [],
},
];
const props = {
...dropDownProps,
options: mockOptions,
optionGroupConfig: mockOptionGroupConfig,
appendGroupIdentifierToValue: true,
isMultiSelect: true,
};
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...props} />
</ReduxFormDecorator>
</Provider>,
);
// Open dropdown
const dropdownSelect = await waitFor(async () =>
screen.findByTestId("t--dropdown-actionConfiguration.testPath"),
);
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
// Select multiple options
const option1 = screen.getByText("Option 1");
const option2 = screen.getByText("Option 2");
fireEvent.click(option1);
fireEvent.click(option2);
// Verify the stored values include group identifiers
let actions = store.getActions();
// store the values of last 2 actions in a variable
const lastTwoActions = actions
.slice(-2)
.map((action: ReduxAction<unknown>) => action.payload);
expect(lastTwoActions).toEqual([["group1:1"], ["others:2"]]);
// Test removal of an option
const selectedOption1 = screen.getByText("Option 1");
fireEvent.click(selectedOption1);
actions = store.getActions();
// Verify the option was removed correctly
expect(actions[actions.length - 1].payload).toEqual(["group1:1"]);
});
it("should handle edge cases with appendGroupIdentifierToValue", async () => {
const mockOptionGroupConfig = {
group1: { label: "Group 1", children: [] },
};
const mockOptions = [
{
label: "Option with colon",
value: "value:with:colon",
optionGroupType: "group1",
children: [],
},
{
label: "Option without group",
value: "no_group_value",
children: [],
},
];
const props = {
...dropDownProps,
options: mockOptions,
optionGroupConfig: mockOptionGroupConfig,
appendGroupIdentifierToValue: true,
isMultiSelect: true,
};
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...props} />
</ReduxFormDecorator>
</Provider>,
);
// Open dropdown
const dropdownSelect = await waitFor(async () =>
screen.findByTestId("t--dropdown-actionConfiguration.testPath"),
);
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
// Select both options
const option1 = screen.getByText("Option with colon");
const option2 = screen.getByText("Option without group");
fireEvent.click(option1);
fireEvent.click(option2);
// Verify the stored values handle special cases correctly
let actions = store.getActions();
const lastTwoActions = actions
.slice(-2)
.map((action: ReduxAction<unknown>) => action.payload);
expect(lastTwoActions).toEqual([
["group1:value:with:colon"],
["others:no_group_value"],
]);
// Test removal of an option
const selectedOption1 = screen.getByText("Option with colon");
fireEvent.click(selectedOption1);
actions = store.getActions();
expect(actions[actions.length - 1].payload).toEqual([
"group1:value:with:colon",
]);
});
feat: select widget grouping (#38686) ## Description This PR adds grouping capabilities to our dropdown control component (using `rc-select`). Specifically: - Introduces an `optionGroupConfig` object that maps each group key to a label and collects relevant options under it. - Defaults any ungrouped options to the “Others” group if no matching group is found. - Includes refactoring to maintain backward compatibility for non-grouped dropdown usage. Additionally: - New tests are added to validate grouped dropdown behaviour. - Existing multi-select and clear-all functionality is unaffected. Sample config for the grouping to be enabled ``` { "label": "Command", "description": "Choose method you would like to use to query the database", "configProperty": "actionConfiguration.formData.command.data", "controlType": "DROP_DOWN", "initialValue": "FIND", "options": [ { "label": "Find document(s)", "value": "FIND", "optionGroupType": "testGrp1" }, { "label": "Insert document(s)", "value": "INSERT", "optionGroupType": "testGrp1" }, { "label": "Update document(s)", "value": "UPDATE", "optionGroupType": "testGrp2" }, { "label": "Delete document(s)", "value": "DELETE", "optionGroupType": "testGrp2" }, { "label": "Count", "value": "COUNT", "optionGroupType": "testGrp2" }, { "label": "Distinct", "value": "DISTINCT", "optionGroupType": "testGrp3" }, { "label": "Aggregate", "value": "AGGREGATE", "optionGroupType": "testGrp3" }, { "label": "Raw", "value": "RAW", "optionGroupType": "testGrp3" } ], "optionGroupConfig": { "testGrp1": { "label": "Group 1", "children": [] }, "testGrp2": { "label": "Group 2", "children": [] }, "testGrp3": { "label": "Group 3", "children": [] } } } ``` Fixes #38079 ## Automation /ok-to-test tags="@tag.Sanity, @tag.IDE" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13059919318> > Commit: f08c31b3e5d81318144e3a71d652526fd1b01a00 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13059919318&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Sanity, @tag.IDE` > Spec: > <hr>Thu, 30 Jan 2025 20:22:48 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Added option grouping functionality to the Select component. - Introduced the ability to organize dropdown options into labeled groups. - Enhanced dropdown visual hierarchy with group-based option display. - **Improvements** - Updated Select component type definitions to support option grouping. - Added CSS styles for improved presentation of option groups and grouped options. - **Testing** - Added comprehensive test coverage for dropdown option grouping functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-31 07:06:42 +00:00
});
fix: enable allow clear options for single select dropdown (#39213) ## Description This PR enables allow clear option for single select dropdowns in the UQI. Fixes #39087 _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.Datasource" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13284739979> > Commit: 36b6c9419e92d1fb3915f039d922b3211e89fc8a > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13284739979&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Datasource` > Spec: > <hr>Wed, 12 Feb 2025 12:41:11 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced the dropdown control to allow users to clear their selection even in single-select mode, offering greater flexibility in interaction. - **Tests** - Expanded test coverage with new tests ensuring that the clear selection feature works correctly in single-select scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: “sneha122” <“sneha@appsmith.com”>
2025-02-12 12:53:57 +00:00
describe("DropdownControl Single select tests", () => {
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let store: any;
const initialValuesSingleSelect = {
actionConfiguration: {
testPath: "option1",
},
};
const mockActionSingleSelect = {
type: "API_ACTION",
name: "Test API Action",
datasource: {
id: "datasource1",
name: "Datasource 1",
},
actionConfiguration: {
body: "",
headers: [],
testPath: "option1",
},
};
const dropDownPropsSingleSelect = {
options: mockOptions,
placeholderText: "Select Columns",
configProperty: "actionConfiguration.testPath",
controlType: "PROJECTION",
propertyValue: "",
label: "Columns",
id: "column",
formName: "",
isValid: true,
formValues: mockActionSingleSelect,
isLoading: false,
maxTagCount: 3,
isAllowClear: true,
fix: UQI dropdown search issue fixed (#39330) ## Description This PR fixes search issues with dropdown UQI control. Steps to reproduce: 1. Create zendesk datasource 2. Create a query 3. Check commands dropdown 4. Try searching for "Create ticket" 5. It should show the relevant options Fixes #39164 _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13389048508> > Commit: 261eb4369682e2e65fae19101403002debd90c91 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13389048508&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Tue, 18 Feb 2025 12:17:03 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced the dropdown control by introducing a search capability. Users can now type keywords to filter options based on their labels, making it easier and faster to locate the desired option while preserving the existing functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: “sneha122” <“sneha@appsmith.com”>
2025-02-18 12:35:04 +00:00
isSearchable: true,
fix: enable allow clear options for single select dropdown (#39213) ## Description This PR enables allow clear option for single select dropdowns in the UQI. Fixes #39087 _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.Datasource" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13284739979> > Commit: 36b6c9419e92d1fb3915f039d922b3211e89fc8a > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13284739979&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Datasource` > Spec: > <hr>Wed, 12 Feb 2025 12:41:11 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced the dropdown control to allow users to clear their selection even in single-select mode, offering greater flexibility in interaction. - **Tests** - Expanded test coverage with new tests ensuring that the clear selection feature works correctly in single-select scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: “sneha122” <“sneha@appsmith.com”>
2025-02-12 12:53:57 +00:00
};
beforeEach(() => {
store = mockStore({
form: {
TestForm: {
values: initialValuesSingleSelect,
},
},
appState: {},
});
});
it("should clear selected option", async () => {
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...dropDownPropsSingleSelect} />
</ReduxFormDecorator>
</Provider>,
);
const clearAllButton = document.querySelector(".rc-select-clear");
expect(clearAllButton).toBeInTheDocument();
fireEvent.click(clearAllButton!);
await waitFor(() => {
const options = screen.queryAllByText(/Option.../);
expect(options.length).toBe(0);
});
});
fix: UQI dropdown search issue fixed (#39330) ## Description This PR fixes search issues with dropdown UQI control. Steps to reproduce: 1. Create zendesk datasource 2. Create a query 3. Check commands dropdown 4. Try searching for "Create ticket" 5. It should show the relevant options Fixes #39164 _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13389048508> > Commit: 261eb4369682e2e65fae19101403002debd90c91 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13389048508&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Tue, 18 Feb 2025 12:17:03 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced the dropdown control by introducing a search capability. Users can now type keywords to filter options based on their labels, making it easier and faster to locate the desired option while preserving the existing functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: “sneha122” <“sneha@appsmith.com”>
2025-02-18 12:35:04 +00:00
it("should filter options when searching", async () => {
render(
<Provider store={store}>
<ReduxFormDecorator>
<DropDownControl {...dropDownPropsSingleSelect} />
</ReduxFormDecorator>
</Provider>,
);
// Find and click the dropdown to open it
const dropdownSelect = await screen.findByTestId(
"t--dropdown-actionConfiguration.testPath",
);
fireEvent.mouseDown(dropdownSelect.querySelector(".rc-select-selector")!);
// Find the search input and type "Option 2"
const searchInput = screen.getByPlaceholderText("Type to search...");
fireEvent.change(searchInput, { target: { value: "Option 2" } });
// Get all visible options
const visibleOptions = screen.getAllByRole("option");
// // Should only show one option
expect(visibleOptions).toHaveLength(1);
// The visible option should be "Option 1"
expect(visibleOptions[0]).toHaveTextContent("Option 2");
});
fix: enable allow clear options for single select dropdown (#39213) ## Description This PR enables allow clear option for single select dropdowns in the UQI. Fixes #39087 _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.Datasource" ### :mag: Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/13284739979> > Commit: 36b6c9419e92d1fb3915f039d922b3211e89fc8a > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=13284739979&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.Datasource` > Spec: > <hr>Wed, 12 Feb 2025 12:41:11 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced the dropdown control to allow users to clear their selection even in single-select mode, offering greater flexibility in interaction. - **Tests** - Expanded test coverage with new tests ensuring that the clear selection feature works correctly in single-select scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: “sneha122” <“sneha@appsmith.com”>
2025-02-12 12:53:57 +00:00
});