prefect 3.6.15__py3-none-any.whl → 3.6.16.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- prefect/__init__.py +20 -0
- prefect/_build_info.py +3 -3
- prefect/_internal/analytics/__init__.py +80 -0
- prefect/_internal/analytics/_config.py +2 -0
- prefect/_internal/analytics/ci_detection.py +39 -0
- prefect/_internal/analytics/client.py +132 -0
- prefect/_internal/analytics/device_id.py +55 -0
- prefect/_internal/analytics/emit.py +90 -0
- prefect/_internal/analytics/enabled.py +33 -0
- prefect/_internal/analytics/events.py +14 -0
- prefect/_internal/analytics/milestones.py +177 -0
- prefect/_internal/analytics/notice.py +60 -0
- prefect/_internal/analytics/service.py +238 -0
- prefect/analytics/__init__.py +67 -0
- prefect/deployments/runner.py +20 -0
- prefect/flow_engine.py +16 -0
- prefect/flows.py +8 -0
- prefect/server/ui-v2/assets/{artifact-card-BBzQR-Cj.js → artifact-card-BclosG8t.js} +2 -2
- prefect/server/ui-v2/assets/{artifact-card-BBzQR-Cj.js.map → artifact-card-BclosG8t.js.map} +1 -1
- prefect/server/ui-v2/assets/artifact._id-C0r4BJr2.js +2 -0
- prefect/server/ui-v2/assets/artifact._id-C0r4BJr2.js.map +1 -0
- prefect/server/ui-v2/assets/{automation-wizard-EYSfXlQ7.js → automation-wizard-Bmgt6nn8.js} +2 -2
- prefect/server/ui-v2/assets/{automation-wizard-EYSfXlQ7.js.map → automation-wizard-Bmgt6nn8.js.map} +1 -1
- prefect/server/ui-v2/assets/automation._id-Ccke3KJz.js +2 -0
- prefect/server/ui-v2/assets/{automation._id-Dn7jABys.js.map → automation._id-Ccke3KJz.js.map} +1 -1
- prefect/server/ui-v2/assets/{automation_._id.edit-COrqswD3.js → automation_._id.edit-BlKPUTVf.js} +2 -2
- prefect/server/ui-v2/assets/{automation_._id.edit-COrqswD3.js.map → automation_._id.edit-BlKPUTVf.js.map} +1 -1
- prefect/server/ui-v2/assets/{automations-header-DN_dmMXW.js → automations-header-Df2zw3SC.js} +2 -2
- prefect/server/ui-v2/assets/{automations-header-DN_dmMXW.js.map → automations-header-Df2zw3SC.js.map} +1 -1
- prefect/server/ui-v2/assets/{base-job-template-form-section-De2ACYbw.js → base-job-template-form-section-oZD6U-RW.js} +2 -2
- prefect/server/ui-v2/assets/{base-job-template-form-section-De2ACYbw.js.map → base-job-template-form-section-oZD6U-RW.js.map} +1 -1
- prefect/server/ui-v2/assets/{block-type-details-Cklc7TkK.js → block-type-details-CYrdaLot.js} +2 -2
- prefect/server/ui-v2/assets/{block-type-details-Cklc7TkK.js.map → block-type-details-CYrdaLot.js.map} +1 -1
- prefect/server/ui-v2/assets/block-type-logo-CyAWq7mC.js +2 -0
- prefect/server/ui-v2/assets/block-type-logo-CyAWq7mC.js.map +1 -0
- prefect/server/ui-v2/assets/{block._id-tuz1Bcj2.js → block._id-CBgHrpTP.js} +2 -2
- prefect/server/ui-v2/assets/{block._id-tuz1Bcj2.js.map → block._id-CBgHrpTP.js.map} +1 -1
- prefect/server/ui-v2/assets/{block_._id.edit-CFEYhF5R.js → block_._id.edit-CW-kdi4O.js} +2 -2
- prefect/server/ui-v2/assets/{block_._id.edit-CFEYhF5R.js.map → block_._id.edit-CW-kdi4O.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog-CCPRo7nY.js → catalog-Brh0kn1I.js} +2 -2
- prefect/server/ui-v2/assets/{catalog-CCPRo7nY.js.map → catalog-Brh0kn1I.js.map} +1 -1
- prefect/server/ui-v2/assets/catalog_._slug-MCgzguIZ.js +2 -0
- prefect/server/ui-v2/assets/{catalog_._slug-Bl2J2oI3.js.map → catalog_._slug-MCgzguIZ.js.map} +1 -1
- prefect/server/ui-v2/assets/{catalog_._slug_.create-9UD_SxDN.js → catalog_._slug_.create-DBaeHi9Q.js} +2 -2
- prefect/server/ui-v2/assets/{catalog_._slug_.create-9UD_SxDN.js.map → catalog_._slug_.create-DBaeHi9Q.js.map} +1 -1
- prefect/server/ui-v2/assets/{collapsible-BVQTBG_U.js → collapsible-B_NJS0uJ.js} +2 -2
- prefect/server/ui-v2/assets/{collapsible-BVQTBG_U.js.map → collapsible-B_NJS0uJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{concurrency-limit._id-CsgRxA0a.js → concurrency-limit._id-qzNUQzQa.js} +2 -2
- prefect/server/ui-v2/assets/{concurrency-limit._id-CsgRxA0a.js.map → concurrency-limit._id-qzNUQzQa.js.map} +1 -1
- prefect/server/ui-v2/assets/create-BwXG6EIb.js +2 -0
- prefect/server/ui-v2/assets/{create-D--LHaji.js.map → create-BwXG6EIb.js.map} +1 -1
- prefect/server/ui-v2/assets/{create-BycfZHGQ.js → create-MoiIE9Ms.js} +2 -2
- prefect/server/ui-v2/assets/{create-BycfZHGQ.js.map → create-MoiIE9Ms.js.map} +1 -1
- prefect/server/ui-v2/assets/data-table-CPkppyg6.js +2 -0
- prefect/server/ui-v2/assets/data-table-CPkppyg6.js.map +1 -0
- prefect/server/ui-v2/assets/delete-confirmation-dialog-CwDK_2QS.js +2 -0
- prefect/server/ui-v2/assets/{delete-confirmation-dialog-DHkm2p8m.js.map → delete-confirmation-dialog-CwDK_2QS.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-action-header-D5GOooPm.js → deployment-action-header-Vp9YsCJO.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-action-header-D5GOooPm.js.map → deployment-action-header-Vp9YsCJO.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js → deployment-form-CJcg_6DJ.js} +3 -3
- prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js.map → deployment-form-CJcg_6DJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js → deployment-links-CIkJIuHh.js} +2 -2
- prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js.map → deployment-links-CIkJIuHh.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment._id-C6XrGMp_.js +2 -0
- prefect/server/ui-v2/assets/{deployment._id-Ci9zge5n.js.map → deployment._id-C6XrGMp_.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment._id-whsGcHdu.js → deployment._id-CWgTYmTG.js} +2 -2
- prefect/server/ui-v2/assets/{deployment._id-whsGcHdu.js.map → deployment._id-CWgTYmTG.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.duplicate-Bg0s0ZJn.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.duplicate-D9ZWkh8H.js.map → deployment_._id.duplicate-Bg0s0ZJn.js.map} +1 -1
- prefect/server/ui-v2/assets/deployment_._id.edit-CnoB0UeG.js +2 -0
- prefect/server/ui-v2/assets/{deployment_._id.edit-CS7sObzC.js.map → deployment_._id.edit-CnoB0UeG.js.map} +1 -1
- prefect/server/ui-v2/assets/{deployment_._id.run-g7SZuDFi.js → deployment_._id.run-BqPK6rTB.js} +2 -2
- prefect/server/ui-v2/assets/{deployment_._id.run-g7SZuDFi.js.map → deployment_._id.run-BqPK6rTB.js.map} +1 -1
- prefect/server/ui-v2/assets/{dropdown-menu-0atiOSFo.js → dropdown-menu-D7Gwbd15.js} +2 -2
- prefect/server/ui-v2/assets/{dropdown-menu-0atiOSFo.js.map → dropdown-menu-D7Gwbd15.js.map} +1 -1
- prefect/server/ui-v2/assets/{event-resource-display-DHiAb1Up.js → event-resource-display-CDRgVKd4.js} +2 -2
- prefect/server/ui-v2/assets/{event-resource-display-DHiAb1Up.js.map → event-resource-display-CDRgVKd4.js.map} +1 -1
- prefect/server/ui-v2/assets/event._eventDate._eventId-C73GMDkK.js +2 -0
- prefect/server/ui-v2/assets/{event._eventDate._eventId-D7Twzb22.js.map → event._eventDate._eventId-C73GMDkK.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run-graph-BhzuSJLm.js → flow-run-graph-ckiE3mA9.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run-graph-BhzuSJLm.js.map → flow-run-graph-ckiE3mA9.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run._id-CqpH6bvx.js → flow-run._id-BukrNCAq.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-CqpH6bvx.js.map → flow-run._id-BukrNCAq.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-run._id-lIIQBD7H.js → flow-run._id-CtI5VZ2M.js} +2 -2
- prefect/server/ui-v2/assets/{flow-run._id-lIIQBD7H.js.map → flow-run._id-CtI5VZ2M.js.map} +1 -1
- prefect/server/ui-v2/assets/flow-run._id-s1UJuakA.js +4 -0
- prefect/server/ui-v2/assets/{flow-run._id-RLy2kBh0.js.map → flow-run._id-s1UJuakA.js.map} +1 -1
- prefect/server/ui-v2/assets/{flow-runs-pagination-BATUweRV.js → flow-runs-pagination-SLbYtvaR.js} +2 -2
- prefect/server/ui-v2/assets/{flow-runs-pagination-BATUweRV.js.map → flow-runs-pagination-SLbYtvaR.js.map} +1 -1
- prefect/server/ui-v2/assets/flow._id-CZ5P0v4N.js +2 -0
- prefect/server/ui-v2/assets/{flow._id-BdQGWPKP.js.map → flow._id-CZ5P0v4N.js.map} +1 -1
- prefect/server/ui-v2/assets/{form-DLrbC7rV.js → form-mws4law8.js} +2 -2
- prefect/server/ui-v2/assets/{form-DLrbC7rV.js.map → form-mws4law8.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-BTAWyeXv.js → header-Bes1LmY7.js} +2 -2
- prefect/server/ui-v2/assets/{header-BTAWyeXv.js.map → header-Bes1LmY7.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-ChFAx5uR.js → header-Bj_zBR-a.js} +2 -2
- prefect/server/ui-v2/assets/{header-ChFAx5uR.js.map → header-Bj_zBR-a.js.map} +1 -1
- prefect/server/ui-v2/assets/{header-CyQqOj1w.js → header-CPxTHSvz.js} +2 -2
- prefect/server/ui-v2/assets/{header-CyQqOj1w.js.map → header-CPxTHSvz.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-m48E4KcG.js → index-B8vo2Lrg.js} +5 -5
- prefect/server/ui-v2/assets/{index-m48E4KcG.js.map → index-B8vo2Lrg.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-D5RT-SAp.js → index-BBeh-3Nh.js} +2 -2
- prefect/server/ui-v2/assets/{index-D5RT-SAp.js.map → index-BBeh-3Nh.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BLnEvHia.js +2 -0
- prefect/server/ui-v2/assets/{index-7i4X9TeK.js.map → index-BLnEvHia.js.map} +1 -1
- prefect/server/ui-v2/assets/index-BpKoubXu.js +2 -0
- prefect/server/ui-v2/assets/index-BpKoubXu.js.map +1 -0
- prefect/server/ui-v2/assets/index-By6YGqR3.js +2 -0
- prefect/server/ui-v2/assets/index-By6YGqR3.js.map +1 -0
- prefect/server/ui-v2/assets/index-CEi3BlKI.js +2 -0
- prefect/server/ui-v2/assets/index-CEi3BlKI.js.map +1 -0
- prefect/server/ui-v2/assets/{index-BaWDC4da.js → index-CS-zxv7Z.js} +2 -2
- prefect/server/ui-v2/assets/{index-BaWDC4da.js.map → index-CS-zxv7Z.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-kP_I5Qfd.js → index-CToHKh4q.js} +2 -2
- prefect/server/ui-v2/assets/{index-kP_I5Qfd.js.map → index-CToHKh4q.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CKGj5lSu.js → index-CUVvZndW.js} +2 -2
- prefect/server/ui-v2/assets/{index-CKGj5lSu.js.map → index-CUVvZndW.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CxUfZRkN.js → index-CYVn-I3i.js} +2 -2
- prefect/server/ui-v2/assets/{index-CxUfZRkN.js.map → index-CYVn-I3i.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CnlN-VC_.js → index-Cun0JN4t.js} +2 -2
- prefect/server/ui-v2/assets/{index-CnlN-VC_.js.map → index-Cun0JN4t.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-BwCLKpNb.js → index-D6ynV6U7.js} +2 -2
- prefect/server/ui-v2/assets/{index-BwCLKpNb.js.map → index-D6ynV6U7.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CHf6xi9j.js → index-DdNUJLRW.js} +2 -2
- prefect/server/ui-v2/assets/{index-CHf6xi9j.js.map → index-DdNUJLRW.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-CQnWiUE5.js → index-DlHOXQhu.js} +2 -2
- prefect/server/ui-v2/assets/{index-CQnWiUE5.js.map → index-DlHOXQhu.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Eqdr6Ff7.js → index-DyVw8YE8.js} +2 -2
- prefect/server/ui-v2/assets/{index-Eqdr6Ff7.js.map → index-DyVw8YE8.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-Btb_-PDp.js → index-DzRz7D2P.js} +2 -2
- prefect/server/ui-v2/assets/{index-Btb_-PDp.js.map → index-DzRz7D2P.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DQGif3jm.js → index-DzUcVNZg.js} +2 -2
- prefect/server/ui-v2/assets/{index-DQGif3jm.js.map → index-DzUcVNZg.js.map} +1 -1
- prefect/server/ui-v2/assets/{index-DNh9ZBy4.js → index-IBvMMs6S.js} +2 -2
- prefect/server/ui-v2/assets/{index-DNh9ZBy4.js.map → index-IBvMMs6S.js.map} +1 -1
- prefect/server/ui-v2/assets/index-_kpA__te.js +2 -0
- prefect/server/ui-v2/assets/{index-CiSFHkhI.js.map → index-_kpA__te.js.map} +1 -1
- prefect/server/ui-v2/assets/index-m9O-nIOl.css +1 -0
- prefect/server/ui-v2/assets/{index-lyQav_XM.js → index-wOvyf10b.js} +2 -2
- prefect/server/ui-v2/assets/{index-lyQav_XM.js.map → index-wOvyf10b.js.map} +1 -1
- prefect/server/ui-v2/assets/{json-input-Ba-BeBcw.js → json-input-Ce-HlRqa.js} +2 -2
- prefect/server/ui-v2/assets/{json-input-Ba-BeBcw.js.map → json-input-Ce-HlRqa.js.map} +1 -1
- prefect/server/ui-v2/assets/{key-value-DkSKn6jE.js → key-value-XHEZOtZX.js} +2 -2
- prefect/server/ui-v2/assets/{key-value-DkSKn6jE.js.map → key-value-XHEZOtZX.js.map} +1 -1
- prefect/server/ui-v2/assets/{key._key-Cjx57ymg.js → key._key-LpsMf3zD.js} +2 -2
- prefect/server/ui-v2/assets/{key._key-Cjx57ymg.js.map → key._key-LpsMf3zD.js.map} +1 -1
- prefect/server/ui-v2/assets/{lazy-markdown-Du2Xu3Yp.js → lazy-markdown-1Hz0xzca.js} +2 -2
- prefect/server/ui-v2/assets/{lazy-markdown-Du2Xu3Yp.js.map → lazy-markdown-1Hz0xzca.js.map} +1 -1
- prefect/server/ui-v2/assets/{login-DxMF9Jvj.js → login-D5uepl9L.js} +2 -2
- prefect/server/ui-v2/assets/{login-DxMF9Jvj.js.map → login-D5uepl9L.js.map} +1 -1
- prefect/server/ui-v2/assets/{markdown-input-DPi8zyRr.js → markdown-input-CG6M9zD0.js} +2 -2
- prefect/server/ui-v2/assets/{markdown-input-DPi8zyRr.js.map → markdown-input-CG6M9zD0.js.map} +1 -1
- prefect/server/ui-v2/assets/python-example-snippet-DRHcUlCX.js +3 -0
- prefect/server/ui-v2/assets/{python-example-snippet-DfCFYPN_.js.map → python-example-snippet-DRHcUlCX.js.map} +1 -1
- prefect/server/ui-v2/assets/{python-input-mr6GD840.js → python-input-BsUS8fw1.js} +2 -2
- prefect/server/ui-v2/assets/{python-input-mr6GD840.js.map → python-input-BsUS8fw1.js.map} +1 -1
- prefect/server/ui-v2/assets/{radio-group-Co3cN0Kv.js → radio-group-BUsmwdrt.js} +2 -2
- prefect/server/ui-v2/assets/{radio-group-Co3cN0Kv.js.map → radio-group-BUsmwdrt.js.map} +1 -1
- prefect/server/ui-v2/assets/{route-error-state-DnBaNT2T.js → route-error-state-BFBpiIhD.js} +2 -2
- prefect/server/ui-v2/assets/{route-error-state-DnBaNT2T.js.map → route-error-state-BFBpiIhD.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-CWDHSME9.js → schema-form-BwTmkvJk.js} +2 -2
- prefect/server/ui-v2/assets/{schema-form-CWDHSME9.js.map → schema-form-BwTmkvJk.js.map} +1 -1
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BSWlW_aQ.js → schema-form-input-string-format-datetime-nrb3g-JJ.js} +4 -4
- prefect/server/ui-v2/assets/{schema-form-input-string-format-datetime-BSWlW_aQ.js.map → schema-form-input-string-format-datetime-nrb3g-JJ.js.map} +1 -1
- prefect/server/ui-v2/assets/{settings-DU5y6tJE.js → settings-CUBtK5aW.js} +2 -2
- prefect/server/ui-v2/assets/{settings-DU5y6tJE.js.map → settings-CUBtK5aW.js.map} +1 -1
- prefect/server/ui-v2/assets/{sort-filter-DpuWNkQo.js → sort-filter-Cv8zAXMp.js} +2 -2
- prefect/server/ui-v2/assets/{sort-filter-DpuWNkQo.js.map → sort-filter-Cv8zAXMp.js.map} +1 -1
- prefect/server/ui-v2/assets/{table-bBL6C0ZK.js → table-BBNGfPra.js} +2 -2
- prefect/server/ui-v2/assets/{table-bBL6C0ZK.js.map → table-BBNGfPra.js.map} +1 -1
- prefect/server/ui-v2/assets/{tags-input-BLPMVWpZ.js → tags-input-DHrnkwjQ.js} +2 -2
- prefect/server/ui-v2/assets/{tags-input-BLPMVWpZ.js.map → tags-input-DHrnkwjQ.js.map} +1 -1
- prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js +2 -0
- prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-S69sih55.js.map → task-run-concurrency-limits-reset-dialog-Z8-yFZ2_.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-Dl3Azs8t.js → task-run._id-BY58gqs2.js} +2 -2
- prefect/server/ui-v2/assets/{task-run._id-Dl3Azs8t.js.map → task-run._id-BY58gqs2.js.map} +1 -1
- prefect/server/ui-v2/assets/{task-run._id-B_tIDm4K.js → task-run._id-u73Jxfqw.js} +3 -3
- prefect/server/ui-v2/assets/{task-run._id-B_tIDm4K.js.map → task-run._id-u73Jxfqw.js.map} +1 -1
- prefect/server/ui-v2/assets/task-runs-pagination-DUy3147A.js +2 -0
- prefect/server/ui-v2/assets/{task-runs-pagination-VdR-LO4r.js.map → task-runs-pagination-DUy3147A.js.map} +1 -1
- prefect/server/ui-v2/assets/{textarea-B3_TtPRi.js → textarea-DUhh6-kq.js} +2 -2
- prefect/server/ui-v2/assets/{textarea-B3_TtPRi.js.map → textarea-DUhh6-kq.js.map} +1 -1
- prefect/server/ui-v2/assets/timezone-select-D4Q6VBtD.js +2 -0
- prefect/server/ui-v2/assets/{timezone-select-BuPYznge.js.map → timezone-select-D4Q6VBtD.js.map} +1 -1
- prefect/server/ui-v2/assets/{toggle-group-Cn07UIim.js → toggle-group-7WUJn2Tx.js} +2 -2
- prefect/server/ui-v2/assets/{toggle-group-Cn07UIim.js.map → toggle-group-7WUJn2Tx.js.map} +1 -1
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-D4AD5Ndf.js +2 -0
- prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-DpdsLH4t.js.map → use-delete-automation-confirmation-dialog-D4AD5Ndf.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-Cq5nGhzr.js → use-delete-block-document-confirmation-dialog-DnwWEGUY.js} +2 -2
- prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-Cq5nGhzr.js.map → use-delete-block-document-confirmation-dialog-DnwWEGUY.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DmQSWBTu.js → use-flow-runs-selected-rows-C-tehPRB.js} +2 -2
- prefect/server/ui-v2/assets/{use-flow-runs-selected-rows-DmQSWBTu.js.map → use-flow-runs-selected-rows-C-tehPRB.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DTwcWiqW.js → use-get-artifacts-flow-task-runs-DRWRrmrb.js} +2 -2
- prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DTwcWiqW.js.map → use-get-artifacts-flow-task-runs-DRWRrmrb.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-quick-run-CPempwLh.js → use-quick-run-B4Xj-YQQ.js} +2 -2
- prefect/server/ui-v2/assets/{use-quick-run-CPempwLh.js.map → use-quick-run-B4Xj-YQQ.js.map} +1 -1
- prefect/server/ui-v2/assets/use-state-favicon-au2TZdMV.js +2 -0
- prefect/server/ui-v2/assets/{use-state-favicon-M09DmrNy.js.map → use-state-favicon-au2TZdMV.js.map} +1 -1
- prefect/server/ui-v2/assets/{use-stepper-CDucnvzp.js → use-stepper-DyIb3vlq.js} +2 -2
- prefect/server/ui-v2/assets/{use-stepper-CDucnvzp.js.map → use-stepper-DyIb3vlq.js.map} +1 -1
- prefect/server/ui-v2/assets/{utilities-BRCNRcQl.js → utilities-D9Y2wo66.js} +2 -2
- prefect/server/ui-v2/assets/{utilities-BRCNRcQl.js.map → utilities-D9Y2wo66.js.map} +1 -1
- prefect/server/ui-v2/assets/vendor-recharts-BvvJP9Po.js +34 -0
- prefect/server/ui-v2/assets/vendor-recharts-BvvJP9Po.js.map +1 -0
- prefect/server/ui-v2/assets/{work-pool-filter-C2tpSS-w.js → work-pool-filter-CSOATj2D.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool-filter-C2tpSS-w.js.map → work-pool-filter-CSOATj2D.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool-queue-toggle-Dh7B1zMo.js +2 -0
- prefect/server/ui-v2/assets/{work-pool-queue-toggle-BQ9b-Wxy.js.map → work-pool-queue-toggle-Dh7B1zMo.js.map} +1 -1
- prefect/server/ui-v2/assets/work-pool._workPoolName-B_NFWXKS.js +2 -0
- prefect/server/ui-v2/assets/{work-pool._workPoolName-C_LiL3SE.js.map → work-pool._workPoolName-B_NFWXKS.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DBHlrVVx.js → work-pool_._workPoolName.edit-Cyzn8g-S.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DBHlrVVx.js.map → work-pool_._workPoolName.edit-Cyzn8g-S.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DkITxJOP.js → work-pool_._workPoolName.queue._workQueueName-DQzqQWPT.js} +2 -2
- prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DkITxJOP.js.map → work-pool_._workPoolName.queue._workQueueName-DQzqQWPT.js.map} +1 -1
- prefect/server/ui-v2/assets/{work-queue-icon-text-D4BWBVDN.js → work-queue-icon-text-BOpcJ8YU.js} +2 -2
- prefect/server/ui-v2/assets/{work-queue-icon-text-D4BWBVDN.js.map → work-queue-icon-text-BOpcJ8YU.js.map} +1 -1
- prefect/server/ui-v2/index.html +3 -3
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev2.dist-info}/METADATA +2 -1
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev2.dist-info}/RECORD +222 -210
- prefect/server/ui-v2/assets/artifact._id-BFdf1WUA.js +0 -2
- prefect/server/ui-v2/assets/artifact._id-BFdf1WUA.js.map +0 -1
- prefect/server/ui-v2/assets/automation._id-Dn7jABys.js +0 -2
- prefect/server/ui-v2/assets/block-type-logo-Cbpfxded.js +0 -2
- prefect/server/ui-v2/assets/block-type-logo-Cbpfxded.js.map +0 -1
- prefect/server/ui-v2/assets/catalog_._slug-Bl2J2oI3.js +0 -2
- prefect/server/ui-v2/assets/create-D--LHaji.js +0 -2
- prefect/server/ui-v2/assets/data-table-rlbkLcrY.js +0 -2
- prefect/server/ui-v2/assets/data-table-rlbkLcrY.js.map +0 -1
- prefect/server/ui-v2/assets/delete-confirmation-dialog-DHkm2p8m.js +0 -2
- prefect/server/ui-v2/assets/deployment._id-Ci9zge5n.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.duplicate-D9ZWkh8H.js +0 -2
- prefect/server/ui-v2/assets/deployment_._id.edit-CS7sObzC.js +0 -2
- prefect/server/ui-v2/assets/event._eventDate._eventId-D7Twzb22.js +0 -2
- prefect/server/ui-v2/assets/flow-run._id-RLy2kBh0.js +0 -4
- prefect/server/ui-v2/assets/flow._id-BdQGWPKP.js +0 -2
- prefect/server/ui-v2/assets/index-7i4X9TeK.js +0 -2
- prefect/server/ui-v2/assets/index-BkiGTHwU.js +0 -2
- prefect/server/ui-v2/assets/index-BkiGTHwU.js.map +0 -1
- prefect/server/ui-v2/assets/index-COouj_0-.css +0 -1
- prefect/server/ui-v2/assets/index-CiSFHkhI.js +0 -2
- prefect/server/ui-v2/assets/index-DATPYZfT.js +0 -2
- prefect/server/ui-v2/assets/index-DATPYZfT.js.map +0 -1
- prefect/server/ui-v2/assets/index-VH4TnZ4e.js +0 -2
- prefect/server/ui-v2/assets/index-VH4TnZ4e.js.map +0 -1
- prefect/server/ui-v2/assets/python-example-snippet-DfCFYPN_.js +0 -3
- prefect/server/ui-v2/assets/task-run-concurrency-limits-reset-dialog-S69sih55.js +0 -2
- prefect/server/ui-v2/assets/task-runs-pagination-VdR-LO4r.js +0 -2
- prefect/server/ui-v2/assets/timezone-select-BuPYznge.js +0 -2
- prefect/server/ui-v2/assets/use-delete-automation-confirmation-dialog-DpdsLH4t.js +0 -2
- prefect/server/ui-v2/assets/use-state-favicon-M09DmrNy.js +0 -2
- prefect/server/ui-v2/assets/vendor-recharts-BAN776s_.js +0 -34
- prefect/server/ui-v2/assets/vendor-recharts-BAN776s_.js.map +0 -1
- prefect/server/ui-v2/assets/work-pool-queue-toggle-BQ9b-Wxy.js +0 -2
- prefect/server/ui-v2/assets/work-pool._workPoolName-C_LiL3SE.js +0 -2
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev2.dist-info}/WHEEL +0 -0
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev2.dist-info}/entry_points.txt +0 -0
- {prefect-3.6.15.dist-info → prefect-3.6.16.dev2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-CPkppyg6.js","sources":["../../src/components/ui/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport {\n\tPagination,\n\tPaginationContent,\n\tPaginationFirstButton,\n\tPaginationItem,\n\tPaginationLastButton,\n\tPaginationNextButton,\n\tPaginationPreviousButton,\n} from \"@/components/ui/pagination\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\nimport { cn } from \"@/utils\";\n\nexport function DataTable<TData>({\n\ttable,\n\tonPrefetchPage,\n}: {\n\ttable: TanstackTable<TData>;\n\tonPrefetchPage?: (page: number) => void;\n}) {\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div className=\"rounded-md border overflow-hidden\">\n\t\t\t\t<Table>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t\t\t<TableRow key={headerGroup.id}>\n\t\t\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t...(header.column.columnDef.maxSize && {\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${header.column.columnDef.maxSize}px`,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t...(header.column.columnDef.size && {\n\t\t\t\t\t\t\t\t\t\t\t\twidth: `${header.column.columnDef.size}px`,\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{header.isPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{table.getRowModel().rows?.length ? (\n\t\t\t\t\t\t\ttable.getRowModel().rows.map((row) => (\n\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t...(cell.column.columnDef.maxSize && {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: `${cell.column.columnDef.maxSize}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t...(cell.column.columnDef.size && {\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: `${cell.column.columnDef.size}px`,\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tcolSpan={table.getAllColumns().length}\n\t\t\t\t\t\t\t\t\tclassName=\"h-24 text-center\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-row justify-between items-center\">\n\t\t\t\t<DataTablePageSize table={table} />\n\t\t\t\t<DataTablePagination table={table} onPrefetchPage={onPrefetchPage} />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\ninterface DataTablePageSizeProps<TData> {\n\ttable: TanstackTable<TData>;\n}\n\nfunction DataTablePageSize<TData>({ table }: DataTablePageSizeProps<TData>) {\n\treturn (\n\t\t<div className=\"flex flex-row items-center gap-2 text-xs text-muted-foreground\">\n\t\t\t<span className=\"whitespace-nowrap\">Items per page</span>\n\t\t\t<Select\n\t\t\t\tvalue={table.getState().pagination.pageSize.toString()}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\ttable.setPageSize(Number(value));\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<SelectTrigger aria-label=\"Items per page\">\n\t\t\t\t\t<SelectValue placeholder=\"Theme\" />\n\t\t\t\t</SelectTrigger>\n\t\t\t\t<SelectContent>\n\t\t\t\t\t<SelectItem value=\"5\">5</SelectItem>\n\t\t\t\t\t<SelectItem value=\"10\">10</SelectItem>\n\t\t\t\t\t<SelectItem value=\"25\">25</SelectItem>\n\t\t\t\t\t<SelectItem value=\"50\">50</SelectItem>\n\t\t\t\t</SelectContent>\n\t\t\t</Select>\n\t\t</div>\n\t);\n}\n\ninterface DataTablePaginationProps<TData> {\n\ttable: TanstackTable<TData>;\n\tclassName?: string;\n\tonPrefetchPage?: (page: number) => void;\n}\n\nexport function DataTablePagination<TData>({\n\ttable,\n\tclassName,\n\tonPrefetchPage,\n}: DataTablePaginationProps<TData>) {\n\tconst totalPages = table.getPageCount();\n\tconst currentPage = Math.min(\n\t\tMath.ceil(table.getState().pagination.pageIndex + 1),\n\t\ttotalPages,\n\t);\n\n\tconst handlePrefetchFirstPage = () => {\n\t\tif (currentPage > 1) onPrefetchPage?.(1);\n\t};\n\tconst handlePrefetchPreviousPage = () => {\n\t\tif (currentPage > 1) onPrefetchPage?.(currentPage - 1);\n\t};\n\tconst handlePrefetchNextPage = () => {\n\t\tif (currentPage < totalPages) onPrefetchPage?.(currentPage + 1);\n\t};\n\tconst handlePrefetchLastPage = () => {\n\t\tif (currentPage < totalPages) onPrefetchPage?.(totalPages);\n\t};\n\n\treturn (\n\t\t<Pagination className={cn(\"justify-end\", className)}>\n\t\t\t<PaginationContent>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationFirstButton\n\t\t\t\t\t\tonClick={() => table.firstPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchFirstPage}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t/>\n\t\t\t\t\t<PaginationPreviousButton\n\t\t\t\t\t\tonClick={() => table.previousPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchPreviousPage}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem className=\"text-sm\">\n\t\t\t\t\tPage {currentPage} of {totalPages}\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationNextButton\n\t\t\t\t\t\tonClick={() => table.nextPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchNextPage}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t\t<PaginationItem>\n\t\t\t\t\t<PaginationLastButton\n\t\t\t\t\t\tonClick={() => table.lastPage()}\n\t\t\t\t\t\tonMouseEnter={handlePrefetchLastPage}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t/>\n\t\t\t\t</PaginationItem>\n\t\t\t</PaginationContent>\n\t\t</Pagination>\n\t);\n}\n"],"names":["DataTable","table","onPrefetchPage","jsxs","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","row","cell","TableCell","DataTablePageSize","DataTablePagination","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","className","totalPages","currentPage","handlePrefetchFirstPage","handlePrefetchPreviousPage","handlePrefetchNextPage","handlePrefetchLastPage","Pagination","cn","PaginationContent","PaginationItem","PaginationFirstButton","PaginationPreviousButton","PaginationNextButton","PaginationLastButton"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as x,j as e}from"./vendor-tanstack-BcZfOOfy.js";import{cj as g,ck as u,cl as C,cm as m,cn as A,i as f,p as v,co as b,cp as k,cq as y}from"./index-B8vo2Lrg.js";const I=({isOpen:r,title:i,description:o,onConfirm:c,onClose:d,confirmText:l,isLoading:a=!1,loadingText:h="Deleting..."})=>{const[t,s]=x.useState(""),n=()=>{s(""),d()},p=()=>{c(),s("")},j=a||!!l&&t!==l;return e.jsx(g,{open:r,onOpenChange:n,children:e.jsxs(u,{children:[e.jsxs(C,{children:[e.jsx(m,{children:i}),e.jsx(A,{children:o})]}),l&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs(f,{htmlFor:"confirm-text",children:["Type ",e.jsx("strong",{children:l})," to confirm:"]}),e.jsx(v,{id:"confirm-text",value:t,onChange:D=>s(D.target.value),placeholder:l})]}),e.jsxs(b,{children:[e.jsx(k,{onClick:n,children:"Cancel"}),e.jsx(y,{variant:"destructive",onClick:p,disabled:j,children:a?h:"Delete"})]})]})})};export{I as D};
|
|
2
|
+
//# sourceMappingURL=delete-confirmation-dialog-CwDK_2QS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-confirmation-dialog-
|
|
1
|
+
{"version":3,"file":"delete-confirmation-dialog-CwDK_2QS.js","sources":["../../src/components/ui/delete-confirmation-dialog/delete-confirmation-dialog.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\n\nexport type DeleteConfirmationDialogProps = {\n\tisOpen: boolean;\n\ttitle: string;\n\tdescription: string;\n\tonConfirm: () => void;\n\tonClose: () => void;\n\tconfirmText?: string;\n\tisLoading?: boolean;\n\tloadingText?: string;\n};\n\nexport const DeleteConfirmationDialog = ({\n\tisOpen,\n\ttitle,\n\tdescription,\n\tonConfirm,\n\tonClose,\n\tconfirmText,\n\tisLoading = false,\n\tloadingText = \"Deleting...\",\n}: DeleteConfirmationDialogProps) => {\n\tconst [inputValue, setInputValue] = useState(\"\");\n\n\tconst handleClose = () => {\n\t\tsetInputValue(\"\");\n\t\tonClose();\n\t};\n\n\tconst handleConfirm = () => {\n\t\tonConfirm();\n\t\tsetInputValue(\"\");\n\t};\n\n\tconst isConfirmDisabled =\n\t\tisLoading || (!!confirmText && inputValue !== confirmText);\n\n\treturn (\n\t\t<AlertDialog open={isOpen} onOpenChange={handleClose}>\n\t\t\t<AlertDialogContent>\n\t\t\t\t<AlertDialogHeader>\n\t\t\t\t\t<AlertDialogTitle>{title}</AlertDialogTitle>\n\t\t\t\t\t<AlertDialogDescription>{description}</AlertDialogDescription>\n\t\t\t\t</AlertDialogHeader>\n\t\t\t\t{confirmText && (\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<Label htmlFor=\"confirm-text\">\n\t\t\t\t\t\t\tType <strong>{confirmText}</strong> to confirm:\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"confirm-text\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tonChange={(e) => setInputValue(e.target.value)}\n\t\t\t\t\t\t\tplaceholder={confirmText}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<AlertDialogFooter>\n\t\t\t\t\t<AlertDialogCancel onClick={handleClose}>Cancel</AlertDialogCancel>\n\t\t\t\t\t<AlertDialogAction\n\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\tdisabled={isConfirmDisabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isLoading ? loadingText : \"Delete\"}\n\t\t\t\t\t</AlertDialogAction>\n\t\t\t\t</AlertDialogFooter>\n\t\t\t</AlertDialogContent>\n\t\t</AlertDialog>\n\t);\n};\n"],"names":["DeleteConfirmationDialog","isOpen","title","description","onConfirm","onClose","confirmText","isLoading","loadingText","inputValue","setInputValue","useState","handleClose","handleConfirm","isConfirmDisabled","AlertDialog","AlertDialogContent","jsxs","AlertDialogHeader","jsx","AlertDialogTitle","AlertDialogDescription","Label","Input","e","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"wKAyBO,MAAMA,EAA2B,CAAC,CACxC,OAAAC,EACA,MAAAC,EACA,YAAAC,EACA,UAAAC,EACA,QAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,YAAAC,EAAc,aACf,IAAqC,CACpC,KAAM,CAACC,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAE,EAEzCC,EAAc,IAAM,CACzBF,EAAc,EAAE,EAChBL,EAAA,CACD,EAEMQ,EAAgB,IAAM,CAC3BT,EAAA,EACAM,EAAc,EAAE,CACjB,EAEMI,EACLP,GAAc,CAAC,CAACD,GAAeG,IAAeH,EAE/C,aACES,EAAA,CAAY,KAAMd,EAAQ,aAAcW,EACxC,gBAACI,EAAA,CACA,SAAA,CAAAC,OAACC,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,GAAkB,SAAAlB,CAAA,CAAM,EACzBiB,EAAAA,IAACE,GAAwB,SAAAlB,CAAA,CAAY,CAAA,EACtC,EACCG,GACAW,EAAAA,KAAC,MAAA,CAAI,UAAU,YACd,SAAA,CAAAA,EAAAA,KAACK,EAAA,CAAM,QAAQ,eAAe,SAAA,CAAA,QACxBH,EAAAA,IAAC,UAAQ,SAAAb,CAAA,CAAY,EAAS,cAAA,EACpC,EACAa,EAAAA,IAACI,EAAA,CACA,GAAG,eACH,MAAOd,EACP,SAAWe,GAAMd,EAAcc,EAAE,OAAO,KAAK,EAC7C,YAAalB,CAAA,CAAA,CACd,EACD,SAEAmB,EAAA,CACA,SAAA,CAAAN,EAAAA,IAACO,EAAA,CAAkB,QAASd,EAAa,SAAA,SAAM,EAC/CO,EAAAA,IAACQ,EAAA,CACA,QAAQ,cACR,QAASd,EACT,SAAUC,EAET,WAAYN,EAAc,QAAA,CAAA,CAC5B,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,CAEF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,r as o,s as p}from"./vendor-tanstack-BcZfOOfy.js";import{
|
|
2
|
-
//# sourceMappingURL=deployment-action-header-
|
|
1
|
+
import{j as e,r as o,s as p}from"./vendor-tanstack-BcZfOOfy.js";import{dL as f,ag as S,ah as B,ai as L,aj as g,al as k,ak as y,am as w,an as u,B as v,g as D,h as d,bw as x,bF as b,bH as W}from"./index-B8vo2Lrg.js";const E=({presetOptions:r=[],selected:s,onSelect:l,workPoolName:t})=>e.jsx(o.Suspense,{children:e.jsx(I,{presetOptions:r,selected:s,onSelect:l,workPoolName:t})}),I=({presetOptions:r=[],selected:s,onSelect:l,workPoolName:t})=>{const[c,m]=o.useState(""),{data:i}=p(f({work_pool_name:t})),n=o.useDeferredValue(c),h=o.useMemo(()=>i.filter(a=>a.name.toLowerCase().includes(n.toLowerCase())),[i,n]),j=o.useMemo(()=>r.filter(a=>a.label.toLowerCase().includes(n.toLowerCase())),[n,r]);return e.jsxs(S,{children:[e.jsx(B,{selected:!!s,"aria-label":"Select a work queue",children:s}),e.jsxs(L,{children:[e.jsx(g,{value:c,onValueChange:m,placeholder:"Search for a work queue..."}),e.jsx(k,{children:"No work queue found"}),e.jsx(y,{children:e.jsxs(w,{children:[j.map(a=>e.jsx(u,{selected:s===a.value,onSelect:()=>{l(a.value),m("")},value:String(a.label),children:a.label},a.label)),h.map(a=>e.jsx(u,{selected:s===a.name,onSelect:C=>{l(C),m("")},value:a.name,children:a.name},a.id))]})})]})]})},P=({deployment:r,action:s})=>e.jsx(v,{children:e.jsxs(D,{children:[e.jsx(d,{children:e.jsx(x,{to:"/deployments",className:"text-xl font-semibold",children:"Deployments"})}),e.jsx(b,{}),e.jsx(d,{children:e.jsx(x,{to:"/deployments/deployment/$id",params:{id:r.id},className:"text-xl font-semibold",children:r.name})}),e.jsx(b,{}),e.jsx(d,{className:"text-xl font-semibold",children:e.jsx(W,{children:s})})]})});export{P as D,E as W};
|
|
2
|
+
//# sourceMappingURL=deployment-action-header-Vp9YsCJO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment-action-header-
|
|
1
|
+
{"version":3,"file":"deployment-action-header-Vp9YsCJO.js","sources":["../../src/components/work-pools/work-queue-select/work-queue-select.tsx","../../src/components/deployments/deployment-action-header.tsx"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildFilterWorkPoolWorkQueuesQuery } from \"@/api/work-queues\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype WorkQueueSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n\tworkPoolName: string;\n};\n\nexport const WorkQueueSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n\tworkPoolName,\n}: WorkQueueSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<WorkQueueSelecImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t\tworkPoolName={workPoolName}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst WorkQueueSelecImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n\tworkPoolName,\n}: WorkQueueSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(\n\t\tbuildFilterWorkPoolWorkQueuesQuery({ work_pool_name: workPoolName }),\n\t);\n\n\t// nb: because work queues API does not have filtering _like by name, do client-side filtering\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((workQueue) =>\n\t\t\tworkQueue.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a work queue\"\n\t\t\t>\n\t\t\t\t{selected}\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 work queue...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No work queue found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.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\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((workQueue) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workQueue.id}\n\t\t\t\t\t\t\t\tselected={selected === workQueue.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(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={workQueue.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{workQueue.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 { Deployment } from \"@/api/deployments\";\nimport {\n\tBreadcrumb,\n\tBreadcrumbItem,\n\tBreadcrumbLink,\n\tBreadcrumbList,\n\tBreadcrumbPage,\n\tBreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\n\ntype DeploymentActionHeaderProps = {\n\tdeployment: Deployment;\n\taction: \"Edit\" | \"Duplicate\" | \"Run\";\n};\n\nexport const DeploymentActionHeader = ({\n\tdeployment,\n\taction,\n}: DeploymentActionHeaderProps) => {\n\treturn (\n\t\t<Breadcrumb>\n\t\t\t<BreadcrumbList>\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink to=\"/deployments\" className=\"text-xl font-semibold\">\n\t\t\t\t\t\tDeployments\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem>\n\t\t\t\t\t<BreadcrumbLink\n\t\t\t\t\t\tto=\"/deployments/deployment/$id\"\n\t\t\t\t\t\tparams={{ id: deployment.id }}\n\t\t\t\t\t\tclassName=\"text-xl font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{deployment.name}\n\t\t\t\t\t</BreadcrumbLink>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t\t<BreadcrumbSeparator />\n\n\t\t\t\t<BreadcrumbItem className=\"text-xl font-semibold\">\n\t\t\t\t\t<BreadcrumbPage>{action}</BreadcrumbPage>\n\t\t\t\t</BreadcrumbItem>\n\t\t\t</BreadcrumbList>\n\t\t</Breadcrumb>\n\t);\n};\n"],"names":["WorkQueueSelect","presetOptions","selected","onSelect","workPoolName","Suspense","jsx","WorkQueueSelecImplementation","search","setSearch","useState","data","useSuspenseQuery","buildFilterWorkPoolWorkQueuesQuery","deferredSearch","useDeferredValue","filteredData","useMemo","workQueue","filteredPresetOptions","option","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","ComboboxCommandItem","value","DeploymentActionHeader","deployment","action","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage"],"mappings":"sNA0BO,MAAMA,EAAkB,CAAC,CAC/B,cAAAC,EAAgB,CAAA,EAChB,SAAAC,EACA,SAAAC,EACA,aAAAC,CACD,UAEGC,EAAAA,SAAA,CACA,SAAAC,EAAAA,IAACC,EAAA,CACA,cAAAN,EACA,SAAAC,EACA,SAAAC,EACA,aAAAC,CAAA,CAAA,EAEF,EAIIG,EAA+B,CAAC,CACrC,cAAAN,EAAgB,CAAA,EAChB,SAAAC,EACA,SAAAC,EACA,aAAAC,CACD,IAA4B,CAC3B,KAAM,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAE,EACjC,CAAE,KAAAC,GAASC,EAChBC,EAAmC,CAAE,eAAgBT,CAAA,CAAc,CAAA,EAI9DU,EAAiBC,EAAAA,iBAAiBP,CAAM,EACxCQ,EAAeC,EAAAA,QAAQ,IACrBN,EAAK,OAAQO,GACnBA,EAAU,KAAK,cAAc,SAASJ,EAAe,YAAA,CAAa,CAAA,EAEjE,CAACH,EAAMG,CAAc,CAAC,EAEnBK,EAAwBF,EAAAA,QAAQ,IAC9BhB,EAAc,OAAQmB,GAC5BA,EAAO,MAAM,cAAc,SAASN,EAAe,YAAA,CAAa,CAAA,EAE/D,CAACA,EAAgBb,CAAa,CAAC,EAElC,cACEoB,EAAA,CACA,SAAA,CAAAf,EAAAA,IAACgB,EAAA,CACA,SAAU,EAAQpB,EAClB,aAAW,sBAEV,SAAAA,CAAA,CAAA,SAEDqB,EAAA,CACA,SAAA,CAAAjB,EAAAA,IAACkB,EAAA,CACA,MAAOhB,EACP,cAAeC,EACf,YAAY,4BAAA,CAAA,EAEbH,EAAAA,IAACmB,GAAqB,SAAA,qBAAA,CAAmB,EACzCnB,EAAAA,IAACoB,EAAA,CACA,SAAAC,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAT,EAAsB,IAAKC,GAC3Bd,EAAAA,IAACuB,EAAA,CAEA,SAAU3B,IAAakB,EAAO,MAC9B,SAAU,IAAM,CACfjB,EAASiB,EAAO,KAAK,EACrBX,EAAU,EAAE,CACb,EAEA,MAAO,OAAOW,EAAO,KAAK,EAEzB,SAAAA,EAAO,KAAA,EATHA,EAAO,KAAA,CAWb,EACAJ,EAAa,IAAKE,GAClBZ,EAAAA,IAACuB,EAAA,CAEA,SAAU3B,IAAagB,EAAU,KACjC,SAAWY,GAAU,CACpB3B,EAAS2B,CAAK,EACdrB,EAAU,EAAE,CACb,EACA,MAAOS,EAAU,KAEhB,SAAAA,EAAU,IAAA,EARNA,EAAU,EAAA,CAUhB,CAAA,CAAA,CACF,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,CAEF,ECvGaa,EAAyB,CAAC,CACtC,WAAAC,EACA,OAAAC,CACD,IAEE3B,EAAAA,IAAC4B,EAAA,CACA,SAAAP,EAAAA,KAACQ,EAAA,CACA,SAAA,CAAA7B,EAAAA,IAAC8B,EAAA,CACA,eAACC,EAAA,CAAe,GAAG,eAAe,UAAU,wBAAwB,uBAEpE,CAAA,CACD,QACCC,EAAA,EAAoB,QAEpBF,EAAA,CACA,SAAA9B,EAAAA,IAAC+B,EAAA,CACA,GAAG,8BACH,OAAQ,CAAE,GAAIL,EAAW,EAAA,EACzB,UAAU,wBAET,SAAAA,EAAW,IAAA,CAAA,EAEd,QACCM,EAAA,EAAoB,QAEpBF,EAAA,CAAe,UAAU,wBACzB,SAAA9B,EAAAA,IAACiC,EAAA,CAAgB,WAAO,CAAA,CACzB,CAAA,CAAA,CACD,CAAA,CACD"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-input-
|
|
2
|
-
import{j as e,r as c,s as
|
|
3
|
-
//# sourceMappingURL=deployment-form-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-input-CG6M9zD0.js","assets/vendor-tanstack-BcZfOOfy.js","assets/vendor-react-Bce9NwRC.js","assets/vendor-codemirror-LnHkUyAP.js","assets/index-B8vo2Lrg.js","assets/vendor-radix-BTiKGWfR.js","assets/vendor-recharts-BvvJP9Po.js","assets/vendor-forms-ClCIacbh.js","assets/vendor-date-wwuDAncJ.js","assets/index-m9O-nIOl.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{j as e,r as c,s as G,d as Z,L as H}from"./vendor-tanstack-BcZfOOfy.js";import{dN as K,ag as M,ah as q,ai as J,aj as z,al as R,ak as $,am as B,an as V,b9 as X,cf as Y,T as ee,S as re,a as ae,b as oe,c as se,d as ne,e as W,dO as le,cZ as te,y as C,ap as f,p as ce,G as ie,L as me,q as Q}from"./index-B8vo2Lrg.js";import{u as de,L as ue}from"./schema-form-input-string-format-datetime-nrb3g-JJ.js";import"./toggle-group-7WUJn2Tx.js";import{F as pe,a as m,b as d,c as u,d as p,e as h}from"./form-mws4law8.js";import{T as he}from"./tags-input-DHrnkwjQ.js";import{W as je}from"./deployment-action-header-Vp9YsCJO.js";import{a as xe}from"./zod-Cuos7J7w.js";import{c as _e,o as A,s as y,r as be,b as ye,a as ge,u as ve,N as Se,e as Ce}from"./vendor-forms-ClCIacbh.js";const fe=({presetOptions:o=[],selected:s,onSelect:a})=>e.jsx(c.Suspense,{children:e.jsx(Ee,{presetOptions:o,selected:s,onSelect:a})}),Ee=({presetOptions:o=[],selected:s,onSelect:a})=>{const[t,n]=c.useState(""),{data:i}=G(K()),l=c.useDeferredValue(t),j=c.useMemo(()=>i.filter(r=>r.name.toLowerCase().includes(l.toLowerCase())),[i,l]),x=c.useMemo(()=>o.filter(r=>r.label.toLowerCase().includes(l.toLowerCase())),[l,o]);return e.jsxs(M,{children:[e.jsx(q,{selected:!!s,"aria-label":"Select a global concurrency limit",children:i.find(r=>r.id===s)?.name}),e.jsxs(J,{children:[e.jsx(z,{value:t,onValueChange:n,placeholder:"Search for a global concurrency limit..."}),e.jsx(R,{children:"No global concurrency limit found"}),e.jsx($,{children:e.jsxs(B,{children:[x.map(r=>e.jsx(V,{selected:s===r.value,onSelect:()=>{a(r.value),n("")},value:String(r.label),children:r.label},r.label)),j.map(r=>e.jsx(V,{selected:s===r.name,onSelect:N=>{a(N),n("")},value:r.id,children:r.name},r.id))]})})]})]})},Ne=c.lazy(()=>Y(()=>import("./markdown-input-CG6M9zD0.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(o=>({default:o.MarkdownInput})));function we({className:o,...s}){return e.jsx(c.Suspense,{fallback:e.jsx(X,{className:`min-h-[200px] ${o??""}`}),children:e.jsx(Ne,{className:o,...s})})}const ke=({presetOptions:o=[],selected:s,onSelect:a})=>e.jsx(c.Suspense,{children:e.jsx(Le,{presetOptions:o,selected:s,onSelect:a})}),Le=({presetOptions:o=[],selected:s,onSelect:a})=>{const[t,n]=c.useState(""),{data:i}=G(ee()),l=c.useDeferredValue(t),j=c.useMemo(()=>i.filter(r=>r.name.toLowerCase().includes(l.toLowerCase())),[i,l]),x=c.useMemo(()=>o.filter(r=>r.label.toLowerCase().includes(l.toLowerCase())),[l,o]);return e.jsxs(M,{children:[e.jsx(q,{selected:!!s,"aria-label":"Select a work pool",children:s}),e.jsxs(J,{children:[e.jsx(z,{value:t,onValueChange:n,placeholder:"Search for a work pool..."}),e.jsx(R,{children:"No work pool found"}),e.jsx($,{children:e.jsxs(B,{children:[x.map(r=>e.jsx(V,{selected:s===r.value,onSelect:()=>{a(r.value),n("")},value:String(r.label),children:r.label},r.label)),j.map(r=>e.jsx(V,{selected:s===r.name,onSelect:N=>{a(N),n("")},value:r.name,children:r.name},r.id))]})})]})]})},E={ENQUEUE:"ENQUEUE",CANCEL_NEW:"CANCEL_NEW"},Fe=({onValueChange:o,value:s})=>e.jsxs(re,{value:s,onValueChange:a=>{o(a===""?void 0:a)},children:[e.jsx(ae,{children:e.jsx(oe,{placeholder:E.ENQUEUE})}),e.jsx(se,{children:e.jsxs(ne,{children:[e.jsx(W,{value:E.ENQUEUE,children:E.ENQUEUE}),e.jsx(W,{value:E.CANCEL_NEW,children:E.CANCEL_NEW})]})})]}),Ie=(o,{mode:s})=>A({name:y().refine(a=>s==="edit"?!0:a!==o.name,{message:"Name must be different from the original deployment"}),description:y().nullable().optional(),work_pool_name:y().nullable().optional(),work_queue_name:y().nullable().optional(),tags:ge(y()).optional(),concurrency_options:A({collision_strategy:Ce(["ENQUEUE","CANCEL_NEW"]).optional()}).nullable().optional(),job_variables:y().superRefine((a,t)=>{try{return a?JSON.parse(a):void 0}catch(n){return console.error(n),t.addIssue({code:"custom",message:"Invalid JSON"}),Se}}),enforce_parameter_schema:ye(),parameter_openapi_schema:be(ve()).optional().nullable().readonly(),global_concurrency_limit_id:y().uuid().optional().nullable()}),Ve={name:"",description:"",tags:[],job_variables:"",enforce_parameter_schema:!0,global_concurrency_limit_id:null},Oe=(o,{mode:s})=>{const a=Z(),t=_e({resolver:xe(Ie(o,{mode:s})),defaultValues:Ve}),{values:n,setValues:i,errors:l,validateForm:j}=de(),{createDeployment:x}=le(),{updateDeployment:r}=te();return c.useEffect(()=>{const{name:O,description:T,work_pool_name:w,work_queue_name:k,tags:L,concurrency_options:F,parameter_openapi_schema:I,enforce_parameter_schema:g,job_variables:v,global_concurrency_limit:S}=o;i(o.parameters),t.reset({description:T,name:O,work_pool_name:w,work_queue_name:k,tags:L,concurrency_options:F,parameter_openapi_schema:I,enforce_parameter_schema:g,job_variables:v?JSON.stringify(v):"",global_concurrency_limit_id:S?.id})},[t,o,i]),{form:t,onSave:async O=>{const{name:T,job_variables:w,description:k,work_pool_name:L,work_queue_name:F,tags:I,enforce_parameter_schema:g,concurrency_options:v,parameter_openapi_schema:S,global_concurrency_limit_id:U}=O,D=w?JSON.parse(w):void 0;if(S&&g)try{await j({schema:S})}catch(b){const _="Unknown error while updating validating schema.";C.error(_),console.error(_,b)}if(l.length>0)return;const P=v?.collision_strategy?{collision_strategy:v.collision_strategy}:void 0;switch(s){case"duplicate":x({concurrency_options:P,description:k,enforce_parameter_schema:g,flow_id:o.flow_id,job_variables:D,name:T,parameters:n,parameter_openapi_schema:S||void 0,paused:o.paused,tags:I,work_pool_name:L||null,work_queue_name:F||null,global_concurrency_limit_id:U},{onSuccess:({id:b})=>{C.success("Deployment created"),a({to:"/deployments/deployment/$id",params:{id:b}})},onError:b=>{const _=b.message||"Unknown error while creating deployment.";console.error(_),C.error(_)}});break;case"edit":r({concurrency_options:P,description:k,enforce_parameter_schema:g,id:o.id,job_variables:D,parameters:n,paused:o.paused,tags:I,work_pool_name:L||null,work_queue_name:F||null,global_concurrency_limit_id:U},{onSuccess:()=>{C.success("Deployment updated"),a({to:"/deployments/deployment/$id",params:{id:o.id}})},onError:b=>{const _=b.message||"Unknown error while updating deployment.";console.error(_),C.error(_)}});break}},parametersFormValues:n,setParametersFormValues:i,parameterFormErrors:l}},qe=({deployment:o,mode:s})=>{const{form:a,onSave:t,parameterFormErrors:n,setParametersFormValues:i,parametersFormValues:l}=Oe(o,{mode:s}),j=a.watch("work_pool_name"),x=a.getValues("parameter_openapi_schema");return e.jsx(pe,{...a,children:e.jsxs("form",{onSubmit:r=>{a.handleSubmit(t)(r)},className:"space-y-4",children:[e.jsx(m,{children:a.formState.errors.root?.message}),e.jsx(f,{variant:"h3",children:"General"}),e.jsx(d,{control:a.control,name:"name",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Name"}),e.jsx(h,{children:e.jsx(ce,{...r,value:r.value,disabled:s==="edit"})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"description",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Description (Optional)"}),e.jsx(h,{children:e.jsx(we,{"aria-label":"deployment description input",value:r.value??"",onChange:r.onChange})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"work_pool_name",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Work Pool (Optional)"}),e.jsx(h,{children:e.jsx(ke,{presetOptions:[{label:"None",value:""}],onSelect:r.onChange,selected:r.value})}),e.jsx(m,{})]})}),j&&e.jsx(d,{control:a.control,name:"work_queue_name",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Work Queue (Optional)"}),e.jsx(h,{children:e.jsx(je,{workPoolName:j,presetOptions:[{label:"None",value:""}],onSelect:r.onChange,selected:r.value})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"tags",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Tags (Optional)"}),e.jsx(h,{children:e.jsx(he,{...r})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"concurrency_options.collision_strategy",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:e.jsxs("div",{className:"col gap-1 mb-0.5",children:[e.jsx(f,{variant:"bodySmall",children:"Concurrency Limit Collision Strategy (Optional)"}),e.jsx(f,{variant:"bodySmall",className:"text-muted-foreground",children:"Configure behavior for runs once the concurrency limit is reached."})]})}),e.jsx(h,{children:e.jsx(Fe,{value:r.value,onValueChange:r.onChange})}),e.jsx(m,{})]})}),e.jsx(d,{control:a.control,name:"global_concurrency_limit_id",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Global concurrency limit"}),e.jsx(h,{children:e.jsx(fe,{presetOptions:[{label:"None",value:null}],onSelect:r.onChange,selected:r.value})}),e.jsx(m,{})]})}),e.jsxs("div",{className:"pt-4 border-t",children:[e.jsx(f,{variant:"h3",className:"mb-4",children:"Parameters"}),x&&e.jsx(ue,{schema:x,errors:n,values:l,onValuesChange:i,kinds:["json"]}),e.jsx(d,{control:a.control,name:"enforce_parameter_schema",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Enforce Parameter Schema"}),e.jsx(h,{children:e.jsx(ie,{className:"block",checked:r.value,onCheckedChange:r.onChange})}),e.jsx(m,{})]})})]}),e.jsxs("div",{className:"pt-4 border-t",children:[e.jsx(f,{variant:"h3",className:"mb-4",children:"Job Variables"}),e.jsx(d,{control:a.control,name:"job_variables",render:({field:r})=>e.jsxs(u,{children:[e.jsx(p,{children:"Job Variables (Optional)"}),e.jsx(h,{children:e.jsx(me,{...r})}),e.jsx(m,{})]})})]}),e.jsxs("div",{className:"flex gap-3 justify-end",children:[e.jsx(H,{to:"/deployments/deployment/$id",params:{id:o.id},children:e.jsx(Q,{variant:"secondary",children:"Cancel"})}),e.jsx(Q,{type:"submit",children:"Save"})]})]})})};export{qe as D};
|
|
3
|
+
//# sourceMappingURL=deployment-form-CJcg_6DJ.js.map
|
prefect/server/ui-v2/assets/{deployment-form-wfg6HeAJ.js.map → deployment-form-CJcg_6DJ.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["GlobalConcurrencyLimitSelect","presetOptions","selected","onSelect","Suspense","jsx","GlobalConcurrencyLimitSelectImplementation","search","setSearch","useState","data","useSuspenseQuery","buildListGlobalConcurrencyLimitsQuery","deferredSearch","useDeferredValue","filteredData","useMemo","globalConcurrencyLimit","filteredPresetOptions","option","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","ComboboxCommandItem","value","MarkdownInputLazy","lazy","__vitePreload","mod","LazyMarkdownInput","className","props","Skeleton","WorkPoolSelect","WorkPoolSelectImplementation","buildFilterWorkPoolsQuery","workPool","LIMIT_COLLISSION_STRATEGIES","LimitCollissionStrategySelect","onValueChange","Select","SelectTrigger","SelectValue","SelectContent","SelectGroup","SelectItem","createFormSchema","deployment","mode","z.object","z.string","z.array","z.enum","val","ctx","err","z.NEVER","z.boolean","z.record","z.unknown","DEFAULT_VALUES","useDeploymentForm","navigate","useNavigate","form","useForm","zodResolver","parametersFormValues","setParametersFormValues","parameterFormErrors","validateParametersForm","useSchemaForm","createDeployment","useCreateDeployment","updateDeployment","useUpdateDeployment","useEffect","name","description","work_pool_name","work_queue_name","tags","concurrency_options","parameter_openapi_schema","enforce_parameter_schema","job_variables","global_concurrency_limit","values","global_concurrency_limit_id","jobVariablesPayload","message","toast","concurrencyOptions","id","error","DeploymentForm","onSave","watchPoolName","parametersOpenAPISchema","Form","e","FormMessage","Typography","FormField","field","FormItem","FormLabel","FormControl","Input","MarkdownInput","WorkQueueSelect","TagsInput","LazySchemaForm","Switch","JsonInput","Link","Button"],"ignoreList":[],"sources":["../../src/components/global-concurrency-limit/global-concurrency-limit-select/global-concurrency-limit-select.tsx","../../src/components/ui/markdown-input-lazy.tsx","../../src/components/work-pools/work-pool-select/work-pool-select.tsx","../../src/components/deployments/deployment-form/limit-collision-strategy-select.tsx","../../src/components/deployments/deployment-form/use-deployment-form.ts","../../src/components/deployments/deployment-form/deployment-form.tsx"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildListGlobalConcurrencyLimitsQuery } from \"@/api/global-concurrency-limits\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype GlobalConcurrencyLimitSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n};\n\nexport const GlobalConcurrencyLimitSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: GlobalConcurrencyLimitSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<GlobalConcurrencyLimitSelectImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst GlobalConcurrencyLimitSelectImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: GlobalConcurrencyLimitSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(buildListGlobalConcurrencyLimitsQuery());\n\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((globalConcurrencyLimit) =>\n\t\t\tglobalConcurrencyLimit.name\n\t\t\t\t.toLowerCase()\n\t\t\t\t.includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a global concurrency limit\"\n\t\t\t>\n\t\t\t\t{\n\t\t\t\t\tdata.find(\n\t\t\t\t\t\t(globalConcurrencyLimit) => globalConcurrencyLimit.id === selected,\n\t\t\t\t\t)?.name\n\t\t\t\t}\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 global concurrency limit...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>\n\t\t\t\t\tNo global concurrency limit found\n\t\t\t\t</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.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\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((globalConcurrencyLimit) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={globalConcurrencyLimit.id}\n\t\t\t\t\t\t\t\tselected={selected === globalConcurrencyLimit.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(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={globalConcurrencyLimit.id}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{globalConcurrencyLimit.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 { ComponentProps } from \"react\";\nimport { lazy, Suspense } from \"react\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\n\nconst MarkdownInputLazy = lazy(() =>\n\timport(\"./markdown-input\").then((mod) => ({ default: mod.MarkdownInput })),\n);\n\ntype LazyMarkdownInputProps = ComponentProps<typeof MarkdownInputLazy>;\n\nexport function LazyMarkdownInput({\n\tclassName,\n\t...props\n}: LazyMarkdownInputProps) {\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={<Skeleton className={`min-h-[200px] ${className ?? \"\"}`} />}\n\t\t>\n\t\t\t<MarkdownInputLazy className={className} {...props} />\n\t\t</Suspense>\n\t);\n}\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildFilterWorkPoolsQuery } from \"@/api/work-pools\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype WorkPoolSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n};\n\nexport const WorkPoolSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: WorkPoolSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<WorkPoolSelectImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst WorkPoolSelectImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: WorkPoolSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(buildFilterWorkPoolsQuery());\n\n\t// nb: because work pools API does not have filtering _like by name, do client-side filtering\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((workPool) =>\n\t\t\tworkPool.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a work pool\"\n\t\t\t>\n\t\t\t\t{selected}\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 work pool...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No work pool found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.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\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((workPool) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workPool.id}\n\t\t\t\t\t\t\t\tselected={selected === workPool.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(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={workPool.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{workPool.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n","import type { components } from \"@/api/prefect\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectGroup,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\ntype LimitCollissionStrategy =\n\tcomponents[\"schemas\"][\"ConcurrencyLimitStrategy\"];\n\nconst LIMIT_COLLISSION_STRATEGIES = {\n\tENQUEUE: \"ENQUEUE\",\n\tCANCEL_NEW: \"CANCEL_NEW\",\n} satisfies Record<LimitCollissionStrategy, LimitCollissionStrategy>;\n\ntype LimitCollissionStrategySelectProps = {\n\tonValueChange: (value: LimitCollissionStrategy | undefined) => void;\n\tvalue: LimitCollissionStrategy | undefined;\n};\n\nexport const LimitCollissionStrategySelect = ({\n\tonValueChange,\n\tvalue,\n}: LimitCollissionStrategySelectProps) => {\n\treturn (\n\t\t<Select\n\t\t\tvalue={value}\n\t\t\tonValueChange={(value) => {\n\t\t\t\tif (value === \"\") {\n\t\t\t\t\tonValueChange(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tonValueChange(value as LimitCollissionStrategy);\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<SelectTrigger>\n\t\t\t\t<SelectValue placeholder={LIMIT_COLLISSION_STRATEGIES.ENQUEUE} />\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectGroup>\n\t\t\t\t\t<SelectItem value={LIMIT_COLLISSION_STRATEGIES.ENQUEUE}>\n\t\t\t\t\t\t{LIMIT_COLLISSION_STRATEGIES.ENQUEUE}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t\t<SelectItem value={LIMIT_COLLISSION_STRATEGIES.CANCEL_NEW}>\n\t\t\t\t\t\t{LIMIT_COLLISSION_STRATEGIES.CANCEL_NEW}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t</SelectGroup>\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport {\n\ttype Deployment,\n\tuseCreateDeployment,\n\tuseUpdateDeployment,\n} from \"@/api/deployments\";\nimport { useSchemaForm } from \"@/components/schemas\";\n\ntype FormMode = \"edit\" | \"duplicate\";\n\nconst createFormSchema = (\n\tdeployment: Deployment,\n\t{ mode }: { mode: FormMode },\n) =>\n\tz.object({\n\t\tname: z.string().refine(\n\t\t\t(value) => {\n\t\t\t\tif (mode === \"edit\") {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn value !== deployment.name;\n\t\t\t},\n\t\t\t{ message: \"Name must be different from the original deployment\" },\n\t\t),\n\t\tdescription: z.string().nullable().optional(),\n\t\twork_pool_name: z.string().nullable().optional(),\n\t\twork_queue_name: z.string().nullable().optional(),\n\t\ttags: z.array(z.string()).optional(),\n\t\tconcurrency_options: z\n\t\t\t.object({\n\t\t\t\tcollision_strategy: z.enum([\"ENQUEUE\", \"CANCEL_NEW\"]).optional(),\n\t\t\t})\n\t\t\t.nullable()\n\t\t\t.optional(),\n\t\tjob_variables: z.string().superRefine((val, ctx) => {\n\t\t\ttry {\n\t\t\t\tif (!val) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn JSON.parse(val) as Record<string, unknown>;\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(err);\n\t\t\t\tctx.addIssue({ code: \"custom\", message: \"Invalid JSON\" });\n\t\t\t\treturn z.NEVER;\n\t\t\t}\n\t\t}),\n\t\tenforce_parameter_schema: z.boolean(),\n\t\tparameter_openapi_schema: z\n\t\t\t.record(z.unknown())\n\t\t\t.optional()\n\t\t\t.nullable()\n\t\t\t.readonly(),\n\t\tglobal_concurrency_limit_id: z.string().uuid().optional().nullable(),\n\t});\n\nexport type DeploymentFormSchema = z.infer<ReturnType<typeof createFormSchema>>;\n\nconst DEFAULT_VALUES: DeploymentFormSchema = {\n\tname: \"\",\n\tdescription: \"\",\n\ttags: [],\n\tjob_variables: \"\",\n\tenforce_parameter_schema: true,\n\tglobal_concurrency_limit_id: null,\n};\n\nexport const useDeploymentForm = (\n\tdeployment: Deployment,\n\t{ mode }: { mode: FormMode },\n) => {\n\tconst navigate = useNavigate();\n\tconst form = useForm({\n\t\tresolver: zodResolver(createFormSchema(deployment, { mode })),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\tconst {\n\t\tvalues: parametersFormValues,\n\t\tsetValues: setParametersFormValues,\n\t\terrors: parameterFormErrors,\n\t\tvalidateForm: validateParametersForm,\n\t} = useSchemaForm();\n\n\tconst { createDeployment } = useCreateDeployment();\n\tconst { updateDeployment } = useUpdateDeployment();\n\n\t// syncs form state to deployment to update\n\tuseEffect(() => {\n\t\tconst {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\twork_pool_name,\n\t\t\twork_queue_name,\n\t\t\ttags,\n\t\t\tconcurrency_options,\n\t\t\tparameter_openapi_schema,\n\t\t\tenforce_parameter_schema,\n\t\t\tjob_variables,\n\t\t\tglobal_concurrency_limit,\n\t\t} = deployment;\n\n\t\t// nb: parameter form state and validation is handled separately using SchemaForm\n\t\t// parameters has poor typings from openAPI\n\t\tsetParametersFormValues(deployment.parameters as Record<string, unknown>);\n\n\t\t// nb: Handle remaining form fields using react-hook-form\n\t\tform.reset({\n\t\t\tdescription,\n\t\t\tname,\n\t\t\twork_pool_name,\n\t\t\twork_queue_name,\n\t\t\ttags,\n\t\t\tconcurrency_options,\n\t\t\tparameter_openapi_schema,\n\t\t\tenforce_parameter_schema,\n\t\t\tjob_variables: job_variables ? JSON.stringify(job_variables) : \"\",\n\t\t\tglobal_concurrency_limit_id: global_concurrency_limit?.id,\n\t\t});\n\t}, [form, deployment, setParametersFormValues]);\n\n\tconst onSave = async (values: DeploymentFormSchema) => {\n\t\tconst {\n\t\t\tname,\n\t\t\tjob_variables,\n\t\t\tdescription,\n\t\t\twork_pool_name,\n\t\t\twork_queue_name,\n\t\t\ttags,\n\t\t\tenforce_parameter_schema,\n\t\t\tconcurrency_options,\n\t\t\tparameter_openapi_schema,\n\t\t\tglobal_concurrency_limit_id,\n\t\t} = values;\n\n\t\tconst jobVariablesPayload = job_variables\n\t\t\t? (JSON.parse(job_variables) as Record<string, unknown>)\n\t\t\t: undefined;\n\n\t\tif (parameter_openapi_schema && enforce_parameter_schema) {\n\t\t\ttry {\n\t\t\t\tawait validateParametersForm({ schema: parameter_openapi_schema });\n\t\t\t} catch (err) {\n\t\t\t\tconst message = \"Unknown error while updating validating schema.\";\n\t\t\t\ttoast.error(message);\n\t\t\t\tconsole.error(message, err);\n\t\t\t}\n\t\t}\n\n\t\t// Early exit if there's errors\n\t\tif (parameterFormErrors.length > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst concurrencyOptions = concurrency_options?.collision_strategy\n\t\t\t? { collision_strategy: concurrency_options.collision_strategy }\n\t\t\t: undefined;\n\n\t\tswitch (mode) {\n\t\t\tcase \"duplicate\":\n\t\t\t\tcreateDeployment(\n\t\t\t\t\t{\n\t\t\t\t\t\tconcurrency_options: concurrencyOptions,\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tenforce_parameter_schema,\n\t\t\t\t\t\tflow_id: deployment.flow_id,\n\t\t\t\t\t\tjob_variables: jobVariablesPayload,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tparameters: parametersFormValues,\n\t\t\t\t\t\tparameter_openapi_schema: parameter_openapi_schema || undefined,\n\t\t\t\t\t\tpaused: deployment.paused,\n\t\t\t\t\t\ttags,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_pool_name: work_pool_name || null,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_queue_name: work_queue_name || null,\n\t\t\t\t\t\tglobal_concurrency_limit_id,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tonSuccess: ({ id }) => {\n\t\t\t\t\t\t\ttoast.success(\"Deployment created\");\n\t\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\t\t\t\t\tparams: { id },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\t\terror.message || \"Unknown error while creating deployment.\";\n\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"edit\":\n\t\t\t\tupdateDeployment(\n\t\t\t\t\t{\n\t\t\t\t\t\tconcurrency_options: concurrencyOptions,\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tenforce_parameter_schema,\n\t\t\t\t\t\tid: deployment.id,\n\t\t\t\t\t\tjob_variables: jobVariablesPayload,\n\t\t\t\t\t\tparameters: parametersFormValues,\n\t\t\t\t\t\tpaused: deployment.paused,\n\t\t\t\t\t\ttags,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_pool_name: work_pool_name || null,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_queue_name: work_queue_name || null,\n\t\t\t\t\t\tglobal_concurrency_limit_id,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\t\ttoast.success(\"Deployment updated\");\n\t\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\t\t\t\t\tparams: { id: deployment.id },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\t\terror.message || \"Unknown error while updating deployment.\";\n\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn {\n\t\tform,\n\t\tonSave,\n\t\tparametersFormValues,\n\t\tsetParametersFormValues,\n\t\tparameterFormErrors,\n\t};\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type { Deployment } from \"@/api/deployments\";\nimport { GlobalConcurrencyLimitSelect } from \"@/components/global-concurrency-limit/global-concurrency-limit-select\";\nimport { LazySchemaForm, type PrefectSchemaObject } from \"@/components/schemas\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { LazyJsonInput as JsonInput } from \"@/components/ui/json-input-lazy\";\nimport { LazyMarkdownInput as MarkdownInput } from \"@/components/ui/markdown-input-lazy\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { TagsInput } from \"@/components/ui/tags-input\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { WorkPoolSelect } from \"@/components/work-pools/work-pool-select\";\nimport { WorkQueueSelect } from \"@/components/work-pools/work-queue-select\";\nimport { LimitCollissionStrategySelect } from \"./limit-collision-strategy-select\";\nimport { useDeploymentForm } from \"./use-deployment-form\";\n\ntype DeploymentFormProps = {\n\tdeployment: Deployment;\n\tmode: \"edit\" | \"duplicate\";\n};\n\nexport const DeploymentForm = ({ deployment, mode }: DeploymentFormProps) => {\n\tconst {\n\t\tform,\n\t\tonSave,\n\t\tparameterFormErrors,\n\t\tsetParametersFormValues,\n\t\tparametersFormValues,\n\t} = useDeploymentForm(deployment, { mode });\n\tconst watchPoolName = form.watch(\"work_pool_name\");\n\tconst parametersOpenAPISchema = form.getValues(\"parameter_openapi_schema\");\n\n\treturn (\n\t\t<Form {...form}>\n\t\t\t<form\n\t\t\t\tonSubmit={(e) => void form.handleSubmit(onSave)(e)}\n\t\t\t\tclassName=\"space-y-4\"\n\t\t\t>\n\t\t\t\t<FormMessage>{form.formState.errors.root?.message}</FormMessage>\n\n\t\t\t\t<Typography variant=\"h3\">General</Typography>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\t\t\tdisabled={mode === \"edit\"}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"description\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Description (Optional)</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<MarkdownInput\n\t\t\t\t\t\t\t\t\taria-label=\"deployment description input\"\n\t\t\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"work_pool_name\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Work Pool (Optional)</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<WorkPoolSelect\n\t\t\t\t\t\t\t\t\tpresetOptions={[{ label: \"None\", value: \"\" }]}\n\t\t\t\t\t\t\t\t\tonSelect={field.onChange}\n\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t{watchPoolName && (\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\tname=\"work_queue_name\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel>Work Queue (Optional)</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<WorkQueueSelect\n\t\t\t\t\t\t\t\t\t\tworkPoolName={watchPoolName}\n\t\t\t\t\t\t\t\t\t\tpresetOptions={[{ label: \"None\", value: \"\" }]}\n\t\t\t\t\t\t\t\t\t\tonSelect={field.onChange}\n\t\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"tags\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Tags (Optional)</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<TagsInput {...field} />\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"concurrency_options.collision_strategy\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>\n\t\t\t\t\t\t\t\t<div className=\"col gap-1 mb-0.5\">\n\t\t\t\t\t\t\t\t\t<Typography variant=\"bodySmall\">\n\t\t\t\t\t\t\t\t\t\tConcurrency Limit Collision Strategy (Optional)\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\tvariant=\"bodySmall\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tConfigure behavior for runs once the concurrency limit is\n\t\t\t\t\t\t\t\t\t\treached.\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<LimitCollissionStrategySelect\n\t\t\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\t\t\tonValueChange={field.onChange}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"global_concurrency_limit_id\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Global concurrency limit</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<GlobalConcurrencyLimitSelect\n\t\t\t\t\t\t\t\t\tpresetOptions={[{ label: \"None\", value: null }]}\n\t\t\t\t\t\t\t\t\tonSelect={field.onChange}\n\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"pt-4 border-t\">\n\t\t\t\t\t<Typography variant=\"h3\" className=\"mb-4\">\n\t\t\t\t\t\tParameters\n\t\t\t\t\t</Typography>\n\t\t\t\t\t{parametersOpenAPISchema && (\n\t\t\t\t\t\t<LazySchemaForm\n\t\t\t\t\t\t\tschema={parametersOpenAPISchema as unknown as PrefectSchemaObject}\n\t\t\t\t\t\t\terrors={parameterFormErrors}\n\t\t\t\t\t\t\tvalues={parametersFormValues}\n\t\t\t\t\t\t\tonValuesChange={setParametersFormValues}\n\t\t\t\t\t\t\tkinds={[\"json\"]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\tname=\"enforce_parameter_schema\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel>Enforce Parameter Schema</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t\t\t\t\tchecked={field.value}\n\t\t\t\t\t\t\t\t\t\tonCheckedChange={field.onChange}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"pt-4 border-t\">\n\t\t\t\t\t<Typography variant=\"h3\" className=\"mb-4\">\n\t\t\t\t\t\tJob Variables\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\tname=\"job_variables\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel>Job Variables (Optional)</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<JsonInput {...field} />\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"flex gap-3 justify-end\">\n\t\t\t\t\t<Link to=\"/deployments/deployment/$id\" params={{ id: deployment.id }}>\n\t\t\t\t\t\t<Button variant=\"secondary\">Cancel</Button>\n\t\t\t\t\t</Link>\n\t\t\t\t\t<Button type=\"submit\">Save</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Form>\n\t);\n};\n"],"file":"deployment-form-wfg6HeAJ.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["GlobalConcurrencyLimitSelect","presetOptions","selected","onSelect","Suspense","jsx","GlobalConcurrencyLimitSelectImplementation","search","setSearch","useState","data","useSuspenseQuery","buildListGlobalConcurrencyLimitsQuery","deferredSearch","useDeferredValue","filteredData","useMemo","globalConcurrencyLimit","filteredPresetOptions","option","Combobox","ComboboxTrigger","ComboboxContent","ComboboxCommandInput","ComboboxCommandEmtpy","ComboboxCommandList","jsxs","ComboboxCommandGroup","ComboboxCommandItem","value","MarkdownInputLazy","lazy","__vitePreload","mod","LazyMarkdownInput","className","props","Skeleton","WorkPoolSelect","WorkPoolSelectImplementation","buildFilterWorkPoolsQuery","workPool","LIMIT_COLLISSION_STRATEGIES","LimitCollissionStrategySelect","onValueChange","Select","SelectTrigger","SelectValue","SelectContent","SelectGroup","SelectItem","createFormSchema","deployment","mode","z.object","z.string","z.array","z.enum","val","ctx","err","z.NEVER","z.boolean","z.record","z.unknown","DEFAULT_VALUES","useDeploymentForm","navigate","useNavigate","form","useForm","zodResolver","parametersFormValues","setParametersFormValues","parameterFormErrors","validateParametersForm","useSchemaForm","createDeployment","useCreateDeployment","updateDeployment","useUpdateDeployment","useEffect","name","description","work_pool_name","work_queue_name","tags","concurrency_options","parameter_openapi_schema","enforce_parameter_schema","job_variables","global_concurrency_limit","values","global_concurrency_limit_id","jobVariablesPayload","message","toast","concurrencyOptions","id","error","DeploymentForm","onSave","watchPoolName","parametersOpenAPISchema","Form","e","FormMessage","Typography","FormField","field","FormItem","FormLabel","FormControl","Input","MarkdownInput","WorkQueueSelect","TagsInput","LazySchemaForm","Switch","JsonInput","Link","Button"],"ignoreList":[],"sources":["../../src/components/global-concurrency-limit/global-concurrency-limit-select/global-concurrency-limit-select.tsx","../../src/components/ui/markdown-input-lazy.tsx","../../src/components/work-pools/work-pool-select/work-pool-select.tsx","../../src/components/deployments/deployment-form/limit-collision-strategy-select.tsx","../../src/components/deployments/deployment-form/use-deployment-form.ts","../../src/components/deployments/deployment-form/deployment-form.tsx"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildListGlobalConcurrencyLimitsQuery } from \"@/api/global-concurrency-limits\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype GlobalConcurrencyLimitSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n};\n\nexport const GlobalConcurrencyLimitSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: GlobalConcurrencyLimitSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<GlobalConcurrencyLimitSelectImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst GlobalConcurrencyLimitSelectImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: GlobalConcurrencyLimitSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(buildListGlobalConcurrencyLimitsQuery());\n\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((globalConcurrencyLimit) =>\n\t\t\tglobalConcurrencyLimit.name\n\t\t\t\t.toLowerCase()\n\t\t\t\t.includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a global concurrency limit\"\n\t\t\t>\n\t\t\t\t{\n\t\t\t\t\tdata.find(\n\t\t\t\t\t\t(globalConcurrencyLimit) => globalConcurrencyLimit.id === selected,\n\t\t\t\t\t)?.name\n\t\t\t\t}\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 global concurrency limit...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>\n\t\t\t\t\tNo global concurrency limit found\n\t\t\t\t</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.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\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((globalConcurrencyLimit) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={globalConcurrencyLimit.id}\n\t\t\t\t\t\t\t\tselected={selected === globalConcurrencyLimit.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(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={globalConcurrencyLimit.id}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{globalConcurrencyLimit.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 { ComponentProps } from \"react\";\nimport { lazy, Suspense } from \"react\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\n\nconst MarkdownInputLazy = lazy(() =>\n\timport(\"./markdown-input\").then((mod) => ({ default: mod.MarkdownInput })),\n);\n\ntype LazyMarkdownInputProps = ComponentProps<typeof MarkdownInputLazy>;\n\nexport function LazyMarkdownInput({\n\tclassName,\n\t...props\n}: LazyMarkdownInputProps) {\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={<Skeleton className={`min-h-[200px] ${className ?? \"\"}`} />}\n\t\t>\n\t\t\t<MarkdownInputLazy className={className} {...props} />\n\t\t</Suspense>\n\t);\n}\n","import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { Suspense, useDeferredValue, useMemo, useState } from \"react\";\nimport { buildFilterWorkPoolsQuery } from \"@/api/work-pools\";\nimport {\n\tCombobox,\n\tComboboxCommandEmtpy,\n\tComboboxCommandGroup,\n\tComboboxCommandInput,\n\tComboboxCommandItem,\n\tComboboxCommandList,\n\tComboboxContent,\n\tComboboxTrigger,\n} from \"@/components/ui/combobox\";\n\ntype PresetOption = {\n\tlabel: string;\n\tvalue: string | null | undefined;\n};\n\ntype WorkPoolSelectProps = {\n\tpresetOptions?: Array<PresetOption>;\n\tselected: string | undefined | null;\n\tonSelect: (name: string | undefined | null) => void;\n};\n\nexport const WorkPoolSelect = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: WorkPoolSelectProps) => {\n\treturn (\n\t\t<Suspense>\n\t\t\t<WorkPoolSelectImplementation\n\t\t\t\tpresetOptions={presetOptions}\n\t\t\t\tselected={selected}\n\t\t\t\tonSelect={onSelect}\n\t\t\t/>\n\t\t</Suspense>\n\t);\n};\n\nconst WorkPoolSelectImplementation = ({\n\tpresetOptions = [],\n\tselected,\n\tonSelect,\n}: WorkPoolSelectProps) => {\n\tconst [search, setSearch] = useState(\"\");\n\tconst { data } = useSuspenseQuery(buildFilterWorkPoolsQuery());\n\n\t// nb: because work pools API does not have filtering _like by name, do client-side filtering\n\tconst deferredSearch = useDeferredValue(search);\n\tconst filteredData = useMemo(() => {\n\t\treturn data.filter((workPool) =>\n\t\t\tworkPool.name.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [data, deferredSearch]);\n\n\tconst filteredPresetOptions = useMemo(() => {\n\t\treturn presetOptions.filter((option) =>\n\t\t\toption.label.toLowerCase().includes(deferredSearch.toLowerCase()),\n\t\t);\n\t}, [deferredSearch, presetOptions]);\n\n\treturn (\n\t\t<Combobox>\n\t\t\t<ComboboxTrigger\n\t\t\t\tselected={Boolean(selected)}\n\t\t\t\taria-label=\"Select a work pool\"\n\t\t\t>\n\t\t\t\t{selected}\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 work pool...\"\n\t\t\t\t/>\n\t\t\t\t<ComboboxCommandEmtpy>No work pool found</ComboboxCommandEmtpy>\n\t\t\t\t<ComboboxCommandList>\n\t\t\t\t\t<ComboboxCommandGroup>\n\t\t\t\t\t\t{filteredPresetOptions.map((option) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={option.label}\n\t\t\t\t\t\t\t\tselected={selected === option.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tonSelect(option.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\t//nb: Stringifies label so that UX has a hoverable state\n\t\t\t\t\t\t\t\tvalue={String(option.label)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{filteredData.map((workPool) => (\n\t\t\t\t\t\t\t<ComboboxCommandItem\n\t\t\t\t\t\t\t\tkey={workPool.id}\n\t\t\t\t\t\t\t\tselected={selected === workPool.name}\n\t\t\t\t\t\t\t\tonSelect={(value) => {\n\t\t\t\t\t\t\t\t\tonSelect(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={workPool.name}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{workPool.name}\n\t\t\t\t\t\t\t</ComboboxCommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ComboboxCommandGroup>\n\t\t\t\t</ComboboxCommandList>\n\t\t\t</ComboboxContent>\n\t\t</Combobox>\n\t);\n};\n","import type { components } from \"@/api/prefect\";\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectGroup,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from \"@/components/ui/select\";\n\ntype LimitCollissionStrategy =\n\tcomponents[\"schemas\"][\"ConcurrencyLimitStrategy\"];\n\nconst LIMIT_COLLISSION_STRATEGIES = {\n\tENQUEUE: \"ENQUEUE\",\n\tCANCEL_NEW: \"CANCEL_NEW\",\n} satisfies Record<LimitCollissionStrategy, LimitCollissionStrategy>;\n\ntype LimitCollissionStrategySelectProps = {\n\tonValueChange: (value: LimitCollissionStrategy | undefined) => void;\n\tvalue: LimitCollissionStrategy | undefined;\n};\n\nexport const LimitCollissionStrategySelect = ({\n\tonValueChange,\n\tvalue,\n}: LimitCollissionStrategySelectProps) => {\n\treturn (\n\t\t<Select\n\t\t\tvalue={value}\n\t\t\tonValueChange={(value) => {\n\t\t\t\tif (value === \"\") {\n\t\t\t\t\tonValueChange(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tonValueChange(value as LimitCollissionStrategy);\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<SelectTrigger>\n\t\t\t\t<SelectValue placeholder={LIMIT_COLLISSION_STRATEGIES.ENQUEUE} />\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectGroup>\n\t\t\t\t\t<SelectItem value={LIMIT_COLLISSION_STRATEGIES.ENQUEUE}>\n\t\t\t\t\t\t{LIMIT_COLLISSION_STRATEGIES.ENQUEUE}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t\t<SelectItem value={LIMIT_COLLISSION_STRATEGIES.CANCEL_NEW}>\n\t\t\t\t\t\t{LIMIT_COLLISSION_STRATEGIES.CANCEL_NEW}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t</SelectGroup>\n\t\t\t</SelectContent>\n\t\t</Select>\n\t);\n};\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { toast } from \"sonner\";\nimport { z } from \"zod\";\nimport {\n\ttype Deployment,\n\tuseCreateDeployment,\n\tuseUpdateDeployment,\n} from \"@/api/deployments\";\nimport { useSchemaForm } from \"@/components/schemas\";\n\ntype FormMode = \"edit\" | \"duplicate\";\n\nconst createFormSchema = (\n\tdeployment: Deployment,\n\t{ mode }: { mode: FormMode },\n) =>\n\tz.object({\n\t\tname: z.string().refine(\n\t\t\t(value) => {\n\t\t\t\tif (mode === \"edit\") {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn value !== deployment.name;\n\t\t\t},\n\t\t\t{ message: \"Name must be different from the original deployment\" },\n\t\t),\n\t\tdescription: z.string().nullable().optional(),\n\t\twork_pool_name: z.string().nullable().optional(),\n\t\twork_queue_name: z.string().nullable().optional(),\n\t\ttags: z.array(z.string()).optional(),\n\t\tconcurrency_options: z\n\t\t\t.object({\n\t\t\t\tcollision_strategy: z.enum([\"ENQUEUE\", \"CANCEL_NEW\"]).optional(),\n\t\t\t})\n\t\t\t.nullable()\n\t\t\t.optional(),\n\t\tjob_variables: z.string().superRefine((val, ctx) => {\n\t\t\ttry {\n\t\t\t\tif (!val) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn JSON.parse(val) as Record<string, unknown>;\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(err);\n\t\t\t\tctx.addIssue({ code: \"custom\", message: \"Invalid JSON\" });\n\t\t\t\treturn z.NEVER;\n\t\t\t}\n\t\t}),\n\t\tenforce_parameter_schema: z.boolean(),\n\t\tparameter_openapi_schema: z\n\t\t\t.record(z.unknown())\n\t\t\t.optional()\n\t\t\t.nullable()\n\t\t\t.readonly(),\n\t\tglobal_concurrency_limit_id: z.string().uuid().optional().nullable(),\n\t});\n\nexport type DeploymentFormSchema = z.infer<ReturnType<typeof createFormSchema>>;\n\nconst DEFAULT_VALUES: DeploymentFormSchema = {\n\tname: \"\",\n\tdescription: \"\",\n\ttags: [],\n\tjob_variables: \"\",\n\tenforce_parameter_schema: true,\n\tglobal_concurrency_limit_id: null,\n};\n\nexport const useDeploymentForm = (\n\tdeployment: Deployment,\n\t{ mode }: { mode: FormMode },\n) => {\n\tconst navigate = useNavigate();\n\tconst form = useForm({\n\t\tresolver: zodResolver(createFormSchema(deployment, { mode })),\n\t\tdefaultValues: DEFAULT_VALUES,\n\t});\n\tconst {\n\t\tvalues: parametersFormValues,\n\t\tsetValues: setParametersFormValues,\n\t\terrors: parameterFormErrors,\n\t\tvalidateForm: validateParametersForm,\n\t} = useSchemaForm();\n\n\tconst { createDeployment } = useCreateDeployment();\n\tconst { updateDeployment } = useUpdateDeployment();\n\n\t// syncs form state to deployment to update\n\tuseEffect(() => {\n\t\tconst {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\twork_pool_name,\n\t\t\twork_queue_name,\n\t\t\ttags,\n\t\t\tconcurrency_options,\n\t\t\tparameter_openapi_schema,\n\t\t\tenforce_parameter_schema,\n\t\t\tjob_variables,\n\t\t\tglobal_concurrency_limit,\n\t\t} = deployment;\n\n\t\t// nb: parameter form state and validation is handled separately using SchemaForm\n\t\t// parameters has poor typings from openAPI\n\t\tsetParametersFormValues(deployment.parameters as Record<string, unknown>);\n\n\t\t// nb: Handle remaining form fields using react-hook-form\n\t\tform.reset({\n\t\t\tdescription,\n\t\t\tname,\n\t\t\twork_pool_name,\n\t\t\twork_queue_name,\n\t\t\ttags,\n\t\t\tconcurrency_options,\n\t\t\tparameter_openapi_schema,\n\t\t\tenforce_parameter_schema,\n\t\t\tjob_variables: job_variables ? JSON.stringify(job_variables) : \"\",\n\t\t\tglobal_concurrency_limit_id: global_concurrency_limit?.id,\n\t\t});\n\t}, [form, deployment, setParametersFormValues]);\n\n\tconst onSave = async (values: DeploymentFormSchema) => {\n\t\tconst {\n\t\t\tname,\n\t\t\tjob_variables,\n\t\t\tdescription,\n\t\t\twork_pool_name,\n\t\t\twork_queue_name,\n\t\t\ttags,\n\t\t\tenforce_parameter_schema,\n\t\t\tconcurrency_options,\n\t\t\tparameter_openapi_schema,\n\t\t\tglobal_concurrency_limit_id,\n\t\t} = values;\n\n\t\tconst jobVariablesPayload = job_variables\n\t\t\t? (JSON.parse(job_variables) as Record<string, unknown>)\n\t\t\t: undefined;\n\n\t\tif (parameter_openapi_schema && enforce_parameter_schema) {\n\t\t\ttry {\n\t\t\t\tawait validateParametersForm({ schema: parameter_openapi_schema });\n\t\t\t} catch (err) {\n\t\t\t\tconst message = \"Unknown error while updating validating schema.\";\n\t\t\t\ttoast.error(message);\n\t\t\t\tconsole.error(message, err);\n\t\t\t}\n\t\t}\n\n\t\t// Early exit if there's errors\n\t\tif (parameterFormErrors.length > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst concurrencyOptions = concurrency_options?.collision_strategy\n\t\t\t? { collision_strategy: concurrency_options.collision_strategy }\n\t\t\t: undefined;\n\n\t\tswitch (mode) {\n\t\t\tcase \"duplicate\":\n\t\t\t\tcreateDeployment(\n\t\t\t\t\t{\n\t\t\t\t\t\tconcurrency_options: concurrencyOptions,\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tenforce_parameter_schema,\n\t\t\t\t\t\tflow_id: deployment.flow_id,\n\t\t\t\t\t\tjob_variables: jobVariablesPayload,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tparameters: parametersFormValues,\n\t\t\t\t\t\tparameter_openapi_schema: parameter_openapi_schema || undefined,\n\t\t\t\t\t\tpaused: deployment.paused,\n\t\t\t\t\t\ttags,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_pool_name: work_pool_name || null,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_queue_name: work_queue_name || null,\n\t\t\t\t\t\tglobal_concurrency_limit_id,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tonSuccess: ({ id }) => {\n\t\t\t\t\t\t\ttoast.success(\"Deployment created\");\n\t\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\t\t\t\t\tparams: { id },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\t\terror.message || \"Unknown error while creating deployment.\";\n\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"edit\":\n\t\t\t\tupdateDeployment(\n\t\t\t\t\t{\n\t\t\t\t\t\tconcurrency_options: concurrencyOptions,\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tenforce_parameter_schema,\n\t\t\t\t\t\tid: deployment.id,\n\t\t\t\t\t\tjob_variables: jobVariablesPayload,\n\t\t\t\t\t\tparameters: parametersFormValues,\n\t\t\t\t\t\tpaused: deployment.paused,\n\t\t\t\t\t\ttags,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_pool_name: work_pool_name || null,\n\t\t\t\t\t\t// If value is \"\", set as null\n\t\t\t\t\t\twork_queue_name: work_queue_name || null,\n\t\t\t\t\t\tglobal_concurrency_limit_id,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\t\ttoast.success(\"Deployment updated\");\n\t\t\t\t\t\t\tvoid navigate({\n\t\t\t\t\t\t\t\tto: \"/deployments/deployment/$id\",\n\t\t\t\t\t\t\t\tparams: { id: deployment.id },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: (error) => {\n\t\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\t\terror.message || \"Unknown error while updating deployment.\";\n\t\t\t\t\t\t\tconsole.error(message);\n\t\t\t\t\t\t\ttoast.error(message);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn {\n\t\tform,\n\t\tonSave,\n\t\tparametersFormValues,\n\t\tsetParametersFormValues,\n\t\tparameterFormErrors,\n\t};\n};\n","import { Link } from \"@tanstack/react-router\";\nimport type { Deployment } from \"@/api/deployments\";\nimport { GlobalConcurrencyLimitSelect } from \"@/components/global-concurrency-limit/global-concurrency-limit-select\";\nimport { LazySchemaForm, type PrefectSchemaObject } from \"@/components/schemas\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tForm,\n\tFormControl,\n\tFormField,\n\tFormItem,\n\tFormLabel,\n\tFormMessage,\n} from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { LazyJsonInput as JsonInput } from \"@/components/ui/json-input-lazy\";\nimport { LazyMarkdownInput as MarkdownInput } from \"@/components/ui/markdown-input-lazy\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { TagsInput } from \"@/components/ui/tags-input\";\nimport { Typography } from \"@/components/ui/typography\";\nimport { WorkPoolSelect } from \"@/components/work-pools/work-pool-select\";\nimport { WorkQueueSelect } from \"@/components/work-pools/work-queue-select\";\nimport { LimitCollissionStrategySelect } from \"./limit-collision-strategy-select\";\nimport { useDeploymentForm } from \"./use-deployment-form\";\n\ntype DeploymentFormProps = {\n\tdeployment: Deployment;\n\tmode: \"edit\" | \"duplicate\";\n};\n\nexport const DeploymentForm = ({ deployment, mode }: DeploymentFormProps) => {\n\tconst {\n\t\tform,\n\t\tonSave,\n\t\tparameterFormErrors,\n\t\tsetParametersFormValues,\n\t\tparametersFormValues,\n\t} = useDeploymentForm(deployment, { mode });\n\tconst watchPoolName = form.watch(\"work_pool_name\");\n\tconst parametersOpenAPISchema = form.getValues(\"parameter_openapi_schema\");\n\n\treturn (\n\t\t<Form {...form}>\n\t\t\t<form\n\t\t\t\tonSubmit={(e) => void form.handleSubmit(onSave)(e)}\n\t\t\t\tclassName=\"space-y-4\"\n\t\t\t>\n\t\t\t\t<FormMessage>{form.formState.errors.root?.message}</FormMessage>\n\n\t\t\t\t<Typography variant=\"h3\">General</Typography>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Name</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\t\t\tdisabled={mode === \"edit\"}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"description\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Description (Optional)</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<MarkdownInput\n\t\t\t\t\t\t\t\t\taria-label=\"deployment description input\"\n\t\t\t\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"work_pool_name\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Work Pool (Optional)</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<WorkPoolSelect\n\t\t\t\t\t\t\t\t\tpresetOptions={[{ label: \"None\", value: \"\" }]}\n\t\t\t\t\t\t\t\t\tonSelect={field.onChange}\n\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t{watchPoolName && (\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\tname=\"work_queue_name\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel>Work Queue (Optional)</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<WorkQueueSelect\n\t\t\t\t\t\t\t\t\t\tworkPoolName={watchPoolName}\n\t\t\t\t\t\t\t\t\t\tpresetOptions={[{ label: \"None\", value: \"\" }]}\n\t\t\t\t\t\t\t\t\t\tonSelect={field.onChange}\n\t\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"tags\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Tags (Optional)</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<TagsInput {...field} />\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"concurrency_options.collision_strategy\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>\n\t\t\t\t\t\t\t\t<div className=\"col gap-1 mb-0.5\">\n\t\t\t\t\t\t\t\t\t<Typography variant=\"bodySmall\">\n\t\t\t\t\t\t\t\t\t\tConcurrency Limit Collision Strategy (Optional)\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\t\tvariant=\"bodySmall\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tConfigure behavior for runs once the concurrency limit is\n\t\t\t\t\t\t\t\t\t\treached.\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<LimitCollissionStrategySelect\n\t\t\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\t\t\tonValueChange={field.onChange}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"global_concurrency_limit_id\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>Global concurrency limit</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<GlobalConcurrencyLimitSelect\n\t\t\t\t\t\t\t\t\tpresetOptions={[{ label: \"None\", value: null }]}\n\t\t\t\t\t\t\t\t\tonSelect={field.onChange}\n\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"pt-4 border-t\">\n\t\t\t\t\t<Typography variant=\"h3\" className=\"mb-4\">\n\t\t\t\t\t\tParameters\n\t\t\t\t\t</Typography>\n\t\t\t\t\t{parametersOpenAPISchema && (\n\t\t\t\t\t\t<LazySchemaForm\n\t\t\t\t\t\t\tschema={parametersOpenAPISchema as unknown as PrefectSchemaObject}\n\t\t\t\t\t\t\terrors={parameterFormErrors}\n\t\t\t\t\t\t\tvalues={parametersFormValues}\n\t\t\t\t\t\t\tonValuesChange={setParametersFormValues}\n\t\t\t\t\t\t\tkinds={[\"json\"]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\tname=\"enforce_parameter_schema\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel>Enforce Parameter Schema</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t\t\t\tclassName=\"block\"\n\t\t\t\t\t\t\t\t\t\tchecked={field.value}\n\t\t\t\t\t\t\t\t\t\tonCheckedChange={field.onChange}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"pt-4 border-t\">\n\t\t\t\t\t<Typography variant=\"h3\" className=\"mb-4\">\n\t\t\t\t\t\tJob Variables\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\t\tname=\"job_variables\"\n\t\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t\t<FormLabel>Job Variables (Optional)</FormLabel>\n\t\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t\t<JsonInput {...field} />\n\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"flex gap-3 justify-end\">\n\t\t\t\t\t<Link to=\"/deployments/deployment/$id\" params={{ id: deployment.id }}>\n\t\t\t\t\t\t<Button variant=\"secondary\">Cancel</Button>\n\t\t\t\t\t</Link>\n\t\t\t\t\t<Button type=\"submit\">Save</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Form>\n\t);\n};\n"],"file":"deployment-form-CJcg_6DJ.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as r}from"./vendor-tanstack-BcZfOOfy.js";import{F as a,a as e,W as s}from"./work-queue-icon-text-
|
|
2
|
-
//# sourceMappingURL=deployment-links-
|
|
1
|
+
import{j as r}from"./vendor-tanstack-BcZfOOfy.js";import{F as a,a as e,W as s}from"./work-queue-icon-text-BOpcJ8YU.js";const u=({deployment:o})=>r.jsxs("div",{className:"flex items-center gap-4",children:[r.jsx(a,{flowId:o.flow_id}),o.work_pool_name&&r.jsx(e,{workPoolName:o.work_pool_name}),o.work_pool_name&&o.work_queue_name&&r.jsx(s,{workPoolName:o.work_pool_name,workQueueName:o.work_queue_name,showLabel:!0,showStatus:!0})]});export{u as D};
|
|
2
|
+
//# sourceMappingURL=deployment-links-CIkJIuHh.js.map
|
prefect/server/ui-v2/assets/{deployment-links-6iugOgDh.js.map → deployment-links-CIkJIuHh.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment-links-
|
|
1
|
+
{"version":3,"file":"deployment-links-CIkJIuHh.js","sources":["../../src/components/deployments/deployment-links.tsx"],"sourcesContent":["import type { Deployment } from \"@/api/deployments\";\nimport { FlowLink } from \"@/components/flows/flow-link\";\nimport { WorkPoolLink } from \"@/components/work-pools/work-pool-link\";\nimport { WorkQueueIconText } from \"@/components/work-pools/work-queue-icon-text\";\n\ntype DeploymentLinksProps = {\n\tdeployment: Deployment;\n};\n\nexport const DeploymentLinks = ({ deployment }: DeploymentLinksProps) => {\n\treturn (\n\t\t<div className=\"flex items-center gap-4\">\n\t\t\t<FlowLink flowId={deployment.flow_id} />\n\t\t\t{deployment.work_pool_name && (\n\t\t\t\t<WorkPoolLink workPoolName={deployment.work_pool_name} />\n\t\t\t)}\n\t\t\t{deployment.work_pool_name && deployment.work_queue_name && (\n\t\t\t\t<WorkQueueIconText\n\t\t\t\t\tworkPoolName={deployment.work_pool_name}\n\t\t\t\t\tworkQueueName={deployment.work_queue_name}\n\t\t\t\t\tshowLabel\n\t\t\t\t\tshowStatus\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["DeploymentLinks","deployment","jsxs","jsx","FlowLink","WorkPoolLink","WorkQueueIconText"],"mappings":"uHASO,MAAMA,EAAkB,CAAC,CAAE,WAAAC,KAEhCC,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAS,OAAQH,EAAW,OAAA,CAAS,EACrCA,EAAW,gBACXE,MAACE,EAAA,CAAa,aAAcJ,EAAW,eAAgB,EAEvDA,EAAW,gBAAkBA,EAAW,iBACxCE,EAAAA,IAACG,EAAA,CACA,aAAcL,EAAW,eACzB,cAAeA,EAAW,gBAC1B,UAAS,GACT,WAAU,EAAA,CAAA,CACX,EAEF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,L as C,t as B,r as c,F as q,C as Oe,G as $e,D as Be,B as Qe,s as de}from"./vendor-tanstack-BcZfOOfy.js";import{V as ue,q as j,I,y as F,B as We,g as He,h as ae,bw as Ge,bF as Je,bH as Xe,ap as k,L as re,aR as qe,af as he,aI as Ke,cR as Ye,cw as J,U as Ze,aA as me,aB as xe,aD as V,aC as P,$ as es,a_ as pe,p as je,cS as ge,cT as K,G as z,a7 as Y,bl as Z,a2 as fe,a3 as ve,a4 as Se,a5 as Ce,S as ss,a as ns,b as ts,c as as,e as rs,cU as os,cV as ls,aQ as is,cW as cs,cX as ds,av as us,cY as hs,bX as De,bU as we,bV as ye,bW as be,C as ms,cZ as xs,c_ as ps,b9 as js,cu as gs,c$ as fs,aP as oe,aE as le}from"./index-B8vo2Lrg.js";import{D as _e}from"./delete-confirmation-dialog-CwDK_2QS.js";import{D as ee,a as se,b as ne,c as Ne,d as E,f as vs}from"./dropdown-menu-D7Gwbd15.js";import{L as Ss}from"./lazy-markdown-1Hz0xzca.js";import{D as Cs,W as Ds}from"./work-pool-filter-CSOATj2D.js";import{S as ws}from"./sort-filter-Cv8zAXMp.js";import{S as ys,a as Te,F as Re}from"./flow-runs-pagination-SLbYtvaR.js";import{u as Ee,F as Fe}from"./use-flow-runs-selected-rows-C-tehPRB.js";import{D as bs}from"./data-table-CPkppyg6.js";import{D as _s}from"./deployment-links-CIkJIuHh.js";import{S as Ns}from"./index-CUVvZndW.js";import{a as ke}from"./zod-Cuos7J7w.js";import{a0 as Ts,$ as Rs}from"./vendor-date-wwuDAncJ.js";import{c as Me,o as b,b as X,s as L,d as Es,e as A,n as U,f as Fs,a as ie}from"./vendor-forms-ClCIacbh.js";import{c as ks}from"./vendor-recharts-BvvJP9Po.js";import{c as Ie}from"./cronstrue-Bevg0uGw.js";import{F as Ve,a as f,b as _,c as N,d as T,e as R}from"./form-mws4law8.js";import{T as Pe}from"./timezone-select-D4Q6VBtD.js";import{ao as Ms}from"./vendor-radix-BTiKGWfR.js";import{u as Is}from"./use-delete-confirmation-dialog-CUdii6Lo.js";import{u as Vs,a as Ps}from"./use-quick-run-B4Xj-YQQ.js";import"./vendor-react-Bce9NwRC.js";import"./table-BBNGfPra.js";import"./work-queue-icon-text-BOpcJ8YU.js";const Ae=({search:s,sort:n,stateFilter:r,deploymentFilter:a,workPoolFilter:t})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 pr-2 border-r-2",children:[e.jsx("div",{className:"min-w-56",children:e.jsx(ue,{"aria-label":"search by run name",placeholder:"Search by run name",value:s.value,onChange:i=>s.onChange(i.target.value)})}),e.jsx("div",{className:"min-w-56",children:e.jsx(ys,{selectedFilters:r.value,onSelectFilter:r.onSelect})}),a&&e.jsx("div",{className:"min-w-56",children:e.jsx(Cs,{selectedDeployments:a.value,onSelectDeployments:a.onSelect})}),t&&e.jsx("div",{className:"min-w-56",children:e.jsx(Ds,{selectedWorkPools:t.value,onSelectWorkPools:t.onSelect})})]}),e.jsx(ws,{value:n.value,onSelect:n.onSelect})]}),As=({id:s,onDelete:n})=>{const r=a=>{navigator.clipboard.writeText(a),F.success("ID copied")};return e.jsxs(ee,{children:[e.jsx(se,{asChild:!0,children:e.jsxs(j,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(I,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(ne,{align:"end",children:[e.jsx(Ne,{children:"Actions"}),e.jsx(E,{onClick:()=>r(s),children:"Copy ID"}),e.jsx(C,{to:"/deployments/deployment/$id/edit",params:{id:s},children:e.jsx(E,{children:"Edit"})}),e.jsx(E,{onClick:n,children:"Delete"}),e.jsx(C,{to:"/deployments/deployment/$id/duplicate",params:{id:s},children:e.jsx(E,{children:"Duplicate"})})]})]})},Ls=({deployment:s})=>e.jsx(We,{children:e.jsxs(He,{children:[e.jsx(ae,{children:e.jsx(Ge,{to:"/deployments",className:"text-xl font-semibold",children:"Deployments"})}),e.jsx(Je,{}),e.jsx(ae,{className:"text-xl font-semibold",children:e.jsx(Xe,{children:s.name})})]})}),Us=({deployment:s})=>{const n=JSON.stringify(s.job_variables??{},null,2),r=JSON.stringify(s.pull_steps??[],null,2);return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(k,{variant:"h4",children:"Job Variables"}),e.jsx(re,{copy:!0,disabled:!0,hideLineNumbers:!0,value:n}),e.jsx(k,{variant:"h4",children:"Pull Steps "}),e.jsx(re,{copy:!0,disabled:!0,hideLineNumbers:!0,value:r})]})},zs=({deployment:s})=>e.jsx("div",{className:"prose max-w-none",children:e.jsx(Ss,{children:s.description??""})}),Os=s=>{const{data:n,error:r}=B(qe(s)),a=c.useMemo(()=>n?n.map(o=>o.flow_id):[],[n]),{data:t,error:i}=B(he({flows:{id:{any_:a},operator:"and_"},offset:0,sort:"CREATED_DESC"},{enabled:a.length>0})),d=c.useMemo(()=>t?new Map(t.map(o=>[o.id,o])):new Map,[t]);return n&&n.length===0?{status:"success",error:null,data:[]}:n&&d.size>0?{status:"success",error:null,data:n.map(o=>{const u=d.get(o.flow_id);return{...o,flow:u}})}:r||i?{status:"error",error:r||i,data:void 0}:{status:"pending",error:null,data:void 0}},Le=s=>{const{data:n,error:r}=B(Ke(s)),a=c.useMemo(()=>n?n.results.map(o=>o.flow_id):[],[n]),{data:t,error:i}=B(he({flows:{id:{any_:a},operator:"and_"},offset:0,sort:"CREATED_DESC"},{enabled:a.length>0})),d=c.useMemo(()=>t?new Map(t.map(o=>[o.id,o])):new Map,[t]);return n&&n.results.length===0?{status:"success",error:null,data:{...n,results:[]}}:n&&d.size>0?{status:"success",error:null,data:{...n,results:n.results.map(o=>{const u=d.get(o.flow_id);return{...o,flow:u}})}}:r||i?{status:"error",error:r||i,data:void 0}:{status:"pending",error:null,data:void 0}},D=q("/deployments/deployment/$id"),$s=({deployment:s})=>{const[n,r,{clearSet:a,onSelectRow:t}]=Ee(),[i,d]=Ws(),[o,u]=Hs(),[l,m]=Gs(),[h,x]=Js(),y=Qs(),{data:g}=Le({deployments:{operator:"and_",id:{any_:[s.id]}},flow_runs:{name:{like_:o||void 0},state:{name:{any_:h.length===0?void 0:h},operator:"or_"},operator:"and_"},limit:i.limit,page:i.page,sort:l}),p=c.useMemo(()=>{if(g)return{...g,results:g.results.map(ze=>({...ze,deployment:s}))}},[g,s]),Q=y?()=>{y(),a()}:void 0,O=Bs(s);return e.jsxs("div",{className:"flex flex-col gap-2",children:[O&&e.jsxs("div",{className:"flex flex-col gap-2 border-b py-2",children:[e.jsx(k,{variant:"bodyLarge",children:"Next Run"}),e.jsx(Ye,{flowRun:O})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(Fe,{count:p?.count,results:p?.results,selectedRows:n,setSelectedRows:r}),e.jsx(Ae,{search:{value:o,onChange:u},sort:{value:l,onSelect:m},stateFilter:{value:new Set(h),onSelect:x}})]}),e.jsx(Te,{flowRuns:p?.results,selectedRows:n,onSelect:t,onClearFilters:Q}),p&&e.jsx(Re,{count:p.count,pagination:i,onChangePagination:d,pages:p.pages})]})]})};function Bs(s){const{data:n}=Os({deployments:{id:{any_:[s.id]},operator:"and_"},flow_runs:{state:{name:{any_:["Scheduled"]},operator:"and_"},operator:"and_"},sort:"EXPECTED_START_TIME_ASC",limit:1,offset:0});return c.useMemo(()=>{if(!(!n||!n[0]))return{...n[0],deployment:s}},[n,s])}function Qs(){const{runs:s}=D.useSearch(),n=D.useNavigate(),r=c.useCallback(()=>{n({to:".",search:t=>({...t,runs:void 0}),replace:!0})},[n]);return c.useMemo(()=>!!s,[s])?r:void 0}function Ws(){const{runs:s}=D.useSearch(),n=D.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,runs:{...s,...t}}),replace:!0})},[n,s]);return[c.useMemo(()=>({page:s?.page??1,limit:s?.limit??10}),[s?.limit,s?.page]),r]}function Hs(){const{runs:s}=D.useSearch(),n=D.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,runs:{...s,flowRuns:{...s?.flowRuns,name:t}}}),replace:!0})},[n,s]);return[c.useMemo(()=>s?.flowRuns?.name??"",[s?.flowRuns?.name]),r]}function Gs(){const{runs:s}=D.useSearch(),n=D.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,runs:{...s,sort:t}}),replace:!0})},[n,s]);return[c.useMemo(()=>s?.sort??"START_TIME_DESC",[s?.sort]),r]}function Js(){const{runs:s}=D.useSearch(),n=D.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,runs:{...s,flowRuns:{...s?.flowRuns,state:t?Array.from(t):void 0}}}),replace:!0})},[n,s]);return[c.useMemo(()=>s?.flowRuns?.state??J,[s?.flowRuns?.state]),r]}const w=q("/deployments/deployment/$id"),Xs=({deployment:s})=>{const[n,r,{clearSet:a,onSelectRow:t}]=Ee(),[i,d]=Ks(),[o,u]=Ys(),[l,m]=Zs(),[h,x]=en(),y=qs(),{data:g}=Le({deployments:{operator:"and_",id:{any_:[s.id]}},flow_runs:{name:{like_:o||void 0},state:{name:{any_:h.length===0?void 0:h},operator:"or_"},operator:"and_"},limit:i.limit,page:i.page,sort:l}),p=c.useMemo(()=>{if(g)return{...g,results:g.results.map(O=>({...O,deployment:s}))}},[g,s]),Q=y?()=>{y(),a()}:void 0;return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(Fe,{count:p?.count,results:p?.results,selectedRows:n,setSelectedRows:r}),e.jsx(Ae,{search:{value:o,onChange:u},sort:{value:l,onSelect:m},stateFilter:{value:new Set(h),onSelect:x}})]}),e.jsx(Te,{flowRuns:p?.results,selectedRows:n,onSelect:t,onClearFilters:Q}),p&&p.results.length>0&&e.jsx(Re,{count:p.count,pagination:i,onChangePagination:d,pages:p.pages})]})};function qs(){const{upcoming:s}=w.useSearch(),n=w.useNavigate(),r=c.useCallback(()=>{n({to:".",search:t=>({...t,upcoming:void 0}),replace:!0})},[n]);return c.useMemo(()=>!!s,[s])?r:void 0}function Ks(){const{upcoming:s}=w.useSearch(),n=w.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,upcoming:{...s,...t}}),replace:!0})},[n,s]);return[c.useMemo(()=>({page:s?.page??1,limit:s?.limit??5}),[s?.limit,s?.page]),r]}function Ys(){const{upcoming:s}=w.useSearch(),n=w.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,upcoming:{...s,flowRuns:{...s?.flowRuns,name:t}}}),replace:!0})},[n,s]);return[c.useMemo(()=>s?.flowRuns?.name??"",[s?.flowRuns?.name]),r]}function Zs(){const{upcoming:s}=w.useSearch(),n=w.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,upcoming:{...s,sort:t}}),replace:!0})},[n,s]);return[c.useMemo(()=>s?.sort??"START_TIME_ASC",[s?.sort]),r]}function en(){const{upcoming:s}=w.useSearch(),n=w.useNavigate(),r=c.useCallback(t=>{n({to:".",search:i=>({...i,upcoming:{...s,flowRuns:{...s?.flowRuns,state:t?Array.from(t):void 0}}}),replace:!0})},[n,s]);return[c.useMemo(()=>s?.flowRuns?.state??["Scheduled"],[s?.flowRuns?.state]),r]}const $=Qe(),sn=[$.accessor("key",{header:"Key"}),$.accessor("value",{header:"Override"}),$.accessor("defaultValue",{header:"Default"}),$.accessor("type",{header:"Type"})],nn=s=>c.useMemo(()=>{if(!s.parameter_openapi_schema)return[];const n=s.parameter_openapi_schema.properties,r=s.parameters;return Object.keys(n).sort((a,t)=>n[a].position-n[t].position).map(a=>{const t=n[a];return{key:a,value:r[a],defaultValue:t.default,type:t.type}})},[s]),tn=({deployment:s})=>{const[n,r]=c.useState(""),a=nn(s),t=c.useDeferredValue(n),i=c.useMemo(()=>a.filter(o=>o.key.toLowerCase().includes(t.toLowerCase())||o.value?.toString().toLowerCase().includes(t.toLowerCase())||o.defaultValue?.toString().toLowerCase().includes(t.toLowerCase())||o.type?.toString().toLowerCase().includes(t.toLowerCase())),[a,t]),d=Oe({data:i,columns:sn,getCoreRowModel:Be(),defaultColumn:{maxSize:300},getPaginationRowModel:$e()});return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(k,{variant:"bodySmall",className:"text-muted-foreground",children:[i.length," ",Ze(i.length,"parameter")]}),e.jsx("div",{className:"sm:col-span-2 md:col-span-2 lg:col-span-3",children:e.jsx(ue,{className:"sm:col-span-2 md:col-span-2 lg:col-span-3",placeholder:"Search parameters",value:n,onChange:o=>r(o.target.value)})})]}),e.jsx(bs,{table:d})]})},an=q("/deployments/deployment/$id"),rn=({deployment:s})=>{const{tab:n}=an.useSearch(),r=on(s);return e.jsxs(me,{defaultValue:r[0].value,value:n,children:[e.jsx(xe,{children:r.map(({value:a,LinkComponent:t})=>e.jsx(t,{},a))}),r.map(({value:a,ViewComponent:t})=>e.jsx(t,{},a))]})};function on(s){return c.useMemo(()=>[{value:"Runs",LinkComponent:()=>e.jsx(C,{to:".",search:{tab:"Runs"},children:e.jsx(P,{value:"Runs",children:"Runs"})}),ViewComponent:()=>e.jsx(V,{value:"Runs",children:e.jsx($s,{deployment:s})})},{value:"Upcoming",LinkComponent:()=>e.jsx(C,{to:".",search:{tab:"Upcoming"},children:e.jsx(P,{value:"Upcoming",children:"Upcoming"})}),ViewComponent:()=>e.jsx(V,{value:"Upcoming",children:e.jsx(Xs,{deployment:s})})},{value:"Parameters",LinkComponent:()=>e.jsx(C,{to:".",search:{tab:"Parameters"},children:e.jsx(P,{value:"Parameters",children:"Parameters"})}),ViewComponent:()=>e.jsx(V,{value:"Parameters",children:e.jsx(tn,{deployment:s})})},{value:"Configuration",LinkComponent:()=>e.jsx(C,{to:".",search:{tab:"Configuration"},children:e.jsx(P,{value:"Configuration",children:"Configuration"})}),ViewComponent:()=>e.jsx(V,{value:"Configuration",children:e.jsx(Us,{deployment:s})})},{value:"Description",LinkComponent:()=>e.jsx(C,{to:".",search:{tab:"Description"},children:e.jsx(P,{value:"Description",children:"Description"})}),ViewComponent:()=>e.jsx(V,{value:"Description",children:e.jsx(zs,{deployment:s})})}],[s])}const v=()=>e.jsx("dd",{className:"text-muted-foreground text-sm",children:"None"}),ce=({children:s})=>e.jsx("dt",{className:"text-sm text-muted-foreground",children:s}),S=({className:s,children:n})=>e.jsx("dd",{className:pe("text-sm",s),children:n}),ln=({deployment:s})=>{const n=[{field:"Status",ComponentValue:()=>s.status?e.jsx("dd",{children:e.jsx(Ns,{status:s.status})}):e.jsx(v,{})},{field:"Created",ComponentValue:()=>s.created?e.jsx(S,{className:"font-mono",children:s.created}):e.jsx(v,{})},{field:"Updated",ComponentValue:()=>s.updated?e.jsx(S,{className:"font-mono",children:s.updated}):e.jsx(v,{})},{field:"Entrypoint",ComponentValue:()=>s.entrypoint?e.jsx(S,{children:s.entrypoint}):e.jsx(v,{})},{field:"Path",ComponentValue:()=>s.path?e.jsx(S,{children:s.path}):e.jsx(v,{})},{field:"Concurrency Limit",ComponentValue:()=>s.global_concurrency_limit?e.jsx(S,{children:s.global_concurrency_limit.limit}):e.jsx(v,{})}],r=[{field:"Flow ID",ComponentValue:()=>e.jsx(S,{children:s.flow_id})},{field:"Deployment ID",ComponentValue:()=>e.jsx(S,{children:s.id})},{field:"Deployment Version",ComponentValue:()=>s.version?e.jsx(S,{children:s.version}):e.jsx(v,{})},{field:"Storage Document ID",ComponentValue:()=>s.storage_document_id?e.jsx(S,{children:s.storage_document_id}):e.jsx(v,{})},{field:"Infrastructure Document ID",ComponentValue:()=>s.infrastructure_document_id?e.jsx(S,{children:s.infrastructure_document_id}):e.jsx(v,{})},{field:"Tags",ComponentValue:()=>s.tags&&s.tags.length>0?e.jsx("dd",{children:e.jsx(es,{tags:s.tags,maxTagsDisplayed:4})}):e.jsx(v,{})}];return e.jsxs("div",{children:[e.jsx("ul",{className:"flex flex-col gap-3",children:n.map(({field:a,ComponentValue:t})=>e.jsx("li",{children:e.jsxs("dl",{children:[e.jsx(ce,{children:a}),e.jsx(t,{})]})},a))}),e.jsx("hr",{className:"my-3"}),e.jsx("ul",{className:"flex flex-col gap-3",children:r.map(({field:a,ComponentValue:t})=>e.jsx("li",{children:e.jsxs("dl",{children:[e.jsx(ce,{children:a}),e.jsx(t,{})]})},a))})]})};var Ue=Ts();const W=s=>{let n="",r=!1;try{Ue.CronExpressionParser.parse(s),n=Ie.toString(s),r=!0}catch{r=!1,n="Invalid expression"}return{description:n,isCronValid:r}},cn=({onChange:s,...n})=>{const[r,a]=c.useState(W(String(n.value)).description),[t,i]=c.useState(W(String(n.value)).isCronValid),d=o=>{if(s){s(o);const{description:u,isCronValid:l}=W(o.target.value);a(u),i(l)}};return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(je,{...n,onChange:d}),e.jsx(k,{variant:"bodySmall",className:ks(t?"text-muted-foreground":"text-red-500"),children:r})]})},dn=s=>{try{return Ue.CronExpressionParser.parse(s),!0}catch{return!1}},un=b({active:X(),schedule:b({cron:L().refine(dn),timezone:L().default("Etc/UTC"),day_or:X().default(!0)})}),H={active:!0,schedule:{cron:"* * * * *",timezone:"Etc/UTC",day_or:!0}},hn=({deployment_id:s,scheduleToEdit:n,onSubmit:r})=>{const{createDeploymentSchedule:a,isPending:t}=ge(),{updateDeploymentSchedule:i,isPending:d}=K(),o=Me({resolver:ke(un),defaultValues:H});c.useEffect(()=>{if(n){const{active:l,schedule:m}=n;if("cron"in m){const{cron:h,day_or:x,timezone:y}=m;o.reset({active:l,schedule:{cron:h,day_or:x,timezone:y??"Etc/UTC"}})}}else o.reset(H)},[o,n]);const u=l=>{const m=()=>{o.reset(H),r()};n?i({deployment_id:s,schedule_id:n.id,...l},{onSuccess:()=>{F.success("Deployment schedule updated")},onError:h=>{const x=h.message||"Unknown error while updating deployment schedule.";o.setError("root",{message:x})},onSettled:m}):a({deployment_id:s,...l},{onSuccess:()=>{F.success("Deployment schedule created")},onError:h=>{const x=h.message||"Unknown error while creating deployment schedule.";o.setError("root",{message:x})},onSettled:m})};return e.jsx(Ve,{...o,children:e.jsxs("form",{onSubmit:l=>{o.handleSubmit(u)(l)},className:"space-y-4",children:[e.jsx(f,{children:o.formState.errors.root?.message}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(_,{control:o.control,name:"active",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Active"}),e.jsx(R,{children:e.jsx(z,{className:"block",checked:l.value,onCheckedChange:l.onChange})}),e.jsx(f,{})]})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:"w-3/4",children:e.jsx(_,{control:o.control,name:"schedule.cron",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Value"}),e.jsx(R,{children:e.jsx(cn,{...l})}),e.jsx(f,{})]})})}),e.jsx(_,{control:o.control,name:"schedule.day_or",render:({field:l})=>e.jsxs(N,{children:[e.jsxs(T,{"aria-label":"Day Or",children:["Day Or ",e.jsx(mn,{})]}),e.jsx(R,{children:e.jsx(z,{className:"block",checked:l.value,onCheckedChange:l.onChange})}),e.jsx(f,{})]})})]}),e.jsx(_,{control:o.control,name:"schedule.timezone",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Timezone"}),e.jsx(R,{children:e.jsx(Pe,{selectedValue:l.value,onSelect:l.onChange})}),e.jsx(f,{})]})})]}),e.jsxs(Y,{children:[e.jsx(Z,{asChild:!0,children:e.jsx(j,{variant:"outline",children:"Close"})}),e.jsx(j,{type:"submit",loading:t||d,children:"Save"})]})]})})},mn=()=>e.jsxs(fe,{children:[e.jsx(Z,{asChild:!0,children:e.jsx("button",{type:"button",className:"cursor-help",children:e.jsx(I,{id:"Info",className:"size-4 inline"})})}),e.jsxs(ve,{"aria-describedby":void 0,children:[e.jsx(Se,{children:e.jsx(Ce,{children:"Day Or"})}),e.jsx(k,{children:'When the "Day Or" value is off, this schedule will connect day of the month and day of the week entries using OR logic; when on it will connect them using AND logic.'})]})]}),xn=[{label:"Seconds",value:"seconds"},{label:"Minutes",value:"minutes"},{label:"Hours",value:"hours"},{label:"Days",value:"days"}],M={seconds:1,minutes:60,hours:3600,days:24*3600},pn=s=>{let n=s;const r=Math.floor(s/M.days);if(n%=M.days,n===0)return{interval_value:r,interval_time:"days"};const a=Math.floor(s/M.hours);if(n%=M.hours,n===0)return{interval_value:a,interval_time:"hours"};const t=Math.floor(s/M.minutes);return n%=M.minutes,n===0?{interval_value:t,interval_time:"minutes"}:{interval_value:n,interval_time:"seconds"}},jn=b({active:X(),schedule:b({interval_value:U().or(L()).pipe(Fs.number()),interval_time:A(["seconds","minutes","hours","days"]),anchor_date:Es(),timezone:L().default("Etc/UTC")})}),G={active:!0,schedule:{interval_value:60,interval_time:"minutes",anchor_date:new Date,timezone:"Etc/UTC"}},gn=({deployment_id:s,scheduleToEdit:n,onSubmit:r})=>{const{createDeploymentSchedule:a,isPending:t}=ge(),{updateDeploymentSchedule:i,isPending:d}=K(),o=Me({resolver:ke(jn),defaultValues:G});c.useEffect(()=>{if(n){const{active:l,schedule:m}=n;if("interval"in m){const{interval:h,anchor_date:x,timezone:y}=m,{interval_value:g,interval_time:p}=pn(h);o.reset({active:l,schedule:{interval_value:g,interval_time:p,anchor_date:x?new Date(x):new Date,timezone:y??"Etc/UTC"}})}}else o.reset(G)},[o,n]);const u=l=>{const m=()=>{o.reset(G),r()};n?i({deployment_id:s,schedule_id:n.id,active:l.active,schedule:{interval:l.schedule.interval_value*M[l.schedule.interval_time],anchor_date:l.schedule.anchor_date.toISOString(),timezone:l.schedule.timezone}},{onSuccess:()=>{F.success("Deployment schedule updated")},onError:h=>{const x=h.message||"Unknown error while updating deployment schedule.";o.setError("root",{message:x})},onSettled:m}):a({deployment_id:s,active:l.active,schedule:{interval:l.schedule.interval_value*M[l.schedule.interval_time],anchor_date:l.schedule.anchor_date.toISOString(),timezone:l.schedule.timezone}},{onSuccess:()=>{F.success("Deployment schedule created")},onError:h=>{const x=h.message||"Unknown error while creating deployment schedule.";o.setError("root",{message:x})},onSettled:m})};return e.jsx(Ve,{...o,children:e.jsxs("form",{onSubmit:l=>{o.handleSubmit(u)(l)},className:"space-y-4",children:[e.jsx(f,{children:o.formState.errors.root?.message}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(_,{control:o.control,name:"active",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Active"}),e.jsx(R,{children:e.jsx(z,{className:"block",checked:l.value,onCheckedChange:l.onChange})}),e.jsx(f,{})]})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:"w-3/4",children:e.jsx(_,{control:o.control,name:"schedule.interval_value",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Value"}),e.jsx(R,{children:e.jsx(je,{...l})}),e.jsx(f,{})]})})}),e.jsx(_,{control:o.control,name:"schedule.interval_time",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Interval"}),e.jsxs(ss,{onValueChange:l.onChange,defaultValue:l.value,value:l.value,children:[e.jsx(R,{children:e.jsx(ns,{children:e.jsx(ts,{placeholder:"Select interval"})})}),e.jsx(as,{children:xn.map(({label:m,value:h})=>e.jsx(rs,{value:h,children:m},h))})]}),e.jsx(f,{})]})})]}),e.jsx(_,{control:o.control,name:"schedule.anchor_date",render:({field:l})=>e.jsxs(N,{className:"flex flex-col",children:[e.jsx(T,{children:"Anchor date"}),e.jsxs(os,{children:[e.jsx(ls,{asChild:!0,children:e.jsx(R,{children:e.jsxs(j,{variant:"outline",className:pe("w-full",!l.value&&"text-muted-foreground"),children:[is(l.value,"dateTime"),e.jsx(I,{id:"Calendar",className:"ml-auto size-4 opacity-50"})]})})}),e.jsx(cs,{className:"w-auto p-0",align:"start",children:e.jsx(ds,{mode:"single",selected:l.value,onSelect:l.onChange})})]}),e.jsx(f,{})]})}),e.jsx(_,{control:o.control,name:"schedule.timezone",render:({field:l})=>e.jsxs(N,{children:[e.jsx(T,{children:"Timezone"}),e.jsx(R,{children:e.jsx(Pe,{selectedValue:l.value,onSelect:l.onChange})}),e.jsx(f,{})]})})]}),e.jsxs(Y,{children:[e.jsx(Z,{asChild:!0,children:e.jsx(j,{variant:"outline",children:"Close"})}),e.jsx(j,{type:"submit",loading:t||d,children:"Save"})]})]})})},fn=()=>e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(k,{children:"Sorry, modifying RRule schedules via the UI is currently unsupported; select a different schedule type above or modify your schedule in code."}),e.jsxs(Y,{children:[e.jsx(Ms,{asChild:!0,children:e.jsx(j,{variant:"outline",children:"Close"})}),e.jsx(j,{disabled:!0,children:"Save"})]})]}),vn=({deploymentId:s,onOpenChange:n,open:r,scheduleToEdit:a,onSubmit:t})=>{const[i,d]=c.useState("interval");c.useEffect(()=>{if(!a)return;const{schedule:u}=a;"interval"in u?d("interval"):"cron"in u?d("cron"):d("rrule")},[a]);const o=[{value:"interval",label:"Interval",Component:()=>e.jsx(gn,{deployment_id:s,onSubmit:t,scheduleToEdit:a})},{value:"cron",label:"Cron",Component:()=>e.jsx(hn,{deployment_id:s,onSubmit:t,scheduleToEdit:a})},{value:"rrule",label:"RRule",Component:()=>e.jsx(fn,{})}];return e.jsx(fe,{open:r,onOpenChange:n,children:e.jsxs(ve,{"aria-describedby":void 0,children:[e.jsx(Se,{children:e.jsxs(Ce,{children:[a?"Edit":"Add"," Schedule"]})}),e.jsxs(me,{defaultValue:o[0].value,value:i,children:[e.jsx(xe,{children:o.map(({value:u,label:l})=>e.jsx(P,{value:u,onClick:()=>d(u),children:l},u))}),o.map(({value:u,Component:l})=>e.jsx(V,{value:u,children:e.jsx(l,{})},u))]})]})})},te=s=>{const{schedule:n}=s;return"interval"in n?`Every ${us(n.interval*1e3)}`:"cron"in n?Ie.toString(n.cron):Rs(n.rrule).toText()},Sn=()=>{const[s,n]=Is(),{deleteDeploymentSchedule:r}=hs();return[s,t=>n({title:"Delete Schedule",description:`Are you sure you want to delete ${te(t)} schedule?`,onConfirm:()=>{const{id:i,deployment_id:d}=t;if(!d)throw new Error("'deployment_id' expected");r({deployment_id:d,schedule_id:i},{onSuccess:()=>F.success("Schedule deleted"),onError:o=>{const u=o.message||"Unknown error while deleting schedule.";console.error(u)}})}})]},Cn=({deploymentSchedule:s,onEditSchedule:n})=>{const[r,a]=Sn(),t=o=>{navigator.clipboard.writeText(o),F.success("ID copied")},i=()=>a(s),d=()=>n(s.id);return e.jsxs(e.Fragment,{children:[e.jsxs(ee,{children:[e.jsx(se,{asChild:!0,children:e.jsxs(j,{variant:"outline",className:"size-8 p-0",children:[e.jsx("span",{className:"sr-only",children:"Open menu"}),e.jsx(I,{id:"MoreVertical",className:"size-4"})]})}),e.jsxs(ne,{align:"end",children:[e.jsx(Ne,{children:"Actions"}),e.jsx(E,{onClick:()=>t(s.id),children:"Copy ID"}),e.jsx(E,{onClick:d,children:"Edit"}),e.jsx(E,{onClick:i,children:"Delete"})]})]}),e.jsx(_e,{...r})]})},Dn=({deploymentSchedule:s,disabled:n})=>{const{updateDeploymentSchedule:r}=K(),a=t=>{const{id:i,deployment_id:d}=s;if(!d)throw new Error("'deployment_id' expected");r({schedule_id:i,deployment_id:d,active:t},{onSuccess:()=>F.success(`Deployment schedule ${t?"active":"paused"}`),onError:o=>{const u=o.message||"Unknown error while updating deployment schedule.";console.error(u)}})};return e.jsx(De,{children:e.jsxs(we,{children:[e.jsx(ye,{asChild:!0,children:e.jsx("div",{children:e.jsx(z,{"aria-label":`toggle ${te(s)}`,checked:s.active,onCheckedChange:a,disabled:n})})}),n&&e.jsx(be,{children:"Pause or resume this schedule"})]})})},wn=({deploymentSchedule:s,disabled:n,onEditSchedule:r})=>e.jsx(ms,{className:"p-3",children:e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx(k,{children:te(s)}),e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx(Dn,{deploymentSchedule:s,disabled:n}),e.jsx(Cn,{deploymentSchedule:s,onEditSchedule:r})]})]})}),yn=({deployment:s})=>{const{updateDeployment:n}=xs(),r=t=>{n({id:s.id,paused:!t},{onSuccess:()=>{F.success(`Deployment ${t?"active":"paused"}`)},onError:i=>{const d=i.message||"Unknown error while updating deployment";console.error(d)}})},a=s.entrypoint===""||s.entrypoint===null;return e.jsx(De,{children:e.jsxs(we,{children:[e.jsx(ye,{asChild:!0,children:e.jsx("div",{children:e.jsx(z,{"aria-label":"Pause or resume all schedules",disabled:a,onCheckedChange:r,checked:!s.paused})})}),e.jsx(be,{children:"Pause or resume all schedules"})]})})},bn=3,_n=({deployment:s,onAddSchedule:n,onEditSchedule:r})=>{const a=c.useMemo(()=>s.schedules?s.schedules.sort((t,i)=>t.created?i.created?Date.parse(t.created)-Date.parse(i.created):1:-1):[],[s.schedules]);return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(k,{variant:"bodySmall",className:"text-muted-foreground",children:"Schedules"}),(a.length>bn||s.paused)&&e.jsx(yn,{deployment:s})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[a.map(t=>e.jsx(wn,{disabled:s.paused,deploymentSchedule:t,onEditSchedule:r},t.id)),e.jsx("div",{children:e.jsxs(j,{size:"sm",onClick:n,children:[e.jsx(I,{id:"Plus",className:"mr-2 size-4"})," Schedule"]})})]})]})},Nn=({deployment:s})=>e.jsx(c.Suspense,{fallback:e.jsx(En,{numSkeletons:2}),children:e.jsx(Tn,{deployment:s})}),Tn=({deployment:s})=>{const{data:n}=de(ps(`prefect.deployment.${s.id}`));return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("div",{className:"text-sm text-muted-foreground",children:"Triggers"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Rn,{automations:n}),e.jsx(C,{to:"/automations/create",search:{actions:{type:"run-deployment",deploymentId:s.id,parameters:s.parameters}},children:e.jsxs(j,{size:"sm",children:[e.jsx(I,{id:"Plus",className:"mr-2 size-4"})," Add"]})})]})]})},Rn=({automations:s})=>e.jsx("ul",{className:"flex flex-col gap-1",children:s.map(n=>e.jsx("li",{children:e.jsxs(C,{to:"/automations/automation/$id",params:{id:n.id},className:"flex items-center text-xs",children:[e.jsx(I,{id:"Bot",className:"mr-1 size-4"}),e.jsx("div",{children:n.name})]})},n.id))}),En=({numSkeletons:s=1})=>e.jsx("ul",{className:"flex flex-col gap-1",children:Array.from({length:s}).map((n,r)=>e.jsx("li",{children:e.jsx(js,{className:"h-4 w-full"})},r))}),Fn=({deployment:s})=>{const{onQuickRun:n,isPending:r}=Vs();return e.jsxs(ee,{children:[e.jsx(se,{asChild:!0,children:e.jsxs(j,{loading:r,children:["Run ",e.jsx(I,{className:"ml-1 size-4",id:"Play"})]})}),e.jsx(ne,{children:e.jsxs(vs,{children:[e.jsx(E,{onClick:()=>n(s.id),children:"Quick run"}),e.jsx(C,{to:"/deployments/deployment/$id/run",params:{id:s.id},search:{parameters:s.parameters},children:e.jsx(E,{children:"Custom run"})})]})})]})},kn=({id:s})=>{const[n,r]=c.useState({open:!1,scheduleIdToEdit:""}),{data:a}=de(gs(s)),[t,i]=Ps(),d=c.useMemo(()=>{if(!(!a.schedules||!n.scheduleIdToEdit))return a.schedules.find(h=>h.id===n.scheduleIdToEdit)},[a.schedules,n.scheduleIdToEdit]),o=()=>r({open:!0,scheduleIdToEdit:""}),u=h=>r({open:!0,scheduleIdToEdit:h}),l=()=>r({open:!1,scheduleIdToEdit:""}),m=h=>{h||l()};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex align-middle justify-between",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Ls,{deployment:a}),e.jsx(_s,{deployment:a})]}),e.jsxs("div",{className:"flex align-middle gap-2",children:[e.jsx(Fn,{deployment:a}),e.jsx(As,{id:s,onDelete:()=>i(a,{shouldNavigate:!0})})]})]}),e.jsxs("div",{className:"grid gap-4",style:{gridTemplateColumns:"5fr 1fr"},children:[e.jsx("div",{className:"flex flex-col gap-5",children:e.jsx(rn,{deployment:a})}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(_n,{deployment:a,onAddSchedule:o,onEditSchedule:u}),e.jsx(Nn,{deployment:a}),e.jsx("hr",{}),e.jsx(ln,{deployment:a})]})]})]}),e.jsx(vn,{deploymentId:s,open:n.open,onOpenChange:m,scheduleToEdit:d,onSubmit:l}),e.jsx(_e,{...t})]})};b({tab:A(["Runs","Upcoming","Parameters","Configuration","Description"]).default("Runs"),runs:b({flowRuns:b({name:L().optional(),state:ie(A(le)).optional().default(J).catch(J)}).optional(),page:U().int().positive().optional().default(1).catch(1),limit:U().int().positive().optional().default(10).catch(10),sort:A(oe).optional().default("START_TIME_DESC").catch("START_TIME_DESC")}).optional(),upcoming:b({flowRuns:b({name:L().optional(),state:ie(A(le)).optional().default(["Scheduled"]).catch(["Scheduled"])}).optional(),page:U().int().positive().optional().default(1).catch(1),limit:U().int().positive().optional().default(5).catch(5),sort:A(oe).optional().default("START_TIME_ASC").catch("START_TIME_ASC")}).optional()});function at(){const{id:s}=fs.useParams();return e.jsx(kn,{id:s})}export{at as component};
|
|
2
|
+
//# sourceMappingURL=deployment._id-C6XrGMp_.js.map
|