1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-01 06:12:59 +02:00
TableFilter/src/modules/store.js

147 lines
3.7 KiB
JavaScript
Raw Normal View History

2015-05-30 14:23:33 +02:00
import Cookie from '../cookie';
import Types from '../types';
2014-11-30 11:38:40 +01:00
export class Store{
2014-12-05 02:10:00 +01:00
/**
* Store, persistence manager
* @param {Object} tf TableFilter instance
2015-05-16 11:58:56 +02:00
*
* TODO: use localStorage and fallback to cookie persistence
2014-12-05 02:10:00 +01:00
*/
constructor(tf){
let f = tf.config();
2014-11-30 11:38:40 +01:00
2016-02-13 13:27:28 +01:00
//cookie storing filter values
this.fltsValuesCookie = tf.prfxCookieFltsValues + tf.id;
//cookie storing page nb
this.pgNbCookie = tf.prfxCookiePageNb + tf.id;
//cookie storing page length
this.pgLenCookie = tf.prfxCookiePageLen + tf.id;
2014-11-30 11:38:40 +01:00
this.duration = !isNaN(f.set_cookie_duration) ?
parseInt(f.set_cookie_duration, 10) : 100000;
this.tf = tf;
this.emitter = tf.emitter;
}
init(){
2016-02-06 04:08:46 +01:00
this.emitter.on(['after-filtering'], ()=> this.saveFilterValues());
this.emitter.on(['after-clearing-filters'], ()=> this.clearCookies());
this.emitter.on(['after-page-change'],
2016-02-06 04:08:46 +01:00
(tf, index)=> this.savePageNb(index));
this.emitter.on(['after-page-length-change'],
2016-02-06 04:08:46 +01:00
(tf, index)=> this.savePageLength(index));
2014-11-30 11:38:40 +01:00
}
2014-12-05 02:10:00 +01:00
/**
* Store filters' values in cookie
*/
2016-02-06 04:08:46 +01:00
saveFilterValues(){
let tf = this.tf;
let fltValues = [];
2016-01-09 10:22:57 +01:00
if(!tf.rememberGridValues){
return;
}
2014-11-30 11:38:40 +01:00
//store filters' values
for(let i=0; i<tf.fltIds.length; i++){
let value = tf.getFilterValue(i);
//convert array to a || separated values
if(Types.isArray(value)){
let rgx = new RegExp(tf.separator, 'g');
value = value.toString()
.replace(rgx, ' ' + tf.orOperator + ' ');
}
2014-11-30 11:38:40 +01:00
if (value === ''){
value = ' ';
}
2014-12-05 02:10:00 +01:00
fltValues.push(value);
2014-11-30 11:38:40 +01:00
}
2014-12-05 02:10:00 +01:00
//write cookie
2014-11-30 11:38:40 +01:00
Cookie.write(
2016-02-13 13:27:28 +01:00
this.fltsValuesCookie,
2014-12-05 02:10:00 +01:00
fltValues.join(tf.separator),
this.duration
);
}
/**
* Retrieve filters' values from cookie
* @return {Array}
*/
2016-02-06 04:08:46 +01:00
getFilterValues(){
2016-02-13 13:27:28 +01:00
let flts = Cookie.read(this.fltsValuesCookie);
let rgx = new RegExp(this.tf.separator, 'g');
2014-12-05 02:10:00 +01:00
// filters' values array
return flts.split(rgx);
}
/**
* Store page number in cookie
2016-02-06 04:08:46 +01:00
* @param {Number} index page index to persist
2014-12-05 02:10:00 +01:00
*/
2016-02-06 04:08:46 +01:00
savePageNb(index){
2016-01-09 10:22:57 +01:00
if(!this.tf.rememberPageNb){
return;
}
2014-12-05 02:10:00 +01:00
Cookie.write(
2016-02-13 13:27:28 +01:00
this.pgNbCookie,
2016-02-06 04:08:46 +01:00
(index+1),
2014-11-30 11:38:40 +01:00
this.duration
);
}
2014-12-05 02:10:00 +01:00
/**
* Retrieve page number from cookie
* @return {String}
*/
2016-02-06 04:08:46 +01:00
getPageNb(){
2016-02-13 13:27:28 +01:00
return Cookie.read(this.pgNbCookie);
2014-12-05 02:10:00 +01:00
}
/**
* Store page length in cookie
2016-02-06 04:08:46 +01:00
* @param {Number} index page length index to persist
2014-12-05 02:10:00 +01:00
*/
2016-02-06 04:08:46 +01:00
savePageLength(index){
2016-01-09 10:22:57 +01:00
if(!this.tf.rememberPageLen){
return;
}
2014-12-05 02:10:00 +01:00
Cookie.write(
2016-02-13 13:27:28 +01:00
this.pgLenCookie,
2016-02-06 04:08:46 +01:00
index,
2014-12-05 02:10:00 +01:00
this.duration
);
}
/**
* Retrieve page length from cookie
* @return {String}
*/
2016-02-06 04:08:46 +01:00
getPageLength(){
2016-02-13 13:27:28 +01:00
return Cookie.read(this.pgLenCookie);
2014-12-05 02:10:00 +01:00
}
/**
* Remove all cookies
*/
clearCookies(){
2016-02-13 13:27:28 +01:00
Cookie.remove(this.fltsValuesCookie);
Cookie.remove(this.pgLenCookie);
Cookie.remove(this.pgNbCookie);
}
destroy(){
2016-02-06 04:08:46 +01:00
this.emitter.off(['after-filtering'], ()=> this.saveFilterValues());
this.emitter.off(['after-clearing-filters'], ()=> this.clearCookies());
this.emitter.off(['after-page-change'],
2016-02-06 04:08:46 +01:00
(tf, index)=> this.savePageNb(index));
this.emitter.off(['after-page-length-change'],
2016-02-06 04:08:46 +01:00
(tf, index)=> this.savePageLength(index));
}
2014-12-05 02:10:00 +01:00
}