onPress в пользовательском компоненте не закрывает автоматически <Swipeout>реагировать-родной-размах - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь использовать response-native-swipeout, чтобы кнопка «Удалить» отображалась только при перелистывании. Действие удаления будет использовать мутацию graphql (Reaction-Apollo)

Сначала я использую компонент внутри компонента в пользовательском компоненте и передаю функцию onPress, в которой происходит мутация graphql для удаления данных на сервере.

const renderItem = ({ item, index, props }: { item: any; index: number; props: Props }) => {
  const swipeoutBtns = [
    {
      text: 'Edit',
    },
    {
      text: 'Delete',
      backgroundColor: 'red',
      component: <DeleteService id={props.id} data={props.data} index={index}/>,
      onPress: () => {
        console.log('Pressed');
      },
    },
  ];
  return (
    <Swipeout rowId={index} right={swipeoutBtns} autoClose={true}>
      <ServiceItem data={item} isHeader={false} />
    </Swipeout>
  );
};

Вот мой код, использованный до замены на. Он хорошо работает в отношении мутации данных, но автоматическое закрытие не происходит.

export const DeleteService: React.SFC<Props> = (props: Props) => {
 const { id, data, index } = props;
 return (
    <Mutation mutation={MutationGQL}>
      {(deleteFunc: any) => (
        <Button
          onPress={() => {
            data.splice(index, 1);
            const inputData = data.map(
              (item) => {
                return { 
                   name: item.name, 
                   price: item.price, 
                   technician: item.technician.id };
              }
            );
            deleteFunc({ variables: { id, services: inputData } });
          }}
          title={'Delete'}
        >
          {'Delete'}
       </Button>
      )}
    </Mutation>
  );
};

А вот код после того, как я пытаюсь заменить на. Когда я нажимаю на текст «Удалить» (в пользовательском интерфейсе кнопки, предоставленном Swipeout), все еще выполняется только работа по мутации, но не происходит автозаполнение. Когда я нажимаю на внешнюю часть кнопки, происходит только автоматическое закрытие, но работа по изменению не выполняется.

        <TouchableHighlight
          onPress={() => {
            data.splice(index, 1);
            const inputData = data.map(
              (item) => {
                return { 
                   name: item.name, 
                   price: item.price, 
                   technician: item.technician.id };
              }
            );
            deleteFunc({ variables: { id, services: inputData } });
          }}
        >
          <Text>{'Delete'}</Text>
       </TouchableHighlight>

Существует ли какое-либо решение, которое позволяет выполнять оба действия при нажатии кнопки Удалить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...