| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- var DBG = DBG || false;
- var DBG1 = true;
- if (!global.p5VendorJs) throw "Missing p5 Vendor js libs";
- if (!global.p5VendorJs.Redux) throw "Missing p5 Vendor js lib: Redux";
- var Redux = global.p5VendorJs.Redux;
- var ReduxThunk = global.p5VendorJs.ReduxThunk;
- var createStoreWithThunkMiddleware = Redux.applyMiddleware(ReduxThunk)(Redux.createStore); // TODO: to vendor.js
- function createFilterStoreWithInitialData(initialFilter) {
- DBG && console.log('INIT: initialFilter', { initialFilter });
- var initialState = {
- isLoading: false,
- isEmpty: true,
- filter: new Map(),
- specialFilter: new Map(),
- currSortCol: '',
- currSortFlip: false
- }
- Object.keys(initialFilter).forEach(function (key) {
- if ('currSortCol' === key) {
- initialState.currSortCol = initialFilter[key]
- } else if ('currSortFlip' === key) {
- if ('desc' === initialFilter[key]) initialState.currSortFlip = true;
- else if ('asc' === initialFilter[key]) initialState.currSortFlip = false;
- else initialState.currSortFlip = Boolean(initialFilter[key]);
- } else if ('f_' === key.substr(0, 2)) {
- initialState.filter.set(key.substr(2), initialFilter[key])
- } else if ('sf_' === key.substr(0, 3)) {
- initialState.specialFilter.set(key.substr(3), initialFilter[key])
- }
- })
- return function filterStore(state, action) {
- var prevState = state || initialState;
- DBG && console.warn('DBG:filterStore:' + action.type, action);
- switch (action.type) {
- // case 'SET_FILTER': return fixFilterState(Object.assign({}, prevState, {
- // filter: Object.assign(prevState.filter, {
- // [action.fieldName]: action.value
- // })
- // }));
- case 'TOGGLE_SORT': {
- return Object.assign(prevState, {
- currSortCol: action.fieldName,
- currSortFlip: !prevState.currSortFlip
- })
- }
- case 'SET_FILTER': {
- if (action.value) {
- prevState.filter.set(action.fieldName, action.value);
- } else {
- prevState.filter.delete(action.fieldName);
- }
- return Object.assign(prevState, {
- isEmpty: (0 === prevState.specialFilter.size && 0 === prevState.filter.size)
- })
- }
- case 'SET_SPECIAL_FILTER': {
- if (action.value) {
- prevState.specialFilter.set(action.fieldName, action.value);
- } else {
- prevState.specialFilter.delete(action.fieldName);
- }
- return Object.assign(prevState, {
- isEmpty: (0 === prevState.specialFilter.size && 0 === prevState.filter.size)
- })
- }
- case 'CLEAR_ALL_FILTERS': {
- prevState.filter.clear();
- prevState.specialFilter.clear();
- return Object.assign(prevState, {
- isLoading: false, isEmpty: true
- });
- }
- case 'SET_LOADING': return Object.assign(prevState, { // TODO: is loading for filter store or another store for rows?
- isLoading: true
- });
- case 'UNSET_LOADING': return Object.assign(prevState, {
- isLoading: false
- });
- default: return prevState;
- }
- }
- }
- function filterActions() {
- var delay = 450;
- var _filterTimeout = {};
- var _clearTimer = function (fieldName) {
- if (_filterTimeout[fieldName]) {
- clearTimeout(_filterTimeout[fieldName]);
- }
- }
- var _clearAllTimers = function () {
- Object.keys(_filterTimeout).forEach(_clearTimer);
- }
- function clearAllFilters() {
- DBG && console.log('DBG:filterStore:clearAllFilters');
- _clearAllTimers();
- return { type: 'CLEAR_ALL_FILTERS' };
- }
- function toggleSort(fieldName) {
- DBG && console.log('DBG:filterStore:toggleSort', { fieldName });
- return { type: 'TOGGLE_SORT', fieldName: fieldName };
- }
- function setFilter(fieldName, value) {
- DBG && console.log('DBG:filterStore:setFilter', { fieldName, value });
- return { type: 'SET_FILTER', fieldName: fieldName, value: value };
- }
- function setSpecialFilter(fieldName, value) {
- DBG && console.log('DBG:filterStore:setSpecialFilter', { fieldName, value });
- return { type: 'SET_SPECIAL_FILTER', fieldName: fieldName, value: value };
- }
- function delayFilter(fieldName, value) {
- DBG && console.log('DBG:filterStore:delayFilter', { fieldName, value });
- return function(dispatch, getState) {
- // var state = getState();
- // dispatch(setLoading(primaryKey));
- return new Promise(function (resolve, reject) {
- DBG && console.log('DBG:filterStore:delayFilter::#1', { fieldName, value });
- _clearTimer(fieldName);
- _filterTimeout[fieldName] = setTimeout(function () {
- // reject("Error");
- resolve(value);
- }, delay);
- }).then(function (value) {
- DBG && console.log('DBG:filterStore:delayFilter::#3 resolve ', { fieldName, value });
- dispatch( { type: 'SET_FILTER', fieldName: fieldName, value: value } );
- }).catch(function (e) {
- p5UI__notifyAjaxCallback({type: 'error', msg: 'Wystąpił błąd #TA6: ' + e});
- })
- }
- }
- return {
- setFilter: setFilter,
- setSpecialFilter: setSpecialFilter,
- delayFilter: delayFilter,
- clearAllFilters: clearAllFilters,
- toggleSort: toggleSort,
- }
- }
- function createTableFiltersStateObject(initialData) {
- var _initialData = initialData || {};
- var store = createStoreWithThunkMiddleware( createFilterStoreWithInitialData( _initialData ) );
- return {
- store: store,
- actions: filterActions()
- }
- }
- global.createTableFiltersStateObject = createTableFiltersStateObject;
|