47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { type Period, isPeriodActive } from './periodUtils'
|
|
|
|
interface ContactPoint {
|
|
system?: String
|
|
use?: String
|
|
rank?: Number
|
|
period?: Period
|
|
value?: String
|
|
}
|
|
|
|
export function getContactPoints(
|
|
contact: ContactPoint[],
|
|
system: 'phone' | 'email' | 'url' | 'fax' | 'pager' | 'sms' | 'other',
|
|
): String[] {
|
|
if (!contact || contact.length === 0) {
|
|
return []
|
|
}
|
|
|
|
// Filter contact points by the specified system
|
|
const filteredBySystem = contact.filter((cp) => cp.system === system)
|
|
|
|
if (filteredBySystem.length === 0) {
|
|
return []
|
|
}
|
|
|
|
// Filter active contact points using the exported function
|
|
const activeContactPoints = filteredBySystem.filter((cp) =>
|
|
isPeriodActive(cp.period),
|
|
)
|
|
|
|
let sortedContactPoints: ContactPoint[]
|
|
if (activeContactPoints.length > 0) {
|
|
// Sort active contact points by rank (lower rank is preferred)
|
|
activeContactPoints.sort(
|
|
(a, b) => (a.rank || Infinity) - (b.rank || Infinity),
|
|
)
|
|
sortedContactPoints = activeContactPoints
|
|
} else {
|
|
// If no active contact points, return all contact points for the system sorted by rank
|
|
filteredBySystem.sort((a, b) => (a.rank || Infinity) - (b.rank || Infinity))
|
|
sortedContactPoints = filteredBySystem
|
|
}
|
|
|
|
// Map the sorted ContactPoint array to an array of their 'value' properties
|
|
return sortedContactPoints.map((cp) => cp.value || '')
|
|
}
|