getUI method

Implementation

ModerationUI getUI(final ModerationBehaviorContext context) {
  bool noOverride = false;
  final filters = <ModerationCause>[];
  final blurs = <ModerationCause>[];
  final alerts = <ModerationCause>[];
  final informs = <ModerationCause>[];

  for (final cause in causes) {
    switch (cause) {
      case UModerationCauseBlocking() ||
          UModerationCauseBlockedBy() ||
          UModerationCauseBlockOther():
        if (me) continue;

        if (context.isProfileList || context.isContentList) {
          filters.add(cause);
        }

        if (!cause.downgraded) {
          if (behaviors.block[context] == ModerationBehavior.blur) {
            noOverride = true;
            blurs.add(cause);
          } else if (behaviors.block[context] == ModerationBehavior.alert) {
            alerts.add(cause);
          } else if (behaviors.block[context] == ModerationBehavior.inform) {
            informs.add(cause);
          }
        }
      case UModerationCauseMuted():
        if (me) continue;

        if (context.isProfileList || context.isContentList) {
          filters.add(cause);
        }

        if (!cause.downgraded) {
          if (behaviors.mute[context] == ModerationBehavior.blur) {
            blurs.add(cause);
          } else if (behaviors.mute[context] == ModerationBehavior.alert) {
            alerts.add(cause);
          } else if (behaviors.mute[context] == ModerationBehavior.inform) {
            informs.add(cause);
          }
        }
      case UModerationCauseMuteWord():
        if (me) continue;

        if (context.isContentList) {
          filters.add(cause);
        }

        if (!cause.downgraded) {
          if (behaviors.muteWord[context] == ModerationBehavior.blur) {
            blurs.add(cause);
          } else if (behaviors.muteWord[context] ==
              ModerationBehavior.alert) {
            alerts.add(cause);
          } else if (behaviors.muteWord[context] ==
              ModerationBehavior.inform) {
            informs.add(cause);
          }
        }
      case UModerationCauseHidden():
        if (context.isProfileList || context.isContentList) {
          filters.add(cause);
        }

        if (!cause.downgraded) {
          if (behaviors.hide[context] == ModerationBehavior.blur) {
            blurs.add(cause);
          } else if (behaviors.hide[context] == ModerationBehavior.alert) {
            alerts.add(cause);
          } else if (behaviors.hide[context] == ModerationBehavior.inform) {
            informs.add(cause);
          }
        }
      case UModerationCauseLabel(:final data):
        final labelCause = data;

        if (context.isProfileList &&
            labelCause.target == LabelTarget.account) {
          if (labelCause.setting == LabelPreference.hide && !me) {
            filters.add(cause);
          }
        } else if (context.isContentList &&
            (labelCause.target == LabelTarget.account ||
                labelCause.target == LabelTarget.content)) {
          if (labelCause.setting == LabelPreference.hide && !me) {
            filters.add(cause);
          }
        }

        if (!labelCause.downgraded) {
          if (labelCause.behavior[context] == ModerationBehavior.blur) {
            blurs.add(cause);
            if (labelCause.noOverride && !me) {
              noOverride = true;
            }
          } else if (labelCause.behavior[context] ==
              ModerationBehavior.alert) {
            alerts.add(cause);
          } else if (labelCause.behavior[context] ==
              ModerationBehavior.inform) {
            informs.add(cause);
          }
        }
    }
  }

  return ModerationUI(
    noOverride: noOverride,
    filters: filters..sort(_sortByCausePriority),
    blurs: blurs..sort(_sortByCausePriority),
    alerts: alerts,
    informs: informs,
  );
}