forked from baron/baron-sso
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import type { BulkUserItem } from "../../../lib/adminApi";
|
|
|
|
export function parseUserCSV(text: string): BulkUserItem[] {
|
|
const lines = text.split(/\r?\n/);
|
|
if (lines.length < 2) {
|
|
return [];
|
|
}
|
|
|
|
const headers = lines[0].split(",").map((h) => h.trim().toLowerCase());
|
|
const data: BulkUserItem[] = [];
|
|
|
|
for (let i = 1; i < lines.length; i++) {
|
|
if (!lines[i].trim()) continue;
|
|
|
|
const values = lines[i].split(",").map((v) => v.trim());
|
|
const item: Partial<BulkUserItem> & { metadata: Record<string, string> } = {
|
|
metadata: {},
|
|
};
|
|
|
|
for (let index = 0; index < headers.length; index++) {
|
|
const header = headers[index];
|
|
const value = values[index];
|
|
if (value === undefined || value === "") continue;
|
|
|
|
if (header === "email") {
|
|
item.email = value;
|
|
} else if (header === "name") {
|
|
item.name = value;
|
|
} else if (header === "phone") {
|
|
item.phone = value;
|
|
} else if (header === "role") {
|
|
item.role = value;
|
|
} else if (header === "tenant") {
|
|
item.tenantSlug = value;
|
|
} else if (header === "department") {
|
|
item.department = value;
|
|
} else if (header === "position") {
|
|
item.position = value;
|
|
} else if (header === "jobtitle") {
|
|
item.jobTitle = value;
|
|
} else {
|
|
item.metadata[header] = value;
|
|
}
|
|
}
|
|
|
|
if (item.email && item.name) {
|
|
data.push(item as BulkUserItem);
|
|
}
|
|
}
|
|
|
|
return data;
|
|
}
|