workflow.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. isDisabled: this.boolean(false),
  21. settings: this.attr({
  22. timeout: 120000,
  23. onError: 'stop-workflow',
  24. }),
  25. logs: this.hasMany(Log, 'workflowId'),
  26. };
  27. }
  28. static async insert(payload) {
  29. const res = await super.insert(payload);
  30. await this.store().dispatch('saveToStorage', 'workflows');
  31. return res;
  32. }
  33. static async afterDelete({ id }) {
  34. try {
  35. const { visitWebTriggers, shortcuts } = await browser.storage.local.get([
  36. 'visitWebTriggers',
  37. 'shortcuts',
  38. ]);
  39. const index = visitWebTriggers.findIndex((item) => item.id === id);
  40. if (index !== -1) {
  41. visitWebTriggers.splice(index, 1);
  42. }
  43. const keyboardShortcuts = shortcuts || {};
  44. delete keyboardShortcuts[id];
  45. await browser.storage.local.set({
  46. visitWebTriggers,
  47. shortcuts: keyboardShortcuts,
  48. });
  49. await browser.alarms.clear(id);
  50. } catch (error) {
  51. console.error(error);
  52. }
  53. }
  54. }
  55. export default Workflow;