@weavix/tracker-plugin-sdk-react 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +31 -0
- package/API_REFERENCE.md +649 -0
- package/README.md +201 -0
- package/dist/index.mjs +669 -0
- package/dist/index.mjs.map +1 -0
- package/dist/tracker-react-external/src/__tests__/setup.d.ts +1 -0
- package/dist/tracker-react-external/src/__tests__/setup.d.ts.map +1 -0
- package/dist/tracker-react-external/src/components/TrackerPluginProvider.d.ts +91 -0
- package/dist/tracker-react-external/src/components/TrackerPluginProvider.d.ts.map +1 -0
- package/dist/tracker-react-external/src/index.d.ts +9 -0
- package/dist/tracker-react-external/src/index.d.ts.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# @weavix/tracker-plugin-sdk-react
|
|
2
|
+
|
|
3
|
+
React SDK for Tracker plugins (Weavix / npm). Mirrors `@yandex-data-ui/tracker-plugin-sdk-react`.
|
|
4
|
+
|
|
5
|
+
Для удобства написания плагинов:
|
|
6
|
+
|
|
7
|
+
Этот пакет предоставляет `TrackerPluginProvider`, хуки, а также реэкспортирует `trackerApi` и `hostApi` из core.
|
|
8
|
+
|
|
9
|
+
> **Для агентов и AI:** [AGENTS.md](./AGENTS.md) → [COOKBOOK](../../docs/agent/COOKBOOK.md). Core API: [tracker-plugin-external](../tracker-plugin-external/README.md).
|
|
10
|
+
|
|
11
|
+
## Установка
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @weavix/tracker-plugin-sdk-react
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Использование
|
|
18
|
+
|
|
19
|
+
### Инициализация плагина
|
|
20
|
+
|
|
21
|
+
Оберните приложение в `TrackerPluginProvider` в корне. Компонент управляет инициализацией, состояниями загрузки и ошибок, а также уведомляет хост о готовности плагина.
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { TrackerPluginProvider } from '@weavix/tracker-plugin-sdk-react';
|
|
25
|
+
import { createRoot } from 'react-dom/client';
|
|
26
|
+
import { App } from './App';
|
|
27
|
+
|
|
28
|
+
const root = createRoot(document.getElementById('root')!);
|
|
29
|
+
|
|
30
|
+
root.render(
|
|
31
|
+
<TrackerPluginProvider>
|
|
32
|
+
<App />
|
|
33
|
+
</TrackerPluginProvider>,
|
|
34
|
+
);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Получение темы, языка и контекста слота (basic)
|
|
38
|
+
|
|
39
|
+
По умолчанию в манифесте `contextLevel: "basic"` (или поле не задано) — в `slotContext` только `entityId` и опционально `entityMeta`.
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { useTrackerPluginContext } from '@weavix/tracker-plugin-sdk-react';
|
|
43
|
+
|
|
44
|
+
function MyComponent() {
|
|
45
|
+
const { theme, language, slot, slotContext } = useTrackerPluginContext();
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<div className={theme}>
|
|
49
|
+
<p>Язык: {language}</p>
|
|
50
|
+
<p>Слот: {slot}</p>
|
|
51
|
+
<p>Сущность: {slotContext?.entityId}</p>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Полный контекст слота (Issue)
|
|
58
|
+
|
|
59
|
+
Требуется `"contextLevel": "full"` в манифесте плагина.
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import { useTrackerPluginContext } from '@weavix/tracker-plugin-sdk-react';
|
|
63
|
+
|
|
64
|
+
function IssuePlugin() {
|
|
65
|
+
const { slotContext } = useTrackerPluginContext<'issue.action'>('full');
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<div>
|
|
69
|
+
<h1>Задача: {slotContext?.key}</h1>
|
|
70
|
+
<p>Версия: {slotContext?.version}</p>
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Тип `Issue` в контексте слота — из **`@weavix/tracker-core`** (реэкспорт из core). Типы ответов **`trackerApi.v3`** — из **`@weavix/tracker-api-types`**.
|
|
77
|
+
|
|
78
|
+
### Локализация
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
import { useLocalizedString } from '@weavix/tracker-plugin-sdk-react';
|
|
82
|
+
|
|
83
|
+
function MyComponent() {
|
|
84
|
+
const localize = useLocalizedString();
|
|
85
|
+
|
|
86
|
+
const field = {
|
|
87
|
+
name: { ru: 'Название', en: 'Summary' },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
return <h1>{localize(field.name)}</h1>;
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Кастомные состояния загрузки и ошибок
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
import { TrackerPluginProvider } from '@weavix/tracker-plugin-sdk-react';
|
|
98
|
+
|
|
99
|
+
root.render(
|
|
100
|
+
<TrackerPluginProvider
|
|
101
|
+
autoResize={false}
|
|
102
|
+
fallback={<div>Загрузка...</div>}
|
|
103
|
+
errorFallback={(error) => <div>Ошибка: {error.message}</div>}
|
|
104
|
+
autoNotifyReady={false}
|
|
105
|
+
>
|
|
106
|
+
<App />
|
|
107
|
+
</TrackerPluginProvider>,
|
|
108
|
+
);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Ручной вызов `notifyReady`
|
|
112
|
+
|
|
113
|
+
```tsx
|
|
114
|
+
import { TrackerPluginProvider, hostApi } from '@weavix/tracker-plugin-sdk-react';
|
|
115
|
+
import { useEffect } from 'react';
|
|
116
|
+
|
|
117
|
+
function App() {
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
initializeApp().then(() => {
|
|
120
|
+
hostApi.notifyReady();
|
|
121
|
+
});
|
|
122
|
+
}, []);
|
|
123
|
+
|
|
124
|
+
return <div>My Plugin</div>;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
root.render(
|
|
128
|
+
<TrackerPluginProvider autoNotifyReady={false}>
|
|
129
|
+
<App />
|
|
130
|
+
</TrackerPluginProvider>,
|
|
131
|
+
);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Компоненты
|
|
135
|
+
|
|
136
|
+
### `TrackerPluginProvider`
|
|
137
|
+
|
|
138
|
+
Оборачивает приложение и управляет жизненным циклом плагина.
|
|
139
|
+
|
|
140
|
+
**Props:**
|
|
141
|
+
|
|
142
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
143
|
+
|------|-----|--------------|----------|
|
|
144
|
+
| `autoResize` | `boolean` | `true` | Автоматически изменять размер контейнера при изменении контента |
|
|
145
|
+
| `fallback` | `ReactNode` | `<PluginLoader />` | Отображается во время инициализации |
|
|
146
|
+
| `errorFallback` | `(error: Error) => ReactNode` | `<PluginError />` | Отображается при ошибке инициализации |
|
|
147
|
+
| `autoNotifyReady` | `boolean` | `true` | Автоматически уведомлять хост о готовности плагина |
|
|
148
|
+
|
|
149
|
+
## Хуки
|
|
150
|
+
|
|
151
|
+
### `useTrackerPluginContext<TSlot>(level?)`
|
|
152
|
+
|
|
153
|
+
Возвращает тему, язык, имя слота и контекст слота.
|
|
154
|
+
|
|
155
|
+
- **`level: 'basic'`** (по умолчанию) — `slotContext`: `{ entityId, entityMeta? }`
|
|
156
|
+
- **`level: 'full'`** — полный контекст слота (`Issue` для `issue.action`); нужен `contextLevel: "full"` в манифесте
|
|
157
|
+
|
|
158
|
+
**Возвращает:** `{ theme, language, slot, slotContext, registerHandler }`
|
|
159
|
+
|
|
160
|
+
Подробнее: [API Reference — useTrackerPluginContext](./API_REFERENCE.md#usetrackerplugincontext).
|
|
161
|
+
|
|
162
|
+
### `useToaster()`
|
|
163
|
+
|
|
164
|
+
Хук для показа toast-уведомлений в хост-приложении.
|
|
165
|
+
|
|
166
|
+
> **Permission:** `"toaster"` в `permissions.ui` манифеста.
|
|
167
|
+
|
|
168
|
+
```tsx
|
|
169
|
+
import { useToaster } from '@weavix/tracker-plugin-sdk-react';
|
|
170
|
+
|
|
171
|
+
function MyComponent() {
|
|
172
|
+
const toaster = useToaster();
|
|
173
|
+
|
|
174
|
+
const handleSave = async () => {
|
|
175
|
+
await saveData();
|
|
176
|
+
toaster.add({ title: 'Сохранено', theme: 'success' });
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
return <button onClick={handleSave}>Сохранить</button>;
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Параметры `add(options)` — в [README tracker-core](../tracker-plugin-external/README.md#тосты-toast-notifications).
|
|
184
|
+
|
|
185
|
+
### `useLocalizedString(fallbackLanguage?)`
|
|
186
|
+
|
|
187
|
+
Возвращает `(value: LocalizedString) => string` для текущего языка из контекста.
|
|
188
|
+
|
|
189
|
+
## Полная документация
|
|
190
|
+
|
|
191
|
+
📖 [AGENTS.md](./AGENTS.md) — вход для агентов.
|
|
192
|
+
|
|
193
|
+
📖 [COOKBOOK](../../docs/agent/COOKBOOK.md) — рецепты.
|
|
194
|
+
|
|
195
|
+
📖 [API Reference](./API_REFERENCE.md) — Provider, хуки, contextLevel.
|
|
196
|
+
|
|
197
|
+
📖 [README tracker-core](../tracker-plugin-external/README.md) — `trackerApi`, `hostApi`, типы, ошибки.
|
|
198
|
+
|
|
199
|
+
## Лицензия
|
|
200
|
+
|
|
201
|
+
UNLICENSED
|