Задать вопрос
@supkiler

КАк получать данные пока они еще не доконца загрузились?

import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';

import ShowMore from '../ShowMore/ShowMore';
import Spinner from '../../UI/Spinner/Spinner';
import { getTicketsTC } from '../../actions/apiActions';

import Ticket from './Ticket/Ticket';
import styles from './Tickets.module.css';

const Tickets = ({ tickets,sort, filter, error, isLoading, getTicketsTC }) => {
  const [count, setCount] = useState(5);
    console.log(tickets)
  useEffect(() => {
    
    getTicketsTC()
  }, []);
  
  
  const sortingValue = sort.filter((el) => el.checked)[0]?.value;

  const filterTicketsList = (list, filterValue) => {
    let filteredList = [];
    for (let item of filterValue) {
      if (item.value === 'direct' && item.checked)
        filteredList.push(...list.filter((i) => i.segments[0].stops.length === 0));
      if (item.value === 'one-stop' && item.checked)
        filteredList.push(...list.filter((i) => i.segments[0].stops.length === 1));
      if (item.value === 'two-stop' && item.checked)
        filteredList.push(...list.filter((i) => i.segments[0].stops.length === 2));
      if (item.value === 'three-stop' && item.checked)
        filteredList.push(...list.filter((i) => i.segments[0].stops.length === 3));
    }
    return filteredList;
  };

  const sortingTicketsList = (list, sortingValue) => {
    if (sortingValue === 'cheapest') return [...list].sort((a, b) => a.price - b.price);
    if (sortingValue === 'fastest') return [...list].sort((a, b) => a.segments[0].duration - b.segments[0].duration);
    if (sortingValue === 'optimal')
      return [...list].sort((a, b) => a.segments[0].stops.length - b.segments[0].stops.length);
  };

  const ticketsList = sortingTicketsList(filterTicketsList(tickets, filter), sortingValue).slice(0, count);

  const onClick = () => {
    setCount((prevCount) => prevCount + 5);
  };

  const ticketView =
    ticketsList.length > 0 && !isLoading && !error ? (
      <>
        <ul className={styles.list}>
          {ticketsList.map((ticket, id) => {
            return (
              <li className={styles.item} key={id}>
                <Ticket ticket={ticket} />
              </li>
            );
          })}
        </ul>
        <ShowMore onClick={onClick} />
      </>
    ) : null;

  const noMatchView =
    ticketsList.length === 0 && !error && !isLoading ? (
      <p className={styles['no-match']}>Рейсов, подходящих под заданные фильтры, не найдено</p>
    ) : null;

  const errorView = error ? <p className={styles.error}>Что-то пошло не так, пожалуйста обновите страницу</p> : null;

  const spinner = isLoading && !error ? <Spinner fontSize={60} /> : null;

  return (
    <>
      {ticketView}
      {noMatchView}
      {errorView}
      {spinner}
    </>
  );
};

const mapStateToProps = (state) => {
  return {
    tickets: state.apiReducer.tickets,
    sort: state.sortReducer,
    filter: state.filterReducer,
    error: state.apiReducer.error,
    isLoading: state.apiReducer.isLoading,
  };
};

export default connect(mapStateToProps, { getTicketsTC })(Tickets);


как получать данные пока они еще не до конца загрузились с базы данных ? нужно чтоб в tickets сохранялись новые и старые данные , ссылка на приложение авиа
  • Вопрос задан
  • 36 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы