@weavix/tracker-plugin-sdk-react 0.0.26 → 0.0.28
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/API_REFERENCE.md
CHANGED
|
@@ -410,6 +410,7 @@ interface BasicTrackerPluginContextValue<TSlot extends keyof SlotContextMap = ke
|
|
|
410
410
|
language: string | undefined;
|
|
411
411
|
service: string;
|
|
412
412
|
userId?: string;
|
|
413
|
+
orgId?: string;
|
|
413
414
|
isYateam?: boolean;
|
|
414
415
|
isOrbita?: boolean;
|
|
415
416
|
origin: string;
|
|
@@ -457,6 +458,7 @@ interface FullTrackerPluginContextValue<TSlot extends keyof SlotContextMap = key
|
|
|
457
458
|
language: string | undefined;
|
|
458
459
|
service: string;
|
|
459
460
|
userId?: string;
|
|
461
|
+
orgId?: string;
|
|
460
462
|
isYateam?: boolean;
|
|
461
463
|
isOrbita?: boolean;
|
|
462
464
|
origin: string;
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @weavix/tracker-plugin-sdk-react
|
|
2
2
|
|
|
3
|
-
React SDK for Tracker plugins (Weavix / npm).
|
|
3
|
+
React SDK for Tracker plugins (Weavix / npm).
|
|
4
4
|
|
|
5
5
|
Для удобства написания плагинов:
|
|
6
6
|
|
|
@@ -139,12 +139,12 @@ root.render(
|
|
|
139
139
|
|
|
140
140
|
**Props:**
|
|
141
141
|
|
|
142
|
-
| Prop
|
|
143
|
-
|
|
144
|
-
| `autoResize`
|
|
145
|
-
| `fallback`
|
|
146
|
-
| `errorFallback`
|
|
147
|
-
| `autoNotifyReady` | `boolean`
|
|
142
|
+
| Prop | Тип | По умолчанию | Описание |
|
|
143
|
+
| ----------------- | ----------------------------- | ------------------ | --------------------------------------------------------------- |
|
|
144
|
+
| `autoResize` | `boolean` | `true` | Автоматически изменять размер контейнера при изменении контента |
|
|
145
|
+
| `fallback` | `ReactNode` | `<PluginLoader />` | Отображается во время инициализации |
|
|
146
|
+
| `errorFallback` | `(error: Error) => ReactNode` | `<PluginError />` | Отображается при ошибке инициализации |
|
|
147
|
+
| `autoNotifyReady` | `boolean` | `true` | Автоматически уведомлять хост о готовности плагина |
|
|
148
148
|
|
|
149
149
|
## Хуки
|
|
150
150
|
|
|
@@ -19,6 +19,8 @@ export interface BasicTrackerPluginContextValue<TSlot extends TrackerSlotKey = T
|
|
|
19
19
|
service: string;
|
|
20
20
|
/** Id пользователя. */
|
|
21
21
|
userId?: string;
|
|
22
|
+
/** Id организации. */
|
|
23
|
+
orgId?: string;
|
|
22
24
|
/** Это ятим? */
|
|
23
25
|
isYateam?: boolean;
|
|
24
26
|
/** Включена ли Орбита */
|
|
@@ -51,6 +53,8 @@ export interface FullTrackerPluginContextValue<TSlot extends TrackerSlotKey = Tr
|
|
|
51
53
|
service: string;
|
|
52
54
|
/** Id пользователя. */
|
|
53
55
|
userId?: string;
|
|
56
|
+
/** Id организации. */
|
|
57
|
+
orgId?: string;
|
|
54
58
|
/** Это ятим? */
|
|
55
59
|
isYateam?: boolean;
|
|
56
60
|
/** Включена ли Орбита */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackerPluginProvider.d.ts","sourceRoot":"","sources":["../../src/components/TrackerPluginProvider.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TrackerPluginProvider.d.ts","sourceRoot":"","sources":["../../src/components/TrackerPluginProvider.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/components/TrackerPluginProvider.tsx"],"sourcesContent":["import {\n type BasicContext,\n type BasicPluginContextValue,\n type ContextLevel,\n type FullPluginContextValue,\n PluginProvider,\n type PluginProviderProps,\n type Theme,\n usePluginContext,\n} from '@weavix/sdk-react';\nimport type {\n GetDataResultMap,\n HandlerFunction,\n Handlers,\n SlotContextMap,\n} from '@weavix/tracker-plugin-sdk';\nimport { type ReactNode, createContext, useContext, useMemo } from 'react';\n\n/** Строковые ключи слота (для индексных типов без `symbol` в keyof). */\ntype TrackerSlotKey = Extract<keyof SlotContextMap, string>;\n\n/**\n * Сигнатура registerHandler: для 'getData' тип handler зависит от слота (GetDataResultMap[TSlot]).\n */\nexport type RegisterHandlerFunction<TSlot extends TrackerSlotKey> = <TKey extends keyof Handlers>(\n methodName: TKey,\n handler: TKey extends 'getData'\n ? TSlot extends keyof GetDataResultMap\n ? () => GetDataResultMap[TSlot]\n : never\n : HandlerFunction<TKey>,\n) => void;\n\n/**\n * Контекст плагина при contextLevel = 'basic'.\n * slotContext содержит только entityId.\n */\nexport interface BasicTrackerPluginContextValue<TSlot extends TrackerSlotKey = TrackerSlotKey> {\n /** Текущая тема хоста. Обновляется реактивно при получении theme.changed. */\n theme: Theme | undefined;\n /** Текущий язык хоста. Обновляется реактивно при получении language.changed. */\n language: string | undefined;\n /** Сервис, в котором открылся плагин. */\n service: string;\n /** Id пользователя. */\n userId?: string;\n /** Это ятим? */\n isYateam?: boolean;\n /** Включена ли Орбита */\n isOrbita?: boolean;\n /** Origin родительского окна (хоста). */\n origin: string;\n /** Слот, в котором открыт плагин. */\n slot: TSlot;\n /** URL внутри плагина. */\n innerUrl: string;\n /** Query-параметры плагина */\n queryParams: Record<string, string>;\n /** Контекст страницы — только entityId при basic уровне. */\n slotContext: BasicContext | undefined;\n /** Регистрация обработчика для ответов на запросы хоста. */\n registerHandler: RegisterHandlerFunction<TSlot>;\n /** Уровень контекста, объявленный в манифесте. */\n contextLevel: 'basic';\n}\n\n/**\n * Контекст плагина при contextLevel = 'full'.\n * slotContext содержит полный объект слота (Issue, TriggerContext и т.д.).\n */\nexport interface FullTrackerPluginContextValue<TSlot extends TrackerSlotKey = TrackerSlotKey> {\n /** Текущая тема хоста. Обновляется реактивно при получении theme.changed. */\n theme: Theme | undefined;\n /** Текущий язык хоста. Обновляется реактивно при получении language.changed. */\n language: string | undefined;\n /** Сервис, в котором открылся плагин. */\n service: string;\n /** Id пользователя. */\n userId?: string;\n /** Это ятим? */\n isYateam?: boolean;\n /** Включена ли Орбита */\n isOrbita?: boolean;\n /** Origin родительского окна (хоста). */\n origin: string;\n /** Слот, в котором открыт плагин. */\n slot: TSlot;\n /** URL внутри плагина. */\n innerUrl: string;\n /** Query-параметры плагина */\n queryParams: Record<string, string>;\n /** Контекст страницы — полный объект слота при full уровне. */\n slotContext: SlotContextMap[TSlot] | undefined;\n /** Регистрация обработчика для ответов на запросы хоста. */\n registerHandler: RegisterHandlerFunction<TSlot>;\n /** Уровень контекста, объявленный в манифесте. */\n contextLevel: 'full';\n}\n\ntype TrackerServiceContextValue = {\n registerHandler: RegisterHandlerFunction<TrackerSlotKey>;\n};\n\nconst TrackerServiceContext = createContext<TrackerServiceContextValue | null>(null);\n\n/**\n * Сервисный слой поверх {@link PluginProvider}: типизированный под Tracker `registerHandler`\n * и обязательная обёртка для {@link useTrackerPluginContext}.\n */\nfunction TrackerPluginServiceLayer({ children }: { children: ReactNode }) {\n const { registerHandler: baseRegisterHandler } = usePluginContext('basic');\n\n const typedRegisterHandler = useMemo<RegisterHandlerFunction<TrackerSlotKey>>(() => {\n return ((methodName, handler) =>\n baseRegisterHandler(\n methodName as string,\n handler as (...args: unknown[]) => unknown,\n )) as RegisterHandlerFunction<TrackerSlotKey>;\n }, [baseRegisterHandler]);\n\n const value = useMemo(\n () => ({ registerHandler: typedRegisterHandler }),\n [typedRegisterHandler],\n );\n\n return (\n <TrackerServiceContext.Provider value={value}>{children}</TrackerServiceContext.Provider>\n );\n}\n\n/**\n * Обёртка над стандартным {@link PluginProvider}: инициализация и общий контракт хоста в SDK,\n * поверх — трекер-специфичный контекст (типизированный `registerHandler` и проверка для\n * {@link useTrackerPluginContext}).\n */\nexport function TrackerPluginProvider(props: PluginProviderProps) {\n return (\n <PluginProvider {...props}>\n <TrackerPluginServiceLayer>{props.children}</TrackerPluginServiceLayer>\n </PluginProvider>\n );\n}\n\nexport type TrackerPluginProviderProps = PluginProviderProps;\n\n/**\n * Хук для получения темы, языка, слота и контекста слота из TrackerPluginProvider.\n */\nexport function useTrackerPluginContext(): {\n [K in TrackerSlotKey]: BasicTrackerPluginContextValue<K>;\n}[TrackerSlotKey];\nexport function useTrackerPluginContext(level: 'basic'): {\n [K in TrackerSlotKey]: BasicTrackerPluginContextValue<K>;\n}[TrackerSlotKey];\nexport function useTrackerPluginContext(level: 'full'): {\n [K in TrackerSlotKey]: FullTrackerPluginContextValue<K>;\n}[TrackerSlotKey];\nexport function useTrackerPluginContext<TSlot extends TrackerSlotKey>(\n level?: 'basic',\n): BasicTrackerPluginContextValue<TSlot>;\nexport function useTrackerPluginContext<TSlot extends TrackerSlotKey>(\n level: 'full',\n): FullTrackerPluginContextValue<TSlot>;\nexport function useTrackerPluginContext(\n level: ContextLevel = 'basic',\n): BasicTrackerPluginContextValue | FullTrackerPluginContextValue {\n const base = usePluginContext(level as 'basic') as\n | BasicPluginContextValue\n | FullPluginContextValue;\n const service = useContext(TrackerServiceContext);\n if (!service) {\n throw new Error(\n 'useTrackerPluginContext must be used within TrackerPluginProvider (Tracker service layer). ' +\n 'Use PluginProvider only with usePluginContext, or wrap the app with TrackerPluginProvider.',\n );\n }\n\n const slot = base.slot as TrackerSlotKey;\n\n if (level === 'full') {\n return {\n ...base,\n slot,\n registerHandler: service.registerHandler as RegisterHandlerFunction<typeof slot>,\n slotContext: base.slotContext as SlotContextMap[typeof slot] | undefined,\n } as FullTrackerPluginContextValue;\n }\n\n return {\n ...base,\n slot,\n registerHandler: service.registerHandler as RegisterHandlerFunction<typeof slot>,\n } as BasicTrackerPluginContextValue;\n}\n\nexport { isInternalUrl } from '@weavix/sdk-react';\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/components/TrackerPluginProvider.tsx"],"sourcesContent":["import {\n type BasicContext,\n type BasicPluginContextValue,\n type ContextLevel,\n type FullPluginContextValue,\n PluginProvider,\n type PluginProviderProps,\n type Theme,\n usePluginContext,\n} from '@weavix/sdk-react';\nimport type {\n GetDataResultMap,\n HandlerFunction,\n Handlers,\n SlotContextMap,\n} from '@weavix/tracker-plugin-sdk';\nimport { type ReactNode, createContext, useContext, useMemo } from 'react';\n\n/** Строковые ключи слота (для индексных типов без `symbol` в keyof). */\ntype TrackerSlotKey = Extract<keyof SlotContextMap, string>;\n\n/**\n * Сигнатура registerHandler: для 'getData' тип handler зависит от слота (GetDataResultMap[TSlot]).\n */\nexport type RegisterHandlerFunction<TSlot extends TrackerSlotKey> = <TKey extends keyof Handlers>(\n methodName: TKey,\n handler: TKey extends 'getData'\n ? TSlot extends keyof GetDataResultMap\n ? () => GetDataResultMap[TSlot]\n : never\n : HandlerFunction<TKey>,\n) => void;\n\n/**\n * Контекст плагина при contextLevel = 'basic'.\n * slotContext содержит только entityId.\n */\nexport interface BasicTrackerPluginContextValue<TSlot extends TrackerSlotKey = TrackerSlotKey> {\n /** Текущая тема хоста. Обновляется реактивно при получении theme.changed. */\n theme: Theme | undefined;\n /** Текущий язык хоста. Обновляется реактивно при получении language.changed. */\n language: string | undefined;\n /** Сервис, в котором открылся плагин. */\n service: string;\n /** Id пользователя. */\n userId?: string;\n /** Id организации. */\n orgId?: string;\n /** Это ятим? */\n isYateam?: boolean;\n /** Включена ли Орбита */\n isOrbita?: boolean;\n /** Origin родительского окна (хоста). */\n origin: string;\n /** Слот, в котором открыт плагин. */\n slot: TSlot;\n /** URL внутри плагина. */\n innerUrl: string;\n /** Query-параметры плагина */\n queryParams: Record<string, string>;\n /** Контекст страницы — только entityId при basic уровне. */\n slotContext: BasicContext | undefined;\n /** Регистрация обработчика для ответов на запросы хоста. */\n registerHandler: RegisterHandlerFunction<TSlot>;\n /** Уровень контекста, объявленный в манифесте. */\n contextLevel: 'basic';\n}\n\n/**\n * Контекст плагина при contextLevel = 'full'.\n * slotContext содержит полный объект слота (Issue, TriggerContext и т.д.).\n */\nexport interface FullTrackerPluginContextValue<TSlot extends TrackerSlotKey = TrackerSlotKey> {\n /** Текущая тема хоста. Обновляется реактивно при получении theme.changed. */\n theme: Theme | undefined;\n /** Текущий язык хоста. Обновляется реактивно при получении language.changed. */\n language: string | undefined;\n /** Сервис, в котором открылся плагин. */\n service: string;\n /** Id пользователя. */\n userId?: string;\n /** Id организации. */\n orgId?: string;\n /** Это ятим? */\n isYateam?: boolean;\n /** Включена ли Орбита */\n isOrbita?: boolean;\n /** Origin родительского окна (хоста). */\n origin: string;\n /** Слот, в котором открыт плагин. */\n slot: TSlot;\n /** URL внутри плагина. */\n innerUrl: string;\n /** Query-параметры плагина */\n queryParams: Record<string, string>;\n /** Контекст страницы — полный объект слота при full уровне. */\n slotContext: SlotContextMap[TSlot] | undefined;\n /** Регистрация обработчика для ответов на запросы хоста. */\n registerHandler: RegisterHandlerFunction<TSlot>;\n /** Уровень контекста, объявленный в манифесте. */\n contextLevel: 'full';\n}\n\ntype TrackerServiceContextValue = {\n registerHandler: RegisterHandlerFunction<TrackerSlotKey>;\n};\n\nconst TrackerServiceContext = createContext<TrackerServiceContextValue | null>(null);\n\n/**\n * Сервисный слой поверх {@link PluginProvider}: типизированный под Tracker `registerHandler`\n * и обязательная обёртка для {@link useTrackerPluginContext}.\n */\nfunction TrackerPluginServiceLayer({ children }: { children: ReactNode }) {\n const { registerHandler: baseRegisterHandler } = usePluginContext('basic');\n\n const typedRegisterHandler = useMemo<RegisterHandlerFunction<TrackerSlotKey>>(() => {\n return ((methodName, handler) =>\n baseRegisterHandler(\n methodName as string,\n handler as (...args: unknown[]) => unknown,\n )) as RegisterHandlerFunction<TrackerSlotKey>;\n }, [baseRegisterHandler]);\n\n const value = useMemo(\n () => ({ registerHandler: typedRegisterHandler }),\n [typedRegisterHandler],\n );\n\n return (\n <TrackerServiceContext.Provider value={value}>{children}</TrackerServiceContext.Provider>\n );\n}\n\n/**\n * Обёртка над стандартным {@link PluginProvider}: инициализация и общий контракт хоста в SDK,\n * поверх — трекер-специфичный контекст (типизированный `registerHandler` и проверка для\n * {@link useTrackerPluginContext}).\n */\nexport function TrackerPluginProvider(props: PluginProviderProps) {\n return (\n <PluginProvider {...props}>\n <TrackerPluginServiceLayer>{props.children}</TrackerPluginServiceLayer>\n </PluginProvider>\n );\n}\n\nexport type TrackerPluginProviderProps = PluginProviderProps;\n\n/**\n * Хук для получения темы, языка, слота и контекста слота из TrackerPluginProvider.\n */\nexport function useTrackerPluginContext(): {\n [K in TrackerSlotKey]: BasicTrackerPluginContextValue<K>;\n}[TrackerSlotKey];\nexport function useTrackerPluginContext(level: 'basic'): {\n [K in TrackerSlotKey]: BasicTrackerPluginContextValue<K>;\n}[TrackerSlotKey];\nexport function useTrackerPluginContext(level: 'full'): {\n [K in TrackerSlotKey]: FullTrackerPluginContextValue<K>;\n}[TrackerSlotKey];\nexport function useTrackerPluginContext<TSlot extends TrackerSlotKey>(\n level?: 'basic',\n): BasicTrackerPluginContextValue<TSlot>;\nexport function useTrackerPluginContext<TSlot extends TrackerSlotKey>(\n level: 'full',\n): FullTrackerPluginContextValue<TSlot>;\nexport function useTrackerPluginContext(\n level: ContextLevel = 'basic',\n): BasicTrackerPluginContextValue | FullTrackerPluginContextValue {\n const base = usePluginContext(level as 'basic') as\n | BasicPluginContextValue\n | FullPluginContextValue;\n const service = useContext(TrackerServiceContext);\n if (!service) {\n throw new Error(\n 'useTrackerPluginContext must be used within TrackerPluginProvider (Tracker service layer). ' +\n 'Use PluginProvider only with usePluginContext, or wrap the app with TrackerPluginProvider.',\n );\n }\n\n const slot = base.slot as TrackerSlotKey;\n\n if (level === 'full') {\n return {\n ...base,\n slot,\n registerHandler: service.registerHandler as RegisterHandlerFunction<typeof slot>,\n slotContext: base.slotContext as SlotContextMap[typeof slot] | undefined,\n } as FullTrackerPluginContextValue;\n }\n\n return {\n ...base,\n slot,\n registerHandler: service.registerHandler as RegisterHandlerFunction<typeof slot>,\n } as BasicTrackerPluginContextValue;\n}\n\nexport { isInternalUrl } from '@weavix/sdk-react';\n"],"mappings":";;;;;AA2GA,IAAM,IAAwB,EAAiD,IAAI;AAMnF,SAAS,EAA0B,EAAE,eAAqC;CACtE,IAAM,EAAE,iBAAiB,MAAwB,EAAiB,OAAO,GAEnE,IAAuB,UAChB,GAAY,MACjB,EACI,GACA,CACJ,IACL,CAAC,CAAmB,CAAC,GAElB,IAAQ,SACH,EAAE,iBAAiB,EAAqB,IAC/C,CAAC,CAAoB,CACzB;CAEA,OACI,kBAAC,EAAsB,UAAvB;EAAuC;EAAQ;CAAyC,CAAA;AAEhG;AAOA,SAAgB,EAAsB,GAA4B;CAC9D,OACI,kBAAC,GAAD;EAAgB,GAAI;YAChB,kBAAC,GAAD,EAAA,UAA4B,EAAM,SAAoC,CAAA;CAC1D,CAAA;AAExB;AAsBA,SAAgB,EACZ,IAAsB,SACwC;CAC9D,IAAM,IAAO,EAAiB,CAAgB,GAGxC,IAAU,EAAW,CAAqB;CAChD,IAAI,CAAC,GACD,MAAU,MACN,uLAEJ;CAGJ,IAAM,IAAO,EAAK;CAWlB,OATI,MAAU,SACH;EACH,GAAG;EACH;EACA,iBAAiB,EAAQ;EACzB,aAAa,EAAK;CACtB,IAGG;EACH,GAAG;EACH;EACA,iBAAiB,EAAQ;CAC7B;AACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weavix/tracker-plugin-sdk-react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@weavix/tracker-plugin-sdk": "^0.0.
|
|
26
|
-
"@weavix/sdk-core": "^0.0.
|
|
27
|
-
"@weavix/sdk-react": "^0.0.
|
|
28
|
-
"@weavix/tracker-core": "^0.0.
|
|
25
|
+
"@weavix/tracker-plugin-sdk": "^0.0.28",
|
|
26
|
+
"@weavix/sdk-core": "^0.0.30",
|
|
27
|
+
"@weavix/sdk-react": "^0.0.30",
|
|
28
|
+
"@weavix/tracker-core": "^0.0.28"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"react": "^18.0.0",
|
|
32
|
-
"@weavix/tracker-core": "^0.0.
|
|
32
|
+
"@weavix/tracker-core": "^0.0.28"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@testing-library/jest-dom": "*",
|