3636 </ div >
3737 </ nav >
3838
39+ <!-- TABLE -->
40+ < div class ="container ">
41+ < table class ="table table-hover ">
42+ < thead >
43+ < tr >
44+ < th > Project</ th >
45+ </ tr >
46+ </ thead >
47+ < tbody id ="table ">
48+ < tr class ="_template ">
49+ < td class ="_name "> Project</ td >
50+ </ tr >
51+ </ tbody >
52+ </ table >
53+ </ div >
54+
3955 <!-- PLUS BUTTON -->
4056 < div class ="fixed-bottom d-flex flex-row-reverse ">
4157 < button id ="plus " class ="btn btn-circle bg-danger text-white onclick-item " title ="Add "> +</ button >
@@ -75,13 +91,13 @@ <h5 class="modal-title">Create New Project</h5>
7591 < label class ="col-sm-4 col-form-label "> Radio Buttons</ label >
7692 < div class ="col-sm-8 ">
7793 < div class ="form-check form-check-inline ">
78- < input class ="form-check-input " type ="radio " name ="radio "
79- id =" inlineRadio1 " value ="option1 ">
94+ < input class ="form-check-input " type ="radio " name ="radio " id =" inlineRadio1 "
95+ value ="option1 ">
8096 < label class ="form-check-label " for ="inlineRadio1 "> 1</ label >
8197 </ div >
8298 < div class ="form-check form-check-inline ">
83- < input class ="form-check-input " type ="radio " name ="radio "
84- id =" inlineRadio2 " value ="option2 ">
99+ < input class ="form-check-input " type ="radio " name ="radio " id =" inlineRadio2 "
100+ value ="option2 ">
85101 < label class ="form-check-label " for ="inlineRadio2 "> 2</ label >
86102 </ div >
87103 </ div >
@@ -121,19 +137,33 @@ <h5 class="modal-title">Create New Project</h5>
121137 var app = mvc . Controller . New ( ) ;
122138
123139 // Models
124- class Project extends mvc . Model { } ;
140+ class Project extends mvc . Model {
141+ constructor ( data ) {
142+ super ( data ) ;
143+ console . log ( data ) ;
144+ }
145+ } ;
146+ mvc . Model . define ( Project , {
147+ key : "_id string" ,
148+ name : "string" ,
149+ status : "string" ,
150+ createdDate : "created_date date" ,
151+ updatedDate : "updated_date date" ,
152+ tags : "{}string" ,
153+ } ) ;
125154
126155 // Add objects to the application
127156 app . Add ( 'nav' , new mvc . Nav ( document . querySelector ( "#nav" ) ) ) ;
128157 app . Add ( 'toast' , new mvc . Toast ( document . querySelector ( "#toast" ) ) ) ;
129158 app . Add ( 'plus' , new mvc . Button ( document . querySelector ( "#plus" ) ) ) ;
130159 app . Add ( 'form' , new mvc . Form ( document . querySelector ( "#form" ) ) ) ;
131- app . Add ( 'projects' , new mvc . Provider ( Project , 'https://rpi4b.mutablelogic.com' ) ) ;
160+ app . Add ( 'projects' , new mvc . Provider ( Project , 'https://rpi4b.mutablelogic.com' ) ) ;
161+ app . Add ( 'table' , new mvc . List ( document . querySelector ( "#table" ) , "_template" ) ) ;
132162
133163 // Show toast when button pressed
134164 app . plus . addEventListener ( 'mvc.button.click' , ( sender , target ) => {
135- app . form . replace ( "._range" , '' ) ;
136- app . form . show ( {
165+ app . form . replace ( "._range" , '' ) ;
166+ app . form . show ( {
137167 name : 'default' ,
138168 radio : 'option2' ,
139169 range : '0' ,
@@ -157,8 +187,31 @@ <h5 class="modal-title">Create New Project</h5>
157187 }
158188 } ) ;
159189
160- // Request projects
161- app . projects . request ( '/api/project/' ) ;
190+ // Set active row
191+ app . table . addEventListener ( 'mvc.list.click' , ( sender , target , key ) => {
192+ app . table . setClassForKey ( key , 'table-active' ) ;
193+ } ) ;
194+
195+ // Projects
196+ app . projects . addEventListener ( 'mvc.provider.error' , ( sender , error ) => {
197+ app . toast . show ( error ) ;
198+ } ) ;
199+ app . projects . addEventListener ( 'mvc.provider.added' , ( sender , project ) => {
200+ app . table . set ( project , project . key ) . replace ( '._name' , project . $json ) ;
201+ } ) ;
202+ app . projects . addEventListener ( 'mvc.provider.changed' , ( sender , project ) => {
203+ app . table . set ( project , project . key ) . replace ( '._name' , project . $json ) ;
204+ } ) ;
205+ app . projects . addEventListener ( 'mvc.provider.deleted' , ( sender , project ) => {
206+ app . table . deleteForKey ( project . key ) ;
207+ } ) ;
208+ app . projects . addEventListener ( 'mvc.provider.completed' , ( sender , changed ) => {
209+ // Resort table if changed
210+ console . log ( "Projects loaded, changed=" , changed ) ;
211+ } ) ;
212+
213+ // Request projects every 30 secs
214+ app . projects . request ( '/api/project/' , null , null , 30 * 1000 ) ;
162215
163216 } ) ;
164217 </ script >
0 commit comments