@evenicanpm/admin-integrate 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/documents/ProcessSchedule/fragments.ts +24 -0
  2. package/documents/ProcessSchedule/read.ts +12 -0
  3. package/documents/ProcessScheduleGroup/fragments.ts +29 -0
  4. package/documents/ProcessScheduleGroup/read.ts +12 -0
  5. package/documents/ScheduledProcess/fragments.ts +24 -0
  6. package/documents/ScheduledProcess/list.ts +27 -0
  7. package/package.json +21 -17
  8. package/src/api/dashboard/queries/get-process-executions.query.ts +33 -36
  9. package/src/api/dashboard/queries/get-process-executions.server.ts +4 -4
  10. package/src/api/scheduler/queries/get-process-schedule-group-details.query.ts +45 -0
  11. package/src/api/scheduler/queries/get-process-schedule-group-details.server.ts +14 -0
  12. package/src/api/scheduler/queries/get-process-schedule.query.ts +45 -0
  13. package/src/api/scheduler/queries/get-process-schedule.server.ts +14 -0
  14. package/src/api/scheduler/queries/get-scheduled-processes.query.ts +45 -0
  15. package/src/api/scheduler/queries/get-scheduled-processes.server.ts +11 -0
  16. package/src/api/scheduler/queries/index.ts +3 -0
  17. package/src/components/breadcrumbs/breadcrumbs.tsx +23 -26
  18. package/src/components/breadcrumbs/index.ts +1 -1
  19. package/src/components/breadcrumbs/types.tsx +4 -0
  20. package/src/components/button/outlined-icon-button.tsx +26 -38
  21. package/src/components/core/date-time-popover.tsx +32 -0
  22. package/src/components/core/edited-typography.tsx +20 -0
  23. package/src/components/core/index.ts +3 -0
  24. package/src/components/core/loading.tsx +6 -6
  25. package/src/components/core/title-edit.tsx +122 -0
  26. package/src/components/dashboard-list/dashboard-list-row.tsx +114 -115
  27. package/src/components/dashboard-list/dashboard-list.tsx +119 -119
  28. package/src/components/data-table/table-header.tsx +85 -81
  29. package/src/components/data-table/table-pagination.tsx +27 -27
  30. package/src/components/data-table/table-row.tsx +14 -14
  31. package/src/components/data-table/table-skeleton.tsx +34 -34
  32. package/src/components/execution/execution-filter.ts +22 -22
  33. package/src/components/execution/execution-status-icon.tsx +16 -17
  34. package/src/components/execution/execution-tag.tsx +81 -80
  35. package/src/components/footer/footer.tsx +34 -34
  36. package/src/components/header/dashboard-list-header.tsx +64 -63
  37. package/src/components/header/execution-details-header.tsx +102 -129
  38. package/src/components/header/header.tsx +27 -27
  39. package/src/components/header/index.ts +1 -0
  40. package/src/components/header/integration-details-header.tsx +99 -0
  41. package/src/components/icons/up-down.tsx +15 -15
  42. package/src/components/integration-view/edges/default-edge.tsx +18 -17
  43. package/src/components/integration-view/elk-layout-options.ts +26 -26
  44. package/src/components/integration-view/elk-types.ts +16 -12
  45. package/src/components/integration-view/flow-types.tsx +5 -5
  46. package/src/components/integration-view/integration-view.tsx +132 -130
  47. package/src/components/integration-view/nodes/base-node.tsx +50 -0
  48. package/src/components/integration-view/nodes/connection-node.tsx +8 -8
  49. package/src/components/integration-view/nodes/entry-node.tsx +8 -8
  50. package/src/components/integration-view/nodes/group-node.tsx +47 -6
  51. package/src/components/integration-view/nodes/task-node.tsx +58 -13
  52. package/src/components/integration-view/temp-data/initialElements.tsx +224 -0
  53. package/src/components/integration-view/types.ts +6 -6
  54. package/src/components/layouts/main-layout.tsx +13 -13
  55. package/src/components/layouts/root-container.tsx +25 -25
  56. package/src/components/link-cards/link-card.tsx +23 -23
  57. package/src/components/link-cards/styles.ts +15 -15
  58. package/src/components/list-filter/date-filter.tsx +41 -45
  59. package/src/components/list-filter/date-range-filter.tsx +78 -77
  60. package/src/components/list-filter/list-filter-types.ts +38 -38
  61. package/src/components/list-filter/list-filter.tsx +363 -354
  62. package/src/components/list-filter/multi-select-filter.tsx +94 -95
  63. package/src/components/list-filter/select-filter.tsx +67 -64
  64. package/src/components/scheduler/day-selector.tsx +174 -0
  65. package/src/components/scheduler/day-tag.tsx +73 -0
  66. package/src/components/scheduler/index.ts +4 -0
  67. package/src/components/scheduler/schedule-filter.ts +25 -0
  68. package/src/components/scheduler/schedule-icon.tsx +87 -0
  69. package/src/components/scheduler/scheduler-types.ts +40 -0
  70. package/src/hooks/use-breadcrumbs.ts +31 -31
  71. package/src/hooks/use-recurrence.tsx +13 -0
  72. package/src/hooks/use-timestamp.tsx +21 -21
  73. package/src/pages/dashboard/dashboard-link-cards.tsx +99 -99
  74. package/src/pages/dashboard/dashboard-list-sections.tsx +130 -125
  75. package/src/pages/dashboard/dashboard.tsx +6 -6
  76. package/src/pages/execution-details/execution-details.tsx +23 -29
  77. package/src/pages/executions/executions-list/executions-list-row.tsx +101 -104
  78. package/src/pages/executions/executions-list/executions-list-table.tsx +45 -53
  79. package/src/pages/executions/executions-list/executions-list.tsx +219 -212
  80. package/src/pages/executions/executions.tsx +67 -72
  81. package/src/pages/integrations/integrations.tsx +17 -25
  82. package/src/pages/scheduler/schedule-drawer/edited/edited-types.ts +17 -0
  83. package/src/pages/scheduler/schedule-drawer/edited/index.ts +1 -0
  84. package/src/pages/scheduler/schedule-drawer/index.ts +1 -0
  85. package/src/pages/scheduler/schedule-drawer/schedule-details-integrations.tsx +227 -0
  86. package/src/pages/scheduler/schedule-drawer/schedule-details-main.tsx +292 -0
  87. package/src/pages/scheduler/schedule-drawer/schedule-details-name.tsx +77 -0
  88. package/src/pages/scheduler/schedule-drawer/schedule-details-skeleton.tsx +64 -0
  89. package/src/pages/scheduler/schedule-drawer/schedule-details.tsx +42 -0
  90. package/src/pages/scheduler/schedule-drawer/schedule-drawer-buttons.tsx +72 -0
  91. package/src/pages/scheduler/schedule-drawer/schedule-drawer-group.tsx +103 -0
  92. package/src/pages/scheduler/schedule-drawer/schedule-drawer-legacy.tsx +94 -0
  93. package/src/pages/scheduler/schedule-drawer/schedule-drawer.tsx +101 -0
  94. package/src/pages/scheduler/schedule-drawer/sortable-integration-row.tsx +93 -0
  95. package/src/pages/scheduler/scheduler.tsx +106 -30
  96. package/src/pages/scheduler/schedules-list/index.ts +1 -0
  97. package/src/pages/scheduler/schedules-list/schedules-list-row.tsx +235 -0
  98. package/src/pages/scheduler/schedules-list/schedules-list-table.tsx +74 -0
  99. package/src/pages/scheduler/schedules-list/schedules-list.tsx +280 -0
  100. package/tsconfig.json +29 -26
  101. package/src/components/integration-view/temp-data/initialElements.ts +0 -238
