import React from "react"; import BaseControl, { ControlProps } from "./BaseControl"; import { StyledInputGroup, StyledPropertyPaneButton } from "./StyledControls"; import styled from "constants/DefaultTheme"; import { FormIcons } from "icons/FormIcons"; import { ControlIcons } from "icons/ControlIcons"; import { AnyStyledComponent } from "styled-components"; import { generateReactKey } from "utils/generators"; import { DroppableComponent } from "../designSystems/appsmith/DraggableListComponent"; const StyledDeleteIcon = styled(FormIcons.DELETE_ICON as AnyStyledComponent)` padding: 0; position: relative; margin-left: 15px; cursor: pointer; `; const StyledDragIcon = styled( ControlIcons.DRAGGABLE_CONTROL as AnyStyledComponent, )` padding: 0; position: relative; margin-left: 15px; cursor: move; svg { path { fill: ${props => props.theme.colors.paneSectionLabel}; } } `; const StyledPropertyPaneButtonWrapper = styled.div` display: flex; width: 100%; justify-content: flex-end; margin-top: 10px; `; const ItemWrapper = styled.div` display: flex; justify-content: flex-start; `; const TabsWrapper = styled.div` width: 100%; display: flex; flex-direction: column; `; const StyledOptionControlInputGroup = styled(StyledInputGroup)` margin-right: 2px; &&& { input { border: none; color: ${props => props.theme.colors.textOnDarkBG}; background: ${props => props.theme.colors.paneInputBG}; &:focus { border: none; color: ${props => props.theme.colors.textOnDarkBG}; background: ${props => props.theme.colors.paneInputBG}; } } } `; type RenderComponentProps = { index: number; item: { label: string; }; deleteOption: (index: number) => void; updateOption: (index: number, value: string) => void; }; function TabControlComponent(props: RenderComponentProps) { const { deleteOption, updateOption, item, index } = props; return ( ) => { updateOption(index, event.target.value); }} defaultValue={item.label} /> { deleteOption(index); }} /> ); } class TabControl extends BaseControl { updateItems = (items: object[]) => { this.updateProperty(this.props.propertyName, items); }; render() { const tabs: Array<{ id: string; label: string; }> = this.props.propertyValue || [{ id: "" }]; return ( ); } deleteOption = (index: number) => { const tabs: object[] = this.props.propertyValue.slice(); tabs.splice(index, 1); this.updateProperty(this.props.propertyName, tabs); }; updateOption = (index: number, updatedLabel: string) => { const tabs: Array<{ id: string; label: string; }> = this.props.propertyValue; this.updateProperty( this.props.propertyName, tabs.map((tab, tabIndex) => { if (index === tabIndex) { tab.label = updatedLabel; } return tab; }), ); }; addOption = () => { const tabs: Array<{ id: string; label: string; }> = this.props.propertyValue ? this.props.propertyValue.slice() : []; const newTabId = generateReactKey({ prefix: "tab" }); tabs.push({ id: newTabId, label: `Tab ${tabs.length + 1}` }); this.updateProperty(this.props.propertyName, tabs); }; static getControlType() { return "TABS_INPUT"; } } export default TabControl;