Перейти к основному содержимому

index

@mineflow/client-react


@mineflow/client-react

Classes

ClassDescription
SagaFailedErrorМутация с async-сагой: start инициирует операцию (POST → { sagaId }), затем хук поллит /sagas/{id}/status до терминального состояния.

Interfaces

InterfaceDescription
AddEntryVarsОбщая форма vars для add-хуков строк рапорта: { id, body, idempotencyKey }.
CreateShiftReportVarsVars создания рапорта: тело + стабильный idempotencyKey (генерь при энкью).
DomainMutationOptionsДоп. опции доменной мутации (для offline-устойчивых записей, ADR-0049).
MineflowContextValueЗначение контекста SDK, которое MineflowProvider раздаёт всем хукам. Транспорт (rest/authFetch) собирается провайдером один раз и не зависит от смены roles (см. provider).
MineflowProviderProps-
OfflineDomainПоверхность offline-домена, возвращаемая createOfflineDomain: данные для live-хуков (scope/ops/mutationKeys) + механика устойчивости (registerDefaults/useOutbox/useRetryFailed).
OfflineDomainConfigКонфиг createOfflineDomain: scope, ключ инвалидации, операции и их mutationKey'и.
OutboxStatusСводка очереди (outbox) write-мутаций домена — для UI-индикатора/баннера.
RealtimeNotificationsOptions-
RealtimeProviderProps-
RejectShiftReportVarsVars отклонения рапорта: id + тело (reason) + стабильный idempotencyKey.
SubmitShiftReportVarsVars подачи рапорта: id + стабильный idempotencyKey (тело пустое).

Type Aliases

Type AliasDescription
AddBlastingEntryBodyТело строки взрывных работ (тип ВВ + масса).
AddDowntimeEventBodyТело события простоя (причина + интервал).
AddDrillingEntryBodyТело строки бурения (ссылается на assetUsageId).
AddFuelEntryBodyТело строки топлива (issued/consumed, ссылается на assetUsageId).
AddShiftAssetUsageBodyТело строки использования техники (anchor для drilling/fuel).
AddShiftPersonnelBodyТело строки персонала смены (часы по сотруднику).
AddTmcUsageBodyТело расхода ТМЦ (материал + количество + единица).
ConfirmDocumentBodyТело шага confirm (опционально; по умолчанию {}).
ConfirmDocumentResultРезультат confirm: документ в статусе ready.
CreateDocumentBodyТело шага initiate (метаданные файла + сущность-владелец).
CreateShiftReportBodyТело создания черновика рапорта (участок + дата + смена).
DecommissionAssetBodyТело списания актива (coApprovedBy, reason — double-approval).
DocumentListСписок метаданных документов сущности (массив).
DocumentListItemОдин элемент DocumentList (метаданные документа).
DownloadUrlResultРезультат GET документа: presigned URL для скачивания/просмотра.
InitiateUploadResultРезультат initiate: id pending-документа + presigned PUT URL.
ListDocumentsQueryQuery-фильтры списка документов (entityType + entityId).
NotificationУведомление: { id, eventType, severity, title, body, targetRoles, targetUserId, resourceType, resourceId, createdAt }. Сервер сам фильтрует фид по организации и роли/пользователю.
NotificationPageСтраница уведомлений (cursor-пагинация): { items, nextCursor }.
OfflineOpОперация-эндпоинт офлайн-домена: (client, vars) => Promise<data>. vars несёт стабильный idempotencyKey, который переживает рестарт и replay.
QueryKeysТип объекта queryKeys — для типизации ручных invalidate/prefetch в приложении.
RegisterAssetBodyТело регистрации актива (инвентарный номер, имя, класс, текущий объект, …).
RejectAfterApproveBodyТело сторнирования утверждённого рапорта (reason ≥10).
RejectShiftReportBodyТело отклонения поданного рапорта (reason ≥5).
TransferAssetBodyТело передачи актива (toObjectId, опц. reason).

Variables

VariableDescription
documentOpsОперации-эндпоинты документов: (client, …) => Promise<data>. Используются напрямую из платформенного оркестратора загрузки (mobile photo-queue, web), который сам делает бинарный PUT между initiate и confirm.
MineflowContextReact-контекст SDK. Заполняется MineflowProvider; вне провайдера — null, поэтому хуки useMineflow/useMineflowClient бросают.
queryKeysЕдиный источник ключей TanStack Query для всех хуков SDK.
shiftReportDomainOffline-домен сменных рапортов. Собран из обобщённой фабрики — вся механика (replay-defaults, outbox, retry) общая; здесь только домен-конфиг.

Functions