@@ -1,21 +1,21 @@
1
1
  import createSvgIcon from "@mui/material/utils/createSvgIcon";
2
2
 
3
3
  const UpDown = createSvgIcon(
4
- <svg viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
5
- <path
6
- d="M8.64847 6.88354H3.35158C3.04454 6.88354 2.86173 7.2269 3.03517 7.4812L5.68362 11.3824C5.83596 11.6062 6.16526 11.6062 6.3176 11.3824L8.96605 7.4812C9.13714 7.2269 8.9555 6.88354 8.64847 6.88354Z"
7
- fill="currentColor"
8
- />
9
- <path
10
- d="M8.64852 6.76641C8.54188 6.76641 8.43524 6.76641 8.32743 6.76641C8.05204 6.76641 7.77782 6.76641 7.50243 6.76641C7.13329 6.76641 6.76532 6.76641 6.39618 6.76641C6.0036 6.76641 5.61102 6.76641 5.21845 6.76641C4.87274 6.76641 4.52821 6.76641 4.18251 6.76641C3.95517 6.76641 3.72783 6.76641 3.49931 6.76641C3.45361 6.76641 3.40673 6.76641 3.36103 6.76641C3.17705 6.76758 3.00478 6.85898 2.91455 7.02187C2.82197 7.18828 2.83251 7.39102 2.93916 7.54922C2.96728 7.59141 2.9954 7.63242 3.02353 7.67344C3.16064 7.87617 3.29892 8.07891 3.43603 8.28164C3.64111 8.58281 3.84618 8.88516 4.05009 9.18633C4.26923 9.50977 4.48954 9.8332 4.70868 10.1566C4.89384 10.4285 5.07782 10.7016 5.26298 10.9734C5.36259 11.1211 5.46337 11.2687 5.56298 11.4164C5.63798 11.5277 5.73642 11.6168 5.87001 11.6508C6.08446 11.7059 6.2954 11.6145 6.41962 11.4363C6.50282 11.3168 6.58368 11.1949 6.66571 11.0742C6.84032 10.8164 7.01493 10.5598 7.18954 10.302C7.40751 9.97969 7.62665 9.65859 7.84461 9.33633C8.05438 9.02812 8.26415 8.71875 8.47274 8.41055C8.62391 8.18789 8.77508 7.96406 8.92625 7.74141C9.02703 7.59375 9.14891 7.44961 9.14539 7.26094C9.14422 6.98672 8.91922 6.77109 8.64852 6.76641C8.49735 6.76406 8.49735 6.99844 8.64852 7.00078C8.85125 7.0043 8.98133 7.22109 8.88055 7.39687C8.8618 7.42969 8.83836 7.46133 8.81727 7.49297C8.70125 7.66289 8.58641 7.83398 8.47039 8.00391C8.06493 8.60156 7.65946 9.19922 7.25282 9.79687C6.93173 10.2703 6.61063 10.7437 6.28954 11.216C6.2661 11.2512 6.24266 11.2863 6.21805 11.3203C6.12313 11.4504 5.94149 11.4715 5.82548 11.3684C5.79149 11.3379 5.76806 11.2992 5.74227 11.2617C5.69774 11.1961 5.65321 11.1305 5.60868 11.0648C5.2454 10.5305 4.88212 9.99492 4.52001 9.46055C4.13915 8.89922 3.75712 8.33672 3.37626 7.77539C3.29775 7.65937 3.21806 7.54453 3.14072 7.42852C3.05634 7.30195 3.07392 7.14726 3.18642 7.0582C3.2497 7.00898 3.31298 7.00078 3.3915 7.00078C3.86025 7.00078 4.33017 7.00078 4.79892 7.00078C5.55009 7.00078 6.30126 7.00078 7.05243 7.00078C7.55985 7.00078 8.0661 7.00078 8.57352 7.00078C8.5993 7.00078 8.62391 7.00078 8.64969 7.00078C8.79852 7.00078 8.79969 6.76641 8.64852 6.76641ZM8.64852 5.11641H3.35165C3.04462 5.11641 2.86181 4.77305 3.03525 4.51875L5.68368 0.617578C5.83602 0.39375 6.16532 0.39375 6.31766 0.617578L8.9661 4.51875C9.13719 4.77305 8.95555 5.11641 8.64852 5.11641Z"
11
- fill="currentColor"
12
- />
13
- <path
14
- d="M8.64832 4.99922C8.28153 4.99922 7.91473 4.99922 7.54676 4.99922C6.80262 4.99922 6.05849 4.99922 5.31552 4.99922C4.73193 4.99922 4.14834 4.99922 3.56592 4.99922C3.50615 4.99922 3.44639 4.99922 3.38662 4.99922C3.30459 4.99922 3.23428 4.98515 3.17803 4.93476C3.07022 4.83633 3.05733 4.6957 3.1417 4.57031C3.16865 4.53047 3.19561 4.49062 3.22256 4.45195C3.55068 3.96914 3.87881 3.48633 4.20576 3.00234C4.60888 2.4082 5.01201 1.81524 5.41513 1.2211C5.52529 1.05821 5.63661 0.895317 5.74677 0.732426C5.77372 0.692583 5.7995 0.650395 5.83583 0.62227C5.95536 0.52852 6.12763 0.55313 6.21903 0.680864C6.30106 0.794536 6.37724 0.912895 6.45575 1.02891C6.62333 1.27618 6.79208 1.52461 6.95966 1.77188C7.37801 2.38828 7.79637 3.00469 8.21473 3.61992C8.37293 3.85312 8.53113 4.08515 8.68816 4.31836C8.7327 4.38281 8.77605 4.44844 8.82059 4.51289C8.8452 4.55039 8.87566 4.58789 8.89441 4.6289C8.96824 4.8 8.84051 4.9957 8.64832 4.99922C8.49715 5.00156 8.49715 5.23593 8.64832 5.23359C8.92371 5.2289 9.15926 5.00039 9.14871 4.71914C9.14519 4.60898 9.10301 4.51289 9.04324 4.425C8.93777 4.26914 8.8323 4.11445 8.72684 3.95859C8.53934 3.68203 8.35184 3.40547 8.16317 3.12891C7.94285 2.80547 7.72371 2.48086 7.5034 2.15742C7.30184 1.85977 7.10028 1.56211 6.89755 1.26563C6.76395 1.06875 6.62919 0.870707 6.49559 0.673833C6.47098 0.637505 6.44638 0.600005 6.42059 0.563677C6.29403 0.382036 6.06903 0.287115 5.85224 0.356255C5.65419 0.418364 5.56044 0.591802 5.45146 0.751176C5.30146 0.971488 5.15263 1.1918 5.00263 1.41328C4.79287 1.72266 4.5831 2.03203 4.37216 2.34141C4.1542 2.6625 3.93623 2.98242 3.71943 3.30352C3.54365 3.5625 3.3667 3.82266 3.19092 4.08164C3.10654 4.20586 3.021 4.3289 2.93779 4.45429C2.82998 4.61601 2.82178 4.82929 2.9249 4.99687C3.01983 5.15039 3.18389 5.23476 3.36318 5.23593C3.50615 5.23711 3.65029 5.23593 3.79326 5.23593C4.08974 5.23593 4.38623 5.23593 4.68271 5.23593C5.06357 5.23593 5.44325 5.23593 5.82411 5.23593C6.21317 5.23593 6.60223 5.23593 6.9913 5.23593C7.31942 5.23593 7.64872 5.23593 7.97684 5.23593C8.17371 5.23593 8.37059 5.23593 8.56746 5.23593C8.59441 5.23593 8.62137 5.23593 8.64832 5.23593C8.79832 5.23359 8.79949 4.99922 8.64832 4.99922Z"
15
- fill="currentColor"
16
- />
17
- </svg>,
18
- "UpDown",
4
+ <svg viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
5
+ <path
6
+ d="M8.64847 6.88354H3.35158C3.04454 6.88354 2.86173 7.2269 3.03517 7.4812L5.68362 11.3824C5.83596 11.6062 6.16526 11.6062 6.3176 11.3824L8.96605 7.4812C9.13714 7.2269 8.9555 6.88354 8.64847 6.88354Z"
7
+ fill="currentColor"
8
+ />
9
+ <path
10
+ d="M8.64852 6.76641C8.54188 6.76641 8.43524 6.76641 8.32743 6.76641C8.05204 6.76641 7.77782 6.76641 7.50243 6.76641C7.13329 6.76641 6.76532 6.76641 6.39618 6.76641C6.0036 6.76641 5.61102 6.76641 5.21845 6.76641C4.87274 6.76641 4.52821 6.76641 4.18251 6.76641C3.95517 6.76641 3.72783 6.76641 3.49931 6.76641C3.45361 6.76641 3.40673 6.76641 3.36103 6.76641C3.17705 6.76758 3.00478 6.85898 2.91455 7.02187C2.82197 7.18828 2.83251 7.39102 2.93916 7.54922C2.96728 7.59141 2.9954 7.63242 3.02353 7.67344C3.16064 7.87617 3.29892 8.07891 3.43603 8.28164C3.64111 8.58281 3.84618 8.88516 4.05009 9.18633C4.26923 9.50977 4.48954 9.8332 4.70868 10.1566C4.89384 10.4285 5.07782 10.7016 5.26298 10.9734C5.36259 11.1211 5.46337 11.2687 5.56298 11.4164C5.63798 11.5277 5.73642 11.6168 5.87001 11.6508C6.08446 11.7059 6.2954 11.6145 6.41962 11.4363C6.50282 11.3168 6.58368 11.1949 6.66571 11.0742C6.84032 10.8164 7.01493 10.5598 7.18954 10.302C7.40751 9.97969 7.62665 9.65859 7.84461 9.33633C8.05438 9.02812 8.26415 8.71875 8.47274 8.41055C8.62391 8.18789 8.77508 7.96406 8.92625 7.74141C9.02703 7.59375 9.14891 7.44961 9.14539 7.26094C9.14422 6.98672 8.91922 6.77109 8.64852 6.76641C8.49735 6.76406 8.49735 6.99844 8.64852 7.00078C8.85125 7.0043 8.98133 7.22109 8.88055 7.39687C8.8618 7.42969 8.83836 7.46133 8.81727 7.49297C8.70125 7.66289 8.58641 7.83398 8.47039 8.00391C8.06493 8.60156 7.65946 9.19922 7.25282 9.79687C6.93173 10.2703 6.61063 10.7437 6.28954 11.216C6.2661 11.2512 6.24266 11.2863 6.21805 11.3203C6.12313 11.4504 5.94149 11.4715 5.82548 11.3684C5.79149 11.3379 5.76806 11.2992 5.74227 11.2617C5.69774 11.1961 5.65321 11.1305 5.60868 11.0648C5.2454 10.5305 4.88212 9.99492 4.52001 9.46055C4.13915 8.89922 3.75712 8.33672 3.37626 7.77539C3.29775 7.65937 3.21806 7.54453 3.14072 7.42852C3.05634 7.30195 3.07392 7.14726 3.18642 7.0582C3.2497 7.00898 3.31298 7.00078 3.3915 7.00078C3.86025 7.00078 4.33017 7.00078 4.79892 7.00078C5.55009 7.00078 6.30126 7.00078 7.05243 7.00078C7.55985 7.00078 8.0661 7.00078 8.57352 7.00078C8.5993 7.00078 8.62391 7.00078 8.64969 7.00078C8.79852 7.00078 8.79969 6.76641 8.64852 6.76641ZM8.64852 5.11641H3.35165C3.04462 5.11641 2.86181 4.77305 3.03525 4.51875L5.68368 0.617578C5.83602 0.39375 6.16532 0.39375 6.31766 0.617578L8.9661 4.51875C9.13719 4.77305 8.95555 5.11641 8.64852 5.11641Z"
11
+ fill="currentColor"
12
+ />
13
+ <path
14
+ d="M8.64832 4.99922C8.28153 4.99922 7.91473 4.99922 7.54676 4.99922C6.80262 4.99922 6.05849 4.99922 5.31552 4.99922C4.73193 4.99922 4.14834 4.99922 3.56592 4.99922C3.50615 4.99922 3.44639 4.99922 3.38662 4.99922C3.30459 4.99922 3.23428 4.98515 3.17803 4.93476C3.07022 4.83633 3.05733 4.6957 3.1417 4.57031C3.16865 4.53047 3.19561 4.49062 3.22256 4.45195C3.55068 3.96914 3.87881 3.48633 4.20576 3.00234C4.60888 2.4082 5.01201 1.81524 5.41513 1.2211C5.52529 1.05821 5.63661 0.895317 5.74677 0.732426C5.77372 0.692583 5.7995 0.650395 5.83583 0.62227C5.95536 0.52852 6.12763 0.55313 6.21903 0.680864C6.30106 0.794536 6.37724 0.912895 6.45575 1.02891C6.62333 1.27618 6.79208 1.52461 6.95966 1.77188C7.37801 2.38828 7.79637 3.00469 8.21473 3.61992C8.37293 3.85312 8.53113 4.08515 8.68816 4.31836C8.7327 4.38281 8.77605 4.44844 8.82059 4.51289C8.8452 4.55039 8.87566 4.58789 8.89441 4.6289C8.96824 4.8 8.84051 4.9957 8.64832 4.99922C8.49715 5.00156 8.49715 5.23593 8.64832 5.23359C8.92371 5.2289 9.15926 5.00039 9.14871 4.71914C9.14519 4.60898 9.10301 4.51289 9.04324 4.425C8.93777 4.26914 8.8323 4.11445 8.72684 3.95859C8.53934 3.68203 8.35184 3.40547 8.16317 3.12891C7.94285 2.80547 7.72371 2.48086 7.5034 2.15742C7.30184 1.85977 7.10028 1.56211 6.89755 1.26563C6.76395 1.06875 6.62919 0.870707 6.49559 0.673833C6.47098 0.637505 6.44638 0.600005 6.42059 0.563677C6.29403 0.382036 6.06903 0.287115 5.85224 0.356255C5.65419 0.418364 5.56044 0.591802 5.45146 0.751176C5.30146 0.971488 5.15263 1.1918 5.00263 1.41328C4.79287 1.72266 4.5831 2.03203 4.37216 2.34141C4.1542 2.6625 3.93623 2.98242 3.71943 3.30352C3.54365 3.5625 3.3667 3.82266 3.19092 4.08164C3.10654 4.20586 3.021 4.3289 2.93779 4.45429C2.82998 4.61601 2.82178 4.82929 2.9249 4.99687C3.01983 5.15039 3.18389 5.23476 3.36318 5.23593C3.50615 5.23711 3.65029 5.23593 3.79326 5.23593C4.08974 5.23593 4.38623 5.23593 4.68271 5.23593C5.06357 5.23593 5.44325 5.23593 5.82411 5.23593C6.21317 5.23593 6.60223 5.23593 6.9913 5.23593C7.31942 5.23593 7.64872 5.23593 7.97684 5.23593C8.17371 5.23593 8.37059 5.23593 8.56746 5.23593C8.59441 5.23593 8.62137 5.23593 8.64832 5.23593C8.79832 5.23359 8.79949 4.99922 8.64832 4.99922Z"
15
+ fill="currentColor"
16
+ />
17
+ </svg>,
18
+ "UpDown",
19
19
  );
