@oslokommune/punkt-react
Version:
React komponentbibliotek til Punkt, et designsystem laget av Oslo Origo
146 lines (128 loc) • 3.93 kB
text/typescript
import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react'
import type { IDatepickerStrings } from 'shared-types/datepicker'
import type { TPktInputSize } from 'shared-types/size'
export interface IPktDatepicker extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {
id: string
label: string
// Datepicker-specific
value?: string | string[]
dateformat?: string
multiple?: boolean
maxlength?: number
range?: boolean
showRangeLabels?: boolean
weeknumbers?: boolean
withcontrols?: boolean
excludedates?: string[]
excludeweekdays?: string[]
currentmonth?: string
today?: string
calendarOpen?: boolean
timezone?: string
// InputWrapper props
fullwidth?: boolean
inputSize?: TPktInputSize
hasFieldset?: boolean
inline?: boolean
helptext?: string | ReactNode
helptextDropdown?: string | ReactNode
helptextDropdownButton?: string
hasError?: boolean
errorMessage?: string | ReactNode
optionalTag?: boolean
optionalText?: string
requiredTag?: boolean
requiredText?: string
tagText?: string
useWrapper?: boolean
// Localization
strings?: IDatepickerStrings
// Events
onChange?: (e: ChangeEvent<HTMLInputElement>) => void
onValueChange?: (values: string[]) => void
// React standard
className?: string
}
export interface IDatepickerState {
// Identity
id: string
inputId: string
// Values
values: string[]
// Calendar state
calendarOpen: boolean
// Props passthrough
label: string
dateformat: string
multiple: boolean
maxlength?: number
range: boolean
showRangeLabels: boolean
weeknumbers: boolean
withcontrols: boolean
excludedates?: string[]
excludeweekdays?: string[]
disabled: boolean
readOnly: boolean
required: boolean
name?: string
placeholder?: string
fullwidth: boolean
inputSize: TPktInputSize
hasFieldset: boolean
inline: boolean
helptext?: string | ReactNode
helptextDropdown?: string | ReactNode
helptextDropdownButton?: string
hasError: boolean
errorMessage?: string | ReactNode
optionalTag: boolean
optionalText?: string
requiredTag: boolean
requiredText?: string
tagText?: string
useWrapper: boolean
className?: string
minStr?: string
maxStr?: string
effectiveCurrentMonth?: string
today?: string
// Derived state
inputType: string
isIOSDevice: boolean
strings: IDatepickerStrings
inputClasses: string
buttonClasses: string
rangeLabelClasses: string
datepickerInputsClasses: string
isInputDisabled: boolean
hasCounter: boolean
// Refs
inputRef: React.RefObject<HTMLInputElement | null>
inputRefTo: React.RefObject<HTMLInputElement | null>
changeInputRef: React.RefObject<HTMLInputElement | null>
btnRef: React.RefObject<HTMLButtonElement | null>
wrapperRef: React.RefObject<HTMLDivElement | null>
// onChange passthrough for hidden input
onChange?: (e: ChangeEvent<HTMLInputElement>) => void
// Calendar callbacks
toggleCalendar: () => void
hideCalendar: () => void
handleDateSelected: (selected: string[]) => void
handleCalendarClose: () => void
// Input callbacks
handleFocus: () => void
handleSingleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void
handleRangeFromChange: (e: React.ChangeEvent<HTMLInputElement>) => void
handleRangeToChange: (e: React.ChangeEvent<HTMLInputElement>) => void
handleRangeBlur: () => void
handleMultipleBlur: (e: React.FocusEvent<HTMLInputElement>) => void
handleTagRemoved: (date: string) => void
// Keyboard callbacks
handleSingleKeydown: (e: React.KeyboardEvent<HTMLInputElement>) => void
handleRangeFromKeydown: (e: React.KeyboardEvent<HTMLInputElement>) => void
handleRangeToKeydown: (e: React.KeyboardEvent<HTMLInputElement>) => void
handleMultipleKeydown: (e: React.KeyboardEvent<HTMLInputElement>) => void
// Rest props (spread onto inputs)
restProps: Record<string, unknown>
}