ultisuite-client/lib/contacts/bulk-edit-fields.ts
R3D347HR4Y 07d57f13a8
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
Add Contact Avatar Features and Improve UI Components
- Introduced new ContactAvatar and ContactAvatarPicker components for enhanced avatar management in contact views.
- Updated ContactDetailView and ContactFormView to utilize the new avatar components, improving user experience when adding or editing contacts.
- Enhanced ContactHoverCard and ContactRow components to display avatars, providing a more visually appealing interface.
- Added loading and error states in ContactsListView for better user feedback during data fetching.
- Implemented a new ContactsLoadState component to handle loading and error scenarios in the contacts list.
- Updated package.json to include @formkit/auto-animate for improved UI animations.
2026-06-06 20:26:51 +02:00

58 lines
1.3 KiB
TypeScript

import type { FullContact } from "./types"
export type ContactBulkEditField =
| "company"
| "department"
| "jobTitle"
| "website"
| "notes"
export const CONTACT_BULK_EDIT_FIELDS: {
id: ContactBulkEditField
label: string
}[] = [
{ id: "company", label: "Entreprise" },
{ id: "department", label: "Service" },
{ id: "jobTitle", label: "Poste" },
{ id: "website", label: "Site web" },
{ id: "notes", label: "Notes" },
]
export function getContactBulkFieldValue(
contact: FullContact,
field: ContactBulkEditField,
): string {
const raw = contact[field]
return typeof raw === "string" ? raw.trim() : ""
}
export function collectBulkFieldSuggestions(
contacts: FullContact[],
field: ContactBulkEditField,
): string[] {
const seen = new Set<string>()
const out: string[] = []
for (const contact of contacts) {
const value = getContactBulkFieldValue(contact, field)
if (!value) continue
const key = value.toLowerCase()
if (seen.has(key)) continue
seen.add(key)
out.push(value)
}
return out.sort((a, b) => a.localeCompare(b, "fr"))
}
export function applyBulkFieldValue(
contact: FullContact,
field: ContactBulkEditField,
value: string,
): FullContact {
const trimmed = value.trim()
return {
...contact,
[field]: trimmed || undefined,
updatedAt: Date.now(),
}
}