.
I may have missed a number of things, gotten too specific in
places or not specific enough in others. This should hopefully get
a good discussion going on how we want to handle paging across all
of the client libraries. Let's keep all comments on the list and
not the gist as much as possible to avoid breaking up the
conversation.
Below is a pipe configuration showing the different paging
options. Defaults are just suggestions and are up for
discussion as much as the rest of it
var pagedPipe = AeroGear.Pipeline({
name: "pager",
settings: {
paged: {String}, // Default is "headers", can
also be "content", or undefined for no paging
pageConfig: { // Only required if paged is not
undefined
// which page, header default is
"AG-Paging-Offset", content default is "paging.offset"
offset: {String},
offsetVal: {Number}, // Default 0 for first
page
// items per page, header default is
"AG-Paging-Limit", content default is "paging.limit"
limit: {String},
limitVal: {Number}, // Default 5 items per
page
// total number of items, header default is
"AG-Paging-Total", content default is "paging.total"
total: {String},
// link to next page, default in both cases
is undefined
next: {String},
// link to previous page, default in both
cases is undefined
prev: {String}
}
}
}).pipes.pager;
Getter/Setter methods should be provided for getting and
updating the offsetVal and limitVal defaults
var defaultOffset = pagedPipe.getOffsetVal();
pagedPipe.setOffsetVal( defaultOffset + 1 ); // by
default the second page would be returned
var defaultLimit = pagedPipe.getLimitVal();
pagedPipe.setLimitVal( defaultLimit + 5 ); // by
default, 10 items would be returned per page
## read()
By default, a read() against a paged pipe will return the
first page based on the default offsetVal and limitVal. We
could possible add an option that doesn't effect unpaged pipes
but on a paged pipe, it can be used to turn off paging for
that read() and get all data
// Get first page
pagedPipe.read({success callback handles data});
// Get all data from paged pipe
pagedPipe.read({
page: false,
success: handle the data
});
To avoid code duplication, **next**, **prev**, **first**
and **last** pages can be retrieved by passing an option to
the read method of a paged pipe since other than some paging
housekeeping, the code would be the same. We can also use that
same option as above that was used to get all data from a
paged pipe. One question, when requesting prev from first page
or next from last page, should it throw an error that needs to
be handled or just return and empty data set? I see advantages
and disadvantages of both.
// Get next page
pagedPipe.read({
page: "next",
success: handle the data
});
// Get previous page
pagedPipe.read({
page: "prev",
success: handle the data
});
// Get first page
pagedPipe.read({
page: "first",
success: handle the data
});
// Get last page
pagedPipe.read({
page: "last",
success: handle the data
});