MAIN GRID SPECS OVERVIEW Main grids show all the stuff people have entered in Raven and are used for selection to edit/ view, filter and sort for reporting and mass operations. Proposed system is a hybrid grid system that has two modes to take into account the width of the display device: - Xtra Small (XS ) < 600 pixels wide (my phone is 393px) - In this mode only one column shows and it's formatted according to the Display Format Template - DisplayFormatTemplate is specd in the core-display-format-template-system.txt doc - So the user chooses which columns to show in a small factor themselves, default is name only or equivalent CASES None that are intrinsically grid related really, just 3 or so regarding specfic fields to add to grids REQUIREMENTS Client - Client needs to tell the server which form of list is required, i.e. it's client window size when fetching a list - HYBRID BIMODAL: XS or LARGE (for now but consider maybe a medium down the road in planning) - in XS mode - the client sends "viewport=xs" to the client with the grid data request - Client receives two field list back (id and display field), displays the single field - in large mode - the client sends no viewport= parameter as it's optional and understood to be full size - the list comes back as an object with not only the actual columns but also a separate property listing the set of columns in order to be displayed - Also their data type - Also need what type of object if openable with an url - Client expects an arbitrary set of columns in an arbitrary order defined by server so doesn't have a pre-ordained set of things. - HMMM... Maybe I only need a single list object that adapts to the data being sent back!!!!! - The client needs to be able to handle more columns than fit horizontally - The client needs to not wrap any column vertically but ellipse.. it instead - Client accepts a list of fields and types etc and generates the grid and populates the data dynamically - This means that I can make a general purpose Vue grid component, plunk it down on a form and then wrap it with what is unique about that form Server - Server needs to accept a parameter from the client when a grid list is fetched that tells it if it needs to send a single column templated list - viewport="XS" I think would be sufficient - Grid lists need to know what their template is as more than one list might use the same template? - SERVER SENDS LIST OF COLUMNS - The server needs to tell the client which columns are coming back with the list and what types etc so the client can just adapt to any template setting - column list has type of object behind each column if applicable so client can make hyperlinks - SERVER SENDS DATA - Data in a standard for all grid lists json format, not based on set objects (I think I can do that, probably a hybrid object with JSON data) - Each row has each column as a object comprising of: - Display value (the data to show, not formatted yet, that's up to the client) - Optional: ID value (if the object is openable then this is the id to open for the client to put a hyperlink on that column) - For example (wide list): data:{ columns:{ {name:"lt_client_name",datatype:text,ayatype:client},{name:"lt_client_notes",datatype:text},{name:"lt_last_workorder",datatype:number,ayatype:workorder}} rows:{ {display:"Green mechanics",id:32},"...notes...",{display:"42",id:42}, ...thousands more etc.... } } - For example (XS list) data:{ columns:{ {name:"lt_client",datatype:text,ayatype:client}} rows:{ {display:"Green mechanics",id:32}, ...thousands more etc.... } } - has separate property defining all columns in list, their datatype and ayatype if openable Back AND front end