/*! * Copyright (c) Microsoft. All rights reserved. * Licensed under the MIT license. See LICENSE file in the project. */ import type { InputColumnArgs, InputColumnListArgs, OutputColumnArgs, } from '@datashaper/schema' import { isInputColumnListStep, isInputColumnStep, isOutputColumnStep, NodeInput, } from '@datashaper/workflow' import { MultiDropdown } from '@essex/components' import { TextField } from '@fluentui/react' import { memo, useMemo } from 'react' import { useColumnNames } from '../../hooks/columns/useColumnNames.js' import { useSimpleDropdownOptions } from '../../hooks/fluent/useSimpleDropdownOptions.js' import { useWorkflowDataTable } from '../../hooks/index.js' import { TableColumnDropdown } from '../controls/TableColumnDropdown/TableColumnDropdown.js' import { dropdownStyles } from '../styles.js' import { getSimpleDropdownOptions, useColumnFilter, useDefaultOutputNameInitially, useInputColumnChanged, useInputColumnListAllChanged, useInputColumnListChanged, useOutputColumnChanged, useStepArgsComponent, useStepChangeHandler, } from './StepForm.hooks.js' import { Container } from './StepForm.styles.js' import type { StepFormProps } from './StepForm.types.js' import { getInputNode } from '../../util.js' /** * Let's us render the Steps in a loop while memoizing all the functions */ export const StepForm: React.FC = memo(function StepForm({ step: s, output, workflow: g, metadata, index, onChange, onChangeOutput: changeOutput, hideInputColumn, }) { /* Current Table Selection */ const tableId = getInputNode(s, NodeInput.Source) const table = useWorkflowDataTable(tableId, g) /* Column Options */ const columns = useColumnNames(table, useColumnFilter(s, table)) const columnOptions = useSimpleDropdownOptions(columns) /* The step args component */ const StepArgs = useStepArgsComponent(s) /* Change Events */ const change = useStepChangeHandler(index, onChange) const onInputColumnChange = useInputColumnChanged(s, change, table) const onInputColumnListChange = useInputColumnListChanged(s, change) const onInputColumnListChangeAll = useInputColumnListAllChanged(s, change) const onOutputColumnChange = useOutputColumnChanged(s, change) /* Side Effects */ useDefaultOutputNameInitially(s, output, changeOutput) const name = useMemo(() => { const parts = s.verb.split('.') return parts[parts.length - 1] }, [s.verb]) return StepArgs == null ? null : ( {/* Input Column List */} {isInputColumnListStep(s) ? ( ) : null} {/* Input Column */} {!hideInputColumn && isInputColumnStep(s) ? ( ) : null} {/* Output Column */} {isOutputColumnStep(s) ? ( ) : null} ) })