Form Components
Reusable form components live in components/reusable/ and components/reusable/forms/. These extend the base TW* input components with domain-specific logic.
File Upload
| Component | File | Purpose |
|---|---|---|
| Dropzone | reusable/Dropzone.tsx | Drag-and-drop file upload area with validation |
| FileUpload | reusable/FileUpload.tsx | File upload button with progress tracking |
| ImageUploadCrop | reusable/ImageUploadCrop.tsx | Image upload with crop/resize functionality (react-image-crop) |
Rich Text
| Component | File | Purpose |
|---|---|---|
| RichTextEditor | reusable/RichTextEditor.tsx | Quill-based rich text editor for descriptions and notes |
| SafeHtml | reusable/SafeHtml.tsx | Renders sanitized HTML content (sanitize-html) |
| SafeHtmlViewer | reusable/SafeHtmlViewer.tsx | Read-only sanitized HTML viewer |
Phone & Currency
| Component | File | Purpose |
|---|---|---|
| PhoneNumberInput | reusable/PhoneNumberInput.tsx | Phone input with country code and formatting |
| CurrencyInput | reusable/forms/CurrencyInput.tsx | Currency amount input with symbol |
| SalaryFrequencyField | reusable/forms/SalaryFrequencyField.tsx | Salary amount + frequency (hourly/monthly/yearly) combo |
Autocomplete & Search
| Component | File | Purpose |
|---|---|---|
| CVAutocompleteCandidate | reusable/CVAutocompleteCandidate.tsx | Search candidates by CV content |
| CVAutocompleteCollaborator | reusable/CVAutocompleteCollaborator.tsx | Search collaborators by CV |
| CVAutocompleteTalent | reusable/CVAutocompleteTalent.tsx | Search talents by CV |
| JobAutocompleteInput | reusable/JobAutocompleteInput.tsx | Job search with autocomplete |
| TWLocationAutocomplete | ux/TWLocationAutocomplete.tsx | Location search with suggestions |
Selectors
| Component | File | Purpose |
|---|---|---|
| CompanySelector | reusable/CompanySelector.tsx | Single company selection dropdown |
| MultiCompanySelector | reusable/MultiCompanySelector.tsx | Multi-select for companies |
| ResponsibleUserSelect | reusable/ResponsibleUserSelect.tsx | Assign responsible user |
| UserSharingSelector | reusable/UserSharingSelector.tsx | Select users for sharing |
| CollaboratorRoleSelector | reusable/forms/CollaboratorRoleSelector.tsx | Role assignment for collaborators |
| CompanyContactSelector | reusable/forms/CompanyContactSelector.tsx | Contact autocomplete for company |
| SelectField | reusable/forms/SelectField.tsx | Generic select wrapper |
| ValueBasedSelect | reusable/forms/ValueBasedSelect.tsx | Value-based select component |
Email Management
| Component | File | Purpose |
|---|---|---|
| EmailManager | reusable/forms/EmailManager.tsx | Multi-email input with role assignment per email |
| EmailRoleSelector | reusable/forms/EmailRoleSelector.tsx | Email with role dropdown |
Other Inputs
| Component | File | Purpose |
|---|---|---|
| LabeledSlider | reusable/forms/LabeledSlider.tsx | Slider with descriptive label |
| OptionToExtend | reusable/forms/OptionToExtend.tsx | Contract extension options |
| ProjectPaymentSelector | reusable/forms/ProjectPaymentSelector.tsx | Payment type selector |
| ConfirmationInput | reusable/ConfirmationInput.tsx | Input requiring typed confirmation |
| NotesSection | reusable/NotesSection.tsx | Notes/comments section |
| PromoCodeInput | reusable/payments/PromoCodeInput.tsx | Promo code entry with validation |
Confirmation Dialogs
| Component | File | Purpose |
|---|---|---|
| ConfirmationModal | reusable/ConfirmationModal.tsx | Generic confirmation dialog |
| DeleteConfirmModal | reusable/DeleteConfirmModal.tsx | Delete confirmation with type-to-confirm |
Qualification Cards
Components in components/reusable/qualifications/ for displaying and adding CV sections:
| Component | Purpose |
|---|---|
| ExperienceCard / AddExperinceCard | Work experience display and form |
| EducationCard / AddEducationCard | Education display and form |
| CertificateCard / AddCertificationCard | Certification display and form |