20
20
 
21
21
  export default UpDown;
@@ -1,23 +1,24 @@
1
1
  import { BaseEdge, EdgeProps, getSmoothStepPath } from "@xyflow/react";
2
2
 
3
3
  export function DefaultEdge({
4
- id,
5
- sourceX,
6
- sourceY,
7
- targetX,
8
- targetY,
4
+ id,
5
+ sourceX,
6
+ sourceY,
7
+ targetX,
8
+ targetY,
9
+ markerEnd,
9
10
  }: EdgeProps): JSX.Element {
10
- const [edgePath] = getSmoothStepPath({
11
- sourceX,
12
- sourceY,
13
- targetX,
14
- targetY,
15
- borderRadius: 0,
16
- });
11
+ const [edgePath] = getSmoothStepPath({
12
+ sourceX,
13
+ sourceY,
14
+ targetX,
15
+ targetY,
16
+ borderRadius: 0,
17
+ });
17
18
 
18
- return (
19
- <>
20
- <BaseEdge id={id} path={edgePath} />
21
- </>
22
- );
19
+ return (
20
+ <>
21
+ <BaseEdge id={id} path={edgePath} markerEnd={markerEnd} />
22
+ </>
23
+ );
23
24
  }
@@ -1,39 +1,39 @@
1
1
  import { LayoutOptions } from "elkjs";
