import { BuilderNode } from "@kit.ArkUI"
import { buildCalendarPicker } from "./builder.ets"
interface CalendarPickerOptions {
selected ?: Date
hintRadius ?: number
alignType ?: CalendarAlign
offsetX ?: number | string
offsetY ?: number | string
color ?: string
fontSize ?: number
fontWeight ?: 100 | 400 | 500 | 700 | 900
fontStyle ?: FontStyle
onChange ?: (value : Date) => void
}
export class CalendarPicker {
private onChanges : Array<(value : Date) => void> = []
private params : CalendarPickerOptions = {
onChange: (value : Date) => {
this.onChanges.forEach((onChange) => {
onChange(value)
})
}
}
private builder : BuilderNode<[CalendarPickerOptions]> | null = null
init(element : UniNativeViewElement) {
this.builder =
element.bindHarmonyWrappedBuilder(wrapBuilder<[CalendarPickerOptions]>(buildCalendarPicker), this.params)
}
onChange(callback : (value : Date) => void) : CalendarPicker {
this.onChanges.push(callback)
return this
}
setSelected(date : Date) : CalendarPicker {
this.params.selected = date
this.builder?.update(this.params)
return this
}
setAlignType(alignType : 'start' | 'center' | 'end') : CalendarPicker {
switch (alignType) {
case 'start':
this.params.alignType = CalendarAlign.START
break
case 'center':
this.params.alignType = CalendarAlign.CENTER
break
case 'end':
this.params.alignType = CalendarAlign.END
break
}
this.builder?.update(this.params)
return this
}
setOffsetX(offsetX : number | string) : CalendarPicker {
this.params.offsetX = offsetX
this.builder?.update(this.params)
return this
}
setOffsetY(offsetY : number | string) : CalendarPicker {
this.params.offsetY = offsetY
this.builder?.update(this.params)
return this
}
setHintRadius(hintRadius : number) : CalendarPicker {
this.params.hintRadius = hintRadius
this.builder?.update(this.params)
return this
}
setColor(color : string) : CalendarPicker {
this.params.color = color
this.builder?.update(this.params)
return this
}
setFontSize(fontSize : number) : CalendarPicker {
this.params.fontSize = fontSize
this.builder?.update(this.params)
return this
}
setFontWeight(fontWeight : 100 | 400 | 500 | 700 | 900) : CalendarPicker {
this.params.fontWeight = fontWeight
this.builder?.update(this.params)
return this
}
setFontStyle(fontStyle : 'normal' | 'italic') : CalendarPicker {
switch (fontStyle) {
case 'normal':
this.params.fontStyle = FontStyle.Normal
break
case 'italic':
this.params.fontStyle = FontStyle.Italic
break
}
this.builder?.update(this.params)
return this
}
}