package Ġexample . crud flow . person Ċ Ċ import Ġcom . github . mv ys ny . k ari bud sl . v 1 0 .* Ċ import Ġcom . github . mv ys ny . k ari but ools .* Ċ import Ġcom . github . mv ys ny . k ari but ools . Modifier Key .* Ċ import Ġcom . github . mv ys ny . v ok dataloader . asc Ċ import Ġcom . github . v ok orm . dataloader . data Loader Ċ import Ġcom . github . v ok orm . db Ċ import Ġcom . vaadin . flow . component . Key . KEY _ G Ċ import Ġcom . vaadin . flow . component . button . Button Ċ import Ġcom . vaadin . flow . component . button . Button Variant Ċ import Ġcom . vaadin . flow . component . grid . Column Text Align Ċ import Ġcom . vaadin . flow . component . grid . Grid Ċ import Ġcom . vaadin . flow . component . grid . context menu . Grid ContextMenu Ċ import Ġcom . vaadin . flow . component . icon . Icon Factory Ċ import Ġcom . vaadin . flow . component . icon . V aad in Icon Ċ import Ġcom . vaadin . flow . component . text field . TextField Ċ import Ġcom . vaadin . flow . data . renderer . Component Renderer Ċ import Ġcom . vaadin . flow . router . Route Ċ import Ġeu . vaadin on kotlin . toDate Ċ import Ġeu . vaadin on kotlin . vaadin .* Ċ import Ġeu . vaadin on kotlin . vaadin . v ok db . setData Loader Ċ import Ġeu . vaadin on kotlin . vaadin . v ok db . sort Ċ import Ġexample . crud flow . Main Layout Ċ import Ġjava . time . LocalDate Ċ Ċ /** Ċ Ġ* ĠThe Ġmain Ġview Ġcontains Ġa Ġbutton Ġand Ġa Ġtemplate Ġelement . Ċ Ġ*/ Ċ @ Route ("", Ġlayout Ġ= ĠMain Layout :: class ) Ċ class ĠPerson ListView Ġ: ĠK Composite () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġperson Grid : ĠGrid < Person > ĊĠĠĠ Ġlateinit Ġvar Ġgrid ContextMenu : ĠGrid ContextMenu < Person > ĊĊĠĠĠ Ġprivate Ġval Ġroot Ġ= Ġui Ġ{ ĊĠĠĠĠĠĠĠ Ġvertical Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Size Full () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh 4 (" Person Ġlist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" Generate Ġtesting Ġdata Ġ( Alt + G )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Left Click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Testing Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Click Shortcut ( Alt Ġ+ ĠKEY _ G ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson Grid Ġ= Ġgrid < Person > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflex Grow Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Header Row () Ġ// Ġbecause Ġof Ġhttps :// github . com / vaadin / vaadin - grid / issues / 1 8 7 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset DataLoader ( Person . data Loader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Bar : ĠV ok Filter Bar < Person > Ġ= Ġappend Header Row (). as Filter Bar ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button Column ( V aad in Icon . EY E , Ġ" view ", Ġ{ Ġperson : ĠPerson Ġ-> Ġnavigate To ( Person View :: class , Ġperson . id !! ) Ġ}) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button Column ( V aad in Icon . EDIT , Ġ" edit ", Ġ{ Ġperson : ĠPerson Ġ-> Ġcreate Or Edit Person ( person ) Ġ}) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button Column ( V aad in Icon . TR ASH , Ġ" delete ", Ġ{ Ġperson : ĠPerson Ġ-> Ġperson . delete (); Ġrefresh () Ġ}) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: id , Ġsortable Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ" 9 0 px "; Ġis Expand Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Bar . for Field ( TextField (), Ġthis ). ist art sWith () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: age ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ" 1 2 0 px "; Ġis Expand Ġ= Ġfalse ; ĠtextAlign Ġ= ĠColumn Text Align . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Bar . for Field ( Number Range Popup (), Ġthis ). in Range () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: alive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ" 1 3 0 px "; Ġis Expand Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Bar . for Field ( Boolean ComboBox (), Ġthis ). eq () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: date OfBirth , Ġconverter Ġ= Ġ{ Ġit ?. toString () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Bar . for Field ( DateRange Popup (), Ġthis ). in Range ( Person :: date OfBirth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: mar ital Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ" 1 6 0 px "; Ġis Expand Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Bar . for Field ( enum ComboBox < Mar ital Status >(), Ġthis ). eq () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn For ( Person :: created , Ġconverter Ġ= Ġ{ Ġit !!. to Instant (). toString () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Bar . for Field ( DateRange Popup (), Ġthis ). in Range ( Person :: created ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid ContextMenu Ġ= Ġgrid ContextMenu Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem (" view ", Ġ{ Ġperson : ĠPerson ? Ġ-> Ġif Ġ( person Ġ!= Ġnull ) Ġnavigate To ( Person View :: class , Ġperson . id !! ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem (" edit ", Ġ{ Ġperson : ĠPerson ? Ġ-> Ġif Ġ( person Ġ!= Ġnull ) Ġcreate Or Edit Person ( person ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem (" delete ", Ġ{ Ġperson : ĠPerson ? Ġ-> Ġif Ġ( person Ġ!= Ġnull ) Ġ{ Ġperson . delete (); Ġrefresh () Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort ( Person :: name . asc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Or Edit Person ( person : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCreate Edit Person ( person ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Save OrCreate Listener Ġ= Ġ{ Ġperson Grid . refresh () Ġ} ĊĠĠĠĠĠĠĠ Ġ}. open () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Testing Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 8 5 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPerson ( name Ġ= Ġ" generated $ it ", Ġage Ġ= Ġit Ġ+ Ġ 1 5 , Ġmar ital Status Ġ= ĠMar ital Status . Single , Ġalive Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate OfBirth Ġ= ĠLocalDate . of ( 1 9 9 0 , Ġ 1 , Ġ 1 ). plus Days ( it . to Long ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= ĠLocalDate . of ( 2 0 1 1 , Ġ 1 , Ġ 1 ). plus Days ( it . to Long ()). at Start OfDay ( Browser TimeZone . get ). to Instant (). toDate ). save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġperson Grid . dataProvider . refresh All () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠUtility Ġmethod Ġwhich Ġadds Ġa Ġcolumn Ġho using Ġone Ġsmall Ġicon Ġbutton Ġwith Ġgiven Ġ[ icon ] Ġand Ġ[ click Listener ]. Ċ Ġ*/ Ċ fun Ġ< T > ĠGrid < T >. add Button Column ( icon : ĠIcon Factory , Ġkey : ĠString , Ġclick Listener : Ġ( T ) Ġ-> ĠUnit , Ġblock : ĠGrid . Column < T >. ()-> Unit ): ĠGrid . Column < T > Ġ{ ĊĠĠĠ Ġval Ġrenderer Ġ= ĠComponent Renderer < Button , ĠT > Ġ{ Ġrow : ĠT Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠButton ( icon . create ()) ĊĠĠĠĠĠĠĠ Ġbutton . add Theme Variants ( Button Variant . L UM O _ ICON , ĠButton Variant . L UM O _ TER TI ARY , ĠButton Variant . L UM O _ SMALL ) ĊĠĠĠĠĠĠĠ Ġbutton . add ClickListener Ġ{ Ġclick Listener ( row ) Ġ} ĊĠĠĠĠĠĠĠ Ġbutton ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcolumn : ĠGrid . Column < T > Ġ= Ġadd Column ( renderer ). set Key ( key ). setWidth (" 5 0 px ") ĊĠĠĠ Ġcolumn . is Expand Ġ= Ġfalse ĊĠĠĠ Ġcolumn . block () ĊĠĠĠ Ġreturn Ġcolumn Ċ }