resolve static method

ResolvedDiagramTextTarget? resolve(
  1. ResolvedElement? element,
  2. String storyId
)

Implementation

static ResolvedDiagramTextTarget? resolve(
  ResolvedElement? element,
  String storyId,
) {
  final source = switch (element) {
    ResolvedFramedElement(:final source) => source,
    ResolvedConnector(:final source) => source,
    _ => null,
  };
  final target = DiagramTextTarget.resolve(source, storyId);
  if (target == null) return null;
  return switch (element) {
    ResolvedFramedElement() => ResolvedDiagramTextTarget._(
      canonical: target,
      fontSizeRange: switch (element) {
        ResolvedShape() => element.definition.fontSizeRange,
        ResolvedTextElement() => element.definition.fontSizeRange,
        _ => const DiagramTextFontSizeRange(),
      },
      text: element.text,
      editable: element.textEditable,
      textFor: switch (element) {
        ResolvedShape(:final definition, :final source) => (
          slotId,
        ) => definition.textFor(slotId, source.textStory),
        ResolvedTextElement(:final definition) => definition.textFor,
        _ => (_) => const PlainTextDefinition(),
      },
    ),
    ResolvedConnector() => ResolvedDiagramTextTarget._(
      canonical: target,
      defaultFontSize: element.definition.labeling!.defaultFontSize,
      fontSizeRange: element.definition.labeling!.fontSizeRange,
      text: element.labels
          .where((label) => label.source.story.id == storyId)
          .firstOrNull
          ?.text,
      editable:
          !element.isLocked &&
          element.definition.labeling?.textEditable == true,
      textFor: (_) => element.definition.labeling!.textType,
    ),
    _ => null,
  };
}