# Showcase

## How to create a table that makes use of all the components.

#### Notes

- We make use of two static files (columns.json and rows.json) to supply the below examples data.
- The below example loads ten thousand (10000) rows from the server.
- Using the paging component drastically improves the performance of the plugin on large numbers of rows.
- The editing component requires you to create the modal and editor form that is displayed. Check out the individual component documentation or example for more details.

To create a table using multiple components simply enable those you want to use and set any specific options for them. The below example uses ajax to load the column and row data and enables the filtering, paging, sorting and editing components simultaneously.

#### Add Row

First Name
Last Name
Job Title
Started On
Date of Birth
Status

    <!-- Table Markup -->
    <table id="showcase-example-1" class="table" data-paging="true" data-filtering="true" data-sorting="true" data-editing="true"></table>

    <!-- Editing Modal Markup -->
    <div class="modal fade" id="editor-modal" tabindex="-1" role="dialog" aria-labelledby="editor-title">
    	<style scoped>
    		/* provides a red astrix to denote required fields - this should be included in common stylesheet */
    		.form-group.required .control-label:after {
    			content:"*";
    			color:red;
    			margin-left: 4px;
    		}
    	</style>
    	<div class="modal-dialog" role="document">
    		<form class="modal-content form-horizontal" id="editor">
    			<div class="modal-header">
    				<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
    				<h4 class="modal-title" id="editor-title">Add Row</h4>
    			</div>
    			<div class="modal-body">
    				<input type="number" id="id" name="id" class="hidden"/>
    				<div class="form-group required">
    					<label for="firstName" class="col-sm-3 control-label">First Name</label>
    					<div class="col-sm-9">
    						<input type="text" class="form-control" id="firstName" name="firstName" placeholder="First Name" required>
    					</div>
    				</div>
    				<div class="form-group required">
    					<label for="lastName" class="col-sm-3 control-label">Last Name</label>
    					<div class="col-sm-9">
    						<input type="text" class="form-control" id="lastName" name="lastName" placeholder="Last Name" required>
    					</div>
    				</div>
    				<div class="form-group">
    					<label for="jobTitle" class="col-sm-3 control-label">Job Title</label>
    					<div class="col-sm-9">
    						<input type="text" class="form-control" id="jobTitle" name="jobTitle" placeholder="Job Title">
    					</div>
    				</div>
    				<div class="form-group required">
    					<label for="startedOn" class="col-sm-3 control-label">Started On</label>
    					<div class="col-sm-9">
    						<input type="date" class="form-control" id="startedOn" name="startedOn" placeholder="Started On" required>
    					</div>
    				</div>
    				<div class="form-group">
    					<label for="dob" class="col-sm-3 control-label">Date of Birth</label>
    					<div class="col-sm-9">
    						<input type="date" class="form-control" id="dob" name="dob" placeholder="Date of Birth">
    					</div>
    				</div>
    				<div class="form-group">
    					<label for="status" class="col-sm-3 control-label">Status</label>
    					<div class="col-sm-9">
    						<select class="form-control" id="status" name="status">
    							<option value="Active">Active</option>
    							<option value="Disabled">Disabled</option>
    							<option value="Suspended">Suspended</option>
    						</select>
    					</div>
    				</div>
    			</div>
    			<div class="modal-footer">
    				<button type="submit" class="btn btn-primary">Save changes</button>
    				<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
    			</div>
    		</form>
    	</div>
    </div>

    jQuery(function($){
    	var $modal = $('#editor-modal'),
    		$editor = $('#editor'),
    		$editorTitle = $('#editor-title'),
    		ft = FooTable.init('#showcase-example-1', {
    			columns: $.get("../../content/columns.json"),
    			rows: $.get("../../content/rows.json"),
    			editing: {
    				addRow: function(){
    					$modal.removeData('row');
    					$editor[0].reset();
    					$editorTitle.text('Add a new row');
    					$modal.modal('show');
    				},
    				editRow: function(row){
    					var values = row.val();
    					$editor.find('#id').val(values.id);
    					$editor.find('#firstName').val(values.firstName);
    					$editor.find('#lastName').val(values.lastName);
    					$editor.find('#jobTitle').val(values.jobTitle);
    					$editor.find('#status').val(values.status);
    					$editor.find('#startedOn').val(values.started.format('YYYY-MM-DD'));
    					$editor.find('#dob').val(values.dob.format('YYYY-MM-DD'));
    					$modal.data('row', row);
    					$editorTitle.text('Edit row #' + values.id);
    					$modal.modal('show');
    				},
    				deleteRow: function(row){
    					if (confirm('Are you sure you want to delete the row?')){
    						row.delete();
    					}
    				}
    			}
    		}),
    		uid = 10001;

    	$editor.on('submit', function(e){
    		if (this.checkValidity && !this.checkValidity()) return;
    		e.preventDefault();
    		var row = $modal.data('row'),
    			values = {
    				id: $editor.find('#id').val(),
    				firstName: $editor.find('#firstName').val(),
    				lastName: $editor.find('#lastName').val(),
    				jobTitle: $editor.find('#jobTitle').val(),
    				started: moment($editor.find('#startedOn').val(), 'YYYY-MM-DD'),
    				dob: moment($editor.find('#dob').val(), 'YYYY-MM-DD'),
    				status: $editor.find('#status option:selected').val()
    			};

    		if (row instanceof FooTable.Row){
    			row.val(values);
    		} else {
    			values.id = uid++;
    			ft.rows.add(values);
    		}
    		$modal.modal('hide');
    	});
    });