2
2
 
3
3
  export const layoutOptions: LayoutOptions = {
4
- "elk.algorithm": "layered",
5
- "elk.direction": "DOWN",
4
+ "elk.algorithm": "layered",
5
+ "elk.direction": "DOWN",
6
6
 
7
- // Arrange parent and child nodes in clear layers
8
- "org.eclipse.elk.hierarchyHandling": "INCLUDE_CHILDREN",
7
+ // Arrange parent and child nodes in clear layers
8
+ "org.eclipse.elk.hierarchyHandling": "INCLUDE_CHILDREN",
9
9
 
10
- // Center parent nodes among their children, children immediately below
11
- "org.eclipse.elk.layered.contentAlignment": "H_CENTER,V_TOP",
10
+ // Center parent nodes among their children, children immediately below
11
+ "org.eclipse.elk.layered.contentAlignment": "H_CENTER,V_TOP",
12
12
 
13
- // Reduce edge crossings
14
- "org.eclipse.elk.layered.crossingMinimization.strategy": "LAYER_SWEEP",
13
+ // Reduce edge crossings
14
+ "org.eclipse.elk.layered.crossingMinimization.strategy": "LAYER_SWEEP",
15
15
 
16
- // Minimize bends and keep edges as short as possible
17
- "org.eclipse.elk.layered.nodePlacement.edgeRouting": "ORTHOGONAL",
18
- "org.eclipse.elk.layered.nodePlacement.edgeAvoidance": "true",
19
- "org.eclipse.elk.layered.nodePlacement.edgeNodeOverlapAvoided": "true",
20
- "org.eclipse.elk.layered.nodePlacement.edgeStraightening": "true",
16
+ // Minimize bends and keep edges as short as possible
17
+ "org.eclipse.elk.layered.nodePlacement.edgeRouting": "ORTHOGONAL",
18
+ "org.eclipse.elk.layered.nodePlacement.edgeAvoidance": "true",
19
+ "org.eclipse.elk.layered.nodePlacement.edgeNodeOverlapAvoided": "true",
20
+ "org.eclipse.elk.layered.nodePlacement.edgeStraightening": "true",
21
21
 
22
- // Layout spacing options
23
- "org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers": "75",
24
- "org.eclipse.elk.spacing.nodeNode": "80",
25
- "org.eclipse.elk.spacing.portPort": "10",
22
+ // Layout spacing options
23
+ "org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers": "75",
24
+ "org.eclipse.elk.spacing.nodeNode": "80",
25
+ "org.eclipse.elk.spacing.portPort": "10",
26
26
 
27
- // Add spacing between edges that do not share a connection point
28
- "org.eclipse.elk.spacing.edgeEdge": "30",
27
+ // Add spacing between edges that do not share a connection point
28
+ "org.eclipse.elk.spacing.edgeEdge": "30",
29
29
 
30
- // Node placement strategy for centered alignment
31
- "org.eclipse.elk.layered.nodePlacement.strategy": "SIMPLE",
30
+ // Node placement strategy for centered alignment
31
+ "org.eclipse.elk.layered.nodePlacement.strategy": "SIMPLE",
32
32
 
33
- // Layering strategy to optimize horizontal alignment
34
- "org.eclipse.elk.layered.layering.strategy": "NETWORK_SIMPLEX",
33
+ // Layering strategy to optimize horizontal alignment
34
+ "org.eclipse.elk.layered.layering.strategy": "NETWORK_SIMPLEX",
35
35
 
36
- // Merge edges to have them originate from the same point
37
- "org.eclipse.elk.layered.mergeEdges": "true",
38
- "org.eclipse.elk.layered.considerModelOrder.strategy": "PREFER_NODES",
36
+ // Merge edges to have them originate from the same point
37
+ "org.eclipse.elk.layered.mergeEdges": "true",
38
+ "org.eclipse.elk.layered.considerModelOrder.strategy": "PREFER_NODES",
39
39
  };
