Migrating from ghl-ui DatePicker to HighRise DatePicker
This guide will help you migrate from the ghl-ui DatePicker component to the new HighRise DatePicker component.
Component Implementation Changes
Import Changes
diff
- import { UIDatePicker } from '@gohighlevel/ghl-ui'
+ import { HLDatePicker } from '@platform-ui/highrise'Basic Usage Changes
diff
- <UIDatePicker
- v-model="selectedDate"
- label="Select Date"
- />
-
+ <HLDatePicker
+ id="date-picker"
+ v-model:value="selectedDate"
+ placeholder="Select date"
+ />Form Integration Changes
diff
- <UIForm :model="formModel">
- <UIFormItem label="Appointment">
- <UIDatePicker
- v-model="formModel.appointmentDate"
- label="Select Date"
- />
- </UIFormItem>
- </UIForm>
-
+ <HLForm :model="formModel" :rules="rules">
+ <HLFormItem label="Appointment" path="appointmentDate" required>
+ <HLDatePicker
+ id="appointment-date"
+ v-model:value="formModel.appointmentDate"
+ placeholder="Select date"
+ />
+ </HLFormItem>
+ </HLForm>Props Changes
| ghl-ui Prop | HighRise Prop | Notes |
|---|---|---|
v-model | v-model:value | Emits update:value and update:formatted-value |
type | type | 'date' | 'daterange' | 'month' | 'year' | 'week' |
format | format | Defaults change per type; accepts date-fns patterns |
placeholder | placeholder | For ranges, pass ['Start', 'End']; startPlaceholder/endPlaceholder removed |
clearable | clearable | Same behavior, default false |
shortcuts | shortcuts | Same structure for quick-pick presets |
| - | show | Control panel visibility; sync with @update:show |
| - | showCTA | Enables confirm/cancel footer; defers emission until confirm |
| - | updateValueOnConfirm | When showCTA is true, emit immediately (false) or on confirm (true) |
disabled | disabled | Unchanged |
status | status | Visual status: 'success' | 'warning' | 'error' |
isDateDisabled | isDateDisabled | Predicate for disabling dates |
Examples
Basic DatePicker
vue
<template>
<HLDatePicker id="basic-datepicker" v-model:value="selectedDate" placeholder="Select date" />
</template>
<script setup>
import { ref } from 'vue'
import { HLDatePicker } from '@platform-ui/highrise'
const selectedDate = ref(null)
</script>DatePicker with Validation
vue
<template>
<HLForm :model="formModel" :rules="rules">
<HLFormItem label="Appointment" path="appointmentDate" required>
<HLDatePicker id="appointment-date" v-model:value="formModel.appointmentDate" placeholder="Select date" :status="validationStatus" />
</HLFormItem>
</HLForm>
</template>
<script setup>
import { ref, computed } from 'vue'
import { HLForm, HLFormItem, HLDatePicker } from '@platform-ui/highrise'
const formModel = ref({
appointmentDate: null,
})
const validationStatus = computed(() => {
if (!formModel.value.appointmentDate) return 'error'
return undefined
})
const rules = {
appointmentDate: [
{
required: true,
message: 'Please select a date',
trigger: 'change',
},
],
}
</script>DatePicker with Different Sizes
vue
<template>
<div class="space-y-4">
<HLDatePicker id="datepicker-lg" v-model:value="value" size="lg" placeholder="Large DatePicker" />
<HLDatePicker id="datepicker-md" v-model:value="value" size="md" placeholder="Medium DatePicker" />
<HLDatePicker id="datepicker-sm" v-model:value="value" size="sm" placeholder="Small DatePicker" />
</div>
</template>
<script setup>
import { ref } from 'vue'
import { HLDatePicker } from '@platform-ui/highrise'
const value = ref(null)
</script>DatePicker with Clearable Option
vue
<template>
<HLDatePicker id="clearable-datepicker" v-model:value="selectedDate" placeholder="Select date" clearable />
</template>
<script setup>
import { ref } from 'vue'
import { HLDatePicker } from '@platform-ui/highrise'
const selectedDate = ref(null)
</script>Best Practices
- Bind both
v-model:valueand, when needed,@update:formatted-valuefor display-ready values. - Use
placeholder(or a two-item array) to guide users; labels belong onHLFormItem. - Enable
show-ctawhen you need explicit confirmation; otherwise rely on immediate emission. - Guard selections with
is-date-disabledrather than post-validating. - Align
formatwith backend expectations; defaults differ by pickertype. - Constrain selectable years via
min-year/max-yearwhen applicable. - Keep
type="daterange"only when your model accepts arrays; otherwise stick todate. - Sync controlled visibility with
show+@update:showto avoid stale open states. - Set
auto-complete-offwhen browser autofill conflicts with date inputs. - Pair
statuswith form validation feedback for consistent UI states.
Additional Notes
- Events:
update:value,update:formatted-value,update:show,confirm,cancel,clear,focus,blur. showCTAdefers value emission until confirm; combine withupdate-value-on-confirm="false"for immediate updates.placeholderreplacesstartPlaceholder/endPlaceholder; pass an array for range placeholders.- Range, month, year, and week pickers reuse the same component via the
typeprop. - Style via container classes; component theme tokens come from HighRise defaults.