Skip to content
This repository was archived by the owner on Jul 16, 2025. It is now read-only.

w1llow1sp/multibit-angular

Repository files navigation

Мини-приложение "Список задач" (ToDo)

Современное Angular-приложение для управления задачами с продвинутыми возможностями, уведомлениями и аналитикой.

🌐 Демо

🔗 Живое приложение: https://multibit-angular.onrender.com

🚀 Технологии

  • Angular 18+ (CLI-проект, Standalone Components)
  • TypeScript (Strict Mode)
  • HTML + CSS (Адаптивный дизайн)
  • RxJS для реактивного программирования
  • Angular Router для навигации
  • Angular Forms (Template-driven)
  • localStorage для персистентности данных

📋 Функциональность

📄 Главная страница (/tasks)

  • ✅ Список задач с полями: title, description, status
  • ✅ Кнопка "Добавить задачу" (открывает форму)
  • ✅ Кнопка "Удалить" для каждой задачи с подтверждением
  • ✅ Кнопка "Подробнее" → переход на /tasks/:id
  • Расширенный поиск и фильтрация задач
  • Сортировка по дате создания/обновления/названию/статусу
  • Skeleton Loader для плавной загрузки
  • Уведомления о действиях пользователя

➕ Добавление задачи

  • ✅ Форма с валидацией (title — обязательно, description — необязательно)
  • ✅ Статус задачи по умолчанию: "К выполнению"
  • Счетчик символов с индикацией лимитов
  • Горячие клавиши (Ctrl+Enter для сохранения, Escape для отмены)
  • Toast-уведомления об успехе/ошибках

🔍 Страница задачи (/tasks/:id)

  • ✅ Полная информация о задаче с красивым дизайном
  • ✅ Кнопка "Назад" → возврат к списку
  • Inline редактирование задачи
  • Быстрое изменение статуса через выпадающий список
  • Умное отображение дат на русском языке
  • Хлебные крошки для навигации
  • Горячие клавиши для управления

🛠 Архитектура

Компоненты

  • TaskListComponent - главная страница со списком задач
  • TaskDetailComponent - детальная страница задачи
  • AddTaskComponent - форма добавления новой задачи
  • IconComponent - переиспользуемый компонент иконок (20+ иконок)
  • SearchFilterComponent - продвинутый поиск и фильтрация
  • LoadingSkeletonComponent - красивые состояния загрузки (9 типов)

Сервисы

  • TaskService - улучшенный сервис для работы с задачами
    • CRUD операции с OperationResult<T>
    • Кеширование для производительности
    • Уведомления о действиях
    • Расширенная статистика и аналитика
    • Автосохранение каждые 30 секунд
    • Фильтрация и сортировка задач
    • Импорт/экспорт данных
    • Обработка ошибок с fallback

Пайпы

  • RussianDatePipe - интеллектуальное форматирование дат
    • Относительное время ("2 часа назад", "вчера")
    • Кеширование результатов
    • Временные зоны и кастомные форматы
    • 7 форматов: relative, short, medium, full, time, date-only, iso, custom
    • Fallback для старых браузеров

Модели

  • Task interface - структура задачи
  • TaskStatus enum - статусы задач
  • CreateTaskDto, UpdateTaskDto - DTO для операций
  • OperationResult - типизированные результаты операций
  • TaskStatistics - расширенная статистика

🎨 Дополнительные возможности

  • 🔍 Умный поиск по названию и описанию с предложениями
  • 🎛 Продвинутая фильтрация по статусу, дате, быстрые фильтры
  • 📊 Гибкая сортировка по различным критериям с сохранением состояния
  • 📱 Полностью адаптивный дизайн для всех устройств
  • 🎭 Плавные анимации и переходы между состояниями
  • 🎹 Горячие клавиши для быстрого управления
  • 🔄 Skeleton Loading для улучшенного UX
  • 🎯 Полная Accessibility (ARIA-атрибуты, клавиатурная навигация)
  • 📅 Интеллектуальные даты на русском языке
  • 💾 Автосохранение и бэкапы в localStorage
  • 🎲 Демо-данные для быстрого старта
  • 🔔 Toast-уведомления о всех действиях
  • 📈 Детальная статистика выполнения задач
  • 🎨 Цветовое кодирование статусов задач
  • 🔄 Офлайн поддержка через localStorage

🚀 Установка и запуск

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

  • Node.js (версия 18+)
  • npm или yarn
  • Angular CLI (опционально)

Клонирование репозитория