FunctionDescription
assertSagaSucceededПревращает терминально-отказную сагу (failed/compensated) в брошенную SagaFailedError; успешную возвращает как есть. Вынесено отдельной чистой функцией, чтобы поведение покрывалось unit-тестом без рендера хука.
availableActionsДоступные действия (event-типы) в данном состоянии FSM — для показа/сокрытия кнопок в UI. Источник истины — та же xstate-машина, что у бэка (ADR-0022), передаётся параметром (curated re-export машин — отдельный L0-пакет).
canЧистая (не-хук) проверка RBAC: есть ли у пользователя хотя бы одна из требуемых ролей (ADR-0009). Пустой required → доступно любому аутентифицированному.
createOfflineDomainФабрика offline-first домена под любой агрегат (ADR-0049). Из конфига собирает OfflineDomain: ops/mutationKeys/scope для live-хуков (через useDomainMutation) и registerDefaults/useOutbox/useRetryFailed для replay-после-рестарта и UI-индикаторов. Эталон инстанциации — shiftReportDomain для сменных рапортов.
MineflowProviderКорневой провайдер SDK. Строит аутентифицированный fetch ОДИН раз и переиспользует его и для REST-клиента, и для SSE-фидов. TanStack Query + контекст. Работает в web и React Native (react-dom не требуется).
RealtimeProvider-
rolesSignatureКонтентная сигнатура набора ролей. Стабильна при равном НАБОРЕ ролей независимо от ссылки на массив (caller часто передаёт inline-литерал roles={['Foreman']}) и от порядка. NUL-разделитель не встречается в PascalCase-именах SystemRole, поэтому разные наборы дают разные строки.
useAddBlastingEntryВзрывные работы: тип ВВ + масса.
useAddDowntimeEventПростой: причина + интервал (endedAt > startedAt).
useAddDrillingEntryБурение: ссылается на assetUsageId.
useAddFuelEntryТопливо: выдано/израсходовано (consumed ≤ issued), ссылается на assetUsageId.
useAddShiftAssetUsageИспользование техники (anchor): возвращает id, на который ссылаются drilling/fuel (assetUsageId) — добавляй asset-usage ДО них. Offline-устойчив; FIFO-replay сохраняет порядок энкью.
useAddShiftPersonnelПерсонал смены: отработанные/простойные часы по сотруднику.
useAddTmcUsageРасход ТМЦ: материал + количество + единица.
useApiMutationДженерик-write без авто-инвалидации кэша — когда кэшем управляешь сам (optimistic-апдейты, ручной setQueryData). Авто-Idempotency-Key всё равно проставит fetch-слой по generateId. Для автоинвалидации раздела бери useDomainMutation.
useApiQueryТипобезопасный дженерик-хук чтения под любой endpoint, которого ещё нет в concrete-наборе. Конкретный запрос вызывает caller через замыкание fn(client) и типизирует его против @mineflow/api-client — SDK даёт лишь механику (кэш TanStack Query + REST-клиент из контекста), не хардкодит формы DTO.
useApiQueryAllКак useApiQuery, но стягивает ВСЕ страницы курсорной пагинации в один массив (collectAllPages). Нужен там, где UI обязан видеть полный набор, а серверный предел страницы (limit ≤ 200, libs/common) молча обрезал бы одностраничный запрос — напр. пикеры персонала/техники на участке с >200 единицами.
useApproveShiftReportУтверждение сменного рапорта (центральная 6-шаговая approve-сага). POST даёт 202 + sagaId; хук поллит /sagas/{id}/status до терминала. Терминальный откат (failed/compensated) бросается как SagaFailedError → срабатывает onError.
useAssetОдин актив EAM по id.
useAssetClassesСправочник классов активов EAM (для resolve label'а техники в UI). Долгоживущий lookup, читаемый всеми ролями.
useAssetsСписок активов EAM (cursor-пагинация, фильтры status/objectId).
useAssetsAllПолный список активов: стягивает ВСЕ страницы курсора (в отличие от useAssets, который отдаёт одну страницу ≤200 и молча обрезал бы пикер на участке с >200 единицами). Курсор/лимит хук гонит сам — caller передаёт только фильтры (objectId/status). Ключ отдельный (…list({…, all: true})), чтобы не пересекаться с кэшем одностраничного useAssets.
useAvailableActionsХук доступных FSM-действий для текущего статуса сущности (для UI-кнопок). Мемо-обёртка над чистой availableActions: результат пересчитывается только при смене machine/stateValue. Действия отдаются БЕЗ учёта guard'ов — валидацию перехода делает бэк (409).
useBrigadeОдна бригада HR по id.
useBrigadeMembersСостав бригады (под-коллекция members).
useBrigadesСписок бригад HR (cursor-пагинация).
useCanХук RBAC-гейта: есть ли у текущего пользователя (роли из MineflowProvider) хотя бы одна из требуемых ролей. Обёртка над чистой can.
useCompleteMaintenanceЗавершение ТО: FSM maintenance → operational (событие COMPLETE_MAINTENANCE). ADR-0045: dedicated PATCH /eam/assets/:id/complete-maintenance; реактивно завершает открытую запись MaintenanceRecord. Тело не требуется.
useConserveAssetКонсервация актива: FSM operational → conserved (событие CONSERVE, ADR-0022). ADR-0045 (asset-centric): dedicated PATCH /eam/assets/:id/conserve. reason обязателен (OPS_REQUIRING_REASON). Запись журнала движений создаётся РЕАКТИВНО по событию eam.asset.status-changed. На успехе инвалидируется список активов.
useCreateShiftReportСоздание черновика рапорта (parent: участок + дата + смена). 201 → рапорт. Offline-устойчив (общий scope + стабильный Idempotency-Key из vars — клади его при энкью). На успехе инвалидирует список рапортов.
useDecommissionAssetСписание актива (double-approval). Синхронная операция — отдаёт 200, это НЕ сага. На успехе инвалидирует список активов.
useDocumentDownloadUrlPresigned GET URL документа (для просмотра, когда локальной копии файла уже нет, напр. на другом устройстве/после очистки кэша). Запрос не запускается при пустом id.
useDocumentsByEntityДокументы сущности-владельца (entityType+entityId) — кросс-девайс список (ADR-0051): утверждающий на другом устройстве видит вложения рапорта. Запрос не запускается при пустом entityId.
useDomainMutationЕдиная доменная write-мутация: вызывает fn(client, vars) и на успехе инвалидирует invalidateKey (префикс списков/деталей раздела). Заменяет раздублированные per-area хелперы (useAssetMutation/useShiftReportMutation): раздел задаётся invalidateKey, offline-механика — опциями. На дженерике построены все concrete write-хуки SDK.
useIsOnlineТекущая «онлайновость» (по onlineManager TanStack Query, который приложение связывает с реальной сетью). Реактивно перерисовывает UI при смене связи.
useMineflowДоступ к контексту SDK (MineflowContextValue: REST-клиент, аутентифицированный fetch, baseUrl, роли).
useMineflowClientУдобный доступ только к REST-клиенту из контекста (без остального значения).
useNotificationsREST-backlog уведомлений получателя (cursor-пагинация, новые сверху). Источник истины ленты — realtime (useRealtimeNotifications) префиксит сюда новые, дедуп по id.
useOnNotificationПодписка на входящие уведомления из Centrifugo (personal + role каналы). Низкоуровневый хук: только колбэк, без записи в кэш — для счётчиков/тостов. Колбэк хранится в ref, поэтому передавать можно inline без ре-подписки. No-op при выключенном Centrifugo.
usePersonОдин сотрудник HR по id.
usePersonnelСписок персонала HR (cursor-пагинация).
usePersonnelAllПолный список персонала: стягивает ВСЕ страницы курсора (в отличие от usePersonnel — одна страница ≤200, молча обрезающая крупный участок). Курсор/ лимит хук гонит сам; caller передаёт только фильтры (objectId). Отдельный ключ (…list({…, all: true})), чтобы не пересекаться с кэшем usePersonnel.
usePositionsСправочник должностей HR (для picker'а персонала смены). Долгоживущий lookup, читаемый всеми ролями.
usePresencePresence-индикатор (ADR-0054): сколько коллег организации сейчас онлайн в realtime. enabled=false{ online: 0, enabled: false }, индикатор прячется.
useProductionObjectsСправочник участков (production objects) для picker'ов. Долгоживущий lookup, читаемый всеми ролями. activeOnly входит в ключ кэша (разные кэши).
useReactivateAssetРасконсервация актива: FSM conserved → operational (событие REACTIVATE). ADR-0045: dedicated PATCH /eam/assets/:id/reactivate (тело не требуется).
useRealtimeNotificationsЕдинственный realtime-хук ленты (ADR-0054): входящие из Centrifugo префиксятся в TanStack-кэш useNotifications (дедуп по id) — экран видит один растущий список. No-op при выключенном Centrifugo (живые апдейты тогда не приходят, актуализация — рефетчем backlog).
useRegisterAssetРегистрация (создание) нового актива. Авто-Idempotency-Key; на успехе инвалидирует список активов.
useRejectShiftReportОтклонение поданного рапорта (submitted → rejected). reason ≥5. БЕЗ саги (синхронный FSM-переход). Offline-устойчив; на успехе инвалидирует список.
useRejectShiftReportAfterApproveСторнирование утверждённого рапорта (approved → rejected). Только CEO. POST даёт 202 + rejectSagaId (компенсирующая сага); хук поллит до терминала. reason ≥10. Терминальный откат бросается как SagaFailedErroronError.
useSagaMutationХук async-саги: start инициирует операцию (POST 202{ sagaId }), затем хук поллит /sagas/{id}/status до терминального состояния и резолвится финальным SagaStatus. Терминальный откат (failed/compensated) бросается как SagaFailedError → срабатывает onError, а не onSuccess.
useShiftReportОдин сменный рапорт (parent) по id. Возвращает FSM-поля без line-items.
useShiftReportEntriesLine-items рапорта: все 7 коллекций одним вызовом GET /:id/entries.
useShiftReportsСписок сменных рапортов PRD.
useSubmitShiftReportПодача черновика на утверждение (FSM draft → submitted). Тело пустое. Offline-устойчив; на успехе инвалидирует список рапортов.
useTimesheetТабель HR за период (query.dateFrom/dateTo обязательны на бэке).
useTransferAssetПеремещение/передача актива на другой объект (PATCH). На успехе инвалидирует список активов.
useWatchОдна вахта HR по id.
useWatchesСписок вахт HR (без personnelId-фильтра — query опционален).