nexxtway/react-rainbow

View on GitHub
src/components/ImportRecordsFlow/stepOne/index.js

Summary

Maintainability
B
4 hrs
Test Coverage
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import RenderIf from '../../RenderIf';
import getSchemaFieldOptions from '../helpers/getSchemaFieldOptions';
import StyledContainer from './styled/container';
import { StyledRadioGroup } from './styled/optionPicker';
import OptionPicker from './optionPicker';
import StyledSelect from './styled/styledSelect';

export default function StepOne(props) {
    const {
        schemaFields,
        actionOption,
        onChangeAction,
        matchField,
        onChangeMatchField,
        borderRadius,
    } = props;
    const [fieldOptions, setFieldOptions] = useState([]);
    const isMergeOption = actionOption === 'merge-records';

    useEffect(() => {
        setFieldOptions(getSchemaFieldOptions(schemaFields));
    }, [schemaFields]);

    const onChange = event => {
        onChangeAction(event.target.value);
    };

    const options = [
        {
            value: 'add-records',
            label: (
                <OptionPicker
                    name="add-records"
                    value={actionOption}
                    label="Add New records"
                    description="Allows adding all records without checking for duplicates in existing records."
                    borderRadius={borderRadius}
                />
            ),
            name: 'add-records',
            id: 'add-records',
        },
        {
            value: 'merge-records',
            label: (
                <OptionPicker
                    name="merge-records"
                    value={actionOption}
                    label="Merge exist records"
                    description="Allows you to create only unique records avoiding duplications with existing records."
                    borderRadius={borderRadius}
                />
            ),
            name: 'merge-records',
            id: 'merge-records',
        },
    ];

    return (
        <>
            <StyledContainer>
                <StyledRadioGroup onChange={onChange} value={actionOption} options={options} />
                <RenderIf isTrue={isMergeOption}>
                    <StyledSelect
                        label="Match Field"
                        labelAlignment="left"
                        placeholder="Select the Field do you want match"
                        options={fieldOptions}
                        onChange={event => onChangeMatchField(event.target.value)}
                        value={matchField}
                        borderRadius={borderRadius}
                    />
                </RenderIf>
            </StyledContainer>
        </>
    );
}

StepOne.propTypes = {
    schemaFields: PropTypes.array,
    actionOption: PropTypes.string,
    onChangeAction: PropTypes.func,
    matchField: PropTypes.string,
    onChangeMatchField: PropTypes.func,
    borderRadius: PropTypes.oneOf(['square', 'semi-square', 'semi-rounded', 'rounded']),
};

StepOne.defaultProps = {
    schemaFields: [],
    actionOption: '',
    onChangeAction: () => {},
    matchField: '',
    onChangeMatchField: () => {},
    borderRadius: 'rounded',
};