import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/CookieBlock - Глобальный контроль Cookie'/>

# Класс CookieBlock

Статический служебный класс, служащий глобальным "аварийным выключателем" для изменений куки в DOM. Предоставляет простое логическое состояние, которое другие классы, в частности `Cookie`, проверяют перед попыткой записи в `document.cookie`.

Включает тесную интеграцию с `ServerStorage` для изоляции состояния между запросами в SSR окружении.

## Ключевые особенности

- **Глобальная истина** — единая точка конфигурации для остановки операций с куки в масштабах всего приложения
- **Соответствие конфиденциальности** — крайне полезно для реализации баннеров "Согласие на использование файлов cookie"
- **SSR-совместимость** — использует `ServerStorage` для надежного поддержания заблокированного состояния в изолированном контексте каждого запроса

## Статические методы

### Действие

#### `set`

Включает или отключает возможности записи куки в DOM. При значении `true` все операции записи будут сохранять данные только в памяти, не затрагивая `document.cookie`.

**Параметры:**
- `value: boolean` — `true` для блокировки записи куки, `false` для разрешения

**Возвращает:** `void`

### Проверка

- `get(): boolean` — Возвращает текущий статус блокировки. `true`, если запись куки заблокирована

## Примеры

### Базовое использование

```typescript
import { CookieBlock } from '@dxtmisha/functional'

// Блокировать все будущие записи куки в DOM
CookieBlock.set(true)

if (CookieBlock.get()) {
  console.log('Запись куки в настоящее время заблокирована')
}

// Разрешить записи куки в DOM
CookieBlock.set(false)
```

### Реализация баннера согласия

```typescript
import { CookieBlock, Cookie } from '@dxtmisha/functional'

// При загрузке приложения блокируем cookie
CookieBlock.set(true)

// После принятия пользователем
function onCookieConsentAccepted() {
  CookieBlock.set(false)
  
  // Теперь можно устанавливать cookie
  const theme = new Cookie('theme')
  theme.set('dark')
}
```

## Как это взаимодействует с `Cookie`

Базовый класс `Cookie` строго следит за этой блокировкой. Если `CookieBlock.get()` возвращает `true`:

1. Логика приложения может технически вызывать `cookieInstance.set('value')`
2. Экземпляр `Cookie` обновит свое *внутреннее хранилище в памяти* новым значением
3. Экземпляр `Cookie` **молча откажется** от фактической записи в DOM `document.cookie = ...`

Это гарантирует, что приложение не сломается от неопределенных чтений в памяти, при этом строго соблюдая настройки браузера по сохранению на диск.
