prefect 3.6.12__py3-none-any.whl → 3.6.13__py3-none-any.whl
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.
- prefect/_build_info.py +3 -3
- prefect/_internal/compatibility/blocks.py +18 -0
- prefect/_internal/urls.py +29 -0
- prefect/_states.py +4 -1
- prefect/client/orchestration/_concurrency_limits/client.py +16 -16
- prefect/client/schemas/filters.py +24 -0
- prefect/client/subscriptions.py +1 -1
- prefect/events/clients.py +52 -13
- prefect/flow_engine.py +192 -10
- prefect/flows.py +61 -2
- prefect/results.py +262 -21
- prefect/runner/runner.py +29 -82
- prefect/runner/storage.py +6 -25
- prefect/server/schemas/filters.py +45 -0
- prefect/server/ui-v2/assets/{artifact-card-Ds2tntMW.js → artifact-card-CUEaRDGw.js} +2 -2
- prefect/server/ui-v2/assets/{artifact-card-Ds2tntMW.js.map → artifact-card-CUEaRDGw.js.map} +1 -1
- prefect/server/ui-v2/assets/{artifact._id-erPNL0a8.js → artifact._id-Ca6VCUS0.js} +2 -2
- prefect/server/ui-v2/assets/{artifact._id-erPNL0a8.js.map → artifact._id-Ca6VCUS0.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation-wizard-Bx9AQxRV.js → automation-wizard-z26pICBl.js} +2 -2
- prefect/server/ui-v2/assets/{automation-wizard-Bx9AQxRV.js.map → automation-wizard-z26pICBl.js.map} +1 -1
- prefect/server/ui-v2/assets/automation._id-DuodjY5t.js +2 -0
- prefect/server/ui-v2/assets/{automation._id-IHh5QJwE.js.map → automation._id-DuodjY5t.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation_._id.edit-Ds8vO0c5.js → automation_._id.edit-CcuJhc-y.js} +2 -2
- prefect/server/ui-v2/assets/{automation_._id.edit-Ds8vO0c5.js.map → automation_._id.edit-CcuJhc-y.js.map} +1 -1
- prefect/server/ui-v2/assets/{automations-header-C6aUe5Tw.js → automations-header-CgOWwuc6.js} +2 -2
- prefect/server/ui-v2/assets/{automations-header-C6aUe5Tw.js.map → automations-header-CgOWwuc6.js.map} +1 -1
- prefect/server/ui-v2/assets/{base-job-template-form-section-a-9TFMcW.js → base-job-template-form-section-DN9HyjM5.js} +2 -2
- prefect/server/ui-v2/assets/{base-job-template-form-section-a-9TFMcW.js.map → base-job-template-form-section-DN9HyjM5.js.map} +1 -1
- prefect/server/ui-v2/assets/{block-type-details-eq3Wg2ht.js → block-type-details-rrToxL5r.js} +2 -2
- prefect/server/ui-v2/assets/{block-type-details-eq3Wg2ht.js.map → block-type-details-rrToxL5r.js.map} +1 -1
- prefect/server/ui-v2/assets/block-type-logo-DURScH8H.js +2 -0
- prefect/server/ui-v2/assets/{block-type-logo-B31LJm5H.js.map → block-type-logo-DURScH8H.js.map} +1 -1
- prefect/server/ui-v2/assets/{block._id-OVdz3htC.js → block._id-Bue6lnrN.js} +2 -2
- prefect/server/ui-v2/assets/{block._id-OVdz3htC.js.map → block._id-Bue6lnrN.js.map} +1 -1
- prefect/server/ui-v2/assets/block_._id.edit-QY0OzN_b.js +2 -0
- prefect/server/ui-v2/assets/{block_._id.edit-CIhIBJrm.js.map → block_._id.edit-QY0OzN_b.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog-CGjRGWv6.js +2 -0
- prefect/server/ui-v2/assets/{catalog-CfniU0UV.js.map → catalog-CGjRGWv6.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog_._slug-BMFNZhEb.js +2 -0
- prefect/server/ui-v2/assets/{catalog_._slug-C9p86T4s.js.map → catalog_._slug-BMFNZhEb.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog_._slug_.create-CuFA3kUC.js +2 -0
- prefect/server/ui-v2/assets/{catalog_._slug_.create-BhSunL__.js.map → catalog_._slug_.create-CuFA3kUC.js.map} +1 -1
- prefect/server/ui-v2/assets/{collapsible-DBD7wjpi.js → collapsible-Ell2FjrX.js} +2 -2
- prefect/server/ui-v2/assets/{collapsible-DBD7wjpi.js.map → collapsible-Ell2FjrX.js.map} +1 -1
- prefect/server/ui-v2/assets/{concurrency-limit._id-C-XWq7Tf.js → concurrency-limit._id-Rr1ysUct.js} +2 -2
- prefect/server/ui-v2/assets/{concurrency-limit._id-C-XWq7Tf.js.map → concurrency-limit._id-Rr1ysUct.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-noFojqGL.js → create-CQK8-uO1.js} +2 -2
- prefect/server/ui-v2/assets/{create-noFojqGL.js.map → create-CQK8-uO1.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-Bj2t5YQq.js → create-ewA3uq_h.js} +2 -2
- prefect/server/ui-v2/assets/{create-Bj2t5YQq.js.map → create-ewA3uq_h.js.map} +1 -1
- prefect/server/ui-v2/assets/{data-table-BjFlVIyC.js → data-table-Bx1uYX_M.js} +2 -2
- prefect/server/ui-v2/assets/{data-table-BjFlVIyC.js.map → data-table-Bx1uYX_M.js.map} +1 -1
- prefect/server/ui-v2/assets/delete-confirmation-dialog-CqKsUEj_.js +2 -0
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-COdZmNfa.js.map → delete-confirmation-dialog-CqKsUEj_.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-action-header-C6v2kZ6V.js → deployment-action-header-Bz5COdER.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-action-header-C6v2kZ6V.js.map → deployment-action-header-Bz5COdER.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-form-D9d5sZM2.js → deployment-form-CrlZlNoj.js} +3 -3
- prefect/server/ui-v2/assets/{deployment-form-D9d5sZM2.js.map → deployment-form-CrlZlNoj.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-links-Dy-M1Que.js → deployment-links-D9ZR_vmp.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-links-Dy-M1Que.js.map → deployment-links-D9ZR_vmp.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment._id-BV0rSqba.js +2 -0
- prefect/server/ui-v2/assets/{deployment._id-DVmqclRz.js.map → deployment._id-BV0rSqba.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-CZlY9261.js → deployment._id-DvHhx-qN.js} +2 -2
- prefect/server/ui-v2/assets/{deployment._id-CZlY9261.js.map → deployment._id-DvHhx-qN.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.duplicate-BrEOenqP.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.duplicate-DVMjpk5m.js.map → deployment_._id.duplicate-BrEOenqP.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.edit-BbYKPK42.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.edit-Ck_P6KDn.js.map → deployment_._id.edit-BbYKPK42.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment_._id.run-Cht7AHDG.js → deployment_._id.run-Dv7S_MJR.js} +2 -2
- prefect/server/ui-v2/assets/{deployment_._id.run-Cht7AHDG.js.map → deployment_._id.run-Dv7S_MJR.js.map} +1 -1
- prefect/server/ui-v2/assets/{dropdown-menu-xZ_3w9OP.js → dropdown-menu-e0Fqb6aw.js} +2 -2
- prefect/server/ui-v2/assets/{dropdown-menu-xZ_3w9OP.js.map → dropdown-menu-e0Fqb6aw.js.map} +1 -1
- prefect/server/ui-v2/assets/{event._eventDate._eventId-CpexuXd6.js → event._eventDate._eventId-Cp4UmGqq.js} +2 -2
- prefect/server/ui-v2/assets/{event._eventDate._eventId-CpexuXd6.js.map → event._eventDate._eventId-Cp4UmGqq.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run-graph-BrqoR3E2.js +2 -0
- prefect/server/ui-v2/assets/flow-run-graph-BrqoR3E2.js.map +1 -0
- prefect/server/ui-v2/assets/{flow-run._id-ZBlKBwPO.js → flow-run._id-BOp38Pbq.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-ZBlKBwPO.js.map → flow-run._id-BOp38Pbq.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run._id-DJnTDEN_.js +2 -0
- prefect/server/ui-v2/assets/{flow-run._id-OL0YhyLW.js.map → flow-run._id-DJnTDEN_.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run._id-D_wY_rBe.js +4 -0
- prefect/server/ui-v2/assets/flow-run._id-D_wY_rBe.js.map +1 -0
- prefect/server/ui-v2/assets/flow-runs-pagination-Bq2ZUzM6.js +2 -0
- prefect/server/ui-v2/assets/flow-runs-pagination-Bq2ZUzM6.js.map +1 -0
- prefect/server/ui-v2/assets/flow._id-eCBL95rg.js +2 -0
- prefect/server/ui-v2/assets/{flow._id-DhrCicwR.js.map → flow._id-eCBL95rg.js.map} +1 -1
- prefect/server/ui-v2/assets/{form-BTub_PhK.js → form-DNerk3LS.js} +2 -2
- prefect/server/ui-v2/assets/{form-BTub_PhK.js.map → form-DNerk3LS.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-6wmrKLU3.js → header-B0ejRncu.js} +2 -2
- prefect/server/ui-v2/assets/{header-6wmrKLU3.js.map → header-B0ejRncu.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-Dp9qi8fq.js → header-DwagHBlF.js} +2 -2
- prefect/server/ui-v2/assets/{header-Dp9qi8fq.js.map → header-DwagHBlF.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-B75eb688.js → header-huSvwxKI.js} +2 -2
- prefect/server/ui-v2/assets/{header-B75eb688.js.map → header-huSvwxKI.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DSaSov8V.js → index-BO3SOwdV.js} +2 -2
- prefect/server/ui-v2/assets/{index-DSaSov8V.js.map → index-BO3SOwdV.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DOkFJdYY.js → index-BTPE3vs7.js} +2 -2
- prefect/server/ui-v2/assets/{index-DOkFJdYY.js.map → index-BTPE3vs7.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BU4yZRd3.js +2 -0
- prefect/server/ui-v2/assets/{index-Cs8eFQKw.js.map → index-BU4yZRd3.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BhALpenO.js +2 -0
- prefect/server/ui-v2/assets/{index-qPlIYf3i.js.map → index-BhALpenO.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BzN9bQeM.js +2 -0
- prefect/server/ui-v2/assets/{index-CT_nG86y.js.map → index-BzN9bQeM.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-zpb5iSCL.js → index-CBhi1P9g.js} +2 -2
- prefect/server/ui-v2/assets/{index-zpb5iSCL.js.map → index-CBhi1P9g.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-UN2Tx4jH.js → index-CRDz4nhM.js} +2 -2
- prefect/server/ui-v2/assets/{index-UN2Tx4jH.js.map → index-CRDz4nhM.js.map} +1 -1
- prefect/server/ui-v2/assets/index-CTnoa3Ho.js +2 -0
- prefect/server/ui-v2/assets/index-CTnoa3Ho.js.map +1 -0
- prefect/server/ui-v2/assets/{index-DzMGV8GV.js → index-CWkbSdxY.js} +2 -2
- prefect/server/ui-v2/assets/{index-DzMGV8GV.js.map → index-CWkbSdxY.js.map} +1 -1
- prefect/server/ui-v2/assets/index-CgOsOj5t.js +2 -0
- prefect/server/ui-v2/assets/{index-7ThYp9SY.js.map → index-CgOsOj5t.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CGWoVV2s.js → index-CnIJUujl.js} +2 -2
- prefect/server/ui-v2/assets/{index-CGWoVV2s.js.map → index-CnIJUujl.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D08xgmV0.js → index-Cutg_A1j.js} +2 -2
- prefect/server/ui-v2/assets/{index-D08xgmV0.js.map → index-Cutg_A1j.js.map} +1 -1
- prefect/server/ui-v2/assets/index-D5RdrxkU.js +17 -0
- prefect/server/ui-v2/assets/index-D5RdrxkU.js.map +1 -0
- prefect/server/ui-v2/assets/{index-DfiNsXba.js → index-DDiyFpIV.js} +2 -2
- prefect/server/ui-v2/assets/{index-DfiNsXba.js.map → index-DDiyFpIV.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BA7ACCoL.js → index-DI2DC5gd.js} +2 -2
- prefect/server/ui-v2/assets/{index-BA7ACCoL.js.map → index-DI2DC5gd.js.map} +1 -1
- prefect/server/ui-v2/assets/index-Dg_duvDx.js +2 -0
- prefect/server/ui-v2/assets/{index-B_3f8Hcb.js.map → index-Dg_duvDx.js.map} +1 -1
- prefect/server/ui-v2/assets/index-Dspw5HFj.js +2 -0
- prefect/server/ui-v2/assets/{index-7-r4ia_S.js.map → index-Dspw5HFj.js.map} +1 -1
- prefect/server/ui-v2/assets/index-NY089eTx.css +1 -0
- prefect/server/ui-v2/assets/{index-DYOACRXY.js → index-VOOLxiSE.js} +2 -2
- prefect/server/ui-v2/assets/{index-DYOACRXY.js.map → index-VOOLxiSE.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-HGoNWFfP.js → index-Wfs7Cjew.js} +2 -2
- prefect/server/ui-v2/assets/{index-HGoNWFfP.js.map → index-Wfs7Cjew.js.map} +1 -1
- prefect/server/ui-v2/assets/index-dSUEBAqg.js +2 -0
- prefect/server/ui-v2/assets/{index-H6bwm6L6.js.map → index-dSUEBAqg.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D3ILnEzm.js → index-uvH5a3zO.js} +2 -2
- prefect/server/ui-v2/assets/{index-D3ILnEzm.js.map → index-uvH5a3zO.js.map} +1 -1
- prefect/server/ui-v2/assets/{json-input-9UPGqxTw.js → json-input-gXz7BuJj.js} +2 -2
- prefect/server/ui-v2/assets/{json-input-9UPGqxTw.js.map → json-input-gXz7BuJj.js.map} +1 -1
- prefect/server/ui-v2/assets/{key._key-CTFfXO_k.js → key._key-CJPbLXwU.js} +2 -2
- prefect/server/ui-v2/assets/{key._key-CTFfXO_k.js.map → key._key-CJPbLXwU.js.map} +1 -1
- prefect/server/ui-v2/assets/{lazy-markdown-BHwIrC8E.js → lazy-markdown-wPid80zf.js} +2 -2
- prefect/server/ui-v2/assets/{lazy-markdown-BHwIrC8E.js.map → lazy-markdown-wPid80zf.js.map} +1 -1
- prefect/server/ui-v2/assets/{login-kqmT29n7.js → login-DC63bGXK.js} +2 -2
- prefect/server/ui-v2/assets/{login-kqmT29n7.js.map → login-DC63bGXK.js.map} +1 -1
- prefect/server/ui-v2/assets/{markdown-input-BesmAbLS.js → markdown-input-BhqrU6Eo.js} +2 -2
- prefect/server/ui-v2/assets/{markdown-input-BesmAbLS.js.map → markdown-input-BhqrU6Eo.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-example-snippet-COTWYn1Y.js → python-example-snippet-3jtXWQZN.js} +3 -3
- prefect/server/ui-v2/assets/{python-example-snippet-COTWYn1Y.js.map → python-example-snippet-3jtXWQZN.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-input-Bjccebi0.js → python-input-ZVi-v324.js} +2 -2
- prefect/server/ui-v2/assets/{python-input-Bjccebi0.js.map → python-input-ZVi-v324.js.map} +1 -1
- prefect/server/ui-v2/assets/{radio-group-DkAK0M2h.js → radio-group-BBMLpHGc.js} +2 -2
- prefect/server/ui-v2/assets/{radio-group-DkAK0M2h.js.map → radio-group-BBMLpHGc.js.map} +1 -1
- prefect/server/ui-v2/assets/route-error-state-BJXl8qkX.js +2 -0
- prefect/server/ui-v2/assets/{route-error-state-ALftyvGl.js.map → route-error-state-BJXl8qkX.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-BR4E-WXE.js → schema-form-BEqYjsM-.js} +2 -2
- prefect/server/ui-v2/assets/{schema-form-BR4E-WXE.js.map → schema-form-BEqYjsM-.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BhL8C5NS.js → schema-form-input-string-format-datetime-l3xt3PWf.js} +4 -4
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BhL8C5NS.js.map → schema-form-input-string-format-datetime-l3xt3PWf.js.map} +1 -1
- prefect/server/ui-v2/assets/settings-txD0dR5Q.js +2 -0
- prefect/server/ui-v2/assets/settings-txD0dR5Q.js.map +1 -0
- prefect/server/ui-v2/assets/{sort-filter-BD4vwJXt.js → sort-filter-DHPFdKZ2.js} +2 -2
- prefect/server/ui-v2/assets/{sort-filter-BD4vwJXt.js.map → sort-filter-DHPFdKZ2.js.map} +1 -1
- prefect/server/ui-v2/assets/state-colors-CAAf0Eg3.js +2 -0
- prefect/server/ui-v2/assets/state-colors-CAAf0Eg3.js.map +1 -0
- prefect/server/ui-v2/assets/table-ULfpXJXB.js +2 -0
- prefect/server/ui-v2/assets/table-ULfpXJXB.js.map +1 -0
- prefect/server/ui-v2/assets/tags-input-BLzMOTDb.js +2 -0
- prefect/server/ui-v2/assets/tags-input-BLzMOTDb.js.map +1 -0
- prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-BpeKHk7g.js +2 -0
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CG3den1B.js.map → task-run-concurrency-limits-reset-dialog-BpeKHk7g.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-DOcIzVi0.js → task-run._id-CkOl9MJs.js} +3 -3
- prefect/server/ui-v2/assets/{task-run._id-DOcIzVi0.js.map → task-run._id-CkOl9MJs.js.map} +1 -1
- prefect/server/ui-v2/assets/task-run._id-udkz1lhh.js +2 -0
- prefect/server/ui-v2/assets/{task-run._id-CnIVqU6v.js.map → task-run._id-udkz1lhh.js.map} +1 -1
- prefect/server/ui-v2/assets/task-runs-pagination-B7D5K_FM.js +2 -0
- prefect/server/ui-v2/assets/{task-runs-pagination-DLSAz-Ur.js.map → task-runs-pagination-B7D5K_FM.js.map} +1 -1
- prefect/server/ui-v2/assets/{textarea-D8LjlIx7.js → textarea-C4bdj7Jk.js} +2 -2
- prefect/server/ui-v2/assets/{textarea-D8LjlIx7.js.map → textarea-C4bdj7Jk.js.map} +1 -1
- prefect/server/ui-v2/assets/{timezone-select-BG3cL3-U.js → timezone-select-AdlSRQxZ.js} +2 -2
- prefect/server/ui-v2/assets/{timezone-select-BG3cL3-U.js.map → timezone-select-AdlSRQxZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{toggle-group-D3zeurIL.js → toggle-group-C-vxYz4l.js} +2 -2
- prefect/server/ui-v2/assets/{toggle-group-D3zeurIL.js.map → toggle-group-C-vxYz4l.js.map} +1 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-Cqhaqtqe.js +2 -0
- prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-Bzy2ML2T.js.map → use-delete-automation-confirmation-dialog-Cqhaqtqe.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DRAP-Tnu.js → use-delete-block-document-confirmation-dialog-GjNhFxZe.js} +2 -2
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-DRAP-Tnu.js.map → use-delete-block-document-confirmation-dialog-GjNhFxZe.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-D4yWonR8.js → use-flow-runs-selected-rows-DfwmswyR.js} +2 -2
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-D4yWonR8.js.map → use-flow-runs-selected-rows-DfwmswyR.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DZeBiVd9.js → use-get-artifacts-flow-task-runs-BEBpG_5J.js} +2 -2
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DZeBiVd9.js.map → use-get-artifacts-flow-task-runs-BEBpG_5J.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-quick-run-BxAMqZDM.js → use-quick-run-BYBRcDwC.js} +2 -2
- prefect/server/ui-v2/assets/{use-quick-run-BxAMqZDM.js.map → use-quick-run-BYBRcDwC.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-stepper-T3wAKNvM.js → use-stepper-Bk97vOTm.js} +2 -2
- prefect/server/ui-v2/assets/{use-stepper-T3wAKNvM.js.map → use-stepper-Bk97vOTm.js.map} +1 -1
- prefect/server/ui-v2/assets/{utilities-B2JMf8iI.js → utilities-BQwGFLk5.js} +2 -2
- prefect/server/ui-v2/assets/{utilities-B2JMf8iI.js.map → utilities-BQwGFLk5.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool-filter-CZz0AJlt.js → work-pool-filter-Ddhp_M-L.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-filter-CZz0AJlt.js.map → work-pool-filter-Ddhp_M-L.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool-queue-toggle-DX3eV3R_.js +2 -0
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-D4eeo-hi.js.map → work-pool-queue-toggle-DX3eV3R_.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool._workPoolName-DrWddu9K.js → work-pool._workPoolName-BaRIsXBX.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool._workPoolName-DrWddu9K.js.map → work-pool._workPoolName-BaRIsXBX.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool_._workPoolName.edit-dhS_Xz32.js +2 -0
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-CA0ePjCk.js.map → work-pool_._workPoolName.edit-dhS_Xz32.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DpUnE86v.js → work-pool_._workPoolName.queue._workQueueName-BlstL9Se.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DpUnE86v.js.map → work-pool_._workPoolName.queue._workQueueName-BlstL9Se.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-queue-icon-text-BjiA7vAW.js → work-queue-icon-text-_Ez8e2dw.js} +2 -2
- prefect/server/ui-v2/assets/{work-queue-icon-text-BjiA7vAW.js.map → work-queue-icon-text-_Ez8e2dw.js.map} +1 -1
- prefect/server/ui-v2/index.html +2 -2
- prefect/settings/models/flows.py +14 -1
- prefect/settings/models/runner.py +16 -6
- prefect/task_engine.py +17 -3
- prefect/task_worker.py +99 -17
- prefect/tasks.py +2 -2
- prefect/testing/fixtures.py +41 -6
- {prefect-3.6.12.dist-info → prefect-3.6.13.dist-info}/METADATA +1 -1
- {prefect-3.6.12.dist-info → prefect-3.6.13.dist-info}/RECORD +221 -220
- prefect/server/ui-v2/assets/automation._id-IHh5QJwE.js +0 -2
- prefect/server/ui-v2/assets/block-type-logo-B31LJm5H.js +0 -2
- prefect/server/ui-v2/assets/block_._id.edit-CIhIBJrm.js +0 -2
- prefect/server/ui-v2/assets/catalog-CfniU0UV.js +0 -2
- prefect/server/ui-v2/assets/catalog_._slug-C9p86T4s.js +0 -2
- prefect/server/ui-v2/assets/catalog_._slug_.create-BhSunL__.js +0 -2
- prefect/server/ui-v2/assets/delete-confirmation-dialog-COdZmNfa.js +0 -2
- prefect/server/ui-v2/assets/deployment._id-DVmqclRz.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.duplicate-DVMjpk5m.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.edit-Ck_P6KDn.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-CfoPEAgQ.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-CfoPEAgQ.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-C-qxwEBp.js +0 -4
- prefect/server/ui-v2/assets/flow-run._id-C-qxwEBp.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-OL0YhyLW.js +0 -2
- prefect/server/ui-v2/assets/flow-runs-pagination-DnwkJapB.js +0 -2
- prefect/server/ui-v2/assets/flow-runs-pagination-DnwkJapB.js.map +0 -1
- prefect/server/ui-v2/assets/flow._id-DhrCicwR.js +0 -2
- prefect/server/ui-v2/assets/index-7-r4ia_S.js +0 -2
- prefect/server/ui-v2/assets/index-7ThYp9SY.js +0 -2
- prefect/server/ui-v2/assets/index-B7zHzWQW.css +0 -1
- prefect/server/ui-v2/assets/index-B_3f8Hcb.js +0 -2
- prefect/server/ui-v2/assets/index-BiCd-Iuz.js +0 -2
- prefect/server/ui-v2/assets/index-BiCd-Iuz.js.map +0 -1
- prefect/server/ui-v2/assets/index-CT_nG86y.js +0 -2
- prefect/server/ui-v2/assets/index-Cs8eFQKw.js +0 -2
- prefect/server/ui-v2/assets/index-H6bwm6L6.js +0 -2
- prefect/server/ui-v2/assets/index-WYPZo52S.js +0 -17
- prefect/server/ui-v2/assets/index-WYPZo52S.js.map +0 -1
- prefect/server/ui-v2/assets/index-qPlIYf3i.js +0 -2
- prefect/server/ui-v2/assets/route-error-state-ALftyvGl.js +0 -2
- prefect/server/ui-v2/assets/settings-BL0X8cDU.js +0 -2
- prefect/server/ui-v2/assets/settings-BL0X8cDU.js.map +0 -1
- prefect/server/ui-v2/assets/table-CEAx-qHs.js +0 -2
- prefect/server/ui-v2/assets/table-CEAx-qHs.js.map +0 -1
- prefect/server/ui-v2/assets/tags-input-D1RJZEUA.js +0 -2
- prefect/server/ui-v2/assets/tags-input-D1RJZEUA.js.map +0 -1
- prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-CG3den1B.js +0 -2
- prefect/server/ui-v2/assets/task-run._id-CnIVqU6v.js +0 -2
- prefect/server/ui-v2/assets/task-runs-pagination-DLSAz-Ur.js +0 -2
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-Bzy2ML2T.js +0 -2
- prefect/server/ui-v2/assets/use-local-storage-CpxMp5wR.js +0 -2
- prefect/server/ui-v2/assets/use-local-storage-CpxMp5wR.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool-queue-toggle-D4eeo-hi.js +0 -2
- prefect/server/ui-v2/assets/work-pool_._workPoolName.edit-CA0ePjCk.js +0 -2
- {prefect-3.6.12.dist-info → prefect-3.6.13.dist-info}/WHEEL +0 -0
- {prefect-3.6.12.dist-info → prefect-3.6.13.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.12.dist-info → prefect-3.6.13.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-flow-runs-selected-rows-D4yWonR8.js","sources":["../../src/components/flow-runs/flow-runs-list/use-delete-flow-runs-dialog.ts","../../src/components/flow-runs/flow-runs-list/flow-runs-row-count.tsx","../../src/components/flow-runs/flow-runs-list/use-flow-runs-selected-rows.ts"],"sourcesContent":["import { toast } from \"sonner\";\nimport { useDeleteFlowRun } from \"@/api/flow-runs\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteFlowRunsDialog = () => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { mutateAsync } = useDeleteFlowRun();\n\n\tconst handleDeletes = async (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) => {\n\t\ttry {\n\t\t\tconst res = await Promise.allSettled(\n\t\t\t\tflowRunIds.map((id) => mutateAsync(id)),\n\t\t\t);\n\t\t\tconst { numFails, numSuccess } = res.reduce(\n\t\t\t\t(accumulator, currentValue) => {\n\t\t\t\t\tif (currentValue.status === \"rejected\") {\n\t\t\t\t\t\taccumulator.numFails += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taccumulator.numSuccess += 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{ numFails: 0, numSuccess: 0 },\n\t\t\t);\n\t\t\tif (numFails > 1) {\n\t\t\t\ttoast.error(`${numFails} flow runs failed to delete`);\n\t\t\t} else if (numFails === 1) {\n\t\t\t\ttoast.error(\"Flow run failed to delete\");\n\t\t\t} else if (numSuccess > 1) {\n\t\t\t\ttoast.success(`${numSuccess} flow runs deleted`);\n\t\t\t} else {\n\t\t\t\ttoast.success(\"Flow run deleted\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Unknown error while deleting flow run.\", err);\n\t\t} finally {\n\t\t\tonConfirm();\n\t\t}\n\t};\n\n\tconst handleConfirmDelete = (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Flow Runs\",\n\t\t\tdescription: \"Are you sure you want to delete selected flow runs?\",\n\t\t\tonConfirm: () => {\n\t\t\t\tvoid handleDeletes(flowRunIds, onConfirm);\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import type { CheckedState } from \"@radix-ui/react-checkbox\";\nimport { useMemo } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { pluralize } from \"@/utils\";\nimport type { FlowRunCardData } from \"../flow-run-card\";\nimport { useDeleteFlowRunsDialog } from \"./use-delete-flow-runs-dialog\";\n\ntype CountOnlyProps = {\n\tcount: number | undefined;\n};\ntype SelectableProps = {\n\tcount: number | undefined;\n\tresults: Array<FlowRunCardData> | undefined;\n\tsetSelectedRows: (rows: Set<string>) => void;\n\tselectedRows: Set<string>;\n};\ntype FlowRunsRowCountProps = CountOnlyProps | SelectableProps;\n\nexport const FlowRunsRowCount = ({\n\tcount = 0,\n\t...props\n}: FlowRunsRowCountProps) => {\n\t// Selectable UX\n\tif (\n\t\t\"results\" in props &&\n\t\t\"setSelectedRows\" in props &&\n\t\t\"selectedRows\" in props\n\t) {\n\t\treturn <SelectedCount count={count} {...props} />;\n\t}\n\n\t// Count only UX\n\treturn (\n\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t</Typography>\n\t);\n};\n\nfunction SelectedCount({\n\tcount = 0,\n\tresults = [],\n\tsetSelectedRows,\n\tselectedRows,\n}: SelectableProps) {\n\tconst [deleteConfirmationDialogState, confirmDelete] =\n\t\tuseDeleteFlowRunsDialog();\n\n\tconst resultsIds = useMemo(() => results.map(({ id }) => id), [results]);\n\n\tconst selectedRowsList = Array.from(selectedRows);\n\n\tconst ToggleCheckbox = () => {\n\t\tconst isAllRowsSelected = resultsIds.every((id) => selectedRows.has(id));\n\t\tconst isSomeRowsSelected = resultsIds.some((id) => selectedRows.has(id));\n\t\tlet checkedState: CheckedState = false;\n\t\tif (isAllRowsSelected) {\n\t\t\tcheckedState = true;\n\t\t} else if (isSomeRowsSelected) {\n\t\t\tcheckedState = \"indeterminate\";\n\t\t}\n\t\treturn (\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"block\"\n\t\t\t\tchecked={checkedState}\n\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\tif (checked) {\n\t\t\t\t\t\tsetSelectedRows(new Set(resultsIds));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetSelectedRows(new Set());\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\taria-label=\"Toggle all\"\n\t\t\t/>\n\t\t);\n\t};\n\n\t// If has selected rows\n\tif (selectedRows.size > 0)\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<ToggleCheckbox />\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{selectedRowsList.length} selected\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Button\n\t\t\t\t\t\taria-label=\"Delete rows\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tconfirmDelete(selectedRowsList, () => setSelectedRows(new Set()));\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon id=\"Trash2\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t{results && setSelectedRows && selectedRows && (\n\t\t\t\t<Checkbox\n\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\tchecked={false}\n\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\tsetSelectedRows(new Set(checked ? resultsIds : undefined));\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"Toggle all\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t\t</Typography>\n\t\t</div>\n\t);\n}\n","import { useState } from \"react\";\n\nexport const useFlowRunsSelectedRows = (defaultValues?: Array<string>) => {\n\tconst [selectedRows, setSelectedRows] = useState<Set<string>>(\n\t\tnew Set(defaultValues),\n\t);\n\n\tconst addRow = (id: string) =>\n\t\tsetSelectedRows((curr) => new Set(curr).add(id));\n\n\tconst removeRow = (id: string) =>\n\t\tsetSelectedRows((curr) => {\n\t\t\tconst newValue = new Set(curr);\n\t\t\tnewValue.delete(id);\n\t\t\treturn newValue;\n\t\t});\n\n\tconst onSelectRow = (id: string, checked: boolean) => {\n\t\tif (checked) {\n\t\t\taddRow(id);\n\t\t} else {\n\t\t\tremoveRow(id);\n\t\t}\n\t};\n\n\tconst clearSet = () => setSelectedRows(new Set());\n\n\tconst utils = {\n\t\taddRow,\n\t\tremoveRow,\n\t\tonSelectRow,\n\t\tclearSet,\n\t};\n\n\treturn [selectedRows, setSelectedRows, utils] as const;\n};\n"],"names":["useDeleteFlowRunsDialog","dialogState","confirmDelete","useDeleteConfirmationDialog","mutateAsync","useDeleteFlowRun","handleDeletes","flowRunIds","onConfirm","res","id","numFails","numSuccess","accumulator","currentValue","toast","err","FlowRunsRowCount","count","props","jsx","SelectedCount","jsxs","Typography","pluralize","results","setSelectedRows","selectedRows","deleteConfirmationDialogState","resultsIds","useMemo","selectedRowsList","ToggleCheckbox","isAllRowsSelected","isSomeRowsSelected","checkedState","Checkbox","checked","Fragment","Button","Icon","DeleteConfirmationDialog","useFlowRunsSelectedRows","defaultValues","useState","addRow","curr","removeRow","newValue"],"mappings":"4QAIO,MAAMA,EAA0B,IAAM,CAC5C,KAAM,CAACC,EAAaC,CAAa,EAAIC,EAAA,EAE/B,CAAE,YAAAC,CAAA,EAAgBC,EAAA,EAElBC,EAAgB,MACrBC,EACAC,EAAY,IAAM,CAAC,IACf,CACJ,GAAI,CACH,MAAMC,EAAM,MAAM,QAAQ,WACzBF,EAAW,IAAKG,GAAON,EAAYM,CAAE,CAAC,CAAA,EAEjC,CAAE,SAAAC,EAAU,WAAAC,CAAA,EAAeH,EAAI,OACpC,CAACI,EAAaC,KACTA,EAAa,SAAW,WAC3BD,EAAY,UAAY,EAExBA,EAAY,YAAc,EAEpBA,GAER,CAAE,SAAU,EAAG,WAAY,CAAA,CAAE,EAE1BF,EAAW,EACdI,EAAM,MAAM,GAAGJ,CAAQ,6BAA6B,EAC1CA,IAAa,EACvBI,EAAM,MAAM,2BAA2B,EAC7BH,EAAa,EACvBG,EAAM,QAAQ,GAAGH,CAAU,oBAAoB,EAE/CG,EAAM,QAAQ,kBAAkB,CAElC,OAASC,EAAK,CACb,QAAQ,MAAM,yCAA0CA,CAAG,CAC5D,QAAA,CACCR,EAAA,CACD,CACD,EAcA,MAAO,CAACP,EAZoB,CAC3BM,EACAC,EAAY,IAAM,CAAC,IAEnBN,EAAc,CACb,MAAO,mBACP,YAAa,sDACb,UAAW,IAAM,CACXI,EAAcC,EAAYC,CAAS,CACzC,CAAA,CACA,CAEsC,CACzC,ECnCaS,EAAmB,CAAC,CAChC,MAAAC,EAAQ,EACR,GAAGC,CACJ,IAGE,YAAaA,GACb,oBAAqBA,GACrB,iBAAkBA,EAEXC,EAAAA,IAACC,EAAA,CAAc,MAAAH,EAAe,GAAGC,CAAA,CAAO,EAK/CG,EAAAA,KAACC,EAAA,CAAW,QAAQ,YAAY,UAAU,wBACxC,SAAA,CAAAL,EAAM,IAAEM,EAAUN,EAAO,UAAU,CAAA,EACrC,EAIF,SAASG,EAAc,CACtB,MAAAH,EAAQ,EACR,QAAAO,EAAU,CAAA,EACV,gBAAAC,EACA,aAAAC,CACD,EAAoB,CACnB,KAAM,CAACC,EAA+B1B,CAAa,EAClDF,EAAA,EAEK6B,EAAaC,EAAAA,QAAQ,IAAML,EAAQ,IAAI,CAAC,CAAE,GAAAf,KAASA,CAAE,EAAG,CAACe,CAAO,CAAC,EAEjEM,EAAmB,MAAM,KAAKJ,CAAY,EAE1CK,EAAiB,IAAM,CAC5B,MAAMC,EAAoBJ,EAAW,MAAOnB,GAAOiB,EAAa,IAAIjB,CAAE,CAAC,EACjEwB,EAAqBL,EAAW,KAAMnB,GAAOiB,EAAa,IAAIjB,CAAE,CAAC,EACvE,IAAIyB,EAA6B,GACjC,OAAIF,EACHE,EAAe,GACLD,IACVC,EAAe,iBAGff,EAAAA,IAACgB,EAAA,CACA,UAAU,QACV,QAASD,EACT,gBAAkBE,GAAY,CAE5BX,EADGW,EACa,IAAI,IAAIR,CAAU,EAElB,IAAI,GAFe,CAIrC,EACA,aAAW,YAAA,CAAA,CAGd,EAGA,OAAIF,EAAa,KAAO,EAEtBL,EAAAA,KAAAgB,WAAA,CACC,SAAA,CAAAhB,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAF,EAAAA,IAACY,EAAA,EAAe,EAChBV,EAAAA,KAACC,EAAA,CAAW,QAAQ,YAAY,UAAU,wBACxC,SAAA,CAAAQ,EAAiB,OAAO,WAAA,EAC1B,EACAX,EAAAA,IAACmB,EAAA,CACA,aAAW,cACX,KAAK,OACL,QAAQ,YACR,QAAS,IAAM,CACdrC,EAAc6B,EAAkB,IAAML,EAAgB,IAAI,GAAK,CAAC,CACjE,EAEA,SAAAN,EAAAA,IAACoB,EAAA,CAAK,GAAG,SAAS,UAAU,QAAA,CAAS,CAAA,CAAA,CACtC,EACD,EACApB,MAACqB,EAAA,CAA0B,GAAGb,CAAA,CAA+B,CAAA,EAC9D,EAIDN,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAG,GAAWC,GAAmBC,GAC9BP,EAAAA,IAACgB,EAAA,CACA,UAAU,QACV,QAAS,GACT,gBAAkBC,GAAY,CAC7BX,EAAgB,IAAI,IAAIW,EAAUR,EAAa,MAAS,CAAC,CAC1D,EACA,aAAW,YAAA,CAAA,EAGbP,EAAAA,KAACC,EAAA,CAAW,QAAQ,YAAY,UAAU,wBACxC,SAAA,CAAAL,EAAM,IAAEM,EAAUN,EAAO,UAAU,CAAA,CAAA,CACrC,CAAA,EACD,CAEF,CCxHO,MAAMwB,EAA2BC,GAAkC,CACzE,KAAM,CAAChB,EAAcD,CAAe,EAAIkB,EAAAA,SACvC,IAAI,IAAID,CAAa,CAAA,EAGhBE,EAAUnC,GACfgB,EAAiBoB,GAAS,IAAI,IAAIA,CAAI,EAAE,IAAIpC,CAAE,CAAC,EAE1CqC,EAAarC,GAClBgB,EAAiBoB,GAAS,CACzB,MAAME,EAAW,IAAI,IAAIF,CAAI,EAC7B,OAAAE,EAAS,OAAOtC,CAAE,EACXsC,CACR,CAAC,EAmBF,MAAO,CAACrB,EAAcD,EAPR,CACb,OAAAmB,EACA,UAAAE,EACA,YAbmB,CAACrC,EAAY2B,IAAqB,CACjDA,EACHQ,EAAOnC,CAAE,EAETqC,EAAUrC,CAAE,CAEd,EAQC,SANgB,IAAMgB,EAAgB,IAAI,GAAK,CAM/C,CAG2C,CAC7C"}
|
|
1
|
+
{"version":3,"file":"use-flow-runs-selected-rows-DfwmswyR.js","sources":["../../src/components/flow-runs/flow-runs-list/use-delete-flow-runs-dialog.ts","../../src/components/flow-runs/flow-runs-list/flow-runs-row-count.tsx","../../src/components/flow-runs/flow-runs-list/use-flow-runs-selected-rows.ts"],"sourcesContent":["import { toast } from \"sonner\";\nimport { useDeleteFlowRun } from \"@/api/flow-runs\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteFlowRunsDialog = () => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { mutateAsync } = useDeleteFlowRun();\n\n\tconst handleDeletes = async (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) => {\n\t\ttry {\n\t\t\tconst res = await Promise.allSettled(\n\t\t\t\tflowRunIds.map((id) => mutateAsync(id)),\n\t\t\t);\n\t\t\tconst { numFails, numSuccess } = res.reduce(\n\t\t\t\t(accumulator, currentValue) => {\n\t\t\t\t\tif (currentValue.status === \"rejected\") {\n\t\t\t\t\t\taccumulator.numFails += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taccumulator.numSuccess += 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn accumulator;\n\t\t\t\t},\n\t\t\t\t{ numFails: 0, numSuccess: 0 },\n\t\t\t);\n\t\t\tif (numFails > 1) {\n\t\t\t\ttoast.error(`${numFails} flow runs failed to delete`);\n\t\t\t} else if (numFails === 1) {\n\t\t\t\ttoast.error(\"Flow run failed to delete\");\n\t\t\t} else if (numSuccess > 1) {\n\t\t\t\ttoast.success(`${numSuccess} flow runs deleted`);\n\t\t\t} else {\n\t\t\t\ttoast.success(\"Flow run deleted\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Unknown error while deleting flow run.\", err);\n\t\t} finally {\n\t\t\tonConfirm();\n\t\t}\n\t};\n\n\tconst handleConfirmDelete = (\n\t\tflowRunIds: Array<string>,\n\t\tonConfirm = () => {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Flow Runs\",\n\t\t\tdescription: \"Are you sure you want to delete selected flow runs?\",\n\t\t\tonConfirm: () => {\n\t\t\t\tvoid handleDeletes(flowRunIds, onConfirm);\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import type { CheckedState } from \"@radix-ui/react-checkbox\";\nimport { useMemo } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { pluralize } from \"@/utils\";\nimport type { FlowRunCardData } from \"../flow-run-card\";\nimport { useDeleteFlowRunsDialog } from \"./use-delete-flow-runs-dialog\";\n\ntype CountOnlyProps = {\n\tcount: number | undefined;\n};\ntype SelectableProps = {\n\tcount: number | undefined;\n\tresults: Array<FlowRunCardData> | undefined;\n\tsetSelectedRows: (rows: Set<string>) => void;\n\tselectedRows: Set<string>;\n};\ntype FlowRunsRowCountProps = CountOnlyProps | SelectableProps;\n\nexport const FlowRunsRowCount = ({\n\tcount = 0,\n\t...props\n}: FlowRunsRowCountProps) => {\n\t// Selectable UX\n\tif (\n\t\t\"results\" in props &&\n\t\t\"setSelectedRows\" in props &&\n\t\t\"selectedRows\" in props\n\t) {\n\t\treturn <SelectedCount count={count} {...props} />;\n\t}\n\n\t// Count only UX\n\treturn (\n\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t</Typography>\n\t);\n};\n\nfunction SelectedCount({\n\tcount = 0,\n\tresults = [],\n\tsetSelectedRows,\n\tselectedRows,\n}: SelectableProps) {\n\tconst [deleteConfirmationDialogState, confirmDelete] =\n\t\tuseDeleteFlowRunsDialog();\n\n\tconst resultsIds = useMemo(() => results.map(({ id }) => id), [results]);\n\n\tconst selectedRowsList = Array.from(selectedRows);\n\n\tconst ToggleCheckbox = () => {\n\t\tconst isAllRowsSelected = resultsIds.every((id) => selectedRows.has(id));\n\t\tconst isSomeRowsSelected = resultsIds.some((id) => selectedRows.has(id));\n\t\tlet checkedState: CheckedState = false;\n\t\tif (isAllRowsSelected) {\n\t\t\tcheckedState = true;\n\t\t} else if (isSomeRowsSelected) {\n\t\t\tcheckedState = \"indeterminate\";\n\t\t}\n\t\treturn (\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"block\"\n\t\t\t\tchecked={checkedState}\n\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\tif (checked) {\n\t\t\t\t\t\tsetSelectedRows(new Set(resultsIds));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetSelectedRows(new Set());\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\taria-label=\"Toggle all\"\n\t\t\t/>\n\t\t);\n\t};\n\n\t// If has selected rows\n\tif (selectedRows.size > 0)\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<ToggleCheckbox />\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{selectedRowsList.length} selected\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Button\n\t\t\t\t\t\taria-label=\"Delete rows\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tconfirmDelete(selectedRowsList, () => setSelectedRows(new Set()));\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon id=\"Trash2\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t{results && setSelectedRows && selectedRows && (\n\t\t\t\t<Checkbox\n\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\tchecked={false}\n\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\tsetSelectedRows(new Set(checked ? resultsIds : undefined));\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"Toggle all\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t{count} {pluralize(count, \"Flow run\")}\n\t\t\t</Typography>\n\t\t</div>\n\t);\n}\n","import { useState } from \"react\";\n\nexport const useFlowRunsSelectedRows = (defaultValues?: Array<string>) => {\n\tconst [selectedRows, setSelectedRows] = useState<Set<string>>(\n\t\tnew Set(defaultValues),\n\t);\n\n\tconst addRow = (id: string) =>\n\t\tsetSelectedRows((curr) => new Set(curr).add(id));\n\n\tconst removeRow = (id: string) =>\n\t\tsetSelectedRows((curr) => {\n\t\t\tconst newValue = new Set(curr);\n\t\t\tnewValue.delete(id);\n\t\t\treturn newValue;\n\t\t});\n\n\tconst onSelectRow = (id: string, checked: boolean) => {\n\t\tif (checked) {\n\t\t\taddRow(id);\n\t\t} else {\n\t\t\tremoveRow(id);\n\t\t}\n\t};\n\n\tconst clearSet = () => setSelectedRows(new Set());\n\n\tconst utils = {\n\t\taddRow,\n\t\tremoveRow,\n\t\tonSelectRow,\n\t\tclearSet,\n\t};\n\n\treturn [selectedRows, setSelectedRows, utils] as const;\n};\n"],"names":["useDeleteFlowRunsDialog","dialogState","confirmDelete","useDeleteConfirmationDialog","mutateAsync","useDeleteFlowRun","handleDeletes","flowRunIds","onConfirm","res","id","numFails","numSuccess","accumulator","currentValue","toast","err","FlowRunsRowCount","count","props","jsx","SelectedCount","jsxs","Typography","pluralize","results","setSelectedRows","selectedRows","deleteConfirmationDialogState","resultsIds","useMemo","selectedRowsList","ToggleCheckbox","isAllRowsSelected","isSomeRowsSelected","checkedState","Checkbox","checked","Fragment","Button","Icon","DeleteConfirmationDialog","useFlowRunsSelectedRows","defaultValues","useState","addRow","curr","removeRow","newValue"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{s as _,t as l}from"./vendor-tanstack-BK8oseNA.js";import{
|
|
2
|
-
//# sourceMappingURL=use-get-artifacts-flow-task-runs-
|
|
1
|
+
import{s as _,t as l}from"./vendor-tanstack-BK8oseNA.js";import{bv as k,aN as c,du as R,dv as w}from"./index-D5RdrxkU.js";const y=a=>{const{data:t}=_(k(a)),u=t?.map(s=>s.flow_run_id).filter(s=>s!=null&&s!==void 0),o=t?.map(s=>s.task_run_id).filter(s=>s!=null&&s!==void 0),{flowRuns:r,taskRuns:i}=l({queries:[c({flow_runs:{operator:"and_",id:{any_:u}},sort:"ID_DESC",offset:0}),R({task_runs:{operator:"and_",id:{any_:o}},sort:"ID_DESC",offset:0})],combine:s=>{const[n,e]=s;return{flowRuns:n.data,taskRuns:e.data}}});return t?.map(s=>{const n=r?.find(d=>d.id===s.flow_run_id),e=i?.find(d=>d.id===s.task_run_id);return{...s,flow_run:n,task_run:e}})},D=a=>{const{data:t}=_(w(a)),u=t?.flow_run_id,o=t?.task_run_id,{flowRuns:r,taskRuns:i}=l({queries:[c({flow_runs:{operator:"and_",id:{any_:[u??""]}},sort:"ID_DESC",offset:0}),R({task_runs:{operator:"and_",id:{any_:[o??""]}},sort:"ID_DESC",offset:0})],combine:f=>{const[s,n]=f;return{flowRuns:s.data,taskRuns:n.data}}});return{...t,flow_run:r?.[0],task_run:i?.[0]}};export{D as a,y as u};
|
|
2
|
+
//# sourceMappingURL=use-get-artifacts-flow-task-runs-BEBpG_5J.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-get-artifacts-flow-task-runs-
|
|
1
|
+
{"version":3,"file":"use-get-artifacts-flow-task-runs-BEBpG_5J.js","sources":["../../src/api/artifacts/use-get-artifacts-flow-task-runs/use-get-artifacts-flow-task-runs.ts"],"sourcesContent":["import { useQueries, useQuery } from \"@tanstack/react-query\";\nimport { buildFilterFlowRunsQuery } from \"@/api/flow-runs\";\nimport { buildListTaskRunsQuery } from \"@/api/task-runs\";\nimport {\n\ttype ArtifactsFilter,\n\ttype ArtifactWithFlowRunAndTaskRun,\n\tbuildGetArtifactQuery,\n\tbuildListArtifactsQuery,\n} from \"..\";\n\nexport const useFilterArtifactsFlowTaskRuns = (filter: ArtifactsFilter) => {\n\tconst { data: artifacts } = useQuery(buildListArtifactsQuery(filter));\n\n\tconst flowRunIds = artifacts\n\t\t?.map((artifact) => artifact.flow_run_id)\n\t\t.filter((val) => val != null && val !== undefined);\n\tconst taskRunIds = artifacts\n\t\t?.map((artifact) => artifact.task_run_id)\n\t\t.filter((val) => val != null && val !== undefined);\n\n\tconst { flowRuns, taskRuns } = useQueries({\n\t\tqueries: [\n\t\t\tbuildFilterFlowRunsQuery({\n\t\t\t\tflow_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: flowRunIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t\tbuildListTaskRunsQuery({\n\t\t\t\ttask_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: taskRunIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t],\n\t\tcombine: (data) => {\n\t\t\tconst [flowRuns, taskRuns] = data;\n\t\t\treturn {\n\t\t\t\tflowRuns: flowRuns.data,\n\t\t\t\ttaskRuns: taskRuns.data,\n\t\t\t};\n\t\t},\n\t});\n\n\tconst artifactsWithMetadata = artifacts?.map((artifact) => {\n\t\tconst flowRun = flowRuns?.find(\n\t\t\t(flowRun) => flowRun.id === artifact.flow_run_id,\n\t\t);\n\t\tconst taskRun = taskRuns?.find(\n\t\t\t(taskRun) => taskRun.id === artifact.task_run_id,\n\t\t);\n\n\t\treturn {\n\t\t\t...artifact,\n\t\t\tflow_run: flowRun,\n\t\t\ttask_run: taskRun,\n\t\t};\n\t});\n\n\treturn artifactsWithMetadata as ArtifactWithFlowRunAndTaskRun[];\n};\n\nexport const useGetArtifactFlowTaskRuns = (artifactId: string) => {\n\tconst { data: artifact } = useQuery(buildGetArtifactQuery(artifactId));\n\n\tconst flowRunId = artifact?.flow_run_id;\n\tconst taskRunId = artifact?.task_run_id;\n\tconst { flowRuns, taskRuns } = useQueries({\n\t\tqueries: [\n\t\t\tbuildFilterFlowRunsQuery({\n\t\t\t\tflow_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: [flowRunId ?? \"\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t\tbuildListTaskRunsQuery({\n\t\t\t\ttask_runs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: [taskRunId ?? \"\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsort: \"ID_DESC\",\n\t\t\t\toffset: 0,\n\t\t\t}),\n\t\t],\n\t\tcombine: (data) => {\n\t\t\tconst [flowRuns, taskRuns] = data;\n\t\t\treturn {\n\t\t\t\tflowRuns: flowRuns.data,\n\t\t\t\ttaskRuns: taskRuns.data,\n\t\t\t};\n\t\t},\n\t});\n\n\treturn {\n\t\t...artifact,\n\t\tflow_run: flowRuns?.[0],\n\t\ttask_run: taskRuns?.[0],\n\t} as ArtifactWithFlowRunAndTaskRun;\n};\n"],"names":["useFilterArtifactsFlowTaskRuns","filter","artifacts","useQuery","buildListArtifactsQuery","flowRunIds","artifact","val","taskRunIds","flowRuns","taskRuns","useQueries","buildFilterFlowRunsQuery","buildListTaskRunsQuery","data","flowRun","taskRun","useGetArtifactFlowTaskRuns","artifactId","buildGetArtifactQuery","flowRunId","taskRunId"],"mappings":"0HAUO,MAAMA,EAAkCC,GAA4B,CAC1E,KAAM,CAAE,KAAMC,CAAA,EAAcC,EAASC,EAAwBH,CAAM,CAAC,EAE9DI,EAAaH,GAChB,IAAKI,GAAaA,EAAS,WAAW,EACvC,OAAQC,GAAQA,GAAO,MAAQA,IAAQ,MAAS,EAC5CC,EAAaN,GAChB,IAAKI,GAAaA,EAAS,WAAW,EACvC,OAAQC,GAAQA,GAAO,MAAQA,IAAQ,MAAS,EAE5C,CAAE,SAAAE,EAAU,SAAAC,CAAA,EAAaC,EAAW,CACzC,QAAS,CACRC,EAAyB,CACxB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAMP,CAAA,CACP,EAED,KAAM,UACN,OAAQ,CAAA,CACR,EACDQ,EAAuB,CACtB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAML,CAAA,CACP,EAED,KAAM,UACN,OAAQ,CAAA,CACR,CAAA,EAEF,QAAUM,GAAS,CAClB,KAAM,CAACL,EAAUC,CAAQ,EAAII,EAC7B,MAAO,CACN,SAAUL,EAAS,KACnB,SAAUC,EAAS,IAAA,CAErB,CAAA,CACA,EAiBD,OAf8BR,GAAW,IAAKI,GAAa,CAC1D,MAAMS,EAAUN,GAAU,KACxBM,GAAYA,EAAQ,KAAOT,EAAS,WAAA,EAEhCU,EAAUN,GAAU,KACxBM,GAAYA,EAAQ,KAAOV,EAAS,WAAA,EAGtC,MAAO,CACN,GAAGA,EACH,SAAUS,EACV,SAAUC,CAAA,CAEZ,CAAC,CAGF,EAEaC,EAA8BC,GAAuB,CACjE,KAAM,CAAE,KAAMZ,CAAA,EAAaH,EAASgB,EAAsBD,CAAU,CAAC,EAE/DE,EAAYd,GAAU,YACtBe,EAAYf,GAAU,YACtB,CAAE,SAAAG,EAAU,SAAAC,CAAA,EAAaC,EAAW,CACzC,QAAS,CACRC,EAAyB,CACxB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAM,CAACQ,GAAa,EAAE,CAAA,CACvB,EAED,KAAM,UACN,OAAQ,CAAA,CACR,EACDP,EAAuB,CACtB,UAAW,CACV,SAAU,OACV,GAAI,CACH,KAAM,CAACQ,GAAa,EAAE,CAAA,CACvB,EAED,KAAM,UACN,OAAQ,CAAA,CACR,CAAA,EAEF,QAAUP,GAAS,CAClB,KAAM,CAACL,EAAUC,CAAQ,EAAII,EAC7B,MAAO,CACN,SAAUL,EAAS,KACnB,SAAUC,EAAS,IAAA,CAErB,CAAA,CACA,EAED,MAAO,CACN,GAAGJ,EACH,SAAUG,IAAW,CAAC,EACtB,SAAUC,IAAW,CAAC,CAAA,CAExB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as d,j as n,L as m}from"./vendor-tanstack-BK8oseNA.js";import{
|
|
2
|
-
//# sourceMappingURL=use-quick-run-
|
|
1
|
+
import{u as d,j as n,L as m}from"./vendor-tanstack-BK8oseNA.js";import{cu as f,y as l,cQ as p,q as D}from"./index-D5RdrxkU.js";import{u as h}from"./use-delete-confirmation-dialog-CvQEyyhU.js";const C=()=>{const o=d(),[t,a]=h(),{deleteDeployment:r}=f();return[t,(s,{shouldNavigate:i=!1}={})=>a({title:"Delete Deployment",description:`Are you sure you want to delete ${s.name}? This action cannot be undone.`,onConfirm:()=>{r(s.id,{onSuccess:()=>{l.success("Deployment deleted"),i&&o({to:"/deployments"})},onError:c=>{const u=c.message||"Unknown error while deleting deployment.";console.error(u)}})}})]},g={state:{type:"SCHEDULED",message:"Run from the Prefect UI with defaults",state_details:{deferred:!1,untrackable_result:!1,pause_reschedule:!1}}},R=()=>{const{createDeploymentFlowRun:o,isPending:t}=p();return{onQuickRun:r=>{o({id:r,...g},{onSuccess:e=>{l.success("Flow run created",{action:n.jsx(m,{to:"/runs/flow-run/$id",params:{id:e.id},children:n.jsx(D,{size:"sm",children:"View run"})}),description:n.jsxs("p",{children:[n.jsx("span",{className:"font-bold",children:e.name})," scheduled to start"," ",n.jsx("span",{className:"font-bold",children:"now"})]})})},onError:e=>{const s=e.message||"Unknown error while creating flow run.";console.error(s)}})},isPending:t}};export{C as a,R as u};
|
|
2
|
+
//# sourceMappingURL=use-quick-run-BYBRcDwC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-quick-run-
|
|
1
|
+
{"version":3,"file":"use-quick-run-BYBRcDwC.js","sources":["../../src/components/deployments/use-delete-deployment-confirmation-dialog.ts","../../src/components/deployments/use-quick-run.tsx"],"sourcesContent":["import { useNavigate } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport { type Deployment, useDeleteDeployment } from \"@/api/deployments\";\nimport { useDeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\n\nexport const useDeleteDeploymentConfirmationDialog = () => {\n\tconst navigate = useNavigate();\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\n\tconst { deleteDeployment } = useDeleteDeployment();\n\n\tconst handleConfirmDelete = (\n\t\tdeployment: Deployment,\n\t\t{\n\t\t\tshouldNavigate = false,\n\t\t}: {\n\t\t\t/** Should navigate back to /deployments */\n\t\t\tshouldNavigate?: boolean;\n\t\t} = {},\n\t) =>\n\t\tconfirmDelete({\n\t\t\ttitle: \"Delete Deployment\",\n\t\t\tdescription: `Are you sure you want to delete ${deployment.name}? This action cannot be undone.`,\n\t\t\tonConfirm: () => {\n\t\t\t\tdeleteDeployment(deployment.id, {\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\ttoast.success(\"Deployment deleted\");\n\t\t\t\t\t\tif (shouldNavigate) {\n\t\t\t\t\t\t\tvoid navigate({ to: \"/deployments\" });\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\terror.message || \"Unknown error while deleting deployment.\";\n\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\n\treturn [dialogState, handleConfirmDelete] as const;\n};\n","import { Link } from \"@tanstack/react-router\";\nimport { toast } from \"sonner\";\nimport { useDeploymentCreateFlowRun } from \"@/api/flow-runs\";\nimport { Button } from \"@/components/ui/button\";\n\nconst DEPLOYMENT_QUICK_RUN_PAYLOAD = {\n\tstate: {\n\t\ttype: \"SCHEDULED\",\n\t\tmessage: \"Run from the Prefect UI with defaults\",\n\t\tstate_details: {\n\t\t\tdeferred: false,\n\t\t\tuntrackable_result: false,\n\t\t\tpause_reschedule: false,\n\t\t},\n\t},\n} as const;\n\n/**\n *\n * @returns a function that handles the mutation and UX when a deployment creates a quick run\n */\nexport const useQuickRun = () => {\n\tconst { createDeploymentFlowRun, isPending } = useDeploymentCreateFlowRun();\n\tconst onQuickRun = (id: string) => {\n\t\tcreateDeploymentFlowRun(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\t...DEPLOYMENT_QUICK_RUN_PAYLOAD,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: (res) => {\n\t\t\t\t\ttoast.success(\"Flow run created\", {\n\t\t\t\t\t\taction: (\n\t\t\t\t\t\t\t<Link to=\"/runs/flow-run/$id\" params={{ id: res.id }}>\n\t\t\t\t\t\t\t\t<Button size=\"sm\">View run</Button>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t),\n\t\t\t\t\t\tdescription: (\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<span className=\"font-bold\">{res.name}</span> scheduled to start{\" \"}\n\t\t\t\t\t\t\t\t<span className=\"font-bold\">now</span>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tconst message =\n\t\t\t\t\t\terror.message || \"Unknown error while creating flow run.\";\n\t\t\t\t\tconsole.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn { onQuickRun, isPending };\n};\n"],"names":["useDeleteDeploymentConfirmationDialog","navigate","useNavigate","dialogState","confirmDelete","useDeleteConfirmationDialog","deleteDeployment","useDeleteDeployment","deployment","shouldNavigate","toast","error","message","DEPLOYMENT_QUICK_RUN_PAYLOAD","useQuickRun","createDeploymentFlowRun","isPending","useDeploymentCreateFlowRun","id","res","jsx","Link","Button"],"mappings":"gMAKO,MAAMA,EAAwC,IAAM,CAC1D,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAaC,CAAa,EAAIC,EAAA,EAE/B,CAAE,iBAAAC,CAAA,EAAqBC,EAAA,EA+B7B,MAAO,CAACJ,EA7BoB,CAC3BK,EACA,CACC,eAAAC,EAAiB,EAAA,EAId,CAAA,IAEJL,EAAc,CACb,MAAO,oBACP,YAAa,mCAAmCI,EAAW,IAAI,kCAC/D,UAAW,IAAM,CAChBF,EAAiBE,EAAW,GAAI,CAC/B,UAAW,IAAM,CAChBE,EAAM,QAAQ,oBAAoB,EAC9BD,GACER,EAAS,CAAE,GAAI,eAAgB,CAEtC,EACA,QAAUU,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,2CAClB,QAAQ,MAAMC,CAAO,CACtB,CAAA,CACA,CACF,CAAA,CACA,CAEsC,CACzC,ECpCMC,EAA+B,CACpC,MAAO,CACN,KAAM,YACN,QAAS,wCACT,cAAe,CACd,SAAU,GACV,mBAAoB,GACpB,iBAAkB,EAAA,CACnB,CAEF,EAMaC,EAAc,IAAM,CAChC,KAAM,CAAE,wBAAAC,EAAyB,UAAAC,CAAA,EAAcC,EAAA,EAgC/C,MAAO,CAAE,WA/BWC,GAAe,CAClCH,EACC,CACC,GAAAG,EACA,GAAGL,CAAA,EAEJ,CACC,UAAYM,GAAQ,CACnBT,EAAM,QAAQ,mBAAoB,CACjC,OACCU,EAAAA,IAACC,EAAA,CAAK,GAAG,qBAAqB,OAAQ,CAAE,GAAIF,EAAI,EAAA,EAC/C,SAAAC,EAAAA,IAACE,EAAA,CAAO,KAAK,KAAK,oBAAQ,EAC3B,EAED,mBACE,IAAA,CACA,SAAA,CAAAF,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAa,SAAAD,EAAI,KAAK,EAAO,sBAAoB,IACjEC,EAAAA,IAAC,OAAA,CAAK,UAAU,YAAY,SAAA,KAAA,CAAG,CAAA,CAAA,CAChC,CAAA,CAED,CACF,EACA,QAAUT,GAAU,CACnB,MAAMC,EACLD,EAAM,SAAW,yCAClB,QAAQ,MAAMC,CAAO,CACtB,CAAA,CACD,CAEF,EAEqB,UAAAI,CAAA,CACtB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as d,r as x}from"./vendor-tanstack-BK8oseNA.js";import{C as j,
|
|
2
|
-
//# sourceMappingURL=use-stepper-
|
|
1
|
+
import{j as d,r as x}from"./vendor-tanstack-BK8oseNA.js";import{C as j,aW as f,I as C,al as y}from"./index-D5RdrxkU.js";const L=({currentStepNum:e,onClick:s,steps:r,completedSteps:t,visitedSteps:o})=>d.jsx(j,{className:"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto",children:r.map((n,a)=>{const p=e===a,m=o.has(a),u=t.has(a);return d.jsx(N,{disabled:!m,onClick:()=>s({stepName:n,stepNum:a}),number:a,isActive:p,isComplete:u,name:n},n)})}),N=({isActive:e=!1,isComplete:s=!1,disabled:r=!1,onClick:t=()=>{},number:o,name:n})=>{const a=o+1,p=a<10?`0${a}`:String(a);return d.jsxs("button",{type:"button",className:f("flex items-center gap-3 text-nowrap",r&&"cursor-not-allowed"),disabled:r,onClick:()=>t({number:o,name:n}),children:[s?d.jsx(C,{id:"CircleCheck",color:e?"teal":"grey",className:"size-12"}):d.jsx(v,{isActive:e,label:p}),d.jsx(y,{variant:"bodyLarge",className:f("text-gray-500 border-gray-500 whitespace-nowrap",e&&"text-teal-700 border-teal-700"),children:n})]})},v=({isActive:e=!1,label:s})=>d.jsx("div",{className:f("flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500",e&&"text-teal-700 border-teal-700"),children:d.jsx(y,{variant:"bodyLarge",className:f("text-gray-500 border-gray-500",e&&"text-teal-700 border-teal-700"),children:s})}),g=(e=new Set)=>{const[s,r]=x.useState(e),t=x.useMemo(()=>({add:c=>r(l=>new Set([...Array.from(l),c])),remove:c=>r(l=>new Set([...Array.from(l).filter(S=>S!==c)])),toggle:c=>r(l=>l.has(c)?new Set(Array.from(l).filter(S=>S!==c)):new Set([...Array.from(l),c])),clear:()=>r(new Set),reset:()=>r(e)}),[e]),o={has:x.useCallback(n=>s.has(n),[s]),...t};return[s,o]},V=(e,s=0,r)=>{const[t,o]=x.useState(s),[n,{add:a,reset:p}]=g(r??new Set([0])),[m,{add:u,reset:c}]=g(new Set),l=()=>{t<e-1&&(u(t),a(t+1),o(i=>i+1))},S=()=>{t>0&&o(i=>i-1)},b=i=>{o(i)},h=()=>{c(),p(),o(s)},w=t===e-1;return{changeStep:b,completedStepsSet:m,currentStep:t,decrementStep:S,incrementStep:l,isFinalStep:w,isStartingStep:t===0,reset:h,visitedStepsSet:n}};export{L as S,V as u};
|
|
2
|
+
//# sourceMappingURL=use-stepper-Bk97vOTm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-stepper-T3wAKNvM.js","sources":["../../src/components/ui/stepper/stepper.tsx","../../src/hooks/use-set.ts","../../src/hooks/use-stepper.ts"],"sourcesContent":["import { Card } from \"@/components/ui/card\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { cn } from \"@/utils\";\n\ntype StepperProps = {\n\tcurrentStepNum: number;\n\tsteps: Array<string> | ReadonlyArray<string>;\n\tonClick: ({\n\t\tstepName,\n\t\tstepNum,\n\t}: {\n\t\tstepName: string;\n\t\tstepNum: number;\n\t}) => void;\n\tcompletedSteps: Set<number>;\n\tvisitedSteps: Set<number>;\n};\nconst Stepper = ({\n\tcurrentStepNum,\n\tonClick,\n\tsteps,\n\tcompletedSteps,\n\tvisitedSteps,\n}: StepperProps) => {\n\treturn (\n\t\t<Card className=\"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto\">\n\t\t\t{steps.map((step, i) => {\n\t\t\t\tconst isCurrentStep = currentStepNum === i;\n\t\t\t\tconst isStepVisited = visitedSteps.has(i);\n\t\t\t\tconst isStepComplete = completedSteps.has(i);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Step\n\t\t\t\t\t\tkey={step}\n\t\t\t\t\t\tdisabled={!isStepVisited}\n\t\t\t\t\t\tonClick={() => onClick({ stepName: step, stepNum: i })}\n\t\t\t\t\t\tnumber={i}\n\t\t\t\t\t\tisActive={isCurrentStep}\n\t\t\t\t\t\tisComplete={isStepComplete}\n\t\t\t\t\t\tname={step}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Card>\n\t);\n};\n\ntype StepProps = {\n\tisActive?: boolean;\n\tisComplete?: boolean;\n\tdisabled?: boolean;\n\tnumber: number;\n\tname: string;\n\tonClick?: ({ number, name }: { number: number; name: string }) => void;\n};\n\nconst Step = ({\n\tisActive = false,\n\tisComplete = false,\n\tdisabled = false,\n\tonClick = () => {},\n\t/** Assume steps are indexed =0 */\n\tnumber,\n\tname,\n}: StepProps) => {\n\t// add 1 to number assuming index 0\n\tconst adjustedNumberDisplay = number + 1;\n\tconst numberLabel =\n\t\tadjustedNumberDisplay < 10\n\t\t\t? `0${adjustedNumberDisplay}`\n\t\t\t: String(adjustedNumberDisplay);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-3 text-nowrap\",\n\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t)}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={() => onClick({ number, name })}\n\t\t>\n\t\t\t{isComplete ? (\n\t\t\t\t<Icon\n\t\t\t\t\tid=\"CircleCheck\"\n\t\t\t\t\tcolor={isActive ? \"teal\" : \"grey\"}\n\t\t\t\t\tclassName=\"size-12\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<StepIcon isActive={isActive} label={numberLabel} />\n\t\t\t)}\n\t\t\t<Typography\n\t\t\t\tvariant=\"bodyLarge\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"text-gray-500 border-gray-500 whitespace-nowrap\",\n\t\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</Typography>\n\t\t</button>\n\t);\n};\n\ntype StepIconProps = {\n\tlabel: string;\n\tisActive?: boolean;\n};\nconst StepIcon = ({ isActive = false, label }: StepIconProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500\",\n\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t)}\n\t>\n\t\t<Typography\n\t\t\tvariant=\"bodyLarge\"\n\t\t\tclassName={cn(\n\t\t\t\t\"text-gray-500 border-gray-500\",\n\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t)}\n\t\t>\n\t\t\t{label}\n\t\t</Typography>\n\t</div>\n);\n\nexport { Step, Stepper };\n","import { useCallback, useMemo, useState } from \"react\";\n\ntype StableActions<K> = {\n\tadd: (key: K) => void;\n\tremove: (key: K) => void;\n\ttoggle: (key: K) => void;\n\treset: () => void;\n\tclear: () => void;\n};\n\ntype Actions<K> = StableActions<K> & {\n\thas: (key: K) => boolean;\n};\n\n/**\n * A hook that is used to declarative to keep state of a 'Set' type of data structure.\n * This is useful in cases where the UX needs to keep track of selected rows by id\n *\n * @param initialSet Initial state of a Set\n * @returns a Set object and utils as a tuple\n *\n * @example\n * ```tsx\n * function FlowCheckboxList() {\n * const [selectedIDs, { has, toggle }] = useSet<string>();\n *\n * return flows.map((flow) =>\n * \t\t<Checkbox\n * \t\t\tkey={flow.id}\n * \t\t\tchecked={has(flow.id)}\n * \t\t\tonCheck={() => toggle(flow.id)}\n * \t\t\tlabel={flow.name} />\n *\n * }\n * ```\n */\nexport const useSet = <K>(initialSet = new Set<K>()): [Set<K>, Actions<K>] => {\n\tconst [set, setSet] = useState(initialSet);\n\n\tconst stableActions = useMemo(() => {\n\t\tconst add = (item: K) =>\n\t\t\tsetSet((curr) => new Set([...Array.from(curr), item]));\n\t\tconst remove = (item: K) =>\n\t\t\tsetSet(\n\t\t\t\t(curr) => new Set([...Array.from(curr).filter((i) => i !== item)]),\n\t\t\t);\n\t\tconst toggle = (item: K) =>\n\t\t\tsetSet((curr) =>\n\t\t\t\tcurr.has(item)\n\t\t\t\t\t? new Set(Array.from(curr).filter((i) => i !== item))\n\t\t\t\t\t: new Set([...Array.from(curr), item]),\n\t\t\t);\n\t\tconst reset = () => setSet(initialSet);\n\t\tconst clear = () => setSet(new Set());\n\n\t\treturn { add, remove, toggle, clear, reset };\n\t}, [initialSet]);\n\n\tconst utils = {\n\t\thas: useCallback((item) => set.has(item), [set]),\n\t\t...stableActions,\n\t} as Actions<K>;\n\n\treturn [set, utils];\n};\n","import { useState } from \"react\";\nimport { useSet } from \"./use-set\";\n/**\n *\n * @param steps\n * @param startingStep\n * @returns state with declarative utilities to increment, decrement, or skip to a current state\n *\n * @example\n * ```ts\n * const STEPS = ['Trigger', 'Actions', 'Details'] as const\n *\n * const stepper = useStepper(STEPS.length);\n *\n * return (\n * <div>\n * <h2>Current Step: {STEPS[stepper.currentStep]}</h2>\n * <ul>\n * {STEPS.map((step, i) => (\n * \t\t\t<li key={i} onClick={() => stepper.setStep(i)}>{step}</li>\n * \t\t)}\n * </ul>\n * <div>\n * <Button disabled={stepper.isStartingStep} onClick={stepper.decrementStep()}>Previous</Button>\n * <Button onClick={stepper.incrementStep()}>{stepper.isFinalStep ? 'Save' : 'Next'}</Button>\n * </div>\n * </div>\n * )\n * ```\n */\nexport const useStepper = (\n\tnumSteps: number,\n\tstartingStep = 0,\n\tinitialVisitedSteps?: Set<number>,\n) => {\n\tconst [currentStep, setCurrentStep] = useState(startingStep);\n\tconst [visitedStepsSet, { add: addVisitedStep, reset: resetVisitedSteps }] =\n\t\tuseSet(initialVisitedSteps ?? new Set<number>([0]));\n\tconst [\n\t\tcompletedStepsSet,\n\t\t{ add: addCompletedStep, reset: resetCompletedSteps },\n\t] = useSet(new Set<number>());\n\n\tconst incrementStep = () => {\n\t\tif (currentStep < numSteps - 1) {\n\t\t\t// Marks step as visited\n\t\t\taddCompletedStep(currentStep);\n\t\t\taddVisitedStep(currentStep + 1);\n\t\t\tsetCurrentStep((curr) => curr + 1);\n\t\t}\n\t};\n\n\tconst decrementStep = () => {\n\t\tif (currentStep > 0) {\n\t\t\tsetCurrentStep((curr) => curr - 1);\n\t\t}\n\t};\n\n\tconst changeStep = (stepNum: number) => {\n\t\tsetCurrentStep(stepNum);\n\t};\n\n\tconst reset = () => {\n\t\tresetCompletedSteps();\n\t\tresetVisitedSteps();\n\t\tsetCurrentStep(startingStep);\n\t};\n\n\tconst isFinalStep = currentStep === numSteps - 1;\n\tconst isStartingStep = currentStep === 0;\n\n\treturn {\n\t\tchangeStep,\n\t\tcompletedStepsSet,\n\t\tcurrentStep,\n\t\tdecrementStep,\n\t\tincrementStep,\n\t\tisFinalStep,\n\t\tisStartingStep,\n\t\treset,\n\t\tvisitedStepsSet,\n\t};\n};\n"],"names":["Stepper","currentStepNum","onClick","steps","completedSteps","visitedSteps","jsx","Card","step","i","isCurrentStep","isStepVisited","isStepComplete","Step","isActive","isComplete","disabled","number","name","adjustedNumberDisplay","numberLabel","jsxs","cn","Icon","StepIcon","Typography","label","useSet","initialSet","set","setSet","useState","stableActions","useMemo","item","curr","utils","useCallback","useStepper","numSteps","startingStep","initialVisitedSteps","currentStep","setCurrentStep","visitedStepsSet","addVisitedStep","resetVisitedSteps","completedStepsSet","addCompletedStep","resetCompletedSteps","incrementStep","decrementStep","changeStep","stepNum","reset","isFinalStep"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-stepper-Bk97vOTm.js","sources":["../../src/components/ui/stepper/stepper.tsx","../../src/hooks/use-set.ts","../../src/hooks/use-stepper.ts"],"sourcesContent":["import { Card } from \"@/components/ui/card\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { cn } from \"@/utils\";\n\ntype StepperProps = {\n\tcurrentStepNum: number;\n\tsteps: Array<string> | ReadonlyArray<string>;\n\tonClick: ({\n\t\tstepName,\n\t\tstepNum,\n\t}: {\n\t\tstepName: string;\n\t\tstepNum: number;\n\t}) => void;\n\tcompletedSteps: Set<number>;\n\tvisitedSteps: Set<number>;\n};\nconst Stepper = ({\n\tcurrentStepNum,\n\tonClick,\n\tsteps,\n\tcompletedSteps,\n\tvisitedSteps,\n}: StepperProps) => {\n\treturn (\n\t\t<Card className=\"p-4 flex flex-row items-center justify-around gap-4 overflow-x-auto\">\n\t\t\t{steps.map((step, i) => {\n\t\t\t\tconst isCurrentStep = currentStepNum === i;\n\t\t\t\tconst isStepVisited = visitedSteps.has(i);\n\t\t\t\tconst isStepComplete = completedSteps.has(i);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Step\n\t\t\t\t\t\tkey={step}\n\t\t\t\t\t\tdisabled={!isStepVisited}\n\t\t\t\t\t\tonClick={() => onClick({ stepName: step, stepNum: i })}\n\t\t\t\t\t\tnumber={i}\n\t\t\t\t\t\tisActive={isCurrentStep}\n\t\t\t\t\t\tisComplete={isStepComplete}\n\t\t\t\t\t\tname={step}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Card>\n\t);\n};\n\ntype StepProps = {\n\tisActive?: boolean;\n\tisComplete?: boolean;\n\tdisabled?: boolean;\n\tnumber: number;\n\tname: string;\n\tonClick?: ({ number, name }: { number: number; name: string }) => void;\n};\n\nconst Step = ({\n\tisActive = false,\n\tisComplete = false,\n\tdisabled = false,\n\tonClick = () => {},\n\t/** Assume steps are indexed =0 */\n\tnumber,\n\tname,\n}: StepProps) => {\n\t// add 1 to number assuming index 0\n\tconst adjustedNumberDisplay = number + 1;\n\tconst numberLabel =\n\t\tadjustedNumberDisplay < 10\n\t\t\t? `0${adjustedNumberDisplay}`\n\t\t\t: String(adjustedNumberDisplay);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-3 text-nowrap\",\n\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t)}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={() => onClick({ number, name })}\n\t\t>\n\t\t\t{isComplete ? (\n\t\t\t\t<Icon\n\t\t\t\t\tid=\"CircleCheck\"\n\t\t\t\t\tcolor={isActive ? \"teal\" : \"grey\"}\n\t\t\t\t\tclassName=\"size-12\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<StepIcon isActive={isActive} label={numberLabel} />\n\t\t\t)}\n\t\t\t<Typography\n\t\t\t\tvariant=\"bodyLarge\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"text-gray-500 border-gray-500 whitespace-nowrap\",\n\t\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</Typography>\n\t\t</button>\n\t);\n};\n\ntype StepIconProps = {\n\tlabel: string;\n\tisActive?: boolean;\n};\nconst StepIcon = ({ isActive = false, label }: StepIconProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center size-12 rounded-full border-4 text-gray-500 border-gray-500\",\n\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t)}\n\t>\n\t\t<Typography\n\t\t\tvariant=\"bodyLarge\"\n\t\t\tclassName={cn(\n\t\t\t\t\"text-gray-500 border-gray-500\",\n\t\t\t\tisActive && \"text-teal-700 border-teal-700\",\n\t\t\t)}\n\t\t>\n\t\t\t{label}\n\t\t</Typography>\n\t</div>\n);\n\nexport { Step, Stepper };\n","import { useCallback, useMemo, useState } from \"react\";\n\ntype StableActions<K> = {\n\tadd: (key: K) => void;\n\tremove: (key: K) => void;\n\ttoggle: (key: K) => void;\n\treset: () => void;\n\tclear: () => void;\n};\n\ntype Actions<K> = StableActions<K> & {\n\thas: (key: K) => boolean;\n};\n\n/**\n * A hook that is used to declarative to keep state of a 'Set' type of data structure.\n * This is useful in cases where the UX needs to keep track of selected rows by id\n *\n * @param initialSet Initial state of a Set\n * @returns a Set object and utils as a tuple\n *\n * @example\n * ```tsx\n * function FlowCheckboxList() {\n * const [selectedIDs, { has, toggle }] = useSet<string>();\n *\n * return flows.map((flow) =>\n * \t\t<Checkbox\n * \t\t\tkey={flow.id}\n * \t\t\tchecked={has(flow.id)}\n * \t\t\tonCheck={() => toggle(flow.id)}\n * \t\t\tlabel={flow.name} />\n *\n * }\n * ```\n */\nexport const useSet = <K>(initialSet = new Set<K>()): [Set<K>, Actions<K>] => {\n\tconst [set, setSet] = useState(initialSet);\n\n\tconst stableActions = useMemo(() => {\n\t\tconst add = (item: K) =>\n\t\t\tsetSet((curr) => new Set([...Array.from(curr), item]));\n\t\tconst remove = (item: K) =>\n\t\t\tsetSet(\n\t\t\t\t(curr) => new Set([...Array.from(curr).filter((i) => i !== item)]),\n\t\t\t);\n\t\tconst toggle = (item: K) =>\n\t\t\tsetSet((curr) =>\n\t\t\t\tcurr.has(item)\n\t\t\t\t\t? new Set(Array.from(curr).filter((i) => i !== item))\n\t\t\t\t\t: new Set([...Array.from(curr), item]),\n\t\t\t);\n\t\tconst reset = () => setSet(initialSet);\n\t\tconst clear = () => setSet(new Set());\n\n\t\treturn { add, remove, toggle, clear, reset };\n\t}, [initialSet]);\n\n\tconst utils = {\n\t\thas: useCallback((item) => set.has(item), [set]),\n\t\t...stableActions,\n\t} as Actions<K>;\n\n\treturn [set, utils];\n};\n","import { useState } from \"react\";\nimport { useSet } from \"./use-set\";\n/**\n *\n * @param steps\n * @param startingStep\n * @returns state with declarative utilities to increment, decrement, or skip to a current state\n *\n * @example\n * ```ts\n * const STEPS = ['Trigger', 'Actions', 'Details'] as const\n *\n * const stepper = useStepper(STEPS.length);\n *\n * return (\n * <div>\n * <h2>Current Step: {STEPS[stepper.currentStep]}</h2>\n * <ul>\n * {STEPS.map((step, i) => (\n * \t\t\t<li key={i} onClick={() => stepper.setStep(i)}>{step}</li>\n * \t\t)}\n * </ul>\n * <div>\n * <Button disabled={stepper.isStartingStep} onClick={stepper.decrementStep()}>Previous</Button>\n * <Button onClick={stepper.incrementStep()}>{stepper.isFinalStep ? 'Save' : 'Next'}</Button>\n * </div>\n * </div>\n * )\n * ```\n */\nexport const useStepper = (\n\tnumSteps: number,\n\tstartingStep = 0,\n\tinitialVisitedSteps?: Set<number>,\n) => {\n\tconst [currentStep, setCurrentStep] = useState(startingStep);\n\tconst [visitedStepsSet, { add: addVisitedStep, reset: resetVisitedSteps }] =\n\t\tuseSet(initialVisitedSteps ?? new Set<number>([0]));\n\tconst [\n\t\tcompletedStepsSet,\n\t\t{ add: addCompletedStep, reset: resetCompletedSteps },\n\t] = useSet(new Set<number>());\n\n\tconst incrementStep = () => {\n\t\tif (currentStep < numSteps - 1) {\n\t\t\t// Marks step as visited\n\t\t\taddCompletedStep(currentStep);\n\t\t\taddVisitedStep(currentStep + 1);\n\t\t\tsetCurrentStep((curr) => curr + 1);\n\t\t}\n\t};\n\n\tconst decrementStep = () => {\n\t\tif (currentStep > 0) {\n\t\t\tsetCurrentStep((curr) => curr - 1);\n\t\t}\n\t};\n\n\tconst changeStep = (stepNum: number) => {\n\t\tsetCurrentStep(stepNum);\n\t};\n\n\tconst reset = () => {\n\t\tresetCompletedSteps();\n\t\tresetVisitedSteps();\n\t\tsetCurrentStep(startingStep);\n\t};\n\n\tconst isFinalStep = currentStep === numSteps - 1;\n\tconst isStartingStep = currentStep === 0;\n\n\treturn {\n\t\tchangeStep,\n\t\tcompletedStepsSet,\n\t\tcurrentStep,\n\t\tdecrementStep,\n\t\tincrementStep,\n\t\tisFinalStep,\n\t\tisStartingStep,\n\t\treset,\n\t\tvisitedStepsSet,\n\t};\n};\n"],"names":["Stepper","currentStepNum","onClick","steps","completedSteps","visitedSteps","jsx","Card","step","i","isCurrentStep","isStepVisited","isStepComplete","Step","isActive","isComplete","disabled","number","name","adjustedNumberDisplay","numberLabel","jsxs","cn","Icon","StepIcon","Typography","label","useSet","initialSet","set","setSet","useState","stableActions","useMemo","item","curr","utils","useCallback","useStepper","numSteps","startingStep","initialVisitedSteps","currentStep","setCurrentStep","visitedStepsSet","addVisitedStep","resetVisitedSteps","completedStepsSet","addCompletedStep","resetCompletedSteps","incrementStep","decrementStep","changeStep","stepNum","reset","isFinalStep"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as r,L as R,p as a,r as
|
|
2
|
-
//# sourceMappingURL=utilities-
|
|
1
|
+
import{j as r,L as R,p as a,r as d}from"./vendor-tanstack-BK8oseNA.js";import{L as b,aW as l,d3 as g,d4 as T,d5 as N,d6 as D,b_ as W,ao as L,cg as P,c9 as Q,an as E,I as $,b5 as w,f as S}from"./index-D5RdrxkU.js";function X({value:e,className:t,hideLineNumbers:o=!0,copy:s=!0,...n}){return r.jsx(b,{value:e,disabled:!0,hideLineNumbers:o,copy:s,className:l("bg-muted/50",t),...n})}const C={"flow-run":"Play","task-run":"Cog",deployment:"Rocket",flow:"Workflow","work-pool":"Server","work-queue":"ListOrdered",automation:"Zap","block-document":"Box","concurrency-limit":"Gauge",unknown:"Circle"},q={"flow-run":"Flow run","task-run":"Task run",flow:"Flow",deployment:"Deployment","work-pool":"Work pool","work-queue":"Work queue",automation:"Automation","block-document":"Block document","concurrency-limit":"Concurrency limit",unknown:"Resource"};function k(e){return!e||typeof e!="string"?"unknown":e.startsWith("prefect.flow-run.")?"flow-run":e.startsWith("prefect.task-run.")?"task-run":e.startsWith("prefect.deployment.")?"deployment":e.startsWith("prefect.flow.")?"flow":e.startsWith("prefect.work-pool.")?"work-pool":e.startsWith("prefect.work-queue.")?"work-queue":e.startsWith("prefect.automation.")?"automation":e.startsWith("prefect.block-document.")?"block-document":e.startsWith("prefect.concurrency-limit.")?"concurrency-limit":"unknown"}function x(e){if(!e||typeof e!="string")return null;const t=e.split(".");return t.length<3?null:t.slice(2).join(".")}function m(e){return e["prefect.resource.name"]||e["prefect.name"]||e["prefect-cloud.name"]||null}function v(e){for(const t of e){const o=t["prefect.resource.id"]||"";if(k(o)==="work-pool")return t}return null}function G(e,t=[]){const o=e["prefect.resource.id"]||"",s=k(o),n=x(o);if(!n)return null;switch(s){case"flow-run":return{to:"/runs/flow-run/$id",params:{id:n}};case"task-run":return{to:"/runs/task-run/$id",params:{id:n}};case"deployment":return{to:"/deployments/deployment/$id",params:{id:n}};case"flow":return{to:"/flows/flow/$id",params:{id:n}};case"work-pool":return{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:m(e)||n}};case"automation":return{to:"/automations/automation/$id",params:{id:n}};case"block-document":return{to:"/blocks/block/$id",params:{id:n}};case"concurrency-limit":return{to:"/concurrency-limits/concurrency-limit/$id",params:{id:n}};case"work-queue":{const c=m(e);if(!c)return null;const p=v(t);if(!p)return null;const j=p["prefect.resource.id"]||"",h=x(j),y=m(p)||h;return y?{to:"/work-pools/work-pool/$workPoolName/queue/$workQueueName",params:{workPoolName:y,workQueueName:c}}:null}default:return null}}function i({resource:e,relatedResources:t=[],children:o,className:s}){const n=G(e,t);return n?r.jsx(R,{to:n.to,params:n.params,className:s,children:o}):r.jsx("span",{className:s,children:o})}function F({resourceId:e,className:t}){const{data:o}=a(E(e));return r.jsx(u,{resourceType:"flow-run",displayText:o.name??e,className:t})}function B({resourceId:e,className:t}){const{data:o}=a(Q(e));return r.jsx(u,{resourceType:"task-run",displayText:o.name??e,className:t})}function _({resourceId:e,className:t}){const{data:o}=a(P(e));return r.jsx(u,{resourceType:"deployment",displayText:o.name,className:t})}function A({resourceId:e,className:t}){const{data:o}=a(L(e));return r.jsx(u,{resourceType:"flow",displayText:o.name,className:t})}function O({resourceId:e,className:t}){const{data:o}=a(W(e));return r.jsx(u,{resourceType:"work-pool",displayText:o.name,className:t})}function J({resourceId:e,className:t}){const{data:o}=a(D(e));return r.jsx(u,{resourceType:"work-queue",displayText:o.name,className:t})}function U({resourceId:e,className:t}){const{data:o}=a(N(e));return r.jsx(u,{resourceType:"automation",displayText:o.name,className:t})}function z({resourceId:e,className:t}){const{data:o}=a(T(e));return r.jsx(u,{resourceType:"block-document",displayText:o.name??e,className:t})}function V({resourceId:e,className:t}){const{data:o}=a(g(e));return r.jsx(u,{resourceType:"concurrency-limit",displayText:o.tag??e,className:t})}function Y({resourceType:e,resourceId:t,className:o}){switch(e){case"flow-run":return r.jsx(F,{resourceId:t,className:o});case"task-run":return r.jsx(B,{resourceId:t,className:o});case"deployment":return r.jsx(_,{resourceId:t,className:o});case"flow":return r.jsx(A,{resourceId:t,className:o});case"work-pool":return r.jsx(O,{resourceId:t,className:o});case"work-queue":return r.jsx(J,{resourceId:t,className:o});case"automation":return r.jsx(U,{resourceId:t,className:o});case"block-document":return r.jsx(z,{resourceId:t,className:o});case"concurrency-limit":return r.jsx(V,{resourceId:t,className:o});default:return null}}function Z(e){return e["prefect.resource.name"]||e["prefect.name"]||e["prefect-cloud.name"]||null}function H(e){return e["prefect.resource.id"]||""}function u({resourceType:e,displayText:t,className:o}){const s=C[e],n=q[e];return r.jsxs("div",{className:l("flex items-center gap-2",o),children:[n&&r.jsx("span",{children:n}),r.jsx($,{id:s,className:"h-4 w-4 text-muted-foreground"}),r.jsx("span",{children:t})]})}function f(){return r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(w,{className:"h-4 w-4 rounded-full"}),r.jsx(w,{className:"h-4 w-24"})]})}function I({event:e,className:t}){const o=Z(e.resource),s=H(e.resource),n=k(s),c=x(s);return o?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(u,{resourceType:n,displayText:o,className:"text-sm"})})})]}):c&&n!=="unknown"?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(Y,{resourceType:n,resourceId:c,className:"text-sm"})})})]}):c?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(d.Suspense,{fallback:r.jsx(f,{}),children:r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx(u,{resourceType:n,displayText:c,className:"text-sm text-muted-foreground font-mono"})})})]}):s?r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx(i,{resource:e.resource,relatedResources:e.related??[],className:"hover:underline",children:r.jsx("div",{className:"text-sm text-muted-foreground",children:r.jsx("span",{className:"font-mono text-xs",children:s})})})]}):r.jsxs("div",{className:l("flex flex-col gap-0.5",t),children:[r.jsx("span",{className:"text-sm font-medium",children:"Resource"}),r.jsx("div",{className:"text-sm text-muted-foreground",children:r.jsx("span",{className:"text-muted-foreground",children:"Unknown"})})]})}function ee(e){const t=[],o=e.split(".");for(let s=1;s<o.length;s++){const n=o.slice(0,s).join(".");t.push(`${n}.*`)}return[...t,e]}function te(e){let t=e;return t.startsWith("prefect.")?t=t.slice(8):t.startsWith("prefect-cloud.")&&(t=t.slice(14)),t.split(/[._-]/).map(o=>S(o.toLowerCase())).join(" ")}export{I as E,X as J,C as R,i as a,q as b,te as f,ee as g,k as p};
|
|
2
|
+
//# sourceMappingURL=utilities-BQwGFLk5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities-B2JMf8iI.js","sources":["../../src/components/ui/json-view.tsx","../../src/components/events/event-resource-display/resource-types.ts","../../src/components/events/event-resource-display/resource-routes.ts","../../src/components/events/event-resource-display/event-resource-link.tsx","../../src/components/events/event-resource-display/resource-displays.tsx","../../src/components/events/event-resource-display/resolved-resource-display.tsx","../../src/components/events/event-resource-display/event-resource-display.tsx","../../src/components/events/events-timeline/utilities.ts"],"sourcesContent":["import type * as React from \"react\";\nimport { cn } from \"@/utils\";\nimport { LazyJsonInput as JsonInput } from \"./json-input-lazy\";\n\ntype JsonViewProps = Omit<\n\tReact.ComponentProps<typeof JsonInput>,\n\t\"onChange\" | \"onBlur\" | \"disabled\"\n> & {\n\tvalue?: string;\n\tclassName?: string;\n\thideLineNumbers?: boolean;\n\tcopy?: boolean;\n};\n\nexport function JsonView({\n\tvalue,\n\tclassName,\n\thideLineNumbers = true,\n\tcopy = true,\n\t...props\n}: JsonViewProps) {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={value}\n\t\t\tdisabled={true}\n\t\t\thideLineNumbers={hideLineNumbers}\n\t\t\tcopy={copy}\n\t\t\tclassName={cn(\"bg-muted/50\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import type { IconId } from \"@/components/ui/icons\";\n\nexport type ResourceType =\n\t| \"flow-run\"\n\t| \"task-run\"\n\t| \"deployment\"\n\t| \"flow\"\n\t| \"work-pool\"\n\t| \"work-queue\"\n\t| \"automation\"\n\t| \"block-document\"\n\t| \"concurrency-limit\"\n\t| \"unknown\";\n\nexport const RESOURCE_ICONS: Record<ResourceType, IconId> = {\n\t\"flow-run\": \"Play\",\n\t\"task-run\": \"Cog\",\n\tdeployment: \"Rocket\",\n\tflow: \"Workflow\",\n\t\"work-pool\": \"Server\",\n\t\"work-queue\": \"ListOrdered\",\n\tautomation: \"Zap\",\n\t\"block-document\": \"Box\",\n\t\"concurrency-limit\": \"Gauge\",\n\tunknown: \"Circle\",\n};\n\nexport const RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\t\"flow-run\": \"Flow run\",\n\t\"task-run\": \"Task run\",\n\tflow: \"Flow\",\n\tdeployment: \"Deployment\",\n\t\"work-pool\": \"Work pool\",\n\t\"work-queue\": \"Work queue\",\n\tautomation: \"Automation\",\n\t\"block-document\": \"Block document\",\n\t\"concurrency-limit\": \"Concurrency limit\",\n\tunknown: \"Resource\",\n};\n\n/**\n * Parses a Prefect resource ID to determine its type.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param resourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The parsed ResourceType, or \"unknown\" if the format is unrecognized\n */\nexport function parseResourceType(resourceId: string): ResourceType {\n\tif (!resourceId || typeof resourceId !== \"string\") {\n\t\treturn \"unknown\";\n\t}\n\n\tif (resourceId.startsWith(\"prefect.flow-run.\")) {\n\t\treturn \"flow-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.task-run.\")) {\n\t\treturn \"task-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.deployment.\")) {\n\t\treturn \"deployment\";\n\t}\n\tif (resourceId.startsWith(\"prefect.flow.\")) {\n\t\treturn \"flow\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-pool.\")) {\n\t\treturn \"work-pool\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-queue.\")) {\n\t\treturn \"work-queue\";\n\t}\n\tif (resourceId.startsWith(\"prefect.automation.\")) {\n\t\treturn \"automation\";\n\t}\n\tif (resourceId.startsWith(\"prefect.block-document.\")) {\n\t\treturn \"block-document\";\n\t}\n\tif (resourceId.startsWith(\"prefect.concurrency-limit.\")) {\n\t\treturn \"concurrency-limit\";\n\t}\n\n\treturn \"unknown\";\n}\n\n/**\n * Extracts the resource identifier from a Prefect resource ID.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param prefectResourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The extracted ID portion (e.g., \"abc-123\"), or null if the format is invalid\n */\nexport function extractResourceId(prefectResourceId: string): string | null {\n\tif (!prefectResourceId || typeof prefectResourceId !== \"string\") {\n\t\treturn null;\n\t}\n\n\tconst parts = prefectResourceId.split(\".\");\n\tif (parts.length < 3) {\n\t\treturn null;\n\t}\n\n\t// Join parts after index 1 (skip \"prefect\" and resource type)\n\treturn parts.slice(2).join(\".\");\n}\n","import type { components } from \"@/api/prefect\";\nimport { extractResourceId, parseResourceType } from \"./resource-types\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\nexport type ResourceRouteConfig = {\n\tto: string;\n\tparams: Record<string, string>;\n};\n\nfunction getResourceName(resource: RelatedResource): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction findWorkPoolInRelated(\n\trelatedResources: RelatedResource[],\n): RelatedResource | null {\n\tfor (const resource of relatedResources) {\n\t\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\t\tconst resourceType = parseResourceType(resourceId);\n\t\tif (resourceType === \"work-pool\") {\n\t\t\treturn resource;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getResourceRoute(\n\tresource: RelatedResource,\n\trelatedResources: RelatedResource[] = [],\n): ResourceRouteConfig | null {\n\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\tconst resourceType = parseResourceType(resourceId);\n\tconst extractedId = extractResourceId(resourceId);\n\n\tif (!extractedId) {\n\t\treturn null;\n\t}\n\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"task-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/task-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"deployment\":\n\t\t\treturn {\n\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"flow\":\n\t\t\treturn {\n\t\t\t\tto: \"/flows/flow/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-pool\": {\n\t\t\t// Work pools use name instead of id in the route\n\t\t\tconst workPoolName = getResourceName(resource) || extractedId;\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName\",\n\t\t\t\tparams: { workPoolName },\n\t\t\t};\n\t\t}\n\t\tcase \"automation\":\n\t\t\treturn {\n\t\t\t\tto: \"/automations/automation/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"block-document\":\n\t\t\treturn {\n\t\t\t\tto: \"/blocks/block/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"concurrency-limit\":\n\t\t\treturn {\n\t\t\t\tto: \"/concurrency-limits/concurrency-limit/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-queue\": {\n\t\t\t// Work queues require both work pool name and queue name\n\t\t\t// Try to find the work pool in related resources\n\t\t\tconst workQueueName = getResourceName(resource);\n\t\t\tif (!workQueueName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPool = findWorkPoolInRelated(relatedResources);\n\t\t\tif (!workPool) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPoolId = workPool[\"prefect.resource.id\"] || \"\";\n\t\t\tconst workPoolExtractedId = extractResourceId(workPoolId);\n\t\t\tconst workPoolName = getResourceName(workPool) || workPoolExtractedId;\n\t\t\tif (!workPoolName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName/queue/$workQueueName\",\n\t\t\t\tparams: { workPoolName, workQueueName },\n\t\t\t};\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Link } from \"@tanstack/react-router\";\nimport type { components } from \"@/api/prefect\";\nimport { getResourceRoute } from \"./resource-routes\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\ntype EventResourceLinkProps = {\n\tresource: RelatedResource;\n\trelatedResources?: RelatedResource[];\n\tchildren: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function EventResourceLink({\n\tresource,\n\trelatedResources = [],\n\tchildren,\n\tclassName,\n}: EventResourceLinkProps) {\n\tconst routeConfig = getResourceRoute(resource, relatedResources);\n\n\tif (!routeConfig) {\n\t\treturn <span className={className}>{children}</span>;\n\t}\n\n\treturn (\n\t\t<Link to={routeConfig.to} params={routeConfig.params} className={className}>\n\t\t\t{children}\n\t\t</Link>\n\t);\n}\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { buildGetAutomationQuery } from \"@/api/automations\";\nimport { buildGetBlockDocumentQuery } from \"@/api/block-documents\";\nimport { buildDeploymentDetailsQuery } from \"@/api/deployments\";\nimport { buildGetFlowRunDetailsQuery } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery } from \"@/api/flows\";\nimport { buildGetConcurrencyLimitQuery } from \"@/api/task-run-concurrency-limits\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { buildGetWorkPoolQuery } from \"@/api/work-pools\";\nimport { buildGetWorkQueueQuery } from \"@/api/work-queues\";\nimport { ResourceDisplayWithIcon } from \"./event-resource-display\";\n\ntype ResourceDisplayProps = {\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function FlowRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow-run\"\n\t\t\tdisplayText={flowRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function TaskRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: taskRun } = useSuspenseQuery(\n\t\tbuildGetTaskRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"task-run\"\n\t\t\tdisplayText={taskRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function DeploymentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: deployment } = useSuspenseQuery(\n\t\tbuildDeploymentDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"deployment\"\n\t\t\tdisplayText={deployment.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function FlowResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flow } = useSuspenseQuery(buildFLowDetailsQuery(resourceId));\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow\"\n\t\t\tdisplayText={flow.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkPoolResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workPool } = useSuspenseQuery(\n\t\tbuildGetWorkPoolQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-pool\"\n\t\t\tdisplayText={workPool.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkQueueResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workQueue } = useSuspenseQuery(\n\t\tbuildGetWorkQueueQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-queue\"\n\t\t\tdisplayText={workQueue.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function AutomationResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: automation } = useSuspenseQuery(\n\t\tbuildGetAutomationQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"automation\"\n\t\t\tdisplayText={automation.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function BlockDocumentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: blockDocument } = useSuspenseQuery(\n\t\tbuildGetBlockDocumentQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"block-document\"\n\t\t\tdisplayText={blockDocument.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function ConcurrencyLimitResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: concurrencyLimit } = useSuspenseQuery(\n\t\tbuildGetConcurrencyLimitQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"concurrency-limit\"\n\t\t\tdisplayText={concurrencyLimit.tag ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n","import {\n\tAutomationResourceDisplay,\n\tBlockDocumentResourceDisplay,\n\tConcurrencyLimitResourceDisplay,\n\tDeploymentResourceDisplay,\n\tFlowResourceDisplay,\n\tFlowRunResourceDisplay,\n\tTaskRunResourceDisplay,\n\tWorkPoolResourceDisplay,\n\tWorkQueueResourceDisplay,\n} from \"./resource-displays\";\nimport type { ResourceType } from \"./resource-types\";\n\ntype ResolvedResourceDisplayProps = {\n\tresourceType: Exclude<ResourceType, \"unknown\">;\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function ResolvedResourceDisplay({\n\tresourceType,\n\tresourceId,\n\tclassName,\n}: ResolvedResourceDisplayProps) {\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn (\n\t\t\t\t<FlowRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"task-run\":\n\t\t\treturn (\n\t\t\t\t<TaskRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"deployment\":\n\t\t\treturn (\n\t\t\t\t<DeploymentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"flow\":\n\t\t\treturn (\n\t\t\t\t<FlowResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"work-pool\":\n\t\t\treturn (\n\t\t\t\t<WorkPoolResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"work-queue\":\n\t\t\treturn (\n\t\t\t\t<WorkQueueResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"automation\":\n\t\t\treturn (\n\t\t\t\t<AutomationResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"block-document\":\n\t\t\treturn (\n\t\t\t\t<BlockDocumentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"concurrency-limit\":\n\t\t\treturn (\n\t\t\t\t<ConcurrencyLimitResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Suspense } from \"react\";\nimport type { Event } from \"@/api/events\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/utils\";\nimport { EventResourceLink } from \"./event-resource-link\";\nimport { ResolvedResourceDisplay } from \"./resolved-resource-display\";\nimport {\n\textractResourceId,\n\tparseResourceType,\n\tRESOURCE_ICONS,\n\tRESOURCE_TYPE_LABELS,\n\ttype ResourceType,\n} from \"./resource-types\";\n\nexport type EventResourceDisplayProps = {\n\tevent: Event;\n\tclassName?: string;\n};\n\nfunction getResourceName(resource: Record<string, string>): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction getResourceId(resource: Record<string, string>): string {\n\treturn resource[\"prefect.resource.id\"] || \"\";\n}\n\ntype ResourceDisplayWithIconProps = {\n\tresourceType: ResourceType;\n\tdisplayText: string;\n\tclassName?: string;\n};\n\nexport function ResourceDisplayWithIcon({\n\tresourceType,\n\tdisplayText,\n\tclassName,\n}: ResourceDisplayWithIconProps) {\n\tconst iconId = RESOURCE_ICONS[resourceType];\n\tconst typeLabel = RESOURCE_TYPE_LABELS[resourceType];\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-2\", className)}>\n\t\t\t{typeLabel && <span>{typeLabel}</span>}\n\t\t\t<Icon id={iconId} className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t<span>{displayText}</span>\n\t\t</div>\n\t);\n}\n\nexport function ResourceDisplaySkeleton() {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Skeleton className=\"h-4 w-4 rounded-full\" />\n\t\t\t<Skeleton className=\"h-4 w-24\" />\n\t\t</div>\n\t);\n}\n\nexport function EventResourceDisplay({\n\tevent,\n\tclassName,\n}: EventResourceDisplayProps) {\n\tconst resourceName = getResourceName(event.resource);\n\tconst prefectResourceId = getResourceId(event.resource);\n\tconst resourceType = parseResourceType(prefectResourceId);\n\tconst extractedId = extractResourceId(prefectResourceId);\n\n\t// If we have a resource name, display it with the appropriate icon\n\tif (resourceName) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={resourceName}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but no name, try to fetch the resource name via API\n\tif (extractedId && resourceType !== \"unknown\") {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResolvedResourceDisplay\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tresourceId={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but unknown type, show the ID with the icon\n\tif (extractedId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm text-muted-foreground font-mono\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Fallback: show the raw resource ID if nothing else is available\n\tif (prefectResourceId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<EventResourceLink\n\t\t\t\t\tresource={event.resource}\n\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t<span className=\"font-mono text-xs\">{prefectResourceId}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</EventResourceLink>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// No resource information available\n\treturn (\n\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t<span className=\"text-muted-foreground\">Unknown</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { capitalize } from \"@/utils\";\n\n/**\n * Get event prefixes for filtering.\n * For example, \"prefect.flow-run.Completed\" returns:\n * [\"prefect.*\", \"prefect.flow-run.*\", \"prefect.flow-run.Completed\"]\n */\nexport function getEventPrefixes(eventName: string): string[] {\n\tconst prefixes: string[] = [];\n\tconst parts = eventName.split(\".\");\n\n\tfor (let i = 1; i < parts.length; i++) {\n\t\tconst prefix = parts.slice(0, i).join(\".\");\n\t\tprefixes.push(`${prefix}.*`);\n\t}\n\n\treturn [...prefixes, eventName];\n}\n\n/**\n * Format event label from event name.\n * For example, \"prefect.flow-run.Completed\" becomes \"Flow Run Completed\"\n */\nexport function formatEventLabel(eventName: string): string {\n\t// Remove prefect. or prefect-cloud. prefix\n\tlet label = eventName;\n\tif (label.startsWith(\"prefect.\")) {\n\t\tlabel = label.slice(8);\n\t} else if (label.startsWith(\"prefect-cloud.\")) {\n\t\tlabel = label.slice(14);\n\t}\n\n\t// Replace dashes and dots with spaces, then capitalize each word\n\treturn label\n\t\t.split(/[._-]/)\n\t\t.map((word) => capitalize(word.toLowerCase()))\n\t\t.join(\" \");\n}\n"],"names":["JsonView","value","className","hideLineNumbers","copy","props","jsx","JsonInput","cn","RESOURCE_ICONS","RESOURCE_TYPE_LABELS","parseResourceType","resourceId","extractResourceId","prefectResourceId","parts","getResourceName","resource","findWorkPoolInRelated","relatedResources","getResourceRoute","resourceType","extractedId","workQueueName","workPool","workPoolId","workPoolExtractedId","workPoolName","EventResourceLink","children","routeConfig","Link","FlowRunResourceDisplay","flowRun","useSuspenseQuery","buildGetFlowRunDetailsQuery","ResourceDisplayWithIcon","TaskRunResourceDisplay","taskRun","buildGetTaskRunDetailsQuery","DeploymentResourceDisplay","deployment","buildDeploymentDetailsQuery","FlowResourceDisplay","flow","buildFLowDetailsQuery","WorkPoolResourceDisplay","buildGetWorkPoolQuery","WorkQueueResourceDisplay","workQueue","buildGetWorkQueueQuery","AutomationResourceDisplay","automation","buildGetAutomationQuery","BlockDocumentResourceDisplay","blockDocument","buildGetBlockDocumentQuery","ConcurrencyLimitResourceDisplay","concurrencyLimit","buildGetConcurrencyLimitQuery","ResolvedResourceDisplay","getResourceId","displayText","iconId","typeLabel","Icon","ResourceDisplaySkeleton","jsxs","Skeleton","EventResourceDisplay","event","resourceName","Suspense","getEventPrefixes","eventName","prefixes","i","prefix","formatEventLabel","label","word","capitalize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities-BQwGFLk5.js","sources":["../../src/components/ui/json-view.tsx","../../src/components/events/event-resource-display/resource-types.ts","../../src/components/events/event-resource-display/resource-routes.ts","../../src/components/events/event-resource-display/event-resource-link.tsx","../../src/components/events/event-resource-display/resource-displays.tsx","../../src/components/events/event-resource-display/resolved-resource-display.tsx","../../src/components/events/event-resource-display/event-resource-display.tsx","../../src/components/events/events-timeline/utilities.ts"],"sourcesContent":["import type * as React from \"react\";\nimport { cn } from \"@/utils\";\nimport { LazyJsonInput as JsonInput } from \"./json-input-lazy\";\n\ntype JsonViewProps = Omit<\n\tReact.ComponentProps<typeof JsonInput>,\n\t\"onChange\" | \"onBlur\" | \"disabled\"\n> & {\n\tvalue?: string;\n\tclassName?: string;\n\thideLineNumbers?: boolean;\n\tcopy?: boolean;\n};\n\nexport function JsonView({\n\tvalue,\n\tclassName,\n\thideLineNumbers = true,\n\tcopy = true,\n\t...props\n}: JsonViewProps) {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={value}\n\t\t\tdisabled={true}\n\t\t\thideLineNumbers={hideLineNumbers}\n\t\t\tcopy={copy}\n\t\t\tclassName={cn(\"bg-muted/50\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","import type { IconId } from \"@/components/ui/icons\";\n\nexport type ResourceType =\n\t| \"flow-run\"\n\t| \"task-run\"\n\t| \"deployment\"\n\t| \"flow\"\n\t| \"work-pool\"\n\t| \"work-queue\"\n\t| \"automation\"\n\t| \"block-document\"\n\t| \"concurrency-limit\"\n\t| \"unknown\";\n\nexport const RESOURCE_ICONS: Record<ResourceType, IconId> = {\n\t\"flow-run\": \"Play\",\n\t\"task-run\": \"Cog\",\n\tdeployment: \"Rocket\",\n\tflow: \"Workflow\",\n\t\"work-pool\": \"Server\",\n\t\"work-queue\": \"ListOrdered\",\n\tautomation: \"Zap\",\n\t\"block-document\": \"Box\",\n\t\"concurrency-limit\": \"Gauge\",\n\tunknown: \"Circle\",\n};\n\nexport const RESOURCE_TYPE_LABELS: Record<ResourceType, string> = {\n\t\"flow-run\": \"Flow run\",\n\t\"task-run\": \"Task run\",\n\tflow: \"Flow\",\n\tdeployment: \"Deployment\",\n\t\"work-pool\": \"Work pool\",\n\t\"work-queue\": \"Work queue\",\n\tautomation: \"Automation\",\n\t\"block-document\": \"Block document\",\n\t\"concurrency-limit\": \"Concurrency limit\",\n\tunknown: \"Resource\",\n};\n\n/**\n * Parses a Prefect resource ID to determine its type.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param resourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The parsed ResourceType, or \"unknown\" if the format is unrecognized\n */\nexport function parseResourceType(resourceId: string): ResourceType {\n\tif (!resourceId || typeof resourceId !== \"string\") {\n\t\treturn \"unknown\";\n\t}\n\n\tif (resourceId.startsWith(\"prefect.flow-run.\")) {\n\t\treturn \"flow-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.task-run.\")) {\n\t\treturn \"task-run\";\n\t}\n\tif (resourceId.startsWith(\"prefect.deployment.\")) {\n\t\treturn \"deployment\";\n\t}\n\tif (resourceId.startsWith(\"prefect.flow.\")) {\n\t\treturn \"flow\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-pool.\")) {\n\t\treturn \"work-pool\";\n\t}\n\tif (resourceId.startsWith(\"prefect.work-queue.\")) {\n\t\treturn \"work-queue\";\n\t}\n\tif (resourceId.startsWith(\"prefect.automation.\")) {\n\t\treturn \"automation\";\n\t}\n\tif (resourceId.startsWith(\"prefect.block-document.\")) {\n\t\treturn \"block-document\";\n\t}\n\tif (resourceId.startsWith(\"prefect.concurrency-limit.\")) {\n\t\treturn \"concurrency-limit\";\n\t}\n\n\treturn \"unknown\";\n}\n\n/**\n * Extracts the resource identifier from a Prefect resource ID.\n * Resource IDs follow the format: prefect.{resource-type}.{uuid}\n *\n * @param prefectResourceId - The full resource ID string (e.g., \"prefect.flow-run.abc-123\")\n * @returns The extracted ID portion (e.g., \"abc-123\"), or null if the format is invalid\n */\nexport function extractResourceId(prefectResourceId: string): string | null {\n\tif (!prefectResourceId || typeof prefectResourceId !== \"string\") {\n\t\treturn null;\n\t}\n\n\tconst parts = prefectResourceId.split(\".\");\n\tif (parts.length < 3) {\n\t\treturn null;\n\t}\n\n\t// Join parts after index 1 (skip \"prefect\" and resource type)\n\treturn parts.slice(2).join(\".\");\n}\n","import type { components } from \"@/api/prefect\";\nimport { extractResourceId, parseResourceType } from \"./resource-types\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\nexport type ResourceRouteConfig = {\n\tto: string;\n\tparams: Record<string, string>;\n};\n\nfunction getResourceName(resource: RelatedResource): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction findWorkPoolInRelated(\n\trelatedResources: RelatedResource[],\n): RelatedResource | null {\n\tfor (const resource of relatedResources) {\n\t\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\t\tconst resourceType = parseResourceType(resourceId);\n\t\tif (resourceType === \"work-pool\") {\n\t\t\treturn resource;\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getResourceRoute(\n\tresource: RelatedResource,\n\trelatedResources: RelatedResource[] = [],\n): ResourceRouteConfig | null {\n\tconst resourceId = resource[\"prefect.resource.id\"] || \"\";\n\tconst resourceType = parseResourceType(resourceId);\n\tconst extractedId = extractResourceId(resourceId);\n\n\tif (!extractedId) {\n\t\treturn null;\n\t}\n\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"task-run\":\n\t\t\treturn {\n\t\t\t\tto: \"/runs/task-run/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"deployment\":\n\t\t\treturn {\n\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"flow\":\n\t\t\treturn {\n\t\t\t\tto: \"/flows/flow/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-pool\": {\n\t\t\t// Work pools use name instead of id in the route\n\t\t\tconst workPoolName = getResourceName(resource) || extractedId;\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName\",\n\t\t\t\tparams: { workPoolName },\n\t\t\t};\n\t\t}\n\t\tcase \"automation\":\n\t\t\treturn {\n\t\t\t\tto: \"/automations/automation/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"block-document\":\n\t\t\treturn {\n\t\t\t\tto: \"/blocks/block/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"concurrency-limit\":\n\t\t\treturn {\n\t\t\t\tto: \"/concurrency-limits/concurrency-limit/$id\",\n\t\t\t\tparams: { id: extractedId },\n\t\t\t};\n\t\tcase \"work-queue\": {\n\t\t\t// Work queues require both work pool name and queue name\n\t\t\t// Try to find the work pool in related resources\n\t\t\tconst workQueueName = getResourceName(resource);\n\t\t\tif (!workQueueName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPool = findWorkPoolInRelated(relatedResources);\n\t\t\tif (!workPool) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst workPoolId = workPool[\"prefect.resource.id\"] || \"\";\n\t\t\tconst workPoolExtractedId = extractResourceId(workPoolId);\n\t\t\tconst workPoolName = getResourceName(workPool) || workPoolExtractedId;\n\t\t\tif (!workPoolName) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tto: \"/work-pools/work-pool/$workPoolName/queue/$workQueueName\",\n\t\t\t\tparams: { workPoolName, workQueueName },\n\t\t\t};\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Link } from \"@tanstack/react-router\";\nimport type { components } from \"@/api/prefect\";\nimport { getResourceRoute } from \"./resource-routes\";\n\ntype RelatedResource = components[\"schemas\"][\"RelatedResource\"];\n\ntype EventResourceLinkProps = {\n\tresource: RelatedResource;\n\trelatedResources?: RelatedResource[];\n\tchildren: React.ReactNode;\n\tclassName?: string;\n};\n\nexport function EventResourceLink({\n\tresource,\n\trelatedResources = [],\n\tchildren,\n\tclassName,\n}: EventResourceLinkProps) {\n\tconst routeConfig = getResourceRoute(resource, relatedResources);\n\n\tif (!routeConfig) {\n\t\treturn <span className={className}>{children}</span>;\n\t}\n\n\treturn (\n\t\t<Link to={routeConfig.to} params={routeConfig.params} className={className}>\n\t\t\t{children}\n\t\t</Link>\n\t);\n}\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { buildGetAutomationQuery } from \"@/api/automations\";\nimport { buildGetBlockDocumentQuery } from \"@/api/block-documents\";\nimport { buildDeploymentDetailsQuery } from \"@/api/deployments\";\nimport { buildGetFlowRunDetailsQuery } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery } from \"@/api/flows\";\nimport { buildGetConcurrencyLimitQuery } from \"@/api/task-run-concurrency-limits\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { buildGetWorkPoolQuery } from \"@/api/work-pools\";\nimport { buildGetWorkQueueQuery } from \"@/api/work-queues\";\nimport { ResourceDisplayWithIcon } from \"./event-resource-display\";\n\ntype ResourceDisplayProps = {\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function FlowRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow-run\"\n\t\t\tdisplayText={flowRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function TaskRunResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: taskRun } = useSuspenseQuery(\n\t\tbuildGetTaskRunDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"task-run\"\n\t\t\tdisplayText={taskRun.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function DeploymentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: deployment } = useSuspenseQuery(\n\t\tbuildDeploymentDetailsQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"deployment\"\n\t\t\tdisplayText={deployment.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function FlowResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: flow } = useSuspenseQuery(buildFLowDetailsQuery(resourceId));\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"flow\"\n\t\t\tdisplayText={flow.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkPoolResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workPool } = useSuspenseQuery(\n\t\tbuildGetWorkPoolQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-pool\"\n\t\t\tdisplayText={workPool.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function WorkQueueResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: workQueue } = useSuspenseQuery(\n\t\tbuildGetWorkQueueQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"work-queue\"\n\t\t\tdisplayText={workQueue.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function AutomationResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: automation } = useSuspenseQuery(\n\t\tbuildGetAutomationQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"automation\"\n\t\t\tdisplayText={automation.name}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function BlockDocumentResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: blockDocument } = useSuspenseQuery(\n\t\tbuildGetBlockDocumentQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"block-document\"\n\t\t\tdisplayText={blockDocument.name ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n\nexport function ConcurrencyLimitResourceDisplay({\n\tresourceId,\n\tclassName,\n}: ResourceDisplayProps) {\n\tconst { data: concurrencyLimit } = useSuspenseQuery(\n\t\tbuildGetConcurrencyLimitQuery(resourceId),\n\t);\n\treturn (\n\t\t<ResourceDisplayWithIcon\n\t\t\tresourceType=\"concurrency-limit\"\n\t\t\tdisplayText={concurrencyLimit.tag ?? resourceId}\n\t\t\tclassName={className}\n\t\t/>\n\t);\n}\n","import {\n\tAutomationResourceDisplay,\n\tBlockDocumentResourceDisplay,\n\tConcurrencyLimitResourceDisplay,\n\tDeploymentResourceDisplay,\n\tFlowResourceDisplay,\n\tFlowRunResourceDisplay,\n\tTaskRunResourceDisplay,\n\tWorkPoolResourceDisplay,\n\tWorkQueueResourceDisplay,\n} from \"./resource-displays\";\nimport type { ResourceType } from \"./resource-types\";\n\ntype ResolvedResourceDisplayProps = {\n\tresourceType: Exclude<ResourceType, \"unknown\">;\n\tresourceId: string;\n\tclassName?: string;\n};\n\nexport function ResolvedResourceDisplay({\n\tresourceType,\n\tresourceId,\n\tclassName,\n}: ResolvedResourceDisplayProps) {\n\tswitch (resourceType) {\n\t\tcase \"flow-run\":\n\t\t\treturn (\n\t\t\t\t<FlowRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"task-run\":\n\t\t\treturn (\n\t\t\t\t<TaskRunResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"deployment\":\n\t\t\treturn (\n\t\t\t\t<DeploymentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"flow\":\n\t\t\treturn (\n\t\t\t\t<FlowResourceDisplay resourceId={resourceId} className={className} />\n\t\t\t);\n\t\tcase \"work-pool\":\n\t\t\treturn (\n\t\t\t\t<WorkPoolResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"work-queue\":\n\t\t\treturn (\n\t\t\t\t<WorkQueueResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"automation\":\n\t\t\treturn (\n\t\t\t\t<AutomationResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"block-document\":\n\t\t\treturn (\n\t\t\t\t<BlockDocumentResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase \"concurrency-limit\":\n\t\t\treturn (\n\t\t\t\t<ConcurrencyLimitResourceDisplay\n\t\t\t\t\tresourceId={resourceId}\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n","import { Suspense } from \"react\";\nimport type { Event } from \"@/api/events\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/utils\";\nimport { EventResourceLink } from \"./event-resource-link\";\nimport { ResolvedResourceDisplay } from \"./resolved-resource-display\";\nimport {\n\textractResourceId,\n\tparseResourceType,\n\tRESOURCE_ICONS,\n\tRESOURCE_TYPE_LABELS,\n\ttype ResourceType,\n} from \"./resource-types\";\n\nexport type EventResourceDisplayProps = {\n\tevent: Event;\n\tclassName?: string;\n};\n\nfunction getResourceName(resource: Record<string, string>): string | null {\n\treturn (\n\t\tresource[\"prefect.resource.name\"] ||\n\t\tresource[\"prefect.name\"] ||\n\t\tresource[\"prefect-cloud.name\"] ||\n\t\tnull\n\t);\n}\n\nfunction getResourceId(resource: Record<string, string>): string {\n\treturn resource[\"prefect.resource.id\"] || \"\";\n}\n\ntype ResourceDisplayWithIconProps = {\n\tresourceType: ResourceType;\n\tdisplayText: string;\n\tclassName?: string;\n};\n\nexport function ResourceDisplayWithIcon({\n\tresourceType,\n\tdisplayText,\n\tclassName,\n}: ResourceDisplayWithIconProps) {\n\tconst iconId = RESOURCE_ICONS[resourceType];\n\tconst typeLabel = RESOURCE_TYPE_LABELS[resourceType];\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-2\", className)}>\n\t\t\t{typeLabel && <span>{typeLabel}</span>}\n\t\t\t<Icon id={iconId} className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t<span>{displayText}</span>\n\t\t</div>\n\t);\n}\n\nexport function ResourceDisplaySkeleton() {\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<Skeleton className=\"h-4 w-4 rounded-full\" />\n\t\t\t<Skeleton className=\"h-4 w-24\" />\n\t\t</div>\n\t);\n}\n\nexport function EventResourceDisplay({\n\tevent,\n\tclassName,\n}: EventResourceDisplayProps) {\n\tconst resourceName = getResourceName(event.resource);\n\tconst prefectResourceId = getResourceId(event.resource);\n\tconst resourceType = parseResourceType(prefectResourceId);\n\tconst extractedId = extractResourceId(prefectResourceId);\n\n\t// If we have a resource name, display it with the appropriate icon\n\tif (resourceName) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={resourceName}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but no name, try to fetch the resource name via API\n\tif (extractedId && resourceType !== \"unknown\") {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResolvedResourceDisplay\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tresourceId={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// If we have an extracted ID but unknown type, show the ID with the icon\n\tif (extractedId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<Suspense fallback={<ResourceDisplaySkeleton />}>\n\t\t\t\t\t<EventResourceLink\n\t\t\t\t\t\tresource={event.resource}\n\t\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ResourceDisplayWithIcon\n\t\t\t\t\t\t\tresourceType={resourceType}\n\t\t\t\t\t\t\tdisplayText={extractedId}\n\t\t\t\t\t\t\tclassName=\"text-sm text-muted-foreground font-mono\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</EventResourceLink>\n\t\t\t\t</Suspense>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Fallback: show the raw resource ID if nothing else is available\n\tif (prefectResourceId) {\n\t\treturn (\n\t\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t\t<EventResourceLink\n\t\t\t\t\tresource={event.resource}\n\t\t\t\t\trelatedResources={event.related ?? []}\n\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t<span className=\"font-mono text-xs\">{prefectResourceId}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</EventResourceLink>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// No resource information available\n\treturn (\n\t\t<div className={cn(\"flex flex-col gap-0.5\", className)}>\n\t\t\t<span className=\"text-sm font-medium\">Resource</span>\n\t\t\t<div className=\"text-sm text-muted-foreground\">\n\t\t\t\t<span className=\"text-muted-foreground\">Unknown</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { capitalize } from \"@/utils\";\n\n/**\n * Get event prefixes for filtering.\n * For example, \"prefect.flow-run.Completed\" returns:\n * [\"prefect.*\", \"prefect.flow-run.*\", \"prefect.flow-run.Completed\"]\n */\nexport function getEventPrefixes(eventName: string): string[] {\n\tconst prefixes: string[] = [];\n\tconst parts = eventName.split(\".\");\n\n\tfor (let i = 1; i < parts.length; i++) {\n\t\tconst prefix = parts.slice(0, i).join(\".\");\n\t\tprefixes.push(`${prefix}.*`);\n\t}\n\n\treturn [...prefixes, eventName];\n}\n\n/**\n * Format event label from event name.\n * For example, \"prefect.flow-run.Completed\" becomes \"Flow Run Completed\"\n */\nexport function formatEventLabel(eventName: string): string {\n\t// Remove prefect. or prefect-cloud. prefix\n\tlet label = eventName;\n\tif (label.startsWith(\"prefect.\")) {\n\t\tlabel = label.slice(8);\n\t} else if (label.startsWith(\"prefect-cloud.\")) {\n\t\tlabel = label.slice(14);\n\t}\n\n\t// Replace dashes and dots with spaces, then capitalize each word\n\treturn label\n\t\t.split(/[._-]/)\n\t\t.map((word) => capitalize(word.toLowerCase()))\n\t\t.join(\" \");\n}\n"],"names":["JsonView","value","className","hideLineNumbers","copy","props","jsx","JsonInput","cn","RESOURCE_ICONS","RESOURCE_TYPE_LABELS","parseResourceType","resourceId","extractResourceId","prefectResourceId","parts","getResourceName","resource","findWorkPoolInRelated","relatedResources","getResourceRoute","resourceType","extractedId","workQueueName","workPool","workPoolId","workPoolExtractedId","workPoolName","EventResourceLink","children","routeConfig","Link","FlowRunResourceDisplay","flowRun","useSuspenseQuery","buildGetFlowRunDetailsQuery","ResourceDisplayWithIcon","TaskRunResourceDisplay","taskRun","buildGetTaskRunDetailsQuery","DeploymentResourceDisplay","deployment","buildDeploymentDetailsQuery","FlowResourceDisplay","flow","buildFLowDetailsQuery","WorkPoolResourceDisplay","buildGetWorkPoolQuery","WorkQueueResourceDisplay","workQueue","buildGetWorkQueueQuery","AutomationResourceDisplay","automation","buildGetAutomationQuery","BlockDocumentResourceDisplay","blockDocument","buildGetBlockDocumentQuery","ConcurrencyLimitResourceDisplay","concurrencyLimit","buildGetConcurrencyLimitQuery","ResolvedResourceDisplay","getResourceId","displayText","iconId","typeLabel","Icon","ResourceDisplaySkeleton","jsxs","Skeleton","EventResourceDisplay","event","resourceName","Suspense","getEventPrefixes","eventName","prefixes","i","prefix","formatEventLabel","label","word","capitalize"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as o,s as S,j as e}from"./vendor-tanstack-BK8oseNA.js";import{
|
|
2
|
-
//# sourceMappingURL=work-pool-filter-
|
|
1
|
+
import{r as o,s as S,j as e}from"./vendor-tanstack-BK8oseNA.js";import{cP as C,ac as A,ad as w,ae as N,af as g,ag as y,ah as k,ai as z,aj as h,ak as x,al as E,M as L}from"./index-D5RdrxkU.js";const _=2,D=({selectedDeployments:s,onSelectDeployments:t})=>{const[i,u]=o.useState(""),n=o.useDeferredValue(i),{data:c=[]}=S(C({deployments:n?{operator:"and_",name:{like_:n}}:void 0,limit:100,offset:0,sort:"NAME_ASC"})),{data:f=[]}=S(C({deployments:s.size>0?{operator:"and_",id:{any_:Array.from(s)}}:void 0,limit:s.size||1,offset:0,sort:"NAME_ASC"},{enabled:s.size>0})),j=a=>{const r=new Set(s);s.has(a)?r.delete(a):r.add(a),t(r)},b=()=>{t(new Set)},p=()=>{if(s.size===0)return"All deployments";const a=f.filter(d=>s.has(d.id)).map(d=>d.name),r=a.slice(0,_),m=a.length-_;return e.jsxs("div",{className:"flex flex-1 min-w-0 items-center gap-2",children:[e.jsx("div",{className:"flex flex-1 min-w-0 items-center gap-2 overflow-hidden",children:e.jsx("span",{className:"truncate",children:r.join(", ")})}),m>0&&e.jsxs(E,{variant:"bodySmall",className:"shrink-0",children:["+ ",m]})]})},l=o.useMemo(()=>c.filter(a=>!n||a.name.toLowerCase().includes(n.toLowerCase())),[c,n]);return e.jsxs(A,{children:[e.jsx(w,{"aria-label":"Filter by deployment",selected:s.size===0,children:p()}),e.jsxs(N,{children:[e.jsx(g,{value:i,onValueChange:u,placeholder:"Search deployments..."}),e.jsxs(y,{children:[e.jsx(k,{children:"No deployments found"}),e.jsxs(z,{children:[e.jsxs(h,{"aria-label":"All deployments",onSelect:b,closeOnSelect:!1,value:"__all__",children:[e.jsx(x,{checked:s.size===0}),"All deployments"]}),l.map(a=>e.jsxs(h,{"aria-label":a.name,onSelect:()=>j(a.id),closeOnSelect:!1,value:a.id,children:[e.jsx(x,{checked:s.has(a.id)}),a.name]},a.id))]})]})]})]})},v=2,F=({selectedWorkPools:s,onSelectWorkPools:t})=>{const[i,u]=o.useState(""),n=o.useDeferredValue(i),{data:c=[]}=S(L({limit:100,offset:0})),f=l=>{const a=new Set(s);s.has(l)?a.delete(l):a.add(l),t(a)},j=()=>{t(new Set)},b=()=>{if(s.size===0)return"All work pools";const l=Array.from(s).sort((m,d)=>m.localeCompare(d)),a=l.slice(0,v),r=l.length-v;return e.jsxs("div",{className:"flex flex-1 min-w-0 items-center gap-2",children:[e.jsx("div",{className:"flex flex-1 min-w-0 items-center gap-2 overflow-hidden",children:e.jsx("span",{className:"truncate",children:a.join(", ")})}),r>0&&e.jsxs(E,{variant:"bodySmall",className:"shrink-0",children:["+ ",r]})]})},p=o.useMemo(()=>c.filter(l=>!n||l.name.toLowerCase().includes(n.toLowerCase())).sort((l,a)=>l.name.localeCompare(a.name)),[c,n]);return e.jsxs(A,{children:[e.jsx(w,{"aria-label":"Filter by work pool",selected:s.size===0,children:b()}),e.jsxs(N,{children:[e.jsx(g,{value:i,onValueChange:u,placeholder:"Search work pools..."}),e.jsxs(y,{children:[e.jsx(k,{children:"No work pools found"}),e.jsxs(z,{children:[e.jsxs(h,{"aria-label":"All work pools",onSelect:j,closeOnSelect:!1,value:"__all__",children:[e.jsx(x,{checked:s.size===0}),"All work pools"]}),p.map(l=>e.jsxs(h,{"aria-label":l.name,onSelect:()=>f(l.name),closeOnSelect:!1,value:l.name,children:[e.jsx(x,{checked:s.has(l.name)}),l.name]},l.name))]})]})]})]})};export{D,F as W};
|
|
2
|
+
//# sourceMappingURL=work-pool-filter-Ddhp_M-L.js.map
|
prefect/server/ui-v2/assets/{work-pool-filter-CZz0AJlt.js.map → work-pool-filter-Ddhp_M-L.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-pool-filter-CZz0AJlt.js","sources":["../../src/components/flow-runs/flow-runs-list/flow-runs-filters/deployment-filter.tsx","../../src/components/flow-runs/flow-runs-list/flow-runs-filters/work-pool-filter.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\tbuildFilterDeploymentsQuery,\n\ttype Deployment,\n} from \"@/api/deployments\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport { Typography } from \"@/components/ui/typography\";\n\nconst MAX_DEPLOYMENTS_DISPLAYED = 2;\n\ntype DeploymentFilterProps = {\n\tselectedDeployments: Set<string>;\n\tonSelectDeployments: (deployments: Set<string>) => void;\n};\n\nexport const DeploymentFilter = ({\n\tselectedDeployments,\n\tonSelectDeployments,\n}: DeploymentFilterProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst { data: deployments = [] } = useQuery(\n\t\tbuildFilterDeploymentsQuery({\n\t\t\tdeployments: deferredSearch\n\t\t\t\t? {\n\t\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\t\tname: { like_: deferredSearch },\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tlimit: 100,\n\t\t\toffset: 0,\n\t\t\tsort: \"NAME_ASC\",\n\t\t}),\n\t);\n\n\tconst { data: selectedDeploymentsData = [] } = useQuery(\n\t\tbuildFilterDeploymentsQuery(\n\t\t\t{\n\t\t\t\tdeployments:\n\t\t\t\t\tselectedDeployments.size > 0\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\t\t\t\tid: { any_: Array.from(selectedDeployments) },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\tlimit: selectedDeployments.size || 1,\n\t\t\t\toffset: 0,\n\t\t\t\tsort: \"NAME_ASC\",\n\t\t\t},\n\t\t\t{ enabled: selectedDeployments.size > 0 },\n\t\t),\n\t);\n\n\tconst handleSelectDeployment = (deploymentId: string) => {\n\t\tconst updatedDeployments = new Set(selectedDeployments);\n\t\tif (selectedDeployments.has(deploymentId)) {\n\t\t\tupdatedDeployments.delete(deploymentId);\n\t\t} else {\n\t\t\tupdatedDeployments.add(deploymentId);\n\t\t}\n\t\tonSelectDeployments(updatedDeployments);\n\t};\n\n\tconst handleClearAll = () => {\n\t\tonSelectDeployments(new Set());\n\t};\n\n\tconst renderSelectedDeployments = () => {\n\t\tif (selectedDeployments.size === 0) {\n\t\t\treturn \"All deployments\";\n\t\t}\n\n\t\tconst selectedDeploymentNames = selectedDeploymentsData\n\t\t\t.filter((deployment) => selectedDeployments.has(deployment.id))\n\t\t\t.map((deployment) => deployment.name);\n\n\t\tconst visible = selectedDeploymentNames.slice(0, MAX_DEPLOYMENTS_DISPLAYED);\n\t\tconst extraCount =\n\t\t\tselectedDeploymentNames.length - MAX_DEPLOYMENTS_DISPLAYED;\n\n\t\treturn (\n\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2\">\n\t\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2 overflow-hidden\">\n\t\t\t\t\t<span className=\"truncate\">{visible.join(\", \")}</span>\n\t\t\t\t</div>\n\t\t\t\t{extraCount > 0 && (\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"shrink-0\">\n\t\t\t\t\t\t+ {extraCount}\n\t\t\t\t\t</Typography>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst filteredDeployments = useMemo(() => {\n\t\treturn deployments.filter(\n\t\t\t(deployment: Deployment) =>\n\t\t\t\t!deferredSearch ||\n\t\t\t\tdeployment.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deployments, deferredSearch]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\taria-label=\"Filter by deployment\"\n\t\t\t\tselected={selectedDeployments.size === 0}\n\t\t\t>\n\t\t\t\t{renderSelectedDeployments()}\n\t\t\t</ComboboxTrigger>\n\t\t\t<ComboboxContent>\n\t\t\t\t<ComboboxCommandInput\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonValueChange={setSearch}\n\t\t\t\t\tplaceholder=\"Search deployments...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandEmtpy>No deployments found</ComboboxCommandEmtpy>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\taria-label=\"All deployments\"\n\t\t\t\t\t\t\tonSelect={handleClearAll}\n\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\tvalue=\"__all__\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox checked={selectedDeployments.size === 0} />\n\t\t\t\t\t\t\tAll deployments\n\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t{filteredDeployments.map((deployment: Deployment) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={deployment.id}\n\t\t\t\t\t\t\t\taria-label={deployment.name}\n\t\t\t\t\t\t\t\tonSelect={() => handleSelectDeployment(deployment.id)}\n\t\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\t\tvalue={deployment.id}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Checkbox checked={selectedDeployments.has(deployment.id)} />\n\t\t\t\t\t\t\t\t{deployment.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\tbuildFilterWorkPoolsQuery,\n\ttype WorkPool,\n} from \"@/api/work-pools/work-pools\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport { Typography } from \"@/components/ui/typography\";\n\nconst MAX_WORK_POOLS_DISPLAYED = 2;\n\ntype WorkPoolFilterProps = {\n\tselectedWorkPools: Set<string>;\n\tonSelectWorkPools: (workPools: Set<string>) => void;\n};\n\nexport const WorkPoolFilter = ({\n\tselectedWorkPools,\n\tonSelectWorkPools,\n}: WorkPoolFilterProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst { data: workPools = [] } = useQuery(\n\t\tbuildFilterWorkPoolsQuery({\n\t\t\tlimit: 100,\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\n\tconst handleSelectWorkPool = (workPoolName: string) => {\n\t\tconst updatedWorkPools = new Set(selectedWorkPools);\n\t\tif (selectedWorkPools.has(workPoolName)) {\n\t\t\tupdatedWorkPools.delete(workPoolName);\n\t\t} else {\n\t\t\tupdatedWorkPools.add(workPoolName);\n\t\t}\n\t\tonSelectWorkPools(updatedWorkPools);\n\t};\n\n\tconst handleClearAll = () => {\n\t\tonSelectWorkPools(new Set());\n\t};\n\n\tconst renderSelectedWorkPools = () => {\n\t\tif (selectedWorkPools.size === 0) {\n\t\t\treturn \"All work pools\";\n\t\t}\n\n\t\tconst selectedWorkPoolNames = Array.from(selectedWorkPools).sort((a, b) =>\n\t\t\ta.localeCompare(b),\n\t\t);\n\n\t\tconst visible = selectedWorkPoolNames.slice(0, MAX_WORK_POOLS_DISPLAYED);\n\t\tconst extraCount = selectedWorkPoolNames.length - MAX_WORK_POOLS_DISPLAYED;\n\n\t\treturn (\n\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2\">\n\t\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2 overflow-hidden\">\n\t\t\t\t\t<span className=\"truncate\">{visible.join(\", \")}</span>\n\t\t\t\t</div>\n\t\t\t\t{extraCount > 0 && (\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"shrink-0\">\n\t\t\t\t\t\t+ {extraCount}\n\t\t\t\t\t</Typography>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst filteredWorkPools = useMemo(() => {\n\t\treturn workPools\n\t\t\t.filter(\n\t\t\t\t(workPool: WorkPool) =>\n\t\t\t\t\t!deferredSearch ||\n\t\t\t\t\tworkPool.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t\t)\n\t\t\t.sort((a: WorkPool, b: WorkPool) => a.name.localeCompare(b.name));\n\t}, [workPools, deferredSearch]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\taria-label=\"Filter by work pool\"\n\t\t\t\tselected={selectedWorkPools.size === 0}\n\t\t\t>\n\t\t\t\t{renderSelectedWorkPools()}\n\t\t\t</ComboboxTrigger>\n\t\t\t<ComboboxContent>\n\t\t\t\t<ComboboxCommandInput\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonValueChange={setSearch}\n\t\t\t\t\tplaceholder=\"Search work pools...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandEmtpy>No work pools found</ComboboxCommandEmtpy>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\taria-label=\"All work pools\"\n\t\t\t\t\t\t\tonSelect={handleClearAll}\n\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\tvalue=\"__all__\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox checked={selectedWorkPools.size === 0} />\n\t\t\t\t\t\t\tAll work pools\n\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t{filteredWorkPools.map((workPool: WorkPool) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workPool.name}\n\t\t\t\t\t\t\t\taria-label={workPool.name}\n\t\t\t\t\t\t\t\tonSelect={() => handleSelectWorkPool(workPool.name)}\n\t\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\t\tvalue={workPool.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Checkbox checked={selectedWorkPools.has(workPool.name)} />\n\t\t\t\t\t\t\t\t{workPool.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n"],"names":["MAX_DEPLOYMENTS_DISPLAYED","DeploymentFilter","selectedDeployments","onSelectDeployments","search","setSearch","useState","deferredSearch","useDeferredValue","deployments","useQuery","buildFilterDeploymentsQuery","selectedDeploymentsData","handleSelectDeployment","deploymentId","updatedDeployments","handleClearAll","renderSelectedDeployments","selectedDeploymentNames","deployment","visible","extraCount","jsxs","jsx","Typography","filteredDeployments","useMemo","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandList","ComboboxCommandEmtpy","ComboboxCommandGroup","ComboboxCommandItem","Checkbox","MAX_WORK_POOLS_DISPLAYED","WorkPoolFilter","selectedWorkPools","onSelectWorkPools","workPools","buildFilterWorkPoolsQuery","handleSelectWorkPool","workPoolName","updatedWorkPools","renderSelectedWorkPools","selectedWorkPoolNames","a","b","filteredWorkPools","workPool"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"work-pool-filter-Ddhp_M-L.js","sources":["../../src/components/flow-runs/flow-runs-list/flow-runs-filters/deployment-filter.tsx","../../src/components/flow-runs/flow-runs-list/flow-runs-filters/work-pool-filter.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\tbuildFilterDeploymentsQuery,\n\ttype Deployment,\n} from \"@/api/deployments\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport { Typography } from \"@/components/ui/typography\";\n\nconst MAX_DEPLOYMENTS_DISPLAYED = 2;\n\ntype DeploymentFilterProps = {\n\tselectedDeployments: Set<string>;\n\tonSelectDeployments: (deployments: Set<string>) => void;\n};\n\nexport const DeploymentFilter = ({\n\tselectedDeployments,\n\tonSelectDeployments,\n}: DeploymentFilterProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst { data: deployments = [] } = useQuery(\n\t\tbuildFilterDeploymentsQuery({\n\t\t\tdeployments: deferredSearch\n\t\t\t\t? {\n\t\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\t\tname: { like_: deferredSearch },\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tlimit: 100,\n\t\t\toffset: 0,\n\t\t\tsort: \"NAME_ASC\",\n\t\t}),\n\t);\n\n\tconst { data: selectedDeploymentsData = [] } = useQuery(\n\t\tbuildFilterDeploymentsQuery(\n\t\t\t{\n\t\t\t\tdeployments:\n\t\t\t\t\tselectedDeployments.size > 0\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\t\t\t\tid: { any_: Array.from(selectedDeployments) },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\tlimit: selectedDeployments.size || 1,\n\t\t\t\toffset: 0,\n\t\t\t\tsort: \"NAME_ASC\",\n\t\t\t},\n\t\t\t{ enabled: selectedDeployments.size > 0 },\n\t\t),\n\t);\n\n\tconst handleSelectDeployment = (deploymentId: string) => {\n\t\tconst updatedDeployments = new Set(selectedDeployments);\n\t\tif (selectedDeployments.has(deploymentId)) {\n\t\t\tupdatedDeployments.delete(deploymentId);\n\t\t} else {\n\t\t\tupdatedDeployments.add(deploymentId);\n\t\t}\n\t\tonSelectDeployments(updatedDeployments);\n\t};\n\n\tconst handleClearAll = () => {\n\t\tonSelectDeployments(new Set());\n\t};\n\n\tconst renderSelectedDeployments = () => {\n\t\tif (selectedDeployments.size === 0) {\n\t\t\treturn \"All deployments\";\n\t\t}\n\n\t\tconst selectedDeploymentNames = selectedDeploymentsData\n\t\t\t.filter((deployment) => selectedDeployments.has(deployment.id))\n\t\t\t.map((deployment) => deployment.name);\n\n\t\tconst visible = selectedDeploymentNames.slice(0, MAX_DEPLOYMENTS_DISPLAYED);\n\t\tconst extraCount =\n\t\t\tselectedDeploymentNames.length - MAX_DEPLOYMENTS_DISPLAYED;\n\n\t\treturn (\n\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2\">\n\t\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2 overflow-hidden\">\n\t\t\t\t\t<span className=\"truncate\">{visible.join(\", \")}</span>\n\t\t\t\t</div>\n\t\t\t\t{extraCount > 0 && (\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"shrink-0\">\n\t\t\t\t\t\t+ {extraCount}\n\t\t\t\t\t</Typography>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst filteredDeployments = useMemo(() => {\n\t\treturn deployments.filter(\n\t\t\t(deployment: Deployment) =>\n\t\t\t\t!deferredSearch ||\n\t\t\t\tdeployment.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deployments, deferredSearch]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\taria-label=\"Filter by deployment\"\n\t\t\t\tselected={selectedDeployments.size === 0}\n\t\t\t>\n\t\t\t\t{renderSelectedDeployments()}\n\t\t\t</ComboboxTrigger>\n\t\t\t<ComboboxContent>\n\t\t\t\t<ComboboxCommandInput\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonValueChange={setSearch}\n\t\t\t\t\tplaceholder=\"Search deployments...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandEmtpy>No deployments found</ComboboxCommandEmtpy>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\taria-label=\"All deployments\"\n\t\t\t\t\t\t\tonSelect={handleClearAll}\n\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\tvalue=\"__all__\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox checked={selectedDeployments.size === 0} />\n\t\t\t\t\t\t\tAll deployments\n\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t{filteredDeployments.map((deployment: Deployment) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={deployment.id}\n\t\t\t\t\t\t\t\taria-label={deployment.name}\n\t\t\t\t\t\t\t\tonSelect={() => handleSelectDeployment(deployment.id)}\n\t\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\t\tvalue={deployment.id}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Checkbox checked={selectedDeployments.has(deployment.id)} />\n\t\t\t\t\t\t\t\t{deployment.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\tbuildFilterWorkPoolsQuery,\n\ttype WorkPool,\n} from \"@/api/work-pools/work-pools\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport { Typography } from \"@/components/ui/typography\";\n\nconst MAX_WORK_POOLS_DISPLAYED = 2;\n\ntype WorkPoolFilterProps = {\n\tselectedWorkPools: Set<string>;\n\tonSelectWorkPools: (workPools: Set<string>) => void;\n};\n\nexport const WorkPoolFilter = ({\n\tselectedWorkPools,\n\tonSelectWorkPools,\n}: WorkPoolFilterProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst { data: workPools = [] } = useQuery(\n\t\tbuildFilterWorkPoolsQuery({\n\t\t\tlimit: 100,\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\n\tconst handleSelectWorkPool = (workPoolName: string) => {\n\t\tconst updatedWorkPools = new Set(selectedWorkPools);\n\t\tif (selectedWorkPools.has(workPoolName)) {\n\t\t\tupdatedWorkPools.delete(workPoolName);\n\t\t} else {\n\t\t\tupdatedWorkPools.add(workPoolName);\n\t\t}\n\t\tonSelectWorkPools(updatedWorkPools);\n\t};\n\n\tconst handleClearAll = () => {\n\t\tonSelectWorkPools(new Set());\n\t};\n\n\tconst renderSelectedWorkPools = () => {\n\t\tif (selectedWorkPools.size === 0) {\n\t\t\treturn \"All work pools\";\n\t\t}\n\n\t\tconst selectedWorkPoolNames = Array.from(selectedWorkPools).sort((a, b) =>\n\t\t\ta.localeCompare(b),\n\t\t);\n\n\t\tconst visible = selectedWorkPoolNames.slice(0, MAX_WORK_POOLS_DISPLAYED);\n\t\tconst extraCount = selectedWorkPoolNames.length - MAX_WORK_POOLS_DISPLAYED;\n\n\t\treturn (\n\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2\">\n\t\t\t\t<div className=\"flex flex-1 min-w-0 items-center gap-2 overflow-hidden\">\n\t\t\t\t\t<span className=\"truncate\">{visible.join(\", \")}</span>\n\t\t\t\t</div>\n\t\t\t\t{extraCount > 0 && (\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"shrink-0\">\n\t\t\t\t\t\t+ {extraCount}\n\t\t\t\t\t</Typography>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst filteredWorkPools = useMemo(() => {\n\t\treturn workPools\n\t\t\t.filter(\n\t\t\t\t(workPool: WorkPool) =>\n\t\t\t\t\t!deferredSearch ||\n\t\t\t\t\tworkPool.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t\t)\n\t\t\t.sort((a: WorkPool, b: WorkPool) => a.name.localeCompare(b.name));\n\t}, [workPools, deferredSearch]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\taria-label=\"Filter by work pool\"\n\t\t\t\tselected={selectedWorkPools.size === 0}\n\t\t\t>\n\t\t\t\t{renderSelectedWorkPools()}\n\t\t\t</ComboboxTrigger>\n\t\t\t<ComboboxContent>\n\t\t\t\t<ComboboxCommandInput\n\t\t\t\t\tvalue={search}\n\t\t\t\t\tonValueChange={setSearch}\n\t\t\t\t\tplaceholder=\"Search work pools...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandEmtpy>No work pools found</ComboboxCommandEmtpy>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\taria-label=\"All work pools\"\n\t\t\t\t\t\t\tonSelect={handleClearAll}\n\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\tvalue=\"__all__\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox checked={selectedWorkPools.size === 0} />\n\t\t\t\t\t\t\tAll work pools\n\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t{filteredWorkPools.map((workPool: WorkPool) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workPool.name}\n\t\t\t\t\t\t\t\taria-label={workPool.name}\n\t\t\t\t\t\t\t\tonSelect={() => handleSelectWorkPool(workPool.name)}\n\t\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\t\tvalue={workPool.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Checkbox checked={selectedWorkPools.has(workPool.name)} />\n\t\t\t\t\t\t\t\t{workPool.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n"],"names":["MAX_DEPLOYMENTS_DISPLAYED","DeploymentFilter","selectedDeployments","onSelectDeployments","search","setSearch","useState","deferredSearch","useDeferredValue","deployments","useQuery","buildFilterDeploymentsQuery","selectedDeploymentsData","handleSelectDeployment","deploymentId","updatedDeployments","handleClearAll","renderSelectedDeployments","selectedDeploymentNames","deployment","visible","extraCount","jsxs","jsx","Typography","filteredDeployments","useMemo","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandList","ComboboxCommandEmtpy","ComboboxCommandGroup","ComboboxCommandItem","Checkbox","MAX_WORK_POOLS_DISPLAYED","WorkPoolFilter","selectedWorkPools","onSelectWorkPools","workPools","buildFilterWorkPoolsQuery","handleSelectWorkPool","workPoolName","updatedWorkPools","renderSelectedWorkPools","selectedWorkPoolNames","a","b","filteredWorkPools","workPool"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,r as y,u as T}from"./vendor-tanstack-BK8oseNA.js";import{bH as E,bU as S,bR as v,bS as C,H as I,aW as g,bJ as F,bT as W,dk as M,dl as L,y as d,_ as A,$ as U,a0 as O,a1 as R,p as P,I as z,a3 as $,bh as B,q as N,dm as H,bI as q,bO as V,bP as Y,bQ as Z,dn as G,dp as J,G as K}from"./index-D5RdrxkU.js";import{D as X,a as ee,b as oe,d as se}from"./dropdown-menu-e0Fqb6aw.js";import{a as re}from"./zod-DgSl2Nua.js";import{c as ne,o as ae,k as _,b as te,s as x,n as Q}from"./vendor-forms-DxqqmhL5.js";import{F as ie,a as h,b as j,c as b,d as w,e as k}from"./form-DNerk3LS.js";import{T as le}from"./textarea-C4bdj7Jk.js";import{D as ce}from"./delete-confirmation-dialog-CqKsUEj_.js";const ue=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],de=E("square-pen",ue),me={READY:{label:"Ready",color:"bg-green-500",tooltip:"Work queue has at least one actively polling worker ready to execute work."},PAUSED:{label:"Paused",color:"bg-yellow-500",tooltip:"Work queue is paused. No work will be executed."},NOT_READY:{label:"Not Ready",color:"bg-red-500",tooltip:"Work queue does not have any actively polling workers ready to execute work."}},Ce=({status:o,className:s})=>{const r=me[o];return e.jsx(S,{children:e.jsxs(v,{children:[e.jsx(C,{asChild:!0,children:e.jsxs(I,{variant:"secondary",className:g("flex items-center space-x-1 cursor-help",s),children:[o==="PAUSED"?e.jsx(F,{className:"h-2 w-2 text-muted-foreground"}):e.jsx("div",{className:g("h-2 w-2 rounded-full",r.color)}),e.jsx("span",{children:r.label})]})}),e.jsx(W,{children:e.jsx("p",{children:r.tooltip})})]})})},pe=ae({name:x().min(1,{message:"Name is required"}).regex(/^[a-zA-Z0-9_-]+$/,{message:"Name can only contain letters, numbers, hyphens, and underscores"}),description:x().nullable().optional(),is_paused:te().default(!1),concurrency_limit:_([x().transform(o=>{if(o===""||o===null||o===void 0)return null;const s=Number(o);if(Number.isNaN(s))return null;if(s<=0)throw new Error("Flow run concurrency must be greater than 0");return s}),Q().positive({message:"Flow run concurrency must be greater than 0"}).nullable()]).nullable().optional(),priority:_([x().transform(o=>{if(o===""||o===null||o===void 0)return null;const s=Number(o);if(Number.isNaN(s))return null;if(s<=0)throw new Error("Priority must be greater than 0");if(!Number.isInteger(s))throw new Error("Priority must be a whole number");return s}),Q().int({message:"Priority must be a whole number"}).positive({message:"Priority must be greater than 0"}).nullable()]).nullable().optional()}),f={name:"",description:"",is_paused:!1,concurrency_limit:null,priority:null},he=({workPoolName:o,queueToEdit:s,onSubmit:r})=>{const{mutate:i,isPending:l}=M(),{mutate:n,isPending:c}=L(),a=ne({resolver:re(pe),defaultValues:f});return y.useEffect(()=>{s?a.reset({name:s.name,description:s.description??"",is_paused:s.is_paused??!1,concurrency_limit:s.concurrency_limit??null,priority:s.priority??null}):a.reset(f)},[a,s]),{form:a,saveOrUpdate:u=>{const m={...u,description:u.description||null};s?n({workPoolName:o,queueName:s.name,workQueueData:{...m,is_paused:m.is_paused??s.is_paused??!1}},{onSuccess:()=>{d.success("Work queue updated"),a.reset(f),r()},onError:t=>{const D=t.message||"Unknown error while updating work queue.";a.setError("root",{message:D})}}):i({workPoolName:o,workQueueData:m},{onSuccess:()=>{d.success("Work queue created"),a.reset(f),r()},onError:t=>{const D=t.message||"Unknown error while creating work queue.";a.setError("root",{message:D})}})},isLoading:l||c}},ge=({workPoolName:o,queueToEdit:s,open:r,onOpenChange:i,onSubmit:l})=>{const{form:n,isLoading:c,saveOrUpdate:a}=he({workPoolName:o,queueToEdit:s,onSubmit:l}),p=!!s,u=p?"Edit Work Queue":"Create Work Queue",m=p?"Save":"Create Work Queue";return e.jsx(A,{open:r,onOpenChange:i,children:e.jsxs(U,{"aria-describedby":void 0,children:[e.jsx(O,{children:e.jsx(R,{children:u})}),e.jsx(ie,{...n,children:e.jsxs("form",{onSubmit:t=>{n.handleSubmit(a)(t)},className:"space-y-4",children:[e.jsx(h,{children:n.formState.errors.root?.message}),e.jsx(j,{control:n.control,name:"name",render:({field:t})=>e.jsxs(b,{children:[e.jsx(w,{children:"Name"}),e.jsx(k,{children:e.jsx(P,{type:"text",autoComplete:"off",...t})}),e.jsx(h,{})]})}),e.jsx(j,{control:n.control,name:"description",render:({field:t})=>e.jsxs(b,{children:[e.jsx(w,{children:"Description"}),e.jsx(k,{children:e.jsx(le,{...t,value:t.value||""})}),e.jsx(h,{})]})}),e.jsx(j,{control:n.control,name:"concurrency_limit",render:({field:t})=>e.jsxs(b,{children:[e.jsx(w,{children:"Flow Run Concurrency"}),e.jsx(k,{children:e.jsx(P,{type:"number",...t,value:t.value||""})}),e.jsx(h,{})]})}),e.jsx(j,{control:n.control,name:"priority",render:({field:t})=>e.jsxs(b,{children:[e.jsxs(w,{className:"flex items-center gap-2",children:["Priority",e.jsxs(v,{children:[e.jsx(C,{asChild:!0,children:e.jsx("button",{type:"button",className:"cursor-help",children:e.jsx(z,{id:"Info",className:"size-4"})})}),e.jsx(W,{children:e.jsx("p",{className:"text-xs",children:"Work on higher priority queues is executed first. Lower numbers have higher priority."})})]})]}),e.jsx(k,{children:e.jsx(P,{type:"number",...t,value:t.value||""})}),e.jsx(h,{})]})}),e.jsxs($,{children:[e.jsx(B,{asChild:!0,children:e.jsx(N,{variant:"outline",children:"Cancel"})}),e.jsx(N,{type:"submit",loading:c,children:m})]})]})})]})})},xe=({queue:o,open:s,onOpenChange:r,onDeleted:i})=>{const l=H(),n=()=>{if(!o.work_pool_name){d.error("Work pool name is required");return}l.mutate({workPoolName:o.work_pool_name,queueName:o.name},{onSuccess:()=>{d.success("Work pool queue deleted successfully"),i?.(),r(!1)},onError:()=>{d.error("Failed to delete work pool queue")}})};return e.jsx(ce,{isOpen:s,title:"Delete Work Pool Queue",description:`Are you sure you want to delete the work pool queue "${o.name}"? This action cannot be undone.`,confirmText:o.name,isLoading:l.isPending,loadingText:"Deleting...",onConfirm:n,onClose:()=>r(!1)})},je=o=>{const s=T(),[r,i]=y.useState(!1),[l,n]=y.useState(!1),c=()=>{navigator.clipboard.writeText(o.id),d.success("ID copied to clipboard")},a=()=>{n(!0)},p=()=>{s({to:"/automations/create"})},u=o.name==="default";return{menuItems:[{label:"Copy ID",icon:q,action:c,show:!0},{label:"Edit",icon:de,action:a,show:!0},{label:"Delete",icon:V,action:()=>i(!0),show:!u,variant:"destructive"},{label:"Automate",icon:Y,action:p,show:!0}].filter(t=>t.show),showDeleteDialog:r,setShowDeleteDialog:i,showEditDialog:l,setShowEditDialog:n,triggerIcon:Z}},We=({queue:o,onUpdate:s,className:r})=>{const{menuItems:i,showDeleteDialog:l,setShowDeleteDialog:n,showEditDialog:c,setShowEditDialog:a,triggerIcon:p}=je(o);return e.jsxs(e.Fragment,{children:[e.jsxs(X,{children:[e.jsx(ee,{asChild:!0,children:e.jsxs(N,{variant:"outline",size:"icon",className:g("size-8",r),children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(p,{className:"size-4"})]})}),e.jsx(oe,{align:"end",children:i.map(u=>{const m=u.icon;return e.jsxs(se,{onClick:u.action,className:g(u.variant==="destructive"&&"text-destructive"),children:[e.jsx(m,{className:"mr-2 h-4 w-4"}),u.label]},u.label)})})]}),e.jsx(xe,{queue:o,open:l,onOpenChange:n,onDeleted:s}),e.jsx(ge,{workPoolName:o.work_pool_name??"",queueToEdit:o,open:c,onOpenChange:a,onSubmit:()=>{a(!1),s?.()}})]})},be=(o,s)=>{const r=G(),i=J();return{handleToggle:y.useCallback(n=>{if(!o.work_pool_name){d.error("Work pool name is required");return}const c=n?i:r,a=n?"resumed":"paused";c.mutate({workPoolName:o.work_pool_name,queueName:o.name},{onSuccess:()=>{d.success(`Queue ${a} successfully`),s?.()},onError:()=>{d.error(`Failed to ${a.slice(0,-1)} queue`)}})},[o,r,i,s]),isLoading:r.isPending||i.isPending}},_e=({queue:o,onUpdate:s,disabled:r=!1,className:i})=>{const{handleToggle:l,isLoading:n}=be(o,s),c=o.status==="PAUSED",a=r||n;return e.jsx(S,{children:e.jsxs(v,{children:[e.jsx(C,{asChild:!0,children:e.jsx("div",{children:e.jsx(K,{checked:!c,onCheckedChange:l,disabled:a,"aria-label":c?"Resume work pool queue":"Pause work pool queue",className:g(i)})})}),e.jsx(W,{children:e.jsx("p",{children:"Pause or resume this work pool queue"})})]})})};export{de as S,Ce as W,_e as a,We as b,ge as c};
|
|
2
|
+
//# sourceMappingURL=work-pool-queue-toggle-DX3eV3R_.js.map
|