listRuns method

  1. @override
Future<List<RunState>> listRuns({
  1. String? workflow,
  2. WorkflowStatus? status,
  3. int limit = 50,
  4. int offset = 0,
})
override

Lists workflow runs ordered by creation time.

Implementation

@override
/// Lists workflow runs ordered by creation time.
Future<List<RunState>> listRuns({
  String? workflow,
  WorkflowStatus? status,
  int limit = 50,
  int offset = 0,
}) async {
  final candidates = _runs.values.where((state) {
    if (workflow != null && state.workflow != workflow) return false;
    if (status != null && state.status != status) return false;
    return true;
  }).toList()..sort((a, b) => b.id.compareTo(a.id));
  final start = offset < 0 ? 0 : offset;
  final limited = candidates.skip(start).take(limit);
  final results = <RunState>[];
  for (final state in limited) {
    final steps = _steps[state.id];
    var cursor = 0;
    if (steps != null) {
      final seen = <String>{};
      for (final name in steps.keys) {
        seen.add(_baseStepName(name));
      }
      cursor = seen.length;
    }
    results.add(state.copyWith(cursor: cursor));
  }
  return results;
}