@@ -1,19 +1,23 @@
1
1
  import { ElkExtendedEdge, ElkNode } from "elkjs";
2
- import { extend } from "lodash";
3
2
 
4
3
  export interface ElkNodeWithFlow extends ElkNode {
5
- type?: string;
6
- data?: {
7
- label: string;
8
- };
9
- position?: {
10
- x: number;
11
- y: number;
12
- };
13
- children?: ElkNodeWithFlow[];
14
- extent?: string;
4
+ type?: string;
5
+ data?: {
6
+ label: string;
7
+ icon?: any;
8
+ isLast?: boolean;
9
+ };
10
+ position?: {
11
+ x: number;
12
+ y: number;
13
+ };
14
+ children?: ElkNodeWithFlow[];
15
+ extent?: string;
15
16
  }
16
17
 
17
18
  export interface ElkExtendedEdgeWithFlow extends ElkExtendedEdge {
18
- type?: string;
19
+ type?: string;
20
+ target?: string;
21
+ source?: string;
22
+ markerEnd?: { type: string };
19
23
  }
@@ -5,12 +5,12 @@ import { GroupNode } from "./nodes/group-node";
5
5
  import { TaskNode } from "./nodes/task-node";
6
6
 
7
7
  export const edgeTypes = {
8
- "default-edge": DefaultEdge,
8
+ "default-edge": DefaultEdge,
9
9
  };
