diff options
Diffstat (limited to 'app/assets/javascripts/import_entities/import_groups/services/status_poller.js')
-rw-r--r-- | app/assets/javascripts/import_entities/import_groups/services/status_poller.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/app/assets/javascripts/import_entities/import_groups/services/status_poller.js b/app/assets/javascripts/import_entities/import_groups/services/status_poller.js new file mode 100644 index 00000000000..ba0f2bb947a --- /dev/null +++ b/app/assets/javascripts/import_entities/import_groups/services/status_poller.js @@ -0,0 +1,39 @@ +import Visibility from 'visibilityjs'; +import createFlash from '~/flash'; +import axios from '~/lib/utils/axios_utils'; +import Poll from '~/lib/utils/poll'; +import { s__ } from '~/locale'; + +export class StatusPoller { + constructor({ updateImportStatus, pollPath }) { + this.eTagPoll = new Poll({ + resource: { + fetchJobs: () => axios.get(pollPath), + }, + method: 'fetchJobs', + successCallback: ({ data: statuses }) => { + statuses.forEach((status) => updateImportStatus(status)); + }, + errorCallback: () => + createFlash({ + message: s__('BulkImport|Update of import statuses with realtime changes failed'), + }), + }); + + Visibility.change(() => { + if (!Visibility.hidden()) { + this.eTagPoll.restart(); + } else { + this.eTagPoll.stop(); + } + }); + } + + startPolling() { + this.eTagPoll.makeRequest(); + } + + stopPolling() { + this.eTagPoll.stop(); + } +} |