An open API service indexing awesome lists of open source software.

https://github.com/notacat1/card-management-app

This is a React app that displays popular images from Unsplash. It features infinite scrolling, the ability to like/unlike images, filter liked images, and view image details on a separate page.
https://github.com/notacat1/card-management-app

jest react react-router redux sass

Last synced: 4 months ago
JSON representation

This is a React app that displays popular images from Unsplash. It features infinite scrolling, the ability to like/unlike images, filter liked images, and view image details on a separate page.

Awesome Lists containing this project

README

          

# Просмотр карточек Unsplash

![React](https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB)
![React Router](https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white)
![Redux](https://img.shields.io/badge/redux-%23593d88.svg?style=for-the-badge&logo=redux&logoColor=white)
![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
![SASS](https://img.shields.io/badge/SASS-hotpink.svg?style=for-the-badge&logo=SASS&logoColor=white)
![Jest](https://img.shields.io/badge/-jest-%23C21325?style=for-the-badge&logo=jest&logoColor=white)

Это React-приложение, отображающее популярные изображения из Unsplash. Приложение поддерживает бесконечную прокрутку, возможность ставить и отменять лайки, фильтрацию по залайканным изображениям и просмотр деталей изображения на отдельной странице.

## Оглавление

- [Просмотр Карточек Unsplash](#просмотр-карточек-unsplash)
- [Оглавление](#оглавление)
- [Особенности](#особенности)
- [Начало работы](#начало-работы)
- [Предварительные требования](#предварительные-требования)
- [Установка](#установка)
- [Структура проекта](#структура-проекта)
- [Доступные скрипты](#доступные-скрипты)
- [API сервис](#api-сервис)
- [Основные функции](#основные-функции)
- [Redux хранилище](#redux-хранилище)
- [Основные действия](#основные-действия)
- [Запуск тестов](#запуск-тестов)
- [Используемые технологии](#используемые-технологии)
- [Вклад](#вклад)
- [Благодарности](#благодарности)

## Особенности

- **Отображение популярных изображений** из Unsplash.
- **Бесконечная прокрутка** для загрузки новых изображений по мере прокрутки страницы.
- Возможность **ставить и отменять лайки** на изображениях.
- **Фильтрация** для отображения только залайканных изображений.
- **Просмотр деталей** изображения на отдельной странице.
- **Адаптивный дизайн**, обеспечивающий корректное отображение на всех устройствах.

## Начало работы

### Предварительные требования

Перед началом убедитесь, что у вас установлены:

- [Node.js](https://nodejs.org/en/download/) (версии 14 или выше)
- npm (устанавливается вместе с Node.js) или [Yarn](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable)

### Установка

1. **Клонируйте репозиторий:**

```bash
git clone https://github.com/NotACat1/Card-Management-App.git
cd unsplash-card-viewer
```

2. **Установите зависимости:**

```bash
# для npm
npm install

# для yarn
yarn install
```

3. **Создайте файл `.env`** в корневой директории и добавьте ваш API-ключ Unsplash:

```bash
REACT_APP_UNSPLASH_ACCESS_KEY=your_unsplash_access_key
```

4. **Запустите сервер разработки:**

```bash
npm start
```

5. **Откройте [http://localhost:3000](http://localhost:3000)** в вашем браузере для просмотра приложения.

## Структура проекта

Проект организован следующим образом:

```bash
src/
├── assets/ # Медиафайлы, такие как изображения и иконки
├── components/ # Повторно используемые React-компоненты
│ ├── App/ # Основной компонент приложения
│ ├── Card/ # Компонент карточки изображения
│ ├── CardDetail/ # Компонент отображения деталей карточки
│ ├── CardList/ # Компонент списка карточек
│ ├── DeleteButton/ # Кнопка удаления карточки
│ ├── DownloadButton/ # Кнопка скачивания изображения
│ ├── Filter/ # Компонент фильтрации карточек
│ ├── Footer/ # Подвал приложения
│ ├── Header/ # Заголовок приложения
│ ├── LikeButton/ # Кнопка лайка
│ ├── ScrollToTopButton/ # Кнопка прокрутки вверх
│ └── ThemeSwitcher/ # Переключатель темы
├── data/ # Статические данные и константы
├── fonts/ # Шрифты, используемые в приложении
├── pages/ # Страницы приложения
│ ├── card/ # Страница с деталями карточки
│ ├── error/ # Страница с ошибками
│ ├── list/ # Страница со списком карточек
│ └── root/ # Корневая страница
├── services/ # API сервис для взаимодействия с Unsplash
│ └── unsplashService.ts
├── store/ # Конфигурация и слайсы Redux-хранилища
│ ├── cards/ # Слайс для управления состоянием карточек
│ └── index.ts # Основная настройка хранилища
├── styles/ # Глобальные стили и SCSS переменные
├── types/ # Типы данных и интерфейсы TypeScript
└── index.tsx # Точка входа приложения
```

## Доступные скрипты

В директории проекта доступны следующие команды:

```json
"scripts": {
"prepare": "husky install",
"lint-staged": "lint-staged",
"start": "craco start",
"build": "craco build",
"test": "jest",
"eject": "react-scripts eject",
"predeploy": "npm run build",
"deploy": "gh-pages -d build"
}
```

- **`npm start`**: запускает приложение в режиме разработки.
- **`npm run build`**: создает оптимизированную сборку приложения.
- **`npm run test`**: запускает тесты с использованием Jest.
- **`npm run deploy`**: деплоит приложение на GitHub Pages.

## API сервис

Приложение использует Unsplash API для получения популярных изображений. API сервис реализован в `src/services/unsplashService.ts` с использованием Axios.

### Основные функции

- **fetchCards**: получает список популярных изображений.
- **fetchCardById**: получает детали конкретного изображения по его ID.

## Redux хранилище

Состояние приложения управляется с помощью Redux Toolkit. Хранилище настроено в `src/store/index.ts`, а состояние, связанное с карточками, обрабатывается в `src/store/cards/cardsSlice.ts`.

### Основные действия

- **fetchCards**: загружает и сохраняет список карточек.
- **fetchCardById**: загружает детали карточки по ID.
- **likeCard**: отмечает карточку как "лайкнутую".
- **unlikeCard**: снимает отметку "лайкнутая" с карточки.
- **deleteCard**: удаляет карточку из хранилища.

### Запуск тестов

```bash
npm test
```

Тесты запускаются с использованием Jest, обеспечивая проверку основных функций приложения.

## Используемые технологии

- **React**: для построения пользовательского интерфейса.
- **Redux Toolkit**: для управления состоянием приложения.
- **TypeScript**: для типизации кода.
- **Axios**: для работы с HTTP запросами.
- **Sass/SCSS**: для стилизации компонентов.
- **Jest**: для тестирования кода.

## Вклад

Вклад приветствуется! Если у вас есть идеи или улучшения, создайте `pull request`.

## Благодарности

- [Unsplash](https://unsplash.com) за предоставление API для изображений.

Этот Readme-файл должен предоставить вам четкое представление о структуре, установке и функциях приложения. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться!