Kairo-Jinkendo/frontend/src/composition/useSteeringComposition.js

66 lines
1.8 KiB
JavaScript
Raw Normal View History

import { useMemo } from 'react'
import { useInitiativeOperations } from '../context/InitiativeOperationsContext.jsx'
import { resolveSteeringComposition } from './resolveSteeringComposition.js'
/**
* Hook: baut Composition-Input aus InitiativeOperationsContext.
* @param {string} surfaceKey
* @param {Record<string, unknown>} [options]
*/
export function useSteeringComposition(surfaceKey, options = {}) {
const ops = useInitiativeOperations()
const {
filterContext = options.filterContext || {},
scope = 'initiative',
} = options
const opsContext = useMemo(
() => ({
initiativeId: ops.initiativeId,
actions: ops.actions,
steeringSnapshotLoading: ops.steeringSnapshotLoading,
steeringSnapshotError: ops.steeringSnapshotError,
steeringMethods: ops.steeringMethods,
handleMethodChange: ops.handleMethodChange,
methodBusy: ops.methodBusy,
formBusy: ops.formBusy,
onAcceptBacklogProposal: options.onAcceptBacklogProposal,
}),
[
ops.initiativeId,
ops.actions,
ops.steeringSnapshotLoading,
ops.steeringSnapshotError,
ops.steeringMethods,
ops.handleMethodChange,
ops.methodBusy,
ops.formBusy,
options.onAcceptBacklogProposal,
],
)
return useMemo(
() =>
resolveSteeringComposition({
surfaceKey,
scope,
steeringElements: ops.steeringElements,
operatingContext: ops.operatingContext,
steeringSnapshot: ops.steeringSnapshot,
capabilities: ops.capabilities,
filterContext,
opsContext,
}),
[
surfaceKey,
scope,
ops.steeringElements,
ops.operatingContext,
ops.steeringSnapshot,
ops.capabilities,
filterContext,
opsContext,
],
)
}