import React from "react"; import { ActionPayload, ActionType } from "constants/ActionConstants"; import { DropdownOption } from "widgets/DropdownWidget"; import { MenuItem, Button } from "@blueprintjs/core"; import styled, { theme } from "constants/DefaultTheme"; import { CloseButton } from "components/designSystems/blueprint/CloseButton"; import { StyledDropDown } from "./StyledControls"; import { IItemRendererProps } from "@blueprintjs/select"; import { InputText } from "./InputTextControl"; const DEFAULT_ACTION_TYPE = "Select Action Type" as ActionType; const DEFAULT_ACTION_LABEL = "Select Action"; enum ACTION_RESOLUTION_TYPE { SUCCESS, ERROR, } const renderItem = (option: DropdownOption, itemProps: IItemRendererProps) => { if (!itemProps.modifiers.matchesPredicate) { return null; } return ( ); }; const ActionSelectorDropDown = styled(StyledDropDown)` &&&&& { display: block; margin-bottom: 2px; width: 100%; .bp3-popover-target { width: 100%; .bp3-button { justify-content: flex-start; width: 100%; .bp3-icon { order: 2; margin-left: auto; } } } } `; const ActionSelectorDropDownContainer = styled.div` position: relative; `; interface ActionSelectorProps { allActions: DropdownOption[]; actionTypeOptions: DropdownOption[]; selectedActionType: ActionType; selectedActionLabel: string; label: string; identifier: string; labelEditable?: boolean; actionResolutionType: ACTION_RESOLUTION_TYPE | string; updateActions: (actions: ActionPayload[], key?: string) => void; updateLabel?: (label: string, key: string) => void; actions: ActionPayload[]; } export default function ActionSelector(props: ActionSelectorProps) { function clearActionSelectorType( actionResolutionType: ACTION_RESOLUTION_TYPE | string, ) { let actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; switch (actionResolutionType) { case props.identifier: actionPayloads = []; break; case ACTION_RESOLUTION_TYPE.SUCCESS: actionPayload.onSuccess = undefined; break; case ACTION_RESOLUTION_TYPE.ERROR: actionPayload.onError = undefined; break; } props.updateActions(actionPayloads, props.identifier); } function clearActionSelectorLabel( actionResolutionType: ACTION_RESOLUTION_TYPE | string, ) { let actionPayloads = props.actions.slice(); const actionPayload = (props.actions[0] as any) as ActionPayload; switch (actionResolutionType) { case props.identifier: actionPayloads = []; actionPayloads.push(({ ...actionPayload, actionId: undefined, onSuccess: undefined, onError: undefined, } as any) as ActionPayload); break; case ACTION_RESOLUTION_TYPE.SUCCESS: const successActionPayload = actionPayload.onSuccess !== undefined ? actionPayload.onSuccess[0] : undefined; const successActionPayloads = []; successActionPayloads.push({ ...successActionPayload, actionId: "", }); actionPayload.onSuccess = successActionPayloads as ActionPayload[]; break; case ACTION_RESOLUTION_TYPE.ERROR: const errorActionPayload = actionPayload.onError !== undefined ? actionPayload.onError[0] : undefined; const errorActionPayloads = []; errorActionPayloads.push({ ...errorActionPayload, actionId: "", }); actionPayload.onError = errorActionPayloads as ActionPayload[]; break; } props.updateActions(actionPayloads, props.identifier); } const onActionTypeSelect = (item: DropdownOption) => { const actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; if (actionPayload && actionPayload.actionType !== item.value) { actionPayload.actionId = ""; actionPayload.onError = undefined; actionPayload.onSuccess = undefined; actionPayload.actionType = item.value as ActionType; } else { const actionPayload = { actionType: item.value } as ActionPayload; actionPayloads.push(actionPayload); } props.updateActions(actionPayloads, props.identifier); }; const onSuccessActionTypeSelect = (item: DropdownOption) => { const actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; if (actionPayload) { const successActionPayloads: ActionPayload[] = actionPayload.onSuccess || []; const successActionPayload = successActionPayloads[0]; if (successActionPayload) { successActionPayload.actionId = ""; successActionPayload.actionType = item.value as ActionType; } else { const successActionPayload = { actionType: item.value, } as ActionPayload; successActionPayloads.push(successActionPayload); } actionPayload.onSuccess = successActionPayloads; } props.updateActions(actionPayloads, props.identifier); }; const onErrorActionTypeSelect = (item: DropdownOption) => { const actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; if (actionPayload) { const errorActionPayloads: ActionPayload[] = actionPayload.onError || []; const errorActionPayload = errorActionPayloads[0]; if (errorActionPayload) { errorActionPayload.actionId = ""; errorActionPayload.actionType = item.value as ActionType; } else { const errorActionPayload = { actionType: item.value, } as ActionPayload; errorActionPayloads.push(errorActionPayload); } actionPayload.onError = errorActionPayloads; } props.updateActions(actionPayloads, props.identifier); }; const onActionSelect = (item: DropdownOption): void => { const actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; actionPayload.actionId = item.value; props.updateActions(actionPayloads, props.identifier); }; const onSuccessActionSelect = (item: DropdownOption): void => { const actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; const successActionPayloads: ActionPayload[] = actionPayload.onSuccess as ActionPayload[]; const successActionPayload = successActionPayloads[0]; successActionPayload.actionId = item.value; actionPayload.onSuccess = successActionPayloads; props.updateActions(actionPayloads, props.identifier); }; const onErrorActionSelect = (item: DropdownOption): void => { const actionPayloads: ActionPayload[] = props.actions ? props.actions.slice() : []; const actionPayload = actionPayloads[0]; const errorActionPayloads: ActionPayload[] = actionPayload.onError as ActionPayload[]; const errorActionPayload = errorActionPayloads[0]; errorActionPayload.actionId = item.value; actionPayload.onError = errorActionPayloads; props.updateActions(actionPayloads, props.identifier); }; let onTypeSelect = onActionTypeSelect; switch (props.actionResolutionType) { case ACTION_RESOLUTION_TYPE.SUCCESS: onTypeSelect = onSuccessActionTypeSelect; break; case ACTION_RESOLUTION_TYPE.ERROR: onTypeSelect = onErrorActionTypeSelect; break; } let onActionSelectHandler = onActionSelect; switch (props.actionResolutionType) { case ACTION_RESOLUTION_TYPE.SUCCESS: onActionSelectHandler = onSuccessActionSelect; break; case ACTION_RESOLUTION_TYPE.ERROR: onActionSelectHandler = onErrorActionSelect; break; } const showActionTypeRemoveButton = props.selectedActionType && props.selectedActionType !== DEFAULT_ACTION_TYPE; const showActionLabelRemoveButton = props.selectedActionLabel && props.selectedActionLabel !== DEFAULT_ACTION_LABEL; const onTextChange = ( event: React.ChangeEvent | string, ) => { let value = event; if (typeof event !== "string") { value = event.target.value; } !!props.updateLabel && props.updateLabel((value as any) as string, props.identifier); // props.updateProperty(this.props.propertyName, value); }; return (
} > {
); }