Siirry sisältöön

14.5.0

Beta

DateRangePickerV2

Komponentti ajanjakson 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.

DateRangePickerV2 korvaa tulevaisuudessa DateRangePicker-komponentin.

Esikatselu

Käyttötarkoitus

Ajanjakson valitsin (DateRangePickerV2) tarjoaa käyttäjälle alku- ja loppupäivämäärien syöttökentät ja kalenterinäkymän päivämäärävälin valitsemiseen.

Päivämäärän voi syöttää muodoissa pp.kk.vvvv, p.k.vvvv, ppkkvvvv sekä vvvv-kk-pp.

Tee näin
  • 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. Myös erillisten päivämääräkenttien käyttöä kannattaa harkita.

  • Yksittäisen päivämäärän valitsemiseen kannattaa käyttää DatePickerV2-komponenttia.

Ä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

DateRangePickerV2:n 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äinToiminto
Nuoli vasemmalleSiirry edelliseen päivään.
Nuoli oikealleSiirry seuraavaan päivään.
Nuoli ylösSiirry edelliseen viikkoon.
Nuoli alasSiirry seuraavaan viikkoon.
Page UpSiirry edelliseen kuukauteen.
Page DownSiirry seuraavaan kuukauteen.
Shift + Page UpSiirry edelliseen vuoteen.
Shift + Page DownSiirry seuraavaan vuoteen.
HomeSiirry viikon alkuun.
EndSiirry 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.

Ajanjakson valinta

Ajanjakson valitseminen onnistuu joko syöttämällä alkamis- ja päättymispäivät tekstikenttiin tai valitsemalla ajanjakson kalenterista.

Oletuspäivän asettaminen ajanjaksolle

Oletusarvon voi antaa sekä alkamis- että päättymispäivälle, tai vain toiselle niistä. 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. Ajanjaksoa ei pysty valitsemaan siten, että ajanjakson sisällä olisi estettyjä päiviä. Kalenteri estää ne vaihtoehdot, joita ei voi valita, kun käyttäjä valitsee ensimmäisen päivämäärän.

Valinta voidaan estää:

  • yksittäisiltä päiviltä,
  • tietyltä aikaväliltä,
  • ennen tiettyä päivämäärää,
  • tietyn päivämäärän jälkeen, tai
  • tietyiltä viikonpäiviltä.

Päivämäärien validointi ja virheviestien asettaminen

Virhetilan asettaminen

Komponentin voi asettaa virhetilaan errorText ja invalid-proppien avulla.

Komponentille voi asettaa useamman virheviestin antamalla errorText-propille listan virheviesteistä.

Esimerkki virheenkäsittelyn toteuttamisesta

Komponentti palauttaa kaikkien tapahtumien (onChange, onSelect, onError, onBlur ja onCalendarClose) 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ä). Lisäksi palautetaan tieto, kumpaa kentistä käyttäjä on viimeksi käsitellyt. Validoinnin mukana palautetaan aina tulokset molempien kenttien validoinnista. 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. Sovelluksen vastuulle jää virheilmoitusten tarkempi käsittely, esimerkiksi milloin virheilmoitukset näytetään ja missä järjestyksessä.

Alta löytyy karkea esimerkki dynaamisen virheentarkistuksen toteuttamisesta:

Päivämäärien validointi getDateRangeValidator-funktiolla

Myös komponentin käyttämää getDateRangeValidator-funktiota voi hyödyntää validoinnin toteuttamiseen. Funktiolle annetaan samat validointisäännöt (required, fromRequired, fromDate, toDate, disabledDates, disablePast), kuin komponentille. Tätä voi hyödyntää esimerkiksi React Hook Formin validate-funktiossa. Oletusvirheilmoituksia voi päivittää toErrorTexts, fromErrorTexts ja rangeErrorTexts-objektien kautta.

Validoinnin palauttamat arvot

ParametriKuvaus
fieldKertoo kumpaa input-kenttää käyttäjä on viimeksi käsitellyt (onChange, onBlur, onError). Arvoina from, to tai undefined. Voidaan käyttää esimerkiksi validointiviestien kohdistamiseen.
from.isValid
to.isValid
Kertoo onko päivämäärä hyväksytty arvo (oikea päivämäärä ja läpäisee validoinnit).
from.valueAsDate
to.valueAsDate
Päivämäärä Date-objektina, silloin kun input-kentän syötteestä pystytään muodostamaan päivämäärä.
from.valueAsISO
to.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ä.
from.error.type
to.error.type
Virheen tyyppi: invalidFormat, invalidRelation, notInRangeTo, notInRangeFrom, required
from.error.message
to.error.message
Kenttäkohtainen oletusvirheviesti, jota voi päivittää localization-propin kautta.
range.isValidKertoo ovatko molemmat arvot hyväksyttyjä (oikeat päivämäärät ja läpäisevät validoinnit).
range.error.typeVirheen tyyppi: invalidRange
range.error.messageOletusvirheviesti, 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.

Estetty kenttä

Kentät voi tarvittaessa asettaa estetyksi, eli disabloiduksi. Tällöin päivämäärää ei pääse syöttämään tekstinä, eikä kalenterin kautta.

Ajanjakson päivittäminen komponentin ulkopuolelta

Tarvittaessa päivämääräarvon voi päivittää tai tyhjentää komponentin ulkopuolelta antamalla value-arvon. Proppien fromRef ja toRef kautta pääsee käsiksi input-elementteihin, mikä mahdollistaa esimerkiksi kohdistuksen siirtämisen kenttään.

Kalenterin lokalisointi

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ä.

Räätälöidyn ulkoasun toteuttaminen ajanjakson valinnan input-kentille

Input-elementtien tulostukseen voi vaikuttaa hyödyntämällä renderInputs-proppia, jolloin voidaan mm. muuttaa kenttien esitystapaa ja välittää input-elementeille haluttuja attribuutteja. Input-kentät eivät saa maksimileveyttä renderInputs-propin ollessa käytössä, joten kenttien leveyttä voi tarvittaessa rajoittaa omilla CSS-määrityksillä, tai hyödyntämällä palstakomponentteja. Toteuttajan vastuulle jää responsiivisen toiminnan ja saavutettavuuden varmistaminen.

Input-kentille voi renderInputs-propin avulla tulostaa myös kenttäkohtaiset nimilaput ja virheviestit.

Huom! Alla oleva esimerkki ei ole malli valmiista ulkoasusta, vaan tekninen esimerkki renderInputs-funktion käyttämisestä.

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ä).