ng-admin v0.5 breaks compatibility with v0.4. You will need to update your configuration to be able to use this new version.
Breaking compatibility allows us to make ng-admin compatible with much more types of REST APIs.
The list query parameters were renamed, as follows:
page => _page
per_page => _perPage
_sort => _sortField
_sortDir => _sortDir
(unchanged)
In addition, filters and quickfilters are not directly appended as query parameters, but as the value of the _filters
parameter.
That means that all params added by ng-admin are now prefixed by an underscore, and in camelCase.
Here is how a typical HTTP call from ng-admin to a backend API looks like:
You can use Restangular's addFullRequestInterceptor
to transform these into params that your API can understand (see example below).
To transform parameters on outgoing requests, ng-admin no longer offers any built-in hook. But you have the full power of Restangular's request interceptors, which allow you to customize pretty much everything about outgoing requests. Therefore the following methods are now removed:
view.extraParams(function|Object)
view.headers(function|Object)
view.interceptor(function)
listView.pagination()
listView.sortParams()
listView.filterQuery()
listView.filterParams()
listView.totalItems()
Here is an example of using Restangular built-in capabilities in order to manipulate the request before it is sent:
// replace
var Book = new Entity('books')
Book.listView().pagination(function(page, maxPerPage) {
return {
begin: (page - 1) * maxPerPage,
end: page * maxPerPage
};
});
// with
RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params, httpConfig) {
if (operation == 'getList' && what == 'books') {
params.begin = (params._page - 1) * params._perPage;
params.end = params._page * params._perPage;
delete params._page;
delete params._perPage;
}
return { params: params };
});
// replace
Book.listView().sortParams(function(field, dir) {
return {
params: { sort: field || 'id', sortDir: dir || 'DESC' },
headers: {}
};
});
// with
RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params, httpConfig) {
if (operation == 'getList' && what == 'books') {
params.sort = params._sortField || 'id';
params.sortDir = params._sortDir || 'DESC';
delete params._sortField;
delete params._sortDir;
}
return { params: params };
});
The advantage of request interceptors is that they can run on several entities, or on several verbs.
The same method can be used to add response interceptors.
Up to 0.4, ng-admin included a full-text search input on the list view by default. Now that ng-admin has the ability to define custom filters, the default full-text search has been removed.
If you need it, it's easy to re-add:
myEntity.listView()
.filters([
new Field('q').label('').attributes({ placeholder: 'search' })
]);
The resulting API call will be the same:
GET http://myapi.com/my_entity?q=foo
Quick Filters are now filters like others. The same feature can be achieved with classical filters.
// replace
myEntity.listView()
.addQuickFilter('Today', function () {
var now = new Date(),
year = now.getFullYear(),
month = now.getMonth() + 1,
day = now.getDate();
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;
return {
created_at: [year, month, day].join('-') // ?created_at=... will be appended to the API call
};
})
// with
myEntity.listView()
.filters([
new Field('today').type('boolean').map(function() {
var now = new Date(),
year = now.getFullYear(),
month = now.getMonth() + 1,
day = now.getDate();
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;
return {
created_at: [year, month, day].join('-') // ?created_at=... will be appended to the API call
};
})
])
Field.displayed()
wasn't used and has been removed.
All directives created by ng-admin have nowe been prefixed with 'ma-'. If you use any of the reusable directives (like <edit-button>
), you must switch to the prefixed version (like <ma-edit-button>
).
In addition to these changes, ng-admin 0.5 comes with a huge list of new features: Theming, filters, fields reusability, API mapping, Menu icons, JSON field, Error message customization... Check the changelog for a complete list of changes.