2026-07-05 07:25:01 +02:00
|
|
|
const ACTOR_TYPE_LABELS = {
|
|
|
|
|
human: 'Mensch',
|
|
|
|
|
agent: 'Agent',
|
|
|
|
|
working_group: 'Arbeitsgruppe',
|
|
|
|
|
external_system: 'Externes System',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function ActorSelect({
|
|
|
|
|
actors = [],
|
|
|
|
|
defaultSelected = [],
|
|
|
|
|
label = 'Zugewiesene Actors',
|
|
|
|
|
loading = false,
|
|
|
|
|
error = null,
|
|
|
|
|
usedFallback = false,
|
|
|
|
|
onRetry,
|
|
|
|
|
}) {
|
|
|
|
|
if (loading) {
|
|
|
|
|
return <p className="muted actor-select-hint">Actors werden geladen …</p>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (error && !actors.length) {
|
|
|
|
|
return (
|
|
|
|
|
<div className="actor-select actor-select--error">
|
|
|
|
|
<p className="error">{error}</p>
|
|
|
|
|
{onRetry && (
|
|
|
|
|
<button type="button" className="btn btn-secondary" onClick={onRetry}>
|
|
|
|
|
Erneut laden
|
|
|
|
|
</button>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-05 06:41:23 +02:00
|
|
|
if (!actors.length) {
|
|
|
|
|
return (
|
|
|
|
|
<p className="muted actor-select-hint">
|
|
|
|
|
Kein Actor verfügbar — bitte TenantContext prüfen.
|
|
|
|
|
</p>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<fieldset className="actor-select">
|
|
|
|
|
<legend>{label}</legend>
|
|
|
|
|
{actors.map((actor) => (
|
|
|
|
|
<label key={actor.id} className="checkbox-label">
|
|
|
|
|
<input
|
|
|
|
|
type="checkbox"
|
|
|
|
|
name={`actor_${actor.id}`}
|
|
|
|
|
defaultChecked={defaultSelected.includes(actor.id)}
|
|
|
|
|
/>
|
|
|
|
|
{actor.name}
|
2026-07-05 07:25:01 +02:00
|
|
|
{actor.actor_type && (
|
|
|
|
|
<span className="muted">
|
|
|
|
|
{' '}
|
|
|
|
|
({ACTOR_TYPE_LABELS[actor.actor_type] || actor.actor_type})
|
|
|
|
|
</span>
|
|
|
|
|
)}
|
2026-07-05 06:41:23 +02:00
|
|
|
</label>
|
|
|
|
|
))}
|
2026-07-05 07:25:01 +02:00
|
|
|
{usedFallback && (
|
2026-07-05 06:41:23 +02:00
|
|
|
<p className="muted actor-select-hint">
|
2026-07-05 07:25:01 +02:00
|
|
|
Actor Directory nicht erreichbar — Fallback auf aktuellen Actor.
|
2026-07-05 06:41:23 +02:00
|
|
|
</p>
|
|
|
|
|
)}
|
|
|
|
|
</fieldset>
|
|
|
|
|
)
|
|
|
|
|
}
|