diff --git a/app/client/src/components/editorComponents/DropdownComponent.tsx b/app/client/src/components/editorComponents/DropdownComponent.tsx index 03fcf42b891b..1df012af1cd2 100644 --- a/app/client/src/components/editorComponents/DropdownComponent.tsx +++ b/app/client/src/components/editorComponents/DropdownComponent.tsx @@ -38,7 +38,6 @@ const StyledMenu = styled(Menu)` `; const StyledMenuItem = styled(MenuItem)` border-radius: 0; - &&&.bp3-active { background: ${(props) => props.theme.colors.propertyPane.activeButtonText}; } @@ -46,8 +45,11 @@ const StyledMenuItem = styled(MenuItem)` class DropdownComponent extends Component { componentDidMount() { - const { input, selected } = this.props; - input && input.onChange(selected?.value); + const { input, options } = this.props; + // set selected option to first option by default + if (input && !input.value) { + input.onChange(options[0].value); + } } private newItemTextInput: HTMLInputElement | null = null; private setNewItemTextInput = (element: HTMLInputElement | null) => { @@ -111,8 +113,9 @@ class DropdownComponent extends Component { ); }; onItemSelect = (item: DropdownOption): void => { - this.props.input?.onChange(item.value); - this.props.selectHandler(item.value); + const { input, selectHandler } = this.props; + input && input.onChange(item.value); + selectHandler && selectHandler(item.value); }; renderItem: ItemRenderer = ( @@ -133,24 +136,42 @@ class DropdownComponent extends Component { /> ); }; + + getDropdownOption = (value: string): DropdownOption | undefined => { + return this.props.options.find((option) => option.value === value); + }; + getSelectedDisplayText = () => { - if (this.props.selected) { - const selectedValue = this.props.selected.value; - const item: DropdownOption | undefined = this.props.options.find( - (option) => option.value === selectedValue, - ); + const { input, selected } = this.props; + if (input) { + const item = this.getDropdownOption(input.value); + return item && item.label; + } + if (selected) { + const item = this.getDropdownOption(selected.value); return item && item.label; } return ""; }; + getActiveOption = (): DropdownOption => { + const { input, options, selected } = this.props; + const defaultActiveOption = options[0]; + + if (input) { + return this.getDropdownOption(input.value) || defaultActiveOption; + } else { + return selected || defaultActiveOption; + } + }; + render() { - const { autocomplete, input, options, selected, width } = this.props; + const { autocomplete, input, options, width } = this.props; return ( { export interface DropdownComponentProps { hasLabel?: boolean; options: DropdownOption[]; - selectHandler: (selectedValue: string) => void; + selectHandler?: (selectedValue: string) => void; selected?: DropdownOption; multiselectDisplayType?: "TAGS" | "CHECKBOXES"; checked?: boolean; diff --git a/app/client/src/components/editorComponents/form/fields/DynamicDropdownField.tsx b/app/client/src/components/editorComponents/form/fields/DynamicDropdownField.tsx index b9ad721e4f25..c0062a81b89d 100644 --- a/app/client/src/components/editorComponents/form/fields/DynamicDropdownField.tsx +++ b/app/client/src/components/editorComponents/form/fields/DynamicDropdownField.tsx @@ -9,38 +9,9 @@ interface DynamicDropdownFieldOptions { } type DynamicDropdownFieldProps = BaseFieldProps & DynamicDropdownFieldOptions; - -class DynamicDropdownField extends React.Component< - DynamicDropdownFieldProps, - { - selectedOption: DropdownOption; - } -> { - constructor(props: DynamicDropdownFieldProps) { - super(props); - this.state = { - selectedOption: this.props.options[0], - }; - } - - handleOptionSelection = (selectedValue: string): void => { - const selectedOption = this.props.options.find( - (option) => option.value === selectedValue, - ) as DropdownOption; - this.setState({ - selectedOption, - }); - }; - +class DynamicDropdownField extends React.Component { render() { - const dropdownProps = { - selectHandler: this.handleOptionSelection, - selected: this.state.selectedOption, - }; - - return ( - - ); + return ; } } diff --git a/app/client/src/pages/Editor/APIEditor/PostBodyData.tsx b/app/client/src/pages/Editor/APIEditor/PostBodyData.tsx index c8addbd68385..1ac13720c64b 100644 --- a/app/client/src/pages/Editor/APIEditor/PostBodyData.tsx +++ b/app/client/src/pages/Editor/APIEditor/PostBodyData.tsx @@ -102,7 +102,6 @@ function PostBodyData(props: Props) { key={key} label="" name="actionConfiguration.bodyFormData" - pushFields theme={theme} /> ), diff --git a/app/client/src/sagas/ApiPaneSagas.ts b/app/client/src/sagas/ApiPaneSagas.ts index 36d460f7bd93..803f2b30d0d7 100644 --- a/app/client/src/sagas/ApiPaneSagas.ts +++ b/app/client/src/sagas/ApiPaneSagas.ts @@ -185,7 +185,10 @@ function* handleUpdateBodyContentType( change(API_EDITOR_FORM_NAME, "actionConfiguration.headers", headers), ); - if (displayFormatObject.value === POST_BODY_FORMATS[1]) { + if ( + displayFormatObject.value === POST_BODY_FORMATS[1] || + displayFormatObject.value === POST_BODY_FORMATS[2] + ) { if (!bodyFormData || bodyFormData.length === 0) { yield put( change(