|
|
@@ -9,6 +9,7 @@ var DBG1 = true;
|
|
|
if (!global.p5VendorJs) throw "Missing p5 Vendor js libs";
|
|
|
if (!global.p5VendorJs.Redux) throw "Missing p5 Vendor js lib: Redux";
|
|
|
if (!global.createTableFiltersStateObject) throw "Missing createTableFiltersStateObject";
|
|
|
+if (!global.createTableSelectedStateObject) throw "Missing createTableSelectedStateObject";
|
|
|
|
|
|
var createReactClass = global.p5VendorJs.createReactClass;
|
|
|
var h = global.p5VendorJs.React.createElement;
|
|
|
@@ -34,89 +35,8 @@ p5WfsRefFilter = (function () { // convert GET param key ogc filter for ref
|
|
|
}
|
|
|
};
|
|
|
})();
|
|
|
-var p5WPSUtils__createConvertToWpsDataInputFunction = function (identifier) {
|
|
|
- return function (value) {
|
|
|
- if (!value) return null; // WPS function require value, but for eg. featureQuery mey be empty
|
|
|
- return { // "wps:Input"
|
|
|
- identifier: identifier, // "ows:Identifier"
|
|
|
- // title: "...", // "ows:Title"
|
|
|
- data: { literalData: { value: value } }, // "wps:Data"
|
|
|
- // reference: "???", // "wps:Reference"
|
|
|
- // boundingBoxData: "???", // "wps:BoundingBoxData"
|
|
|
- };
|
|
|
- }
|
|
|
-};
|
|
|
-var p5WPSHelper_generateProcessSelectFeatureWithArgs = function (identifier, args) {
|
|
|
- var dataInputs = Object.keys(args).reduce(function (ret, argName) {
|
|
|
- var value = args[argName];
|
|
|
- var convertValueToWpsDataInput = p5WPSUtils__createConvertToWpsDataInputFunction(argName);
|
|
|
- return (p5Utils__isArray(value))
|
|
|
- ? ret.concat( value.map( convertValueToWpsDataInput ) )
|
|
|
- : ret.concat([ convertValueToWpsDataInput(value) ])
|
|
|
- ;
|
|
|
- }, []).filter(function (wpsTag) {
|
|
|
- return !! wpsTag;
|
|
|
- })
|
|
|
- return {
|
|
|
- identifier: identifier, // "ows:Identifier"
|
|
|
- dataInputs: dataInputs,
|
|
|
- responseForm: { // "wps:ResponseForm"
|
|
|
- // rawDataOutput: "???", // "wps:RawDataOutput"
|
|
|
- // responseDocument: "???", // "wps:ResponseDocument"
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-var p5WPS_executeFeatureProcess = function(identifier) {
|
|
|
- return function (wpsArgs) { // TODO: ns, listPrimaryKeys
|
|
|
- return new Promise(function (resolve, reject) {
|
|
|
- var process = p5WPSHelper_generateProcessSelectFeatureWithArgs(identifier, wpsArgs);
|
|
|
- OpenLayers.Request.POST({
|
|
|
- url: URI_WPS,
|
|
|
- data: new OpenLayers.Format.WPSExecute().write(process),
|
|
|
- callback: function (response) {
|
|
|
- try {
|
|
|
- var txt = response.responseText || ''
|
|
|
- if (!txt) throw "Empty response";
|
|
|
- var responseJson = JSON.parse(txt)
|
|
|
- if ('success' != responseJson.type) throw "Error response type '" + responseJson.type + "'";
|
|
|
- if (!responseJson.body || !responseJson.body.selected) throw "Brak danych";
|
|
|
- var listSelectedPks = Object.keys(responseJson.body.selected).filter(function (pk) {
|
|
|
- return responseJson.body.selected[pk];
|
|
|
- })
|
|
|
- var totalSelected = responseJson.body.totalSelected;
|
|
|
- DBG && console.log('wps('+identifier+') response', {response, responseJson, selected: responseJson.body.selected, resolve: listSelectedPks});
|
|
|
-
|
|
|
- resolve({
|
|
|
- selected: listSelectedPks,
|
|
|
- totalSelected: totalSelected,
|
|
|
- })
|
|
|
- } catch (e) {
|
|
|
- reject('' + e)
|
|
|
- return;
|
|
|
- }
|
|
|
- },
|
|
|
- // success: function (response) {
|
|
|
- // },
|
|
|
- // failure: function (response) {
|
|
|
- // }
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
-};
|
|
|
-var p5WPS__selecFeature = p5WPS_executeFeatureProcess('p5:selectFeature');
|
|
|
-var p5WPS__unselectFeature = p5WPS_executeFeatureProcess('p5:unselectFeature');
|
|
|
-var p5WPS__unselecAllFeatures = p5WPS_executeFeatureProcess('p5:unselectAllFeatures');
|
|
|
-var p5WPS__getSelectedFeatures = p5WPS_executeFeatureProcess('p5:getSelectedFeatures');
|
|
|
-var p5WPS__selectAllFeaturesMatchingFilter = p5WPS_executeFeatureProcess('p5:selectAllFeaturesMatchingFilter');
|
|
|
|
|
|
|
|
|
-
|
|
|
-function p5Utils__arrayRemove(array, toRemoveItem) {
|
|
|
- return array.filter(function (item) {
|
|
|
- return ( item !== toRemoveItem );
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
function p5Utils__mapToQuery(map, callback) {
|
|
|
var mapCallback = ('function' === typeof callback) ? callback : function (key) {
|
|
|
return '' + key + '=' + encodeURIComponent(map.get(key));
|
|
|
@@ -141,210 +61,6 @@ function p5Utils__objectToQueryWithKeyPrefix(obj, prefix, callback) {
|
|
|
.join('&')
|
|
|
}
|
|
|
|
|
|
-function fixSelectAllInSelectedState(state) {
|
|
|
- var len = state.listPrimaryKeys.length;
|
|
|
- var selLen = state.selected.length;
|
|
|
- var isAllSelected = ( len > 0 && selLen >= len ); // selected array may contain 'select-all'
|
|
|
- for (var i = 0, pk = ''; i < len; i++) {
|
|
|
- pk = state.listPrimaryKeys[i];
|
|
|
- if (-1 === state.selected.indexOf(pk)) {
|
|
|
- isAllSelected = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- // DBG && console.log('fixSelectAllInSelectedState', { isAllSelected, state });
|
|
|
- var isSelectedSelectAll = ( -1 !== state.selected.indexOf('select-all') );
|
|
|
- if (isAllSelected && !isSelectedSelectAll) return Object.assign(state, {
|
|
|
- selected: ['select-all'].concat(state.selected)
|
|
|
- });
|
|
|
- if (!isAllSelected && isSelectedSelectAll) return Object.assign(state, {
|
|
|
- selected: p5Utils__arrayRemove(state.selected, 'select-all'),
|
|
|
- });
|
|
|
- return state;
|
|
|
-}
|
|
|
-function selectedStore(state, action) {
|
|
|
- var prevState = state || { isLoading: false, selected: [], loading: [], listPrimaryKeys: [], totalSelected: 0 };
|
|
|
- DBG && console.log('DBG::selectedStore', { prevState, action });
|
|
|
- switch (action.type) {
|
|
|
- case 'SET_CHECKED': return fixSelectAllInSelectedState(Object.assign({}, prevState, {
|
|
|
- loading: p5Utils__arrayRemove(prevState.loading, action.primaryKey),
|
|
|
- selected: prevState.selected.concat(action.primaryKey),
|
|
|
- totalSelected: action.totalSelected,
|
|
|
- }));
|
|
|
- case 'SET_UNCHECKED': return fixSelectAllInSelectedState(Object.assign({}, prevState, {
|
|
|
- loading: p5Utils__arrayRemove(prevState.loading, action.primaryKey),
|
|
|
- selected: p5Utils__arrayRemove(prevState.selected, action.primaryKey),
|
|
|
- totalSelected: action.totalSelected,
|
|
|
- }));
|
|
|
- case 'SET_LIST_CHECKED': return fixSelectAllInSelectedState(Object.assign({}, prevState, {
|
|
|
- loading: [], // TODO: p5Utils__arrayExcept(prevState.loading, action.listPrimaryKeys),
|
|
|
- selected: [].concat(action.listPrimaryKeys), // TODO: p5Utils__arrayUniqueUnion(prevState.selected, action.listPrimaryKeys)
|
|
|
- totalSelected: action.totalSelected,
|
|
|
- }));
|
|
|
- case 'SET_LIST_UNCHECKED': return fixSelectAllInSelectedState(Object.assign({}, prevState, {
|
|
|
- loading: [], // TODO: p5Utils__arrayExcept(prevState.loading, action.listPrimaryKeys),
|
|
|
- selected: [], // TODO: p5Utils__arrayUniqueUnion(prevState.selected, action.listPrimaryKeys)
|
|
|
- totalSelected: action.totalSelected,
|
|
|
- }));
|
|
|
- case 'SET_LOADING': return Object.assign(prevState, {
|
|
|
- loading: prevState.loading.concat(action.primaryKey)
|
|
|
- });
|
|
|
- case 'SET_LIST_LOADING': return Object.assign(prevState, {
|
|
|
- loading: [].concat(action.listPrimaryKeys)
|
|
|
- });
|
|
|
- case 'SET_PRIMARY_KEYS': return fixSelectAllInSelectedState(Object.assign({}, prevState, {
|
|
|
- listPrimaryKeys: [].concat(action.listPrimaryKeys),
|
|
|
- loading: [].concat(action.listPrimaryKeys)
|
|
|
- }));
|
|
|
- // case 'SET_ERROR_MSG': return Object.assign(prevState, {
|
|
|
- // errorMsg: action.errorMsg
|
|
|
- // });
|
|
|
- default: return prevState;
|
|
|
- }
|
|
|
-}
|
|
|
-function selectedActions(idContext) {
|
|
|
- var idContext = idContext || null;
|
|
|
- function setChecked(primaryKey, totalSelected) {
|
|
|
- return { type: 'SET_CHECKED', primaryKey: primaryKey, totalSelected: totalSelected }
|
|
|
- }
|
|
|
- function setUnchecked(primaryKey, totalSelected) {
|
|
|
- return { type: 'SET_UNCHECKED', primaryKey: primaryKey, totalSelected: totalSelected }
|
|
|
- }
|
|
|
- function setLoading(primaryKey) {
|
|
|
- return { type: 'SET_LOADING', primaryKey: primaryKey }
|
|
|
- }
|
|
|
- function setListChecked(listPrimaryKeys, totalSelected) {
|
|
|
- return { type: 'SET_LIST_CHECKED', listPrimaryKeys: listPrimaryKeys, totalSelected: totalSelected }
|
|
|
- }
|
|
|
- function setListUnchecked(listPrimaryKeys, totalSelected) {
|
|
|
- return { type: 'SET_LIST_UNCHECKED', listPrimaryKeys: listPrimaryKeys, totalSelected: totalSelected }
|
|
|
- }
|
|
|
- function setListLoading(listPrimaryKeys) {
|
|
|
- return { type: 'SET_LIST_LOADING', listPrimaryKeys: listPrimaryKeys }
|
|
|
- }
|
|
|
- function setErrorMsg(errorMsg) {
|
|
|
- return { type: 'SET_ERROR_MSG', errorMsg: errorMsg }
|
|
|
- }
|
|
|
- function toggle(namespace, primaryKey, checked) {
|
|
|
- DBG && console.log('DBG::toggle action: (pks:['+primaryKey+'])...');
|
|
|
- if ('select-all' === primaryKey) return toggleAll(namespace, checked);
|
|
|
-
|
|
|
- return function(dispatch, getState) {
|
|
|
- // var state = getState();
|
|
|
- dispatch(setLoading(primaryKey));
|
|
|
-
|
|
|
- var reqArgs = { typeName: namespace, primaryKey: [ primaryKey ] };
|
|
|
- if (idContext) reqArgs.idContext = idContext;
|
|
|
- var reqPromise = checked ? p5WPS__selecFeature(reqArgs) : p5WPS__unselectFeature(reqArgs);
|
|
|
- return reqPromise.then(function (response) {
|
|
|
- DBG && console.log('DBG::async toggle action: (pk:'+primaryKey+') dispatch...');
|
|
|
- dispatch( checked ? setChecked(primaryKey, response.totalSelected) : setUnchecked(primaryKey, response.totalSelected) );
|
|
|
- }).catch(function (e) {
|
|
|
- p5UI__notifyAjaxCallback({type: 'error', msg: 'Wystąpił błąd #TA1: ' + e});
|
|
|
- DBG && console.warn('DBG::async toggle action: (pk:'+primaryKey+') ERROR', e);
|
|
|
- // dispatch( checked ? setUnchecked(primaryKey) : setChecked(primaryKey) );
|
|
|
- // dispatch( setErrorMsg(e) ); // TODO: show error with msg and refresh button
|
|
|
- dispatch( setListLoading([]) );
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- function setPrimaryKeys(namespace, listPrimaryKeys) { // TODO: should set list primaryKeys, change checkboxes to loading and fetch its state, then update gui
|
|
|
- DBG && console.log('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+'])...');
|
|
|
- return function(dispatch, getState) {
|
|
|
- dispatch({ type: 'SET_PRIMARY_KEYS', listPrimaryKeys: listPrimaryKeys });
|
|
|
- // dispatch( setListLoading(listPrimaryKeys) );
|
|
|
- if (!listPrimaryKeys.length) return;
|
|
|
-
|
|
|
- var reqArgs = { typeName: namespace, primaryKey: listPrimaryKeys };
|
|
|
- if (idContext) reqArgs.idContext = idContext;
|
|
|
- return p5WPS__getSelectedFeatures(reqArgs).then(function (listSelected) {
|
|
|
- DBG && console.log('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+']) dispatch success');
|
|
|
- dispatch( setListChecked(listSelected.selected, listSelected.totalSelected) );
|
|
|
- }).catch(function (e) {
|
|
|
- p5UI__notifyAjaxCallback({type: 'error', msg: 'Wystąpił błąd #TA2: ' + e});
|
|
|
- DBG && console.warn('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+']) ERROR dispatch error');
|
|
|
- // var fullListPks = ['select-all'].concat(listPrimaryKeys);
|
|
|
- // dispatch( setListUnchecked(fullListPks) );
|
|
|
- // dispatch( setErrorMsg(e) ); // TODO: show error with msg and refresh button
|
|
|
- dispatch( setListLoading([]) );
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- function toggleAll(namespace, checked) {
|
|
|
- var primaryKey = 'select-all';
|
|
|
- return function(dispatch, getState) {
|
|
|
- // var state = getState();
|
|
|
- dispatch(setLoading(primaryKey));
|
|
|
- var state = getState();
|
|
|
- var listPrimaryKeys = state.listPrimaryKeys;
|
|
|
-
|
|
|
- var reqArgs = { typeName: namespace, primaryKey: listPrimaryKeys };
|
|
|
- if (idContext) reqArgs.idContext = idContext;
|
|
|
- var reqPromise = checked ? p5WPS__selecFeature(reqArgs) : p5WPS__unselectFeature(reqArgs);
|
|
|
- return reqPromise.then(function (response) {
|
|
|
- DBG && console.log('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+']) dispatch success');
|
|
|
- dispatch( checked ? setListChecked(response.selected, response.totalSelected) : setListUnchecked(response.selected, response.totalSelected) );
|
|
|
- }).catch(function (e) {
|
|
|
- p5UI__notifyAjaxCallback({type: 'error', msg: 'Wystąpił błąd #TA3: ' + e});
|
|
|
- DBG && console.warn('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+']) ERROR dispatch error');
|
|
|
- // var fullListPks = ['select-all'].concat(listPrimaryKeys)
|
|
|
- // dispatch( checked ? setListUnchecked(fullListPks) : setListChecked(fullListPks) );
|
|
|
- // dispatch( setErrorMsg(e) ); // TODO: show error with msg and refresh button
|
|
|
- dispatch( setListLoading([]) );
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- function unselectAll(namespace) {
|
|
|
- // dispatch(setLoading());
|
|
|
- return function(dispatch, getState) {
|
|
|
- var reqArgs = { typeName: namespace };
|
|
|
- if (idContext) reqArgs.idContext = idContext;
|
|
|
- var reqPromise = p5WPS__unselecAllFeatures(reqArgs);
|
|
|
- return reqPromise.then(function (response) {
|
|
|
- DBG && console.log('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+']) dispatch success');
|
|
|
- // dispatch( setListChecked(response.selected, response.totalSelected) );
|
|
|
- dispatch( setListChecked([], 0) );
|
|
|
- }).catch(function (e) {
|
|
|
- p5UI__notifyAjaxCallback({type: 'error', msg: 'Wystąpił błąd #TA4: ' + e});
|
|
|
- DBG && console.warn('DBG::setPrimaryKeys action: (pks:['+listPrimaryKeys.join(',')+']) ERROR dispatch error');
|
|
|
- // var fullListPks = ['select-all'].concat(listPrimaryKeys)
|
|
|
- // dispatch( checked ? setListUnchecked(fullListPks) : setListChecked(fullListPks) );
|
|
|
- // dispatch( setErrorMsg(e) ); // TODO: show error with msg and refresh button
|
|
|
- // dispatch( setListLoading([]) );
|
|
|
- });
|
|
|
- };
|
|
|
- }
|
|
|
- function selectAllMatchingFilter(namespace, filterQuery) {
|
|
|
- DBG && console.log('DBG::selectAllMatchingFilter', { filterQuery });
|
|
|
- return function(dispatch, getState) {
|
|
|
- DBG && console.log('DBG::selectAllMatchingFilter state', state);
|
|
|
- var state = getState();
|
|
|
- var listPrimaryKeys = state.listPrimaryKeys;
|
|
|
-
|
|
|
- var reqArgs = { typeName: namespace, primaryKey: listPrimaryKeys, filterQuery: filterQuery };
|
|
|
- if (idContext) reqArgs.idContext = idContext;
|
|
|
- return p5WPS__selectAllFeaturesMatchingFilter(reqArgs).then(function (listSelected) {
|
|
|
- DBG && console.log('DBG::selectAllMatchingFilter dispatch success');
|
|
|
- dispatch( setListChecked(listSelected.selected, listSelected.totalSelected) );
|
|
|
- }).catch(function (e) {
|
|
|
- p5UI__notifyAjaxCallback({type: 'error', msg: 'Wystąpił błąd #TA5: ' + e});
|
|
|
- DBG && console.warn('DBG::selectAllMatchingFilter ERROR dispatch error');
|
|
|
- // var fullListPks = ['select-all'].concat(listPrimaryKeys);
|
|
|
- // dispatch( setListUnchecked(fullListPks) );
|
|
|
- // dispatch( setErrorMsg(e) ); // TODO: show error with msg and refresh button
|
|
|
- dispatch( setListLoading([]) );
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- return {
|
|
|
- setPrimaryKeys: setPrimaryKeys,
|
|
|
- setChecked: setChecked,
|
|
|
- setUnchecked: setUnchecked,
|
|
|
- toggle: toggle,
|
|
|
- unselectAll: unselectAll,
|
|
|
- selectAllMatchingFilter: selectAllMatchingFilter,
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
global['P5UI__TableAjaxRowCheckbox'] = createReactClass({
|
|
|
// props.namespace: PropTypes.string.isRequired
|
|
|
@@ -1243,8 +959,9 @@ var TableAjax = function() {
|
|
|
})
|
|
|
|
|
|
if (priv.options.checkboxes) {
|
|
|
- priv.options.selectedStore = createStoreWithThunkMiddleware(selectedStore)
|
|
|
- priv.options.selectedActions = selectedActions(idContext = priv.options.checkboxIdContext)
|
|
|
+ var stateObjectSelected = createTableSelectedStateObject(priv.options.checkboxIdContext);
|
|
|
+ priv.options.selectedStore = stateObjectSelected.store;
|
|
|
+ priv.options.selectedActions = stateObjectSelected.actions;
|
|
|
if (_uiNodeSelectedInfo) { // must run after priv.initialRender(); - _uiNodeSelectedInfo must exists
|
|
|
ReactDOM.render(
|
|
|
h(P5UI__TableAjaxSelectedInfo, {
|