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

<Meta title='@dxtmisha/ru/functional/Functions/getIndexForRender - Генерация ключа для рендеринга'/>

# `getIndexForRender`

Утилитарная функция, используемая для генерации уникального ключа (`key`) компонента. Ключ формируется **аддитивно**: все идентифицированные части (включая имя компонента) соединяются через точку.

### Параметры:
- `name: string | any` — Имя или тег компонента (база ключа).
- `props?: T` — Свойства компонента (используются для извлечения `index`, `class` и `id`).
- `index?: string` — Необязательный внешний индекс.

### Возвращает:
`string | undefined` — Сгенерированный составной ключ или `undefined`, если ключ не может быть сгенерирован.

### Примеры генерации:

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

// 1. Только имя
getIndexForRender('li') 
// => '.li'

// 2. Имя + внешний индекс
getIndexForRender('div', {}, 'row-1') 
// => '.div.row-1'

// 3. Имя + индекс из props + класс + id
getIndexForRender('button', { 
  index: 'primary', 
  class: 'btn-large', 
  id: 'submit-01' 
}) 
// => '.button.primary.btn-large.submit-01'

// 4. Полный набор (внешний аргумент + всё из props)
getIndexForRender('span', { 
  index: 'p-idx', 
  class: 'text-red', 
  id: 'id-99' 
}, 'arg-idx') 
// => '.span.arg-idx.p-idx.text-red.id-99'

// 5. Пустой случай
getIndexForRender(undefined)
// => undefined
```

### Логика сборки ключа

Ключ собирается по цепочке:
1.  **`.name`** (если `name` является строкой)
2.  `+ .index` (если передан аргумент `index`)
3.  `+ .props.index` (если есть в свойствах и является строкой)
4.  `+ .className` (если есть в свойствах)
5.  `+ .props.id` (if present in properties)
