pgadmin4/web/pgadmin/static/js/helpers/EventBus.js

68 lines
1.5 KiB
JavaScript
Raw Normal View History

import _ from 'lodash';
export default class EventBus {
constructor() {
this._eventListeners = [];
}
registerListener(event, callback, once=false) {
this._eventListeners = this._eventListeners || [];
this._eventListeners.push({
event: event,
callback: callback,
fired: once ? 'pending' : 'ignore',
});
// helpfull in useEffect where we need to cleanup the listeners.
return ()=>{
this.deregisterListener(event, callback);
};
}
on(...args) {
return this.registerListener(...args);
}
once(...args) {
return this.registerListener(...args, true);
}
deregisterListener(event, callback) {
if(callback) {
this._eventListeners = this._eventListeners.filter((e)=>{
if(e.event === event) {
return e.callback != callback;
}
Fixed following issues for query tool after react porting: 1) Add New Server Connection > Server options keep loading(For empty Server group). 2) After clicking indent/Unindent(for all operations) for large query option left as it is till operation completes 3) Check sign beside options in Execute Option/Copy Header is little bit big 4) In explain > Analysis tab does not show ROWS column 5) In explain > Explain > analysis previous explain output is NOT cleared. New rows are appended. Same applies to the statistics tab. 6) Update new query tool connection tool tip. Fixes #7289 7) Explain-Analyze > Loops column is empty. 8) Explain-Analyze with Verbose & Costs > in ROW X columns upward arrows are missing. 9) Explain-Analyze with all option checked > background colors are missing for timing. 10) Explain-Analyze > Additional bullet is added before Hash Cond. 11) Browser Tree > Filtered rows icon is not working. 12) Create table with timestamp and default value as function now() > Add new row > Enter mandatory columns except column where default value is function(now()) > Click Save > New row added but column with default value has value [default]. not updated to actual value. / Default values are not considered for any column while adding a new entry. 13) Disable execute options in View/Edit data. 14) The Boolean column always shows null. 15) In Query history Remove & Remove all buttons are stuck to each other. 16) On Remove all, the right panel is empty. 17) Create a column with boolean[]/ text[], Try to add a new entry from data grid, enter “” quotes > Click Ok > Now try edit cell > You can not change value. 18) In query history - Select queries are suffixed by ’Save Data’ icon 19) Edit any table with PK > Try to insert duplicate PK > Error thrown > Correct pK value > Still old error shown > Not able to add new entry (This works when focus is moved from edited cell) 20) Clicking arrows after opening dropdown options, does not collapse dropdown. refs #6131
2022-04-18 02:20:51 -05:00
return true;
});
} else {
this._eventListeners = this._eventListeners.filter((e)=>e.event!=event);
}
}
off(...args) {
this.deregisterListener(...args);
}
fireEvent(event, ...args) {
let self = this;
Promise.resolve(0).then(()=>{
let allListeners = _.filter(this._eventListeners, (e)=>e.event==event);
if(allListeners) {
for(const listener of allListeners) {
Promise.resolve(0).then(()=>{
listener.callback(...args);
if(listener.fired == 'pending') {
self.deregisterListener(event, listener.callback);
}
});
}
}
});
}
trigger(...args) {
this.fireEvent(...args);
}
}