Keep previous import source and code when a person is re-imported from another source
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -29,6 +29,45 @@ export function personImportSourceLabel(source: string): string {
|
||||
return source || PERSON_IMPORT_SOURCE_LABELS.manual;
|
||||
}
|
||||
|
||||
type SourceSnapshot = {
|
||||
importSource?: string | null;
|
||||
sourceRef?: string | null;
|
||||
previousImportSource?: string | null;
|
||||
previousSourceRef?: string | null;
|
||||
customFields?: unknown;
|
||||
};
|
||||
|
||||
function didarIdFrom(customFields: unknown): string | null {
|
||||
if (!customFields || typeof customFields !== 'object') return null;
|
||||
const raw = (customFields as Record<string, unknown>).didarId;
|
||||
if (typeof raw === 'number' && Number.isFinite(raw)) return String(raw);
|
||||
if (typeof raw === 'string' && raw.trim()) return raw.trim();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* وقتی شخصِ موجود از منبع دیگری دوباره وارد میشود، منبع و کد فعلی را بهعنوان «قبلی» نگه میدارد.
|
||||
* اگر منبع یکسان باشد (ورود مجدد از همان منبع)، مقادیر قبلی دست نمیخورند.
|
||||
*/
|
||||
export function carryPreviousSource(
|
||||
existing: SourceSnapshot,
|
||||
nextSource: PersonImportSource,
|
||||
): { previousImportSource?: string | null; previousSourceRef?: string | null } {
|
||||
const currentSource = normalizePersonImportSource(existing.importSource);
|
||||
if (currentSource === nextSource) return {};
|
||||
let ref = existing.sourceRef?.trim() || null;
|
||||
let source: string = currentSource;
|
||||
if (!ref) {
|
||||
const didarId = didarIdFrom(existing.customFields);
|
||||
if (didarId && nextSource !== 'didar') {
|
||||
ref = didarId;
|
||||
source = 'didar';
|
||||
}
|
||||
}
|
||||
if (source === 'manual' && !ref) return {};
|
||||
return { previousImportSource: source, previousSourceRef: ref };
|
||||
}
|
||||
|
||||
export function namesDiffer(
|
||||
aFirst: string,
|
||||
aLast: string,
|
||||
|
||||
Reference in New Issue
Block a user