prefect 3.6.15__py3-none-any.whl → 3.6.16.dev3__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/__init__.py +20 -0
- prefect/_build_info.py +3 -3
- prefect/_internal/analytics/__init__.py +80 -0
- prefect/_internal/analytics/_config.py +2 -0
- prefect/_internal/analytics/ci_detection.py +39 -0
- prefect/_internal/analytics/client.py +132 -0
- prefect/_internal/analytics/device_id.py +55 -0
- prefect/_internal/analytics/emit.py +90 -0
- prefect/_internal/analytics/enabled.py +33 -0
- prefect/_internal/analytics/events.py +14 -0
- prefect/_internal/analytics/milestones.py +177 -0
- prefect/_internal/analytics/notice.py +60 -0
- prefect/_internal/analytics/service.py +238 -0
- prefect/analytics/__init__.py +67 -0
- prefect/deployments/runner.py +20 -0
- prefect/flow_engine.py +16 -0
- prefect/flows.py +8 -0
- prefect/logging/formatters.py +24 -1
- prefect/server/ui-v2/assets/{artifact-card-BBzQR-Cj.js → artifact-card-BclosG8t.js} +2 -2
- prefect/server/ui-v2/assets/{artifact-card-BBzQR-Cj.js.map → artifact-card-BclosG8t.js.map} +1 -1
- prefect/server/ui-v2/assets/artifact._id-C0r4BJr2.js +2 -0
- prefect/server/ui-v2/assets/artifact._id-C0r4BJr2.js.map +1 -0
- prefect/server/ui-v2/assets/{automation-wizard-EYSfXlQ7.js → automation-wizard-Bmgt6nn8.js} +2 -2
- prefect/server/ui-v2/assets/{automation-wizard-EYSfXlQ7.js.map → automation-wizard-Bmgt6nn8.js.map} +1 -1
- prefect/server/ui-v2/assets/automation._id-Ccke3KJz.js +2 -0
- prefect/server/ui-v2/assets/{automation._id-Dn7jABys.js.map → automation._id-Ccke3KJz.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation_._id.edit-COrqswD3.js → automation_._id.edit-BlKPUTVf.js} +2 -2
- prefect/server/ui-v2/assets/{automation_._id.edit-COrqswD3.js.map → automation_._id.edit-BlKPUTVf.js.map} +1 -1
- prefect/server/ui-v2/assets/{automations-header-DN_dmMXW.js → automations-header-Df2zw3SC.js} +2 -2
- prefect/server/ui-v2/assets/{automations-header-DN_dmMXW.js.map → automations-header-Df2zw3SC.js.map} +1 -1
- prefect/server/ui-v2/assets/{base-job-template-form-section-De2ACYbw.js → base-job-template-form-section-oZD6U-RW.js} +2 -2
- prefect/server/ui-v2/assets/{base-job-template-form-section-De2ACYbw.js.map → base-job-template-form-section-oZD6U-RW.js.map} +1 -1
- prefect/server/ui-v2/assets/{block-type-details-Cklc7TkK.js → block-type-details-CYrdaLot.js} +2 -2
- prefect/server/ui-v2/assets/{block-type-details-Cklc7TkK.js.map → block-type-details-CYrdaLot.js.map} +1 -1
- prefect/server/ui-v2/assets/block-type-logo-CyAWq7mC.js +2 -0
- prefect/server/ui-v2/assets/block-type-logo-CyAWq7mC.js.map +1 -0
- prefect/server/ui-v2/assets/{block._id-tuz1Bcj2.js → block._id-CBgHrpTP.js} +2 -2
- prefect/server/ui-v2/assets/{block._id-tuz1Bcj2.js.map → block._id-CBgHrpTP.js.map} +1 -1
- prefect/server/ui-v2/assets/{block_._id.edit-CFEYhF5R.js → block_._id.edit-CW-kdi4O.js} +2 -2
- prefect/server/ui-v2/assets/{block_._id.edit-CFEYhF5R.js.map → block_._id.edit-CW-kdi4O.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog-CCPRo7nY.js → catalog-Brh0kn1I.js} +2 -2
- prefect/server/ui-v2/assets/{catalog-CCPRo7nY.js.map → catalog-Brh0kn1I.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog_._slug-MCgzguIZ.js +2 -0
- prefect/server/ui-v2/assets/{catalog_._slug-Bl2J2oI3.js.map → catalog_._slug-MCgzguIZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog_._slug_.create-9UD_SxDN.js → catalog_._slug_.create-DBaeHi9Q.js} +2 -2
- prefect/server/ui-v2/assets/{catalog_._slug_.create-9UD_SxDN.js.map → catalog_._slug_.create-DBaeHi9Q.js.map} +1 -1
- prefect/server/ui-v2/assets/{collapsible-BVQTBG_U.js → collapsible-B_NJS0uJ.js} +2 -2
- prefect/server/ui-v2/assets/{collapsible-BVQTBG_U.js.map → collapsible-B_NJS0uJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{concurrency-limit._id-CsgRxA0a.js → concurrency-limit._id-qzNUQzQa.js} +2 -2
- prefect/server/ui-v2/assets/{concurrency-limit._id-CsgRxA0a.js.map → concurrency-limit._id-qzNUQzQa.js.map} +1 -1
- prefect/server/ui-v2/assets/create-BwXG6EIb.js +2 -0
- prefect/server/ui-v2/assets/{create-D--LHaji.js.map → create-BwXG6EIb.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-BycfZHGQ.js → create-MoiIE9Ms.js} +2 -2
- prefect/server/ui-v2/assets/{create-BycfZHGQ.js.map → create-MoiIE9Ms.js.map} +1 -1
- prefect/server/ui-v2/assets/data-table-CPkppyg6.js +2 -0
- prefect/server/ui-v2/assets/data-table-CPkppyg6.js.map +1 -0
- prefect/server/ui-v2/assets/delete-confirmation-dialog-CwDK_2QS.js +2 -0
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-DHkm2p8m.js.map → delete-confirmation-dialog-CwDK_2QS.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-action-header-D5GOooPm.js → deployment-action-header-Vp9YsCJO.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-action-header-D5GOooPm.js.map → deployment-action-header-Vp9YsCJO.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js → deployment-form-CJcg_6DJ.js} +3 -3
- prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js.map → deployment-form-CJcg_6DJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js → deployment-links-CIkJIuHh.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js.map → deployment-links-CIkJIuHh.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment._id-C6XrGMp_.js +2 -0
- prefect/server/ui-v2/assets/{deployment._id-Ci9zge5n.js.map → deployment._id-C6XrGMp_.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-whsGcHdu.js → deployment._id-CWgTYmTG.js} +2 -2
- prefect/server/ui-v2/assets/{deployment._id-whsGcHdu.js.map → deployment._id-CWgTYmTG.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.duplicate-Bg0s0ZJn.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.duplicate-D9ZWkh8H.js.map → deployment_._id.duplicate-Bg0s0ZJn.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.edit-CnoB0UeG.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.edit-CS7sObzC.js.map → deployment_._id.edit-CnoB0UeG.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment_._id.run-g7SZuDFi.js → deployment_._id.run-BqPK6rTB.js} +2 -2
- prefect/server/ui-v2/assets/{deployment_._id.run-g7SZuDFi.js.map → deployment_._id.run-BqPK6rTB.js.map} +1 -1
- prefect/server/ui-v2/assets/{dropdown-menu-0atiOSFo.js → dropdown-menu-D7Gwbd15.js} +2 -2
- prefect/server/ui-v2/assets/{dropdown-menu-0atiOSFo.js.map → dropdown-menu-D7Gwbd15.js.map} +1 -1
- prefect/server/ui-v2/assets/{event-resource-display-DHiAb1Up.js → event-resource-display-CDRgVKd4.js} +2 -2
- prefect/server/ui-v2/assets/{event-resource-display-DHiAb1Up.js.map → event-resource-display-CDRgVKd4.js.map} +1 -1
- prefect/server/ui-v2/assets/event._eventDate._eventId-C73GMDkK.js +2 -0
- prefect/server/ui-v2/assets/{event._eventDate._eventId-D7Twzb22.js.map → event._eventDate._eventId-C73GMDkK.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run-graph-BhzuSJLm.js → flow-run-graph-ckiE3mA9.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run-graph-BhzuSJLm.js.map → flow-run-graph-ckiE3mA9.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run._id-CqpH6bvx.js → flow-run._id-BukrNCAq.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-CqpH6bvx.js.map → flow-run._id-BukrNCAq.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run._id-lIIQBD7H.js → flow-run._id-CtI5VZ2M.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-lIIQBD7H.js.map → flow-run._id-CtI5VZ2M.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run._id-s1UJuakA.js +4 -0
- prefect/server/ui-v2/assets/{flow-run._id-RLy2kBh0.js.map → flow-run._id-s1UJuakA.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-runs-pagination-BATUweRV.js → flow-runs-pagination-SLbYtvaR.js} +2 -2
- prefect/server/ui-v2/assets/{flow-runs-pagination-BATUweRV.js.map → flow-runs-pagination-SLbYtvaR.js.map} +1 -1
- prefect/server/ui-v2/assets/flow._id-CZ5P0v4N.js +2 -0
- prefect/server/ui-v2/assets/{flow._id-BdQGWPKP.js.map → flow._id-CZ5P0v4N.js.map} +1 -1
- prefect/server/ui-v2/assets/{form-DLrbC7rV.js → form-mws4law8.js} +2 -2
- prefect/server/ui-v2/assets/{form-DLrbC7rV.js.map → form-mws4law8.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-BTAWyeXv.js → header-Bes1LmY7.js} +2 -2
- prefect/server/ui-v2/assets/{header-BTAWyeXv.js.map → header-Bes1LmY7.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-ChFAx5uR.js → header-Bj_zBR-a.js} +2 -2
- prefect/server/ui-v2/assets/{header-ChFAx5uR.js.map → header-Bj_zBR-a.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-CyQqOj1w.js → header-CPxTHSvz.js} +2 -2
- prefect/server/ui-v2/assets/{header-CyQqOj1w.js.map → header-CPxTHSvz.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-m48E4KcG.js → index-B8vo2Lrg.js} +5 -5
- prefect/server/ui-v2/assets/{index-m48E4KcG.js.map → index-B8vo2Lrg.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D5RT-SAp.js → index-BBeh-3Nh.js} +2 -2
- prefect/server/ui-v2/assets/{index-D5RT-SAp.js.map → index-BBeh-3Nh.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BLnEvHia.js +2 -0
- prefect/server/ui-v2/assets/{index-7i4X9TeK.js.map → index-BLnEvHia.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BpKoubXu.js +2 -0
- prefect/server/ui-v2/assets/index-BpKoubXu.js.map +1 -0
- prefect/server/ui-v2/assets/index-By6YGqR3.js +2 -0
- prefect/server/ui-v2/assets/index-By6YGqR3.js.map +1 -0
- prefect/server/ui-v2/assets/index-CEi3BlKI.js +2 -0
- prefect/server/ui-v2/assets/index-CEi3BlKI.js.map +1 -0
- prefect/server/ui-v2/assets/{index-BaWDC4da.js → index-CS-zxv7Z.js} +2 -2
- prefect/server/ui-v2/assets/{index-BaWDC4da.js.map → index-CS-zxv7Z.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-kP_I5Qfd.js → index-CToHKh4q.js} +2 -2
- prefect/server/ui-v2/assets/{index-kP_I5Qfd.js.map → index-CToHKh4q.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CKGj5lSu.js → index-CUVvZndW.js} +2 -2
- prefect/server/ui-v2/assets/{index-CKGj5lSu.js.map → index-CUVvZndW.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CxUfZRkN.js → index-CYVn-I3i.js} +2 -2
- prefect/server/ui-v2/assets/{index-CxUfZRkN.js.map → index-CYVn-I3i.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CnlN-VC_.js → index-Cun0JN4t.js} +2 -2
- prefect/server/ui-v2/assets/{index-CnlN-VC_.js.map → index-Cun0JN4t.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BwCLKpNb.js → index-D6ynV6U7.js} +2 -2
- prefect/server/ui-v2/assets/{index-BwCLKpNb.js.map → index-D6ynV6U7.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CHf6xi9j.js → index-DdNUJLRW.js} +2 -2
- prefect/server/ui-v2/assets/{index-CHf6xi9j.js.map → index-DdNUJLRW.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CQnWiUE5.js → index-DlHOXQhu.js} +2 -2
- prefect/server/ui-v2/assets/{index-CQnWiUE5.js.map → index-DlHOXQhu.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Eqdr6Ff7.js → index-DyVw8YE8.js} +2 -2
- prefect/server/ui-v2/assets/{index-Eqdr6Ff7.js.map → index-DyVw8YE8.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Btb_-PDp.js → index-DzRz7D2P.js} +2 -2
- prefect/server/ui-v2/assets/{index-Btb_-PDp.js.map → index-DzRz7D2P.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DQGif3jm.js → index-DzUcVNZg.js} +2 -2
- prefect/server/ui-v2/assets/{index-DQGif3jm.js.map → index-DzUcVNZg.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DNh9ZBy4.js → index-IBvMMs6S.js} +2 -2
- prefect/server/ui-v2/assets/{index-DNh9ZBy4.js.map → index-IBvMMs6S.js.map} +1 -1
- prefect/server/ui-v2/assets/index-_kpA__te.js +2 -0
- prefect/server/ui-v2/assets/{index-CiSFHkhI.js.map → index-_kpA__te.js.map} +1 -1
- prefect/server/ui-v2/assets/index-m9O-nIOl.css +1 -0
- prefect/server/ui-v2/assets/{index-lyQav_XM.js → index-wOvyf10b.js} +2 -2
- prefect/server/ui-v2/assets/{index-lyQav_XM.js.map → index-wOvyf10b.js.map} +1 -1
- prefect/server/ui-v2/assets/{json-input-Ba-BeBcw.js → json-input-Ce-HlRqa.js} +2 -2
- prefect/server/ui-v2/assets/{json-input-Ba-BeBcw.js.map → json-input-Ce-HlRqa.js.map} +1 -1
- prefect/server/ui-v2/assets/{key-value-DkSKn6jE.js → key-value-XHEZOtZX.js} +2 -2
- prefect/server/ui-v2/assets/{key-value-DkSKn6jE.js.map → key-value-XHEZOtZX.js.map} +1 -1
- prefect/server/ui-v2/assets/{key._key-Cjx57ymg.js → key._key-LpsMf3zD.js} +2 -2
- prefect/server/ui-v2/assets/{key._key-Cjx57ymg.js.map → key._key-LpsMf3zD.js.map} +1 -1
- prefect/server/ui-v2/assets/{lazy-markdown-Du2Xu3Yp.js → lazy-markdown-1Hz0xzca.js} +2 -2
- prefect/server/ui-v2/assets/{lazy-markdown-Du2Xu3Yp.js.map → lazy-markdown-1Hz0xzca.js.map} +1 -1
- prefect/server/ui-v2/assets/{login-DxMF9Jvj.js → login-D5uepl9L.js} +2 -2
- prefect/server/ui-v2/assets/{login-DxMF9Jvj.js.map → login-D5uepl9L.js.map} +1 -1
- prefect/server/ui-v2/assets/{markdown-input-DPi8zyRr.js → markdown-input-CG6M9zD0.js} +2 -2
- prefect/server/ui-v2/assets/{markdown-input-DPi8zyRr.js.map → markdown-input-CG6M9zD0.js.map} +1 -1
- prefect/server/ui-v2/assets/python-example-snippet-DRHcUlCX.js +3 -0
- prefect/server/ui-v2/assets/{python-example-snippet-DfCFYPN_.js.map → python-example-snippet-DRHcUlCX.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-input-mr6GD840.js → python-input-BsUS8fw1.js} +2 -2
- prefect/server/ui-v2/assets/{python-input-mr6GD840.js.map → python-input-BsUS8fw1.js.map} +1 -1
- prefect/server/ui-v2/assets/{radio-group-Co3cN0Kv.js → radio-group-BUsmwdrt.js} +2 -2
- prefect/server/ui-v2/assets/{radio-group-Co3cN0Kv.js.map → radio-group-BUsmwdrt.js.map} +1 -1
- prefect/server/ui-v2/assets/{route-error-state-DnBaNT2T.js → route-error-state-BFBpiIhD.js} +2 -2
- prefect/server/ui-v2/assets/{route-error-state-DnBaNT2T.js.map → route-error-state-BFBpiIhD.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-CWDHSME9.js → schema-form-BwTmkvJk.js} +2 -2
- prefect/server/ui-v2/assets/schema-form-BwTmkvJk.js.map +1 -0
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BSWlW_aQ.js → schema-form-input-string-format-datetime-nrb3g-JJ.js} +4 -4
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BSWlW_aQ.js.map → schema-form-input-string-format-datetime-nrb3g-JJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{settings-DU5y6tJE.js → settings-CUBtK5aW.js} +2 -2
- prefect/server/ui-v2/assets/{settings-DU5y6tJE.js.map → settings-CUBtK5aW.js.map} +1 -1
- prefect/server/ui-v2/assets/{sort-filter-DpuWNkQo.js → sort-filter-Cv8zAXMp.js} +2 -2
- prefect/server/ui-v2/assets/{sort-filter-DpuWNkQo.js.map → sort-filter-Cv8zAXMp.js.map} +1 -1
- prefect/server/ui-v2/assets/{table-bBL6C0ZK.js → table-BBNGfPra.js} +2 -2
- prefect/server/ui-v2/assets/{table-bBL6C0ZK.js.map → table-BBNGfPra.js.map} +1 -1
- prefect/server/ui-v2/assets/{tags-input-BLPMVWpZ.js → tags-input-DHrnkwjQ.js} +2 -2
- prefect/server/ui-v2/assets/{tags-input-BLPMVWpZ.js.map → tags-input-DHrnkwjQ.js.map} +1 -1
- prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js +2 -0
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-S69sih55.js.map → task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-Dl3Azs8t.js → task-run._id-BY58gqs2.js} +2 -2
- prefect/server/ui-v2/assets/{task-run._id-Dl3Azs8t.js.map → task-run._id-BY58gqs2.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-B_tIDm4K.js → task-run._id-u73Jxfqw.js} +3 -3
- prefect/server/ui-v2/assets/{task-run._id-B_tIDm4K.js.map → task-run._id-u73Jxfqw.js.map} +1 -1
- prefect/server/ui-v2/assets/task-runs-pagination-DUy3147A.js +2 -0
- prefect/server/ui-v2/assets/{task-runs-pagination-VdR-LO4r.js.map → task-runs-pagination-DUy3147A.js.map} +1 -1
- prefect/server/ui-v2/assets/{textarea-B3_TtPRi.js → textarea-DUhh6-kq.js} +2 -2
- prefect/server/ui-v2/assets/{textarea-B3_TtPRi.js.map → textarea-DUhh6-kq.js.map} +1 -1
- prefect/server/ui-v2/assets/timezone-select-D4Q6VBtD.js +2 -0
- prefect/server/ui-v2/assets/{timezone-select-BuPYznge.js.map → timezone-select-D4Q6VBtD.js.map} +1 -1
- prefect/server/ui-v2/assets/{toggle-group-Cn07UIim.js → toggle-group-7WUJn2Tx.js} +2 -2
- prefect/server/ui-v2/assets/{toggle-group-Cn07UIim.js.map → toggle-group-7WUJn2Tx.js.map} +1 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-D4AD5Ndf.js +2 -0
- prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-DpdsLH4t.js.map → use-delete-automation-confirmation-dialog-D4AD5Ndf.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-Cq5nGhzr.js → use-delete-block-document-confirmation-dialog-DnwWEGUY.js} +2 -2
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-Cq5nGhzr.js.map → use-delete-block-document-confirmation-dialog-DnwWEGUY.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DmQSWBTu.js → use-flow-runs-selected-rows-C-tehPRB.js} +2 -2
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DmQSWBTu.js.map → use-flow-runs-selected-rows-C-tehPRB.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DTwcWiqW.js → use-get-artifacts-flow-task-runs-DRWRrmrb.js} +2 -2
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DTwcWiqW.js.map → use-get-artifacts-flow-task-runs-DRWRrmrb.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-quick-run-CPempwLh.js → use-quick-run-B4Xj-YQQ.js} +2 -2
- prefect/server/ui-v2/assets/{use-quick-run-CPempwLh.js.map → use-quick-run-B4Xj-YQQ.js.map} +1 -1
- prefect/server/ui-v2/assets/use-state-favicon-au2TZdMV.js +2 -0
- prefect/server/ui-v2/assets/{use-state-favicon-M09DmrNy.js.map → use-state-favicon-au2TZdMV.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-stepper-CDucnvzp.js → use-stepper-DyIb3vlq.js} +2 -2
- prefect/server/ui-v2/assets/{use-stepper-CDucnvzp.js.map → use-stepper-DyIb3vlq.js.map} +1 -1
- prefect/server/ui-v2/assets/{utilities-BRCNRcQl.js → utilities-D9Y2wo66.js} +2 -2
- prefect/server/ui-v2/assets/{utilities-BRCNRcQl.js.map → utilities-D9Y2wo66.js.map} +1 -1
- prefect/server/ui-v2/assets/vendor-recharts-BvvJP9Po.js +34 -0
- prefect/server/ui-v2/assets/vendor-recharts-BvvJP9Po.js.map +1 -0
- prefect/server/ui-v2/assets/{work-pool-filter-C2tpSS-w.js → work-pool-filter-CSOATj2D.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-filter-C2tpSS-w.js.map → work-pool-filter-CSOATj2D.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool-queue-toggle-Dh7B1zMo.js +2 -0
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-BQ9b-Wxy.js.map → work-pool-queue-toggle-Dh7B1zMo.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool._workPoolName-B_NFWXKS.js +2 -0
- prefect/server/ui-v2/assets/{work-pool._workPoolName-C_LiL3SE.js.map → work-pool._workPoolName-B_NFWXKS.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DBHlrVVx.js → work-pool_._workPoolName.edit-Cyzn8g-S.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DBHlrVVx.js.map → work-pool_._workPoolName.edit-Cyzn8g-S.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DkITxJOP.js → work-pool_._workPoolName.queue._workQueueName-DQzqQWPT.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DkITxJOP.js.map → work-pool_._workPoolName.queue._workQueueName-DQzqQWPT.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-queue-icon-text-D4BWBVDN.js → work-queue-icon-text-BOpcJ8YU.js} +2 -2
- prefect/server/ui-v2/assets/{work-queue-icon-text-D4BWBVDN.js.map → work-queue-icon-text-BOpcJ8YU.js.map} +1 -1
- prefect/server/ui-v2/index.html +3 -3
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/METADATA +2 -1
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/RECORD +223 -211
- prefect/server/ui-v2/assets/artifact._id-BFdf1WUA.js +0 -2
- prefect/server/ui-v2/assets/artifact._id-BFdf1WUA.js.map +0 -1
- prefect/server/ui-v2/assets/automation._id-Dn7jABys.js +0 -2
- prefect/server/ui-v2/assets/block-type-logo-Cbpfxded.js +0 -2
- prefect/server/ui-v2/assets/block-type-logo-Cbpfxded.js.map +0 -1
- prefect/server/ui-v2/assets/catalog_._slug-Bl2J2oI3.js +0 -2
- prefect/server/ui-v2/assets/create-D--LHaji.js +0 -2
- prefect/server/ui-v2/assets/data-table-rlbkLcrY.js +0 -2
- prefect/server/ui-v2/assets/data-table-rlbkLcrY.js.map +0 -1
- prefect/server/ui-v2/assets/delete-confirmation-dialog-DHkm2p8m.js +0 -2
- prefect/server/ui-v2/assets/deployment._id-Ci9zge5n.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.duplicate-D9ZWkh8H.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.edit-CS7sObzC.js +0 -2
- prefect/server/ui-v2/assets/event._eventDate._eventId-D7Twzb22.js +0 -2
- prefect/server/ui-v2/assets/flow-run._id-RLy2kBh0.js +0 -4
- prefect/server/ui-v2/assets/flow._id-BdQGWPKP.js +0 -2
- prefect/server/ui-v2/assets/index-7i4X9TeK.js +0 -2
- prefect/server/ui-v2/assets/index-BkiGTHwU.js +0 -2
- prefect/server/ui-v2/assets/index-BkiGTHwU.js.map +0 -1
- prefect/server/ui-v2/assets/index-COouj_0-.css +0 -1
- prefect/server/ui-v2/assets/index-CiSFHkhI.js +0 -2
- prefect/server/ui-v2/assets/index-DATPYZfT.js +0 -2
- prefect/server/ui-v2/assets/index-DATPYZfT.js.map +0 -1
- prefect/server/ui-v2/assets/index-VH4TnZ4e.js +0 -2
- prefect/server/ui-v2/assets/index-VH4TnZ4e.js.map +0 -1
- prefect/server/ui-v2/assets/python-example-snippet-DfCFYPN_.js +0 -3
- prefect/server/ui-v2/assets/schema-form-CWDHSME9.js.map +0 -1
- prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-S69sih55.js +0 -2
- prefect/server/ui-v2/assets/task-runs-pagination-VdR-LO4r.js +0 -2
- prefect/server/ui-v2/assets/timezone-select-BuPYznge.js +0 -2
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DpdsLH4t.js +0 -2
- prefect/server/ui-v2/assets/use-state-favicon-M09DmrNy.js +0 -2
- prefect/server/ui-v2/assets/vendor-recharts-BAN776s_.js +0 -34
- prefect/server/ui-v2/assets/vendor-recharts-BAN776s_.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool-queue-toggle-BQ9b-Wxy.js +0 -2
- prefect/server/ui-v2/assets/work-pool._workPoolName-C_LiL3SE.js +0 -2
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/WHEEL +0 -0
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev3.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-run._id-B_tIDm4K.js","sources":["../../src/components/task-runs/task-run-artifacts/index.tsx","../../src/components/task-runs/task-run-details/task-run-details.tsx","../../src/components/task-runs/task-run-logs/index.tsx","../../src/components/task-runs/task-run-details-page/index.tsx","../../src/routes/runs/task-run.$id.tsx?tsr-split=component"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { LayoutGrid, Rows3 } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { ArtifactCard } from \"@/components/artifacts/artifact-card\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { cn } from \"@/utils\";\n\ntype TaskRunArtifactsProps = {\n\ttaskRun: TaskRun;\n};\n\nexport const TaskRunArtifacts = ({ taskRun }: TaskRunArtifactsProps) => {\n\tconst [view, setView] = useState<\"grid\" | \"list\">(\"grid\");\n\tconst { data: artifacts } = useSuspenseQuery(\n\t\tbuildListArtifactsQuery({\n\t\t\tartifacts: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\ttask_run_id: {\n\t\t\t\t\tany_: [taskRun.id],\n\t\t\t\t},\n\t\t\t\ttype: {\n\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort: \"ID_DESC\",\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\tif (artifacts.length === 0) {\n\t\treturn (\n\t\t\t<Card>\n\t\t\t\t<CardContent className=\"text-center\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tThis task run did not produce any artifacts; for more information on\n\t\t\t\t\t\tcreating artifacts, see the{\" \"}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"https://docs.prefect.io/v3/develop/artifacts\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName=\"text-blue-500\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tdocumentation\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<ToggleGroup\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tvalue={view}\n\t\t\t\t\tonValueChange={(value) => setView(value as \"grid\" | \"list\")}\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupItem value=\"grid\" aria-label=\"Grid view\">\n\t\t\t\t\t\t<LayoutGrid className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t<ToggleGroupItem value=\"list\" aria-label=\"List view\">\n\t\t\t\t\t\t<Rows3 className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t</ToggleGroup>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid\",\n\t\t\t\t\tview === \"grid\"\n\t\t\t\t\t\t? \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3\"\n\t\t\t\t\t\t: \"grid-cols-1\",\n\t\t\t\t\t\"gap-4\",\n\t\t\t\t)}\n\t\t\t\tdata-testid=\"task-run-artifacts-grid\"\n\t\t\t>\n\t\t\t\t{artifacts.map((artifact) => (\n\t\t\t\t\t<ArtifactCard\n\t\t\t\t\t\tkey={artifact.id}\n\t\t\t\t\t\tartifact={artifact}\n\t\t\t\t\t\tcompact={view === \"list\"}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { Link } from \"@tanstack/react-router\";\nimport humanizeDuration from \"humanize-duration\";\nimport { buildGetTaskRunResultQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyMarkdown } from \"@/components/ui/lazy-markdown\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\nimport { formatDate } from \"@/utils/date\";\n\nfunction formatTaskDate(dateString: string | null | undefined): string {\n\tif (!dateString) return \"N/A\";\n\treturn formatDate(dateString, \"dateTimeNumeric\");\n}\n\nfunction formatTaskDuration(seconds: number | null | undefined): string {\n\tif (seconds === null || seconds === undefined) return \"N/A\";\n\treturn humanizeDuration(seconds * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"s\"],\n\t});\n}\n\nexport type TaskRunDetailsProps = {\n\ttaskRun: TaskRun | null | undefined;\n};\n\nexport const TaskRunDetails = ({ taskRun }: TaskRunDetailsProps) => {\n\tconst { data: resultArtifact } = useQuery({\n\t\t...buildGetTaskRunResultQuery(taskRun?.id ?? \"\"),\n\t\tenabled: !!taskRun?.id,\n\t});\n\n\tif (!taskRun) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-2 bg-gray-100 p-4 rounded-md\">\n\t\t\t\t<span className=\"text-gray-500\">No task run details available</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 p-2 text-xs\">\n\t\t\t{taskRun.flow_run_id ? (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\tclassName=\"text-blue-500 hover:underline cursor-pointer flex items-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon id=\"ExternalLink\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t) : (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>None</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Start Time</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.start_time ? formatTaskDate(taskRun.start_time) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Duration</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t<span className=\"flex items-center\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t{taskRun.total_run_time !== null &&\n\t\t\t\t\t\ttaskRun.total_run_time !== undefined\n\t\t\t\t\t\t\t? formatTaskDuration(taskRun.total_run_time)\n\t\t\t\t\t\t\t: \"None\"}\n\t\t\t\t\t</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Run Count</dt>\n\t\t\t\t<dd className=\"\">{taskRun.run_count ?? 0}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Estimated Run Time</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.estimated_run_time !== null &&\n\t\t\t\t\ttaskRun.estimated_run_time !== undefined\n\t\t\t\t\t\t? formatTaskDuration(taskRun.estimated_run_time)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Created</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.created ? formatTaskDate(taskRun.created) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Last Updated</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.updated ? formatTaskDate(taskRun.updated) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.cache_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Expiration</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.cache_expiration\n\t\t\t\t\t\t? formatTaskDate(taskRun.cache_expiration)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Dynamic Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.dynamic_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Task Run ID</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.id}</dd>\n\t\t\t</dl>\n\n\t\t\t{resultArtifact?.description && (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-muted-foreground\">Result</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<div className=\"prose max-w-none dark:prose-invert\">\n\t\t\t\t\t\t\t<LazyMarkdown>{resultArtifact.description}</LazyMarkdown>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<div className=\"border-t border-gray-200 mt-2 pt-4\" />\n\t\t\t<h3 className=\"text-sm font-semibold mb-2\">Task configuration</h3>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Version</dt>\n\t\t\t\t<dd className=\"\">{taskRun.task_version || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retries</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retries?.toString() ?? \"0\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Delay</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{typeof taskRun.empirical_policy?.retry_delay === \"number\"\n\t\t\t\t\t\t? formatTaskDuration(taskRun.empirical_policy.retry_delay)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Jitter Factor</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retry_jitter_factor !== null &&\n\t\t\t\t\ttaskRun.empirical_policy?.retry_jitter_factor !== undefined\n\t\t\t\t\t\t? taskRun.empirical_policy.retry_jitter_factor.toString()\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Tags</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.tags && taskRun.tags.length > 0 ? (\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t\t{taskRun.tags.map((tag) => (\n\t\t\t\t\t\t\t\t<TagBadge key={tag} tag={tag} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"None\"\n\t\t\t\t\t)}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t</div>\n\t);\n};\n","import { useSuspenseInfiniteQuery } from \"@tanstack/react-query\";\nimport { useMemo, useState } from \"react\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport type { components } from \"@/api/prefect\";\nimport { RunLogs } from \"@/components/ui/run-logs\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\ntype TaskRunLogsProps = {\n\ttaskRun: components[\"schemas\"][\"TaskRun\"];\n\tvirtualize?: boolean;\n};\n\nexport const TaskRunLogs = ({\n\ttaskRun,\n\tvirtualize = true,\n}: TaskRunLogsProps) => {\n\tconst [levelFilter, setLevelFilter] = useState<number>(0);\n\tconst [sortOrder, setSortOrder] = useState<\n\t\t\"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\"\n\t>(\"TIMESTAMP_ASC\");\n\n\tconst queryOptions = useMemo(\n\t\t() => ({\n\t\t\t...buildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: sortOrder,\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: { ge_: levelFilter },\n\t\t\t\t\ttask_run_id: { any_: [taskRun.id] },\n\t\t\t\t},\n\t\t\t}),\n\t\t\trefetchInterval:\n\t\t\t\ttaskRun.state_type === \"RUNNING\" ? 5000 : (false as const),\n\t\t}),\n\t\t[levelFilter, sortOrder, taskRun.id, taskRun.state_type],\n\t);\n\n\tconst {\n\t\tdata: logs,\n\t\thasNextPage,\n\t\tfetchNextPage,\n\t\tisFetchingNextPage,\n\t} = useSuspenseInfiniteQuery(queryOptions);\n\n\tconst noLogs = logs.pages.length === 1 && logs.pages[0].length === 0;\n\tlet message = \"This run did not produce any logs.\";\n\tif (noLogs) {\n\t\tif (levelFilter > 0) {\n\t\t\tmessage = \"No logs match your filter criteria\";\n\t\t} else if (\n\t\t\ttaskRun.state_type === \"SCHEDULED\" &&\n\t\t\ttaskRun.state_name === \"Scheduled\"\n\t\t) {\n\t\t\tmessage = \"Run has not yet started. Check back soon for logs.\";\n\t\t} else if (taskRun.state_type === \"RUNNING\") {\n\t\t\tmessage = \"Waiting for logs...\";\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<LogLevelFilter\n\t\t\t\t\tlevelFilter={levelFilter}\n\t\t\t\t\tsetLevelFilter={setLevelFilter}\n\t\t\t\t/>\n\t\t\t\t<LogSortOrder sortOrder={sortOrder} setSortOrder={setSortOrder} />\n\t\t\t</div>\n\t\t\t{noLogs ? (\n\t\t\t\t<div className=\"flex flex-col gap-2 text-center bg-muted p-2 rounded-md\">\n\t\t\t\t\t<span className=\"text-muted-foreground\">{message}</span>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div className=\"rounded-md\">\n\t\t\t\t\t<RunLogs\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tlogs={logs.pages.flat()}\n\t\t\t\t\t\tonBottomReached={() => {\n\t\t\t\t\t\t\tif (hasNextPage && !isFetchingNextPage) {\n\t\t\t\t\t\t\t\tfetchNextPage().catch((error) => {\n\t\t\t\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"max-h-[85vh]\"\n\t\t\t\t\t\tvirtualize={virtualize}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nconst LEVEL_FILTER_OPTIONS = [\n\t{ label: \"All\", value: 0 },\n\t{ label: \"Critical only\", value: 50 },\n\t{ label: \"Error and above\", value: 40 },\n\t{ label: \"Warning and above\", value: 30 },\n\t{ label: \"Info and above\", value: 20 },\n\t{ label: \"Debug and above\", value: 10 },\n] as const;\n\nconst LogLevelFilter = ({\n\tlevelFilter,\n\tsetLevelFilter,\n}: {\n\tlevelFilter: number;\n\tsetLevelFilter: (level: number) => void;\n}) => {\n\treturn (\n\t\t<Select\n\t\t\tvalue={levelFilter.toString()}\n\t\t\tonValueChange={(value) => setLevelFilter(Number(value))}\n\t\t>\n\t\t\t<SelectTrigger aria-label=\"log level filter\">\n\t\t\t\t<span>\n\t\t\t\t\t{`Level:\n\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\tLEVEL_FILTER_OPTIONS.find(\n\t\t\t\t\t\t\t\t\t(option) => option.value === levelFilter,\n\t\t\t\t\t\t\t\t)?.label\n\t\t\t\t\t\t\t}`}\n\t\t\t\t</span>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t{LEVEL_FILTER_OPTIONS.map((option) => (\n\t\t\t\t\t<SelectItem key={option.value} value={option.value.toString()}>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n\nconst LogSortOrder = ({\n\tsortOrder,\n\tsetSortOrder,\n}: {\n\tsortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\";\n\tsetSortOrder: (sortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\") => void;\n}) => (\n\t<Select\n\t\tvalue={sortOrder}\n\t\tonValueChange={(value) =>\n\t\t\tsetSortOrder(value as \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\")\n\t\t}\n\t>\n\t\t<SelectTrigger aria-label=\"log sort order\">\n\t\t\t<SelectValue placeholder=\"Sort log order\" />\n\t\t</SelectTrigger>\n\t\t<SelectContent>\n\t\t\t<SelectItem value=\"TIMESTAMP_ASC\">Oldest to newest</SelectItem>\n\t\t\t<SelectItem value=\"TIMESTAMP_DESC\">Newest to oldest</SelectItem>\n\t\t</SelectContent>\n\t</Select>\n);\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport { MoreVertical } from \"lucide-react\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport {\n\tbuildGetTaskRunDetailsQuery,\n\ttype TaskRun,\n\tuseDeleteTaskRun,\n\tuseSetTaskRunState,\n} from \"@/api/task-runs\";\nimport { TaskRunArtifacts } from \"@/components/task-runs/task-run-artifacts\";\nimport { TaskRunDetails } from \"@/components/task-runs/task-run-details/task-run-details\";\nimport { TaskRunLogs } from \"@/components/task-runs/task-run-logs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tChangeStateDialog,\n\tuseChangeStateDialog,\n} from \"@/components/ui/change-state-dialog\";\nimport {\n\tDeleteConfirmationDialog,\n\tuseDeleteConfirmationDialog,\n} from \"@/components/ui/delete-confirmation-dialog\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyJsonInput as JsonInput } from \"@/components/ui/json-input-lazy\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { usePageTitle } from \"@/hooks/use-page-title\";\nimport { useStateFavicon } from \"@/hooks/use-state-favicon\";\n\ntype TaskRunDetailsPageProps = {\n\tid: string;\n\ttab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n};\n\ntype TaskRunDetailsTabOptions = \"Logs\" | \"Artifacts\" | \"TaskInputs\" | \"Details\";\n\nexport const TaskRunDetailsPage = ({\n\tid,\n\ttab,\n\tonTabChange,\n}: TaskRunDetailsPageProps) => {\n\tconst [refetchInterval, setRefetchInterval] = useState<number | false>(false);\n\tconst { data: taskRun } = useSuspenseQuery({\n\t\t...buildGetTaskRunDetailsQuery(id),\n\t\trefetchInterval,\n\t});\n\tconst { deleteTaskRun } = useDeleteTaskRun();\n\tconst { navigate } = useRouter();\n\n\t// Set page title based on task run name\n\tusePageTitle(taskRun?.name ? `Task Run: ${taskRun.name}` : \"Task Run\");\n\n\t// Set favicon based on task run state\n\tuseStateFavicon(taskRun?.state_type);\n\n\tuseEffect(() => {\n\t\tif (taskRun.state_type === \"RUNNING\" || taskRun.state_type === \"PENDING\") {\n\t\t\tsetRefetchInterval(5000);\n\t\t} else {\n\t\t\tsetRefetchInterval(false);\n\t\t}\n\t}, [taskRun]);\n\n\tconst onDeleteRunClicked = () => {\n\t\tdeleteTaskRun(\n\t\t\t{ id: taskRun.id },\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\tsetRefetchInterval(false);\n\t\t\t\t\ttoast.success(\"Task run deleted\");\n\t\t\t\t\tif (taskRun.flow_run_id) {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\t\t\t\tparams: { id: taskRun.flow_run_id },\n\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvoid navigate({ to: \"/runs\", replace: true });\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 deleting task run.\";\n\t\t\t\t\ttoast.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t<Header taskRun={taskRun} onDeleteRunClicked={onDeleteRunClicked} />\n\t\t\t</div>\n\t\t\t<div className=\"grid lg:grid-cols-[1fr_250px] grid-cols-[1fr] gap-4\">\n\t\t\t\t<TabsLayout\n\t\t\t\t\tcurrentTab={tab}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t\tlogsContent={\n\t\t\t\t\t\t<Suspense fallback={<LogsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunLogs taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\tartifactsContent={\n\t\t\t\t\t\t<Suspense fallback={<ArtifactsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunArtifacts taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\ttaskInputsContent={<TaskInputs taskRun={taskRun} />}\n\t\t\t\t\tdetailsContent={<TaskRunDetails taskRun={taskRun} />}\n\t\t\t\t/>\n\t\t\t\t<div className=\"hidden lg:block\">\n\t\t\t\t\t<TaskRunDetails taskRun={taskRun} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst Header = ({\n\ttaskRun,\n\tonDeleteRunClicked,\n}: {\n\ttaskRun: TaskRun;\n\tonDeleteRunClicked: () => void;\n}) => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\tconst {\n\t\topen: isChangeStateOpen,\n\t\tonOpenChange: setChangeStateOpen,\n\t\topenDialog: openChangeState,\n\t} = useChangeStateDialog();\n\tconst { setTaskRunState, isPending: isChangingState } = useSetTaskRunState();\n\n\tconst canChangeState =\n\t\ttaskRun.state_type &&\n\t\t[\"COMPLETED\", \"FAILED\", \"CANCELLED\", \"CRASHED\"].includes(\n\t\t\ttaskRun.state_type,\n\t\t);\n\n\tconst handleChangeState = (newState: { type: string; message?: string }) => {\n\t\tsetTaskRunState(\n\t\t\t{\n\t\t\t\tid: taskRun.id,\n\t\t\t\tstate: {\n\t\t\t\t\ttype: newState.type as\n\t\t\t\t\t\t| \"COMPLETED\"\n\t\t\t\t\t\t| \"FAILED\"\n\t\t\t\t\t\t| \"CANCELLED\"\n\t\t\t\t\t\t| \"CRASHED\",\n\t\t\t\t\tname: newState.type.charAt(0) + newState.type.slice(1).toLowerCase(),\n\t\t\t\t\tmessage: newState.message,\n\t\t\t\t},\n\t\t\t\tforce: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Task run state changed\");\n\t\t\t\t\tsetChangeStateOpen(false);\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\ttoast.error(error.message || \"Failed to change state\");\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tto=\"/runs\"\n\t\t\t\t\t\t\tsearch={{ tab: \"task-runs\" }}\n\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRuns\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t{taskRun.flow_run_id && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl\">\n\t\t\t\t\t\t<BreadcrumbPage className=\"font-semibold\">\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbPage>\n\t\t\t\t\t\t{taskRun.state && (\n\t\t\t\t\t\t\t<StateBadge\n\t\t\t\t\t\t\t\ttype={taskRun.state.type}\n\t\t\t\t\t\t\t\tname={taskRun.state.name}\n\t\t\t\t\t\t\t\tclassName=\"ml-2\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button variant=\"outline\" className=\"p-2\">\n\t\t\t\t\t\t<MoreVertical className=\"w-4 h-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t{canChangeState && (\n\t\t\t\t\t\t<DropdownMenuItem onClick={openChangeState}>\n\t\t\t\t\t\t\tChange state\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t)}\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\ttoast.success(\"Copied task run ID to clipboard\");\n\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(taskRun.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tCopy ID\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tconfirmDelete({\n\t\t\t\t\t\t\t\ttitle: \"Delete Task Run\",\n\t\t\t\t\t\t\t\tdescription: `Are you sure you want to delete task run ${taskRun.name}?`,\n\t\t\t\t\t\t\t\tonConfirm: onDeleteRunClicked,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t\t<DeleteConfirmationDialog {...dialogState} />\n\t\t\t<ChangeStateDialog\n\t\t\t\topen={isChangeStateOpen}\n\t\t\t\tonOpenChange={setChangeStateOpen}\n\t\t\t\tcurrentState={\n\t\t\t\t\ttaskRun.state\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: taskRun.state.type,\n\t\t\t\t\t\t\t\tname:\n\t\t\t\t\t\t\t\t\ttaskRun.state.name ??\n\t\t\t\t\t\t\t\t\ttaskRun.state.type.charAt(0) +\n\t\t\t\t\t\t\t\t\t\ttaskRun.state.type.slice(1).toLowerCase(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t\tlabel=\"Task Run\"\n\t\t\t\tonConfirm={handleChangeState}\n\t\t\t\tisLoading={isChangingState}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst TabsLayout = ({\n\tcurrentTab,\n\tonTabChange,\n\tlogsContent,\n\tartifactsContent,\n\ttaskInputsContent,\n\tdetailsContent,\n}: {\n\tcurrentTab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n\tlogsContent: React.ReactNode;\n\tartifactsContent: React.ReactNode;\n\ttaskInputsContent: React.ReactNode;\n\tdetailsContent: React.ReactNode;\n}) => {\n\t// Change tab on screen size change when the details tab is selected\n\tuseEffect(() => {\n\t\tconst bp = getComputedStyle(document.documentElement)\n\t\t\t.getPropertyValue(\"--breakpoint-lg\")\n\t\t\t.trim();\n\t\tconst mql = window.matchMedia(`(max-width: ${bp})`);\n\t\tconst onChange = () => {\n\t\t\tif (currentTab === \"Details\") {\n\t\t\t\tonTabChange(\"Logs\");\n\t\t\t}\n\t\t};\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, [currentTab, onTabChange]);\n\n\treturn (\n\t\t<Tabs\n\t\t\tvalue={currentTab}\n\t\t\tonValueChange={(value) => onTabChange(value as TaskRunDetailsTabOptions)}\n\t\t>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger value=\"Details\" className=\"lg:hidden\">\n\t\t\t\t\tDetails\n\t\t\t\t</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Logs\">Logs</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Artifacts\">Artifacts</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"TaskInputs\">\n\t\t\t\t\tTask Inputs\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<Icon id=\"Info\" className=\"w-4 h-4\" />\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\tTask inputs show parameter keys and can also show task run\n\t\t\t\t\t\t\trelationships.\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value=\"Details\">{detailsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Logs\">{logsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Artifacts\">{artifactsContent}</TabsContent>\n\t\t\t<TabsContent value=\"TaskInputs\">{taskInputsContent}</TabsContent>\n\t\t</Tabs>\n\t);\n};\n\nconst LogsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-25\" />\n\t\t\t\t<Skeleton className=\"h-8 w-32\" />\n\t\t\t</div>\n\t\t\t<Skeleton className=\"h-32\" />\n\t\t</div>\n\t);\n};\n\nconst ArtifactsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-12\" />\n\t\t\t</div>\n\n\t\t\t<div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2 xl:grid-cols-3\">\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst TaskInputs = ({ taskRun }: { taskRun: TaskRun }) => {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={JSON.stringify(taskRun.task_inputs, null, 2)}\n\t\t\tdisabled\n\t\t\tcopy\n\t\t/>\n\t);\n};\n","import type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { TaskRunDetailsPage } from \"@/components/task-runs/task-run-details-page\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\nconst searchParams = z.object({\n\ttab: z\n\t\t.enum([\"Logs\", \"Artifacts\", \"TaskInputs\", \"Details\"])\n\t\t.default(\"Logs\")\n\t\t.catch(\"Logs\"),\n});\n\nexport type TaskRunDetailsTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nfunction TaskRunErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load task run\");\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h1 className=\"text-2xl font-semibold\">Task Run</h1>\n\t\t\t</div>\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/runs/task-run/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// ----- Deferred data\n\t\tvoid queryClient.prefetchInfiniteQuery(\n\t\t\tbuildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: \"TIMESTAMP_ASC\",\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: {\n\t\t\t\t\t\tge_: 0,\n\t\t\t\t\t},\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tvoid queryClient.prefetchQuery(\n\t\t\tbuildListArtifactsQuery({\n\t\t\t\tartifacts: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tnot_any_: [\"result\"],\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\n\t\t// ----- Critical data\n\t\tawait queryClient.ensureQueryData(buildGetTaskRunDetailsQuery(params.id));\n\t},\n\twrapInSuspense: true,\n\terrorComponent: TaskRunErrorComponent,\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\tconst { tab } = Route.useSearch();\n\tconst navigate = useNavigate();\n\n\tconst onTabChange = (tab: TaskRunDetailsTabOptions) => {\n\t\tvoid navigate({\n\t\t\tto: \".\",\n\t\t\tsearch: (prev) => ({\n\t\t\t\t...prev,\n\t\t\t\ttab,\n\t\t\t}),\n\t\t});\n\t};\n\n\treturn <TaskRunDetailsPage id={id} tab={tab} onTabChange={onTabChange} />;\n}\n"],"names":["TaskRunArtifacts","taskRun","view","setView","useState","artifacts","useSuspenseQuery","buildListArtifactsQuery","Card","jsx","CardContent","jsxs","ToggleGroup","value","ToggleGroupItem","LayoutGrid","Rows3","cn","artifact","ArtifactCard","formatTaskDate","dateString","formatDate","formatTaskDuration","seconds","humanizeDuration","TaskRunDetails","resultArtifact","useQuery","buildGetTaskRunResultQuery","Link","Icon","LazyMarkdown","tag","TagBadge","TaskRunLogs","virtualize","levelFilter","setLevelFilter","sortOrder","setSortOrder","queryOptions","useMemo","buildInfiniteFilterLogsQuery","logs","hasNextPage","fetchNextPage","isFetchingNextPage","useSuspenseInfiniteQuery","noLogs","message","LogLevelFilter","LogSortOrder","RunLogs","error","LEVEL_FILTER_OPTIONS","Select","SelectTrigger","option","SelectContent","SelectItem","SelectValue","TaskRunDetailsPage","id","tab","onTabChange","refetchInterval","setRefetchInterval","buildGetTaskRunDetailsQuery","deleteTaskRun","useDeleteTaskRun","navigate","useRouter","usePageTitle","useStateFavicon","useEffect","onDeleteRunClicked","toast","Header","TabsLayout","Suspense","LogsSkeleton","ArtifactsSkeleton","TaskInputs","dialogState","confirmDelete","useDeleteConfirmationDialog","isChangeStateOpen","setChangeStateOpen","openChangeState","useChangeStateDialog","setTaskRunState","isChangingState","useSetTaskRunState","canChangeState","handleChangeState","newState","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","Fragment","BreadcrumbPage","StateBadge","DropdownMenu","DropdownMenuTrigger","Button","MoreVertical","DropdownMenuContent","DropdownMenuItem","DeleteConfirmationDialog","ChangeStateDialog","currentTab","logsContent","artifactsContent","taskInputsContent","detailsContent","bp","mql","onChange","Tabs","TabsList","TabsTrigger","Tooltip","TooltipTrigger","TooltipContent","TabsContent","Skeleton","JsonInput","z","default","catch","RouteComponent","Route","useParams","useSearch","useNavigate","to","search","prev"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task-run._id-u73Jxfqw.js","sources":["../../src/components/task-runs/task-run-artifacts/index.tsx","../../src/components/task-runs/task-run-details/task-run-details.tsx","../../src/components/task-runs/task-run-logs/index.tsx","../../src/components/task-runs/task-run-details-page/index.tsx","../../src/routes/runs/task-run.$id.tsx?tsr-split=component"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { LayoutGrid, Rows3 } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { ArtifactCard } from \"@/components/artifacts/artifact-card\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { cn } from \"@/utils\";\n\ntype TaskRunArtifactsProps = {\n\ttaskRun: TaskRun;\n};\n\nexport const TaskRunArtifacts = ({ taskRun }: TaskRunArtifactsProps) => {\n\tconst [view, setView] = useState<\"grid\" | \"list\">(\"grid\");\n\tconst { data: artifacts } = useSuspenseQuery(\n\t\tbuildListArtifactsQuery({\n\t\t\tartifacts: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\ttask_run_id: {\n\t\t\t\t\tany_: [taskRun.id],\n\t\t\t\t},\n\t\t\t\ttype: {\n\t\t\t\t\tnot_any_: [\"result\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort: \"ID_DESC\",\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\tif (artifacts.length === 0) {\n\t\treturn (\n\t\t\t<Card>\n\t\t\t\t<CardContent className=\"text-center\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\tThis task run did not produce any artifacts; for more information on\n\t\t\t\t\t\tcreating artifacts, see the{\" \"}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"https://docs.prefect.io/v3/develop/artifacts\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName=\"text-blue-500\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tdocumentation\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t</CardContent>\n\t\t\t</Card>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t<ToggleGroup\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tvalue={view}\n\t\t\t\t\tonValueChange={(value) => setView(value as \"grid\" | \"list\")}\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupItem value=\"grid\" aria-label=\"Grid view\">\n\t\t\t\t\t\t<LayoutGrid className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t<ToggleGroupItem value=\"list\" aria-label=\"List view\">\n\t\t\t\t\t\t<Rows3 className=\"w-4 h-4\" />\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t</ToggleGroup>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"grid\",\n\t\t\t\t\tview === \"grid\"\n\t\t\t\t\t\t? \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3\"\n\t\t\t\t\t\t: \"grid-cols-1\",\n\t\t\t\t\t\"gap-4\",\n\t\t\t\t)}\n\t\t\t\tdata-testid=\"task-run-artifacts-grid\"\n\t\t\t>\n\t\t\t\t{artifacts.map((artifact) => (\n\t\t\t\t\t<ArtifactCard\n\t\t\t\t\t\tkey={artifact.id}\n\t\t\t\t\t\tartifact={artifact}\n\t\t\t\t\t\tcompact={view === \"list\"}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { Link } from \"@tanstack/react-router\";\nimport humanizeDuration from \"humanize-duration\";\nimport { buildGetTaskRunResultQuery } from \"@/api/artifacts\";\nimport type { TaskRun } from \"@/api/task-runs\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyMarkdown } from \"@/components/ui/lazy-markdown\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\nimport { formatDate } from \"@/utils/date\";\n\nfunction formatTaskDate(dateString: string | null | undefined): string {\n\tif (!dateString) return \"N/A\";\n\treturn formatDate(dateString, \"dateTimeNumeric\");\n}\n\nfunction formatTaskDuration(seconds: number | null | undefined): string {\n\tif (seconds === null || seconds === undefined) return \"N/A\";\n\treturn humanizeDuration(seconds * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"s\"],\n\t});\n}\n\nexport type TaskRunDetailsProps = {\n\ttaskRun: TaskRun | null | undefined;\n};\n\nexport const TaskRunDetails = ({ taskRun }: TaskRunDetailsProps) => {\n\tconst { data: resultArtifact } = useQuery({\n\t\t...buildGetTaskRunResultQuery(taskRun?.id ?? \"\"),\n\t\tenabled: !!taskRun?.id,\n\t});\n\n\tif (!taskRun) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-2 bg-gray-100 p-4 rounded-md\">\n\t\t\t\t<span className=\"text-gray-500\">No task run details available</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2 p-2 text-xs\">\n\t\t\t{taskRun.flow_run_id ? (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\tclassName=\"text-blue-500 hover:underline cursor-pointer flex items-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon id=\"ExternalLink\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t) : (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-gray-500\">Flow Run</dt>\n\t\t\t\t\t<dd>None</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Start Time</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.start_time ? formatTaskDate(taskRun.start_time) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Duration</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t<span className=\"flex items-center\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"mr-1 size-4\" />\n\t\t\t\t\t\t{taskRun.total_run_time !== null &&\n\t\t\t\t\t\ttaskRun.total_run_time !== undefined\n\t\t\t\t\t\t\t? formatTaskDuration(taskRun.total_run_time)\n\t\t\t\t\t\t\t: \"None\"}\n\t\t\t\t\t</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Run Count</dt>\n\t\t\t\t<dd className=\"\">{taskRun.run_count ?? 0}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Estimated Run Time</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.estimated_run_time !== null &&\n\t\t\t\t\ttaskRun.estimated_run_time !== undefined\n\t\t\t\t\t\t? formatTaskDuration(taskRun.estimated_run_time)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Created</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.created ? formatTaskDate(taskRun.created) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Last Updated</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.updated ? formatTaskDate(taskRun.updated) : \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.cache_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Cache Expiration</dt>\n\t\t\t\t<dd className=\"font-mono\">\n\t\t\t\t\t{taskRun.cache_expiration\n\t\t\t\t\t\t? formatTaskDate(taskRun.cache_expiration)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Dynamic Key</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.dynamic_key || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Task Run ID</dt>\n\t\t\t\t<dd className=\"font-mono\">{taskRun.id}</dd>\n\t\t\t</dl>\n\n\t\t\t{resultArtifact?.description && (\n\t\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t\t<dt className=\"text-muted-foreground\">Result</dt>\n\t\t\t\t\t<dd>\n\t\t\t\t\t\t<div className=\"prose max-w-none dark:prose-invert\">\n\t\t\t\t\t\t\t<LazyMarkdown>{resultArtifact.description}</LazyMarkdown>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</dd>\n\t\t\t\t</dl>\n\t\t\t)}\n\n\t\t\t<div className=\"border-t border-gray-200 mt-2 pt-4\" />\n\t\t\t<h3 className=\"text-sm font-semibold mb-2\">Task configuration</h3>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Version</dt>\n\t\t\t\t<dd className=\"\">{taskRun.task_version || \"None\"}</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retries</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retries?.toString() ?? \"0\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Delay</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{typeof taskRun.empirical_policy?.retry_delay === \"number\"\n\t\t\t\t\t\t? formatTaskDuration(taskRun.empirical_policy.retry_delay)\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\"text-gray-500\">Retry Jitter Factor</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.empirical_policy?.retry_jitter_factor !== null &&\n\t\t\t\t\ttaskRun.empirical_policy?.retry_jitter_factor !== undefined\n\t\t\t\t\t\t? taskRun.empirical_policy.retry_jitter_factor.toString()\n\t\t\t\t\t\t: \"None\"}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\n\t\t\t<dl className=\"flex flex-col gap-1 mb-2\">\n\t\t\t\t<dt className=\" text-gray-500\">Tags</dt>\n\t\t\t\t<dd className=\"\">\n\t\t\t\t\t{taskRun.tags && taskRun.tags.length > 0 ? (\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-1\">\n\t\t\t\t\t\t\t{taskRun.tags.map((tag) => (\n\t\t\t\t\t\t\t\t<TagBadge key={tag} tag={tag} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"None\"\n\t\t\t\t\t)}\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t</div>\n\t);\n};\n","import { useSuspenseInfiniteQuery } from \"@tanstack/react-query\";\nimport { useMemo, useState } from \"react\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport type { components } from \"@/api/prefect\";\nimport { RunLogs } from \"@/components/ui/run-logs\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\ntype TaskRunLogsProps = {\n\ttaskRun: components[\"schemas\"][\"TaskRun\"];\n\tvirtualize?: boolean;\n};\n\nexport const TaskRunLogs = ({\n\ttaskRun,\n\tvirtualize = true,\n}: TaskRunLogsProps) => {\n\tconst [levelFilter, setLevelFilter] = useState<number>(0);\n\tconst [sortOrder, setSortOrder] = useState<\n\t\t\"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\"\n\t>(\"TIMESTAMP_ASC\");\n\n\tconst queryOptions = useMemo(\n\t\t() => ({\n\t\t\t...buildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: sortOrder,\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: { ge_: levelFilter },\n\t\t\t\t\ttask_run_id: { any_: [taskRun.id] },\n\t\t\t\t},\n\t\t\t}),\n\t\t\trefetchInterval:\n\t\t\t\ttaskRun.state_type === \"RUNNING\" ? 5000 : (false as const),\n\t\t}),\n\t\t[levelFilter, sortOrder, taskRun.id, taskRun.state_type],\n\t);\n\n\tconst {\n\t\tdata: logs,\n\t\thasNextPage,\n\t\tfetchNextPage,\n\t\tisFetchingNextPage,\n\t} = useSuspenseInfiniteQuery(queryOptions);\n\n\tconst noLogs = logs.pages.length === 1 && logs.pages[0].length === 0;\n\tlet message = \"This run did not produce any logs.\";\n\tif (noLogs) {\n\t\tif (levelFilter > 0) {\n\t\t\tmessage = \"No logs match your filter criteria\";\n\t\t} else if (\n\t\t\ttaskRun.state_type === \"SCHEDULED\" &&\n\t\t\ttaskRun.state_name === \"Scheduled\"\n\t\t) {\n\t\t\tmessage = \"Run has not yet started. Check back soon for logs.\";\n\t\t} else if (taskRun.state_type === \"RUNNING\") {\n\t\t\tmessage = \"Waiting for logs...\";\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<LogLevelFilter\n\t\t\t\t\tlevelFilter={levelFilter}\n\t\t\t\t\tsetLevelFilter={setLevelFilter}\n\t\t\t\t/>\n\t\t\t\t<LogSortOrder sortOrder={sortOrder} setSortOrder={setSortOrder} />\n\t\t\t</div>\n\t\t\t{noLogs ? (\n\t\t\t\t<div className=\"flex flex-col gap-2 text-center bg-muted p-2 rounded-md\">\n\t\t\t\t\t<span className=\"text-muted-foreground\">{message}</span>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<div className=\"rounded-md\">\n\t\t\t\t\t<RunLogs\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tlogs={logs.pages.flat()}\n\t\t\t\t\t\tonBottomReached={() => {\n\t\t\t\t\t\t\tif (hasNextPage && !isFetchingNextPage) {\n\t\t\t\t\t\t\t\tfetchNextPage().catch((error) => {\n\t\t\t\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"max-h-[85vh]\"\n\t\t\t\t\t\tvirtualize={virtualize}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nconst LEVEL_FILTER_OPTIONS = [\n\t{ label: \"All\", value: 0 },\n\t{ label: \"Critical only\", value: 50 },\n\t{ label: \"Error and above\", value: 40 },\n\t{ label: \"Warning and above\", value: 30 },\n\t{ label: \"Info and above\", value: 20 },\n\t{ label: \"Debug and above\", value: 10 },\n] as const;\n\nconst LogLevelFilter = ({\n\tlevelFilter,\n\tsetLevelFilter,\n}: {\n\tlevelFilter: number;\n\tsetLevelFilter: (level: number) => void;\n}) => {\n\treturn (\n\t\t<Select\n\t\t\tvalue={levelFilter.toString()}\n\t\t\tonValueChange={(value) => setLevelFilter(Number(value))}\n\t\t>\n\t\t\t<SelectTrigger aria-label=\"log level filter\">\n\t\t\t\t<span>\n\t\t\t\t\t{`Level:\n\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\tLEVEL_FILTER_OPTIONS.find(\n\t\t\t\t\t\t\t\t\t(option) => option.value === levelFilter,\n\t\t\t\t\t\t\t\t)?.label\n\t\t\t\t\t\t\t}`}\n\t\t\t\t</span>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t{LEVEL_FILTER_OPTIONS.map((option) => (\n\t\t\t\t\t<SelectItem key={option.value} value={option.value.toString()}>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n\nconst LogSortOrder = ({\n\tsortOrder,\n\tsetSortOrder,\n}: {\n\tsortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\";\n\tsetSortOrder: (sortOrder: \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\") => void;\n}) => (\n\t<Select\n\t\tvalue={sortOrder}\n\t\tonValueChange={(value) =>\n\t\t\tsetSortOrder(value as \"TIMESTAMP_ASC\" | \"TIMESTAMP_DESC\")\n\t\t}\n\t>\n\t\t<SelectTrigger aria-label=\"log sort order\">\n\t\t\t<SelectValue placeholder=\"Sort log order\" />\n\t\t</SelectTrigger>\n\t\t<SelectContent>\n\t\t\t<SelectItem value=\"TIMESTAMP_ASC\">Oldest to newest</SelectItem>\n\t\t\t<SelectItem value=\"TIMESTAMP_DESC\">Newest to oldest</SelectItem>\n\t\t</SelectContent>\n\t</Select>\n);\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport { MoreVertical } from \"lucide-react\";\nimport { Suspense, useEffect, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport {\n\tbuildGetTaskRunDetailsQuery,\n\ttype TaskRun,\n\tuseDeleteTaskRun,\n\tuseSetTaskRunState,\n} from \"@/api/task-runs\";\nimport { TaskRunArtifacts } from \"@/components/task-runs/task-run-artifacts\";\nimport { TaskRunDetails } from \"@/components/task-runs/task-run-details/task-run-details\";\nimport { TaskRunLogs } from \"@/components/task-runs/task-run-logs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tChangeStateDialog,\n\tuseChangeStateDialog,\n} from \"@/components/ui/change-state-dialog\";\nimport {\n\tDeleteConfirmationDialog,\n\tuseDeleteConfirmationDialog,\n} from \"@/components/ui/delete-confirmation-dialog\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { LazyJsonInput as JsonInput } from \"@/components/ui/json-input-lazy\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { usePageTitle } from \"@/hooks/use-page-title\";\nimport { useStateFavicon } from \"@/hooks/use-state-favicon\";\n\ntype TaskRunDetailsPageProps = {\n\tid: string;\n\ttab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n};\n\ntype TaskRunDetailsTabOptions = \"Logs\" | \"Artifacts\" | \"TaskInputs\" | \"Details\";\n\nexport const TaskRunDetailsPage = ({\n\tid,\n\ttab,\n\tonTabChange,\n}: TaskRunDetailsPageProps) => {\n\tconst [refetchInterval, setRefetchInterval] = useState<number | false>(false);\n\tconst { data: taskRun } = useSuspenseQuery({\n\t\t...buildGetTaskRunDetailsQuery(id),\n\t\trefetchInterval,\n\t});\n\tconst { deleteTaskRun } = useDeleteTaskRun();\n\tconst { navigate } = useRouter();\n\n\t// Set page title based on task run name\n\tusePageTitle(taskRun?.name ? `Task Run: ${taskRun.name}` : \"Task Run\");\n\n\t// Set favicon based on task run state\n\tuseStateFavicon(taskRun?.state_type);\n\n\tuseEffect(() => {\n\t\tif (taskRun.state_type === \"RUNNING\" || taskRun.state_type === \"PENDING\") {\n\t\t\tsetRefetchInterval(5000);\n\t\t} else {\n\t\t\tsetRefetchInterval(false);\n\t\t}\n\t}, [taskRun]);\n\n\tconst onDeleteRunClicked = () => {\n\t\tdeleteTaskRun(\n\t\t\t{ id: taskRun.id },\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\tsetRefetchInterval(false);\n\t\t\t\t\ttoast.success(\"Task run deleted\");\n\t\t\t\t\tif (taskRun.flow_run_id) {\n\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\tto: \"/runs/flow-run/$id\",\n\t\t\t\t\t\t\tparams: { id: taskRun.flow_run_id },\n\t\t\t\t\t\t\treplace: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvoid navigate({ to: \"/runs\", replace: true });\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 deleting task run.\";\n\t\t\t\t\ttoast.error(message);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t<Header taskRun={taskRun} onDeleteRunClicked={onDeleteRunClicked} />\n\t\t\t</div>\n\t\t\t<div className=\"grid lg:grid-cols-[1fr_250px] grid-cols-[1fr] gap-4\">\n\t\t\t\t<TabsLayout\n\t\t\t\t\tcurrentTab={tab}\n\t\t\t\t\tonTabChange={onTabChange}\n\t\t\t\t\tlogsContent={\n\t\t\t\t\t\t<Suspense fallback={<LogsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunLogs taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\tartifactsContent={\n\t\t\t\t\t\t<Suspense fallback={<ArtifactsSkeleton />}>\n\t\t\t\t\t\t\t<TaskRunArtifacts taskRun={taskRun} />\n\t\t\t\t\t\t</Suspense>\n\t\t\t\t\t}\n\t\t\t\t\ttaskInputsContent={<TaskInputs taskRun={taskRun} />}\n\t\t\t\t\tdetailsContent={<TaskRunDetails taskRun={taskRun} />}\n\t\t\t\t/>\n\t\t\t\t<div className=\"hidden lg:block\">\n\t\t\t\t\t<TaskRunDetails taskRun={taskRun} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst Header = ({\n\ttaskRun,\n\tonDeleteRunClicked,\n}: {\n\ttaskRun: TaskRun;\n\tonDeleteRunClicked: () => void;\n}) => {\n\tconst [dialogState, confirmDelete] = useDeleteConfirmationDialog();\n\tconst {\n\t\topen: isChangeStateOpen,\n\t\tonOpenChange: setChangeStateOpen,\n\t\topenDialog: openChangeState,\n\t} = useChangeStateDialog();\n\tconst { setTaskRunState, isPending: isChangingState } = useSetTaskRunState();\n\n\tconst canChangeState =\n\t\ttaskRun.state_type &&\n\t\t[\"COMPLETED\", \"FAILED\", \"CANCELLED\", \"CRASHED\"].includes(\n\t\t\ttaskRun.state_type,\n\t\t);\n\n\tconst handleChangeState = (newState: { type: string; message?: string }) => {\n\t\tsetTaskRunState(\n\t\t\t{\n\t\t\t\tid: taskRun.id,\n\t\t\t\tstate: {\n\t\t\t\t\ttype: newState.type as\n\t\t\t\t\t\t| \"COMPLETED\"\n\t\t\t\t\t\t| \"FAILED\"\n\t\t\t\t\t\t| \"CANCELLED\"\n\t\t\t\t\t\t| \"CRASHED\",\n\t\t\t\t\tname: newState.type.charAt(0) + newState.type.slice(1).toLowerCase(),\n\t\t\t\t\tmessage: newState.message,\n\t\t\t\t},\n\t\t\t\tforce: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tonSuccess: () => {\n\t\t\t\t\ttoast.success(\"Task run state changed\");\n\t\t\t\t\tsetChangeStateOpen(false);\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\ttoast.error(error.message || \"Failed to change state\");\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\tto=\"/runs\"\n\t\t\t\t\t\t\tsearch={{ tab: \"task-runs\" }}\n\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRuns\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t{taskRun.flow_run_id && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: taskRun.flow_run_id }}\n\t\t\t\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{taskRun.flow_run_name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl\">\n\t\t\t\t\t\t<BreadcrumbPage className=\"font-semibold\">\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbPage>\n\t\t\t\t\t\t{taskRun.state && (\n\t\t\t\t\t\t\t<StateBadge\n\t\t\t\t\t\t\t\ttype={taskRun.state.type}\n\t\t\t\t\t\t\t\tname={taskRun.state.name}\n\t\t\t\t\t\t\t\tclassName=\"ml-2\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button variant=\"outline\" className=\"p-2\">\n\t\t\t\t\t\t<MoreVertical className=\"w-4 h-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent>\n\t\t\t\t\t{canChangeState && (\n\t\t\t\t\t\t<DropdownMenuItem onClick={openChangeState}>\n\t\t\t\t\t\t\tChange state\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t)}\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\ttoast.success(\"Copied task run ID to clipboard\");\n\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(taskRun.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tCopy ID\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tconfirmDelete({\n\t\t\t\t\t\t\t\ttitle: \"Delete Task Run\",\n\t\t\t\t\t\t\t\tdescription: `Are you sure you want to delete task run ${taskRun.name}?`,\n\t\t\t\t\t\t\t\tonConfirm: onDeleteRunClicked,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t\t<DeleteConfirmationDialog {...dialogState} />\n\t\t\t<ChangeStateDialog\n\t\t\t\topen={isChangeStateOpen}\n\t\t\t\tonOpenChange={setChangeStateOpen}\n\t\t\t\tcurrentState={\n\t\t\t\t\ttaskRun.state\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: taskRun.state.type,\n\t\t\t\t\t\t\t\tname:\n\t\t\t\t\t\t\t\t\ttaskRun.state.name ??\n\t\t\t\t\t\t\t\t\ttaskRun.state.type.charAt(0) +\n\t\t\t\t\t\t\t\t\t\ttaskRun.state.type.slice(1).toLowerCase(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t\tlabel=\"Task Run\"\n\t\t\t\tonConfirm={handleChangeState}\n\t\t\t\tisLoading={isChangingState}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nconst TabsLayout = ({\n\tcurrentTab,\n\tonTabChange,\n\tlogsContent,\n\tartifactsContent,\n\ttaskInputsContent,\n\tdetailsContent,\n}: {\n\tcurrentTab: TaskRunDetailsTabOptions;\n\tonTabChange: (tab: TaskRunDetailsTabOptions) => void;\n\tlogsContent: React.ReactNode;\n\tartifactsContent: React.ReactNode;\n\ttaskInputsContent: React.ReactNode;\n\tdetailsContent: React.ReactNode;\n}) => {\n\t// Change tab on screen size change when the details tab is selected\n\tuseEffect(() => {\n\t\tconst bp = getComputedStyle(document.documentElement)\n\t\t\t.getPropertyValue(\"--breakpoint-lg\")\n\t\t\t.trim();\n\t\tconst mql = window.matchMedia(`(max-width: ${bp})`);\n\t\tconst onChange = () => {\n\t\t\tif (currentTab === \"Details\") {\n\t\t\t\tonTabChange(\"Logs\");\n\t\t\t}\n\t\t};\n\t\tmql.addEventListener(\"change\", onChange);\n\t\treturn () => mql.removeEventListener(\"change\", onChange);\n\t}, [currentTab, onTabChange]);\n\n\treturn (\n\t\t<Tabs\n\t\t\tvalue={currentTab}\n\t\t\tonValueChange={(value) => onTabChange(value as TaskRunDetailsTabOptions)}\n\t\t>\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger value=\"Details\" className=\"lg:hidden\">\n\t\t\t\t\tDetails\n\t\t\t\t</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Logs\">Logs</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"Artifacts\">Artifacts</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"TaskInputs\">\n\t\t\t\t\tTask Inputs\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<Icon id=\"Info\" className=\"w-4 h-4\" />\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\tTask inputs show parameter keys and can also show task run\n\t\t\t\t\t\t\trelationships.\n\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value=\"Details\">{detailsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Logs\">{logsContent}</TabsContent>\n\t\t\t<TabsContent value=\"Artifacts\">{artifactsContent}</TabsContent>\n\t\t\t<TabsContent value=\"TaskInputs\">{taskInputsContent}</TabsContent>\n\t\t</Tabs>\n\t);\n};\n\nconst LogsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row gap-2 justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-25\" />\n\t\t\t\t<Skeleton className=\"h-8 w-32\" />\n\t\t\t</div>\n\t\t\t<Skeleton className=\"h-32\" />\n\t\t</div>\n\t);\n};\n\nconst ArtifactsSkeleton = () => {\n\treturn (\n\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t\t<Skeleton className=\"h-8 w-12\" />\n\t\t\t</div>\n\n\t\t\t<div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2 xl:grid-cols-3\">\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t\t<Skeleton className=\"h-40\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst TaskInputs = ({ taskRun }: { taskRun: TaskRun }) => {\n\treturn (\n\t\t<JsonInput\n\t\t\tvalue={JSON.stringify(taskRun.task_inputs, null, 2)}\n\t\t\tdisabled\n\t\t\tcopy\n\t\t/>\n\t);\n};\n","import type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildListArtifactsQuery } from \"@/api/artifacts\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { buildInfiniteFilterLogsQuery } from \"@/api/logs\";\nimport { buildGetTaskRunDetailsQuery } from \"@/api/task-runs\";\nimport { TaskRunDetailsPage } from \"@/components/task-runs/task-run-details-page\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\nconst searchParams = z.object({\n\ttab: z\n\t\t.enum([\"Logs\", \"Artifacts\", \"TaskInputs\", \"Details\"])\n\t\t.default(\"Logs\")\n\t\t.catch(\"Logs\"),\n});\n\nexport type TaskRunDetailsTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nfunction TaskRunErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load task run\");\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h1 className=\"text-2xl font-semibold\">Task Run</h1>\n\t\t\t</div>\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/runs/task-run/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\tloader: async ({ params, context: { queryClient } }) => {\n\t\t// ----- Deferred data\n\t\tvoid queryClient.prefetchInfiniteQuery(\n\t\t\tbuildInfiniteFilterLogsQuery({\n\t\t\t\tlimit: 50,\n\t\t\t\tsort: \"TIMESTAMP_ASC\",\n\t\t\t\tlogs: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tlevel: {\n\t\t\t\t\t\tge_: 0,\n\t\t\t\t\t},\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tvoid queryClient.prefetchQuery(\n\t\t\tbuildListArtifactsQuery({\n\t\t\t\tartifacts: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\ttask_run_id: {\n\t\t\t\t\t\tany_: [params.id],\n\t\t\t\t\t},\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tnot_any_: [\"result\"],\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\n\t\t// ----- Critical data\n\t\tawait queryClient.ensureQueryData(buildGetTaskRunDetailsQuery(params.id));\n\t},\n\twrapInSuspense: true,\n\terrorComponent: TaskRunErrorComponent,\n});\n\nfunction RouteComponent() {\n\tconst { id } = Route.useParams();\n\tconst { tab } = Route.useSearch();\n\tconst navigate = useNavigate();\n\n\tconst onTabChange = (tab: TaskRunDetailsTabOptions) => {\n\t\tvoid navigate({\n\t\t\tto: \".\",\n\t\t\tsearch: (prev) => ({\n\t\t\t\t...prev,\n\t\t\t\ttab,\n\t\t\t}),\n\t\t});\n\t};\n\n\treturn <TaskRunDetailsPage id={id} tab={tab} onTabChange={onTabChange} />;\n}\n"],"names":["TaskRunArtifacts","taskRun","view","setView","useState","artifacts","useSuspenseQuery","buildListArtifactsQuery","Card","jsx","CardContent","jsxs","ToggleGroup","value","ToggleGroupItem","LayoutGrid","Rows3","cn","artifact","ArtifactCard","formatTaskDate","dateString","formatDate","formatTaskDuration","seconds","humanizeDuration","TaskRunDetails","resultArtifact","useQuery","buildGetTaskRunResultQuery","Link","Icon","LazyMarkdown","tag","TagBadge","TaskRunLogs","virtualize","levelFilter","setLevelFilter","sortOrder","setSortOrder","queryOptions","useMemo","buildInfiniteFilterLogsQuery","logs","hasNextPage","fetchNextPage","isFetchingNextPage","useSuspenseInfiniteQuery","noLogs","message","LogLevelFilter","LogSortOrder","RunLogs","error","LEVEL_FILTER_OPTIONS","Select","SelectTrigger","option","SelectContent","SelectItem","SelectValue","TaskRunDetailsPage","id","tab","onTabChange","refetchInterval","setRefetchInterval","buildGetTaskRunDetailsQuery","deleteTaskRun","useDeleteTaskRun","navigate","useRouter","usePageTitle","useStateFavicon","useEffect","onDeleteRunClicked","toast","Header","TabsLayout","Suspense","LogsSkeleton","ArtifactsSkeleton","TaskInputs","dialogState","confirmDelete","useDeleteConfirmationDialog","isChangeStateOpen","setChangeStateOpen","openChangeState","useChangeStateDialog","setTaskRunState","isChangingState","useSetTaskRunState","canChangeState","handleChangeState","newState","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","Fragment","BreadcrumbPage","StateBadge","DropdownMenu","DropdownMenuTrigger","Button","MoreVertical","DropdownMenuContent","DropdownMenuItem","DeleteConfirmationDialog","ChangeStateDialog","currentTab","logsContent","artifactsContent","taskInputsContent","detailsContent","bp","mql","onChange","Tabs","TabsList","TabsTrigger","Tooltip","TooltipTrigger","TooltipContent","TabsContent","Skeleton","JsonInput","z","default","catch","RouteComponent","Route","useParams","useSearch","useNavigate","to","search","prev"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,r as _,s as p}from"./vendor-tanstack-BcZfOOfy.js";import{S as w,a as E,b as S,c as P,e as u,C as h,cE as W,ao as k,$ as z,au as O,ar as X,as as H,B as q,g as J,h as x,bw as m,bF as g,aQ as N,bX as v,bU as y,bV as C,I as D,bW as I,av as T,ap as K,q as Y,b9 as d,ba as Z,bb as R,bc as o,cF as ee,bd as se,be as te,cG as ae}from"./index-B8vo2Lrg.js";const je=({defaultValue:t,value:a,onSelect:s})=>e.jsxs(w,{defaultValue:t,value:a,onValueChange:s,children:[e.jsx(E,{"aria-label":"Task run sort order",className:"w-full",children:e.jsx(S,{placeholder:"Sort by"})}),e.jsxs(P,{children:[e.jsx(u,{value:"EXPECTED_START_TIME_DESC",children:"Newest to oldest"}),e.jsx(u,{value:"EXPECTED_START_TIME_ASC",children:"Oldest to newest"})]})]}),L=({taskRun:t,flow:a,flowRun:s,checked:r,onCheckedChange:l})=>{const i=typeof l=="function";return e.jsxs(h,{className:re({state:t.state?.type}),children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsx(k,{checked:r??!1,onCheckedChange:l}),e.jsx(le,{taskRun:t,flow:a,flowRun:s})]}),e.jsx("div",{children:e.jsx(z,{tags:t.tags??[]})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[t.state&&e.jsx(O,{type:t.state.type,name:t.state.name}),e.jsx(ie,{taskRun:t}),e.jsx(ne,{taskRun:t})]})]})},re=W("flex flex-col gap-2 p-4 border-l-8",{variants:{state:{COMPLETED:"border-l-green-600",FAILED:"border-l-red-600",RUNNING:"border-l-blue-700",CANCELLED:"border-l-gray-800",CANCELLING:"border-l-gray-800",CRASHED:"border-l-orange-600",PAUSED:"border-l-gray-800",PENDING:"border-l-gray-800",SCHEDULED:"border-l-yellow-700"}}}),le=({taskRun:t,flow:a,flowRun:s})=>e.jsx("div",{className:"flex items-center",children:e.jsx(q,{children:e.jsxs(J,{children:[a&&e.jsxs(e.Fragment,{children:[e.jsx(x,{children:e.jsx(m,{to:"/flows/flow/$id",params:{id:a.id},className:"font-semibold text-foreground",children:a.name})}),e.jsx(g,{})]}),s&&e.jsxs(e.Fragment,{children:[e.jsx(x,{children:e.jsx(m,{to:"/runs/flow-run/$id",params:{id:s.id},children:s.name})}),e.jsx(g,{})]}),e.jsx(x,{className:"font-bold text-foreground",children:e.jsx(m,{to:"/runs/task-run/$id",params:{id:t.id},children:t.name})})]})})}),ie=({taskRun:t})=>{const a="start_time"in t?t.start_time:null,s="expected_start_time"in t?t.expected_start_time:null,{text:r,tooltipText:l}=_.useMemo(()=>{let i,n;return a?(i=N(a,"dateTimeNumeric"),n=new Date(a).toString()):s&&(i=`Scheduled for ${N(s,"dateTimeNumeric")}`,n=new Date(s).toString()),{text:i,tooltipText:n}},[s,a]);return e.jsx(v,{children:e.jsxs(y,{children:[e.jsx(C,{asChild:!0,disabled:!r,children:e.jsxs("div",{className:"text-xs font-mono flex gap-2 items-center",children:[e.jsx(D,{id:"Calendar",className:"size-4"}),r??"No start time"]})}),e.jsx(I,{children:l})]})})},ne=({taskRun:t})=>{const a="estimated_run_time"in t?t.estimated_run_time:null,s="total_run_time"in t?t.total_run_time:null,r=a??s??0;if(r===0)return null;const l=T(r*1e3,{maxDecimalPoints:2,units:["h","m","s"],round:!0}),i=T(r*1e3,{maxDecimalPoints:5,units:["h","m","s"]});return e.jsx(v,{children:e.jsxs(y,{children:[e.jsx(C,{asChild:!0,children:e.jsxs("div",{className:"flex gap-2 items-center text-xs font-mono",children:[e.jsx(D,{id:"Clock",className:"size-4"}),l]})}),e.jsx(I,{children:i})]})})},ce=({taskRun:t,flowRunId:a,checked:s,onCheckedChange:r})=>{const{data:l}=p(X(a)),{data:i}=p(H(l.flow_id));return e.jsx(L,{taskRun:t,flow:i,flowRun:l,checked:s,onCheckedChange:r})},de=({taskRun:t,checked:a,onCheckedChange:s})=>{const r=t.flow_run_id;return r?e.jsx(ce,{taskRun:t,flowRunId:r,checked:a,onCheckedChange:s}):e.jsx(L,{taskRun:t,checked:a,onCheckedChange:s})},oe=({taskRun:t,checked:a,onCheckedChange:s})=>e.jsx(_.Suspense,{fallback:e.jsxs(h,{className:"flex flex-col gap-2 p-4 border-l-8 border-l-gray-300 animate-pulse",children:[e.jsx("div",{className:"h-5 bg-gray-200 rounded w-1/3"}),e.jsx("div",{className:"h-4 bg-gray-200 rounded w-1/4"})]}),children:e.jsx(de,{taskRun:t,checked:a,onCheckedChange:s})}),fe=({taskRuns:t,onClearFilters:a,onSelect:s,selectedRows:r})=>t?t.length===0?e.jsx("div",{className:"flex justify-center py-4",children:e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(K,{children:"No runs found"}),a&&e.jsx(Y,{onClick:a,children:"Clear Filters"})]})}):e.jsx("ul",{className:"flex flex-col gap-2",children:t.map(l=>e.jsx("li",{children:e.jsx(oe,{taskRun:l,checked:r?.has(l.id),onCheckedChange:s?i=>s(l.id,i):void 0})},l.id))}):e.jsx(xe,{numSkeletons:5}),xe=({numSkeletons:t=1})=>e.jsx("ul",{className:"flex flex-col gap-1",children:Array.from({length:t}).map((a,s)=>e.jsx("li",{children:e.jsxs(h,{className:"flex flex-col gap-2 p-4",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx(d,{className:"h-4 w-[350px]"}),e.jsx(d,{className:"h-4 w-[400px]"})]}),e.jsx(d,{className:"h-4 w-[400px]"}),e.jsx(d,{className:"h-4 w-[200px]"})]})},s))}),me=[5,10,25,50,100],be=({count:t,pages:a,pagination:s,onChangePagination:r,onPrefetchPage:l})=>{const i=()=>r({limit:s.limit,page:1}),n=()=>r({limit:s.limit,page:s.page-1}),B=()=>r({limit:s.limit,page:s.page+1}),F=()=>r({limit:s.limit,page:a}),A=()=>{s.page>1&&l?.(1)},M=()=>{s.page>1&&l?.(s.page-1)},G=()=>{s.page<a&&l?.(s.page+1)},V=()=>{s.page<a&&l?.(a)},j=s.page<=1,f=s.page>=a,$=c=>{const b=Number(c),Q=Math.ceil(t/b),U=Math.min(s.page,Q);r({limit:b,page:U})};return e.jsxs("div",{className:"flex flex-row justify-between items-center",children:[e.jsxs("div",{className:"flex flex-row items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("span",{className:"whitespace-nowrap",children:"Items per page"}),e.jsxs(w,{value:String(s.limit),onValueChange:$,children:[e.jsx(E,{"aria-label":"Items per page",children:e.jsx(S,{placeholder:"Theme"})}),e.jsx(P,{children:me.map(c=>e.jsx(u,{value:String(c),children:c},c))})]})]}),e.jsx(Z,{className:"justify-end",children:e.jsxs(R,{children:[e.jsxs(o,{children:[e.jsx(ee,{onClick:i,onMouseEnter:A,disabled:j}),e.jsx(se,{onClick:n,onMouseEnter:M,disabled:j})]}),e.jsxs(o,{className:"text-sm",children:["Page ",a===0?0:s.page," of ",a]}),e.jsx(o,{children:e.jsx(te,{onClick:B,onMouseEnter:G,disabled:f})}),e.jsx(o,{children:e.jsx(ae,{onClick:F,onMouseEnter:V,disabled:f})})]})})]})};export{je as T,be as a,fe as b};
|
|
2
|
+
//# sourceMappingURL=task-runs-pagination-DUy3147A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runs-pagination-VdR-LO4r.js","sources":["../../src/components/task-runs/task-runs-list/task-run-sort-filter.tsx","../../src/components/task-runs/task-runs-list/task-runs-list-item.tsx","../../src/components/task-runs/task-runs-list/task-runs-list.tsx","../../src/components/task-runs/task-runs-list/task-runs-pagination.tsx"],"sourcesContent":["import {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport type { TaskRunSortFilters } from \"./task-run-sort-filter.constants\";\n\ntype TaskRunsSortFilterProps = {\n\tdefaultValue?: TaskRunSortFilters;\n\tonSelect: (filter: TaskRunSortFilters) => void;\n\tvalue: undefined | TaskRunSortFilters;\n};\n\nexport const TaskRunsSortFilter = ({\n\tdefaultValue,\n\tvalue,\n\tonSelect,\n}: TaskRunsSortFilterProps) => {\n\treturn (\n\t\t<Select defaultValue={defaultValue} value={value} onValueChange={onSelect}>\n\t\t\t<SelectTrigger aria-label=\"Task run sort order\" className=\"w-full\">\n\t\t\t\t<SelectValue placeholder=\"Sort by\" />\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectItem value=\"EXPECTED_START_TIME_DESC\">\n\t\t\t\t\tNewest to oldest\n\t\t\t\t</SelectItem>\n\t\t\t\t<SelectItem value=\"EXPECTED_START_TIME_ASC\">\n\t\t\t\t\tOldest to newest\n\t\t\t\t</SelectItem>\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { cva } from \"class-variance-authority\";\nimport humanizeDuration from \"humanize-duration\";\nimport { Suspense, useMemo } from \"react\";\nimport { buildGetFlowRunDetailsQuery, type FlowRun } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery, type Flow } from \"@/api/flows\";\nimport type { components } from \"@/api/prefect\";\nimport type { TaskRun, TaskRunResponse } from \"@/api/task-runs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Card } from \"@/components/ui/card\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { formatDate } from \"@/utils/date\";\n\ntype TaskRunsListItemProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflow?: Flow;\n\tflowRun?: FlowRun;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\nexport const TaskRunsListItem = ({\n\ttaskRun,\n\tflow,\n\tflowRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemProps) => {\n\tconst isSelectable = typeof onCheckedChange === \"function\";\n\n\treturn (\n\t\t<Card className={stateCardVariants({ state: taskRun.state?.type })}>\n\t\t\t<div className=\"flex justify-between items-center\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={checked ?? false}\n\t\t\t\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<TaskRunBreadcrumbs taskRun={taskRun} flow={flow} flowRun={flowRun} />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<TagBadgeGroup tags={taskRun.tags ?? []} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t{taskRun.state && (\n\t\t\t\t\t<StateBadge type={taskRun.state.type} name={taskRun.state.name} />\n\t\t\t\t)}\n\t\t\t\t<TaskRunStartTime taskRun={taskRun} />\n\t\t\t\t<TaskRunDuration taskRun={taskRun} />\n\t\t\t</div>\n\t\t</Card>\n\t);\n};\n\nconst stateCardVariants = cva(\"flex flex-col gap-2 p-4 border-l-8\", {\n\tvariants: {\n\t\tstate: {\n\t\t\tCOMPLETED: \"border-l-green-600\",\n\t\t\tFAILED: \"border-l-red-600\",\n\t\t\tRUNNING: \"border-l-blue-700\",\n\t\t\tCANCELLED: \"border-l-gray-800\",\n\t\t\tCANCELLING: \"border-l-gray-800\",\n\t\t\tCRASHED: \"border-l-orange-600\",\n\t\t\tPAUSED: \"border-l-gray-800\",\n\t\t\tPENDING: \"border-l-gray-800\",\n\t\t\tSCHEDULED: \"border-l-yellow-700\",\n\t\t} satisfies Record<components[\"schemas\"][\"StateType\"], string>,\n\t},\n});\n\ntype TaskRunBreadcrumbsProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflow?: Flow;\n\tflowRun?: FlowRun;\n};\n\nconst TaskRunBreadcrumbs = ({\n\ttaskRun,\n\tflow,\n\tflowRun,\n}: TaskRunBreadcrumbsProps) => {\n\treturn (\n\t\t<div className=\"flex items-center\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t{flow && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/flows/flow/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: flow.id }}\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flow.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t{flowRun && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: flowRun.id }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flowRun.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"font-bold text-foreground\">\n\t\t\t\t\t\t<BreadcrumbLink to=\"/runs/task-run/$id\" params={{ id: taskRun.id }}>\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t</div>\n\t);\n};\n\ntype TaskRunStartTimeProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n};\n\nconst TaskRunStartTime = ({ taskRun }: TaskRunStartTimeProps) => {\n\t// These properties only exist on UITaskRun, not TaskRunResponse\n\tconst start_time =\n\t\t\"start_time\" in taskRun ? (taskRun.start_time as string | null) : null;\n\tconst expected_start_time =\n\t\t\"expected_start_time\" in taskRun\n\t\t\t? (taskRun.expected_start_time as string | null)\n\t\t\t: null;\n\n\tconst { text, tooltipText } = useMemo(() => {\n\t\tlet text: string | undefined;\n\t\tlet tooltipText: string | undefined;\n\t\tif (start_time) {\n\t\t\ttext = formatDate(start_time, \"dateTimeNumeric\");\n\t\t\ttooltipText = new Date(start_time).toString();\n\t\t} else if (expected_start_time) {\n\t\t\ttext = `Scheduled for ${formatDate(expected_start_time, \"dateTimeNumeric\")}`;\n\t\t\ttooltipText = new Date(expected_start_time).toString();\n\t\t}\n\t\treturn { text, tooltipText };\n\t}, [expected_start_time, start_time]);\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger asChild disabled={!text}>\n\t\t\t\t\t<div className=\"text-xs font-mono flex gap-2 items-center\">\n\t\t\t\t\t\t<Icon id=\"Calendar\" className=\"size-4\" />\n\t\t\t\t\t\t{text ?? \"No start time\"}\n\t\t\t\t\t</div>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{tooltipText}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\ntype TaskRunDurationProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n};\n\nconst TaskRunDuration = ({ taskRun }: TaskRunDurationProps) => {\n\t// These properties only exist on UITaskRun, not TaskRunResponse\n\tconst estimated_run_time =\n\t\t\"estimated_run_time\" in taskRun\n\t\t\t? (taskRun.estimated_run_time as number | null)\n\t\t\t: null;\n\tconst total_run_time =\n\t\t\"total_run_time\" in taskRun\n\t\t\t? (taskRun.total_run_time as number | null)\n\t\t\t: null;\n\tconst duration = estimated_run_time ?? total_run_time ?? 0;\n\n\tif (duration === 0) {\n\t\treturn null;\n\t}\n\n\tconst durationLabel = humanizeDuration(duration * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"h\", \"m\", \"s\"],\n\t\tround: true,\n\t});\n\tconst durationTooltip = humanizeDuration(duration * 1000, {\n\t\tmaxDecimalPoints: 5,\n\t\tunits: [\"h\", \"m\", \"s\"],\n\t});\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t<div className=\"flex gap-2 items-center text-xs font-mono\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"size-4\" />\n\t\t\t\t\t\t{durationLabel}\n\t\t\t\t\t</div>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{durationTooltip}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\ntype TaskRunsListItemWithDataProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\ntype TaskRunsListItemWithFlowDataProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflowRunId: string;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\nconst TaskRunsListItemWithFlowData = ({\n\ttaskRun,\n\tflowRunId,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithFlowDataProps) => {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(flowRunId),\n\t);\n\tconst { data: flow } = useSuspenseQuery(\n\t\tbuildFLowDetailsQuery(flowRun.flow_id),\n\t);\n\n\treturn (\n\t\t<TaskRunsListItem\n\t\t\ttaskRun={taskRun}\n\t\t\tflow={flow}\n\t\t\tflowRun={flowRun}\n\t\t\tchecked={checked}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t/>\n\t);\n};\n\nconst TaskRunsListItemWithDataInner = ({\n\ttaskRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithDataProps) => {\n\tconst flowRunId = taskRun.flow_run_id;\n\n\tif (!flowRunId) {\n\t\treturn (\n\t\t\t<TaskRunsListItem\n\t\t\t\ttaskRun={taskRun}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TaskRunsListItemWithFlowData\n\t\t\ttaskRun={taskRun}\n\t\t\tflowRunId={flowRunId}\n\t\t\tchecked={checked}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t/>\n\t);\n};\n\nexport const TaskRunsListItemWithData = ({\n\ttaskRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithDataProps) => {\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={\n\t\t\t\t<Card className=\"flex flex-col gap-2 p-4 border-l-8 border-l-gray-300 animate-pulse\">\n\t\t\t\t\t<div className=\"h-5 bg-gray-200 rounded w-1/3\" />\n\t\t\t\t\t<div className=\"h-4 bg-gray-200 rounded w-1/4\" />\n\t\t\t\t</Card>\n\t\t\t}\n\t\t>\n\t\t\t<TaskRunsListItemWithDataInner\n\t\t\t\ttaskRun={taskRun}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n","import type { TaskRunResponse } from \"@/api/task-runs\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { TaskRunsListItemWithData } from \"./task-runs-list-item\";\n\ntype TaskRunsListProps = {\n\ttaskRuns?: Array<TaskRunResponse>;\n\tonSelect?: (id: string, checked: boolean) => void;\n\tselectedRows?: Set<string>;\n\tonClearFilters?: () => void;\n};\n\nexport const TaskRunsList = ({\n\ttaskRuns,\n\tonClearFilters,\n\tonSelect,\n\tselectedRows,\n}: TaskRunsListProps) => {\n\tif (!taskRuns) {\n\t\treturn <LoadingSkeleton numSkeletons={5} />;\n\t}\n\n\tif (taskRuns.length === 0) {\n\t\treturn (\n\t\t\t<div className=\"flex justify-center py-4\">\n\t\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t\t<Typography>No runs found</Typography>\n\t\t\t\t\t{onClearFilters && (\n\t\t\t\t\t\t<Button onClick={onClearFilters}>Clear Filters</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t{taskRuns.map((taskRun) => (\n\t\t\t\t<li key={taskRun.id}>\n\t\t\t\t\t<TaskRunsListItemWithData\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tchecked={selectedRows?.has(taskRun.id)}\n\t\t\t\t\t\tonCheckedChange={\n\t\t\t\t\t\t\tonSelect ? (checked) => onSelect(taskRun.id, checked) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n};\n\ntype LoadingSkeletonProps = {\n\tnumSkeletons?: number;\n};\nconst LoadingSkeleton = ({ numSkeletons = 1 }: LoadingSkeletonProps) => (\n\t<ul className=\"flex flex-col gap-1\">\n\t\t{Array.from({ length: numSkeletons }).map((_, i) => (\n\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: okay for static skeleton list\n\t\t\t<li key={i}>\n\t\t\t\t<Card className=\"flex flex-col gap-2 p-4\">\n\t\t\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-[350px]\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t\t\t<Skeleton className=\"h-4 w-[200px]\" />\n\t\t\t\t</Card>\n\t\t\t</li>\n\t\t))}\n\t</ul>\n);\n","import {\n\tPagination,\n\tPaginationContent,\n\tPaginationFirstButton,\n\tPaginationItem,\n\tPaginationLastButton,\n\tPaginationNextButton,\n\tPaginationPreviousButton,\n} from \"@/components/ui/pagination\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\nconst PAGINATION_INCREMENTS = [5, 10, 25, 50, 100];\n\nexport type PaginationState = {\n\tlimit: number;\n\tpage: number;\n};\nexport type PaginationStateUpdater = (\n\tprevState: PaginationState,\n) => PaginationState;\n\ntype TaskRunsPaginationProps = {\n\tcount: number;\n\tpages: number;\n\tpagination: PaginationState;\n\tonChangePagination: (pagination: PaginationState) => void;\n\tonPrefetchPage?: (page: number) => void;\n};\nexport const TaskRunsPagination = ({\n\tcount,\n\tpages,\n\tpagination,\n\tonChangePagination,\n\tonPrefetchPage,\n}: TaskRunsPaginationProps) => {\n\tconst handleFirstPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: 1 });\n\tconst handlePreviousPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pagination.page - 1 });\n\tconst handleNextPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pagination.page + 1 });\n\n\tconst handleLastPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pages });\n\n\tconst handlePrefetchFirstPage = () => {\n\t\tif (pagination.page > 1) onPrefetchPage?.(1);\n\t};\n\tconst handlePrefetchPreviousPage = () => {\n\t\tif (pagination.page > 1) onPrefetchPage?.(pagination.page - 1);\n\t};\n\tconst handlePrefetchNextPage = () => {\n\t\tif (pagination.page < pages) onPrefetchPage?.(pagination.page + 1);\n\t};\n\tconst handlePrefetchLastPage = () => {\n\t\tif (pagination.page < pages) onPrefetchPage?.(pages);\n\t};\n\n\tconst disablePreviousPage = pagination.page <= 1;\n\tconst disableNextPage = pagination.page >= pages;\n\n\tconst handleChangeLimit = (value: string) => {\n\t\tconst newLimit = Number(value);\n\t\tconst newTotalPages = Math.ceil(count / newLimit);\n\t\tconst newPage = Math.min(pagination.page, newTotalPages);\n\t\tonChangePagination({\n\t\t\tlimit: newLimit,\n\t\t\tpage: newPage,\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between items-center\">\n\t\t\t<div className=\"flex flex-row items-center gap-2 text-xs text-muted-foreground\">\n\t\t\t\t<span className=\"whitespace-nowrap\">Items per page</span>\n\t\t\t\t<Select\n\t\t\t\t\tvalue={String(pagination.limit)}\n\t\t\t\t\tonValueChange={handleChangeLimit}\n\t\t\t\t>\n\t\t\t\t\t<SelectTrigger aria-label=\"Items per page\">\n\t\t\t\t\t\t<SelectValue placeholder=\"Theme\" />\n\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t{PAGINATION_INCREMENTS.map((increment) => (\n\t\t\t\t\t\t\t<SelectItem key={increment} value={String(increment)}>\n\t\t\t\t\t\t\t\t{increment}\n\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SelectContent>\n\t\t\t\t</Select>\n\t\t\t</div>\n\t\t\t<Pagination className=\"justify-end\">\n\t\t\t\t<PaginationContent>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationFirstButton\n\t\t\t\t\t\t\tonClick={handleFirstPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchFirstPage}\n\t\t\t\t\t\t\tdisabled={disablePreviousPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PaginationPreviousButton\n\t\t\t\t\t\t\tonClick={handlePreviousPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchPreviousPage}\n\t\t\t\t\t\t\tdisabled={disablePreviousPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem className=\"text-sm\">\n\t\t\t\t\t\tPage {pages === 0 ? 0 : pagination.page} of {pages}\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationNextButton\n\t\t\t\t\t\t\tonClick={handleNextPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchNextPage}\n\t\t\t\t\t\t\tdisabled={disableNextPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationLastButton\n\t\t\t\t\t\t\tonClick={handleLastPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchLastPage}\n\t\t\t\t\t\t\tdisabled={disableNextPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t</Pagination>\n\t\t</div>\n\t);\n};\n"],"names":["TaskRunsSortFilter","defaultValue","value","onSelect","jsxs","Select","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","TaskRunsListItem","taskRun","flow","flowRun","checked","onCheckedChange","isSelectable","Card","stateCardVariants","Checkbox","TaskRunBreadcrumbs","TagBadgeGroup","StateBadge","TaskRunStartTime","TaskRunDuration","cva","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","start_time","expected_start_time","text","tooltipText","useMemo","formatDate","TooltipProvider","Tooltip","TooltipTrigger","Icon","TooltipContent","estimated_run_time","total_run_time","duration","durationLabel","humanizeDuration","durationTooltip","TaskRunsListItemWithFlowData","flowRunId","useSuspenseQuery","buildGetFlowRunDetailsQuery","buildFLowDetailsQuery","TaskRunsListItemWithDataInner","TaskRunsListItemWithData","Suspense","TaskRunsList","taskRuns","onClearFilters","selectedRows","Typography","Button","LoadingSkeleton","numSkeletons","_","i","Skeleton","PAGINATION_INCREMENTS","TaskRunsPagination","count","pages","pagination","onChangePagination","onPrefetchPage","handleFirstPage","handlePreviousPage","handleNextPage","handleLastPage","handlePrefetchFirstPage","handlePrefetchPreviousPage","handlePrefetchNextPage","handlePrefetchLastPage","disablePreviousPage","disableNextPage","handleChangeLimit","newLimit","newTotalPages","newPage","increment","Pagination","PaginationContent","PaginationItem","PaginationFirstButton","PaginationPreviousButton","PaginationNextButton","PaginationLastButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task-runs-pagination-DUy3147A.js","sources":["../../src/components/task-runs/task-runs-list/task-run-sort-filter.tsx","../../src/components/task-runs/task-runs-list/task-runs-list-item.tsx","../../src/components/task-runs/task-runs-list/task-runs-list.tsx","../../src/components/task-runs/task-runs-list/task-runs-pagination.tsx"],"sourcesContent":["import {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport type { TaskRunSortFilters } from \"./task-run-sort-filter.constants\";\n\ntype TaskRunsSortFilterProps = {\n\tdefaultValue?: TaskRunSortFilters;\n\tonSelect: (filter: TaskRunSortFilters) => void;\n\tvalue: undefined | TaskRunSortFilters;\n};\n\nexport const TaskRunsSortFilter = ({\n\tdefaultValue,\n\tvalue,\n\tonSelect,\n}: TaskRunsSortFilterProps) => {\n\treturn (\n\t\t<Select defaultValue={defaultValue} value={value} onValueChange={onSelect}>\n\t\t\t<SelectTrigger aria-label=\"Task run sort order\" className=\"w-full\">\n\t\t\t\t<SelectValue placeholder=\"Sort by\" />\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectItem value=\"EXPECTED_START_TIME_DESC\">\n\t\t\t\t\tNewest to oldest\n\t\t\t\t</SelectItem>\n\t\t\t\t<SelectItem value=\"EXPECTED_START_TIME_ASC\">\n\t\t\t\t\tOldest to newest\n\t\t\t\t</SelectItem>\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { cva } from \"class-variance-authority\";\nimport humanizeDuration from \"humanize-duration\";\nimport { Suspense, useMemo } from \"react\";\nimport { buildGetFlowRunDetailsQuery, type FlowRun } from \"@/api/flow-runs\";\nimport { buildFLowDetailsQuery, type Flow } from \"@/api/flows\";\nimport type { components } from \"@/api/prefect\";\nimport type { TaskRun, TaskRunResponse } from \"@/api/task-runs\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Card } from \"@/components/ui/card\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { StateBadge } from \"@/components/ui/state-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { formatDate } from \"@/utils/date\";\n\ntype TaskRunsListItemProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflow?: Flow;\n\tflowRun?: FlowRun;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\nexport const TaskRunsListItem = ({\n\ttaskRun,\n\tflow,\n\tflowRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemProps) => {\n\tconst isSelectable = typeof onCheckedChange === \"function\";\n\n\treturn (\n\t\t<Card className={stateCardVariants({ state: taskRun.state?.type })}>\n\t\t\t<div className=\"flex justify-between items-center\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{isSelectable && (\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={checked ?? false}\n\t\t\t\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<TaskRunBreadcrumbs taskRun={taskRun} flow={flow} flowRun={flowRun} />\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<TagBadgeGroup tags={taskRun.tags ?? []} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t{taskRun.state && (\n\t\t\t\t\t<StateBadge type={taskRun.state.type} name={taskRun.state.name} />\n\t\t\t\t)}\n\t\t\t\t<TaskRunStartTime taskRun={taskRun} />\n\t\t\t\t<TaskRunDuration taskRun={taskRun} />\n\t\t\t</div>\n\t\t</Card>\n\t);\n};\n\nconst stateCardVariants = cva(\"flex flex-col gap-2 p-4 border-l-8\", {\n\tvariants: {\n\t\tstate: {\n\t\t\tCOMPLETED: \"border-l-green-600\",\n\t\t\tFAILED: \"border-l-red-600\",\n\t\t\tRUNNING: \"border-l-blue-700\",\n\t\t\tCANCELLED: \"border-l-gray-800\",\n\t\t\tCANCELLING: \"border-l-gray-800\",\n\t\t\tCRASHED: \"border-l-orange-600\",\n\t\t\tPAUSED: \"border-l-gray-800\",\n\t\t\tPENDING: \"border-l-gray-800\",\n\t\t\tSCHEDULED: \"border-l-yellow-700\",\n\t\t} satisfies Record<components[\"schemas\"][\"StateType\"], string>,\n\t},\n});\n\ntype TaskRunBreadcrumbsProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflow?: Flow;\n\tflowRun?: FlowRun;\n};\n\nconst TaskRunBreadcrumbs = ({\n\ttaskRun,\n\tflow,\n\tflowRun,\n}: TaskRunBreadcrumbsProps) => {\n\treturn (\n\t\t<div className=\"flex items-center\">\n\t\t\t<Breadcrumb>\n\t\t\t\t<BreadcrumbList>\n\t\t\t\t\t{flow && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/flows/flow/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: flow.id }}\n\t\t\t\t\t\t\t\t\tclassName=\"font-semibold text-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flow.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t{flowRun && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\t\t\t\tto=\"/runs/flow-run/$id\"\n\t\t\t\t\t\t\t\t\tparams={{ id: flowRun.id }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{flowRun.name}\n\t\t\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t\t\t\t<BreadcrumbSeparator />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<BreadcrumbItem className=\"font-bold text-foreground\">\n\t\t\t\t\t\t<BreadcrumbLink to=\"/runs/task-run/$id\" params={{ id: taskRun.id }}>\n\t\t\t\t\t\t\t{taskRun.name}\n\t\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</BreadcrumbList>\n\t\t\t</Breadcrumb>\n\t\t</div>\n\t);\n};\n\ntype TaskRunStartTimeProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n};\n\nconst TaskRunStartTime = ({ taskRun }: TaskRunStartTimeProps) => {\n\t// These properties only exist on UITaskRun, not TaskRunResponse\n\tconst start_time =\n\t\t\"start_time\" in taskRun ? (taskRun.start_time as string | null) : null;\n\tconst expected_start_time =\n\t\t\"expected_start_time\" in taskRun\n\t\t\t? (taskRun.expected_start_time as string | null)\n\t\t\t: null;\n\n\tconst { text, tooltipText } = useMemo(() => {\n\t\tlet text: string | undefined;\n\t\tlet tooltipText: string | undefined;\n\t\tif (start_time) {\n\t\t\ttext = formatDate(start_time, \"dateTimeNumeric\");\n\t\t\ttooltipText = new Date(start_time).toString();\n\t\t} else if (expected_start_time) {\n\t\t\ttext = `Scheduled for ${formatDate(expected_start_time, \"dateTimeNumeric\")}`;\n\t\t\ttooltipText = new Date(expected_start_time).toString();\n\t\t}\n\t\treturn { text, tooltipText };\n\t}, [expected_start_time, start_time]);\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger asChild disabled={!text}>\n\t\t\t\t\t<div className=\"text-xs font-mono flex gap-2 items-center\">\n\t\t\t\t\t\t<Icon id=\"Calendar\" className=\"size-4\" />\n\t\t\t\t\t\t{text ?? \"No start time\"}\n\t\t\t\t\t</div>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{tooltipText}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\ntype TaskRunDurationProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n};\n\nconst TaskRunDuration = ({ taskRun }: TaskRunDurationProps) => {\n\t// These properties only exist on UITaskRun, not TaskRunResponse\n\tconst estimated_run_time =\n\t\t\"estimated_run_time\" in taskRun\n\t\t\t? (taskRun.estimated_run_time as number | null)\n\t\t\t: null;\n\tconst total_run_time =\n\t\t\"total_run_time\" in taskRun\n\t\t\t? (taskRun.total_run_time as number | null)\n\t\t\t: null;\n\tconst duration = estimated_run_time ?? total_run_time ?? 0;\n\n\tif (duration === 0) {\n\t\treturn null;\n\t}\n\n\tconst durationLabel = humanizeDuration(duration * 1000, {\n\t\tmaxDecimalPoints: 2,\n\t\tunits: [\"h\", \"m\", \"s\"],\n\t\tround: true,\n\t});\n\tconst durationTooltip = humanizeDuration(duration * 1000, {\n\t\tmaxDecimalPoints: 5,\n\t\tunits: [\"h\", \"m\", \"s\"],\n\t});\n\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip>\n\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t<div className=\"flex gap-2 items-center text-xs font-mono\">\n\t\t\t\t\t\t<Icon id=\"Clock\" className=\"size-4\" />\n\t\t\t\t\t\t{durationLabel}\n\t\t\t\t\t</div>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent>{durationTooltip}</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\ntype TaskRunsListItemWithDataProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\ntype TaskRunsListItemWithFlowDataProps = {\n\ttaskRun: TaskRun | TaskRunResponse;\n\tflowRunId: string;\n\tchecked?: boolean;\n\tonCheckedChange?: (checked: boolean) => void;\n};\n\nconst TaskRunsListItemWithFlowData = ({\n\ttaskRun,\n\tflowRunId,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithFlowDataProps) => {\n\tconst { data: flowRun } = useSuspenseQuery(\n\t\tbuildGetFlowRunDetailsQuery(flowRunId),\n\t);\n\tconst { data: flow } = useSuspenseQuery(\n\t\tbuildFLowDetailsQuery(flowRun.flow_id),\n\t);\n\n\treturn (\n\t\t<TaskRunsListItem\n\t\t\ttaskRun={taskRun}\n\t\t\tflow={flow}\n\t\t\tflowRun={flowRun}\n\t\t\tchecked={checked}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t/>\n\t);\n};\n\nconst TaskRunsListItemWithDataInner = ({\n\ttaskRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithDataProps) => {\n\tconst flowRunId = taskRun.flow_run_id;\n\n\tif (!flowRunId) {\n\t\treturn (\n\t\t\t<TaskRunsListItem\n\t\t\t\ttaskRun={taskRun}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TaskRunsListItemWithFlowData\n\t\t\ttaskRun={taskRun}\n\t\t\tflowRunId={flowRunId}\n\t\t\tchecked={checked}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t/>\n\t);\n};\n\nexport const TaskRunsListItemWithData = ({\n\ttaskRun,\n\tchecked,\n\tonCheckedChange,\n}: TaskRunsListItemWithDataProps) => {\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={\n\t\t\t\t<Card className=\"flex flex-col gap-2 p-4 border-l-8 border-l-gray-300 animate-pulse\">\n\t\t\t\t\t<div className=\"h-5 bg-gray-200 rounded w-1/3\" />\n\t\t\t\t\t<div className=\"h-4 bg-gray-200 rounded w-1/4\" />\n\t\t\t\t</Card>\n\t\t\t}\n\t\t>\n\t\t\t<TaskRunsListItemWithDataInner\n\t\t\t\ttaskRun={taskRun}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n","import type { TaskRunResponse } from \"@/api/task-runs\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card } from \"@/components/ui/card\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { TaskRunsListItemWithData } from \"./task-runs-list-item\";\n\ntype TaskRunsListProps = {\n\ttaskRuns?: Array<TaskRunResponse>;\n\tonSelect?: (id: string, checked: boolean) => void;\n\tselectedRows?: Set<string>;\n\tonClearFilters?: () => void;\n};\n\nexport const TaskRunsList = ({\n\ttaskRuns,\n\tonClearFilters,\n\tonSelect,\n\tselectedRows,\n}: TaskRunsListProps) => {\n\tif (!taskRuns) {\n\t\treturn <LoadingSkeleton numSkeletons={5} />;\n\t}\n\n\tif (taskRuns.length === 0) {\n\t\treturn (\n\t\t\t<div className=\"flex justify-center py-4\">\n\t\t\t\t<div className=\"flex flex-col gap-2\">\n\t\t\t\t\t<Typography>No runs found</Typography>\n\t\t\t\t\t{onClearFilters && (\n\t\t\t\t\t\t<Button onClick={onClearFilters}>Clear Filters</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t{taskRuns.map((taskRun) => (\n\t\t\t\t<li key={taskRun.id}>\n\t\t\t\t\t<TaskRunsListItemWithData\n\t\t\t\t\t\ttaskRun={taskRun}\n\t\t\t\t\t\tchecked={selectedRows?.has(taskRun.id)}\n\t\t\t\t\t\tonCheckedChange={\n\t\t\t\t\t\t\tonSelect ? (checked) => onSelect(taskRun.id, checked) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n};\n\ntype LoadingSkeletonProps = {\n\tnumSkeletons?: number;\n};\nconst LoadingSkeleton = ({ numSkeletons = 1 }: LoadingSkeletonProps) => (\n\t<ul className=\"flex flex-col gap-1\">\n\t\t{Array.from({ length: numSkeletons }).map((_, i) => (\n\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: okay for static skeleton list\n\t\t\t<li key={i}>\n\t\t\t\t<Card className=\"flex flex-col gap-2 p-4\">\n\t\t\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-[350px]\" />\n\t\t\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Skeleton className=\"h-4 w-[400px]\" />\n\t\t\t\t\t<Skeleton className=\"h-4 w-[200px]\" />\n\t\t\t\t</Card>\n\t\t\t</li>\n\t\t))}\n\t</ul>\n);\n","import {\n\tPagination,\n\tPaginationContent,\n\tPaginationFirstButton,\n\tPaginationItem,\n\tPaginationLastButton,\n\tPaginationNextButton,\n\tPaginationPreviousButton,\n} from \"@/components/ui/pagination\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\nconst PAGINATION_INCREMENTS = [5, 10, 25, 50, 100];\n\nexport type PaginationState = {\n\tlimit: number;\n\tpage: number;\n};\nexport type PaginationStateUpdater = (\n\tprevState: PaginationState,\n) => PaginationState;\n\ntype TaskRunsPaginationProps = {\n\tcount: number;\n\tpages: number;\n\tpagination: PaginationState;\n\tonChangePagination: (pagination: PaginationState) => void;\n\tonPrefetchPage?: (page: number) => void;\n};\nexport const TaskRunsPagination = ({\n\tcount,\n\tpages,\n\tpagination,\n\tonChangePagination,\n\tonPrefetchPage,\n}: TaskRunsPaginationProps) => {\n\tconst handleFirstPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: 1 });\n\tconst handlePreviousPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pagination.page - 1 });\n\tconst handleNextPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pagination.page + 1 });\n\n\tconst handleLastPage = () =>\n\t\tonChangePagination({ limit: pagination.limit, page: pages });\n\n\tconst handlePrefetchFirstPage = () => {\n\t\tif (pagination.page > 1) onPrefetchPage?.(1);\n\t};\n\tconst handlePrefetchPreviousPage = () => {\n\t\tif (pagination.page > 1) onPrefetchPage?.(pagination.page - 1);\n\t};\n\tconst handlePrefetchNextPage = () => {\n\t\tif (pagination.page < pages) onPrefetchPage?.(pagination.page + 1);\n\t};\n\tconst handlePrefetchLastPage = () => {\n\t\tif (pagination.page < pages) onPrefetchPage?.(pages);\n\t};\n\n\tconst disablePreviousPage = pagination.page <= 1;\n\tconst disableNextPage = pagination.page >= pages;\n\n\tconst handleChangeLimit = (value: string) => {\n\t\tconst newLimit = Number(value);\n\t\tconst newTotalPages = Math.ceil(count / newLimit);\n\t\tconst newPage = Math.min(pagination.page, newTotalPages);\n\t\tonChangePagination({\n\t\t\tlimit: newLimit,\n\t\t\tpage: newPage,\n\t\t});\n\t};\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-between items-center\">\n\t\t\t<div className=\"flex flex-row items-center gap-2 text-xs text-muted-foreground\">\n\t\t\t\t<span className=\"whitespace-nowrap\">Items per page</span>\n\t\t\t\t<Select\n\t\t\t\t\tvalue={String(pagination.limit)}\n\t\t\t\t\tonValueChange={handleChangeLimit}\n\t\t\t\t>\n\t\t\t\t\t<SelectTrigger aria-label=\"Items per page\">\n\t\t\t\t\t\t<SelectValue placeholder=\"Theme\" />\n\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t{PAGINATION_INCREMENTS.map((increment) => (\n\t\t\t\t\t\t\t<SelectItem key={increment} value={String(increment)}>\n\t\t\t\t\t\t\t\t{increment}\n\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SelectContent>\n\t\t\t\t</Select>\n\t\t\t</div>\n\t\t\t<Pagination className=\"justify-end\">\n\t\t\t\t<PaginationContent>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationFirstButton\n\t\t\t\t\t\t\tonClick={handleFirstPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchFirstPage}\n\t\t\t\t\t\t\tdisabled={disablePreviousPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<PaginationPreviousButton\n\t\t\t\t\t\t\tonClick={handlePreviousPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchPreviousPage}\n\t\t\t\t\t\t\tdisabled={disablePreviousPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem className=\"text-sm\">\n\t\t\t\t\t\tPage {pages === 0 ? 0 : pagination.page} of {pages}\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationNextButton\n\t\t\t\t\t\t\tonClick={handleNextPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchNextPage}\n\t\t\t\t\t\t\tdisabled={disableNextPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t<PaginationLastButton\n\t\t\t\t\t\t\tonClick={handleLastPage}\n\t\t\t\t\t\t\tonMouseEnter={handlePrefetchLastPage}\n\t\t\t\t\t\t\tdisabled={disableNextPage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t</Pagination>\n\t\t</div>\n\t);\n};\n"],"names":["TaskRunsSortFilter","defaultValue","value","onSelect","jsxs","Select","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","TaskRunsListItem","taskRun","flow","flowRun","checked","onCheckedChange","isSelectable","Card","stateCardVariants","Checkbox","TaskRunBreadcrumbs","TagBadgeGroup","StateBadge","TaskRunStartTime","TaskRunDuration","cva","Breadcrumb","BreadcrumbList","Fragment","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","start_time","expected_start_time","text","tooltipText","useMemo","formatDate","TooltipProvider","Tooltip","TooltipTrigger","Icon","TooltipContent","estimated_run_time","total_run_time","duration","durationLabel","humanizeDuration","durationTooltip","TaskRunsListItemWithFlowData","flowRunId","useSuspenseQuery","buildGetFlowRunDetailsQuery","buildFLowDetailsQuery","TaskRunsListItemWithDataInner","TaskRunsListItemWithData","Suspense","TaskRunsList","taskRuns","onClearFilters","selectedRows","Typography","Button","LoadingSkeleton","numSkeletons","_","i","Skeleton","PAGINATION_INCREMENTS","TaskRunsPagination","count","pages","pagination","onChangePagination","onPrefetchPage","handleFirstPage","handlePreviousPage","handleNextPage","handleLastPage","handlePrefetchFirstPage","handlePrefetchPreviousPage","handlePrefetchNextPage","handlePrefetchLastPage","disablePreviousPage","disableNextPage","handleChangeLimit","newLimit","newTotalPages","newPage","increment","Pagination","PaginationContent","PaginationItem","PaginationFirstButton","PaginationPreviousButton","PaginationNextButton","PaginationLastButton"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as i}from"./vendor-tanstack-BcZfOOfy.js";import{
|
|
2
|
-
//# sourceMappingURL=textarea-
|
|
1
|
+
import{j as i}from"./vendor-tanstack-BcZfOOfy.js";import{a_ as t}from"./index-B8vo2Lrg.js";function n({className:r,...e}){return i.jsx("textarea",{"data-slot":"textarea",className:t("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",r),...e})}export{n as T};
|
|
2
|
+
//# sourceMappingURL=textarea-DUhh6-kq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-
|
|
1
|
+
{"version":3,"file":"textarea-DUhh6-kq.js","sources":["../../src/components/ui/textarea.tsx"],"sourcesContent":["import type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n\treturn (\n\t\t<textarea\n\t\t\tdata-slot=\"textarea\"\n\t\t\tclassName={cn(\n\t\t\t\t\"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Textarea };\n"],"names":["Textarea","className","props","jsx","cn"],"mappings":"2FAIA,SAASA,EAAS,CAAE,UAAAC,EAAW,GAAGC,GAA2C,CAC5E,OACCC,EAAAA,IAAC,WAAA,CACA,YAAU,WACV,UAAWC,EACV,qbACAH,CAAA,EAEA,GAAGC,CAAA,CAAA,CAGP"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,j as e}from"./vendor-tanstack-BcZfOOfy.js";import{ag as j,ah as T,ai as f,aj as L,al as E,ak as g,am as w,an as u}from"./index-B8vo2Lrg.js";import{c as b,e as z}from"./dropdown-menu-D7Gwbd15.js";function x(s){return s.replaceAll("/"," / ").replaceAll("_"," ")}const C=Intl.DateTimeFormat().resolvedOptions().timeZone,p=[{label:"UTC",value:"Etc/UTC"},{label:x(C),value:C}],h=Intl.supportedValuesOf("timeZone").map(s=>({label:x(s),value:s})).slice(0,5),M=[...p,...h],A=({selectedValue:s="",onSelect:m})=>{const[c,a]=t.useState(""),r=t.useDeferredValue(c),i=t.useMemo(()=>p.filter(o=>o.label.toLowerCase().includes(r.toLowerCase())||o.value.toLowerCase().includes(r.toLowerCase())),[r]),d=t.useMemo(()=>h.filter(o=>o.label.toLowerCase().includes(r.toLowerCase())||o.value.toLowerCase().includes(r.toLowerCase())),[r]),S=t.useMemo(()=>M.find(({value:o})=>o===s),[s]);return e.jsxs(j,{children:[e.jsx(T,{selected:!!s,"aria-label":"Select timezone",children:S?.label??"Select timezone"}),e.jsxs(f,{children:[e.jsx(L,{value:c,onValueChange:a,placeholder:"Search"}),e.jsx(E,{children:"No timezone found"}),e.jsx(g,{children:e.jsxs(w,{children:[i.length>0&&e.jsx(b,{children:"Suggested timezones"}),i.map(({label:o,value:n})=>e.jsx(u,{selected:s===n,onSelect:l=>{m(l),a("")},value:n,children:o},n)),e.jsx(z,{}),d.length>0&&e.jsx(b,{children:"All timezones"}),d.map(({label:o,value:n})=>e.jsx(u,{selected:s===n,onSelect:l=>{m(l),a("")},value:n,children:o},n))]})})]})]})};export{A as T};
|
|
2
|
+
//# sourceMappingURL=timezone-select-D4Q6VBtD.js.map
|
prefect/server/ui-v2/assets/{timezone-select-BuPYznge.js.map → timezone-select-D4Q6VBtD.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timezone-select-
|
|
1
|
+
{"version":3,"file":"timezone-select-D4Q6VBtD.js","sources":["../../src/components/ui/timezone-select/timezone-select.tsx"],"sourcesContent":["import { useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport {\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n} from \"@/components/ui/dropdown-menu\";\n\nfunction getTimezoneLabel(value: string): string {\n\treturn value.replaceAll(\"/\", \" / \").replaceAll(\"_\", \" \");\n}\n\nconst localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nconst SUGGESTED_TIMEZONES = [\n\t{ label: \"UTC\", value: \"Etc/UTC\" },\n\t{\n\t\tlabel: getTimezoneLabel(localTimezone),\n\t\tvalue: localTimezone,\n\t},\n];\n\nconst TIMEZONES = Intl.supportedValuesOf(\"timeZone\")\n\t.map((timezone) => ({\n\t\tlabel: getTimezoneLabel(timezone),\n\t\tvalue: timezone,\n\t}))\n\t.slice(0, 5);\n\nconst ALL_TIMEZONES = [...SUGGESTED_TIMEZONES, ...TIMEZONES];\n\ntype TimezoneSelectProps = {\n\tselectedValue: string | undefined | null;\n\tonSelect: (value: string) => void;\n};\n\nexport const TimezoneSelect = ({\n\tselectedValue = \"\",\n\tonSelect,\n}: TimezoneSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst filteredSuggestedTimezones = useMemo(() => {\n\t\treturn SUGGESTED_TIMEZONES.filter(\n\t\t\t(timeZone) =>\n\t\t\t\ttimeZone.label.toLowerCase().includes(deferredSearch.toLowerCase()) ||\n\t\t\t\ttimeZone.value.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch]);\n\n\tconst filteredTimezones = useMemo(() => {\n\t\treturn TIMEZONES.filter(\n\t\t\t(timeZone) =>\n\t\t\t\ttimeZone.label.toLowerCase().includes(deferredSearch.toLowerCase()) ||\n\t\t\t\ttimeZone.value.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch]);\n\n\tconst selectedTimezone = useMemo(\n\t\t() => ALL_TIMEZONES.find(({ value }) => value === selectedValue),\n\t\t[selectedValue],\n\t);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selectedValue)}\n\t\t\t\taria-label=\"Select timezone\"\n\t\t\t>\n\t\t\t\t{selectedTimezone?.label ?? \"Select timezone\"}\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\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No timezone found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredSuggestedTimezones.length > 0 && (\n\t\t\t\t\t\t\t<DropdownMenuLabel>Suggested timezones</DropdownMenuLabel>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{filteredSuggestedTimezones.map(({ label, value }) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\tselected={selectedValue === value}\n\t\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\t\tonSelect(value);\n\t\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t{filteredTimezones.length > 0 && (\n\t\t\t\t\t\t\t<DropdownMenuLabel>All timezones</DropdownMenuLabel>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{filteredTimezones.map(({ label, value }) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\tselected={selectedValue === value}\n\t\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\t\tonSelect(value);\n\t\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t\t);\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":["getTimezoneLabel","value","localTimezone","SUGGESTED_TIMEZONES","TIMEZONES","timezone","ALL_TIMEZONES","TimezoneSelect","selectedValue","onSelect","search","setSearch","useState","deferredSearch","useDeferredValue","filteredSuggestedTimezones","useMemo","timeZone","filteredTimezones","selectedTimezone","Combobox","jsx","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","DropdownMenuLabel","label","ComboboxCommandItem","DropdownMenuSeparator"],"mappings":"iNAgBA,SAASA,EAAiBC,EAAuB,CAChD,OAAOA,EAAM,WAAW,IAAK,KAAK,EAAE,WAAW,IAAK,GAAG,CACxD,CAEA,MAAMC,EAAgB,KAAK,iBAAiB,kBAAkB,SAExDC,EAAsB,CAC3B,CAAE,MAAO,MAAO,MAAO,SAAA,EACvB,CACC,MAAOH,EAAiBE,CAAa,EACrC,MAAOA,CAAA,CAET,EAEME,EAAY,KAAK,kBAAkB,UAAU,EACjD,IAAKC,IAAc,CACnB,MAAOL,EAAiBK,CAAQ,EAChC,MAAOA,CACR,EAAE,EACD,MAAM,EAAG,CAAC,EAENC,EAAgB,CAAC,GAAGH,EAAqB,GAAGC,CAAS,EAO9CG,EAAiB,CAAC,CAC9B,cAAAC,EAAgB,GAChB,SAAAC,CACD,IAA2B,CAC1B,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAE,EAEjCC,EAAiBC,EAAAA,iBAAiBJ,CAAM,EAExCK,EAA6BC,EAAAA,QAAQ,IACnCb,EAAoB,OACzBc,GACAA,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,YAAA,CAAa,GAClEI,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,aAAa,CAAA,EAElE,CAACA,CAAc,CAAC,EAEbK,EAAoBF,EAAAA,QAAQ,IAC1BZ,EAAU,OACfa,GACAA,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,YAAA,CAAa,GAClEI,EAAS,MAAM,YAAA,EAAc,SAASJ,EAAe,aAAa,CAAA,EAElE,CAACA,CAAc,CAAC,EAEbM,EAAmBH,EAAAA,QACxB,IAAMV,EAAc,KAAK,CAAC,CAAE,MAAAL,CAAA,IAAYA,IAAUO,CAAa,EAC/D,CAACA,CAAa,CAAA,EAGf,cACEY,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,EAAA,CACA,SAAU,EAAQd,EAClB,aAAW,kBAEV,YAAkB,OAAS,iBAAA,CAAA,SAE5Be,EAAA,CACA,SAAA,CAAAF,EAAAA,IAACG,EAAA,CACA,MAAOd,EACP,cAAeC,EACf,YAAY,QAAA,CAAA,EAEbU,EAAAA,IAACI,GAAqB,SAAA,mBAAA,CAAiB,EACvCJ,EAAAA,IAACK,EAAA,CACA,SAAAC,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAb,EAA2B,OAAS,GACpCM,EAAAA,IAACQ,EAAA,CAAkB,SAAA,sBAAmB,EAEtCd,EAA2B,IAAI,CAAC,CAAE,MAAAe,EAAO,MAAA7B,KAExCoB,EAAAA,IAACU,EAAA,CAEA,SAAUvB,IAAkBP,EAC5B,SAAWA,GAAU,CACpBQ,EAASR,CAAK,EACdU,EAAU,EAAE,CACb,EACA,MAAAV,EAEC,SAAA6B,CAAA,EARI7B,CAAA,CAWP,QACA+B,EAAA,EAAsB,EACtBd,EAAkB,OAAS,GAC3BG,EAAAA,IAACQ,GAAkB,SAAA,gBAAa,EAEhCX,EAAkB,IAAI,CAAC,CAAE,MAAAY,EAAO,MAAA7B,KAE/BoB,EAAAA,IAACU,EAAA,CAEA,SAAUvB,IAAkBP,EAC5B,SAAWA,GAAU,CACpBQ,EAASR,CAAK,EACdU,EAAU,EAAE,CACb,EACA,MAAAV,EAEC,SAAA6B,CAAA,EARI7B,CAAA,CAWP,CAAA,CAAA,CACF,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,CAEF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as i,r as s}from"./vendor-tanstack-BcZfOOfy.js";import{aD as l,aE as c}from"./vendor-radix-BTiKGWfR.js";import{
|
|
2
|
-
//# sourceMappingURL=toggle-group-
|
|
1
|
+
import{j as i,r as s}from"./vendor-tanstack-BcZfOOfy.js";import{aD as l,aE as c}from"./vendor-radix-BTiKGWfR.js";import{cE as g,a_ as d}from"./index-B8vo2Lrg.js";const v=g("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-2 min-w-9",sm:"h-8 px-1.5 min-w-8",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),u=s.createContext({size:"default",variant:"default"});function x({className:n,variant:e,size:t,children:a,...o}){return i.jsx(l,{"data-slot":"toggle-group","data-variant":e,"data-size":t,className:d("group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs",n),...o,children:i.jsx(u.Provider,{value:{variant:e,size:t},children:a})})}function b({className:n,children:e,variant:t,size:a,...o}){const r=s.useContext(u);return i.jsx(c,{"data-slot":"toggle-group-item","data-variant":r.variant||t,"data-size":r.size||a,className:d(v({variant:r.variant||t,size:r.size||a}),"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",n),...o,children:e})}export{x as T,b as a};
|
|
2
|
+
//# sourceMappingURL=toggle-group-7WUJn2Tx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-group-
|
|
1
|
+
{"version":3,"file":"toggle-group-7WUJn2Tx.js","sources":["../../src/components/ui/toggle/styles.ts","../../src/components/ui/toggle-group.tsx"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const toggleVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-transparent\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-9 px-2 min-w-9\",\n\t\t\t\tsm: \"h-8 px-1.5 min-w-8\",\n\t\t\t\tlg: \"h-10 px-2.5 min-w-10\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n","import * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { toggleVariants } from \"@/components/ui/toggle\";\nimport { cn } from \"@/utils\";\n\nconst ToggleGroupContext = React.createContext<\n\tVariantProps<typeof toggleVariants>\n>({\n\tsize: \"default\",\n\tvariant: \"default\",\n});\n\nfunction ToggleGroup({\n\tclassName,\n\tvariant,\n\tsize,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n\tVariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<ToggleGroupPrimitive.Root\n\t\t\tdata-slot=\"toggle-group\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ToggleGroupContext.Provider value={{ variant, size }}>\n\t\t\t\t{children}\n\t\t\t</ToggleGroupContext.Provider>\n\t\t</ToggleGroupPrimitive.Root>\n\t);\n}\n\nfunction ToggleGroupItem({\n\tclassName,\n\tchildren,\n\tvariant,\n\tsize,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n\tVariantProps<typeof toggleVariants>) {\n\tconst context = React.useContext(ToggleGroupContext);\n\n\treturn (\n\t\t<ToggleGroupPrimitive.Item\n\t\t\tdata-slot=\"toggle-group-item\"\n\t\t\tdata-variant={context.variant || variant}\n\t\t\tdata-size={context.size || size}\n\t\t\tclassName={cn(\n\t\t\t\ttoggleVariants({\n\t\t\t\t\tvariant: context.variant || variant,\n\t\t\t\t\tsize: context.size || size,\n\t\t\t\t}),\n\t\t\t\t\"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ToggleGroupPrimitive.Item>\n\t);\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n"],"names":["toggleVariants","cva","ToggleGroupContext","React.createContext","ToggleGroup","className","variant","size","children","props","jsx","ToggleGroupPrimitive.Root","cn","ToggleGroupItem","context","React.useContext","ToggleGroupPrimitive.Item"],"mappings":"kKAEO,MAAMA,EAAiBC,EAC7B,gjBACA,CACC,SAAU,CACT,QAAS,CACR,QAAS,iBACT,QACC,2FAAA,EAEF,KAAM,CACL,QAAS,mBACT,GAAI,qBACJ,GAAI,sBAAA,CACL,EAED,gBAAiB,CAChB,QAAS,UACT,KAAM,SAAA,CACP,CAEF,ECfMC,EAAqBC,EAAAA,cAEzB,CACD,KAAM,UACN,QAAS,SACV,CAAC,EAED,SAASC,EAAY,CACpB,UAAAC,EACA,QAAAC,EACA,KAAAC,EACA,SAAAC,EACA,GAAGC,CACJ,EACsC,CACrC,OACCC,EAAAA,IAACC,EAAA,CACA,YAAU,eACV,eAAcL,EACd,YAAWC,EACX,UAAWK,EACV,yFACAP,CAAA,EAEA,GAAGI,EAEJ,SAAAC,EAAAA,IAACR,EAAmB,SAAnB,CAA4B,MAAO,CAAE,QAAAI,EAAS,KAAAC,CAAA,EAC7C,SAAAC,CAAA,CACF,CAAA,CAAA,CAGH,CAEA,SAASK,EAAgB,CACxB,UAAAR,EACA,SAAAG,EACA,QAAAF,EACA,KAAAC,EACA,GAAGE,CACJ,EACsC,CACrC,MAAMK,EAAUC,EAAAA,WAAiBb,CAAkB,EAEnD,OACCQ,EAAAA,IAACM,EAAA,CACA,YAAU,oBACV,eAAcF,EAAQ,SAAWR,EACjC,YAAWQ,EAAQ,MAAQP,EAC3B,UAAWK,EACVZ,EAAe,CACd,QAASc,EAAQ,SAAWR,EAC5B,KAAMQ,EAAQ,MAAQP,CAAA,CACtB,EACD,8LACAF,CAAA,EAEA,GAAGI,EAEH,SAAAD,CAAA,CAAA,CAGJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as z,j as t,L as p,r as Y,s as re,t as oe,E as ae,d as ce}from"./vendor-tanstack-BcZfOOfy.js";import{bt as ie,d0 as le,T as B,d7 as ue,da as de,C as G,ap as u,au as K,I as w,a2 as pe,bl as me,q as H,f as fe,a3 as he,a4 as xe,a5 as ye,L as je,b9 as N,cu as we,dd as v,$ as ke,cr as Ae,U as _,db as _e,de as be,G as ge,y as b,bE as De,df as Se}from"./index-B8vo2Lrg.js";import{F as Te,W as Ee,a as Ne}from"./work-queue-icon-text-BOpcJ8YU.js";import{D as ve,a as Re,b as Ce,c as Le,d as k}from"./dropdown-menu-D7Gwbd15.js";import{u as Pe}from"./use-delete-confirmation-dialog-CUdii6Lo.js";const We=e=>{const{automationIds:s,blockDocumentIds:n,deploymentIds:r,workPoolIds:c,workQueueIds:a}=Ie(e.actions),{data:o,loading:i}=qe(Array.from(s)),l=z({queries:[ie({offset:0,sort:"BLOCK_TYPE_AND_NAME_ASC",include_secrets:!1,block_documents:{operator:"and_",id:{any_:Array.from(n)},is_anonymous:{}}},{enabled:n.size>0}),le({offset:0,sort:"CREATED_DESC",deployments:{id:{any_:Array.from(r)},operator:"and_"}},{enabled:r.size>0}),B({offset:0,work_pools:{id:{any_:Array.from(c)},operator:"and_"}},{enabled:c.size>0}),ue({offset:0,work_queues:{id:{any_:Array.from(a)},operator:"and_"}},{enabled:a.size>0})],combine:d=>{const[j,ee,te,se]=d;return{data:{blockDocuments:j.data,deployments:ee.data,workPools:te.data,workQueues:se.data},loading:d.some(ne=>ne.isLoading)}}});return{loading:i||l.loading,data:{automationsMap:o,blockDocumentsMap:A(l.data.blockDocuments),deploymentsMap:A(l.data.deployments),workPoolsMap:A(l.data.workPools),workQueuesMap:A(l.data.workQueues)}}},qe=e=>z({queries:Array.from(e).map(s=>de(s)),combine:s=>{const n=new Map;for(const r of s)r.data&&n.set(r.data.id,r.data);return{data:n,loading:s.some(r=>r.isLoading)}}}),Ie=e=>{const s=new Set,n=new Set,r=new Set,c=new Set,a=new Set;for(const o of e)switch(o.type){case"run-deployment":case"pause-deployment":case"resume-deployment":o.deployment_id&&r.add(o.deployment_id);break;case"pause-work-queue":case"resume-work-queue":o.work_queue_id&&a.add(o.work_queue_id);break;case"pause-automation":case"resume-automation":o.automation_id&&s.add(o.automation_id);break;case"pause-work-pool":case"resume-work-pool":o.work_pool_id&&c.add(o.work_pool_id);break;case"send-notification":case"call-webhook":o.block_document_id&&n.add(o.block_document_id);break}return{automationIds:s,blockDocumentIds:n,deploymentIds:r,workPoolIds:c,workQueueIds:a}};function A(e){const s=new Map;for(const n of e??[])s.set(n.id,n);return s}const Qe={"cancel-flow-run":"Cancel flow run","suspend-flow-run":"Suspend flow run","resume-flow-run":"Resume a flow run","change-flow-run-state":"Change state of a flow run","run-deployment":"Run deployment","pause-deployment":"Pause deployment","resume-deployment":"Resume deployment","pause-work-queue":"Pause work queue","resume-work-queue":"Resume work queue","pause-work-pool":"Pause work pool","resume-work-pool":"Resume work pool","pause-automation":"Pause automation","resume-automation":"Resume automation","call-webhook":"Call webhook using","send-notification":"Send a notification using","do-nothing":"Do nothing"},$e=({action:e,automationsMap:s,blockDocumentsMap:n,deploymentsMap:r,workPoolsMap:c,workQueuesMap:a})=>t.jsx(G,{className:"p-4",children:t.jsx(Me,{action:e,automationsMap:s,blockDocumentsMap:n,deploymentsMap:r,workPoolsMap:c,workQueuesMap:a})}),Me=({action:e,automationsMap:s,blockDocumentsMap:n,deploymentsMap:r,workPoolsMap:c,workQueuesMap:a})=>{const o=Qe[e.type];switch(e.type){case"cancel-flow-run":case"suspend-flow-run":case"resume-flow-run":case"do-nothing":return t.jsx(Oe,{label:o});case"run-deployment":if(e.deployment_id&&e.source==="selected"){const i=r.get(e.deployment_id);return i?t.jsx(P,{label:o,deployment:i,parameters:e.parameters,job_variables:e.job_variables}):t.jsx(u,{children:"Deployment not found"})}return t.jsx(h,{label:o});case"pause-deployment":case"resume-deployment":if(e.deployment_id&&e.source==="selected"){const i=r.get(e.deployment_id);return i?t.jsx(P,{label:o,deployment:i}):t.jsx(u,{children:"Deployment not found"})}return t.jsx(h,{label:o});case"pause-work-queue":case"resume-work-queue":if(e.work_queue_id&&e.source==="selected"){const i=a.get(e.work_queue_id);return i?t.jsx(Be,{label:o,workQueue:i}):t.jsx(u,{children:"Work queue not found"})}return t.jsx(h,{label:o});case"pause-automation":case"resume-automation":if(e.automation_id&&e.source==="selected"){const i=s.get(e.automation_id);return i?t.jsx(Fe,{label:o,automation:i}):t.jsx(u,{children:"Automation not found"})}return t.jsx(h,{label:o});case"pause-work-pool":case"resume-work-pool":if(e.work_pool_id&&e.source==="selected"){const i=c.get(e.work_pool_id);return i?t.jsx(Ye,{label:o,workPool:i}):t.jsx(u,{children:"Workpool not found"})}return t.jsx(h,{label:o});case"send-notification":{const i=n.get(e.block_document_id);return i?t.jsx(Ve,{label:o,blockDocument:i}):t.jsx(u,{children:"Block document not found"})}case"call-webhook":{const i=n.get(e.block_document_id);return i?t.jsx(ze,{label:o,blockDocument:i}):t.jsx(u,{children:"Block document not found"})}case"change-flow-run-state":return t.jsx(Ue,{label:o,type:e.state,name:e.name});default:return null}},f=({children:e})=>t.jsx("div",{className:"text-sm flex items-center gap-1",children:e}),y=({iconId:e,name:s})=>t.jsxs("div",{className:"text-xs flex items-center",children:[t.jsx(w,{id:e,className:"size-4 mr-1"}),s]}),Oe=({label:e})=>t.jsxs(u,{variant:"bodySmall",children:[e," from the triggering event"]}),h=({label:e})=>t.jsxs(u,{variant:"bodySmall",children:[e," inferred from the triggering event"]}),Ue=({label:e,type:s,name:n})=>t.jsxs(f,{children:[t.jsx(h,{label:e})," to ",t.jsx(K,{type:s,name:n})]}),P=({label:e,deployment:s,parameters:n,job_variables:r})=>t.jsxs(f,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(p,{to:"/deployments/deployment/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(y,{iconId:"Rocket",name:s.name})}),n!==void 0&&t.jsx(W,{title:"Parameters",payload:n}),r!==void 0&&t.jsx(W,{title:"Job Variables",payload:r})]}),W=({title:e,payload:s})=>t.jsxs(pe,{children:[t.jsx(me,{asChild:!0,children:t.jsxs(H,{variant:"secondary",size:"sm",children:["Show ",fe(e)]})}),t.jsxs(he,{"aria-describedby":void 0,children:[t.jsx(xe,{children:t.jsx(ye,{children:e})}),t.jsx(je,{value:JSON.stringify(s),disabled:!0})]})]}),Fe=({label:e,automation:s})=>t.jsxs(f,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(p,{to:"/automations/automation/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(y,{iconId:"Bot",name:s.name})})]}),Ve=({label:e,blockDocument:s})=>{if(!s.name)return t.jsx(u,{children:"Block not found"});const n=s.block_type_name?`Send a ${s.block_type_name.toLowerCase()} using`:e;return t.jsxs(f,{children:[t.jsx("label",{htmlFor:`${e}-${s.id}`,children:n}),t.jsx(p,{to:"/blocks/block/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(y,{iconId:"Box",name:s.name})})]})},ze=({label:e,blockDocument:s})=>s.name?t.jsxs(f,{children:[t.jsx("label",{htmlFor:`${e}-${s.id}`,children:e}),t.jsx(p,{to:"/blocks/block/$id",params:{id:s.id},"aria-label":s.name,children:t.jsx(y,{iconId:"Box",name:s.name})})]}):t.jsx(u,{children:"Block not found"}),Ye=({label:e,workPool:s})=>t.jsxs(f,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(p,{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:s.name},"aria-label":s.name,children:t.jsx(y,{iconId:"Cpu",name:s.name})})]}),Be=({label:e,workQueue:s})=>t.jsxs(f,{children:[t.jsxs("label",{htmlFor:`${e}-${s.id}`,children:[e,":"]}),t.jsx(p,{to:"/work-pools/work-pool/$workPoolName/queue/$workQueueName",params:{workPoolName:s.name,workQueueName:s.name},"aria-label":s.name,children:t.jsx(y,{iconId:"Cpu",name:s.name})})]}),Ge=({trigger:e})=>{const s=e.triggers?.length??0,n=e.require;let r;return n==="all"?r="all":n==="any"?r="any":typeof n=="number"?r=`at least ${n}`:r="all",t.jsx("div",{className:"flex flex-wrap gap-1 items-center",children:t.jsxs(u,{variant:"bodySmall",children:["A compound trigger requiring ",r," of ",s," nested"," ",s===1?"trigger":"triggers"," to fire"]})})},q=()=>t.jsx(u,{variant:"bodySmall",children:"A custom trigger"}),Ke=({deploymentId:e})=>t.jsx(Y.Suspense,{fallback:t.jsx(N,{className:"h-4 w-full"}),children:t.jsx(He,{deploymentId:e})}),He=({deploymentId:e})=>{const{data:s}=re(we(e));return t.jsxs("div",{className:"flex items-center gap-1 text-xs",children:["Deployment",t.jsxs(p,{to:"/deployments/deployment/$id",params:{id:s.id},className:"flex items-center gap-1",children:[t.jsx(w,{id:"Rocket",className:"size-4"}),s.name]})]})},g=1,Je=["prefect.deployment.ready","prefect.deployment.not-ready","prefect.deployment.disabled"],Xe=["prefect.work-pool.ready","prefect.work-pool.not-ready","prefect.work-pool.paused","prefect.work-pool.not_ready"],Ze=["prefect.work-queue.ready","prefect.work-queue.not-ready","prefect.work-queue.paused"];function R(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function m(e){return R(e)&&e.type==="event"&&(e.posture==="Reactive"||e.posture==="Proactive")}function et(e){return R(e)&&e.type==="compound"&&Array.isArray(e.triggers)}function tt(e){return R(e)&&e.type==="sequence"&&Array.isArray(e.triggers)}function J(e){return e==null?[]:Array.isArray(e)?e:[e]}function st(e,s){if(m(e)){const n=e.match;if(n&&typeof n=="object"){const r=n[s];return r?J(r):[]}}return[]}function D(e,s){const n=st(e,"prefect.resource.id");return n.length===0?!1:s(n)}function S(e,s){return m(e)?(e.for_each??[]).every(r=>r.startsWith(s)):!1}function T(e,s){return m(e)?s(e.after??[]):!1}function E(e,s){return m(e)?s(e.expect??[]):!1}function I(e){return Je.includes(e)}function Q(e){return Xe.includes(e)}function $(e){return Ze.includes(e)}function nt(e){return m(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.deployment")))&&S(e,"prefect.resource.id")&&T(e,s=>s.every(n=>I(n)))&&E(e,s=>s.every(n=>I(n)))&&e.threshold===g}function rt(e,s){const n=e.match_related;if(!n)return[];const r=Array.isArray(n)?n:[n],c=[];for(const a of r)if(a&&typeof a=="object"){const o=a[s];o&&c.push(...J(o))}return c}function ot(e){const s=e.match_related;return s?Array.isArray(s)?s.length===0:Object.keys(s).length===0:!0}function M(e,s){const n=rt(e,"prefect.resource.id");return n.length===0?!1:n.every(r=>r.startsWith(s))}function at(e){return ot(e)||M(e,"prefect.flow")||M(e,"prefect.tag")}function ct(e){return m(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.flow-run")))&&S(e,"prefect.resource.id")&&T(e,s=>s.every(n=>n.startsWith("prefect.flow-run")))&&E(e,s=>s.every(n=>n.startsWith("prefect.flow-run")))&&at(e)&&e.threshold===g}function it(e){return m(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.work-pool")))&&S(e,"prefect.resource.id")&&T(e,s=>s.every(n=>Q(n)))&&E(e,s=>s.every(n=>Q(n)))&&e.threshold===g}function lt(e){return m(e)&&D(e,s=>s.every(n=>n.startsWith("prefect.work-queue")))&&S(e,"prefect.resource.id")&&T(e,s=>s.every(n=>$(n)))&&E(e,s=>s.every(n=>$(n)))&&e.threshold===g}const ut={"deployment-status":nt,"flow-run-state":ct,"work-pool-status":it,"work-queue-status":lt};function dt(e){for(const[s,n]of Object.entries(ut))if(n(e))return s;return"custom"}function C(e){switch(e){case"Reactive":return"enters";case"Proactive":return"stays in"}}function pt(e){switch(e){case"READY":return"Ready";case"NOT_READY":return"Not Ready";case"PAUSED":return"Paused";default:{const s=e;throw new Error(`getWorkQueueStatusLabel missing case for ${s}`)}}}function mt(e){switch(e){case"ready":return"ready";case"not_ready":return"not ready"}}const ft=({deploymentIds:e,posture:s,status:n,time:r})=>{const c=e.length===0,a=C(s),o=mt(n);return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center",children:[t.jsx("span",{children:"When"}),c?t.jsx("span",{children:"any deployment"}):e.map((i,l)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Ke,{deploymentId:i}),l===e.length-2&&t.jsx("span",{children:"or"})]},i)),t.jsx("span",{children:a}),t.jsx("span",{children:o}),s==="Proactive"&&r!==void 0&&r>0&&t.jsxs("span",{children:["for ",v(r)]})]})};function ht(e){const s=e.toUpperCase();return["COMPLETED","FAILED","RUNNING","CANCELLED","CANCELLING","CRASHED","PAUSED","PENDING","SCHEDULED"].includes(s)?s:null}const xt=({flowIds:e,tags:s,posture:n,states:r,time:c})=>{const a=C(n);return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center",children:[t.jsx("span",{children:"When any flow run"}),e.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"of flow"}),e.map((o,i)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Te,{flowId:o}),i===e.length-2&&t.jsx("span",{children:"or"})]},o))]}),s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"with the tag"}),t.jsx(ke,{tags:s})]}),t.jsx("span",{children:a}),r.length>0?r.map(o=>{const i=ht(o);return i?t.jsx(K,{type:i},o):null}):t.jsx("span",{children:"any state"}),n==="Proactive"&&c!==void 0&&c>0&&t.jsxs("span",{children:["for ",Ae(c)]})]})},yt=({trigger:e})=>{const s=e.triggers?.length??0;return t.jsx("div",{className:"flex flex-wrap gap-1 items-center",children:t.jsxs(u,{variant:"bodySmall",children:["A sequence trigger with ",s," nested"," ",s===1?"trigger":"triggers"," that must fire in order"]})})},jt=e=>{switch(e){case"READY":return"Ready";case"NOT_READY":return"Not Ready";case"PAUSED":return"Paused"}},wt=({workPoolName:e})=>t.jsxs(p,{to:"/work-pools/work-pool/$workPoolName",params:{workPoolName:e},className:"inline-flex items-center gap-1",children:[t.jsx(w,{id:"Cpu",className:"size-4"}),e]}),kt=e=>e.length===0?null:e.map((s,n)=>t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(wt,{workPoolName:s.name}),n===e.length-2&&" or ",n<e.length-2&&", "]},s.id)),At=({workPoolIds:e,posture:s,status:n,time:r})=>{const{data:c=[]}=oe(B({offset:0,work_pools:{id:{any_:e},operator:"and_"}},{enabled:e.length>0})),a=s==="Reactive"?"enters":"stays in",o=jt(n).toLowerCase(),i=e.length===0?"any work pool":`${_(e.length,"work pool")} `;return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center",children:[t.jsx("span",{children:"When"}),t.jsx("span",{children:i}),e.length>0&&kt(c),t.jsx("span",{children:a}),t.jsx("span",{children:o}),s==="Proactive"&&r!==void 0&&t.jsxs("span",{children:["for ",v(r)]})]})},_t=e=>t.jsx(Y.Suspense,{fallback:t.jsx(N,{className:"h-4 w-full"}),children:t.jsx(bt,{...e})}),bt=({workQueueIds:e,workPoolNames:s,posture:n,status:r,time:c})=>{const a=e.length===0,o=s.length===0,l=ae({queries:e.map(d=>_e(d))}).map(d=>d.data);return t.jsxs("div",{className:"flex flex-wrap gap-1 items-center text-sm",children:[t.jsx("span",{children:"When"}),a?t.jsx("span",{children:"any work queue"}):t.jsxs(t.Fragment,{children:[t.jsx("span",{children:_(l.length,"work queue")}),l.map((d,j)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Ee,{workPoolName:d.work_pool_name??"",workQueueName:d.name,showLabel:!0,showStatus:!0}),j===l.length-2&&t.jsx("span",{children:"or"})]},d.id))]}),!o&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{children:["from the ",_(s.length,"work pool")]}),s.map((d,j)=>t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx(Ne,{workPoolName:d}),j===s.length-2&&t.jsx("span",{children:"or"})]},d))]}),t.jsx("span",{children:C(n)}),t.jsx("span",{children:pt(r).toLowerCase()}),n==="Proactive"&&c!==void 0&&t.jsxs("span",{children:["for ",v(c)]})]})};function X(e){return e==null?[]:Array.isArray(e)?e:[e]}function L(e,s){const n=e.match;if(n&&typeof n=="object")return n[s]}function Z(e,s){const n=e.match_related;if(!n)return[];const r=Array.isArray(n)?n:[n],c=[];for(const a of r)if(a&&typeof a=="object"){const o=a[s];o&&c.push(...X(o))}return c}function x(e,s){if(s==null)return[];const n=X(s);return n.includes(`${e}.*`)?[]:n.filter(r=>r.startsWith(e)).map(r=>r.split(`${e}.`)[1]??"").filter(r=>r!==""&&r!=="*")}function O(e){return e.includes("prefect.flow-run.*")?[]:e.filter(s=>s.startsWith("prefect.flow-run.")).map(s=>s.split("prefect.flow-run.")[1]??"").filter(s=>s!=="")}function gt(e){const s=Z(e,"prefect.resource.id"),n=x("prefect.flow",s),r=x("prefect.tag",s),c=e.posture,a=O(c==="Reactive"?e.expect??[]:e.after??[]);return{flowIds:n,tags:r,posture:c,states:a,time:e.within}}const U={"prefect.deployment.ready":"ready","prefect.deployment.not-ready":"not_ready","prefect.deployment.disabled":"not_ready"};function Dt(e){const s=L(e,"prefect.resource.id"),n=x("prefect.deployment",s),r=e.posture,c=r==="Reactive"?e.expect:e.after;let a="ready";for(const o of c??[])if(o in U){a=U[o];break}return{deploymentIds:n,posture:r,status:a,time:e.within}}const F={"prefect.work-pool.ready":"READY","prefect.work-pool.not-ready":"NOT_READY","prefect.work-pool.not_ready":"NOT_READY","prefect.work-pool.paused":"PAUSED"};function St(e){const s=L(e,"prefect.resource.id"),n=x("prefect.work-pool",s),r=e.posture,c=r==="Reactive"?e.expect:e.after;let a="READY";for(const o of c??[])if(o in F){a=F[o];break}return{workPoolIds:n,posture:r,status:a,time:e.within}}const V={"prefect.work-queue.ready":"READY","prefect.work-queue.not-ready":"NOT_READY","prefect.work-queue.paused":"PAUSED"};function Tt(e){const s=L(e,"prefect.resource.id"),n=x("prefect.work-queue",s),r=Z(e,"prefect.resource.id"),c=x("prefect.work-pool",r),a=e.posture,o=a==="Reactive"?e.expect:e.after;let i="READY";for(const l of o??[])if(l in V){i=V[l];break}return{workQueueIds:n,workPoolNames:c,posture:a,status:i,time:e.within}}const Et=({trigger:e})=>{if(et(e))return t.jsx(Ge,{trigger:e});if(tt(e))return t.jsx(yt,{trigger:e});if(!m(e))return t.jsx(q,{});switch(dt(e)){case"flow-run-state":return t.jsx(xt,{...gt(e)});case"deployment-status":return t.jsx(ft,{...Dt(e)});case"work-pool-status":return t.jsx(At,{...St(e)});case"work-queue-status":return t.jsx(_t,{...Tt(e)});default:return t.jsx(q,{})}},Pt=({automation:e})=>t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx(u,{className:"text-muted-foreground",variant:"bodySmall",children:"Description"}),t.jsx(u,{className:"text-muted-foreground",children:e.description||"None"})]}),Wt=({automation:e})=>{const{trigger:s}=e;return t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx(u,{children:"Trigger"}),t.jsx(Et,{trigger:s})]})},qt=({automation:e})=>{const{data:s,loading:n}=We(e),{automationsMap:r,blockDocumentsMap:c,deploymentsMap:a,workPoolsMap:o,workQueuesMap:i}=s;return t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx(u,{children:_(e.actions.length,"Action")}),t.jsx("ul",{className:"flex flex-col gap-2",children:n?Array.from({length:e.actions.length},(l,d)=>t.jsx(G,{className:"p-4",children:t.jsx(N,{className:"p-2 h-2 w-full"})},d)):e.actions.map(l=>t.jsx("li",{children:t.jsx($e,{action:l,automationsMap:r,blockDocumentsMap:c,deploymentsMap:a,workPoolsMap:o,workQueuesMap:i})},l.type))})]})},It=({automation:e})=>{const{updateAutomation:s}=be(),n=(r,c)=>{s({enabled:r,id:c},{onSuccess:()=>{b.success(`Automation ${r?"enabled":"disabled"}`)},onError:a=>{const o=a.message||"Unknown error while updating automation";console.error(o)}})};return t.jsx(ge,{"aria-label":"toggle automation",checked:e.enabled,onCheckedChange:r=>n(r,e.id)})},Qt=({id:e,onDelete:s})=>{const n=r=>{navigator.clipboard.writeText(r),b.success("ID copied")};return t.jsxs(ve,{children:[t.jsx(Re,{asChild:!0,children:t.jsxs(H,{variant:"outline",className:"size-8 p-0",children:[t.jsx("span",{className:"sr-only",children:"Open menu"}),t.jsx(w,{id:"MoreVertical",className:"size-4"})]})}),t.jsxs(Ce,{align:"end",children:[t.jsx(Le,{children:"Actions"}),t.jsx(k,{onClick:()=>n(e),children:"Copy ID"}),t.jsx(k,{asChild:!0,children:t.jsx(p,{to:"/automations/automation/$id/edit",params:{id:e},children:"Edit"})}),t.jsx(k,{onClick:s,children:"Delete"}),t.jsx(k,{asChild:!0,children:t.jsxs("a",{href:De["automations-guide"],className:"flex items-center",children:["Documentation ",t.jsx(w,{id:"ExternalLink",className:"ml-2 size-4"})]})})]})]})},$t=()=>{const e=ce(),[s,n]=Pe(),{deleteAutomation:r}=Se();return[s,(a,{shouldNavigate:o=!1}={})=>n({title:"Delete Automation",description:`Are you sure you want to delete ${a.name}?`,onConfirm:()=>{r(a.id,{onSuccess:()=>{b.success("Automation deleted"),o&&e({to:"/automations"})},onError:i=>{const l=i.message||"Unknown error while deleting automation.";b.error(l),console.error(l)}})}})]};export{It as A,Qt as a,Pt as b,Wt as c,qt as d,$t as u};
|
|
2
|
+
//# sourceMappingURL=use-delete-automation-confirmation-dialog-D4AD5Ndf.js.map
|