1
0
forked from baron/baron-sso
Files
baron-sso/adminfront/src/features/users/utils/csvParser.ts
2026-04-10 11:38:47 +09:00

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;
}