git clone https://github.com/w1llow1sp/multibit-angular.git
cd multibit-angular

Установка зависимостей

npm install

Запуск в режиме разработки

npm start
# или
ng serve

Приложение будет доступно по адресу: http://localhost:4200/

Сборка для продакшена

npm run build:prod
# или  
ng build --configuration production

Файлы будут собраны в папку dist/my-app/browser/

🌐 Деплой

Автоматический деплой на Render

Проект настроен для автоматического деплоя на Render.com:

  • Build Command: npm run build:prod
  • Publish Directory: dist/my-app/browser
  • Auto-Deploy: включен для ветки main

Деплой на другие платформы

# Netlify/Vercel
npm run build:prod
# Загрузите содержимое dist/my-app/browser/

# GitHub Pages (с Angular CLI)
ng deploy --base-href="/repository-name/"

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

src/app/
├── components/                  # Основные компоненты
│   ├── task-list/              # Список задач + фильтрация
│   ├── task-detail/            # Детали задачи + редактирование  
│   └── add-task/               # Форма добавления + валидация
├── shared/                     # Общие модули
│   ├── components/             # Переиспользуемые компоненты
│   │   ├── icon/               # Компонент иконок (20+ иконок)
│   │   ├── search-filter/      # Продвинутая фильтрация
│   │   └── loading-skeleton/   # Skeleton Loading (9 типов)
│   ├── models/                 # Модели данных + типы
│   ├── services/               # Сервисы + результаты операций
│   └── pipes/                  # Пайпы + форматирование дат
├── app.routes.ts              # Маршрутизация (Lazy Loading)
├── app.component.*            # Корневой компонент
└── main.ts                    # Точка входа

🧪 Тестирование

Запуск unit-тестов

npm test
# или
ng test

Запуск e2e-тестов

npm run e2e
# или
ng e2e

Проверка типов TypeScript

npx tsc --noEmit

📝 Использование

  1. Просмотр задач: Откройте главную страницу для просмотра списка
  2. Добавление: Нажмите "Добавить задачу" и заполните форму
  3. Поиск: Используйте умный поиск с предложениями
  4. Фильтрация: Выберите статус, период или быстрые фильтры
  5. Детали: Нажмите "Подробнее" для просмотра полной информации
  6. Редактирование: На странице деталей нажмите "Редактировать" (Ctrl+E)
  7. Статус: Быстро меняйте статус через выпадающий список
  8. Демо-данные: Приложение автоматически загружает примеры при первом запуске

Горячие клавиши

  • Ctrl+E - Начать редактирование
  • Ctrl+S - Сохранить изменения
  • Ctrl+Enter - Отправить форму
  • Escape - Отменить действие/вернуться назад

🎯 Производительность

  • Lazy Loading модулей для быстрой загрузки
  • OnPush Change Detection для оптимизации
  • Кеширование данных и результатов вычислений
  • Debounced Search для экономии ресурсов
  • Virtual Scrolling готов для больших списков
  • Gzip сжатие статических файлов

🤝 Разработка

Проект использует современные подходы Angular:

  • Standalone Components - без NgModules
  • Lazy Loading - для оптимизации загрузки
  • OnPush Change Detection - для производительности
  • TypeScript Strict Mode - для безопасности типов
  • Angular Style Guide - для структуры кода
  • RxJS Best Practices - для реактивного программирования

🔧 Технические особенности

  • Angular 18+ с новейшими возможностями
  • Строгая типизация TypeScript
  • Реактивные формы с валидацией
  • Observable-based архитектура
  • Error Boundaries для обработки ошибок
  • Progressive Enhancement для доступности

📊 Метрики

  • Bundle Size: ~280KB (gzipped ~79KB)
  • Performance Score: 95+ (Lighthouse)
  • Accessibility Score: 100 (Lighthouse)
  • Best Practices: 100 (Lighthouse)
  • TypeScript Coverage: 100%

📜 Лицензия

MIT License - свободное использование для образовательных и коммерческих целей.

👥 Контрибьютинг

  1. Fork репозитория
  2. Создайте feature branch (git checkout -b feature/AmazingFeature)
  3. Commit изменения (git commit -m 'Add some AmazingFeature')
  4. Push в branch (git push origin feature/AmazingFeature)
  5. Откройте Pull Request

Современное Angular-приложение, демонстрирующее лучшие практики разработки 2024 года

🔗 Live Demo: https://multibit-angular.onrender.com

About

Туду лист (тестовое задание)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published