workflow.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { Model } from '@vuex-orm/core';
  2. import { nanoid } from 'nanoid';
  3. import browser from 'webextension-polyfill';
  4. import Log from './log';
  5. class Workflow extends Model {
  6. static entity = 'workflows';
  7. static primaryKey = 'id';
  8. static autoSave = true;
  9. static fields() {
  10. return {
  11. id: this.uid(() => nanoid()),
  12. name: this.string(''),
  13. icon: this.string('riGlobalLine'),
  14. data: this.attr(null),
  15. drawflow: this.string(''),
  16. dataColumns: this.attr([]),
  17. globalData: this.string('[{ "key": "value" }]'),
  18. lastRunAt: this.number(),
  19. createdAt: this.number(),
  20. settings: this.attr({
  21. timeout: 120000,
  22. onError: 'stop-workflow',
  23. }),
  24. logs: this.hasMany(Log, 'workflowId'),
  25. };
  26. }
  27. static async insert(payload) {
  28. const res = await super.insert(payload);
  29. await this.store().dispatch('saveToStorage', 'workflows');
  30. return res;
  31. }
  32. static async afterDelete({ id }) {
  33. try {
  34. const { visitWebTriggers, shortcuts } = await browser.storage.local.get([
  35. 'visitWebTriggers',
  36. 'shortcuts',
  37. ]);
  38. const index = visitWebTriggers.findIndex((item) => item.id === id);
  39. if (index !== -1) {
  40. visitWebTriggers.splice(index, 1);
  41. }
  42. const keyboardShortcuts = shortcuts || {};
  43. delete keyboardShortcuts[id];
  44. await browser.storage.local.set({
  45. visitWebTriggers,
  46. shortcuts: keyboardShortcuts,
  47. });
  48. await browser.alarms.clear(id);
  49. } catch (error) {
  50. console.error(error);
  51. }
  52. }
  53. }
  54. export default Workflow;