lokalise-mcp
Version:
The Lokalise MCP Server brings Lokalise's localization power to Claude and AI assistants—manage projects, keys, and translations by chat.
202 lines (201 loc) • 8.52 kB
JavaScript
/**
* Usergroups Formatter
*
* Handles formatting of User Groups API responses into human-readable Markdown.
*/
/**
* Format a list of user groups into Markdown
*/
export function formatUsergroupsList(result, teamId) {
let content = `# User Groups (Team: ${teamId})\n\n`;
content += `**Total Groups**: ${result.totalResults}\n`;
content += `**Page**: ${result.currentPage} of ${result.totalPages}\n\n`;
if (result.items.length === 0) {
content += "*No user groups found for this team.*\n";
return content;
}
// Group list
for (const group of result.items) {
content += `## ${group.name} (ID: ${group.group_id})\n\n`;
// Permissions
content += "### Permissions\n";
content += `- **Admin**: ${group.permissions.is_admin ? "Yes" : "No"}\n`;
content += `- **Reviewer**: ${group.permissions.is_reviewer ? "Yes" : "No"}\n`;
if (group.permissions.is_admin &&
group.permissions.admin_rights?.length > 0) {
content += `- **Admin Rights**: ${group.permissions.admin_rights.join(", ")}\n`;
}
// Languages
if (group.permissions.languages && group.permissions.languages.length > 0) {
content += "\n### Language Permissions\n";
for (const lang of group.permissions.languages) {
content += `- **${lang.lang_name}** (${lang.lang_iso}): ${lang.is_writable ? "Read/Write" : "Read Only"}\n`;
}
}
// Members and Projects
if (group.members && group.members.length > 0) {
content += `\n**Members**: ${group.members.length} user(s)\n`;
}
if (group.projects && group.projects.length > 0) {
content += `**Projects**: ${group.projects.length} project(s)\n`;
}
// Metadata
content += `\n**Created**: ${new Date(group.created_at).toLocaleString()}\n`;
if (group.role_id) {
content += `**Role ID**: ${group.role_id}\n`;
}
content += "\n---\n\n";
}
// Pagination info
if (result.hasNextPage()) {
content += `\n*More groups available. Use page ${result.nextPage()} to see more.*\n`;
}
return content;
}
/**
* Format user group details into Markdown
*/
export function formatUsergroupsDetails(group) {
let content = `# User Group: ${group.name}\n\n`;
content += `**Group ID**: ${group.group_id}\n`;
content += `**Team ID**: ${group.team_id}\n\n`;
// Permissions
content += "## Permissions\n";
content += `- **Admin**: ${group.permissions.is_admin ? "Yes" : "No"}\n`;
content += `- **Reviewer**: ${group.permissions.is_reviewer ? "Yes" : "No"}\n`;
if (group.permissions.is_admin &&
group.permissions.admin_rights?.length > 0) {
content += "\n### Admin Rights\n";
for (const right of group.permissions.admin_rights) {
content += `- ${right}\n`;
}
}
// Language Permissions
if (group.permissions.languages && group.permissions.languages.length > 0) {
content += "\n## Language Permissions\n";
content += "| Language | ISO | Access |\n";
content += "|----------|-----|--------|\n";
for (const lang of group.permissions.languages) {
content += `| ${lang.lang_name} | ${lang.lang_iso} | ${lang.is_writable ? "Read/Write" : "Read Only"} |\n`;
}
}
// Members
if (group.members && group.members.length > 0) {
content += `\n## Members (${group.members.length})\n`;
for (const memberId of group.members) {
content += `- User ID: ${memberId}\n`;
}
}
// Projects
if (group.projects && group.projects.length > 0) {
content += `\n## Projects (${group.projects.length})\n`;
for (const projectId of group.projects) {
content += `- Project ID: ${projectId}\n`;
}
}
// Metadata
content += "\n## Metadata\n";
content += `- **Created**: ${new Date(group.created_at).toLocaleString()}\n`;
content += `- **Created Timestamp**: ${group.created_at_timestamp}\n`;
if (group.role_id) {
content += `- **Role ID**: ${group.role_id}\n`;
}
return content;
}
/**
* Format create user group result into Markdown
*/
export function formatCreateUsergroupsResult(group) {
let content = "# User Group Created Successfully\n\n";
content += `**Name**: ${group.name}\n`;
content += `**Group ID**: ${group.group_id}\n`;
content += `**Team ID**: ${group.team_id}\n\n`;
// Permissions summary
content += "## Permissions Set\n";
content += `- **Admin**: ${group.permissions.is_admin ? "Yes" : "No"}\n`;
content += `- **Reviewer**: ${group.permissions.is_reviewer ? "Yes" : "No"}\n`;
if (group.permissions.is_admin &&
group.permissions.admin_rights?.length > 0) {
content += `- **Admin Rights**: ${group.permissions.admin_rights.join(", ")}\n`;
}
if (group.permissions.languages && group.permissions.languages.length > 0) {
content += `- **Languages Configured**: ${group.permissions.languages.length}\n`;
}
content += `\n✅ User group created successfully at ${new Date(group.created_at).toLocaleString()}\n`;
return content;
}
/**
* Format update user group result into Markdown
*/
export function formatUpdateUsergroupsResult(group) {
let content = "# User Group Updated Successfully\n\n";
content += `**Name**: ${group.name}\n`;
content += `**Group ID**: ${group.group_id}\n`;
content += `**Team ID**: ${group.team_id}\n\n`;
// Updated permissions
content += "## Updated Permissions\n";
content += `- **Admin**: ${group.permissions.is_admin ? "Yes" : "No"}\n`;
content += `- **Reviewer**: ${group.permissions.is_reviewer ? "Yes" : "No"}\n`;
if (group.permissions.is_admin &&
group.permissions.admin_rights?.length > 0) {
content += `- **Admin Rights**: ${group.permissions.admin_rights.join(", ")}\n`;
}
if (group.permissions.languages && group.permissions.languages.length > 0) {
content += `- **Languages**: ${group.permissions.languages.length} language(s) configured\n`;
}
content += "\n✅ User group updated successfully\n";
return content;
}
/**
* Format delete user group result into Markdown
*/
export function formatDeleteUsergroupsResult(result) {
let content = "# User Group Deleted Successfully\n\n";
content += `**Team ID**: ${result.team_id}\n`;
content += `**Status**: ${result.group_deleted ? "✅ Deleted" : "❌ Failed"}\n`;
return content;
}
/**
* Format add members result into Markdown
*/
export function formatAddMembersResult(group, addedCount) {
let content = "# Members Added Successfully\n\n";
content += `**Group**: ${group.name} (ID: ${group.group_id})\n`;
content += `**Members Added**: ${addedCount}\n`;
content += `**Total Members**: ${group.members?.length || 0}\n\n`;
content += `✅ Successfully added ${addedCount} member(s) to the user group\n`;
return content;
}
/**
* Format remove members result into Markdown
*/
export function formatRemoveMembersResult(group, removedCount) {
let content = "# Members Removed Successfully\n\n";
content += `**Group**: ${group.name} (ID: ${group.group_id})\n`;
content += `**Members Removed**: ${removedCount}\n`;
content += `**Remaining Members**: ${group.members?.length || 0}\n\n`;
content += `✅ Successfully removed ${removedCount} member(s) from the user group\n`;
return content;
}
/**
* Format add projects result into Markdown
*/
export function formatAddProjectsResult(group, addedCount) {
let content = "# Projects Added Successfully\n\n";
content += `**Group**: ${group.name} (ID: ${group.group_id})\n`;
content += `**Projects Added**: ${addedCount}\n`;
content += `**Total Projects**: ${group.projects?.length || 0}\n\n`;
content += `✅ Successfully added ${addedCount} project(s) to the user group\n`;
return content;
}
/**
* Format remove projects result into Markdown
*/
export function formatRemoveProjectsResult(group, removedCount) {
let content = "# Projects Removed Successfully\n\n";
content += `**Group**: ${group.name} (ID: ${group.group_id})\n`;
content += `**Projects Removed**: ${removedCount}\n`;
content += `**Remaining Projects**: ${group.projects?.length || 0}\n\n`;
content += `✅ Successfully removed ${removedCount} project(s) from the user group\n`;
return content;
}