значение не может быть установлено в ожидаемом формате объекта - PullRequest
0 голосов
/ 06 января 2019

Я использую реагирующе-выбранную и редукционную форму для автозаполнения. Есть поле с именем listings_of, которое представляет собой массив данных, которые мне нужно отправить на сервер. Для этого я использовал концепцию FieldArray. Данные, которые я получаю, не имеют значения и формата меток, которые ожидают реагирования-выбора, поэтому я должен использовать реквизиты getOptionLabel и getOptionValue. Для этого я сделал следующим образом

const renderListingsOf = ({
  fields,
  data,
  meta: { touched, error, submitFailed }
}) => {
  return (
    <ul>
      <li>
        <button type="button" onClick={() => fields.push({})}>
          Add Member
        </button>
      </li>
      {fields.map((listing, index) => (
        <li key={index}>
          <button
            type="button"
            title="Remove Member"
            onClick={() => fields.remove(index)}
          />
          <Field
            name={`${listing}`}
            component={InputTextWithSearch}
            placeholder="Search..."
            options={(data && data.users.data) || []}
            getOptionLabel={option =>
              !isEmptyObject(option) && option.personal.first_name
            }
            getOptionValue={option => {
              if(!isEmptyObject(option)) {
                return {
                  _id       : option._id,
                  first_name: option.personal.first_name,
                  last_name : option.personal.last_name
                };
              }
            }}
          />
        </li>
      ))}
    </ul>
  );
};


<Column>
  <Query
    query={GET_USERS}
    variables={{
      param: {
        limit: 10
      }
    }}
  >
    {({ loading, data }) => {
      if(loading)return 'loading...';
      return (
        <InputFieldWrapper styling={styling} label="Listings of">
          <FieldArray
            name="general.general_information.listings_of"
            component={renderListingsOf}
            data={data}
          />
        </InputFieldWrapper>
      );
    }}
  </Query>
</Column>

data.users.data имеет следующий объект

[
  {
    _id: 'sdfskfjsdkjfsd',
    personal: {
      first_name: 'hello',
      last_name: 'hy'
    }
  },
  {
    _id: 'sdjfkjfdkjskfdjkfff',
    personal: {
      first_name: 'hello1',
      last_name: 'hy1'
    }
  },
]

но при отправке значения для general.general_information.listings_of должен быть массив объектов, как показано ниже

general: {
  general_information: {
  listings_of: [
      {
        _id: 'sdfskfjsdkjfsd',
        first_name: 'hello',
        last_name: 'hy'
      }
    ]
  }
}

таким образом, я попытался вернуть следующий объект из getOptionValue, но он не работает, как это

general: {
  general_information: {
  listings_of: [
      {
        _id: 'sdfskfjsdkjfsd',
        personal: {
          first_name: 'hello',
          last_name: 'hy'
        }
      }
    ]
  }
}
...