Komponentti yksittäisen päivämäärän syöttämiseen tai valitsemiseen kalenterinäkymästä.
Julkaistu versiossa 13.3.0
Komponentti on edelleen kehityksessä, joten sen API ja ominaisuudet saattavat vielä muuttua.
DatePickerV2 korvaa tulevaisuudessa DatePicker-komponentin.
Esikatselu
<DatePickerV2 labelText="Lorem Ipsum" />
Käyttötarkoitus
Päivämäärävalitsin (DatePickerV2) tarjoaa käyttäjälle päivämäärän syöttökentän ja kalenterinäkymän päivämäärän valitsemiseen.
Päivämäärän voi syöttää muodoissa pp.kk.vvvv, p.k.vvvv, ppkkvvvv sekä vvvv-kk-pp.
Tee näin
Estä päivät tai aikavälit, joita käyttäjä ei saa valita.
Jos käytät päivämäärävalitsinta tilanteessa, jossa on tarve syöttää päivämäärä usean vuoden päähän, aseta rajoitus päivämääräväliin. Tällöin käyttäjälle tulee kuukausi- ja vuosivalikot näkyviin.
Älä tee näin
Harkitse käytätkö päivämäärävalitsinta, jos on tarve syöttää päivämäärää usean vuoden päähän. Tällöin kannattaa useimmiten käyttää tavallista tekstikenttää (Input).
Jos käyttäjän tulee syöttää hänelle tuttu päivämäärä, esimerkiksi oma syntymäaika, kannattaa käyttää tavallista tekstikenttää (Input).
Saavutettavuus
Komponenttiin sisältyvä kalenteri tukee näppäimistönavigaatiota kohdistuksen ollessa kalenterinäkymän päivämäärävalinnoissa. Huom. ruudunlukijan käyttö saattaa vaikuttaa näppäimistönavigaation toimintatapaan.
Näppäin
Toiminto
Nuoli vasemmalle
Siirry edelliseen päivään.
Nuoli oikealle
Siirry seuraavaan päivään.
Nuoli ylös
Siirry edelliseen viikkoon.
Nuoli alas
Siirry seuraavaan viikkoon.
Page Up
Siirry edelliseen kuukauteen.
Page Down
Siirry seuraavaan kuukauteen.
Shift + Page Up
Siirry edelliseen vuoteen.
Shift + Page Down
Siirry seuraavaan vuoteen.
Home
Siirry viikon alkuun.
End
Siirry viikon loppuun.
Ruudunlukijalle tarkoitettuja tekstejä voi muokata komponentin localization-propin avulla. Saman propin avulla voi toteuttaa kalenterinäkymän lokalisointia mikäli käyttöliittymä näytetään jollain muulla kielellä kuin suomeksi.
Tarkemmat ohjeet localization-propin käytöstä löydät kalenterin lokalisointi osiosta.
Päivämäärän valinta
Oletuksena päivämäärä on asettamatta ja kalenteri avautuu kuluvan kuukauden kohdalta.
Komponentille voi määrittää oletuksena valitun päivämäärän. Oletusarvon ollessa käytössä kalenteri avataan aina oletuksena annetun päivämäärän kuukauden kohdalta. Oletusarvon voi antaa Date-objektina tai vvvv-kk-pp-muotoisena tekstiarvona.
Valinnan estäminen tietyiltä päiviltä tai aikaväleiltä
Valinta voidaan estää tietyiltä päiviltä tai aikaväleiltä. Estettyä päivää ei pysty valitsemaan kalenterista ja jos sen syöttää käsin, tulee käyttäjälle esittää virheilmoitus.
Päivämäärien validointi ja virheviestien asettaminen
Virhetilan asettaminen
Komponentin voi asettaa virhetilaan errorText ja invalid-proppien avulla.
<DatePickerV2
labelText="Päivämäärä"
helpText="Ilmoita päivämäärä muodossa pp.kk.vvvv"
errorText="Virheellinen päivämäärä. Ilmoita päivämäärä muodossa pp.kk.vvvv."
invalid
/>
Esimerkki virheenkäsittelyn toteuttamisesta
Komponentti palauttaa kaikkien tapahtumien (onChange, onSelect, onError ja onBlur) mukana validity-objektin,
josta löytyy validoinnin tila, virheen tyyppi ja virheviesti, sekä päivämäärä ISO ja Date-muotoisena tietona
(silloin kun input-kentän arvosta voidaan muodostaa päivämäärä). Sisäinen validointi kattaa komponentin tarjoamien proppien validoinnin.
Tarvittaessa sisäisen validoinnin voi jättää huomiotta, koska komponentti ei itse aseta itseään virhetilaan, vaan se tehdään
errorText ja invalid-proppien avulla.
Alta löytyy karkea esimerkki dynaamisen virheentarkistuksen toteuttamisesta:
function DatePickerV2Example() {
const [error, setError] = useState("");
const handleError = (validity) => {
if (validity.isValid) {
setError("");
} else {
setError(validity.error.message);
}
};
return (
<DatePickerV2
required
onChange={(dateValue, validity) => {
console.log("onChange", dateValue, validity);
handleError(validity);
}}
onBlur={(e, validity) => {
console.log("onBlur", e.target.value, validity);
handleError(validity);
}}
disablePast
invalid={!!error}
errorText={error}
labelText="Päivämäärä"
helpText="Syötä kenttään mennyt päivämäärä, tai siirry pois tyhjästä kentästä, niin saat virheilmoituksen esiin."
/>
);
}
Myös komponentin käyttämää getDateValidator-funktiota voi hyödyntää validoinnin toteuttamiseen.
Funktiolle annetaan samat validointisäännöt (required, fromDate, toDate, disabledDates, disablePast), kuin komponentille.
Tätä voi hyödyntää esimerkiksi React Hook Formin validate-funktiossa. Oletusvirheilmoituksia voi päivittää errorTexts-objektin kautta.
function DatePickerV2Example() {
const defaultValue = new Date("2022-12-10");
const validationProps = {
fromDate: new Date("2023-01-01"),
toDate: new Date("2023-12-31"),
required: true,
};
const validationResult = getDateValidator({
...validationProps,
errorTexts: { notInRangeFrom: "Päivämäärä ei ole sallitulla aikavälillä." },
}).validate(defaultValue);
return (
<DatePickerV2
calendarDefaultMonth="2023-10"
defaultValue={defaultValue}
labelText="Päivämäärä"
helpText="Ilmoita päivämäärä muodossa pp.kk.vvvv"
errorText={validationResult.error.message}
invalid={!validationResult.isValid}
{...validationProps}
/>
);
}
Validoinnin palauttamat arvot
Parametri
Kuvaus
isValid
Kertoo onko päivämäärä hyväksytty arvo (oikea päivämäärä ja läpäisee validoinnit).
valueAsDate
Päivämäärä Date-objektina, silloin kun input-kentän syötteestä pystytään muodostamaan päivämäärä.
valueAsISO
Päivämäärä ISO-muotoisena tekstinä (esim. 2023-10-30), silloin kun input-kentän syötteestä pystytään muodostamaan päivämäärä.
Oletusvirheviesti, jota voi päivittää localization-propin kautta.
Vuosi- ja kuukausivalikon näyttäminen
Vuosi- ja kuukausivalikon saa näkyviin, kun valinnan rajoittaa tietylle aikavälille. Valittavia päivämääriä voidaan rajoittaa tietylle välille fromDate- ja toDate-proppien avulla.
Vuosi- ja kuukausivalikkojen näyttämisen voi tarvittaessa estää asettamalla showDropdownNavigation-propin arvoksi false.
Kalenteriin saa halutessa viikkonumerot näkyviin showWeekNumbers -propilla.
<DatePickerV2 labelText="Päivämäärä" helpText="Ilmoita päivämäärä muodossa pp.kk.vvvv" showWeekNumbers />
Päivämääräarvon näyttäminen ilman etunollia
Input-kentässä näytettävä päivämääräarvo voidaan tarvittaessa esittää ilman etunollia asettamalla showLeadingZeros-propin arvoksi false. Oletuksena etunollat näytetään.
Tarvittaessa päivämääräarvon voi päivittää tai tyhjentää komponentin ulkopuolelta antamalla value-arvon.
Ref-propin kautta pääsee käsiksi input-elementtiin, joka mahdollistaa esimerkiksi kohdistuksen siirtämisen kenttään.
Lokalisointia tulee tehdä, jos käyttöliittymä näytetään jollain muulla kielellä kuin suomeksi tai jos suomenkielisiä ruudunlukijalle luettavia tekstejä halutaan muuttaa.
Kalenterinäkymän lokalisointi onnistuu localization-propin avulla. Propin sallima lokalisaatio-objekti sisältää locale-arvon, joka on tyypiltään date-fns-kirjaston Locale.
Lisäksi localization-objektin kautta pääsee muokkaamaan kalenteriin liittyvien toimintojen ruudunlukijoille annettavia label-tekstejä.
Funktio-muotoisten lokalisaatio-objektin labelien saama parametri riippuu käyttötapauksesta. Tarkempia tietoja
labeleista ja niiden parametreista selviää tutkimalla omassa koodieditorissa komponentin saamia tyypityksiä.
<DatePickerV2
labelText="Date"
helpText="Enter the date as dd.mm.yyyy"
placeholder="dd.mm.yyyy"
localization={{
ariaLabelWeekNumber: "Number of the week",
ariaStatusClearDate: "Selected date removed",
labelClearDate: "Clear date",
labelMonthDropdown: () => "Month",
labelYearDropdown: () => "Year",
labelNext: () => "Go to next month",
labelPrevious: () => "Go to previous month",
labelToggleCalendar: "Choose a date",
labelCloseCalendar: "Close the calendar",
labelSelected: "selected",
labelGoToCurrentDay: "Go to current day",
locale: enGB, // import { enGB } from "date-fns/locale/en-GB";
errorTexts: {
dateDisabled: "The selected date is not allowed. Choose another date.",
invalidFormat: "Invalid date. Enter the date as dd.mm.yyyy.",
notInRangeFrom: "Invalid date. Check that the day is within the allowed range.",
notInRangeTo: "Invalid date. Check that the day is within the allowed range.",
required: "The date is mandatory. Enter the date as dd.mm.yyyy.",
},
}}
/>
Tekniset rajoitteet
Kontrolloituna komponenttina käytettäessä päivämääräarvo tulee antaa value-propille pp.kk.vvvv-muodossa (samassa muodossa kuin input-kentässä).