Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сделать анонсы закрываемыми #96

Closed
Tracked by #98
eugene-serb opened this issue Jan 28, 2024 · 0 comments
Closed
Tracked by #98

Сделать анонсы закрываемыми #96

eugene-serb opened this issue Jan 28, 2024 · 0 comments
Assignees

Comments

@eugene-serb
Copy link
Owner

eugene-serb commented Jan 28, 2024

Описание

У анонсов должен появиться крестик, по нажатию которого должен пропадать анонс. Анонс должно быть можно закрыть, если в параметрах анонса это указано. После закрытия анонса, анонс вновь показываться не должен.

Гипотеза решения

Должен появиться композабл, который принимает оригинальный массив с анонсами, а также, при хуке onMounted стучится в localStorage, берет оттуда информацию по анонсам и объединяет с оригинальным списком анонсов, на основании которых появляется список анонсов с отключёнными пользователем анонсами.

При складывании и взятии списка анонсов из localStorage данные должны проходить процесс сериализации и десериализации.

Изменения в компонентах.

  1. Компонент анонса AAnnouncement. Должен содержать слот для сообщения, а также кнопку крестика, если поле closable анонса истинно. По нажатии на кнопку крестика, анонс должен закрываться, но сам компонент только эмитит событие close. Логика закрытия находится в родительском компоненте. После закрытия анонса и перезагрузки страницы, анонс не должен появиться вновь.
  2. Компонент списка анонсов MAnnouncement. В этом компоненте будет подключаться композабл.

Интерфейсы

Анонс в рамках задачи изменяется, и теперь имеет следующий интерфейс:

interface Announcement {
  id: string; // Уникальный идентификатор анонса.
  enabled: boolean; // Включён ли анонс.
  message: string; // Сообщение текстом или в формате HTML.
  closable?: boolean; // Можно ли анонс закрывать нажимая на кнопку крестика.
  routes?: string[]; // Паттерны regex маршрутов, по которым надо показывать анонс.
  excludeRoutes?: string[]; // Паттерны regex, по которым не надо показывать анонс.
}

В localeStorage достаточно хранить объект со следующим интерфейсом:

interface AnnouncementSavedData {
  id: string; // Уникальный идентификатор анонса.
  enabled: boolean; // Включён ли анонс.
}
@eugene-serb eugene-serb self-assigned this Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 28, 2024
eugene-serb added a commit that referenced this issue Jan 29, 2024
eugene-serb added a commit that referenced this issue Jan 29, 2024
@eugene-serb eugene-serb mentioned this issue Jan 29, 2024
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant