prefect 3.6.13__py3-none-any.whl → 3.6.13.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- prefect/_build_info.py +3 -3
- prefect/_internal/compatibility/blocks.py +0 -18
- prefect/client/schemas/filters.py +0 -24
- prefect/flow_engine.py +10 -192
- prefect/flows.py +2 -61
- prefect/results.py +21 -262
- prefect/runner/runner.py +82 -29
- prefect/runner/storage.py +2 -3
- prefect/server/schemas/filters.py +0 -45
- prefect/server/ui-v2/assets/{artifact-card-CUEaRDGw.js → artifact-card-C8JEQRHl.js} +2 -2
- prefect/server/ui-v2/assets/{artifact-card-CUEaRDGw.js.map → artifact-card-C8JEQRHl.js.map} +1 -1
- prefect/server/ui-v2/assets/{artifact._id-Ca6VCUS0.js → artifact._id-67V8kTg9.js} +2 -2
- prefect/server/ui-v2/assets/{artifact._id-Ca6VCUS0.js.map → artifact._id-67V8kTg9.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation-wizard-z26pICBl.js → automation-wizard-DuxZ47Nn.js} +2 -2
- prefect/server/ui-v2/assets/{automation-wizard-z26pICBl.js.map → automation-wizard-DuxZ47Nn.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation._id-DuodjY5t.js → automation._id-D8S8r4Ji.js} +2 -2
- prefect/server/ui-v2/assets/{automation._id-DuodjY5t.js.map → automation._id-D8S8r4Ji.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation_._id.edit-CcuJhc-y.js → automation_._id.edit-C1fOM0Hx.js} +2 -2
- prefect/server/ui-v2/assets/{automation_._id.edit-CcuJhc-y.js.map → automation_._id.edit-C1fOM0Hx.js.map} +1 -1
- prefect/server/ui-v2/assets/{automations-header-CgOWwuc6.js → automations-header-DrijTNGi.js} +2 -2
- prefect/server/ui-v2/assets/{automations-header-CgOWwuc6.js.map → automations-header-DrijTNGi.js.map} +1 -1
- prefect/server/ui-v2/assets/{base-job-template-form-section-DN9HyjM5.js → base-job-template-form-section-BDkqOkpe.js} +2 -2
- prefect/server/ui-v2/assets/{base-job-template-form-section-DN9HyjM5.js.map → base-job-template-form-section-BDkqOkpe.js.map} +1 -1
- prefect/server/ui-v2/assets/{block-type-details-rrToxL5r.js → block-type-details-CrFHWH5D.js} +2 -2
- prefect/server/ui-v2/assets/{block-type-details-rrToxL5r.js.map → block-type-details-CrFHWH5D.js.map} +1 -1
- prefect/server/ui-v2/assets/block-type-logo-WQNm0PzP.js +2 -0
- prefect/server/ui-v2/assets/{block-type-logo-DURScH8H.js.map → block-type-logo-WQNm0PzP.js.map} +1 -1
- prefect/server/ui-v2/assets/{block._id-Bue6lnrN.js → block._id-C3gN1Ae8.js} +2 -2
- prefect/server/ui-v2/assets/{block._id-Bue6lnrN.js.map → block._id-C3gN1Ae8.js.map} +1 -1
- prefect/server/ui-v2/assets/{block_._id.edit-QY0OzN_b.js → block_._id.edit-DzPuSvat.js} +2 -2
- prefect/server/ui-v2/assets/{block_._id.edit-QY0OzN_b.js.map → block_._id.edit-DzPuSvat.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog-CGjRGWv6.js → catalog-T-7MqsyE.js} +2 -2
- prefect/server/ui-v2/assets/{catalog-CGjRGWv6.js.map → catalog-T-7MqsyE.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog_._slug-BMFNZhEb.js → catalog_._slug-DMOI61fc.js} +2 -2
- prefect/server/ui-v2/assets/{catalog_._slug-BMFNZhEb.js.map → catalog_._slug-DMOI61fc.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog_._slug_.create-CuFA3kUC.js → catalog_._slug_.create-l9bGUPi-.js} +2 -2
- prefect/server/ui-v2/assets/{catalog_._slug_.create-CuFA3kUC.js.map → catalog_._slug_.create-l9bGUPi-.js.map} +1 -1
- prefect/server/ui-v2/assets/{collapsible-Ell2FjrX.js → collapsible-DM-Ze5-Y.js} +2 -2
- prefect/server/ui-v2/assets/{collapsible-Ell2FjrX.js.map → collapsible-DM-Ze5-Y.js.map} +1 -1
- prefect/server/ui-v2/assets/{concurrency-limit._id-Rr1ysUct.js → concurrency-limit._id-BHEt9viF.js} +2 -2
- prefect/server/ui-v2/assets/{concurrency-limit._id-Rr1ysUct.js.map → concurrency-limit._id-BHEt9viF.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-ewA3uq_h.js → create-BMxUOyN5.js} +2 -2
- prefect/server/ui-v2/assets/{create-ewA3uq_h.js.map → create-BMxUOyN5.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-CQK8-uO1.js → create-Cq-EAHVk.js} +2 -2
- prefect/server/ui-v2/assets/{create-CQK8-uO1.js.map → create-Cq-EAHVk.js.map} +1 -1
- prefect/server/ui-v2/assets/{data-table-Bx1uYX_M.js → data-table-Bw8TZx9D.js} +2 -2
- prefect/server/ui-v2/assets/{data-table-Bx1uYX_M.js.map → data-table-Bw8TZx9D.js.map} +1 -1
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-CqKsUEj_.js → delete-confirmation-dialog-CTdWZlGM.js} +2 -2
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-CqKsUEj_.js.map → delete-confirmation-dialog-CTdWZlGM.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-action-header-Bz5COdER.js → deployment-action-header-BObYqmI_.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-action-header-Bz5COdER.js.map → deployment-action-header-BObYqmI_.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-form-CrlZlNoj.js → deployment-form-CntyhRrK.js} +3 -3
- prefect/server/ui-v2/assets/{deployment-form-CrlZlNoj.js.map → deployment-form-CntyhRrK.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-links-D9ZR_vmp.js → deployment-links-DBUSCaxB.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-links-D9ZR_vmp.js.map → deployment-links-DBUSCaxB.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-DvHhx-qN.js → deployment._id-BXanVFA8.js} +2 -2
- prefect/server/ui-v2/assets/{deployment._id-DvHhx-qN.js.map → deployment._id-BXanVFA8.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-BV0rSqba.js → deployment._id-Q5cvHMX9.js} +2 -2
- prefect/server/ui-v2/assets/{deployment._id-BV0rSqba.js.map → deployment._id-Q5cvHMX9.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.duplicate-DB-4hHHc.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.duplicate-BrEOenqP.js.map → deployment_._id.duplicate-DB-4hHHc.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.edit-CWf1RIGy.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.edit-BbYKPK42.js.map → deployment_._id.edit-CWf1RIGy.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment_._id.run-Dv7S_MJR.js → deployment_._id.run-CoHGXFoM.js} +2 -2
- prefect/server/ui-v2/assets/{deployment_._id.run-Dv7S_MJR.js.map → deployment_._id.run-CoHGXFoM.js.map} +1 -1
- prefect/server/ui-v2/assets/{dropdown-menu-e0Fqb6aw.js → dropdown-menu-CT-s-V7d.js} +2 -2
- prefect/server/ui-v2/assets/{dropdown-menu-e0Fqb6aw.js.map → dropdown-menu-CT-s-V7d.js.map} +1 -1
- prefect/server/ui-v2/assets/{event._eventDate._eventId-Cp4UmGqq.js → event._eventDate._eventId-BITo_GYL.js} +2 -2
- prefect/server/ui-v2/assets/{event._eventDate._eventId-Cp4UmGqq.js.map → event._eventDate._eventId-BITo_GYL.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run-graph-DxIl6fzW.js +2 -0
- prefect/server/ui-v2/assets/{flow-run-graph-BrqoR3E2.js.map → flow-run-graph-DxIl6fzW.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run._id-BOp38Pbq.js → flow-run._id-Bbm9OpDi.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-BOp38Pbq.js.map → flow-run._id-Bbm9OpDi.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run._id-DJnTDEN_.js → flow-run._id-BtSgRDtA.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-DJnTDEN_.js.map → flow-run._id-BtSgRDtA.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js +4 -0
- prefect/server/ui-v2/assets/flow-run._id-DJuMECRh.js.map +1 -0
- prefect/server/ui-v2/assets/{flow-runs-pagination-Bq2ZUzM6.js → flow-runs-pagination-LrU9Aio8.js} +2 -2
- prefect/server/ui-v2/assets/{flow-runs-pagination-Bq2ZUzM6.js.map → flow-runs-pagination-LrU9Aio8.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow._id-eCBL95rg.js → flow._id-BJBRokk4.js} +2 -2
- prefect/server/ui-v2/assets/{flow._id-eCBL95rg.js.map → flow._id-BJBRokk4.js.map} +1 -1
- prefect/server/ui-v2/assets/{form-DNerk3LS.js → form-CVSlEnl8.js} +2 -2
- prefect/server/ui-v2/assets/{form-DNerk3LS.js.map → form-CVSlEnl8.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-DwagHBlF.js → header-4plZZheZ.js} +2 -2
- prefect/server/ui-v2/assets/{header-DwagHBlF.js.map → header-4plZZheZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-huSvwxKI.js → header-9rXZ4r39.js} +2 -2
- prefect/server/ui-v2/assets/{header-huSvwxKI.js.map → header-9rXZ4r39.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-B0ejRncu.js → header-D3uM8_xM.js} +2 -2
- prefect/server/ui-v2/assets/{header-B0ejRncu.js.map → header-D3uM8_xM.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DI2DC5gd.js → index-6OsEYhIi.js} +2 -2
- prefect/server/ui-v2/assets/{index-DI2DC5gd.js.map → index-6OsEYhIi.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BzN9bQeM.js → index-B7xsJ-QH.js} +2 -2
- prefect/server/ui-v2/assets/{index-BzN9bQeM.js.map → index-B7xsJ-QH.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CnIJUujl.js → index-BeoNC2tJ.js} +2 -2
- prefect/server/ui-v2/assets/{index-CnIJUujl.js.map → index-BeoNC2tJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CTnoa3Ho.js → index-BfJLUM7N.js} +2 -2
- prefect/server/ui-v2/assets/{index-CTnoa3Ho.js.map → index-BfJLUM7N.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CWkbSdxY.js → index-Bj0OOguP.js} +2 -2
- prefect/server/ui-v2/assets/{index-CWkbSdxY.js.map → index-Bj0OOguP.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CBhi1P9g.js → index-BlpD74iH.js} +2 -2
- prefect/server/ui-v2/assets/{index-CBhi1P9g.js.map → index-BlpD74iH.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D5RdrxkU.js → index-BvSl3DKP.js} +8 -8
- prefect/server/ui-v2/assets/index-BvSl3DKP.js.map +1 -0
- prefect/server/ui-v2/assets/{index-BU4yZRd3.js → index-CDwJvjUM.js} +2 -2
- prefect/server/ui-v2/assets/{index-BU4yZRd3.js.map → index-CDwJvjUM.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CRDz4nhM.js → index-CDyLkbVG.js} +2 -2
- prefect/server/ui-v2/assets/{index-CRDz4nhM.js.map → index-CDyLkbVG.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Cutg_A1j.js → index-ChIrfjIW.js} +2 -2
- prefect/server/ui-v2/assets/{index-Cutg_A1j.js.map → index-ChIrfjIW.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BhALpenO.js → index-CzCSgCK-.js} +2 -2
- prefect/server/ui-v2/assets/{index-BhALpenO.js.map → index-CzCSgCK-.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Dg_duvDx.js → index-D5v9S-lB.js} +2 -2
- prefect/server/ui-v2/assets/{index-Dg_duvDx.js.map → index-D5v9S-lB.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DDiyFpIV.js → index-D6GJ4go1.js} +2 -2
- prefect/server/ui-v2/assets/{index-DDiyFpIV.js.map → index-D6GJ4go1.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-dSUEBAqg.js → index-DJyKqsFO.js} +2 -2
- prefect/server/ui-v2/assets/{index-dSUEBAqg.js.map → index-DJyKqsFO.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BO3SOwdV.js → index-DODEq1Pi.js} +2 -2
- prefect/server/ui-v2/assets/{index-BO3SOwdV.js.map → index-DODEq1Pi.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Dspw5HFj.js → index-DicK6p3K.js} +2 -2
- prefect/server/ui-v2/assets/{index-Dspw5HFj.js.map → index-DicK6p3K.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-VOOLxiSE.js → index-DqCPbST9.js} +2 -2
- prefect/server/ui-v2/assets/{index-VOOLxiSE.js.map → index-DqCPbST9.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BTPE3vs7.js → index-DxPoKag8.js} +2 -2
- prefect/server/ui-v2/assets/{index-BTPE3vs7.js.map → index-DxPoKag8.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Wfs7Cjew.js → index-h9-QgNjZ.js} +2 -2
- prefect/server/ui-v2/assets/{index-Wfs7Cjew.js.map → index-h9-QgNjZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-uvH5a3zO.js → index-tBdv6kBF.js} +2 -2
- prefect/server/ui-v2/assets/{index-uvH5a3zO.js.map → index-tBdv6kBF.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CgOsOj5t.js → index-udb79rgq.js} +2 -2
- prefect/server/ui-v2/assets/{index-CgOsOj5t.js.map → index-udb79rgq.js.map} +1 -1
- prefect/server/ui-v2/assets/{json-input-gXz7BuJj.js → json-input-Dt1icmrn.js} +2 -2
- prefect/server/ui-v2/assets/{json-input-gXz7BuJj.js.map → json-input-Dt1icmrn.js.map} +1 -1
- prefect/server/ui-v2/assets/{key._key-CJPbLXwU.js → key._key-Cyh5MBX_.js} +2 -2
- prefect/server/ui-v2/assets/{key._key-CJPbLXwU.js.map → key._key-Cyh5MBX_.js.map} +1 -1
- prefect/server/ui-v2/assets/{lazy-markdown-wPid80zf.js → lazy-markdown-BwIwKFRF.js} +2 -2
- prefect/server/ui-v2/assets/{lazy-markdown-wPid80zf.js.map → lazy-markdown-BwIwKFRF.js.map} +1 -1
- prefect/server/ui-v2/assets/{login-DC63bGXK.js → login-DKXFVSwk.js} +2 -2
- prefect/server/ui-v2/assets/{login-DC63bGXK.js.map → login-DKXFVSwk.js.map} +1 -1
- prefect/server/ui-v2/assets/{markdown-input-BhqrU6Eo.js → markdown-input-Dp0mBlkV.js} +2 -2
- prefect/server/ui-v2/assets/{markdown-input-BhqrU6Eo.js.map → markdown-input-Dp0mBlkV.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-example-snippet-3jtXWQZN.js → python-example-snippet-BYwPjHI5.js} +3 -3
- prefect/server/ui-v2/assets/{python-example-snippet-3jtXWQZN.js.map → python-example-snippet-BYwPjHI5.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-input-ZVi-v324.js → python-input-y26XMqXw.js} +2 -2
- prefect/server/ui-v2/assets/{python-input-ZVi-v324.js.map → python-input-y26XMqXw.js.map} +1 -1
- prefect/server/ui-v2/assets/{radio-group-BBMLpHGc.js → radio-group-D0van45v.js} +2 -2
- prefect/server/ui-v2/assets/{radio-group-BBMLpHGc.js.map → radio-group-D0van45v.js.map} +1 -1
- prefect/server/ui-v2/assets/{route-error-state-BJXl8qkX.js → route-error-state-CGGpuCGN.js} +2 -2
- prefect/server/ui-v2/assets/{route-error-state-BJXl8qkX.js.map → route-error-state-CGGpuCGN.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-BEqYjsM-.js → schema-form-2tg5SXM4.js} +2 -2
- prefect/server/ui-v2/assets/{schema-form-BEqYjsM-.js.map → schema-form-2tg5SXM4.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-l3xt3PWf.js → schema-form-input-string-format-datetime-CZt6AJ4z.js} +4 -4
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-l3xt3PWf.js.map → schema-form-input-string-format-datetime-CZt6AJ4z.js.map} +1 -1
- prefect/server/ui-v2/assets/{settings-txD0dR5Q.js → settings-DDUadk_N.js} +2 -2
- prefect/server/ui-v2/assets/{settings-txD0dR5Q.js.map → settings-DDUadk_N.js.map} +1 -1
- prefect/server/ui-v2/assets/{sort-filter-DHPFdKZ2.js → sort-filter-D9p3cPx9.js} +2 -2
- prefect/server/ui-v2/assets/{sort-filter-DHPFdKZ2.js.map → sort-filter-D9p3cPx9.js.map} +1 -1
- prefect/server/ui-v2/assets/{table-ULfpXJXB.js → table-vo9Do8sA.js} +2 -2
- prefect/server/ui-v2/assets/{table-ULfpXJXB.js.map → table-vo9Do8sA.js.map} +1 -1
- prefect/server/ui-v2/assets/{tags-input-BLzMOTDb.js → tags-input-Ci2JQ-k3.js} +2 -2
- prefect/server/ui-v2/assets/{tags-input-BLzMOTDb.js.map → tags-input-Ci2JQ-k3.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-BpeKHk7g.js → task-run-concurrency-limits-reset-dialog-CJzPc2gw.js} +2 -2
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-BpeKHk7g.js.map → task-run-concurrency-limits-reset-dialog-CJzPc2gw.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-CkOl9MJs.js → task-run._id-CjevSs79.js} +2 -2
- prefect/server/ui-v2/assets/{task-run._id-CkOl9MJs.js.map → task-run._id-CjevSs79.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-udkz1lhh.js → task-run._id-D8QKG5UZ.js} +2 -2
- prefect/server/ui-v2/assets/{task-run._id-udkz1lhh.js.map → task-run._id-D8QKG5UZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-runs-pagination-B7D5K_FM.js → task-runs-pagination-CifoSGct.js} +2 -2
- prefect/server/ui-v2/assets/{task-runs-pagination-B7D5K_FM.js.map → task-runs-pagination-CifoSGct.js.map} +1 -1
- prefect/server/ui-v2/assets/{textarea-C4bdj7Jk.js → textarea-BAtfAxtV.js} +2 -2
- prefect/server/ui-v2/assets/{textarea-C4bdj7Jk.js.map → textarea-BAtfAxtV.js.map} +1 -1
- prefect/server/ui-v2/assets/{timezone-select-AdlSRQxZ.js → timezone-select-QlQTZSsF.js} +2 -2
- prefect/server/ui-v2/assets/{timezone-select-AdlSRQxZ.js.map → timezone-select-QlQTZSsF.js.map} +1 -1
- prefect/server/ui-v2/assets/{toggle-group-C-vxYz4l.js → toggle-group-BJN1vjEh.js} +2 -2
- prefect/server/ui-v2/assets/{toggle-group-C-vxYz4l.js.map → toggle-group-BJN1vjEh.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-Cqhaqtqe.js → use-delete-automation-confirmation-dialog-eOWJYPkD.js} +2 -2
- prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-Cqhaqtqe.js.map → use-delete-automation-confirmation-dialog-eOWJYPkD.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-GjNhFxZe.js → use-delete-block-document-confirmation-dialog-BTwSeHRM.js} +2 -2
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-GjNhFxZe.js.map → use-delete-block-document-confirmation-dialog-BTwSeHRM.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DfwmswyR.js → use-flow-runs-selected-rows-BL_Gv9CC.js} +2 -2
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DfwmswyR.js.map → use-flow-runs-selected-rows-BL_Gv9CC.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BEBpG_5J.js → use-get-artifacts-flow-task-runs-TSCoomjQ.js} +2 -2
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BEBpG_5J.js.map → use-get-artifacts-flow-task-runs-TSCoomjQ.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-quick-run-BYBRcDwC.js → use-quick-run-BMnCkwSv.js} +2 -2
- prefect/server/ui-v2/assets/{use-quick-run-BYBRcDwC.js.map → use-quick-run-BMnCkwSv.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-stepper-Bk97vOTm.js → use-stepper-C1wm66U2.js} +2 -2
- prefect/server/ui-v2/assets/{use-stepper-Bk97vOTm.js.map → use-stepper-C1wm66U2.js.map} +1 -1
- prefect/server/ui-v2/assets/{utilities-BQwGFLk5.js → utilities-DxRXxFOF.js} +2 -2
- prefect/server/ui-v2/assets/{utilities-BQwGFLk5.js.map → utilities-DxRXxFOF.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool-filter-Ddhp_M-L.js → work-pool-filter-PudrkZYj.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-filter-Ddhp_M-L.js.map → work-pool-filter-PudrkZYj.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-DX3eV3R_.js → work-pool-queue-toggle-BAOrV_0R.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-DX3eV3R_.js.map → work-pool-queue-toggle-BAOrV_0R.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool._workPoolName-BaRIsXBX.js → work-pool._workPoolName-BOM3849e.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool._workPoolName-BaRIsXBX.js.map → work-pool._workPoolName-BOM3849e.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-dhS_Xz32.js → work-pool_._workPoolName.edit-CIhcG6yr.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-dhS_Xz32.js.map → work-pool_._workPoolName.edit-CIhcG6yr.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlstL9Se.js → work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlstL9Se.js.map → work-pool_._workPoolName.queue._workQueueName-CjoM77tu.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-queue-icon-text-_Ez8e2dw.js → work-queue-icon-text-CP4yX3uM.js} +2 -2
- prefect/server/ui-v2/assets/{work-queue-icon-text-_Ez8e2dw.js.map → work-queue-icon-text-CP4yX3uM.js.map} +1 -1
- prefect/server/ui-v2/index.html +1 -1
- prefect/settings/models/flows.py +1 -14
- prefect/settings/models/runner.py +6 -16
- prefect/task_engine.py +3 -1
- prefect/task_worker.py +1 -1
- prefect/tasks.py +2 -2
- prefect/testing/fixtures.py +5 -23
- {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/METADATA +1 -1
- {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/RECORD +213 -213
- prefect/server/ui-v2/assets/block-type-logo-DURScH8H.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.duplicate-BrEOenqP.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.edit-BbYKPK42.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-BrqoR3E2.js +0 -2
- prefect/server/ui-v2/assets/flow-run._id-D_wY_rBe.js +0 -4
- prefect/server/ui-v2/assets/flow-run._id-D_wY_rBe.js.map +0 -1
- prefect/server/ui-v2/assets/index-D5RdrxkU.js.map +0 -1
- {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/WHEEL +0 -0
- {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.13.dist-info → prefect-3.6.13.dev2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as p,s as A,j as e,L as D,C as T,D as B,B as E}from"./vendor-tanstack-BK8oseNA.js";import{u as I,a as k}from"./use-quick-run-
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{r as p,s as A,j as e,L as D,C as T,D as B,B as E}from"./vendor-tanstack-BK8oseNA.js";import{u as I,a as k}from"./use-quick-run-BMnCkwSv.js";import{bN as M,aN as z,aR as O,q as _,I as P,y as $,N as Q,O as V,S as G,a as W,b as H,c as L,e as j,c4 as U,c5 as Z,X as q}from"./index-BvSl3DKP.js";import{D as X}from"./data-table-Bw8TZx9D.js";import{D as J}from"./delete-confirmation-dialog-CTdWZlGM.js";import{S as K}from"./index-tBdv6kBF.js";import{S as Y}from"./index-ChIrfjIW.js";import{T as F}from"./tags-input-Ci2JQ-k3.js";import{s as ee,U as se}from"./vendor-date-7GxEwcQM.js";import{D as ae,a as le,b as te,c as ne,d}from"./dropdown-menu-CT-s-V7d.js";const ie=({row:n,onDelete:s})=>{const{id:l,parameters:o}=n.original,{onQuickRun:u,isPending:i}=I();return l?e.jsx("div",{className:"flex flex-row justify-end",children:e.jsxs(ae,{children:[e.jsx(le,{asChild:!0,children:e.jsxs(_,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(P,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(te,{align:"end",children:[e.jsx(ne,{children:"Actions"}),e.jsx(d,{disabled:i,onClick:()=>u(l),children:"Quick Run"}),e.jsx(d,{children:e.jsx(D,{to:"/deployments/deployment/$id/run",params:{id:l},search:{parameters:o},children:"Custom Run"})}),e.jsx(d,{onClick:()=>{navigator.clipboard.writeText(l),$.success("ID copied")},children:"Copy ID"}),e.jsx(d,{children:e.jsx(D,{to:"/deployments/deployment/$id/edit",params:{id:l},children:"Edit"})}),e.jsx(d,{onClick:()=>s(n.original),children:"Delete"}),e.jsx(d,{children:e.jsx(D,{to:"/deployments/deployment/$id/duplicate",params:{id:l},children:"Duplicate"})})]})]})}):null},C=8,re=4,oe=({row:n})=>{const[s,l]=p.useState(0),o=M(s,150),u=p.useCallback(r=>{if(!r)return;const x=()=>{const v=r.getBoundingClientRect().width;l(Math.floor(v/(C+re)))};x();const g=new ResizeObserver(x);return g.observe(r),()=>{g.disconnect()}},[]),{data:i}=A(z({deployments:{operator:"and_",id:{any_:[n.original.id]}},sort:"START_TIME_DESC",limit:o||s,offset:0})),{flow:h,...y}=n.original,c=i?.map(r=>({...r,deployment:y,flow:h}))??[];return e.jsx("div",{className:"w-full",ref:u,children:e.jsx(O,{startDate:ee(new Date,se),endDate:new Date,numberOfBars:o||s,barWidth:C,enrichedFlowRuns:c,className:"h-12 w-full",chartId:n.original.id})})},m=E(),ce=({onDelete:n})=>[m.display({id:"name",header:"Deployment",cell:({row:s})=>e.jsxs("div",{className:"flex flex-col",children:[e.jsx(D,{to:"/deployments/deployment/$id",params:{id:s.original.id},children:e.jsx("span",{className:"text-sm font-medium truncate",title:s.original.name,children:s.original.name})}),s.original.flow&&e.jsx(Z,{flow:s.original.flow,className:"text-xs text-muted-foreground flex items-center gap-1",iconSize:12})]}),size:100}),m.accessor("status",{id:"status",header:"Status",cell:({row:s})=>{const l=s.original.status;return l?e.jsx("div",{className:"min-w-28",children:e.jsx(Y,{status:l})}):null},size:50}),m.display({id:"activity",header:"Activity",cell:s=>e.jsx("div",{className:"flex flex-row gap-2 items-center min-w-28",children:e.jsx(oe,{...s})}),size:300}),m.display({id:"tags",header:()=>null,cell:({row:s})=>e.jsx(q,{tags:s.original.tags??[]})}),m.display({id:"schedules",header:"Schedules",cell:({row:s})=>{const l=s.original.schedules;return!l||l.length===0?null:e.jsx(K,{schedules:l})},size:150}),m.display({id:"actions",cell:s=>e.jsx(ie,{...s,onDelete:n})})],ye=({deployments:n,currentDeploymentsCount:s,pagination:l,pageCount:o,sort:u,columnFilters:i,onPaginationChange:h,onSortChange:y,onColumnFiltersChange:c})=>{const[r,x]=k(),g=i.find(a=>a.id==="flowOrDeploymentName")?.value??"",v=i.find(a=>a.id==="tags")?.value??[],b=p.useCallback(a=>{const t=i.filter(f=>f.id!=="flowOrDeploymentName");c(a?[...t,{id:"flowOrDeploymentName",value:a}]:t)},[c,i]),S=p.useCallback(a=>{const t=Array.isArray(a)?a:a.target.value,f=i.filter(R=>R.id!=="tags");c(t.length?[...f,{id:"tags",value:t}]:f)},[c,i]),N=p.useCallback(a=>{let t=l;typeof a=="function"?t=a(l):t=a,h(t)},[l,h]),w=T({data:n,columns:ce({onDelete:a=>{const t=a.flow?.name?`${a.flow?.name}/${a.name}`:a.name;x({...a,name:t})}}),getCoreRowModel:B(),pageCount:o,manualPagination:!0,defaultColumn:{maxSize:300},state:{pagination:l},onPaginationChange:N});return e.jsxs("div",{children:[e.jsxs("div",{className:"grid sm:grid-cols-2 md:grid-cols-6 lg:grid-cols-12 gap-2 pb-4 items-center",children:[e.jsx("div",{className:"sm:col-span-2 md:col-span-6 lg:col-span-4 order-last lg:order-first",children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:[s," ",Q(s,"Deployment")]})}),e.jsx("div",{className:"sm:col-span-2 md:col-span-2 lg:col-span-3",children:e.jsx(V,{placeholder:"Search deployments",value:g,onChange:a=>b(a.target.value)})}),e.jsx("div",{className:"xs:col-span-1 md:col-span-2 lg:col-span-3",children:e.jsx(F,{placeholder:"Filter by tags",onChange:S,value:v})}),e.jsx("div",{className:"xs:col-span-1 md:col-span-2 lg:col-span-2",children:e.jsxs(G,{value:u,onValueChange:y,children:[e.jsx(W,{"aria-label":"Deployment sort order",className:"w-full",children:e.jsx(H,{placeholder:"Sort by"})}),e.jsxs(L,{children:[e.jsx(j,{value:"CREATED_DESC",children:"Created"}),e.jsx(j,{value:"UPDATED_DESC",children:"Updated"}),e.jsx(j,{value:"NAME_ASC",children:"A to Z"}),e.jsx(j,{value:"NAME_DESC",children:"Z to A"})]})]})})]}),e.jsx(J,{...r}),e.jsx(U,{children:e.jsx(X,{table:w})})]})};export{ye as D};
|
|
2
|
+
//# sourceMappingURL=index-Bj0OOguP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CWkbSdxY.js","sources":["../../src/components/deployments/data-table/cells.tsx","../../src/components/deployments/data-table/index.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { Link } from \"@tanstack/react-router\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport { subSeconds } from \"date-fns\";\nimport { secondsInWeek } from \"date-fns/constants\";\nimport { useCallback, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport type { DeploymentWithFlow } from \"@/api/deployments\";\nimport { buildFilterFlowRunsQuery } from \"@/api/flow-runs\";\nimport { useQuickRun } from \"@/components/deployments/use-quick-run\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { FlowRunActivityBarChart } from \"@/components/ui/flow-run-activity-bar-graph\";\nimport { Icon } from \"@/components/ui/icons\";\nimport useDebounce from \"@/hooks/use-debounce\";\n\ntype ActionsCellProps = CellContext<DeploymentWithFlow, unknown> & {\n\tonDelete: (deployment: DeploymentWithFlow) => void;\n};\n\nexport const ActionsCell = ({ row, onDelete }: ActionsCellProps) => {\n\tconst { id, parameters } = row.original;\n\tconst { onQuickRun, isPending } = useQuickRun();\n\n\tif (!id) return null;\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button variant=\"outline\" className=\"size-8 p-0\">\n\t\t\t\t\t\t<span className=\"sr-only\">Open menu</span>\n\t\t\t\t\t\t<Icon id=\"MoreVertical\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t\t<DropdownMenuLabel>Actions</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuItem disabled={isPending} onClick={() => onQuickRun(id)}>\n\t\t\t\t\t\tQuick Run\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/deployments/deployment/$id/run\"\n\t\t\t\t\t\t\tparams={{ id }}\n\t\t\t\t\t\t\tsearch={{ parameters }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCustom Run\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</DropdownMenuItem>\n\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(id);\n\t\t\t\t\t\t\ttoast.success(\"ID copied\");\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\t<Link to=\"/deployments/deployment/$id/edit\" params={{ id }}>\n\t\t\t\t\t\t\tEdit\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem onClick={() => onDelete(row.original)}>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem>\n\t\t\t\t\t\t<Link to=\"/deployments/deployment/$id/duplicate\" params={{ id }}>\n\t\t\t\t\t\t\tDuplicate\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t</div>\n\t);\n};\n\nconst BAR_WIDTH = 8;\nconst BAR_GAP = 4;\n\nexport const ActivityCell = ({\n\trow,\n}: CellContext<DeploymentWithFlow, unknown>) => {\n\tconst [numberOfBars, setNumberOfBars] = useState<number>(0);\n\tconst debouncedNumberOfBars = useDebounce(numberOfBars, 150);\n\n\tconst chartRef = useCallback((node: HTMLDivElement | null) => {\n\t\tif (!node) return;\n\n\t\tconst updateBars = () => {\n\t\t\tconst chartWidth = node.getBoundingClientRect().width;\n\t\t\tsetNumberOfBars(Math.floor(chartWidth / (BAR_WIDTH + BAR_GAP)));\n\t\t};\n\n\t\t// Set the initial number of bars based on the chart width\n\t\tupdateBars();\n\n\t\t// Observe the chart for resize events\n\t\tconst resizeObserver = new ResizeObserver(updateBars);\n\t\tresizeObserver.observe(node);\n\t\treturn () => {\n\t\t\t// Clean up the observer\n\t\t\tresizeObserver.disconnect();\n\t\t};\n\t}, []);\n\n\tconst { data: flowRuns } = useQuery(\n\t\tbuildFilterFlowRunsQuery({\n\t\t\tdeployments: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\tid: {\n\t\t\t\t\tany_: [row.original.id],\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort: \"START_TIME_DESC\",\n\t\t\tlimit: debouncedNumberOfBars || numberOfBars,\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\n\tconst { flow, ...deployment } = row.original;\n\tconst enrichedFlowRuns =\n\t\tflowRuns?.map((flowRun) => ({\n\t\t\t...flowRun,\n\t\t\tdeployment,\n\t\t\tflow,\n\t\t})) ?? [];\n\n\treturn (\n\t\t<div className=\"w-full\" ref={chartRef}>\n\t\t\t<FlowRunActivityBarChart\n\t\t\t\tstartDate={subSeconds(new Date(), secondsInWeek)}\n\t\t\t\tendDate={new Date()}\n\t\t\t\t// If debouncedNumberOfBars is 0, use numberOfBars for an asymmetric debounce to avoid rendering an empty chart on initial paint.\n\t\t\t\tnumberOfBars={debouncedNumberOfBars || numberOfBars}\n\t\t\t\tbarWidth={BAR_WIDTH}\n\t\t\t\tenrichedFlowRuns={enrichedFlowRuns}\n\t\t\t\tclassName=\"h-12 w-full\"\n\t\t\t\tchartId={row.original.id}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type {\n\tColumnFiltersState,\n\tOnChangeFn,\n\tPaginationState,\n} from \"@tanstack/react-table\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useCallback } from \"react\";\nimport type { DeploymentWithFlow } from \"@/api/deployments\";\nimport type { components } from \"@/api/prefect\";\nimport { useDeleteDeploymentConfirmationDialog } from \"@/components/deployments/use-delete-deployment-confirmation-dialog\";\nimport { FlowIconText } from \"@/components/flows/flow-icon-text\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { FlowRunActivityBarGraphTooltipProvider } from \"@/components/ui/flow-run-activity-bar-graph\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport { ScheduleBadgeGroup } from \"@/components/ui/schedule-badge\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport { StatusBadge } from \"@/components/ui/status-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport { TagsInput } from \"@/components/ui/tags-input\";\nimport { pluralize } from \"@/utils\";\nimport { ActionsCell, ActivityCell } from \"./cells\";\n\nexport type DeploymentsDataTableProps = {\n\tdeployments: DeploymentWithFlow[];\n\tcurrentDeploymentsCount: number;\n\tpageCount: number;\n\tpagination: PaginationState;\n\tsort: components[\"schemas\"][\"DeploymentSort\"];\n\tcolumnFilters: ColumnFiltersState;\n\tonPaginationChange: (pagination: PaginationState) => void;\n\tonSortChange: (sort: components[\"schemas\"][\"DeploymentSort\"]) => void;\n\tonColumnFiltersChange: (columnFilters: ColumnFiltersState) => void;\n};\n\nconst columnHelper = createColumnHelper<DeploymentWithFlow>();\n\nconst createColumns = ({\n\tonDelete,\n}: {\n\tonDelete: (deployment: DeploymentWithFlow) => void;\n}) => [\n\tcolumnHelper.display({\n\t\tid: \"name\",\n\t\theader: \"Deployment\",\n\t\tcell: ({ row }) => (\n\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t<Link to=\"/deployments/deployment/$id\" params={{ id: row.original.id }}>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"text-sm font-medium truncate\"\n\t\t\t\t\t\ttitle={row.original.name}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.original.name}\n\t\t\t\t\t</span>\n\t\t\t\t</Link>\n\n\t\t\t\t{row.original.flow && (\n\t\t\t\t\t<FlowIconText\n\t\t\t\t\t\tflow={row.original.flow}\n\t\t\t\t\t\tclassName=\"text-xs text-muted-foreground flex items-center gap-1\"\n\t\t\t\t\t\ticonSize={12}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t),\n\t\tsize: 100,\n\t}),\n\tcolumnHelper.accessor(\"status\", {\n\t\tid: \"status\",\n\t\theader: \"Status\",\n\t\tcell: ({ row }) => {\n\t\t\tconst status = row.original.status;\n\t\t\tif (!status) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"min-w-28\">\n\t\t\t\t\t<StatusBadge status={status} />\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\tsize: 50,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"activity\",\n\t\theader: \"Activity\",\n\t\tcell: (props) => (\n\t\t\t<div className=\"flex flex-row gap-2 items-center min-w-28\">\n\t\t\t\t<ActivityCell {...props} />\n\t\t\t</div>\n\t\t),\n\t\tsize: 300,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"tags\",\n\t\theader: () => null,\n\t\tcell: ({ row }) => <TagBadgeGroup tags={row.original.tags ?? []} />,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"schedules\",\n\t\theader: \"Schedules\",\n\t\tcell: ({ row }) => {\n\t\t\tconst schedules = row.original.schedules;\n\t\t\tif (!schedules || schedules.length === 0) return null;\n\t\t\treturn <ScheduleBadgeGroup schedules={schedules} />;\n\t\t},\n\t\tsize: 150,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => <ActionsCell {...props} onDelete={onDelete} />,\n\t}),\n];\n\nexport const DeploymentsDataTable = ({\n\tdeployments,\n\tcurrentDeploymentsCount,\n\tpagination,\n\tpageCount,\n\tsort,\n\tcolumnFilters,\n\tonPaginationChange,\n\tonSortChange,\n\tonColumnFiltersChange,\n}: DeploymentsDataTableProps) => {\n\tconst [deleteConfirmationDialogState, confirmDelete] =\n\t\tuseDeleteDeploymentConfirmationDialog();\n\n\tconst nameSearchValue = (columnFilters.find(\n\t\t(filter) => filter.id === \"flowOrDeploymentName\",\n\t)?.value ?? \"\") as string;\n\tconst tagsSearchValue = (columnFilters.find((filter) => filter.id === \"tags\")\n\t\t?.value ?? []) as string[];\n\n\tconst handleNameSearchChange = useCallback(\n\t\t(value?: string) => {\n\t\t\tconst filters = columnFilters.filter(\n\t\t\t\t(filter) => filter.id !== \"flowOrDeploymentName\",\n\t\t\t);\n\t\t\tonColumnFiltersChange(\n\t\t\t\tvalue ? [...filters, { id: \"flowOrDeploymentName\", value }] : filters,\n\t\t\t);\n\t\t},\n\t\t[onColumnFiltersChange, columnFilters],\n\t);\n\n\tconst handleTagsSearchChange: React.ChangeEventHandler<HTMLInputElement> &\n\t\t((tags: string[]) => void) = useCallback(\n\t\t(e: string[] | React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst tags = Array.isArray(e) ? e : e.target.value;\n\t\t\tconst filters = columnFilters.filter((filter) => filter.id !== \"tags\");\n\t\t\tonColumnFiltersChange(\n\t\t\t\ttags.length ? [...filters, { id: \"tags\", value: tags }] : filters,\n\t\t\t);\n\t\t},\n\t\t[onColumnFiltersChange, columnFilters],\n\t);\n\n\tconst handlePaginationChange: OnChangeFn<PaginationState> = useCallback(\n\t\t(updater) => {\n\t\t\tlet newPagination = pagination;\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tnewPagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tnewPagination = updater;\n\t\t\t}\n\t\t\tonPaginationChange(newPagination);\n\t\t},\n\t\t[pagination, onPaginationChange],\n\t);\n\n\tconst table = useReactTable({\n\t\tdata: deployments,\n\t\tcolumns: createColumns({\n\t\t\tonDelete: (deployment) => {\n\t\t\t\tconst name = deployment.flow?.name\n\t\t\t\t\t? `${deployment.flow?.name}/${deployment.name}`\n\t\t\t\t\t: deployment.name;\n\t\t\t\tconfirmDelete({ ...deployment, name });\n\t\t\t},\n\t\t}),\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tpageCount,\n\t\tmanualPagination: true,\n\t\tdefaultColumn: {\n\t\t\tmaxSize: 300,\n\t\t},\n\t\tstate: {\n\t\t\tpagination,\n\t\t},\n\t\tonPaginationChange: handlePaginationChange,\n\t});\n\treturn (\n\t\t<div>\n\t\t\t<div className=\"grid sm:grid-cols-2 md:grid-cols-6 lg:grid-cols-12 gap-2 pb-4 items-center\">\n\t\t\t\t<div className=\"sm:col-span-2 md:col-span-6 lg:col-span-4 order-last lg:order-first\">\n\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t{currentDeploymentsCount}{\" \"}\n\t\t\t\t\t\t{pluralize(currentDeploymentsCount, \"Deployment\")}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"sm:col-span-2 md:col-span-2 lg:col-span-3\">\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tplaceholder=\"Search deployments\"\n\t\t\t\t\t\tvalue={nameSearchValue}\n\t\t\t\t\t\tonChange={(e) => handleNameSearchChange(e.target.value)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"xs:col-span-1 md:col-span-2 lg:col-span-3\">\n\t\t\t\t\t<TagsInput\n\t\t\t\t\t\tplaceholder=\"Filter by tags\"\n\t\t\t\t\t\tonChange={handleTagsSearchChange}\n\t\t\t\t\t\tvalue={tagsSearchValue}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"xs:col-span-1 md:col-span-2 lg:col-span-2\">\n\t\t\t\t\t<Select value={sort} onValueChange={onSortChange}>\n\t\t\t\t\t\t<SelectTrigger\n\t\t\t\t\t\t\taria-label=\"Deployment sort order\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SelectValue placeholder=\"Sort by\" />\n\t\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t\t<SelectItem value=\"CREATED_DESC\">Created</SelectItem>\n\t\t\t\t\t\t\t<SelectItem value=\"UPDATED_DESC\">Updated</SelectItem>\n\t\t\t\t\t\t\t<SelectItem value=\"NAME_ASC\">A to Z</SelectItem>\n\t\t\t\t\t\t\t<SelectItem value=\"NAME_DESC\">Z to A</SelectItem>\n\t\t\t\t\t\t</SelectContent>\n\t\t\t\t\t</Select>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t<FlowRunActivityBarGraphTooltipProvider>\n\t\t\t\t<DataTable table={table} />\n\t\t\t</FlowRunActivityBarGraphTooltipProvider>\n\t\t</div>\n\t);\n};\n"],"names":["ActionsCell","row","onDelete","id","parameters","onQuickRun","isPending","useQuickRun","jsx","DropdownMenu","DropdownMenuTrigger","jsxs","Button","Icon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuItem","Link","toast","BAR_WIDTH","BAR_GAP","ActivityCell","numberOfBars","setNumberOfBars","useState","debouncedNumberOfBars","useDebounce","chartRef","useCallback","node","updateBars","chartWidth","resizeObserver","flowRuns","useQuery","buildFilterFlowRunsQuery","flow","deployment","enrichedFlowRuns","flowRun","FlowRunActivityBarChart","subSeconds","secondsInWeek","columnHelper","createColumnHelper","createColumns","FlowIconText","status","StatusBadge","props","TagBadgeGroup","schedules","ScheduleBadgeGroup","DeploymentsDataTable","deployments","currentDeploymentsCount","pagination","pageCount","sort","columnFilters","onPaginationChange","onSortChange","onColumnFiltersChange","deleteConfirmationDialogState","confirmDelete","useDeleteDeploymentConfirmationDialog","nameSearchValue","filter","tagsSearchValue","handleNameSearchChange","value","filters","handleTagsSearchChange","e","tags","handlePaginationChange","updater","newPagination","table","useReactTable","name","getCoreRowModel","pluralize","SearchInput","TagsInput","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","DeleteConfirmationDialog","FlowRunActivityBarGraphTooltipProvider","DataTable"],"mappings":"kpBA0BO,MAAMA,GAAc,CAAC,CAAE,IAAAC,EAAK,SAAAC,KAAiC,CACnE,KAAM,CAAE,GAAAC,EAAI,WAAAC,CAAA,EAAeH,EAAI,SACzB,CAAE,WAAAI,EAAY,UAAAC,CAAA,EAAcC,EAAA,EAElC,OAAKJ,EAGJK,EAAAA,IAAC,MAAA,CAAI,UAAU,4BACd,gBAACC,GAAA,CACA,SAAA,CAAAD,EAAAA,IAACE,GAAA,CAAoB,QAAO,GAC3B,SAAAC,EAAAA,KAACC,GAAO,QAAQ,UAAU,UAAU,aACnC,SAAA,CAAAJ,EAAAA,IAAC,OAAA,CAAK,UAAU,UAAU,SAAA,YAAS,EACnCA,EAAAA,IAACK,EAAA,CAAK,GAAG,eAAe,UAAU,QAAA,CAAS,CAAA,CAAA,CAC5C,CAAA,CACD,EACAF,EAAAA,KAACG,GAAA,CAAoB,MAAM,MAC1B,SAAA,CAAAN,EAAAA,IAACO,IAAkB,SAAA,SAAA,CAAO,EAC1BP,EAAAA,IAACQ,GAAiB,SAAUV,EAAW,QAAS,IAAMD,EAAWF,CAAE,EAAG,SAAA,WAAA,CAEtE,QACCa,EAAA,CACA,SAAAR,EAAAA,IAACS,EAAA,CACA,GAAG,kCACH,OAAQ,CAAE,GAAAd,CAAA,EACV,OAAQ,CAAE,WAAAC,CAAA,EACV,SAAA,YAAA,CAAA,EAGF,EAEAI,EAAAA,IAACQ,EAAA,CACA,QAAS,IAAM,CACT,UAAU,UAAU,UAAUb,CAAE,EACrCe,EAAM,QAAQ,WAAW,CAC1B,EACA,SAAA,SAAA,CAAA,EAGDV,EAAAA,IAACQ,EAAA,CACA,SAAAR,EAAAA,IAACS,EAAA,CAAK,GAAG,mCAAmC,OAAQ,CAAE,GAAAd,CAAA,EAAM,SAAA,MAAA,CAE5D,CAAA,CACD,EACAK,MAACQ,GAAiB,QAAS,IAAMd,EAASD,EAAI,QAAQ,EAAG,SAAA,SAEzD,EACAO,EAAAA,IAACQ,EAAA,CACA,SAAAR,EAAAA,IAACS,EAAA,CAAK,GAAG,wCAAwC,OAAQ,CAAE,GAAAd,CAAA,EAAM,SAAA,WAAA,CAEjE,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,EAjDe,IAmDjB,EAEMgB,EAAY,EACZC,GAAU,EAEHC,GAAe,CAAC,CAC5B,IAAApB,CACD,IAAgD,CAC/C,KAAM,CAACqB,EAAcC,CAAe,EAAIC,EAAAA,SAAiB,CAAC,EACpDC,EAAwBC,EAAYJ,EAAc,GAAG,EAErDK,EAAWC,cAAaC,GAAgC,CAC7D,GAAI,CAACA,EAAM,OAEX,MAAMC,EAAa,IAAM,CACxB,MAAMC,EAAaF,EAAK,sBAAA,EAAwB,MAChDN,EAAgB,KAAK,MAAMQ,GAAcZ,EAAYC,GAAQ,CAAC,CAC/D,EAGAU,EAAA,EAGA,MAAME,EAAiB,IAAI,eAAeF,CAAU,EACpD,OAAAE,EAAe,QAAQH,CAAI,EACpB,IAAM,CAEZG,EAAe,WAAA,CAChB,CACD,EAAG,CAAA,CAAE,EAEC,CAAE,KAAMC,CAAA,EAAaC,EAC1BC,EAAyB,CACxB,YAAa,CACZ,SAAU,OACV,GAAI,CACH,KAAM,CAAClC,EAAI,SAAS,EAAE,CAAA,CACvB,EAED,KAAM,kBACN,MAAOwB,GAAyBH,EAChC,OAAQ,CAAA,CACR,CAAA,EAGI,CAAE,KAAAc,EAAM,GAAGC,CAAA,EAAepC,EAAI,SAC9BqC,EACLL,GAAU,IAAKM,IAAa,CAC3B,GAAGA,EACH,WAAAF,EACA,KAAAD,CAAA,EACC,GAAK,CAAA,EAER,OACC5B,EAAAA,IAAC,MAAA,CAAI,UAAU,SAAS,IAAKmB,EAC5B,SAAAnB,EAAAA,IAACgC,EAAA,CACA,UAAWC,GAAW,IAAI,KAAQC,EAAa,EAC/C,YAAa,KAEb,aAAcjB,GAAyBH,EACvC,SAAUH,EACV,iBAAAmB,EACA,UAAU,cACV,QAASrC,EAAI,SAAS,EAAA,CAAA,EAExB,CAEF,ECtGM0C,EAAeC,EAAA,EAEfC,GAAgB,CAAC,CACtB,SAAA3C,CACD,IAEM,CACLyC,EAAa,QAAQ,CACpB,GAAI,OACJ,OAAQ,aACR,KAAM,CAAC,CAAE,IAAA1C,KACRU,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACd,SAAA,CAAAH,EAAAA,IAACS,EAAA,CAAK,GAAG,8BAA8B,OAAQ,CAAE,GAAIhB,EAAI,SAAS,EAAA,EACjE,SAAAO,EAAAA,IAAC,OAAA,CACA,UAAU,+BACV,MAAOP,EAAI,SAAS,KAEnB,WAAI,SAAS,IAAA,CAAA,EAEhB,EAECA,EAAI,SAAS,MACbO,EAAAA,IAACsC,EAAA,CACA,KAAM7C,EAAI,SAAS,KACnB,UAAU,wDACV,SAAU,EAAA,CAAA,CACX,EAEF,EAED,KAAM,GAAA,CACN,EACD0C,EAAa,SAAS,SAAU,CAC/B,GAAI,SACJ,OAAQ,SACR,KAAM,CAAC,CAAE,IAAA1C,KAAU,CAClB,MAAM8C,EAAS9C,EAAI,SAAS,OAC5B,OAAK8C,QAEH,MAAA,CAAI,UAAU,WACd,SAAAvC,EAAAA,IAACwC,EAAA,CAAY,OAAAD,EAAgB,CAAA,CAC9B,EAJmB,IAMrB,EACA,KAAM,EAAA,CACN,EACDJ,EAAa,QAAQ,CACpB,GAAI,WACJ,OAAQ,WACR,KAAOM,GACNzC,EAAAA,IAAC,MAAA,CAAI,UAAU,4CACd,SAAAA,EAAAA,IAACa,GAAA,CAAc,GAAG4B,CAAA,CAAO,CAAA,CAC1B,EAED,KAAM,GAAA,CACN,EACDN,EAAa,QAAQ,CACpB,GAAI,OACJ,OAAQ,IAAM,KACd,KAAM,CAAC,CAAE,IAAA1C,CAAA,IAAUO,MAAC0C,EAAA,CAAc,KAAMjD,EAAI,SAAS,MAAQ,CAAA,CAAC,CAAG,CAAA,CACjE,EACD0C,EAAa,QAAQ,CACpB,GAAI,YACJ,OAAQ,YACR,KAAM,CAAC,CAAE,IAAA1C,KAAU,CAClB,MAAMkD,EAAYlD,EAAI,SAAS,UAC/B,MAAI,CAACkD,GAAaA,EAAU,SAAW,EAAU,KAC1C3C,MAAC4C,GAAmB,UAAAD,EAAsB,CAClD,EACA,KAAM,GAAA,CACN,EACDR,EAAa,QAAQ,CACpB,GAAI,UACJ,KAAOM,SAAWjD,GAAA,CAAa,GAAGiD,EAAO,SAAA/C,CAAA,CAAoB,CAAA,CAC7D,CACF,EAEamD,GAAuB,CAAC,CACpC,YAAAC,EACA,wBAAAC,EACA,WAAAC,EACA,UAAAC,EACA,KAAAC,EACA,cAAAC,EACA,mBAAAC,EACA,aAAAC,EACA,sBAAAC,CACD,IAAiC,CAChC,KAAM,CAACC,EAA+BC,CAAa,EAClDC,EAAA,EAEKC,EAAmBP,EAAc,KACrCQ,GAAWA,EAAO,KAAO,sBAAA,GACxB,OAAS,GACNC,EAAmBT,EAAc,KAAMQ,GAAWA,EAAO,KAAO,MAAM,GACzE,OAAS,CAAA,EAENE,EAAyBzC,EAAAA,YAC7B0C,GAAmB,CACnB,MAAMC,EAAUZ,EAAc,OAC5BQ,GAAWA,EAAO,KAAO,sBAAA,EAE3BL,EACCQ,EAAQ,CAAC,GAAGC,EAAS,CAAE,GAAI,uBAAwB,MAAAD,CAAA,CAAO,EAAIC,CAAA,CAEhE,EACA,CAACT,EAAuBH,CAAa,CAAA,EAGhCa,EACwB5C,EAAAA,YAC5B6C,GAAsD,CACtD,MAAMC,EAAO,MAAM,QAAQD,CAAC,EAAIA,EAAIA,EAAE,OAAO,MACvCF,EAAUZ,EAAc,OAAQQ,GAAWA,EAAO,KAAO,MAAM,EACrEL,EACCY,EAAK,OAAS,CAAC,GAAGH,EAAS,CAAE,GAAI,OAAQ,MAAOG,CAAA,CAAM,EAAIH,CAAA,CAE5D,EACA,CAACT,EAAuBH,CAAa,CAAA,EAGhCgB,EAAsD/C,EAAAA,YAC1DgD,GAAY,CACZ,IAAIC,EAAgBrB,EAChB,OAAOoB,GAAY,WACtBC,EAAgBD,EAAQpB,CAAU,EAElCqB,EAAgBD,EAEjBhB,EAAmBiB,CAAa,CACjC,EACA,CAACrB,EAAYI,CAAkB,CAAA,EAG1BkB,EAAQC,EAAc,CAC3B,KAAMzB,EACN,QAAST,GAAc,CACtB,SAAWR,GAAe,CACzB,MAAM2C,EAAO3C,EAAW,MAAM,KAC3B,GAAGA,EAAW,MAAM,IAAI,IAAIA,EAAW,IAAI,GAC3CA,EAAW,KACd2B,EAAc,CAAE,GAAG3B,EAAY,KAAA2C,EAAM,CACtC,CAAA,CACA,EACD,gBAAiBC,EAAA,EACjB,UAAAxB,EACA,iBAAkB,GAClB,cAAe,CACd,QAAS,GAAA,EAEV,MAAO,CACN,WAAAD,CAAA,EAED,mBAAoBmB,CAAA,CACpB,EACD,cACE,MAAA,CACA,SAAA,CAAAhE,EAAAA,KAAC,MAAA,CAAI,UAAU,6EACd,SAAA,CAAAH,EAAAA,IAAC,OAAI,UAAU,sEACd,SAAAG,EAAAA,KAAC,IAAA,CAAE,UAAU,gCACX,SAAA,CAAA4C,EAAyB,IACzB2B,EAAU3B,EAAyB,YAAY,CAAA,CAAA,CACjD,CAAA,CACD,EACA/C,EAAAA,IAAC,MAAA,CAAI,UAAU,4CACd,SAAAA,EAAAA,IAAC2E,EAAA,CACA,YAAY,qBACZ,MAAOjB,EACP,SAAWO,GAAMJ,EAAuBI,EAAE,OAAO,KAAK,CAAA,CAAA,EAExD,EACAjE,EAAAA,IAAC,MAAA,CAAI,UAAU,4CACd,SAAAA,EAAAA,IAAC4E,EAAA,CACA,YAAY,iBACZ,SAAUZ,EACV,MAAOJ,CAAA,CAAA,EAET,EACA5D,EAAAA,IAAC,OAAI,UAAU,4CACd,gBAAC6E,EAAA,CAAO,MAAO3B,EAAM,cAAeG,EACnC,SAAA,CAAArD,EAAAA,IAAC8E,EAAA,CACA,aAAW,wBACX,UAAU,SAEV,SAAA9E,EAAAA,IAAC+E,EAAA,CAAY,YAAY,SAAA,CAAU,CAAA,CAAA,SAEnCC,EAAA,CACA,SAAA,CAAAhF,EAAAA,IAACiF,EAAA,CAAW,MAAM,eAAe,SAAA,UAAO,EACxCjF,EAAAA,IAACiF,EAAA,CAAW,MAAM,eAAe,SAAA,UAAO,EACxCjF,EAAAA,IAACiF,EAAA,CAAW,MAAM,WAAW,SAAA,SAAM,EACnCjF,EAAAA,IAACiF,EAAA,CAAW,MAAM,YAAY,SAAA,QAAA,CAAM,CAAA,CAAA,CACrC,CAAA,CAAA,CACD,CAAA,CACD,CAAA,EACD,EAEAjF,EAAAA,IAACkF,EAAA,CAA0B,GAAG3B,EAA+B,EAC7DvD,EAAAA,IAACmF,EAAA,CACA,SAAAnF,EAAAA,IAACoF,EAAA,CAAU,MAAAd,EAAc,CAAA,CAC1B,CAAA,EACD,CAEF"}
|
|
1
|
+
{"version":3,"file":"index-Bj0OOguP.js","sources":["../../src/components/deployments/data-table/cells.tsx","../../src/components/deployments/data-table/index.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { Link } from \"@tanstack/react-router\";\nimport type { CellContext } from \"@tanstack/react-table\";\nimport { subSeconds } from \"date-fns\";\nimport { secondsInWeek } from \"date-fns/constants\";\nimport { useCallback, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport type { DeploymentWithFlow } from \"@/api/deployments\";\nimport { buildFilterFlowRunsQuery } from \"@/api/flow-runs\";\nimport { useQuickRun } from \"@/components/deployments/use-quick-run\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { FlowRunActivityBarChart } from \"@/components/ui/flow-run-activity-bar-graph\";\nimport { Icon } from \"@/components/ui/icons\";\nimport useDebounce from \"@/hooks/use-debounce\";\n\ntype ActionsCellProps = CellContext<DeploymentWithFlow, unknown> & {\n\tonDelete: (deployment: DeploymentWithFlow) => void;\n};\n\nexport const ActionsCell = ({ row, onDelete }: ActionsCellProps) => {\n\tconst { id, parameters } = row.original;\n\tconst { onQuickRun, isPending } = useQuickRun();\n\n\tif (!id) return null;\n\n\treturn (\n\t\t<div className=\"flex flex-row justify-end\">\n\t\t\t<DropdownMenu>\n\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t<Button variant=\"outline\" className=\"size-8 p-0\">\n\t\t\t\t\t\t<span className=\"sr-only\">Open menu</span>\n\t\t\t\t\t\t<Icon id=\"MoreVertical\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t\t<DropdownMenuLabel>Actions</DropdownMenuLabel>\n\t\t\t\t\t<DropdownMenuItem disabled={isPending} onClick={() => onQuickRun(id)}>\n\t\t\t\t\t\tQuick Run\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tto=\"/deployments/deployment/$id/run\"\n\t\t\t\t\t\t\tparams={{ id }}\n\t\t\t\t\t\t\tsearch={{ parameters }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tCustom Run\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</DropdownMenuItem>\n\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(id);\n\t\t\t\t\t\t\ttoast.success(\"ID copied\");\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\t<Link to=\"/deployments/deployment/$id/edit\" params={{ id }}>\n\t\t\t\t\t\t\tEdit\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem onClick={() => onDelete(row.original)}>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t<DropdownMenuItem>\n\t\t\t\t\t\t<Link to=\"/deployments/deployment/$id/duplicate\" params={{ id }}>\n\t\t\t\t\t\t\tDuplicate\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenu>\n\t\t</div>\n\t);\n};\n\nconst BAR_WIDTH = 8;\nconst BAR_GAP = 4;\n\nexport const ActivityCell = ({\n\trow,\n}: CellContext<DeploymentWithFlow, unknown>) => {\n\tconst [numberOfBars, setNumberOfBars] = useState<number>(0);\n\tconst debouncedNumberOfBars = useDebounce(numberOfBars, 150);\n\n\tconst chartRef = useCallback((node: HTMLDivElement | null) => {\n\t\tif (!node) return;\n\n\t\tconst updateBars = () => {\n\t\t\tconst chartWidth = node.getBoundingClientRect().width;\n\t\t\tsetNumberOfBars(Math.floor(chartWidth / (BAR_WIDTH + BAR_GAP)));\n\t\t};\n\n\t\t// Set the initial number of bars based on the chart width\n\t\tupdateBars();\n\n\t\t// Observe the chart for resize events\n\t\tconst resizeObserver = new ResizeObserver(updateBars);\n\t\tresizeObserver.observe(node);\n\t\treturn () => {\n\t\t\t// Clean up the observer\n\t\t\tresizeObserver.disconnect();\n\t\t};\n\t}, []);\n\n\tconst { data: flowRuns } = useQuery(\n\t\tbuildFilterFlowRunsQuery({\n\t\t\tdeployments: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\tid: {\n\t\t\t\t\tany_: [row.original.id],\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort: \"START_TIME_DESC\",\n\t\t\tlimit: debouncedNumberOfBars || numberOfBars,\n\t\t\toffset: 0,\n\t\t}),\n\t);\n\n\tconst { flow, ...deployment } = row.original;\n\tconst enrichedFlowRuns =\n\t\tflowRuns?.map((flowRun) => ({\n\t\t\t...flowRun,\n\t\t\tdeployment,\n\t\t\tflow,\n\t\t})) ?? [];\n\n\treturn (\n\t\t<div className=\"w-full\" ref={chartRef}>\n\t\t\t<FlowRunActivityBarChart\n\t\t\t\tstartDate={subSeconds(new Date(), secondsInWeek)}\n\t\t\t\tendDate={new Date()}\n\t\t\t\t// If debouncedNumberOfBars is 0, use numberOfBars for an asymmetric debounce to avoid rendering an empty chart on initial paint.\n\t\t\t\tnumberOfBars={debouncedNumberOfBars || numberOfBars}\n\t\t\t\tbarWidth={BAR_WIDTH}\n\t\t\t\tenrichedFlowRuns={enrichedFlowRuns}\n\t\t\t\tclassName=\"h-12 w-full\"\n\t\t\t\tchartId={row.original.id}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type {\n\tColumnFiltersState,\n\tOnChangeFn,\n\tPaginationState,\n} from \"@tanstack/react-table\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useCallback } from \"react\";\nimport type { DeploymentWithFlow } from \"@/api/deployments\";\nimport type { components } from \"@/api/prefect\";\nimport { useDeleteDeploymentConfirmationDialog } from \"@/components/deployments/use-delete-deployment-confirmation-dialog\";\nimport { FlowIconText } from \"@/components/flows/flow-icon-text\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { FlowRunActivityBarGraphTooltipProvider } from \"@/components/ui/flow-run-activity-bar-graph\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport { ScheduleBadgeGroup } from \"@/components/ui/schedule-badge\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport { StatusBadge } from \"@/components/ui/status-badge\";\nimport { TagBadgeGroup } from \"@/components/ui/tag-badge-group\";\nimport { TagsInput } from \"@/components/ui/tags-input\";\nimport { pluralize } from \"@/utils\";\nimport { ActionsCell, ActivityCell } from \"./cells\";\n\nexport type DeploymentsDataTableProps = {\n\tdeployments: DeploymentWithFlow[];\n\tcurrentDeploymentsCount: number;\n\tpageCount: number;\n\tpagination: PaginationState;\n\tsort: components[\"schemas\"][\"DeploymentSort\"];\n\tcolumnFilters: ColumnFiltersState;\n\tonPaginationChange: (pagination: PaginationState) => void;\n\tonSortChange: (sort: components[\"schemas\"][\"DeploymentSort\"]) => void;\n\tonColumnFiltersChange: (columnFilters: ColumnFiltersState) => void;\n};\n\nconst columnHelper = createColumnHelper<DeploymentWithFlow>();\n\nconst createColumns = ({\n\tonDelete,\n}: {\n\tonDelete: (deployment: DeploymentWithFlow) => void;\n}) => [\n\tcolumnHelper.display({\n\t\tid: \"name\",\n\t\theader: \"Deployment\",\n\t\tcell: ({ row }) => (\n\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t<Link to=\"/deployments/deployment/$id\" params={{ id: row.original.id }}>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"text-sm font-medium truncate\"\n\t\t\t\t\t\ttitle={row.original.name}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.original.name}\n\t\t\t\t\t</span>\n\t\t\t\t</Link>\n\n\t\t\t\t{row.original.flow && (\n\t\t\t\t\t<FlowIconText\n\t\t\t\t\t\tflow={row.original.flow}\n\t\t\t\t\t\tclassName=\"text-xs text-muted-foreground flex items-center gap-1\"\n\t\t\t\t\t\ticonSize={12}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t),\n\t\tsize: 100,\n\t}),\n\tcolumnHelper.accessor(\"status\", {\n\t\tid: \"status\",\n\t\theader: \"Status\",\n\t\tcell: ({ row }) => {\n\t\t\tconst status = row.original.status;\n\t\t\tif (!status) return null;\n\t\t\treturn (\n\t\t\t\t<div className=\"min-w-28\">\n\t\t\t\t\t<StatusBadge status={status} />\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\tsize: 50,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"activity\",\n\t\theader: \"Activity\",\n\t\tcell: (props) => (\n\t\t\t<div className=\"flex flex-row gap-2 items-center min-w-28\">\n\t\t\t\t<ActivityCell {...props} />\n\t\t\t</div>\n\t\t),\n\t\tsize: 300,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"tags\",\n\t\theader: () => null,\n\t\tcell: ({ row }) => <TagBadgeGroup tags={row.original.tags ?? []} />,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"schedules\",\n\t\theader: \"Schedules\",\n\t\tcell: ({ row }) => {\n\t\t\tconst schedules = row.original.schedules;\n\t\t\tif (!schedules || schedules.length === 0) return null;\n\t\t\treturn <ScheduleBadgeGroup schedules={schedules} />;\n\t\t},\n\t\tsize: 150,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => <ActionsCell {...props} onDelete={onDelete} />,\n\t}),\n];\n\nexport const DeploymentsDataTable = ({\n\tdeployments,\n\tcurrentDeploymentsCount,\n\tpagination,\n\tpageCount,\n\tsort,\n\tcolumnFilters,\n\tonPaginationChange,\n\tonSortChange,\n\tonColumnFiltersChange,\n}: DeploymentsDataTableProps) => {\n\tconst [deleteConfirmationDialogState, confirmDelete] =\n\t\tuseDeleteDeploymentConfirmationDialog();\n\n\tconst nameSearchValue = (columnFilters.find(\n\t\t(filter) => filter.id === \"flowOrDeploymentName\",\n\t)?.value ?? \"\") as string;\n\tconst tagsSearchValue = (columnFilters.find((filter) => filter.id === \"tags\")\n\t\t?.value ?? []) as string[];\n\n\tconst handleNameSearchChange = useCallback(\n\t\t(value?: string) => {\n\t\t\tconst filters = columnFilters.filter(\n\t\t\t\t(filter) => filter.id !== \"flowOrDeploymentName\",\n\t\t\t);\n\t\t\tonColumnFiltersChange(\n\t\t\t\tvalue ? [...filters, { id: \"flowOrDeploymentName\", value }] : filters,\n\t\t\t);\n\t\t},\n\t\t[onColumnFiltersChange, columnFilters],\n\t);\n\n\tconst handleTagsSearchChange: React.ChangeEventHandler<HTMLInputElement> &\n\t\t((tags: string[]) => void) = useCallback(\n\t\t(e: string[] | React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst tags = Array.isArray(e) ? e : e.target.value;\n\t\t\tconst filters = columnFilters.filter((filter) => filter.id !== \"tags\");\n\t\t\tonColumnFiltersChange(\n\t\t\t\ttags.length ? [...filters, { id: \"tags\", value: tags }] : filters,\n\t\t\t);\n\t\t},\n\t\t[onColumnFiltersChange, columnFilters],\n\t);\n\n\tconst handlePaginationChange: OnChangeFn<PaginationState> = useCallback(\n\t\t(updater) => {\n\t\t\tlet newPagination = pagination;\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tnewPagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tnewPagination = updater;\n\t\t\t}\n\t\t\tonPaginationChange(newPagination);\n\t\t},\n\t\t[pagination, onPaginationChange],\n\t);\n\n\tconst table = useReactTable({\n\t\tdata: deployments,\n\t\tcolumns: createColumns({\n\t\t\tonDelete: (deployment) => {\n\t\t\t\tconst name = deployment.flow?.name\n\t\t\t\t\t? `${deployment.flow?.name}/${deployment.name}`\n\t\t\t\t\t: deployment.name;\n\t\t\t\tconfirmDelete({ ...deployment, name });\n\t\t\t},\n\t\t}),\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tpageCount,\n\t\tmanualPagination: true,\n\t\tdefaultColumn: {\n\t\t\tmaxSize: 300,\n\t\t},\n\t\tstate: {\n\t\t\tpagination,\n\t\t},\n\t\tonPaginationChange: handlePaginationChange,\n\t});\n\treturn (\n\t\t<div>\n\t\t\t<div className=\"grid sm:grid-cols-2 md:grid-cols-6 lg:grid-cols-12 gap-2 pb-4 items-center\">\n\t\t\t\t<div className=\"sm:col-span-2 md:col-span-6 lg:col-span-4 order-last lg:order-first\">\n\t\t\t\t\t<p className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t\t{currentDeploymentsCount}{\" \"}\n\t\t\t\t\t\t{pluralize(currentDeploymentsCount, \"Deployment\")}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"sm:col-span-2 md:col-span-2 lg:col-span-3\">\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tplaceholder=\"Search deployments\"\n\t\t\t\t\t\tvalue={nameSearchValue}\n\t\t\t\t\t\tonChange={(e) => handleNameSearchChange(e.target.value)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"xs:col-span-1 md:col-span-2 lg:col-span-3\">\n\t\t\t\t\t<TagsInput\n\t\t\t\t\t\tplaceholder=\"Filter by tags\"\n\t\t\t\t\t\tonChange={handleTagsSearchChange}\n\t\t\t\t\t\tvalue={tagsSearchValue}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"xs:col-span-1 md:col-span-2 lg:col-span-2\">\n\t\t\t\t\t<Select value={sort} onValueChange={onSortChange}>\n\t\t\t\t\t\t<SelectTrigger\n\t\t\t\t\t\t\taria-label=\"Deployment sort order\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SelectValue placeholder=\"Sort by\" />\n\t\t\t\t\t\t</SelectTrigger>\n\t\t\t\t\t\t<SelectContent>\n\t\t\t\t\t\t\t<SelectItem value=\"CREATED_DESC\">Created</SelectItem>\n\t\t\t\t\t\t\t<SelectItem value=\"UPDATED_DESC\">Updated</SelectItem>\n\t\t\t\t\t\t\t<SelectItem value=\"NAME_ASC\">A to Z</SelectItem>\n\t\t\t\t\t\t\t<SelectItem value=\"NAME_DESC\">Z to A</SelectItem>\n\t\t\t\t\t\t</SelectContent>\n\t\t\t\t\t</Select>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t<FlowRunActivityBarGraphTooltipProvider>\n\t\t\t\t<DataTable table={table} />\n\t\t\t</FlowRunActivityBarGraphTooltipProvider>\n\t\t</div>\n\t);\n};\n"],"names":["ActionsCell","row","onDelete","id","parameters","onQuickRun","isPending","useQuickRun","jsx","DropdownMenu","DropdownMenuTrigger","jsxs","Button","Icon","DropdownMenuContent","DropdownMenuLabel","DropdownMenuItem","Link","toast","BAR_WIDTH","BAR_GAP","ActivityCell","numberOfBars","setNumberOfBars","useState","debouncedNumberOfBars","useDebounce","chartRef","useCallback","node","updateBars","chartWidth","resizeObserver","flowRuns","useQuery","buildFilterFlowRunsQuery","flow","deployment","enrichedFlowRuns","flowRun","FlowRunActivityBarChart","subSeconds","secondsInWeek","columnHelper","createColumnHelper","createColumns","FlowIconText","status","StatusBadge","props","TagBadgeGroup","schedules","ScheduleBadgeGroup","DeploymentsDataTable","deployments","currentDeploymentsCount","pagination","pageCount","sort","columnFilters","onPaginationChange","onSortChange","onColumnFiltersChange","deleteConfirmationDialogState","confirmDelete","useDeleteDeploymentConfirmationDialog","nameSearchValue","filter","tagsSearchValue","handleNameSearchChange","value","filters","handleTagsSearchChange","e","tags","handlePaginationChange","updater","newPagination","table","useReactTable","name","getCoreRowModel","pluralize","SearchInput","TagsInput","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","DeleteConfirmationDialog","FlowRunActivityBarGraphTooltipProvider","DataTable"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as o}from"./vendor-tanstack-BK8oseNA.js";import{s as m}from"./index-
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{j as o}from"./vendor-tanstack-BK8oseNA.js";import{s as m}from"./index-BvSl3DKP.js";import{D as s}from"./header-9rXZ4r39.js";import{R as p}from"./route-error-state-CGGpuCGN.js";import"./vendor-react-Bce9NwRC.js";import"./vendor-radix-CznP1SOq.js";import"./vendor-recharts-D4imLXNl.js";import"./vendor-forms-DxqqmhL5.js";import"./vendor-date-7GxEwcQM.js";function j({error:e,reset:t}){const r=m(e,"Failed to load deployments");if(r.type!=="server-error"&&r.type!=="client-error")throw e;return o.jsxs("div",{className:"flex flex-col gap-4",children:[o.jsx(s,{}),o.jsx(p,{error:r,onRetry:t})]})}export{j as errorComponent};
|
|
2
|
+
//# sourceMappingURL=index-BlpD74iH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-BlpD74iH.js","sources":["../../src/routes/deployments/index.tsx?tsr-split=errorComponent"],"sourcesContent":["import { useQuery, useSuspenseQueries } from \"@tanstack/react-query\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport type {\n\tColumnFiltersState,\n\tPaginationState,\n} from \"@tanstack/react-table\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { useCallback, useMemo } from \"react\";\nimport { z } from \"zod\";\nimport {\n\tbuildCountDeploymentsQuery,\n\tbuildPaginateDeploymentsQuery,\n\ttype DeploymentsPaginationFilter,\n} from \"@/api/deployments\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { buildListFlowsQuery } from \"@/api/flows\";\nimport type { components } from \"@/api/prefect\";\nimport { DeploymentsDataTable } from \"@/components/deployments/data-table\";\nimport { DeploymentsEmptyState } from \"@/components/deployments/empty-state\";\nimport { DeploymentsPageHeader } from \"@/components/deployments/header\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\n/**\n * Schema for validating URL search parameters for the variables page.\n * @property {number} page - The page number to display. Must be positive. Defaults to 1.\n * @property {number} limit - The maximum number of items to return. Must be positive. Defaults to 10.\n */\nconst searchParams = z.object({\n\tpage: z.number().int().positive().optional().default(1).catch(1),\n\tlimit: z.number().int().positive().optional().default(10).catch(10),\n\tsort: z\n\t\t.enum([\"NAME_ASC\", \"NAME_DESC\", \"CREATED_DESC\", \"UPDATED_DESC\"])\n\t\t.optional()\n\t\t.default(\"NAME_ASC\")\n\t\t.catch(\"NAME_ASC\"),\n\tflowOrDeploymentName: z.string().optional().catch(\"\"),\n\ttags: z.array(z.string()).optional().catch([]),\n});\n\n/**\n * Builds pagination parameters for deployments query from search params\n *\n * @param search - Optional validated search parameters containing page and limit\n * @returns DeploymentsPaginationFilter with page, limit and sort order\n *\n * @example\n * ```ts\n * const filter = buildPaginationBody({ page: 2, limit: 25 })\n * // Returns { page: 2, limit: 25, sort: \"NAME_ASC\" }\n * ```\n */\nconst buildPaginationBody = (\n\tsearch?: z.infer<typeof searchParams>,\n): DeploymentsPaginationFilter => ({\n\tpage: search?.page ?? 1,\n\tlimit: search?.limit ?? 10,\n\tsort: search?.sort ?? \"NAME_ASC\",\n\tdeployments: {\n\t\toperator: \"and_\",\n\t\tflow_or_deployment_name: { like_: search?.flowOrDeploymentName ?? \"\" },\n\t\ttags: { operator: \"and_\", all_: search?.tags ?? [] },\n\t},\n});\n\nfunction DeploymentsErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load deployments\");\n\n\t// Only handle API errors (server-error, client-error) at route level\n\t// Let network errors and unknown errors bubble up to root error component\n\tif (\n\t\tserverError.type !== \"server-error\" &&\n\t\tserverError.type !== \"client-error\"\n\t) {\n\t\tthrow error;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<DeploymentsPageHeader />\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/deployments/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\terrorComponent: DeploymentsErrorComponent,\n\tloaderDeps: ({ search }) => buildPaginationBody(search),\n\tloader: async ({ deps, context }) => {\n\t\t// Get full count of deployments, don't block the UI\n\t\tconst deploymentsCountResult = context.queryClient.ensureQueryData(\n\t\t\tbuildCountDeploymentsQuery(),\n\t\t);\n\n\t\t// Get paginated deployments, wait for the result to get corresponding flows\n\t\tconst deploymentsPaginateResult = await context.queryClient.ensureQueryData(\n\t\t\tbuildPaginateDeploymentsQuery(deps),\n\t\t);\n\n\t\tconst deployments = deploymentsPaginateResult?.results ?? [];\n\n\t\tconst flowIds = [\n\t\t\t...new Set(deployments.map((deployment) => deployment.flow_id)),\n\t\t];\n\n\t\t// Get flows corresponding to the deployments\n\t\tconst flowsFilterResult = context.queryClient.ensureQueryData(\n\t\t\tbuildListFlowsQuery({\n\t\t\t\tflows: {\n\t\t\t\t\toperator: \"and_\",\n\t\t\t\t\tid: {\n\t\t\t\t\t\tany_: flowIds,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toffset: 0,\n\t\t\t\tsort: \"NAME_ASC\",\n\t\t\t}),\n\t\t);\n\n\t\treturn {\n\t\t\tdeploymentsCountResult,\n\t\t\tdeploymentsPaginateResult,\n\t\t\tflowsFilterResult,\n\t\t};\n\t},\n\twrapInSuspense: true,\n});\n\n/**\n * Hook to manage pagination state and navigation for deployments table\n *\n * Handles conversion between 1-based page numbers in the URL and 0-based indices used by React Table.\n * Updates the URL search parameters when pagination changes.\n *\n * @returns A tuple containing:\n * - pagination: Current pagination state with pageIndex and pageSize\n * - onPaginationChange: Callback to update pagination and navigate with new search params\n */\nconst usePagination = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\t// React Table uses 0-based pagination, so we need to subtract 1 from the page number\n\tconst pageIndex = (search.page ?? 1) - 1;\n\tconst pageSize = search.limit ?? 10;\n\tconst pagination: PaginationState = useMemo(\n\t\t() => ({\n\t\t\tpageIndex,\n\t\t\tpageSize,\n\t\t}),\n\t\t[pageIndex, pageSize],\n\t);\n\n\tconst onPaginationChange = useCallback(\n\t\t(newPagination: PaginationState) => {\n\t\t\tvoid navigate({\n\t\t\t\tto: \".\",\n\t\t\t\tsearch: (prev) => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tpage: newPagination.pageIndex + 1,\n\t\t\t\t\tlimit: newPagination.pageSize,\n\t\t\t\t}),\n\t\t\t\treplace: true,\n\t\t\t});\n\t\t},\n\t\t[navigate],\n\t);\n\n\treturn [pagination, onPaginationChange] as const;\n};\n\n/**\n * Hook to manage sorting state and navigation for deployments table\n *\n * Handles updating the URL search parameters when sort order changes.\n * Returns the current sort value from URL and a callback to update it.\n *\n * @returns A tuple containing:\n * - sort: Current sort value from URL search params\n * - onSortingChange: Callback to update sort and navigate with new search params\n */\nconst useSort = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\tconst onSortingChange = (sort: components[\"schemas\"][\"DeploymentSort\"]) => {\n\t\tvoid navigate({\n\t\t\tto: \".\",\n\t\t\tsearch: (prev) => ({ ...prev, sort }),\n\t\t\treplace: true,\n\t\t});\n\t};\n\n\treturn [search.sort, onSortingChange] as const;\n};\n\nconst useDeploymentsColumnFilters = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\tconst columnFilters: ColumnFiltersState = useMemo(\n\t\t() => [\n\t\t\t{ id: \"flowOrDeploymentName\", value: search.flowOrDeploymentName },\n\t\t\t{ id: \"tags\", value: search.tags },\n\t\t],\n\t\t[search.flowOrDeploymentName, search.tags],\n\t);\n\n\tconst onColumnFiltersChange = useCallback(\n\t\t(newColumnFilters: ColumnFiltersState) => {\n\t\t\tvoid navigate({\n\t\t\t\tto: \".\",\n\t\t\t\tsearch: (prev) => {\n\t\t\t\t\tconst flowOrDeploymentName = newColumnFilters.find(\n\t\t\t\t\t\t(filter) => filter.id === \"flowOrDeploymentName\",\n\t\t\t\t\t)?.value as string | undefined;\n\t\t\t\t\tconst tags = newColumnFilters.find((filter) => filter.id === \"tags\")\n\t\t\t\t\t\t?.value as string[] | undefined;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\tflowOrDeploymentName,\n\t\t\t\t\t\ttags,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\treplace: true,\n\t\t\t});\n\t\t},\n\t\t[navigate],\n\t);\n\n\treturn [columnFilters, onColumnFiltersChange] as const;\n};\n\nfunction RouteComponent() {\n\tconst search = Route.useSearch();\n\tconst [pagination, onPaginationChange] = usePagination();\n\tconst [sort, onSortChange] = useSort();\n\tconst [columnFilters, onColumnFiltersChange] = useDeploymentsColumnFilters();\n\n\tconst [{ data: deploymentsCount }, { data: deploymentsPage }] =\n\t\tuseSuspenseQueries({\n\t\t\tqueries: [\n\t\t\t\tbuildCountDeploymentsQuery(),\n\t\t\t\tbuildPaginateDeploymentsQuery(buildPaginationBody(search)),\n\t\t\t],\n\t\t});\n\n\tconst deployments = deploymentsPage?.results ?? [];\n\n\tconst { data: flows } = useQuery(\n\t\tbuildListFlowsQuery({\n\t\t\tflows: {\n\t\t\t\toperator: \"and_\",\n\t\t\t\tid: {\n\t\t\t\t\tany_: [\n\t\t\t\t\t\t...new Set(deployments.map((deployment) => deployment.flow_id)),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t\toffset: 0,\n\t\t\tsort: \"NAME_ASC\",\n\t\t}),\n\t);\n\n\tconst deploymentsWithFlows = deployments.map((deployment) => ({\n\t\t...deployment,\n\t\tflow: flows?.find((flow) => flow.id === deployment.flow_id),\n\t}));\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<DeploymentsPageHeader />\n\t\t\t{deploymentsCount === 0 ? (\n\t\t\t\t<DeploymentsEmptyState />\n\t\t\t) : (\n\t\t\t\t<DeploymentsDataTable\n\t\t\t\t\tdeployments={deploymentsWithFlows}\n\t\t\t\t\tcurrentDeploymentsCount={deploymentsCount}\n\t\t\t\t\tpageCount={deploymentsPage?.pages ?? 0}\n\t\t\t\t\tpagination={pagination}\n\t\t\t\t\tsort={sort}\n\t\t\t\t\tcolumnFilters={columnFilters}\n\t\t\t\t\tonPaginationChange={onPaginationChange}\n\t\t\t\t\tonSortChange={onSortChange}\n\t\t\t\t\tonColumnFiltersChange={onColumnFiltersChange}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"names":["DeploymentsErrorComponent","error","reset","serverError","categorizeError","type","jsxs","jsx","DeploymentsPageHeader","RouteErrorState"],"mappings":"wWAiEA,SAASA,EAA0B,CAAEC,MAAAA,EAAOC,MAAAA,CAA2B,EAAG,CACzE,MAAMC,EAAcC,EAAgBH,EAAO,4BAA4B,EAIvE,GACCE,EAAYE,OAAS,gBACrBF,EAAYE,OAAS,eAErB,MAAMJ,EAGP,OACCK,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAqB,EACtBD,EAAAA,IAACE,EAAA,CAAgB,MAAON,EAAa,QAASD,CAAAA,CAAM,CAAA,EACrD,CAEF"}
|