You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.0 KiB
98 lines
3.0 KiB
import type { EventKindConfig } from '$lib/stores/visualizationConfig'; |
|
|
|
/** |
|
* Validates an event kind input value. |
|
* @param value - The input value to validate (string or number). |
|
* @param existingKinds - Array of existing event kind numbers to check for duplicates. |
|
* @returns The validated kind number, or null if validation fails. |
|
*/ |
|
export function validateEventKind( |
|
value: string | number, |
|
existingKinds: number[] |
|
): { kind: number | null; error: string } { |
|
// Convert to string for consistent handling |
|
const strValue = String(value); |
|
if (strValue === null || strValue === undefined || strValue.trim() === '') { |
|
return { kind: null, error: '' }; |
|
} |
|
|
|
const kind = parseInt(strValue.trim()); |
|
if (isNaN(kind)) { |
|
return { kind: null, error: 'Must be a number' }; |
|
} |
|
|
|
if (kind < 0) { |
|
return { kind: null, error: 'Must be non-negative' }; |
|
} |
|
|
|
if (existingKinds.includes(kind)) { |
|
return { kind: null, error: 'Already added' }; |
|
} |
|
|
|
return { kind, error: '' }; |
|
} |
|
|
|
/** |
|
* Handles adding a new event kind with validation and state management. |
|
* @param newKind - The new kind value to add. |
|
* @param existingKinds - Array of existing event kind numbers. |
|
* @param addKindFunction - Function to call when adding the kind. |
|
* @param resetStateFunction - Function to call to reset the input state. |
|
* @returns Object with success status and any error message. |
|
*/ |
|
export function handleAddEventKind( |
|
newKind: string, |
|
existingKinds: number[], |
|
addKindFunction: (kind: number) => void, |
|
resetStateFunction: () => void |
|
): { success: boolean; error: string } { |
|
console.log('[handleAddEventKind] called with:', newKind); |
|
|
|
const validation = validateEventKind(newKind, existingKinds); |
|
console.log('[handleAddEventKind] Validation result:', validation); |
|
|
|
if (validation.kind !== null) { |
|
console.log('[handleAddEventKind] Adding event kind:', validation.kind); |
|
addKindFunction(validation.kind); |
|
resetStateFunction(); |
|
return { success: true, error: '' }; |
|
} else { |
|
console.log('[handleAddEventKind] Validation failed:', validation.error); |
|
return { success: false, error: validation.error }; |
|
} |
|
} |
|
|
|
/** |
|
* Handles keyboard events for event kind input. |
|
* @param e - The keyboard event. |
|
* @param onEnter - Function to call when Enter is pressed. |
|
* @param onEscape - Function to call when Escape is pressed. |
|
*/ |
|
export function handleEventKindKeydown( |
|
e: KeyboardEvent, |
|
onEnter: () => void, |
|
onEscape: () => void |
|
): void { |
|
if (e.key === 'Enter') { |
|
onEnter(); |
|
} else if (e.key === 'Escape') { |
|
onEscape(); |
|
} |
|
} |
|
|
|
/** |
|
* Gets the display name for an event kind. |
|
* @param kind - The event kind number. |
|
* @returns The display name for the kind. |
|
*/ |
|
export function getEventKindDisplayName(kind: number): string { |
|
switch (kind) { |
|
case 30040: return 'Publication Index'; |
|
case 30041: return 'Publication Content'; |
|
case 30818: return 'Wiki'; |
|
case 1: return 'Text Note'; |
|
case 0: return 'Metadata'; |
|
case 3: return 'Follow List'; |
|
default: return `Kind ${kind}`; |
|
} |
|
}
|