10
10
 
11
11
  export const nodeTypes = {
12
- "connection-node": ConnectionNode,
13
- "entry-node": EntryNode,
14
- "group-node": GroupNode,
15
- "task-node": TaskNode, // Assuming you have a custom connection node
12
+ "connection-node": ConnectionNode,
13
+ "entry-node": EntryNode,
14
+ "group-node": GroupNode,
15
+ "task-node": TaskNode, // Assuming you have a custom connection node
16
16
  };
@@ -1,20 +1,20 @@
1
1
  "use client";
2
2
 
3
3
  import React, { useCallback, useLayoutEffect } from "react";
4
- import { Box, Typography, AppBar, Toolbar, Stack } from "@mui/material";
5
- import { Theme, useTheme } from "@mui/material";
4
+ import { Box } from "@mui/material";
6
5
 
7
6
  import ELK from "elkjs/lib/elk.bundled.js";
8
7
 
9
8
  import "@xyflow/react/dist/style.css";
10
9
 
11
10
  import {
12
- Background,
13
- ReactFlow,
14
- ReactFlowProvider,
15
- useEdgesState,
16
- useNodesState,
17
- useReactFlow,
11
+ Background,
12
+ Controls,
13
+ ReactFlow,
14
+ ReactFlowProvider,
15
+ useEdgesState,
16
+ useNodesState,
17
+ useReactFlow,
18
18
  } from "@xyflow/react";
19
19
 
20
20
  import { nodeTypes, edgeTypes } from "./flow-types";
@@ -22,138 +22,140 @@ import { nodeTypes, edgeTypes } from "./flow-types";
22
22
  import { layoutOptions as elkOptions } from "./elk-layout-options";
23
23
 
24
24
  import { initialNodes, initialEdges } from "./temp-data/initialElements";
25
- import { ElkNodeWithFlow } from "./elk-types";
25
+ import { ElkExtendedEdgeWithFlow, ElkNodeWithFlow } from "./elk-types";
26
26
 
27
27
  const elk = new ELK();
28
28
 
