previewCreation method

({ConnectorElement? connector, EditResult decision}) previewCreation(
  1. ConnectorElement connector, {
  2. FreeEndpoint? deniedTargetFallback,
  3. bool select = true,
  4. String label = 'Create connector',
})

Publishes a new connector from the immutable gesture baseline. A denied binding may become an explicitly supplied free endpoint; without that fallback, the preview is withdrawn. The decision still reports denial.

Implementation

({EditResult decision, ConnectorElement? connector}) previewCreation(
  ConnectorElement connector, {
  FreeEndpoint? deniedTargetFallback,
  bool select = true,
  String label = 'Create connector',
}) {
  final start = store.internals.interactionStart;
  if (start == null) throw StateError('No connection interaction is active.');
  if (diagramHasCanonicalId(start.document, connector.id)) {
    throw StateError('Element ${connector.id} already exists.');
  }
  final decision = evaluateConnector(
    connector,
    phase: DiagramConnectionIntentPhase.preview,
  );
  final admitted = decision.allowed
      ? connector
      : deniedTargetFallback == null
      ? null
      : connector.copyWith(end: deniedTargetFallback);
  final admission = store.internals.previewInteraction(
    DiagramTransaction(
      label: label,
      steps: [
        if (admitted != null) InsertElementsStep([admitted]),
      ],
      selectionAfter: select && admitted != null
          ? ElementSelection({admitted.id})
          : start.selection,
    ),
  );
  return (
    decision: admission.allowed ? decision : admission,
    connector: admission.allowed ? admitted : null,
  );
}