prefect 3.6.16.dev5__py3-none-any.whl → 3.6.16.dev7__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/cli/__init__.py +1 -0
- prefect/cli/cloud/asset.py +135 -0
- prefect/server/ui-v2/assets/artifact-card-BnPKAfkY.js +2 -0
- prefect/server/ui-v2/assets/artifact-card-BnPKAfkY.js.map +1 -0
- prefect/server/ui-v2/assets/artifact._id-vDOuIuta.js +2 -0
- prefect/server/ui-v2/assets/artifact._id-vDOuIuta.js.map +1 -0
- prefect/server/ui-v2/assets/automation-wizard-RlOhF90R.js +2 -0
- prefect/server/ui-v2/assets/automation-wizard-RlOhF90R.js.map +1 -0
- prefect/server/ui-v2/assets/automation._id-CEHa-X0X.js +2 -0
- prefect/server/ui-v2/assets/{automation._id-CMiura1b.js.map → automation._id-CEHa-X0X.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation_._id.edit-Cbfcwa-K.js → automation_._id.edit-BRWAsELa.js} +2 -2
- prefect/server/ui-v2/assets/{automation_._id.edit-Cbfcwa-K.js.map → automation_._id.edit-BRWAsELa.js.map} +1 -1
- prefect/server/ui-v2/assets/{automations-header-BxPCOE-0.js → automations-header-Dr6v5dPp.js} +2 -2
- prefect/server/ui-v2/assets/{automations-header-BxPCOE-0.js.map → automations-header-Dr6v5dPp.js.map} +1 -1
- prefect/server/ui-v2/assets/base-job-template-form-section-C8_R96gO.js +2 -0
- prefect/server/ui-v2/assets/base-job-template-form-section-C8_R96gO.js.map +1 -0
- prefect/server/ui-v2/assets/block-type-details-tAkUWqs1.js +2 -0
- prefect/server/ui-v2/assets/block-type-details-tAkUWqs1.js.map +1 -0
- prefect/server/ui-v2/assets/block-type-logo-scnMsyY5.js +2 -0
- prefect/server/ui-v2/assets/{block-type-logo-DuvU7goV.js.map → block-type-logo-scnMsyY5.js.map} +1 -1
- prefect/server/ui-v2/assets/block._id-BY42cyjR.js +2 -0
- prefect/server/ui-v2/assets/block._id-BY42cyjR.js.map +1 -0
- prefect/server/ui-v2/assets/{block_._id.edit-C4SmoQ4y.js → block_._id.edit-n2jwU5yr.js} +2 -2
- prefect/server/ui-v2/assets/{block_._id.edit-C4SmoQ4y.js.map → block_._id.edit-n2jwU5yr.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog-5_GoCKpb.js +2 -0
- prefect/server/ui-v2/assets/catalog-5_GoCKpb.js.map +1 -0
- prefect/server/ui-v2/assets/catalog_._slug-sZvt0fDy.js +2 -0
- prefect/server/ui-v2/assets/catalog_._slug-sZvt0fDy.js.map +1 -0
- prefect/server/ui-v2/assets/{catalog_._slug_.create-CgKL4TS2.js → catalog_._slug_.create-rboQmoyW.js} +2 -2
- prefect/server/ui-v2/assets/{catalog_._slug_.create-CgKL4TS2.js.map → catalog_._slug_.create-rboQmoyW.js.map} +1 -1
- prefect/server/ui-v2/assets/{collapsible-DZbPzSgr.js → collapsible-Lk7MRvBH.js} +2 -2
- prefect/server/ui-v2/assets/{collapsible-DZbPzSgr.js.map → collapsible-Lk7MRvBH.js.map} +1 -1
- prefect/server/ui-v2/assets/concurrency-limit._id-D5i9zZJh.js +2 -0
- prefect/server/ui-v2/assets/concurrency-limit._id-D5i9zZJh.js.map +1 -0
- prefect/server/ui-v2/assets/create-CtsA2QIl.js +2 -0
- prefect/server/ui-v2/assets/{create-BrNwbpVu.js.map → create-CtsA2QIl.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-DWgkh2HT.js → create-DJPAEZ93.js} +2 -2
- prefect/server/ui-v2/assets/create-DJPAEZ93.js.map +1 -0
- prefect/server/ui-v2/assets/{data-table-QSHqmTar.js → data-table-bk-0xKWT.js} +2 -2
- prefect/server/ui-v2/assets/{data-table-QSHqmTar.js.map → data-table-bk-0xKWT.js.map} +1 -1
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-dLycVNo4.js → delete-confirmation-dialog-BZg9EOfN.js} +2 -2
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-dLycVNo4.js.map → delete-confirmation-dialog-BZg9EOfN.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-action-header-CzvBTL6H.js → deployment-action-header-DwuMPgVg.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-action-header-CzvBTL6H.js.map → deployment-action-header-DwuMPgVg.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment-form-BpKkzEf2.js +3 -0
- prefect/server/ui-v2/assets/deployment-form-BpKkzEf2.js.map +1 -0
- prefect/server/ui-v2/assets/{deployment-links-CGjJpxJA.js → deployment-links-B67P-6Ph.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-links-CGjJpxJA.js.map → deployment-links-B67P-6Ph.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-DXrb6frJ.js → deployment._id-BVOBfMVf.js} +2 -2
- prefect/server/ui-v2/assets/deployment._id-BVOBfMVf.js.map +1 -0
- prefect/server/ui-v2/assets/deployment._id-KOMC9fpE.js +2 -0
- prefect/server/ui-v2/assets/deployment._id-KOMC9fpE.js.map +1 -0
- prefect/server/ui-v2/assets/deployment_._id.duplicate-BPk2SchT.js +2 -0
- prefect/server/ui-v2/assets/deployment_._id.duplicate-BPk2SchT.js.map +1 -0
- prefect/server/ui-v2/assets/deployment_._id.edit-Dv0M_huv.js +2 -0
- prefect/server/ui-v2/assets/deployment_._id.edit-Dv0M_huv.js.map +1 -0
- prefect/server/ui-v2/assets/deployment_._id.run-DFVA4Xhx.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.run-CnacOmhY.js.map → deployment_._id.run-DFVA4Xhx.js.map} +1 -1
- prefect/server/ui-v2/assets/{dropdown-menu-B9LKPlz7.js → dropdown-menu-fRiq5bS-.js} +2 -2
- prefect/server/ui-v2/assets/{dropdown-menu-B9LKPlz7.js.map → dropdown-menu-fRiq5bS-.js.map} +1 -1
- prefect/server/ui-v2/assets/{event-resource-display-B42RIaiX.js → event-resource-display-C1ZAey-o.js} +2 -2
- prefect/server/ui-v2/assets/{event-resource-display-B42RIaiX.js.map → event-resource-display-C1ZAey-o.js.map} +1 -1
- prefect/server/ui-v2/assets/event._eventDate._eventId-CcbtP9Ag.js +2 -0
- prefect/server/ui-v2/assets/{event._eventDate._eventId-CKTuT_8S.js.map → event._eventDate._eventId-CcbtP9Ag.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run-graph-CycKStSg.js +2 -0
- prefect/server/ui-v2/assets/flow-run-graph-CycKStSg.js.map +1 -0
- prefect/server/ui-v2/assets/{flow-run._id-BKv9Meqc.js → flow-run._id-Dn9R_Tjy.js} +2 -2
- prefect/server/ui-v2/assets/flow-run._id-Dn9R_Tjy.js.map +1 -0
- prefect/server/ui-v2/assets/{flow-run._id-ZTkjj6bM.js → flow-run._id-Dwx7ojcj.js} +2 -2
- prefect/server/ui-v2/assets/flow-run._id-Dwx7ojcj.js.map +1 -0
- prefect/server/ui-v2/assets/flow-run._id-YzRd5jrC.js +4 -0
- prefect/server/ui-v2/assets/flow-run._id-YzRd5jrC.js.map +1 -0
- prefect/server/ui-v2/assets/flow-runs-pagination-DMLZFM1m.js +2 -0
- prefect/server/ui-v2/assets/flow-runs-pagination-DMLZFM1m.js.map +1 -0
- prefect/server/ui-v2/assets/flow._id-V6-Qhkwk.js +2 -0
- prefect/server/ui-v2/assets/flow._id-V6-Qhkwk.js.map +1 -0
- prefect/server/ui-v2/assets/{form-DOdmIC3A.js → form-Cl5Hk9bq.js} +2 -2
- prefect/server/ui-v2/assets/{form-DOdmIC3A.js.map → form-Cl5Hk9bq.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-DcIuN5UN.js → header-BuI436ik.js} +2 -2
- prefect/server/ui-v2/assets/{header-DcIuN5UN.js.map → header-BuI436ik.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-CnBwASd-.js → header-DcAQCxQl.js} +2 -2
- prefect/server/ui-v2/assets/{header-CnBwASd-.js.map → header-DcAQCxQl.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-DxE-NzAK.js → header-qlcK4NLD.js} +2 -2
- prefect/server/ui-v2/assets/{header-DxE-NzAK.js.map → header-qlcK4NLD.js.map} +1 -1
- prefect/server/ui-v2/assets/index--Z69UYXV.js +2 -0
- prefect/server/ui-v2/assets/index--Z69UYXV.js.map +1 -0
- prefect/server/ui-v2/assets/{index-D0R9_LIL.js → index-BO4Qqsm8.js} +2 -2
- prefect/server/ui-v2/assets/index-BO4Qqsm8.js.map +1 -0
- prefect/server/ui-v2/assets/index-Bg45XS_V.js +2 -0
- prefect/server/ui-v2/assets/index-Bg45XS_V.js.map +1 -0
- prefect/server/ui-v2/assets/{index-BIBIJufF.js → index-BleYpDoN.js} +2 -2
- prefect/server/ui-v2/assets/index-BleYpDoN.js.map +1 -0
- prefect/server/ui-v2/assets/{index-DyOAqIOp.js → index-C63VUjOh.js} +2 -2
- prefect/server/ui-v2/assets/{index-DyOAqIOp.js.map → index-C63VUjOh.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DfKXdmko.js → index-C6LgWyJb.js} +2 -2
- prefect/server/ui-v2/assets/index-C6LgWyJb.js.map +1 -0
- prefect/server/ui-v2/assets/index-CE-bVgqj.js +2 -0
- prefect/server/ui-v2/assets/{index-DlAHvqFx.js.map → index-CE-bVgqj.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-V_xTKaEb.js → index-CPpeVt8m.js} +13 -13
- prefect/server/ui-v2/assets/index-CPpeVt8m.js.map +1 -0
- prefect/server/ui-v2/assets/index-CYaUe0Ym.js +2 -0
- prefect/server/ui-v2/assets/index-CYaUe0Ym.js.map +1 -0
- prefect/server/ui-v2/assets/{index-C5RMFRyZ.js → index-Clbms0kg.js} +2 -2
- prefect/server/ui-v2/assets/index-Clbms0kg.js.map +1 -0
- prefect/server/ui-v2/assets/index-D13YFoYA.js +2 -0
- prefect/server/ui-v2/assets/index-D13YFoYA.js.map +1 -0
- prefect/server/ui-v2/assets/{index-Cx1qEoCK.js → index-D73a_nGu.js} +2 -2
- prefect/server/ui-v2/assets/{index-Cx1qEoCK.js.map → index-D73a_nGu.js.map} +1 -1
- prefect/server/ui-v2/assets/index-DJXBzX1E.css +1 -0
- prefect/server/ui-v2/assets/{index-BO60ehN6.js → index-DPPPaOr_.js} +2 -2
- prefect/server/ui-v2/assets/index-DPPPaOr_.js.map +1 -0
- prefect/server/ui-v2/assets/{index-DP8W-xJo.js → index-DU9ShbqW.js} +2 -2
- prefect/server/ui-v2/assets/index-DU9ShbqW.js.map +1 -0
- prefect/server/ui-v2/assets/index-DdR1lzZk.js +2 -0
- prefect/server/ui-v2/assets/index-DdR1lzZk.js.map +1 -0
- prefect/server/ui-v2/assets/{index-B9ttjsyu.js → index-ELo08q04.js} +2 -2
- prefect/server/ui-v2/assets/{index-B9ttjsyu.js.map → index-ELo08q04.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BTL1xHS9.js → index-cp6PTdHp.js} +2 -2
- prefect/server/ui-v2/assets/{index-BTL1xHS9.js.map → index-cp6PTdHp.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D6G96ToY.js → index-kM_g8J0u.js} +2 -2
- prefect/server/ui-v2/assets/{index-D6G96ToY.js.map → index-kM_g8J0u.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-q5Y3hlDT.js → index-mYcm9Rkr.js} +2 -2
- prefect/server/ui-v2/assets/index-mYcm9Rkr.js.map +1 -0
- prefect/server/ui-v2/assets/{index-D9cOtoSU.js → index-yavn_NBp.js} +2 -2
- prefect/server/ui-v2/assets/index-yavn_NBp.js.map +1 -0
- prefect/server/ui-v2/assets/{json-input-YKJMJCcT.js → json-input-iUzf6BvZ.js} +2 -2
- prefect/server/ui-v2/assets/{json-input-YKJMJCcT.js.map → json-input-iUzf6BvZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{key-value-RPUUqQ6F.js → key-value-DI27Dv4P.js} +2 -2
- prefect/server/ui-v2/assets/{key-value-RPUUqQ6F.js.map → key-value-DI27Dv4P.js.map} +1 -1
- prefect/server/ui-v2/assets/key._key-C-nk2nld.js +2 -0
- prefect/server/ui-v2/assets/key._key-C-nk2nld.js.map +1 -0
- prefect/server/ui-v2/assets/{lazy-markdown-B9vEkJ0h.js → lazy-markdown-D_y73qoD.js} +2 -2
- prefect/server/ui-v2/assets/{lazy-markdown-B9vEkJ0h.js.map → lazy-markdown-D_y73qoD.js.map} +1 -1
- prefect/server/ui-v2/assets/{login-C3PhSGQJ.js → login-DR_xuMmg.js} +2 -2
- prefect/server/ui-v2/assets/{login-C3PhSGQJ.js.map → login-DR_xuMmg.js.map} +1 -1
- prefect/server/ui-v2/assets/{markdown-input-Dei7u1qp.js → markdown-input-hzlzpUdj.js} +2 -2
- prefect/server/ui-v2/assets/{markdown-input-Dei7u1qp.js.map → markdown-input-hzlzpUdj.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-example-snippet-DvulFxgw.js → python-example-snippet-d8bTNJ0J.js} +3 -3
- prefect/server/ui-v2/assets/{python-example-snippet-DvulFxgw.js.map → python-example-snippet-d8bTNJ0J.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-input-niCawr8m.js → python-input-Bxdnzvx3.js} +2 -2
- prefect/server/ui-v2/assets/{python-input-niCawr8m.js.map → python-input-Bxdnzvx3.js.map} +1 -1
- prefect/server/ui-v2/assets/{radio-group-D55TQZsk.js → radio-group-0oOEMJCS.js} +2 -2
- prefect/server/ui-v2/assets/{radio-group-D55TQZsk.js.map → radio-group-0oOEMJCS.js.map} +1 -1
- prefect/server/ui-v2/assets/{route-error-state-Cu4m0LTX.js → route-error-state-BqbnZCc-.js} +2 -2
- prefect/server/ui-v2/assets/{route-error-state-Cu4m0LTX.js.map → route-error-state-BqbnZCc-.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-BQAcWW5k.js → schema-form-BD-WM4S0.js} +2 -2
- prefect/server/ui-v2/assets/{schema-form-BQAcWW5k.js.map → schema-form-BD-WM4S0.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-Cb4sTJle.js → schema-form-input-string-format-datetime-Dg3zVAp5.js} +4 -4
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-Cb4sTJle.js.map → schema-form-input-string-format-datetime-Dg3zVAp5.js.map} +1 -1
- prefect/server/ui-v2/assets/{settings-DV4ewZ_4.js → settings-Dm6yMLix.js} +2 -2
- prefect/server/ui-v2/assets/{settings-DV4ewZ_4.js.map → settings-Dm6yMLix.js.map} +1 -1
- prefect/server/ui-v2/assets/{sort-filter-DY7vgl7C.js → sort-filter-X6JyRc0-.js} +2 -2
- prefect/server/ui-v2/assets/{sort-filter-DY7vgl7C.js.map → sort-filter-X6JyRc0-.js.map} +1 -1
- prefect/server/ui-v2/assets/{table-ChOwO4Pk.js → table-Xyel2BEw.js} +2 -2
- prefect/server/ui-v2/assets/{table-ChOwO4Pk.js.map → table-Xyel2BEw.js.map} +1 -1
- prefect/server/ui-v2/assets/{tags-input-2KSBvO_K.js → tags-input-DqZ8v99z.js} +2 -2
- prefect/server/ui-v2/assets/{tags-input-2KSBvO_K.js.map → tags-input-DqZ8v99z.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CNrP9yPQ.js → task-run-concurrency-limits-reset-dialog-5xFWeoYy.js} +2 -2
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-CNrP9yPQ.js.map → task-run-concurrency-limits-reset-dialog-5xFWeoYy.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-cqXH0PMU.js → task-run._id-9DcrUEGz.js} +3 -3
- prefect/server/ui-v2/assets/{task-run._id-cqXH0PMU.js.map → task-run._id-9DcrUEGz.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-CQGeAiBh.js → task-run._id-DJkoLl_e.js} +2 -2
- prefect/server/ui-v2/assets/task-run._id-DJkoLl_e.js.map +1 -0
- prefect/server/ui-v2/assets/task-runs-pagination-B2fSdB1t.js +2 -0
- prefect/server/ui-v2/assets/task-runs-pagination-B2fSdB1t.js.map +1 -0
- prefect/server/ui-v2/assets/{textarea-9v5uTuxg.js → textarea-DFEOJJdc.js} +2 -2
- prefect/server/ui-v2/assets/{textarea-9v5uTuxg.js.map → textarea-DFEOJJdc.js.map} +1 -1
- prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js → timezone-select-NViFNNLz.js} +2 -2
- prefect/server/ui-v2/assets/{timezone-select-DPtR_b06.js.map → timezone-select-NViFNNLz.js.map} +1 -1
- prefect/server/ui-v2/assets/{toggle-group-CBJphTE6.js → toggle-group-EMgSOoYH.js} +2 -2
- prefect/server/ui-v2/assets/{toggle-group-CBJphTE6.js.map → toggle-group-EMgSOoYH.js.map} +1 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-BHgDXlwg.js +2 -0
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-BHgDXlwg.js.map +1 -0
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BYY1b8yH.js → use-delete-block-document-confirmation-dialog-CxRkBKPg.js} +2 -2
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-BYY1b8yH.js.map → use-delete-block-document-confirmation-dialog-CxRkBKPg.js.map} +1 -1
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-Ck8nwx2q.js +2 -0
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-Ck8nwx2q.js.map +1 -0
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BOTU5FPq.js → use-get-artifacts-flow-task-runs-D7Djt53s.js} +2 -2
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-BOTU5FPq.js.map → use-get-artifacts-flow-task-runs-D7Djt53s.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-quick-run-DzSmbSlu.js → use-quick-run-Cpy0t7dX.js} +2 -2
- prefect/server/ui-v2/assets/{use-quick-run-DzSmbSlu.js.map → use-quick-run-Cpy0t7dX.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-state-favicon-UFxhmhHr.js → use-state-favicon-CMsL9s6j.js} +2 -2
- prefect/server/ui-v2/assets/{use-state-favicon-UFxhmhHr.js.map → use-state-favicon-CMsL9s6j.js.map} +1 -1
- prefect/server/ui-v2/assets/use-stepper-CZZEx5js.js +2 -0
- prefect/server/ui-v2/assets/use-stepper-CZZEx5js.js.map +1 -0
- prefect/server/ui-v2/assets/{utilities-2FfCfMAV.js → utilities-D9BfvLg5.js} +2 -2
- prefect/server/ui-v2/assets/{utilities-2FfCfMAV.js.map → utilities-D9BfvLg5.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool-filter-dsJ6xeK6.js +2 -0
- prefect/server/ui-v2/assets/work-pool-filter-dsJ6xeK6.js.map +1 -0
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-zSWhEFap.js → work-pool-queue-toggle-f_-cTWxB.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-zSWhEFap.js.map → work-pool-queue-toggle-f_-cTWxB.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool._workPoolName-BwIVfCIe.js → work-pool._workPoolName-zBqgkYLT.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool._workPoolName-BwIVfCIe.js.map → work-pool._workPoolName-zBqgkYLT.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-j7cjgoJp.js → work-pool_._workPoolName.edit-B-8_CnfA.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-j7cjgoJp.js.map → work-pool_._workPoolName.edit-B-8_CnfA.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BlFjSdoB.js → work-pool_._workPoolName.queue._workQueueName-DzrY1tMq.js} +2 -2
- prefect/server/ui-v2/assets/work-pool_._workPoolName.queue._workQueueName-DzrY1tMq.js.map +1 -0
- prefect/server/ui-v2/assets/{work-queue-icon-text-vWlRNW-b.js → work-queue-icon-text-BqqQ413o.js} +2 -2
- prefect/server/ui-v2/assets/{work-queue-icon-text-vWlRNW-b.js.map → work-queue-icon-text-BqqQ413o.js.map} +1 -1
- prefect/server/ui-v2/index.html +2 -2
- prefect/task_engine.py +26 -12
- prefect/workers/base.py +18 -1
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/METADATA +1 -1
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/RECORD +208 -207
- prefect/server/ui-v2/assets/artifact-card-DQfjRA2u.js +0 -2
- prefect/server/ui-v2/assets/artifact-card-DQfjRA2u.js.map +0 -1
- prefect/server/ui-v2/assets/artifact._id-BBhuX3px.js +0 -2
- prefect/server/ui-v2/assets/artifact._id-BBhuX3px.js.map +0 -1
- prefect/server/ui-v2/assets/automation-wizard-DeT-tz5i.js +0 -2
- prefect/server/ui-v2/assets/automation-wizard-DeT-tz5i.js.map +0 -1
- prefect/server/ui-v2/assets/automation._id-CMiura1b.js +0 -2
- prefect/server/ui-v2/assets/base-job-template-form-section-MeO0M71Y.js +0 -2
- prefect/server/ui-v2/assets/base-job-template-form-section-MeO0M71Y.js.map +0 -1
- prefect/server/ui-v2/assets/block-type-details-Bcb9qEO8.js +0 -2
- prefect/server/ui-v2/assets/block-type-details-Bcb9qEO8.js.map +0 -1
- prefect/server/ui-v2/assets/block-type-logo-DuvU7goV.js +0 -2
- prefect/server/ui-v2/assets/block._id-DFR6zmOy.js +0 -2
- prefect/server/ui-v2/assets/block._id-DFR6zmOy.js.map +0 -1
- prefect/server/ui-v2/assets/catalog-CPzaK8QS.js +0 -2
- prefect/server/ui-v2/assets/catalog-CPzaK8QS.js.map +0 -1
- prefect/server/ui-v2/assets/catalog_._slug-60h4tERz.js +0 -2
- prefect/server/ui-v2/assets/catalog_._slug-60h4tERz.js.map +0 -1
- prefect/server/ui-v2/assets/concurrency-limit._id-BFfR6_U0.js +0 -2
- prefect/server/ui-v2/assets/concurrency-limit._id-BFfR6_U0.js.map +0 -1
- prefect/server/ui-v2/assets/create-BrNwbpVu.js +0 -2
- prefect/server/ui-v2/assets/create-DWgkh2HT.js.map +0 -1
- prefect/server/ui-v2/assets/deployment-form-B33C7F2u.js +0 -3
- prefect/server/ui-v2/assets/deployment-form-B33C7F2u.js.map +0 -1
- prefect/server/ui-v2/assets/deployment._id-5rPcPD0T.js +0 -2
- prefect/server/ui-v2/assets/deployment._id-5rPcPD0T.js.map +0 -1
- prefect/server/ui-v2/assets/deployment._id-DXrb6frJ.js.map +0 -1
- prefect/server/ui-v2/assets/deployment_._id.duplicate-D7YLydeq.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.duplicate-D7YLydeq.js.map +0 -1
- prefect/server/ui-v2/assets/deployment_._id.edit-Daq0J0Ow.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.edit-Daq0J0Ow.js.map +0 -1
- prefect/server/ui-v2/assets/deployment_._id.run-CnacOmhY.js +0 -2
- prefect/server/ui-v2/assets/event._eventDate._eventId-CKTuT_8S.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-OrT2Osbu.js +0 -2
- prefect/server/ui-v2/assets/flow-run-graph-OrT2Osbu.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-BKv9Meqc.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-DCYAnq0D.js +0 -4
- prefect/server/ui-v2/assets/flow-run._id-DCYAnq0D.js.map +0 -1
- prefect/server/ui-v2/assets/flow-run._id-ZTkjj6bM.js.map +0 -1
- prefect/server/ui-v2/assets/flow-runs-pagination-CykMKOhv.js +0 -2
- prefect/server/ui-v2/assets/flow-runs-pagination-CykMKOhv.js.map +0 -1
- prefect/server/ui-v2/assets/flow._id-DhrxqQmD.js +0 -2
- prefect/server/ui-v2/assets/flow._id-DhrxqQmD.js.map +0 -1
- prefect/server/ui-v2/assets/index-BIBIJufF.js.map +0 -1
- prefect/server/ui-v2/assets/index-BO60ehN6.js.map +0 -1
- prefect/server/ui-v2/assets/index-BS7fbJ2s.js +0 -2
- prefect/server/ui-v2/assets/index-BS7fbJ2s.js.map +0 -1
- prefect/server/ui-v2/assets/index-C5RMFRyZ.js.map +0 -1
- prefect/server/ui-v2/assets/index-D0R9_LIL.js.map +0 -1
- prefect/server/ui-v2/assets/index-D9cOtoSU.js.map +0 -1
- prefect/server/ui-v2/assets/index-DEpWUeaO.js +0 -2
- prefect/server/ui-v2/assets/index-DEpWUeaO.js.map +0 -1
- prefect/server/ui-v2/assets/index-DP8W-xJo.js.map +0 -1
- prefect/server/ui-v2/assets/index-DfKXdmko.js.map +0 -1
- prefect/server/ui-v2/assets/index-DiVKp6rW.js +0 -2
- prefect/server/ui-v2/assets/index-DiVKp6rW.js.map +0 -1
- prefect/server/ui-v2/assets/index-DlAHvqFx.js +0 -2
- prefect/server/ui-v2/assets/index-VNFzALsC.js +0 -2
- prefect/server/ui-v2/assets/index-VNFzALsC.js.map +0 -1
- prefect/server/ui-v2/assets/index-V_xTKaEb.js.map +0 -1
- prefect/server/ui-v2/assets/index-WIq8QUNT.js +0 -2
- prefect/server/ui-v2/assets/index-WIq8QUNT.js.map +0 -1
- prefect/server/ui-v2/assets/index-m9O-nIOl.css +0 -1
- prefect/server/ui-v2/assets/index-q5Y3hlDT.js.map +0 -1
- prefect/server/ui-v2/assets/key._key-CX8FwfwL.js +0 -2
- prefect/server/ui-v2/assets/key._key-CX8FwfwL.js.map +0 -1
- prefect/server/ui-v2/assets/task-run._id-CQGeAiBh.js.map +0 -1
- prefect/server/ui-v2/assets/task-runs-pagination-CYoOghEN.js +0 -2
- prefect/server/ui-v2/assets/task-runs-pagination-CYoOghEN.js.map +0 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DZplMJDW.js +0 -2
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DZplMJDW.js.map +0 -1
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-1YE-VIgM.js +0 -2
- prefect/server/ui-v2/assets/use-flow-runs-selected-rows-1YE-VIgM.js.map +0 -1
- prefect/server/ui-v2/assets/use-stepper-CnGJHRLP.js +0 -2
- prefect/server/ui-v2/assets/use-stepper-CnGJHRLP.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool-filter-CGfXNujK.js +0 -2
- prefect/server/ui-v2/assets/work-pool-filter-CGfXNujK.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool_._workPoolName.queue._workQueueName-BlFjSdoB.js.map +0 -1
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/WHEEL +0 -0
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.16.dev5.dist-info → prefect-3.6.16.dev7.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DEpWUeaO.js","sources":["../../src/components/blocks/block-document-data-table/block-document-cell.tsx","../../src/components/blocks/block-document-data-table/block-document-data-table.tsx","../../src/components/blocks/block-types-multi-select/block-types-multi-select.tsx","../../src/components/blocks/blocks-row-count/blocks-row-count.tsx","../../src/components/blocks/empty-state/empty-state.tsx","../../src/components/blocks/blocks-page.tsx","../../src/routes/blocks/index.tsx?tsr-split=component"],"sourcesContent":["import { Link } from \"@tanstack/react-router\";\nimport type { BlockDocument } from \"@/api/block-documents\";\nimport { BlockTypeLogo } from \"@/components/block-type-logo/block-type-logo\";\nimport { Typography } from \"@/components/ui/typography\";\n\ntype BlockDocumentCellProps = {\n\tblockDocument: BlockDocument;\n};\n\nexport const BlockDocumentCell = ({\n\tblockDocument,\n}: BlockDocumentCellProps) => {\n\tconst { id, name, block_type, block_type_name } = blockDocument;\n\n\treturn (\n\t\t<div className=\"flex gap-4 items-center\">\n\t\t\t{block_type && block_type_name && (\n\t\t\t\t<BlockTypeLogo\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tlogoUrl={block_type.logo_url}\n\t\t\t\t\talt={`${block_type_name} logo`}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t{name && (\n\t\t\t\t\t<Link to=\"/blocks/block/$id\" params={{ id }}>\n\t\t\t\t\t\t<Typography className=\"font-semibold\">{name}</Typography>\n\t\t\t\t\t</Link>\n\t\t\t\t)}\n\t\t\t\t{block_type_name && blockDocument.block_type?.slug && (\n\t\t\t\t\t<Link\n\t\t\t\t\t\tto=\"/blocks/catalog/$slug\"\n\t\t\t\t\t\tparams={{ slug: blockDocument.block_type.slug }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t{block_type_name}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Link>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import type { CheckedState } from \"@radix-ui/react-checkbox\";\nimport {\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\ttype OnChangeFn,\n\ttype PaginationState,\n\ttype RowSelectionState,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport { useCallback } from \"react\";\nimport type { BlockDocument } from \"@/api/block-documents\";\nimport { BlockDocumentActionMenu } from \"@/components/blocks/block-document-action-menu\";\nimport { useDeleteBlockDocumentConfirmationDialog } from \"@/components/blocks/use-delete-block-document-confirmation-dialog\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { DataTable } from \"@/components/ui/data-table\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { BlockDocumentCell } from \"./block-document-cell\";\n\nconst columnHelper = createColumnHelper<BlockDocument>();\n\nconst createColumns = ({\n\tonDelete,\n}: {\n\tonDelete: (blockDocument: BlockDocument) => void;\n}) => [\n\tcolumnHelper.display({\n\t\tmaxSize: 10,\n\t\tid: \"select\",\n\t\theader: ({ table }) => {\n\t\t\tlet checkedState: CheckedState = false;\n\t\t\tif (table.getIsAllRowsSelected()) {\n\t\t\t\tcheckedState = true;\n\t\t\t} else if (table.getIsSomePageRowsSelected()) {\n\t\t\t\tcheckedState = \"indeterminate\";\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={checkedState}\n\t\t\t\t\tonCheckedChange={(value) =>\n\t\t\t\t\t\ttable.toggleAllPageRowsSelected(Boolean(value))\n\t\t\t\t\t}\n\t\t\t\t\taria-label=\"Select all\"\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t\tcell: ({ row }) => (\n\t\t\t<Checkbox\n\t\t\t\tchecked={row.getIsSelected()}\n\t\t\t\tonCheckedChange={(value) => row.toggleSelected(Boolean(value))}\n\t\t\t\taria-label=\"Select row\"\n\t\t\t/>\n\t\t),\n\t\tenableSorting: false,\n\t\tenableHiding: false,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"block\",\n\t\theader: \"Block\",\n\t\tcell: ({ row }) => <BlockDocumentCell blockDocument={row.original} />,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\tcell: (props) => {\n\t\t\tconst cell = props.row.original;\n\t\t\treturn (\n\t\t\t\t<div className=\"flex justify-end\">\n\t\t\t\t\t<BlockDocumentActionMenu\n\t\t\t\t\t\tblockDocument={cell}\n\t\t\t\t\t\tonDelete={() => onDelete(cell)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t}),\n];\n\nexport type BlockDocumentsDataTableProps = {\n\tblockDocumentsCount: number;\n\tblockDocuments: Array<BlockDocument>;\n\tpagination: PaginationState;\n\tonPaginationChange: (pagination: PaginationState) => void;\n\trowSelection: RowSelectionState;\n\tsetRowSelection: OnChangeFn<RowSelectionState>;\n};\nexport const BlockDocumentsDataTable = ({\n\tblockDocuments,\n\tblockDocumentsCount,\n\tonPaginationChange,\n\tpagination,\n\trowSelection,\n\tsetRowSelection,\n}: BlockDocumentsDataTableProps) => {\n\tconst [dialogState, handleConfirmDelete] =\n\t\tuseDeleteBlockDocumentConfirmationDialog();\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\tcolumns: createColumns({ onDelete: handleConfirmDelete }),\n\t\tdata: blockDocuments,\n\t\tdefaultColumn: { maxSize: 300 },\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tmanualPagination: true,\n\t\tonPaginationChange: handlePaginationChange,\n\t\trowCount: blockDocumentsCount,\n\t\tgetRowId: (row) => row.id,\n\t\tonRowSelectionChange: setRowSelection,\n\t\tstate: { pagination, rowSelection },\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t<DataTable table={table} />\n\t\t\t<DeleteConfirmationDialog {...dialogState} />\n\t\t</>\n\t);\n};\n","\"use client\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport {\n\ttype BlockType,\n\tbuildListFilterBlockTypesQuery,\n} from \"@/api/block-types\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\nimport { TagBadge } from \"@/components/ui/tag-badge\";\n\ntype BlockTypesMultiSelectProps = {\n\tselectedBlockTypesSlugs: Array<string>;\n\tonToggleBlockTypeSlug: (blockTypeSlug: string) => void;\n\tonRemoveBlockTypeSlug: (blockTypeSlug: string) => void;\n};\n\nexport function BlockTypesMultiSelect({\n\tselectedBlockTypesSlugs,\n\tonToggleBlockTypeSlug,\n\tonRemoveBlockTypeSlug,\n}: BlockTypesMultiSelectProps) {\n\treturn (\n\t\t<Suspense>\n\t\t\t<BlockTypesMultiSelectImplementation\n\t\t\t\tselectedBlockTypesSlugs={selectedBlockTypesSlugs}\n\t\t\t\tonToggleBlockTypeSlug={onToggleBlockTypeSlug}\n\t\t\t\tonRemoveBlockTypeSlug={onRemoveBlockTypeSlug}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n}\n\nfunction BlockTypesMultiSelectImplementation({\n\tselectedBlockTypesSlugs,\n\tonToggleBlockTypeSlug,\n\tonRemoveBlockTypeSlug,\n}: BlockTypesMultiSelectProps) {\n\tconst [search, setSearch] = useState(\"\");\n\n\tconst deferredSearch = useDeferredValue(search);\n\n\tconst { data: blockTypes } = useSuspenseQuery(\n\t\tbuildListFilterBlockTypesQuery(),\n\t);\n\n\tconst selectedBlockTypes = useMemo(() => {\n\t\treturn selectedBlockTypesSlugs\n\t\t\t.map((blockTypeSlug) =>\n\t\t\t\tblockTypes.find((blockType) => blockType.slug === blockTypeSlug),\n\t\t\t)\n\t\t\t.filter(Boolean) as Array<BlockType>;\n\t}, [blockTypes, selectedBlockTypesSlugs]);\n\n\tconst filteredData = useMemo(() => {\n\t\treturn blockTypes.filter((blockType) =>\n\t\t\tblockType.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [blockTypes, deferredSearch]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger selected={selectedBlockTypesSlugs.length > 0}>\n\t\t\t\t<div className=\"flex gap-1\">\n\t\t\t\t\t{selectedBlockTypesSlugs.length > 0\n\t\t\t\t\t\t? selectedBlockTypes.map((blockType) => (\n\t\t\t\t\t\t\t\t<TagBadge\n\t\t\t\t\t\t\t\t\tkey={blockType.id}\n\t\t\t\t\t\t\t\t\ttag={blockType.name}\n\t\t\t\t\t\t\t\t\tonRemove={() => onRemoveBlockTypeSlug(blockType.slug)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t: \"Block type\"}\n\t\t\t\t</div>\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 for a block type...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No block type found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredData.map((blockType) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={blockType.id}\n\t\t\t\t\t\t\t\tselected={selectedBlockTypesSlugs.includes(blockType.slug)}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonToggleBlockTypeSlug(value);\n\t\t\t\t\t\t\t\t\tsetSearch(\"\");\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={blockType.slug}\n\t\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={selectedBlockTypesSlugs.includes(blockType.slug)}\n\t\t\t\t\t\t\t\t\treadOnly\n\t\t\t\t\t\t\t\t\tclassName=\"mr-2 pointer-events-none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{blockType.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n}\n","import type { OnChangeFn, RowSelectionState } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\nimport { useDeleteBlockDocumentConfirmationDialog } from \"@/components/blocks/use-delete-block-document-confirmation-dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { DeleteConfirmationDialog } from \"@/components/ui/delete-confirmation-dialog\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { pluralize } from \"@/utils\";\n\nexport type BlocksRowCountProps = {\n\tcount: number;\n\trowSelection: RowSelectionState;\n\tsetRowSelection: OnChangeFn<RowSelectionState>;\n};\nexport const BlocksRowCount = ({\n\tcount,\n\trowSelection,\n\tsetRowSelection,\n}: BlocksRowCountProps) => {\n\tconst [deleteConfirmationDialogState, handleConfirmDelete] =\n\t\tuseDeleteBlockDocumentConfirmationDialog();\n\n\tconst selectedBlockIds = useMemo(\n\t\t() => Object.keys(rowSelection),\n\t\t[rowSelection],\n\t);\n\n\t// If has selected rows\n\tif (selectedBlockIds.length > 0)\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{selectedBlockIds.length} selected\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Button\n\t\t\t\t\t\taria-label=\"Delete rows\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\thandleConfirmDelete(selectedBlockIds, {\n\t\t\t\t\t\t\t\tonSuccess: () => setRowSelection({}),\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\t<Icon id=\"Trash2\" className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<DeleteConfirmationDialog {...deleteConfirmationDialogState} />\n\t\t\t</>\n\t\t);\n\n\treturn (\n\t\t<Typography variant=\"bodySmall\" className=\"text-muted-foreground\">\n\t\t\t{count} {pluralize(count, \"Block\")}\n\t\t</Typography>\n\t);\n};\n","import { Link } from \"@tanstack/react-router\";\nimport { Button } from \"@/components/ui/button\";\nimport { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\nimport { Icon } from \"@/components/ui/icons\";\n\nexport const BlocksEmptyState = () => (\n\t<EmptyState>\n\t\t<EmptyStateIcon id=\"Box\" />\n\t\t<EmptyStateTitle>Add a block to get started</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tBlocks securely store credentials and configuration to easily manage\n\t\t\tconnections to external systems.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<Link to=\"/blocks/catalog\">\n\t\t\t\t<Button>\n\t\t\t\t\tAdd Block <Icon id=\"Plus\" className=\"size-4 ml-2\" />\n\t\t\t\t</Button>\n\t\t\t</Link>\n\t\t\t<DocsLink id=\"blocks-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","import { Link } from \"@tanstack/react-router\";\nimport type { PaginationState, RowSelectionState } from \"@tanstack/react-table\";\nimport { useState } from \"react\";\nimport type { BlockDocument } from \"@/api/block-documents\";\nimport { Breadcrumb, BreadcrumbItem } from \"@/components/ui/breadcrumb\";\nimport { Button } from \"@/components/ui/button\";\nimport { Icon } from \"@/components/ui/icons\";\nimport { SearchInput } from \"@/components/ui/input\";\nimport { BlockDocumentsDataTable } from \"./block-document-data-table\";\nimport { BlockTypesMultiSelect } from \"./block-types-multi-select\";\nimport { BlocksRowCount } from \"./blocks-row-count\";\nimport { BlocksEmptyState } from \"./empty-state\";\n\ntype BlocksPageProps = {\n\tallCount: number;\n\tblockDocuments: Array<BlockDocument> | undefined;\n\tonSearch: (value?: string) => void;\n\tsearch: string;\n\tblockTypeSlugsFilter: Array<string>;\n\tonToggleBlockTypeSlug: (blockTypeIds: string) => void;\n\tonRemoveBlockTypeSlug: (blockTypeIds: string) => void;\n\tpagination: PaginationState;\n\tonPaginationChange: (paginationState: PaginationState) => void;\n};\n\nexport const BlocksPage = ({\n\tallCount,\n\tblockDocuments = [],\n\tonSearch,\n\tsearch,\n\tblockTypeSlugsFilter,\n\tonToggleBlockTypeSlug,\n\tonRemoveBlockTypeSlug,\n\tpagination,\n\tonPaginationChange,\n}: BlocksPageProps) => {\n\tconst [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Breadcrumb>\n\t\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t\tBlocks\n\t\t\t\t\t</BreadcrumbItem>\n\t\t\t\t</Breadcrumb>\n\t\t\t\t<Button size=\"icon\" className=\"size-7\" variant=\"outline\">\n\t\t\t\t\t<Link to=\"/blocks/catalog\">\n\t\t\t\t\t\t<Icon id=\"Plus\" className=\"size-4\" />\n\t\t\t\t\t</Link>\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t{allCount === 0 ? (\n\t\t\t\t<BlocksEmptyState />\n\t\t\t) : (\n\t\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t<BlocksRowCount\n\t\t\t\t\t\t\trowSelection={rowSelection}\n\t\t\t\t\t\t\tsetRowSelection={setRowSelection}\n\t\t\t\t\t\t\tcount={allCount}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<div className=\"min-w-56\">\n\t\t\t\t\t\t\t\t<SearchInput\n\t\t\t\t\t\t\t\t\taria-label=\"search blocks\"\n\t\t\t\t\t\t\t\t\tplaceholder=\"Search blocks\"\n\t\t\t\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onSearch(e.target.value)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"min-w-64\">\n\t\t\t\t\t\t\t\t<BlockTypesMultiSelect\n\t\t\t\t\t\t\t\t\tselectedBlockTypesSlugs={blockTypeSlugsFilter}\n\t\t\t\t\t\t\t\t\tonToggleBlockTypeSlug={onToggleBlockTypeSlug}\n\t\t\t\t\t\t\t\t\tonRemoveBlockTypeSlug={onRemoveBlockTypeSlug}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<BlockDocumentsDataTable\n\t\t\t\t\t\tblockDocuments={blockDocuments}\n\t\t\t\t\t\trowSelection={rowSelection}\n\t\t\t\t\t\tsetRowSelection={setRowSelection}\n\t\t\t\t\t\tblockDocumentsCount={allCount}\n\t\t\t\t\t\tpagination={pagination}\n\t\t\t\t\t\tonPaginationChange={onPaginationChange}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import { useQuery, useSuspenseQuery } from \"@tanstack/react-query\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport type { PaginationState } from \"@tanstack/react-table\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { useCallback, useMemo } from \"react\";\nimport { z } from \"zod\";\nimport {\n\ttype BlockDocumentsFilter,\n\tbuildCountAllBlockDocumentsQuery,\n\tbuildCountFilterBlockDocumentsQuery,\n\tbuildListFilterBlockDocumentsQuery,\n} from \"@/api/block-documents\";\nimport { buildListFilterBlockTypesQuery } from \"@/api/block-types\";\nimport { BlocksPage } from \"@/components/blocks/blocks-page\";\nimport { usePageTitle } from \"@/hooks/use-page-title\";\n\nconst searchParams = z.object({\n\tblockName: z.string().optional(),\n\tblockTypes: z.array(z.string()).optional(),\n\tpage: z.number().int().positive().optional().default(1).catch(1),\n\tlimit: z.number().int().positive().optional().default(10).catch(10),\n});\n\nexport const Route = createFileRoute(\"/blocks/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\tloaderDeps: ({ search: { blockName, blockTypes, page, limit } }) => ({\n\t\tblockName,\n\t\tblockTypes,\n\t\tpage,\n\t\tlimit,\n\t}),\n\tloader: ({ deps, context: { queryClient } }) => {\n\t\t// ----- Critical data\n\t\tconst filter: BlockDocumentsFilter = {\n\t\t\tblock_types: { slug: { any_: deps.blockTypes } },\n\t\t\tblock_documents: {\n\t\t\t\tis_anonymous: { eq_: false },\n\t\t\t\toperator: \"or_\",\n\t\t\t\tname: { like_: deps.blockName },\n\t\t\t},\n\t\t\tlimit: deps.limit,\n\t\t\toffset: deps.page,\n\t\t\tinclude_secrets: false,\n\t\t\tsort: \"NAME_ASC\",\n\t\t};\n\t\treturn Promise.all([\n\t\t\tqueryClient.ensureQueryData(buildListFilterBlockTypesQuery()),\n\t\t\t// All count query\n\t\t\tqueryClient.ensureQueryData(buildCountAllBlockDocumentsQuery()),\n\t\t\t// Filtered block document\n\t\t\tqueryClient.ensureQueryData(buildListFilterBlockDocumentsQuery(filter)),\n\t\t\t// Filtered count query\n\t\t\tqueryClient.ensureQueryData(buildCountFilterBlockDocumentsQuery(filter)),\n\t\t]);\n\t},\n\twrapInSuspense: true,\n});\n\nfunction RouteComponent() {\n\tusePageTitle(\"Blocks\");\n\tconst [search, onSearch] = useSearch();\n\tconst [blockTypeSlugs, onSetBlockTypeSlugs] = useFilterByBlockTypes();\n\tconst [pagination, onPaginationChange] = usePagination();\n\n\tconst { data: allBlockDocumentsCount } = useSuspenseQuery(\n\t\tbuildCountAllBlockDocumentsQuery(),\n\t);\n\n\tconst { data: blockDocuments } = useQuery(\n\t\tbuildListFilterBlockDocumentsQuery({\n\t\t\tsort: \"NAME_ASC\",\n\t\t\tinclude_secrets: false,\n\t\t\tblock_documents: {\n\t\t\t\tname: { like_: search },\n\t\t\t\toperator: \"and_\",\n\t\t\t\tis_anonymous: { eq_: false },\n\t\t\t},\n\t\t\tblock_types: {\n\t\t\t\tslug: {\n\t\t\t\t\tany_: blockTypeSlugs.length > 0 ? blockTypeSlugs : undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t\toffset: pagination.pageIndex * pagination.pageSize,\n\t\t\tlimit: pagination.pageSize,\n\t\t}),\n\t);\n\n\tconst handleRemoveBlockType = (id: string) => {\n\t\tconst newValue = blockTypeSlugs.filter((blockId) => blockId !== id);\n\t\tonSetBlockTypeSlugs(newValue);\n\t};\n\n\tconst handleToggleBlockType = (id: string) => {\n\t\t// Remove block id if its in the list\n\t\tif (blockTypeSlugs.includes(id)) {\n\t\t\treturn handleRemoveBlockType(id);\n\t\t}\n\t\t// Else add it to the list\n\t\tonSetBlockTypeSlugs([...blockTypeSlugs, id]);\n\t};\n\n\treturn (\n\t\t<BlocksPage\n\t\t\tallCount={allBlockDocumentsCount}\n\t\t\tblockDocuments={blockDocuments}\n\t\t\tonSearch={onSearch}\n\t\t\tsearch={search}\n\t\t\tblockTypeSlugsFilter={blockTypeSlugs}\n\t\t\tonRemoveBlockTypeSlug={handleRemoveBlockType}\n\t\t\tonToggleBlockTypeSlug={handleToggleBlockType}\n\t\t\tpagination={pagination}\n\t\t\tonPaginationChange={onPaginationChange}\n\t\t/>\n\t);\n}\n\nfunction useSearch() {\n\tconst { blockName } = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\tconst onSearch = useCallback(\n\t\t(value?: string) => {\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\tblockName: value,\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\tconst search = useMemo(() => blockName ?? \"\", [blockName]);\n\treturn [search, onSearch] as const;\n}\n\nfunction useFilterByBlockTypes() {\n\tconst { blockTypes = [] } = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\tconst onSetBlockTypes = useCallback(\n\t\t(value?: Array<string>) => {\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\tblockTypes: value,\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 [blockTypes, onSetBlockTypes] as const;\n}\n\nfunction 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"],"names":["BlockDocumentCell","blockDocument","id","name","block_type","block_type_name","jsxs","jsx","BlockTypeLogo","Link","Typography","columnHelper","createColumnHelper","createColumns","onDelete","table","checkedState","Checkbox","value","row","props","cell","BlockDocumentActionMenu","BlockDocumentsDataTable","blockDocuments","blockDocumentsCount","onPaginationChange","pagination","rowSelection","setRowSelection","dialogState","handleConfirmDelete","useDeleteBlockDocumentConfirmationDialog","handlePaginationChange","useCallback","updater","newPagination","useReactTable","getCoreRowModel","Fragment","DataTable","DeleteConfirmationDialog","BlockTypesMultiSelect","selectedBlockTypesSlugs","onToggleBlockTypeSlug","onRemoveBlockTypeSlug","Suspense","BlockTypesMultiSelectImplementation","search","setSearch","useState","deferredSearch","useDeferredValue","blockTypes","useSuspenseQuery","buildListFilterBlockTypesQuery","selectedBlockTypes","useMemo","blockTypeSlug","blockType","filteredData","Combobox","ComboboxTrigger","TagBadge","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","ComboboxCommandGroup","ComboboxCommandItem","BlocksRowCount","count","deleteConfirmationDialogState","selectedBlockIds","Button","Icon","pluralize","BlocksEmptyState","EmptyState","EmptyStateIcon","EmptyStateTitle","EmptyStateDescription","EmptyStateActions","DocsLink","BlocksPage","allCount","onSearch","blockTypeSlugsFilter","Breadcrumb","BreadcrumbItem","SearchInput","e","RouteComponent","usePageTitle","useSearch","blockTypeSlugs","onSetBlockTypeSlugs","useFilterByBlockTypes","usePagination","data","allBlockDocumentsCount","buildCountAllBlockDocumentsQuery","useQuery","buildListFilterBlockDocumentsQuery","sort","include_secrets","block_documents","like_","operator","is_anonymous","eq_","block_types","slug","any_","length","undefined","offset","pageIndex","pageSize","limit","handleRemoveBlockType","newValue","filter","blockId","handleToggleBlockType","includes","blockName","Route","navigate","useNavigate","to","prev","replace","onSetBlockTypes","page"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DP8W-xJo.js","sources":["../../src/components/deployments/empty-state/index.tsx","../../src/routes/deployments/index.tsx?tsr-split=component"],"sourcesContent":["import { DocsLink } from \"@/components/ui/docs-link\";\nimport {\n\tEmptyState,\n\tEmptyStateActions,\n\tEmptyStateDescription,\n\tEmptyStateIcon,\n\tEmptyStateTitle,\n} from \"@/components/ui/empty-state\";\n\nexport const DeploymentsEmptyState = () => (\n\t<EmptyState>\n\t\t<div className=\"flex items-center gap-3\">\n\t\t\t<EmptyStateIcon id=\"Workflow\" />\n\t\t\t<EmptyStateIcon id=\"MoreHorizontal\" />\n\t\t\t<EmptyStateIcon id=\"Rocket\" />\n\t\t</div>\n\t\t<EmptyStateTitle>Create a deployment to get started</EmptyStateTitle>\n\t\t<EmptyStateDescription>\n\t\t\tDeployments elevate workflows from functions you call manually to API\n\t\t\tobjects that can be remotely triggered.\n\t\t</EmptyStateDescription>\n\t\t<EmptyStateActions>\n\t\t\t<DocsLink id=\"deployments-guide\" />\n\t\t</EmptyStateActions>\n\t</EmptyState>\n);\n","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":["DeploymentsEmptyState","jsxs","EmptyState","jsx","EmptyStateIcon","EmptyStateTitle","EmptyStateDescription","EmptyStateActions","DocsLink","buildPaginationBody","search","page","limit","sort","deployments","operator","flow_or_deployment_name","like_","flowOrDeploymentName","tags","all_","usePagination","Route","useSearch","navigate","useNavigate","pageIndex","pageSize","pagination","useMemo","onPaginationChange","useCallback","newPagination","to","prev","replace","useSort","onSortingChange","useDeploymentsColumnFilters","columnFilters","id","value","onColumnFiltersChange","newColumnFilters","find","filter","offset","RouteComponent","onSortChange","data","deploymentsCount","deploymentsPage","useSuspenseQueries","queries","buildCountDeploymentsQuery","buildPaginateDeploymentsQuery","results","flows","useQuery","buildListFlowsQuery","any_","Set","map","deployment","flow_id","deploymentsWithFlows","flow","DeploymentsPageHeader","DeploymentsDataTable","pages"],"mappings":"i0BASO,MAAMA,EAAwB,IACpCC,EAAAA,KAACC,EAAA,CACA,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAE,EAAAA,IAACC,EAAA,CAAe,GAAG,UAAA,CAAW,EAC9BD,EAAAA,IAACC,EAAA,CAAe,GAAG,gBAAA,CAAiB,EACpCD,EAAAA,IAACC,EAAA,CAAe,GAAG,QAAA,CAAS,CAAA,EAC7B,EACAD,EAAAA,IAACE,GAAgB,SAAA,oCAAA,CAAkC,EACnDF,EAAAA,IAACG,GAAsB,SAAA,+GAAA,CAGvB,QACCC,EAAA,CACA,SAAAJ,EAAAA,IAACK,EAAA,CAAS,GAAG,oBAAoB,CAAA,CAClC,CAAA,EACD,EC4BKC,EACLC,IACkC,CAClCC,KAAMD,GAAQC,MAAQ,EACtBC,MAAOF,GAAQE,OAAS,GACxBC,KAAMH,GAAQG,MAAQ,WACtBC,YAAa,CACZC,SAAU,OACVC,wBAAyB,CAAEC,MAAOP,GAAQQ,sBAAwB,EAAA,EAClEC,KAAM,CAAEJ,SAAU,OAAQK,KAAMV,GAAQS,MAAQ,CAAA,CAAA,CAAG,CAErD,GA6EME,EAAgBA,IAAM,CAC3B,MAAMX,EAASY,EAAMC,UAAAA,EACfC,EAAWF,EAAMG,YAAAA,EAGjBC,GAAahB,EAAOC,MAAQ,GAAK,EACjCgB,EAAWjB,EAAOE,OAAS,GAC3BgB,EAA8BC,EAAAA,QACnC,KAAO,CACNH,UAAAA,EACAC,SAAAA,CAAAA,GAED,CAACD,EAAWC,CAAQ,CACrB,EAEMG,EAAqBC,cACzBC,GAAmC,CAC9BR,EAAS,CACbS,GAAI,IACJvB,OAASwB,IAAU,CAClB,GAAGA,EACHvB,KAAMqB,EAAcN,UAAY,EAChCd,MAAOoB,EAAcL,QAAAA,GAEtBQ,QAAS,EAAA,CACT,CACF,EACA,CAACX,CAAQ,CACV,EAEA,MAAO,CAACI,EAAYE,CAAkB,CACvC,EAYMM,EAAUA,IAAM,CACrB,MAAM1B,EAASY,EAAMC,UAAAA,EACfC,EAAWF,EAAMG,YAAAA,EAEjBY,EAAmBxB,GAAkD,CACrEW,EAAS,CACbS,GAAI,IACJvB,OAASwB,IAAU,CAAE,GAAGA,EAAMrB,KAAAA,CAAAA,GAC9BsB,QAAS,EAAA,CACT,CACF,EAEA,MAAO,CAACzB,EAAOG,KAAMwB,CAAe,CACrC,EAEMC,EAA8BA,IAAM,CACzC,MAAM5B,EAASY,EAAMC,UAAAA,EACfC,EAAWF,EAAMG,YAAAA,EACjBc,EAAoCV,EAAAA,QACzC,IAAM,CACL,CAAEW,GAAI,uBAAwBC,MAAO/B,EAAOQ,oBAAAA,EAC5C,CAAEsB,GAAI,OAAQC,MAAO/B,EAAOS,IAAAA,CAAM,EAEnC,CAACT,EAAOQ,qBAAsBR,EAAOS,IAAI,CAC1C,EAEMuB,EAAwBX,cAC5BY,GAAyC,CACpCnB,EAAS,CACbS,GAAI,IACJvB,OAASwB,GAAS,CACjB,MAAMhB,EAAuByB,EAAiBC,QACjCC,EAAOL,KAAO,sBAC3B,GAAGC,MACGtB,EAAOwB,EAAiBC,QAAiBC,EAAOL,KAAO,MAAM,GAChEC,MACH,MAAO,CACN,GAAGP,EACHY,OAAQ,EACR5B,qBAAAA,EACAC,KAAAA,CAAAA,CAEF,EACAgB,QAAS,EAAA,CACT,CACF,EACA,CAACX,CAAQ,CACV,EAEA,MAAO,CAACe,EAAeG,CAAqB,CAC7C,EAEA,SAASK,IAAiB,CACzB,MAAMrC,EAASY,EAAMC,UAAAA,EACf,CAACK,EAAYE,CAAkB,EAAIT,EAAAA,EACnC,CAACR,EAAMmC,CAAY,EAAIZ,EAAAA,EACvB,CAACG,EAAeG,CAAqB,EAAIJ,EAAAA,EAEzC,CAAC,CAAEW,KAAMC,CAAAA,EAAoB,CAAED,KAAME,CAAAA,CAAiB,EAC3DC,EAAmB,CAClBC,QAAS,CACRC,EAAAA,EACAC,EAA8B9C,EAAoBC,CAAM,CAAC,CAAC,CAAA,CAE3D,EAEII,EAAcqC,GAAiBK,SAAW,CAAA,EAE1C,CAAEP,KAAMQ,CAAAA,EAAUC,EACvBC,EAAoB,CACnBF,MAAO,CACN1C,SAAU,OACVyB,GAAI,CACHoB,KAAM,CACL,GAAG,IAAIC,IAAI/C,EAAYgD,IAAKC,GAAeA,EAAWC,OAAO,CAAC,CAAC,CAAA,CAEjE,EAEDlB,OAAQ,EACRjC,KAAM,UAAA,CACN,CACF,EAEMoD,EAAuBnD,EAAYgD,IAAKC,IAAgB,CAC7D,GAAGA,EACHG,KAAMT,GAAOb,QAAesB,EAAK1B,KAAOuB,EAAWC,OAAO,CAAA,EACzD,EAEF,OACC/D,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAE,EAAAA,IAACgE,EAAA,EAAqB,EACrBjB,IAAqB,EACrB/C,EAAAA,IAACH,EAAA,CAAA,CAAqB,EAEtBG,EAAAA,IAACiE,EAAA,CACA,YAAaH,EACb,wBAAyBf,EACzB,UAAWC,GAAiBkB,OAAS,EACrC,WAAAzC,EACA,KAAAf,EACA,cAAA0B,EACA,mBAAAT,EACA,aAAAkB,EACA,sBAAAN,CAAA,CAA6C,CAAA,EAGhD,CAEF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DfKXdmko.js","sources":["../../src/routes/variables/index.tsx?tsr-split=errorComponent"],"sourcesContent":["import { 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 { categorizeError } from \"@/api/error-utils\";\nimport type { components } from \"@/api/prefect\";\nimport {\n\tbuildCountVariablesQuery,\n\tbuildFilterVariablesQuery,\n\ttype VariablesFilter,\n} from \"@/api/variables\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\nimport { VariablesDataTable } from \"@/components/variables/data-table\";\nimport { VariablesEmptyState } from \"@/components/variables/empty-state\";\nimport { VariablesPageHeader } from \"@/components/variables/header\";\nimport {\n\tuseVariableDialog,\n\tVariableDialog,\n} from \"@/components/variables/variable-dialog\";\n\n/**\n * Schema for validating URL search parameters for the variables page.\n * @property {number} offset - The number of items to skip (for pagination). Must be non-negative. Defaults to 0.\n * @property {number} limit - The maximum number of items to return. Must be positive. Defaults to 10.\n * @property {string} sort - The sort order for variables. Can be \"CREATED_DESC\", \"UPDATED_DESC\", \"NAME_ASC\", or \"NAME_DESC\". Defaults to \"CREATED_DESC\".\n * @property {string} name - Optional filter to search variables by name.\n * @property {string[]} tags - Optional array of tags to filter variables by.\n */\nconst searchParams = z.object({\n\toffset: z.number().int().nonnegative().optional().default(0).catch(0),\n\tlimit: z.number().int().positive().optional().default(10).catch(10),\n\tsort: z\n\t\t.enum([\"CREATED_DESC\", \"UPDATED_DESC\", \"NAME_ASC\", \"NAME_DESC\"])\n\t\t.optional()\n\t\t.default(\"CREATED_DESC\")\n\t\t.catch(\"CREATED_DESC\"),\n\tname: z.string().optional().catch(undefined),\n\ttags: z.array(z.string()).optional().catch(undefined),\n});\n\n/**\n * Builds a filter body for the variables API based on search parameters.\n * @param search - Optional search parameters containing offset, limit, sort, name filter, and tags filter\n * @returns An object containing pagination parameters and variable filters that can be passed to the variables API\n */\nconst buildFilterBody = (\n\tsearch?: z.infer<typeof searchParams>,\n): VariablesFilter => ({\n\toffset: search?.offset ?? 0,\n\tlimit: search?.limit ?? 10,\n\tsort: search?.sort ?? \"CREATED_DESC\",\n\tvariables: {\n\t\toperator: \"and_\" as const,\n\t\t...(search?.name && { name: { like_: search.name } }),\n\t\t...(search?.tags?.length && {\n\t\t\ttags: { operator: \"and_\" as const, all_: search.tags },\n\t\t}),\n\t},\n});\n\nfunction VariablesErrorComponent({ error, reset }: ErrorComponentProps) {\n\tconst serverError = categorizeError(error, \"Failed to load variables\");\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<VariablesPageHeader />\n\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t</div>\n\t);\n}\n\nexport const Route = createFileRoute(\"/variables/\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: RouteComponent,\n\terrorComponent: VariablesErrorComponent,\n\tloaderDeps: ({ search }) => buildFilterBody(search),\n\tloader: ({ deps, context }) => {\n\t\t// Prefetch filtered variables\n\t\tvoid context.queryClient.prefetchQuery(buildFilterVariablesQuery(deps));\n\t\t// Prefetch filtered count\n\t\tvoid context.queryClient.prefetchQuery(buildCountVariablesQuery(deps));\n\t\t// Prefetch total count (no filter)\n\t\tvoid context.queryClient.prefetchQuery(buildCountVariablesQuery());\n\t},\n\twrapInSuspense: true,\n});\n\n/**\n * Hook to manage pagination state and navigation for variables table\n *\n * Calculates current page index and size from URL search parameters and provides\n * a callback to update pagination state. Updates the URL 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\tconst pageIndex = search.offset ? Math.ceil(search.offset / search.limit) : 0;\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\toffset: newPagination.pageIndex * newPagination.pageSize,\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 column filtering state and navigation for variables table\n *\n * Handles filtering by name and tags, updating the URL search parameters when filters change.\n * Resets pagination offset when filters are updated.\n *\n * @returns A tuple containing:\n * - columnFilters: Current column filter state for name and tags\n * - onColumnFiltersChange: Callback to update filters and navigate with new search params\n */\nconst useVariableColumnFilters = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\tconst columnFilters: ColumnFiltersState = useMemo(\n\t\t() => [\n\t\t\t{ id: \"name\", value: search.name },\n\t\t\t{ id: \"tags\", value: search.tags },\n\t\t],\n\t\t[search.name, 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 name = newColumnFilters.find((filter) => filter.id === \"name\")\n\t\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\tname,\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\n/**\n * Hook to manage sorting state and navigation for variables table\n *\n * Handles updating the URL search parameters when sort key changes.\n * Uses the current sort value from search params and provides a callback\n * to update sorting.\n *\n * @returns A tuple containing:\n * - sorting: Current sort key from search params\n * - onSortingChange: Callback to update sort and navigate with new search params\n */\nconst useVariableSorting = () => {\n\tconst search = Route.useSearch();\n\tconst navigate = Route.useNavigate();\n\n\tconst onSortingChange = useCallback(\n\t\t(sortKey: components[\"schemas\"][\"VariableSort\"]) => {\n\t\t\tvoid navigate({\n\t\t\t\tto: \".\",\n\t\t\t\tsearch: (prev) => ({ ...prev, sort: sortKey }),\n\t\t\t\treplace: true,\n\t\t\t});\n\t\t},\n\t\t[navigate],\n\t);\n\n\treturn [search.sort, onSortingChange] as const;\n};\n\nfunction RouteComponent() {\n\tconst search = Route.useSearch();\n\tconst [pagination, onPaginationChange] = usePagination();\n\tconst [columnFilters, onColumnFiltersChange] = useVariableColumnFilters();\n\tconst [sorting, onSortingChange] = useVariableSorting();\n\tconst [variableDialogState, onVariableAddOrEdit] = useVariableDialog();\n\n\tconst [{ data: variables }, { data: filteredCount }, { data: totalCount }] =\n\t\tuseSuspenseQueries({\n\t\t\tqueries: [\n\t\t\t\tbuildFilterVariablesQuery(buildFilterBody(search)),\n\t\t\t\tbuildCountVariablesQuery(buildFilterBody(search)),\n\t\t\t\tbuildCountVariablesQuery(),\n\t\t\t],\n\t\t});\n\n\tconst hasVariables = (totalCount ?? 0) > 0;\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<VariablesPageHeader onAddVariableClick={onVariableAddOrEdit} />\n\t\t\t<VariableDialog {...variableDialogState} />\n\t\t\t{hasVariables ? (\n\t\t\t\t<VariablesDataTable\n\t\t\t\t\tvariables={variables ?? []}\n\t\t\t\t\tcurrentVariableCount={filteredCount ?? 0}\n\t\t\t\t\tpagination={pagination}\n\t\t\t\t\tonPaginationChange={onPaginationChange}\n\t\t\t\t\tcolumnFilters={columnFilters}\n\t\t\t\t\tonColumnFiltersChange={onColumnFiltersChange}\n\t\t\t\t\tsorting={sorting}\n\t\t\t\t\tonSortingChange={onSortingChange}\n\t\t\t\t\tonVariableEdit={onVariableAddOrEdit}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<VariablesEmptyState onAddVariableClick={onVariableAddOrEdit} />\n\t\t\t)}\n\t\t</div>\n\t);\n}\n"],"names":["VariablesErrorComponent","error","reset","serverError","categorizeError","type","jsxs","jsx","VariablesPageHeader","RouteErrorState"],"mappings":"wWAkEA,SAASA,EAAwB,CAAEC,MAAAA,EAAOC,MAAAA,CAA2B,EAAG,CACvE,MAAMC,EAAcC,EAAgBH,EAAO,0BAA0B,EAIrE,GACCE,EAAYE,OAAS,gBACrBF,EAAYE,OAAS,eAErB,MAAMJ,EAGP,OACCK,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAmB,EACpBD,EAAAA,IAACE,EAAA,CAAgB,MAAON,EAAa,QAASD,CAAAA,CAAM,CAAA,EACrD,CAEF"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as i,j as s,t as R,L as Ee,F as qe,n as it,E as ct}from"./vendor-tanstack-BdLtprmr.js";import{ac as Xe,ad as ut,ae as dt,af as Re,ag as mt,ah as ft,ai as gt,aj as ht,ak as pt,al as xt,am as wt,an as Ae,ao as K,ap as J,aq as St,y as Q,U as Ke,q as Z,I as _,ar as vt,as as kt,at as yt,au as Ft,av as Ct,aw as jt,ax as Tt,a2 as Rt,a3 as bt,a4 as Dt,a5 as _t,a6 as Nt,p as Et,a7 as At,ay as ee,az as Mt,i as D,aA as Pt,aB as It,aC as Me,aD as Pe,C as Lt,o as zt,G as Ot,V as Ie,B as Ut,g as Vt,h as Ht,E as Bt,t as Wt,v as $t,w as Qt,x as Yt,D as Gt,aE as Je,aF as S,aG as qt,aH as Xt,aI as Le,aJ as ze,aK as Kt,aL as Oe,aM as Jt,aN as Zt,aO as es,aP as ts}from"./index-V_xTKaEb.js";import{D as ss,W as as}from"./work-pool-filter-CGfXNujK.js";import{S as ns}from"./sort-filter-DY7vgl7C.js";import{S as os,F as rs,a as ls}from"./flow-runs-pagination-CykMKOhv.js";import{u as is,F as cs}from"./use-flow-runs-selected-rows-1YE-VIgM.js";import{D as Ze}from"./delete-confirmation-dialog-dLycVNo4.js";import{D as us,a as ds,b as ms,d as Y,e as fs}from"./dropdown-menu-B9LKPlz7.js";import{g as Ue,S as Ve}from"./state-colors-CAAf0Eg3.js";import{R as gs,S as hs,d as ps,X as xs,Y as ws,T as Ss,e as vs}from"./vendor-recharts-CY3PKigC.js";import{T as ks,a as ys,b as Fs}from"./task-runs-pagination-CYoOghEN.js";import{u as Cs}from"./use-delete-confirmation-dialog-CkL-rSsp.js";import{T as js}from"./tags-input-2KSBvO_K.js";import{a as Ts}from"./zod-B1GLD-Zc.js";import{c as Rs,o as et,s as T,e as G,n as q,b as bs}from"./vendor-forms-BlFSCfFw.js";import{F as Ds,b as _s,c as Ns,d as Es,e as As,a as Ms}from"./form-DOdmIC3A.js";import"./vendor-react-HBv6Kpyp.js";import"./vendor-radix-CJc458uP.js";import"./vendor-date-Cl1Jav-N.js";const Ps=({value:e,onValueChange:t,className:n})=>{const a=i.useMemo(()=>Xe(e),[e]),o=r=>{t(dt(r))};return s.jsx(ut,{value:a,onValueChange:o,placeholder:"All time",clearable:!0,className:n})},He=2,Is=({selectedFlows:e,onSelectFlows:t})=>{const[n,a]=i.useState(""),o=i.useDeferredValue(n),{data:r=[]}=R(Re({flows:o?{operator:"and_",name:{like_:o}}:void 0,limit:100,offset:0,sort:"NAME_ASC"})),{data:c=[]}=R(Re({flows:e.size>0?{operator:"and_",id:{any_:Array.from(e)}}:void 0,limit:e.size||1,offset:0,sort:"NAME_ASC"},{enabled:e.size>0})),l=m=>{const f=new Set(e);e.has(m)?f.delete(m):f.add(m),t(f)},u=()=>{t(new Set)},g=()=>{if(e.size===0)return"All flows";const m=c.filter(w=>e.has(w.id)).map(w=>w.name),f=m.slice(0,He),h=m.length-He;return s.jsxs("div",{className:"flex flex-1 min-w-0 items-center gap-2",children:[s.jsx("div",{className:"flex flex-1 min-w-0 items-center gap-2 overflow-hidden",children:s.jsx("span",{className:"truncate",children:f.join(", ")})}),h>0&&s.jsxs(J,{variant:"bodySmall",className:"shrink-0",children:["+ ",h]})]})},d=i.useMemo(()=>r.filter(m=>!o||m.name.toLowerCase().includes(o.toLowerCase())),[r,o]);return s.jsxs(mt,{children:[s.jsx(ft,{"aria-label":"Filter by flow",selected:e.size===0,children:g()}),s.jsxs(gt,{children:[s.jsx(ht,{value:n,onValueChange:a,placeholder:"Search flows..."}),s.jsxs(pt,{children:[s.jsx(xt,{children:"No flows found"}),s.jsxs(wt,{children:[s.jsxs(Ae,{"aria-label":"All flows",onSelect:u,closeOnSelect:!1,value:"__all__",children:[s.jsx(K,{checked:e.size===0}),"All flows"]}),d.map(m=>s.jsxs(Ae,{"aria-label":m.name,onSelect:()=>l(m.id),closeOnSelect:!1,value:m.id,children:[s.jsx(K,{checked:e.has(m.id)}),m.name]},m.id))]})]})]})]})},Ls=()=>{const[e,t]=Cs(),{mutateAsync:n}=St(),a=async(r,c=()=>{})=>{try{const l=await Promise.allSettled(r.map(d=>n({id:d}))),{numFails:u,numSuccess:g}=l.reduce((d,m)=>(m.status==="rejected"?d.numFails+=1:d.numSuccess+=1,d),{numFails:0,numSuccess:0});u>1?Q.error(`${u} task runs failed to delete`):u===1?Q.error("Task run failed to delete"):g>1?Q.success(`${g} task runs deleted`):Q.success("Task run deleted")}catch(l){console.error("Unknown error while deleting task run.",l)}finally{c()}};return[e,(r,c=()=>{})=>t({title:"Delete Task Runs",description:"Are you sure you want to delete selected task runs?",onConfirm:()=>{a(r,c)}})]},zs=({count:e=0,...t})=>"results"in t&&"setSelectedRows"in t&&"selectedRows"in t?s.jsx(Os,{count:e,...t}):s.jsxs(J,{variant:"bodySmall",className:"text-muted-foreground",children:[e," ",Ke(e,"Task run")]});function Os({count:e=0,results:t=[],setSelectedRows:n,selectedRows:a}){const[o,r]=Ls(),c=i.useMemo(()=>t.map(({id:g})=>g),[t]),l=Array.from(a),u=()=>{const g=c.every(f=>a.has(f)),d=c.some(f=>a.has(f));let m=!1;return g?m=!0:d&&(m="indeterminate"),s.jsx(K,{className:"block",checked:m,onCheckedChange:f=>{n(f?new Set(c):new Set)},"aria-label":"Toggle all"})};return a.size>0?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(u,{}),s.jsxs(J,{variant:"bodySmall",className:"text-muted-foreground",children:[l.length," selected"]}),s.jsx(Z,{"aria-label":"Delete rows",size:"icon",variant:"secondary",onClick:()=>{r(l,()=>n(new Set))},children:s.jsx(_,{id:"Trash2",className:"size-4"})})]}),s.jsx(Ze,{...o})]}):s.jsxs("div",{className:"flex items-center gap-2",children:[t&&n&&a&&s.jsx(K,{className:"block",checked:!1,onCheckedChange:g=>{n(new Set(g?c:void 0))},"aria-label":"Toggle all"}),s.jsxs(J,{variant:"bodySmall",className:"text-muted-foreground",children:[e," ",Ke(e,"Task run")]})]})}const Us=e=>{const[t,n]=i.useState(new Set(e)),a=u=>n(g=>new Set(g).add(u)),o=u=>n(g=>{const d=new Set(g);return d.delete(u),d});return[t,n,{addRow:a,removeRow:o,onSelectRow:(u,g)=>{g?a(u):o(u)},clearSet:()=>n(new Set)}]},tt="Custom",Vs="Unsaved";function Hs(e){return e?e.name===tt||e.name===Vs:!0}const Bs=({currentFilter:e,savedFilters:t,onSelect:n,onSave:a,onDelete:o,onSetDefault:r,onRemoveDefault:c,permissions:l={canSave:!0,canDelete:!0}})=>{const[u,g]=i.useState(!1),d=e?.name??tt,m=Hs(e),f=m&&l.canSave,h=e?.id&&l.canDelete,w=!m,v=()=>{e?.id&&(o(e.id),g(!1))},x=()=>{e?.id&&(e.isDefault?c(e.id):r(e.id))};return s.jsxs(s.Fragment,{children:[s.jsxs(us,{children:[s.jsx(ds,{asChild:!0,children:s.jsxs(Z,{variant:"outline",className:"gap-2",children:[s.jsx(_,{id:"SlidersVertical",className:"size-4"}),s.jsx("span",{children:d}),s.jsx(_,{id:"ChevronDown",className:"size-4"})]})}),s.jsxs(ms,{align:"start",className:"min-w-[200px]",children:[t.map(p=>s.jsxs(Y,{onClick:()=>n(p),className:"flex items-center justify-between",children:[s.jsx("span",{children:p.name}),p.isDefault&&s.jsx(_,{id:"CircleCheck",className:"size-4 text-green-500"})]},p.id??p.name)),(f||h||w)&&s.jsx(fs,{}),f&&s.jsxs(Y,{onClick:a,children:[s.jsx(_,{id:"Plus",className:"mr-2 size-4"}),"Save current filters"]}),h&&s.jsxs(Y,{variant:"destructive",onClick:()=>g(!0),children:[s.jsx(_,{id:"Trash2",className:"mr-2 size-4"}),"Delete"]}),w&&s.jsxs(Y,{onClick:x,children:[s.jsx(_,{id:"CircleCheck",className:"mr-2 size-4"}),e?.isDefault?"Remove as default":"Set as default"]})]})]}),s.jsx(Ze,{isOpen:u,title:"Delete saved filter",description:`Are you sure you want to delete "${e?.name}"? This action cannot be undone.`,onConfirm:v,onClose:()=>g(!1)})]})},Ws=e=>{if(e===0)return"0s";if(e<1)return`${e.toFixed(2)}s`;const t=31536e3,n=86400,a=3600,o=60,r=Math.floor(e/t);if(r>0)return`${r}y`;const c=Math.floor(e/n);if(c>0)return`${c}d`;const l=Math.floor(e/a);if(l>0)return`${l}h`;const u=Math.floor(e/o);return u>0?`${u}m`:`${Math.ceil(e)}s`},Be=[{ms:1e3,name:"second"},{ms:5*1e3,name:"5seconds"},{ms:15*1e3,name:"15seconds"},{ms:30*1e3,name:"30seconds"},{ms:60*1e3,name:"minute"},{ms:300*1e3,name:"5minutes"},{ms:900*1e3,name:"15minutes"},{ms:1800*1e3,name:"30minutes"},{ms:3600*1e3,name:"hour"},{ms:10800*1e3,name:"3hours"},{ms:360*60*1e3,name:"6hours"},{ms:720*60*1e3,name:"12hours"},{ms:1440*60*1e3,name:"day"},{ms:10080*60*1e3,name:"week"},{ms:720*60*60*1e3,name:"month"}],$s=(e,t,n)=>{const a=t-e;if(a<=0)return[e];const o=a/n;let r=Be[0].ms;for(const u of Be){if(u.ms>=o){r=u.ms;break}r=u.ms}const c=Math.ceil(e/r)*r,l=[];for(let u=c;u<=t;u+=r)l.push(u);return l.length===0&&l.push(e),l},Qs=()=>e=>{const t=new Date(e),n=new Date(t);if(n.setMilliseconds(0),n.getTime()<t.getTime())return`.${t.getMilliseconds().toString().padStart(3,"0").slice(0,3)}`;const a=new Date(t);if(a.setSeconds(0,0),a.getTime()<t.getTime())return`:${t.getSeconds().toString().padStart(2,"0")}`;const o=new Date(t);if(o.setMinutes(0,0,0),o.getTime()<t.getTime())return t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"});const r=new Date(t);if(r.setHours(0,0,0,0),r.getTime()<t.getTime())return t.toLocaleTimeString(void 0,{hour:"numeric",hour12:!0});const c=new Date(t);if(c.setDate(1),c.setHours(0,0,0,0),c.getTime()<t.getTime())return t.toLocaleDateString(void 0,{weekday:"short",day:"numeric"});const l=new Date(t);return l.setMonth(0,1),l.setHours(0,0,0,0),l.getTime()<t.getTime()?t.toLocaleDateString(void 0,{month:"long"}):t.getFullYear().toString()},Ys=({cx:e,cy:t,payload:n})=>{if(e===void 0||t===void 0||!n)return null;const a=Ue(n.stateType,500)||Ve[n.stateType]||"#6b7280",o=Ue(n.stateType,600)||Ve[n.stateType]||"#6b7280";return s.jsx("circle",{cx:e,cy:t,r:8,fill:a,stroke:o,strokeWidth:1,opacity:.5,className:"hover:opacity-100 transition-opacity cursor-pointer"})},Gs=({active:e,payload:t})=>{const a=t?.[0]?.payload,o=a?.id,{data:r}=R({...vt(o??""),enabled:e&&!!o,staleTime:300*1e3}),{data:c}=R({...kt(r?.flow_id??""),enabled:!!r?.flow_id,staleTime:300*1e3});if(!e||!t||t.length===0||!a)return null;const l=new Date(a.timestamp);return s.jsxs("div",{className:"bg-background border rounded-lg p-3 shadow-lg flex flex-col gap-2 min-w-48",children:[s.jsxs("div",{className:"flex items-center gap-1 text-sm text-muted-foreground",children:[r?.flow_id&&s.jsxs(s.Fragment,{children:[s.jsx(Ee,{to:"/flows/flow/$id",params:{id:r.flow_id},className:"font-semibold hover:underline truncate max-w-32",children:c?.name??"..."}),s.jsx(yt,{className:"size-3 flex-shrink-0"})]}),s.jsx(Ee,{to:"/runs/flow-run/$id",params:{id:a.id},className:"hover:underline truncate max-w-32",children:r?.name??a.id.slice(0,8)})]}),s.jsx("div",{children:s.jsx(Ft,{type:a.stateType})}),s.jsx("hr",{className:"border-border"}),s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsxs("span",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[s.jsx(jt,{className:"size-4"}),Ct(Math.ceil(a.duration*1e3),{largest:2,round:!0})]}),s.jsxs("span",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[s.jsx(Tt,{className:"size-4"}),l.toLocaleString()]})]})]})},qs=({history:e,startDate:t,endDate:n})=>{const a=i.useMemo(()=>e.map(l=>({x:new Date(l.timestamp).getTime(),y:l.duration,stateType:l.state_type,id:l.id,duration:l.duration,lateness:l.lateness,timestamp:l.timestamp})),[e]),o=i.useMemo(()=>{if(t&&n)return[t.getTime(),n.getTime()];if(a.length===0){const d=Date.now();return[d-1440*60*1e3,d]}const l=a.map(d=>d.x),u=Math.min(...l),g=Math.max(...l);return[u,g]},[t,n,a]),r=i.useMemo(()=>Qs(),[]),c=i.useMemo(()=>$s(o[0],o[1],10),[o]);return e.length===0?null:s.jsx("div",{className:"hidden md:block w-full h-72","data-testid":"scatter-plot",children:s.jsx(gs,{width:"100%",height:"100%",children:s.jsxs(hs,{children:[s.jsx(ps,{horizontal:!0,vertical:!1,stroke:"#cacccf",strokeDasharray:""}),s.jsx(xs,{type:"number",dataKey:"x",scale:"time",domain:o,ticks:c,tickFormatter:r,tick:{fontSize:12},tickLine:!1,axisLine:{stroke:"#e5e7eb"}}),s.jsx(ws,{type:"number",dataKey:"y",tickFormatter:Ws,tick:{fontSize:12},tickLine:!1,axisLine:{stroke:"#e5e7eb"},width:60}),s.jsx(Ss,{content:s.jsx(Gs,{}),cursor:{strokeDasharray:"3 3"},animationDuration:0}),s.jsx(vs,{data:a,shape:s.jsx(Ys,{}),isAnimationActive:!1})]})})})},Xs=et({name:T().min(1,{message:"Name is required"}).max(100,{message:"Name must be 100 characters or less"})}),Ks=({open:e,onOpenChange:t,onSave:n})=>{const a=Rs({resolver:Ts(Xs),defaultValues:{name:""}});i.useEffect(()=>{e&&a.reset({name:""})},[e,a]);const o=r=>{n(r.name),t(!1)};return s.jsx(Rt,{open:e,onOpenChange:t,children:s.jsxs(bt,{children:[s.jsx(Dt,{children:s.jsx(_t,{children:"Save Filter"})}),s.jsx(Nt,{children:"Save your current filter configuration for quick access later."}),s.jsx(Ds,{...a,children:s.jsxs("form",{onSubmit:r=>{a.handleSubmit(o)(r)},className:"space-y-4",children:[s.jsx(_s,{control:a.control,name:"name",render:({field:r})=>s.jsxs(Ns,{children:[s.jsx(Es,{children:"Filter Name"}),s.jsx(As,{children:s.jsx(Et,{autoComplete:"off",placeholder:"e.g., Failed runs this week",...r})}),s.jsx(Ms,{})]})}),s.jsxs(At,{children:[s.jsx(Z,{type:"button",variant:"outline",onClick:()=>t(!1),children:"Cancel"}),s.jsx(Z,{type:"submit",children:"Save"})]})]})})]})})},Js="prefect-ui-v2-saved-filters",Zs="prefect-ui-v2-default-filter-id",st="system-past-week",at="system-hide-scheduled";function ea(e){return e===st||e===at}const nt=[{id:st,name:"Past week",filters:{range:"past-7-days"}},{id:at,name:"Hide scheduled runs",filters:{range:"past-7-days",state:[...Mt]}}],ta=nt[0];function sa(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function aa(e,t){const n=(a,o)=>{if(a===void 0&&o===void 0)return!0;if(a===void 0||o===void 0||a.length!==o.length)return!1;const r=[...a].sort(),c=[...o].sort();return r.every((l,u)=>l===c[u])};return n(e.state,t.state)&&n(e.flows,t.flows)&&n(e.deployments,t.deployments)&&n(e.workPools,t.workPools)&&n(e.tags,t.tags)&&e.range===t.range&&e.start===t.start&&e.end===t.end}function ot(){const[e,t]=ee(Js,[]),[n,a]=ee(Zs,null),o=i.useMemo(()=>[...nt,...e],[e]),r=i.useCallback(f=>{const h={id:sa(),name:f.name,filters:f.filters};return t(w=>[...w,h]),h},[t]),c=i.useCallback(f=>{t(h=>h.filter(w=>w.id!==f)),a(h=>h===f?null:h)},[t,a]),l=i.useCallback((f,h)=>{t(w=>w.map(v=>v.id===f?{...v,...h.name!==void 0&&{name:h.name},...h.filters!==void 0&&{filters:h.filters}}:v))},[t]),u=i.useCallback(f=>{a(f)},[a]),g=i.useCallback(f=>o.find(h=>h.id===f),[o]),d=i.useCallback(f=>o.find(h=>aa(h.filters,f)),[o]),m=i.useMemo(()=>f=>n===f,[n]);return{savedFilters:o,defaultFilterId:n,saveFilter:r,deleteFilter:c,updateFilter:l,setDefaultFilter:u,getFilterById:g,findMatchingFilter:d,isDefaultFilter:m}}const na=({tab:e,onTabChange:t,flowRunsCount:n,taskRunsCount:a,hasAnyFlowRuns:o,hasAnyTaskRuns:r,flowRuns:c,flowRunsPages:l,pagination:u,onPaginationChange:g,onPrefetchPage:d,sort:m,onSortChange:f,hideSubflows:h,onHideSubflowsChange:w,flowRunSearch:v,onFlowRunSearchChange:x,selectedStates:p,onStateFilterChange:y,selectedFlows:E,onFlowFilterChange:A,selectedDeployments:F,onDeploymentFilterChange:N,selectedTags:M,onTagsFilterChange:b,selectedWorkPools:ae,onWorkPoolFilterChange:ne,dateRange:oe,onDateRangeChange:re,flowRunHistory:le,scatterPlotDateRange:U,taskRuns:V,taskRunsPages:ie,taskRunsPagination:ce,onTaskRunsPaginationChange:ue,onTaskRunsPrefetchPage:P,taskRunsSort:de,onTaskRunsSortChange:me,taskRunSearch:fe,onTaskRunSearchChange:ge,onClearTaskRunFilters:he,currentFilter:H,savedFilters:pe,onSelectFilter:xe,onSaveFilter:we,onDeleteFilter:Se,onSetDefault:ve,onRemoveDefault:ke,isSaveDialogOpen:I,onCloseSaveDialog:L,onConfirmSave:ye})=>{const z=!o&&!r,[B,Fe,{onSelectRow:Ce}]=is(),[W,je,{onSelectRow:k}]=Us(),j=[...new Set(c.map(C=>C.flow_id))],{data:$}=R(Re({flows:{operator:"and_",id:{any_:j}},offset:0,sort:"NAME_ASC"},{enabled:j.length>0})),O=c.map(C=>({...C,flow:$?.find(Te=>Te.id===C.flow_id)}));return z?s.jsxs("div",{className:"flex flex-col gap-4",children:[s.jsx(We,{}),s.jsx(oa,{})]}):s.jsxs("div",{className:"flex flex-col gap-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(We,{}),s.jsx(Bs,{currentFilter:H,savedFilters:pe,onSelect:xe,onSave:we,onDelete:Se,onSetDefault:ve,onRemoveDefault:ke,permissions:{canSave:!0,canDelete:!ea(H?.id??null)}})]}),s.jsxs("div",{className:"flex flex-col gap-2",children:[s.jsxs("div",{className:"flex flex-wrap gap-2 lg:grid lg:grid-flow-col lg:auto-cols-fr",children:[s.jsxs("div",{className:"flex flex-col gap-1 w-full lg:w-auto",children:[s.jsx(D,{className:"text-xs text-muted-foreground",children:"Date Range"}),s.jsx(Ps,{value:oe,onValueChange:re})]}),s.jsxs("div",{className:"flex flex-col gap-1 w-full lg:w-auto",children:[s.jsx(D,{className:"text-xs text-muted-foreground",children:"States"}),s.jsx(os,{selectedFilters:p,onSelectFilter:y})]})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 lg:grid lg:grid-flow-col lg:auto-cols-fr",children:[s.jsxs("div",{className:"flex flex-col gap-1 w-full lg:w-auto",children:[s.jsx(D,{className:"text-xs text-muted-foreground",children:"Flows"}),s.jsx(Is,{selectedFlows:E,onSelectFlows:A})]}),s.jsxs("div",{className:"flex flex-col gap-1 w-full lg:w-auto",children:[s.jsx(D,{className:"text-xs text-muted-foreground",children:"Deployments"}),s.jsx(ss,{selectedDeployments:F,onSelectDeployments:N})]}),s.jsxs("div",{className:"flex flex-col gap-1 w-full lg:w-auto",children:[s.jsx(D,{className:"text-xs text-muted-foreground",children:"Work Pools"}),s.jsx(as,{selectedWorkPools:ae,onSelectWorkPools:ne})]}),s.jsxs("div",{className:"flex flex-col gap-1 w-full lg:w-auto",children:[s.jsx(D,{className:"text-xs text-muted-foreground",children:"Tags"}),s.jsx(js,{value:Array.from(M),onChange:C=>{const Te=Array.isArray(C)?C:[];b(new Set(Te))},placeholder:"All tags"})]})]})]}),s.jsx(Ks,{open:I,onOpenChange:L,onSave:ye}),s.jsxs(Pt,{value:e,onValueChange:t,children:[s.jsxs(It,{children:[s.jsx(Me,{value:"flow-runs",children:"Flow Runs"}),s.jsx(Me,{value:"task-runs",children:"Task Runs"})]}),s.jsx(Pe,{value:"flow-runs",children:s.jsxs("div",{className:"flex flex-col gap-4",children:[s.jsx(Lt,{children:s.jsx(zt,{children:s.jsx(qs,{history:le,startDate:U.startDate,endDate:U.endDate})})}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(cs,{count:n,results:O,selectedRows:B,setSelectedRows:Fe}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("div",{className:"flex items-center gap-2 whitespace-nowrap",children:[s.jsx(Ot,{id:"hide-subflows",checked:h,onCheckedChange:w}),s.jsx(D,{htmlFor:"hide-subflows",children:"Hide subflows"})]}),s.jsx(Ie,{value:v,onChange:C=>x(C.target.value),placeholder:"Search by flow run name","aria-label":"Search by flow run name",className:"w-64",debounceMs:1200}),s.jsx(ns,{value:m,onSelect:f})]})]}),s.jsx(rs,{count:n,pages:l,pagination:u,onChangePagination:g,onPrefetchPage:d}),s.jsx(ls,{flowRuns:O,selectedRows:B,onSelect:Ce})]})}),s.jsx(Pe,{value:"task-runs",children:s.jsxs("div",{className:"flex flex-col gap-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(zs,{count:a,results:V,selectedRows:W,setSelectedRows:je}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx(Ie,{value:fe,onChange:C=>ge(C.target.value),placeholder:"Search by task run name","aria-label":"Search by task run name",className:"w-64",debounceMs:1200}),s.jsx(ks,{value:de,onSelect:me})]})]}),s.jsx(ys,{count:a,pages:ie,pagination:ce,onChangePagination:ue,onPrefetchPage:P}),s.jsx(Fs,{taskRuns:V,selectedRows:W,onSelect:k,onClearFilters:he})]})})]})]})},We=()=>s.jsx("div",{className:"flex items-center gap-2",children:s.jsx(Ut,{children:s.jsx(Vt,{children:s.jsx(Ht,{className:"text-xl font-semibold",children:"Runs"})})})}),oa=()=>s.jsxs(Bt,{children:[s.jsx(Wt,{id:"Workflow"}),s.jsx($t,{children:"Run a task or flow to get started"}),s.jsx(Qt,{children:"Runs store the state history for each execution of a task or flow."}),s.jsx(Yt,{children:s.jsx(Gt,{id:"getting-started"})})]}),te=qe("/runs/");function ra(e){const t=l=>l?l.split(",").filter(u=>u.trim().length>0):[],n=t(e.state),a=t(e.flows),o=t(e.deployments),r=t(e["work-pools"]),c=t(e.tags);return{...n.length>0&&{state:n},...a.length>0&&{flows:a},...o.length>0&&{deployments:o},...r.length>0&&{workPools:r},...c.length>0&&{tags:c},...e.range&&{range:e.range},...e.start&&{start:e.start},...e.end&&{end:e.end}}}function rt(e){return{state:e.state?.join(",")??"",flows:e.flows?.join(",")??"",deployments:e.deployments?.join(",")??"","work-pools":e.workPools?.join(",")??"",tags:e.tags?.join(",")??"",range:e.range,start:e.start,end:e.end}}function $e(e,t){return{id:e.id,name:e.name,isDefault:e.id===t}}function la(){const e=te.useSearch(),t=te.useNavigate(),{savedFilters:n,defaultFilterId:a,saveFilter:o,deleteFilter:r,setDefaultFilter:c,findMatchingFilter:l}=ot(),[u,g]=i.useState(!1),d=i.useMemo(()=>ra(e),[e]),m=i.useMemo(()=>l(d),[l,d]),f=i.useMemo(()=>n.map(F=>$e(F,a)),[n,a]),h=i.useMemo(()=>m?$e(m,a):d.state?.length||d.flows?.length||d.deployments?.length||d.workPools?.length||d.tags?.length||d.range||d.start||d.end?{id:null,name:"Unsaved",isDefault:!1}:{id:null,name:"Custom",isDefault:!1},[m,a,d]),w=i.useCallback(F=>{const N=n.find(b=>b.id===F.id);if(!N)return;const M=rt(N.filters);t({to:".",search:b=>({...b,...M,page:1}),replace:!0})},[t,n]),v=i.useCallback(()=>{g(!0)},[]),x=i.useCallback(F=>{o({name:F,filters:d}),g(!1)},[o,d]),p=i.useCallback(()=>{g(!1)},[]),y=i.useCallback(F=>{r(F)},[r]),E=i.useCallback(F=>{c(F)},[c]),A=i.useCallback(()=>{c(null)},[c]);return{currentFilter:h,savedFiltersForMenu:f,onSelectFilter:w,onSaveFilter:v,onDeleteFilter:y,onSetDefault:E,onRemoveDefault:A,isSaveDialogOpen:u,closeSaveDialog:p,confirmSave:x}}function ia(){const e=te.useNavigate(),t=te.useSearch(),{defaultFilterId:n,getFilterById:a}=ot(),o=i.useRef(!1),r=i.useMemo(()=>!!(t.state||t.flows||t.deployments||t["work-pools"]||t.tags||t.range||t.start||t.end),[t]);i.useEffect(()=>{if(o.current||r)return;let c;n&&(c=a(n)),c||(c=ta),o.current=!0;const l=rt(c.filters);e({to:".",search:u=>({...u,...l,page:1}),replace:!0})},[n,r,a,e])}const Qe=qe("/runs/"),ca=e=>e?e.split(",").filter(t=>Je.includes(t)):[],X=e=>e?e.split(",").filter(t=>t.trim().length>0):[];function ua(){const e=Qe.useSearch(),t=Qe.useNavigate(),n=i.useMemo(()=>new Set(ca(e.state??"")),[e.state]),a=i.useMemo(()=>new Set(X(e.flows??"")),[e.flows]),o=i.useMemo(()=>new Set(X(e.deployments??"")),[e.deployments]),r=i.useMemo(()=>new Set(X(e["work-pools"]??"")),[e["work-pools"]]),c=i.useMemo(()=>new Set(X(e.tags??"")),[e.tags]),l=i.useMemo(()=>({range:e.range,start:e.start,end:e.end}),[e.range,e.start,e.end]),u=i.useCallback(x=>{const p=Array.from(x);t({to:".",search:y=>({...y,state:p.length>0?p.join(","):"",page:1}),replace:!0})},[t]),g=i.useCallback(x=>{const p=Array.from(x);t({to:".",search:y=>({...y,flows:p.length>0?p.join(","):"",page:1}),replace:!0})},[t]),d=i.useCallback(x=>{const p=Array.from(x);t({to:".",search:y=>({...y,deployments:p.length>0?p.join(","):"",page:1}),replace:!0})},[t]),m=i.useCallback(x=>{const p=Array.from(x);t({to:".",search:y=>({...y,"work-pools":p.length>0?p.join(","):"",page:1}),replace:!0})},[t]),f=i.useCallback(x=>{const p=Array.from(x);t({to:".",search:y=>({...y,tags:p.length>0?p.join(","):"",page:1}),replace:!0})},[t]),h=i.useCallback(x=>{t({to:".",search:p=>({...p,range:x.range,start:x.start,end:x.end,page:1}),replace:!0})},[t]),w=i.useMemo(()=>n.size>0||a.size>0||o.size>0||r.size>0||c.size>0||l.range!==void 0||l.start!==void 0||l.end!==void 0,[n,a,o,r,c,l]),v=i.useCallback(()=>{t({to:".",search:x=>({...x,state:"",flows:"",deployments:"","work-pools":"",tags:"",range:void 0,start:void 0,end:void 0,page:1}),replace:!0})},[t]);return{states:n,flows:a,deployments:o,workPools:r,tags:c,dateRange:l,onStatesChange:u,onFlowsChange:g,onDeploymentsChange:d,onWorkPoolsChange:m,onTagsChange:f,onDateRangeChange:h,clearAllFilters:v,hasActiveFilters:w}}et({tab:G(["flow-runs","task-runs"]).optional().default("flow-runs"),page:q().int().positive().optional().default(1).catch(1),limit:q().int().positive().optional().catch(void 0),sort:G(ts).optional().default("START_TIME_DESC"),"hide-subflows":bs().optional().default(!1),"flow-run-search":T().optional().default(""),state:T().optional().default(""),flows:T().optional().default(""),deployments:T().optional().default(""),"work-pools":T().optional().default(""),tags:T().optional().default(""),range:G(es).optional(),start:T().optional(),end:T().optional(),"task-runs-page":q().int().positive().optional().default(1).catch(1),"task-runs-limit":q().int().positive().optional().catch(void 0),"task-runs-sort":G(Zt).optional().default("EXPECTED_START_TIME_DESC"),"task-run-search":T().optional().default("")});const be=e=>e?e.split(",").filter(t=>Je.includes(t)):[],se=e=>{if(!e)return;const t={range:e.range,start:e.start,end:e.end},n=Xe(t);if(!n)return;const a=Jt(n);if(a)return{after_:a.startDate.toISOString(),before_:a.endDate.toISOString()}},De=e=>e?e.split(",").filter(t=>t.trim().length>0):[],_e=e=>e?e.split(",").filter(t=>t.trim().length>0):[],lt=e=>e?e.split(",").filter(t=>t.trim().length>0):[],Ne=e=>e?e.split(",").filter(t=>t.trim().length>0):[],Ye=e=>{const t=e?.["hide-subflows"],n=e?.["flow-run-search"],a=be(e?.state??""),o=De(e?.flows??""),r=_e(e?.deployments??""),c=lt(e?.["work-pools"]??""),l=Ne(e?.tags??""),u=se(e),g=a.length>0?a:void 0,d=o.length>0?o:void 0,m=r.length>0?r:void 0,f=c.length>0?c:void 0,w=t||n||g||d||m||l.length>0||u?{operator:"and_",...t&&{parent_task_run_id:{operator:"and_",is_null_:!0}},...n&&{name:{like_:n}},...g&&{state:{operator:"and_",name:{any_:g}}},...l.length>0&&{tags:{operator:"and_",any_:l}},...u&&{expected_start_time:u}}:void 0,v=d?{operator:"and_",id:{any_:d}}:void 0,x=m?{operator:"and_",id:{any_:m}}:void 0,p=f?{operator:"and_",name:{any_:f}}:void 0;return{page:e?.page??1,limit:e?.limit??100,sort:e?.sort??"START_TIME_DESC",flow_runs:w,flows:v,deployments:x,work_pools:p}},Ge=e=>{const t=e?.["task-run-search"],n=be(e?.state??""),a=De(e?.flows??""),o=_e(e?.deployments??""),r=Ne(e?.tags??""),c=se(e),l=t?{operator:"and_",name:{like_:t}}:void 0,u=n.length>0?n:void 0,d=u||r.length>0||c?{operator:"and_",...u&&{state:{operator:"and_",name:{any_:u}}},...r.length>0&&{tags:{operator:"and_",any_:r}},...c&&{expected_start_time:c}}:void 0,m=a.length>0?a:void 0,f=m?{operator:"and_",id:{any_:m}}:void 0,h=o.length>0?o:void 0,w=h?{operator:"and_",id:{any_:h}}:void 0;return{page:e?.["task-runs-page"]??1,limit:e?.["task-runs-limit"]??100,sort:e?.["task-runs-sort"]??"EXPECTED_START_TIME_DESC",task_runs:l,flow_runs:d,flows:f,deployments:w}},da=e=>{const t=e?.["hide-subflows"],n=be(e?.state??""),a=De(e?.flows??""),o=_e(e?.deployments??""),r=lt(e?.["work-pools"]??""),c=Ne(e?.tags??""),l=se(e),u=n.length>0?n:void 0,g=a.length>0?a:void 0,d=o.length>0?o:void 0,m=r.length>0?r:void 0;return{sort:"EXPECTED_START_TIME_DESC",limit:1e3,offset:0,flow_runs:t||u||c.length>0||l?{operator:"and_",...t&&{parent_task_run_id:{operator:"and_",is_null_:!0}},...u&&{state:{operator:"and_",name:{any_:u}}},...c.length>0&&{tags:{operator:"and_",any_:c}},...l&&{expected_start_time:l}}:void 0,flows:g?{operator:"and_",id:{any_:g}}:void 0,deployments:d?{operator:"and_",id:{any_:d}}:void 0,work_pools:m?{operator:"and_",name:{any_:m}}:void 0}},ma=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useMemo(()=>({page:e.page??1,limit:e.limit??100}),[e.page,e.limit]),a=i.useCallback(o=>{t({to:".",search:r=>({...r,page:o.page,limit:o.limit}),replace:!0})},[t]);return[n,a]},fa=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useCallback(a=>{t({to:".",search:o=>({...o,sort:a,page:1}),replace:!0})},[t]);return[e.sort,n]},ga=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useCallback(a=>{t({to:".",search:o=>({...o,"hide-subflows":a,page:1}),replace:!0})},[t]);return[e["hide-subflows"],n]},ha=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useCallback(a=>{t({to:".",search:o=>({...o,tab:a,page:1}),replace:!0})},[t]);return[e.tab,n]},pa=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useCallback(a=>{t({to:".",search:o=>({...o,"flow-run-search":a,page:1}),replace:!0})},[t]);return[e["flow-run-search"],n]},xa=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useMemo(()=>({page:e["task-runs-page"]??1,limit:e["task-runs-limit"]??100}),[e["task-runs-page"],e["task-runs-limit"]]),a=i.useCallback(o=>{t({to:".",search:r=>({...r,"task-runs-page":o.page,"task-runs-limit":o.limit}),replace:!0})},[t]);return[n,a]},wa=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useCallback(a=>{t({to:".",search:o=>({...o,"task-runs-sort":a,"task-runs-page":1}),replace:!0})},[t]);return[e["task-runs-sort"],n]},Sa=()=>{const e=S.useSearch(),t=S.useNavigate(),n=i.useCallback(a=>{t({to:".",search:o=>({...o,"task-run-search":a,"task-runs-page":1}),replace:!0})},[t]);return[e["task-run-search"],n]};function Oa(){const e=it(),t=S.useSearch(),n=S.useNavigate(),[a,o]=ee("workspace-flow-runs-list-limit",100),[r,c]=ee("workspace-task-runs-list-limit",100),l=i.useRef(!1);i.useEffect(()=>{if(l.current)return;l.current=!0;const k=t.limit===void 0,j=t["task-runs-limit"]===void 0;(k||j)&&n({to:".",search:$=>({...$,...k&&{limit:a},...j&&{"task-runs-limit":r}}),replace:!0})},[n,t.limit,t["task-runs-limit"],a,r]),i.useEffect(()=>{t.limit!==void 0&&t.limit!==a&&o(t.limit)},[t.limit,a,o]),i.useEffect(()=>{t["task-runs-limit"]!==void 0&&t["task-runs-limit"]!==r&&c(t["task-runs-limit"])},[t["task-runs-limit"],r,c]);const[u,g]=ma(),[d,m]=fa(),[f,h]=ga(),[w,v]=ha(),[x,p]=pa(),{states:y,flows:E,deployments:A,workPools:F,tags:N,dateRange:M,onStatesChange:b,onFlowsChange:ae,onDeploymentsChange:ne,onWorkPoolsChange:oe,onTagsChange:re,onDateRangeChange:le}=ua(),[U,V]=xa(),[ie,ce]=wa(),[ue,P]=Sa(),{currentFilter:de,savedFiltersForMenu:me,onSelectFilter:fe,onSaveFilter:ge,onDeleteFilter:he,onSetDefault:H,onRemoveDefault:pe,isSaveDialogOpen:xe,closeSaveDialog:we,confirmSave:Se}=la();ia();const[{data:ve},{data:ke}]=ct({queries:[qt(),Xt()]}),{data:I}=R(Le(Ye(t),3e4)),{data:L}=R(ze(Ge(t),3e4)),{data:ye}=R(Kt(da(t),3e4)),z=I?.results??[],B=L?.results??[],Fe=i.useMemo(()=>{const k=se(t);return{startDate:k?.after_?new Date(k.after_):void 0,endDate:k?.before_?new Date(k.before_):void 0}},[t]);i.useEffect(()=>{const k=z.map(j=>j.id);k.length>0&&e.prefetchQuery(Oe(k))},[e,z]);const Ce=i.useCallback(k=>{const j=Ye({...t,page:k});(async()=>{const O=(await e.ensureQueryData(Le(j,3e4)))?.results?.map(C=>C.id)??[];O.length>0&&e.prefetchQuery(Oe(O))})()},[e,t]),W=i.useCallback(k=>{const j=Ge({...t,"task-runs-page":k});e.prefetchQuery(ze(j,3e4))},[e,t]),je=i.useCallback(()=>{P("")},[P]);return s.jsx(na,{tab:w,onTabChange:v,flowRunsCount:I?.count??0,taskRunsCount:L?.count??0,hasAnyFlowRuns:(ve??0)>0,hasAnyTaskRuns:(ke??0)>0,flowRuns:z,flowRunsPages:I?.pages??0,pagination:u,onPaginationChange:g,onPrefetchPage:Ce,sort:d,onSortChange:m,hideSubflows:f,onHideSubflowsChange:h,flowRunSearch:x,onFlowRunSearchChange:p,selectedStates:y,onStateFilterChange:b,selectedFlows:E,onFlowFilterChange:ae,selectedDeployments:A,onDeploymentFilterChange:ne,selectedTags:N,onTagsFilterChange:re,selectedWorkPools:F,onWorkPoolFilterChange:oe,dateRange:M,onDateRangeChange:le,flowRunHistory:ye??[],scatterPlotDateRange:Fe,taskRuns:B,taskRunsPages:L?.pages??0,taskRunsPagination:U,onTaskRunsPaginationChange:V,onTaskRunsPrefetchPage:W,taskRunsSort:ie,onTaskRunsSortChange:ce,taskRunSearch:ue,onTaskRunSearchChange:P,onClearTaskRunFilters:je,currentFilter:de,savedFilters:me,onSelectFilter:fe,onSaveFilter:ge,onDeleteFilter:he,onSetDefault:H,onRemoveDefault:pe,isSaveDialogOpen:xe,onCloseSaveDialog:we,onConfirmSave:Se})}export{Oa as component};
|
|
2
|
-
//# sourceMappingURL=index-DiVKp6rW.js.map
|