scriptsSpecGenerator function
Future<FigSubcommand>
scriptsSpecGenerator(
- List<
String> tokens, - ExecuteCommandFunction? executeShellCommand, [
- 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,
);
}