scriptsSpecGenerator function

Future<FigSubcommand> scriptsSpecGenerator(
  1. List<String> tokens,
  2. ExecuteCommandFunction? executeShellCommand, [
  3. FigGeneratorContext? context
])

Implementation

Future<FigSubcommand> scriptsSpecGenerator(
    List<String> tokens, ExecuteCommandFunction? executeShellCommand,
    [FigGeneratorContext? context]) async {
  if (executeShellCommand == null) return FigSubcommand(name: "run");

  const query = """query Scripts {
    currentUser {
      namespace {
        username
        scripts {
          ...ScriptFields
        }
      }
      teamMemberships {
        team {
          namespace {
            username
            scripts {
              ...ScriptFields
            }
          }
        }
      }
    }
  }

  $scriptsFieldsFragment""";

  final data = await graphql(exec: executeShellCommand, query: query);

  List<ScriptFields> scripts = [];

  final currentUserNamespace = data['currentUser']['namespace'];
  if (currentUserNamespace != null) {
    final username = currentUserNamespace['username'];
    final userScripts = (currentUserNamespace['scripts'] as List).map((s) {
      var script = ScriptFields.fromJson(s);
      return ScriptFields(
        name: script.name,
        fields: script.fields,
        relevanceScore: script.relevanceScore,
        lastInvokedAt: script.lastInvokedAt,
        lastInvokedAtByUser: script.lastInvokedAtByUser,
        isOwnedByCurrentUser: script.isOwnedByCurrentUser,
        namespace: username,
      );
    });
    scripts.addAll(userScripts);
  }

  final teamMemberships = data['currentUser']['teamMemberships'] as List?;
  if (teamMemberships != null) {
    for (var team in teamMemberships) {
      final teamNamespace = team['team']['namespace'];
      final username = teamNamespace['username'];
      final teamScripts = (teamNamespace['scripts'] as List).map((s) {
        var script = ScriptFields.fromJson(s);
        return ScriptFields(
          name: script.name,
          fields: script.fields,
          relevanceScore: script.relevanceScore,
          lastInvokedAt: script.lastInvokedAt,
          lastInvokedAtByUser: script.lastInvokedAtByUser,
          isOwnedByCurrentUser: script.isOwnedByCurrentUser,
          namespace: username,
        );
      });
      scripts.addAll(teamScripts);
    }
  }

  final subcommands = scripts.map((script) {
    final displayName =
        "${script.fields['displayName'] ?? script.name} | @${script.namespace}";

    final name = ["@${script.namespace}/${script.name}"];
    if (script.isOwnedByCurrentUser) {
      name.add(script.name);
    }

    final options = scriptOptions(script);

    return FigSubcommand(
      displayName: displayName,
      icon: script.fields['icon'] ?? "⚡️",
      name: name,
      insertValue: script.isOwnedByCurrentUser ? script.name : name[0],
      description: script.fields['description'],
      options: options,
    );
  }).toList();

  return FigSubcommand(
    name: "run",
    subcommands: subcommands,
    filterStrategy: FilterStrategy.fuzzy,
  );
}