Migrating from ghl-ui TimePicker to HighRise TimePicker
This guide will help you migrate from the ghl-ui TimePicker component to the new HighRise TimePicker component.
Component Implementation Changes
Import Changes
diff
- import { UITimePicker } from '@gohighlevel/ghl-ui'
+ import { HLTimePicker } from '@platform-ui/highrise'
Basic Usage Changes
diff
- <UITimePicker
- v-model="selectedTime"
- label="Select Time"
- />
+ <HLTimePicker
+ id="time-picker"
+ v-model:value="selectedTime"
+ label="Select Time"
+ />
Form Integration Changes
diff
- <UIForm :model="formModel">
- <UIFormItem label="Appointment">
- <UITimePicker
- v-model="formModel.appointmentTime"
- label="Select Time"
- />
- </UIFormItem>
- </UIForm>
+ <HLForm :model="formModel" :rules="rules">
+ <HLFormItem
+ label="Appointment"
+ path="appointmentTime"
+ required
+ >
+ <HLTimePicker
+ id="appointment-time"
+ v-model:value="formModel.appointmentTime"
+ label="Select Time"
+ />
+ </HLFormItem>
+ </HLForm>
Props Changes
ghl-ui Prop | HighRise Prop | Notes |
---|---|---|
v-model | v-model:value | Changed to use value prop |
status | status | New prop for validation status |
validation-message | validation-message | New prop for validation feedback |
clearable | clearable | New prop for clearing selection |
size | size | New size options: 'sm', 'md', 'lg' |
use12Hours | use12Hours | New prop for 12/24 hour format |
minuteStep | minuteStep | New prop for minute interval |
Examples
Basic TimePicker
vue
<template>
<HLTimePicker id="basic-timepicker" v-model:value="selectedTime" label="Select Time" />
</template>
<script setup>
import { ref } from 'vue'
import { HLTimePicker } from '@platform-ui/highrise'
const selectedTime = ref(null)
</script>
TimePicker with Validation
vue
<template>
<HLForm :model="formModel" :rules="rules">
<HLFormItem label="Appointment" path="appointmentTime" required>
<HLTimePicker
id="appointment-time"
v-model:value="formModel.appointmentTime"
label="Select Time"
:status="validationStatus"
:validation-message="validationMessage"
/>
</HLFormItem>
</HLForm>
</template>
<script setup>
import { ref, computed } from 'vue'
import { HLForm, HLFormItem, HLTimePicker } from '@platform-ui/highrise'
const formModel = ref({
appointmentTime: null,
})
const validationStatus = computed(() => {
if (!formModel.value.appointmentTime) return 'error'
return undefined
})
const validationMessage = computed(() => {
if (!formModel.value.appointmentTime) return 'Please select a time'
return undefined
})
const rules = {
appointmentTime: [
{
required: true,
message: 'Please select a time',
trigger: 'change',
},
],
}
</script>
TimePicker with Different Sizes
vue
<template>
<div class="space-y-4">
<HLTimePicker id="timepicker-lg" v-model:value="value" size="lg" label="Large TimePicker" />
<HLTimePicker id="timepicker-md" v-model:value="value" size="md" label="Medium TimePicker" />
<HLTimePicker id="timepicker-sm" v-model:value="value" size="sm" label="Small TimePicker" />
</div>
</template>
<script setup>
import { ref } from 'vue'
import { HLTimePicker } from '@platform-ui/highrise'
const value = ref(null)
</script>
TimePicker with 12-Hour Format
vue
<template>
<HLTimePicker id="timepicker-12h" v-model:value="selectedTime" label="Select Time" :use12Hours="true" />
</template>
<script setup>
import { ref } from 'vue'
import { HLTimePicker } from '@platform-ui/highrise'
const selectedTime = ref(null)
</script>
TimePicker with Minute Step
vue
<template>
<HLTimePicker id="timepicker-step" v-model:value="selectedTime" label="Select Time" :minuteStep="15" />
</template>
<script setup>
import { ref } from 'vue'
import { HLTimePicker } from '@platform-ui/highrise'
const selectedTime = ref(null)
</script>
Best Practices
- Always provide a unique
id
for accessibility - Use
v-model:value
for two-way binding - Implement proper form validation
- Use appropriate size variants
- Consider mobile responsiveness
- Add proper ARIA labels
- Handle loading states appropriately
- Use descriptive labels
- Implement proper error handling
- Consider using tooltips for additional information
- Handle disabled states properly
- Use consistent spacing and alignment
- Consider time format localization
- Handle timezone differences appropriately
- Use appropriate minute steps for your use case
- Consider 12/24 hour format based on user preferences
Additional Notes
- The component automatically handles focus states
- Error states are managed through validation status
- Supports keyboard navigation
- Maintains consistent styling with other form components
- Handles disabled states consistently
- Integrates seamlessly with form validation
- Maintains accessibility standards
- Supports custom styling through CSS variables
- Provides clear visual feedback for all states
- Works well on both desktop and mobile devices
- Supports both controlled and uncontrolled modes
- Includes built-in validation support
- Supports time range selection
- Handles time formatting and parsing
- Supports custom time formats
- Provides clear time input validation
- Supports timezone conversion
- Handles AM/PM selection in 12-hour format