29
29
  const getLayoutedElements = (nodes: any, edges: any, options: any = {}) => {
30
- const graph: ElkNodeWithFlow = {
31
- id: "root",
32
- children: nodes.map((node: any) => ({
33
- ...node,
34
- targetPosition: "top",
35
- sourcePosition: "bottom",
36
- // Hardcoded until width and height calculation is implemented
37
- width: 150,
38
- height: 50,
39
- })),
40
- edges: edges,
41
- };
42
-
43
- return elk
44
- .layout(graph, { layoutOptions: options })
45
- .then((layoutedGraph: any) => {
46
- let nodeItems: any = [];
47
-
48
- layoutedGraph.children.forEach((node: any) => {
49
- nodeItems.push({
50
- ...node,
51
- // React Flow expects a position property on the node instead of `x`
52
- // and `y` fields.
53
- height: node.height,
54
- position: { x: node.x, y: node.y },
55
- });
56
-
57
- if (node.children) {
58
- node.children.forEach((node2: any) => {
59
- nodeItems.push({
60
- ...node2,
61
- // React Flow expects a position property on the node instead of `x`
62
- // and `y` fields.
63
- targetPosition: "top",
64
- sourcePosition: "bottom",
65
- position: { x: node2.x, y: node2.y },
66
- parentId: node.id,
67
- });
68
- });
69
- }
70
- });
71
-
72
- layoutedGraph.edges.forEach((edge: any) => {
73
- edge.source = edge.sources[0];
74
- edge.target = edge.targets[0];
75
- });
76
-
77
- return {
78
- nodes: nodeItems,
79
- edges: layoutedGraph.edges,
80
- };
81
- })
82
- .catch(console.error);
30
+ const graph: ElkNodeWithFlow = {
31
+ id: "root",
32
+ children: nodes.map((node: any) => ({
33
+ ...node,
34
+ targetPosition: "top",
35
+ sourcePosition: "bottom",
36
+ // Hardcoded until width and height calculation is implemented
37
+ })),
38
+ edges: edges,
39
+ };
40
+
41
+ return elk
42
+ .layout(graph, { layoutOptions: options })
43
+ .then((layoutedGraph: any) => {
44
+ let nodeItems: any = [];
45
+
46
+ layoutedGraph.children.forEach((node: any) => {
47
+ nodeItems.push({
48
+ ...node,
49
+ // React Flow expects a position property on the node instead of `x`
50
+ // and `y` fields.
51
+ height: node.height,
52
+ width: node.width,
53
+ position: { x: node.x, y: node.y + calcYOffset() },
54
+ });
55
+
56
+ if (node.children) {
57
+ node.children.forEach((node2: any) => {
58
+ nodeItems.push({
59
+ ...node2,
60
+ // React Flow expects a position property on the node instead of `x`
61
+ // and `y` fields.
62
+ targetPosition: "top",
63
+ sourcePosition: "bottom",
64
+ position: { x: node2.x, y: node2.y + calcYOffset() },
65
+ parentId: node.id,
66
+ });
67
+ });
68
+ }
69
+ });
70
+
71
+ layoutedGraph.edges.forEach((edge: ElkExtendedEdgeWithFlow) => {
72
+ edge.source = edge.sources[0];
73
+ edge.target = edge.targets[0];
74
+ });
75
+
76
+ return {
77
+ nodes: nodeItems,
78
+ edges: layoutedGraph.edges.map((edge: ElkExtendedEdgeWithFlow) => ({
79
+ ...edge,
80
+ })),
81
+ };
82
+ })
83
+ .catch(console.error);
84
+ };
85
+
86
+ const calcYOffset = () => {
87
+ return 60;
83
88
  };
84
89
 
85
90
  interface Props {
86
- title?: string; // e.g. Executions
87
- section?: string; // e.g. e4Integrate
91
+ title?: string; // e.g. Executions
92
+ section?: string; // e.g. e4Integrate
88
93
  }
89
94
 
