Adding JSON API support to ember-models-table in Open Event Front-end

Open Event Front-end project uses ember-models-table for handling all the table components in the application. Although ember-models-table is great for handling server requests for operations like pagination, sorting & filtering, but it does not support JSON API used in the Front-end project. In this blog we will see how we integrated JSON API standards to ember-models-table. Lets see how we added support for JSON API to table and made requests to the Open Event Orga-server. Adding JSON API support for filtering & sorting The JSON API specs follow a strict structure for supporting meta data & filtering options, the server expects an array of objects for specifying the name of the field, operation and the value for filtering. The name attribute specifies the column for which we need to apply the filter. eg we use `name` for the events name in the. `op` attribute specifies the operation to be used for filtration, `val` attribute is used to provide a value for comparison. You can check the list of all the supported operations here. For implementation of filter we will check if the column filter is being used i.e if the filter string is empty or not, if the string is not empty we add a filter object of the column using the specified specs, else we remove the filter object of the column. if (filter) { query.filter.pushObject({ name : filterTitle, op : 'ilike', val : `%${filter}%` }); } else { query.filter.removeObject({ name : filterTitle, op : 'ilike', val : `%${filter}%` }); } For sort functionally we need to pass a query parameter called `sort` which is a string value in the URL. Sorting can be done in ascending or descending order for which the server expects different values. We pass `sort=name` & `sort=-name` for sorting in ascending order & descending order respectively. const sortSign = { none : '', asc : '-', desc : '' }; let sortedBy = get(column, 'sortedBy'); if (typeOf(sortedBy) === 'undefined') { sortedBy = get(column, 'propertyName'); } Adding support for pagination The pagination in JSON API is implemented using query parameters `page[size]` & `page[number]` which specify the size of the page & the current page number respectively eg page[size]=10&page[number]=1 This will load the first ten events from the server in the application. Once the data is loaded in the application we calculate the number of pages to be rendered. The response from the server has attached meta-data which contains the total number of the events in the following structure: meta: { count: 100 } We calculate the number of pages by dividing the total count by the size of the page. We check if the number of items is greater than the pageSize, and calculate the number of the pages using the formula `items / pagesize + (items % pagesize ? 1 : 0)`. If the items are less than the pageSize we do not have to calculate the pages and we simply hide the pagination in the footer. if (pageSize > items) { this.$('.pagination').css({ display:…

Continue ReadingAdding JSON API support to ember-models-table in Open Event Front-end