90
- const IntegrationView: React.FC<Props> = (props: Props) => {
91
- const theme = useTheme();
92
- const styles = getStyles(theme);
93
-
94
- const [nodes, setNodes, onNodesChange] = useNodesState<any>([]);
95
- const [edges, setEdges, onEdgesChange] = useEdgesState<any>([]);
96
- const { fitView } = useReactFlow();
97
-
98
- const onConnect = useCallback((params: any) => {}, []);
99
- const onLayout = useCallback(
100
- ({ useInitialNodes = false }: any) => {
101
- const opts = { ...elkOptions };
102
- const ns = useInitialNodes ? initialNodes : nodes;
103
- const es = useInitialNodes ? initialEdges : edges;
104
-
105
- getLayoutedElements(ns, es, opts).then(
106
- ({ nodes: layoutedNodes, edges: layoutedEdges }: any) => {
107
- setNodes(layoutedNodes);
108
- setEdges(layoutedEdges);
109
- fitView();
110
- }
111
- );
112
- },
113
- [nodes, edges]
114
- );
115
-
116
- // Calculate the initial layout on mount.
117
- useLayoutEffect(() => {
118
- onLayout({ useInitialNodes: true });
119
- }, []);
120
-
121
- return (
122
- <Box sx={{ flexGrow: 1 }}>
123
- <ReactFlowProvider>
124
- <Box sx={{ width: "750px", height: "750px" }}>
125
- <ReactFlow
126
- nodes={nodes}
127
- edges={edges}
128
- nodeTypes={nodeTypes}
129
- edgeTypes={edgeTypes}
130
- onConnect={onConnect}
131
- onNodesChange={onNodesChange}
132
- onEdgesChange={onEdgesChange}
133
- fitView
134
- >
135
- <Background />
136
- </ReactFlow>
137
- </Box>
138
- </ReactFlowProvider>
139
- </Box>
140
- );
141
- };
142
-
143
- const getStyles = (theme: Theme) => {
144
- return {
145
- appbar: {
146
- color: "#000",
147
- },
148
- toolbar: {
149
- backgroundColor: "#fff",
150
- padding: theme.spacing(2, 0),
151
- },
152
- };
95
+ const IntegrationView: React.FC<Props> = () => {
96
+ const [nodes, setNodes, onNodesChange] = useNodesState<any>([]);
97
+ const [edges, setEdges, onEdgesChange] = useEdgesState<any>([]);
98
+ const { fitView } = useReactFlow();
99
+
100
+ const onConnect = useCallback(() => {}, []);
101
+ const onLayout = useCallback(
102
+ ({ useInitialNodes = false }: any) => {
103
+ const opts = { ...elkOptions };
104
+ const ns = useInitialNodes ? initialNodes : nodes;
105
+ const es = useInitialNodes ? initialEdges : edges;
106
+
107
+ getLayoutedElements(ns, es, opts).then(
108
+ ({ nodes: layoutedNodes, edges: layoutedEdges }: any) => {
109
+ setNodes(layoutedNodes);
110
+ setEdges(layoutedEdges);
111
+ fitView();
112
+ },
113
+ );
114
+ },
115
+ [nodes, edges],
116
+ );
117
+
118
+ // Calculate the initial layout on mount.
119
+ useLayoutEffect(() => {
120
+ onLayout({ useInitialNodes: true });
121
+ }, []);
122
+
123
+ return (
124
+ <Box sx={{ flexGrow: 1 }}>
125
+ <ReactFlowProvider>
126
+ <Box sx={{ width: "750px", height: "600px" }}>
127
+ <ReactFlow
128
+ nodes={nodes}
129
+ edges={edges}
130
+ nodeTypes={nodeTypes}
131
+ edgeTypes={edgeTypes}
132
+ onConnect={onConnect}
133
+ onNodesChange={onNodesChange}
134
+ onEdgesChange={onEdgesChange}
135
+ fitView={true} // Fits the view on initial load
136
+ fitViewOptions={{
137
+ padding: 0.1,
138
+ includeHiddenNodes: false,
139
+ minZoom: 0.1,
140
+ maxZoom: 2,
141
+ duration: 200,
142
+ nodes: [{ id: "1" }, { id: "2" }], // nodes to fit
143
+ }} // Optional options for initial fit
144
+ nodesDraggable={false}
145
+ minZoom={0.1} // Lock zoom to 1
146
+ maxZoom={2} // Lock zoom to 1
147
+ >
148
+ <Background />
149
+ <Controls />
150
+ </ReactFlow>
151
+ </Box>
152
+ </ReactFlowProvider>
153
+ </Box>
154
+ );
153
155
  };
154
156
 
155
157
  export default () => (
156
- <ReactFlowProvider>
157
- <IntegrationView />
158
- </ReactFlowProvider>
158
+ <ReactFlowProvider>
159
+ <IntegrationView />
160
+ </ReactFlowProvider>
159
161
  );
@@ -0,0 +1,50 @@
1
+ import { Card, CardContent, CardHeader } from "@mui/material";
2
+ import { forwardRef, type HTMLAttributes } from "react";
3
+
4
+ export const BaseNode = forwardRef<
5
+ HTMLDivElement,
6
+ HTMLAttributes<HTMLDivElement>
7
+ >(({ className, ...props }, ref) => (
8
+ <Card tabIndex={0}>
9
+ <CardContent ref={ref} {...props} />
10
+ </Card>
11
+ ));
12
+ BaseNode.displayName = "BaseNode";
13
+
14
+ /**
15
+ * A container for a consistent header layout intended to be used inside the
16
+ * `<BaseNode />` component.
17
+ */
18
+ export const BaseNodeHeader = forwardRef<
19
+ HTMLElement,
20
+ HTMLAttributes<HTMLElement>
21
+ >(({ className, ...props }, ref) => <CardHeader ref={ref} {...props} />);
22
+ BaseNodeHeader.displayName = "BaseNodeHeader";
23
+
24
+ /**
25
+ * The title text for the node. To maintain a native application feel, the title
26
+ * text is not selectable.
27
+ */
28
+ export const BaseNodeHeaderTitle = forwardRef<
29
+ HTMLHeadingElement,
30
+ HTMLAttributes<HTMLHeadingElement>
31
+ >(({ className, ...props }, ref) => (
32
+ <h3 ref={ref} data-slot="base-node-title" {...props} />
33
+ ));
34
+ BaseNodeHeaderTitle.displayName = "BaseNodeHeaderTitle";
35
+
36
+ export const BaseNodeContent = forwardRef<
37
+ HTMLDivElement,
38
+ HTMLAttributes<HTMLDivElement>
39
+ >(({ className, ...props }, ref) => (
40
+ <CardContent ref={ref} data-slot="base-node-content" {...props} />
41
+ ));
42
+ BaseNodeContent.displayName = "BaseNodeContent";
43
+
44
+ export const BaseNodeFooter = forwardRef<
45
+ HTMLDivElement,
46
+ HTMLAttributes<HTMLDivElement>
47
+ >(({ className, ...props }, ref) => (
48
+ <div ref={ref} data-slot="base-node-footer" {...props} />
49
+ ));
50
+ BaseNodeFooter.displayName = "BaseNodeFooter";
@@ -1,10 +1,10 @@
1
- import { Handle, NodeProps, Position } from "@xyflow/react";
1
+ import { Handle, Position } from "@xyflow/react";
2
2
 
3
- export function ConnectionNode(props: NodeProps): JSX.Element {
4
- return (
5
- <div>
6
- <Handle type="source" position={Position.Bottom} />
7
- <Handle type="target" position={Position.Top} />
8
- </div>
9
- );
3
+ export function ConnectionNode(): JSX.Element {
4
+ return (
5
+ <div>
6
+ <Handle type="source" position={Position.Bottom} style={{ opacity: 1 }} />
7
+ <Handle type="target" position={Position.Top} style={{ opacity: 0 }} />
8
+ </div>
9
+ );
10
10
  }
@@ -1,10 +1,10 @@
1
- import { Handle, NodeProps, Position } from "@xyflow/react";
1
+ import { Handle, Position } from "@xyflow/react";
2
2
 
3
- export function EntryNode(props: NodeProps): JSX.Element {
4
- return (
5
- <div>
6
- <Handle type="source" position={Position.Bottom} />
7
- <Handle type="target" position={Position.Top} />
8
- </div>
9
- );
3
+ export function EntryNode(): JSX.Element {
4
+ return (
5
+ <div>
6
+ <Handle type="source" position={Position.Bottom} />
7
+ <Handle type="target" position={Position.Top} />
8
+ </div>
9
+ );
10
10
  }