@camstack/addon-admin-ui 1.2.526 → 1.2.527
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.
- package/CHANGELOG.md +11 -0
- package/dist/assets/{AddonAssetIcon-Bk09xHqf.js → AddonAssetIcon-BZ0hQcho.js} +1 -1
- package/dist/assets/Addons-BAqAfY0r.js +5 -0
- package/dist/assets/{AdminPage-CYSYefaL.js → AdminPage-7avIuDBh.js} +1 -1
- package/dist/assets/{AdminSectionedPage-B4MRvqE8.js → AdminSectionedPage-Bd2owMGm.js} +1 -1
- package/dist/assets/AiProfiles-aCDtxD2T.js +3 -0
- package/dist/assets/BrokerEditorDialog-Cp7neyJC.js +1 -0
- package/dist/assets/Build-SObpGxas.js +40 -0
- package/dist/assets/{Calendars-D4ed6Nqc.js → Calendars-B2TORAnq.js} +1 -1
- package/dist/assets/Cluster-CD4DYic_.js +1 -0
- package/dist/assets/{ComposedDeviceEditDialog-DJ5mqI6C.js → ComposedDeviceEditDialog-BiIiBFG-.js} +1 -1
- package/dist/assets/CompositionBlockEditor-BXYXXUEU.js +2 -0
- package/dist/assets/{CompositionEditorPage-4rHclFIA.js → CompositionEditorPage-Cm4C-7Z-.js} +1 -1
- package/dist/assets/Data-CRPVPhFT.js +2 -0
- package/dist/assets/{DeviceDetail-3jKJ80IC.js → DeviceDetail-DNsWQGiy.js} +2 -2
- package/dist/assets/{DeviceDoActionFields-1jte2ge2.js → DeviceDoActionFields-BEhy6_KW.js} +1 -1
- package/dist/assets/{Devices-Bq4yRli5.js → Devices-CS5P4d9n.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-DlIQigBi.js → EmbedPlayerPage-B7MIw7cv.js} +1 -1
- package/dist/assets/History-BbOfWf-p.js +1 -0
- package/dist/assets/Identity-Df140-fX.js +1 -0
- package/dist/assets/IntegrationDetail-B7sqZ94w.js +1 -0
- package/dist/assets/{IntegrationHub-8GCewFBs.js → IntegrationHub-DndCuqMe.js} +1 -1
- package/dist/assets/Integrations-BJh_WZAT.js +1 -0
- package/dist/assets/{Integrations-Bt3Im7Mh.js → Integrations-DRCpstaG.js} +1 -1
- package/dist/assets/{Library-DTn9Nkjs.js → Library-Cx17_SRL.js} +1 -1
- package/dist/assets/Locations-Dt9LOu5v.js +3 -0
- package/dist/assets/{Logs-BxTfJ-wk.js → Logs-CrxQn3Uq.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-DBEbXuH2.js → MaskShapeCanvas-tJyuoOTy.js} +1 -1
- package/dist/assets/{MotionZonesSettings-D3Xxjf5N.js → MotionZonesSettings-DaGyceJa.js} +1 -1
- package/dist/assets/{MyAccess-BTEJNJtS.js → MyAccess-Bp2dsON4.js} +1 -1
- package/dist/assets/Network-DftlNAIH.js +1 -0
- package/dist/assets/{NodeAddonsSettingsPanel-Do_I93Mx.js → NodeAddonsSettingsPanel-JIXh-CLX.js} +1 -1
- package/dist/assets/Notifications-2tj0VaIS.js +1 -0
- package/dist/assets/{Pipeline-Cjj8XOuS.js → Pipeline-CqZqLWQZ.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-CswE6pks.js → PrivacyMaskSettings-zzQcpeb0.js} +1 -1
- package/dist/assets/Recordings-DoAJqZqc.js +1 -0
- package/dist/assets/{RemoteGrid-BjtzHkpg.js → RemoteGrid-Bz_u9tq6.js} +1 -1
- package/dist/assets/ScanNetworkModal-DL-mWRtG.js +1 -0
- package/dist/assets/{SceneMonitorEditor-C2X6jZvS.js → SceneMonitorEditor-B0ICySEi.js} +1 -1
- package/dist/assets/SessionsList-QvqpXCDN.js +2 -0
- package/dist/assets/{Showroom-CHwcC6p6.js → Showroom-B6CDELO1.js} +1 -1
- package/dist/assets/System-C0KUcOaJ.js +1 -0
- package/dist/assets/{Templates-tilFwunF.js → Templates-uAAxbV9V.js} +1 -1
- package/dist/assets/{Terminal-DiMnsE8i.js → Terminal-D1fhPY66.js} +5 -5
- package/dist/assets/{Viewer-BwirleAM.js → Viewer-BWN8qfBa.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-w6FCrjgB.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-sshFQYnL.js} +1 -1
- package/dist/assets/{addon-icons-context-CHk3ePjj.js → addon-icons-context-BHF-RdY-.js} +1 -1
- package/dist/assets/{archive-BU_eXxQC.js → archive-2V-x_y9T.js} +1 -1
- package/dist/assets/{assignment-candidates-B4bOK7k8.js → assignment-candidates-BpC51VXR.js} +1 -1
- package/dist/assets/{authed-media-BYuQnqbF.js → authed-media-CdbbdgDZ.js} +1 -1
- package/dist/assets/{bell-off-DCQedZIx.js → bell-off-DDQ8FbF1.js} +1 -1
- package/dist/assets/{board-model-t0EX_kXW.js → board-model-D3wYwuI4.js} +1 -1
- package/dist/assets/{boxes-BZMO9uMf.js → boxes-BwEV9Act.js} +1 -1
- package/dist/assets/circle-slash-BjzSCz4-.js +1 -0
- package/dist/assets/client-r4i0EpF6.js +711 -0
- package/dist/assets/{cloud-upload-CApwQ18P.js → cloud-upload-BII8r4p9.js} +1 -1
- package/dist/assets/crop-D9cpl5_W.js +1 -0
- package/dist/assets/{device-integration-icon-CXG5v8dp.js → device-integration-icon-Cf2JTj5q.js} +1 -1
- package/dist/assets/device-picker-model-B_Zjyqyk.js +1 -0
- package/dist/assets/{dist-Hz1nnJDv.js → dist-B0LFF94V.js} +1 -1
- package/dist/assets/dist-BOdjk8IV.js +711 -0
- package/dist/assets/{file-up-cso0QIDs.js → file-up-Bizrs9Ca.js} +1 -1
- package/dist/assets/{format-Csy9sDox.js → format-Bqo-j708.js} +1 -1
- package/dist/assets/{grip-vertical-DqjjXK1h.js → grip-vertical-C-qhB3oM.js} +1 -1
- package/dist/assets/{hard-drive-download-D-ykdsm5.js → hard-drive-download-Dym9jihx.js} +1 -1
- package/dist/assets/{hostInit-CTFssGi8.js → hostInit-bmlgmSTk.js} +1 -1
- package/dist/assets/i18n-BE1bPZOs.js +1 -0
- package/dist/assets/icons-BZ8D05w2.js +1 -0
- package/dist/assets/index-DimGtYV1.css +2 -0
- package/dist/assets/index-Ohn-2iW_.js +4 -0
- package/dist/assets/{key-C_dbeH7F.js → key-DddJ6bil.js} +1 -1
- package/dist/assets/{key-round-CPg0Y5qN.js → key-round-CbCqycf3.js} +1 -1
- package/dist/assets/{layers-Cb-ro1vb.js → layers-C-ZqYk3U.js} +1 -1
- package/dist/assets/{linked-devices-model-ZCUJsj_d.js → linked-devices-model-BPUD1khJ.js} +1 -1
- package/dist/assets/{list-ordered-V6P5uujF.js → list-ordered-Cxznlat2.js} +1 -1
- package/dist/assets/{location-owned-usage-C6DcC3IT.js → location-owned-usage-DOmOvdiG.js} +1 -1
- package/dist/assets/{log-in-Cxvw8rxc.js → log-in-9Uirjetj.js} +1 -1
- package/dist/assets/{memory-stick-Mm_iVwSZ.js → memory-stick-CLL3KiND.js} +1 -1
- package/dist/assets/{message-square-plus-Bfam15lf.js → message-square-plus-C2nVnMG1.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-019f9c14.js → mf-entry-bootstrap-0-edf9b20a.js} +2 -2
- package/dist/assets/{mic-off-CeSZf8K2.js → mic-off-CcHQBwDt.js} +1 -1
- package/dist/assets/{monitor-off-U-RK64kw.js → monitor-off-DUE1gt1S.js} +1 -1
- package/dist/assets/{monitor-smartphone-DezRerVw.js → monitor-smartphone-CwOoXB0L.js} +1 -1
- package/dist/assets/mount-B_Zjyqyk.js +1 -0
- package/dist/assets/{player-overlays-DgedyCX9.js → player-overlays-Cw_gjG75.js} +1 -1
- package/dist/assets/{recycle-Dkb1d-SV.js → recycle-hW2Os1lc.js} +1 -1
- package/dist/assets/remoteEntry-CHuAXwj-.js +1 -0
- package/dist/assets/{ruler-DzpBI-EP.js → ruler-SYjqj9n_.js} +1 -1
- package/dist/assets/{scan-eye-BmLTXsIf.js → scan-eye-BZlKp5Ev.js} +1 -1
- package/dist/assets/{scissors-lBRCylhQ.js → scissors-Prn6Kbb7.js} +1 -1
- package/dist/assets/{search-x-BRhrXpKx.js → search-x-CCA8373c.js} +1 -1
- package/dist/assets/{send-DVJoNc0-.js → send-C5rCH5_0.js} +1 -1
- package/dist/assets/{settings-2-D6sp_FTm.js → settings-2-wlw_-rxi.js} +1 -1
- package/dist/assets/{shapes-CQn3wvpk.js → shapes-Kj0bK1D8.js} +1 -1
- package/dist/assets/{sigma-CKK8bLRa.js → sigma-NPxR3lj1.js} +1 -1
- package/dist/assets/{speaker-BYorOPbN.js → speaker-CIKbprnA.js} +1 -1
- package/dist/assets/src-nnHXOip7.js +67 -0
- package/dist/assets/{step-inspector-model-DEfajBM3.js → step-inspector-model-BKKc_lkM.js} +1 -1
- package/dist/assets/{table-2-BPB4V5Fg.js → table-2-Sw__YAPa.js} +1 -1
- package/dist/assets/{timer-reset-Cu_VSXbl.js → timer-reset-BhPZYoCT.js} +1 -1
- package/dist/assets/{unlink-BcrHT0zX.js → unlink-DNy8sNAV.js} +1 -1
- package/dist/assets/{usb-DhXPqJtn.js → usb-CyQsTtlO.js} +1 -1
- package/dist/assets/{use-device-bound-caps-K47AcsQ5.js → use-device-bound-caps-BQo_OD1O.js} +1 -1
- package/dist/assets/{use-scenes-feed-DQrMGL5E.js → use-scenes-feed-BCDAv1nN.js} +1 -1
- package/dist/assets/{use-stationary-objects-yu-O0RPa.js → use-stationary-objects-BnIfyZw5.js} +1 -1
- package/dist/assets/useEventInvalidation-B_Zjyqyk.js +1 -0
- package/dist/assets/{useNodeUrlSelection-BuraZwll.js → useNodeUrlSelection-CR_BnlEg.js} +1 -1
- package/dist/assets/user-round-BY4YxbLZ.js +1 -0
- package/dist/assets/{user-x-DRSOzwTr.js → user-x-CUkBojXx.js} +1 -1
- package/dist/assets/variable-CpgCMY_Q.js +1 -0
- package/dist/assets/{video-5IaJhdjU.js → video-DXegVNA2.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BtgDin-X.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-2LL0aB_0.js} +2 -2
- package/dist/index.html +10 -10
- package/dist/server/addon.js +902 -116
- package/package.json +1 -1
- package/dist/assets/Addons-BwXNg54C.js +0 -5
- package/dist/assets/AiProfiles-CRZH6xR0.js +0 -3
- package/dist/assets/BrokerEditorDialog-D9rZCGl9.js +0 -1
- package/dist/assets/Build-BJaqr-_Y.js +0 -40
- package/dist/assets/Cluster-Dkt_tVUy.js +0 -1
- package/dist/assets/CompositionBlockEditor-BEondavu.js +0 -2
- package/dist/assets/Data-pZe3A7Va.js +0 -2
- package/dist/assets/History-DTt-NAMR.js +0 -1
- package/dist/assets/Identity-C3GHYP7_.js +0 -1
- package/dist/assets/IntegrationDetail-EOwq3jVG.js +0 -1
- package/dist/assets/Integrations-BocurtE0.js +0 -1
- package/dist/assets/Locations-chgnzdWz.js +0 -3
- package/dist/assets/Network-plYS78UN.js +0 -1
- package/dist/assets/Notifications-mslnotOB.js +0 -1
- package/dist/assets/Recordings-BpB53ln_.js +0 -1
- package/dist/assets/ScanNetworkModal-BR3tzZcL.js +0 -1
- package/dist/assets/SessionsList-BOjlUhj5.js +0 -2
- package/dist/assets/System-CiZ0xcyP.js +0 -1
- package/dist/assets/circle-slash-DFl97Cbx.js +0 -1
- package/dist/assets/client-F3l12jEi.js +0 -674
- package/dist/assets/crop-gfwPOF8e.js +0 -1
- package/dist/assets/device-picker-model-Fpx4y0MY.js +0 -1
- package/dist/assets/dist-B2m_6_7g.js +0 -674
- package/dist/assets/i18n-BH0PY6IL.js +0 -1
- package/dist/assets/icons-B9uR9qKs.js +0 -1
- package/dist/assets/index-CQ7TjSgs.js +0 -4
- package/dist/assets/index-DjwiZ7qT.css +0 -2
- package/dist/assets/mount-Fpx4y0MY.js +0 -1
- package/dist/assets/remoteEntry-DpkkaSO3.js +0 -1
- package/dist/assets/src-B0EA_4Ed.js +0 -67
- package/dist/assets/useEventInvalidation-Fpx4y0MY.js +0 -1
- package/dist/assets/user-round-D6wDvac9.js +0 -1
- package/dist/assets/variable-cv0ONmJ-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,a as s,et as c,o as l,t as u,x as d}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Fn as f,Hn as p,Ht as m,In as h,On as g,bt as _,dt as v,hn as y,lr as b,pr as x,st as ee}from"./player-overlays-DgedyCX9.js";import{Ci as S,ba as C,tn as w}from"./client-F3l12jEi.js";import{g as T,s as E}from"./video-5IaJhdjU.js";import{t as D}from"./log-in-Cxvw8rxc.js";import{t as O}from"./monitor-smartphone-DezRerVw.js";import{t as te}from"./recycle-Dkb1d-SV.js";import{An as ne,Fa as k,Hi as A,Ir as re,La as j,Ma as M,Mt as N,Nt as ie,_t as ae,ao as P,di as F,ja as I,mr as oe,ri as L,yt as se}from"./src-B0EA_4Ed.js";import{t as R}from"./i18n-BH0PY6IL.js";import{t as z}from"./useTranslation-BJr-n0es.js";import{T as B,_r as V,g as H,i as U,yr as W}from"./index-CQ7TjSgs.js";import{t as G}from"./AdminSectionedPage-B4MRvqE8.js";import{n as K,r as q,t as J}from"./BrokerEditorDialog-D9rZCGl9.js";import{t as ce}from"./NodeAddonsSettingsPanel-Do_I93Mx.js";import{n as Y,r as X,t as le}from"./IntegrationHub-8GCewFBs.js";c();var Z={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Q({status:e}){return i(F,{variant:Z[e],className:`text-[10px]`,children:e})}function ue({broker:t,interactiveConnectPath:n,interactiveDisconnectPath:r,kindLabel:a,onEdit:s}){let{t:c}=z(),u=l(),d=ee(),[f,h]=o(null),g=j({onSuccess:e=>h(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>h({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),y=async()=>{await d({title:c(`brokers.brokerManager.deleteBroker`,`Delete broker`),message:c(`brokers.brokerManager.deleteBrokerIntegrationsThatDepend`,`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,{name:t.name}),confirmLabel:c(`common.delete`,`Delete`),variant:`danger`})&&v.mutate({id:t.id,addonId:t.addonId})},b=n!==void 0&&n.length>0&&t.status!==`connected`,S=r!==void 0&&r.length>0&&t.status===`connected`;return e(`tr`,{className:`border-b border-border last:border-0`,children:[i(`td`,{className:`px-3 py-2 text-xs text-foreground font-medium`,children:t.name}),i(`td`,{className:`px-3 py-2 text-xs text-foreground-subtle`,children:a}),e(`td`,{className:`px-3 py-2`,children:[i(Q,{status:t.status}),f&&i(`span`,{className:`ml-2 text-[10px] ${f.ok?`text-success`:`text-danger`}`,children:f.ok?`OK`:f.error??c(`common.failedWord`)})]}),i(`td`,{className:`px-3 py-2`,children:e(`div`,{className:`flex items-center justify-end gap-1.5`,children:[b&&e(L,{variant:`primary`,size:`sm`,onClick:()=>{H(n,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[i(D,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signIn`)]}),S&&e(L,{variant:`outline`,size:`sm`,onClick:()=>{H(r,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[i(E,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signOut`)]}),e(L,{variant:`outline`,size:`sm`,onClick:()=>g.mutate({id:t.id,addonId:t.addonId}),disabled:g.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[g.isPending?i(x,{className:`h-3 w-3 animate-spin`}):i(_,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(L,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(p,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(L,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{y()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(x,{className:`h-3 w-3 animate-spin`}):i(m,{className:`h-3 w-3`}),c(`common.delete`,`Delete`)]})]})})]})}function de({addonId:t}={}){let{t:r}=z(),a=M({}),s=n(()=>K(a.data).filter(e=>t===void 0||e.addonId===t),[a.data,t]),[c,l]=o(!1),[u,d]=o(null),{options:f}=q(t===void 0?{}:{addonId:t}),p=n(()=>new Map(f.map(e=>[e.kind,e.label])),[f]),m=n(()=>{let e=new Map;for(let t of f)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[f]);return e(`div`,{className:`space-y-3`,children:[i(`div`,{className:`flex items-center justify-end`,children:e(L,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:f.length===0,title:f.length===0?r(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[i(h,{className:`h-3.5 w-3.5`}),` `,r(`brokers.brokerManager.addBroker`)]})}),i(`div`,{className:`rounded-lg border border-border bg-surface overflow-x-auto`,children:e(`table`,{className:`w-full min-w-[36rem] border-collapse`,children:[i(`thead`,{children:e(`tr`,{className:`border-b border-border bg-background/50`,children:[i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.name`,`Name`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.kind`,`Kind`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.status`,`Status`)}),i(`th`,{className:`px-3 py-2 text-right text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.actions`,`Actions`)})]})}),e(`tbody`,{children:[a.isLoading&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:[i(x,{className:`inline h-4 w-4 animate-spin`}),` `,r(`brokers.brokerManager.loadingBrokers`)]})}),a.isError&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-4 text-center text-xs text-danger`,children:[r(`brokers.brokerManager.failedToLoadBrokers`,`Failed to load brokers:`),` `,a.error instanceof Error?a.error.message:r(`brokers.brokerManager.unknownError`,`Unknown error`)]})}),!a.isLoading&&!a.isError&&s.length===0&&i(`tr`,{children:i(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:r(`brokers.brokerManager.noBrokersRegisteredYetAdd`,`No brokers registered yet. Add one to publish device events for downstream automations.`)})}),s.map(e=>{let t=m.get(e.kind);return i(ue,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},kindLabel:p.get(e.kind)??e.kind,onEdit:d},e.id)})]})]})}),c&&i(J,{...t===void 0?{}:{addonId:t},onClose:()=>l(!1),onSaved:()=>l(!1)}),u&&i(J,{broker:u,onClose:()=>d(null),onSaved:()=>d(null)})]})}function fe(e){if(typeof e==`string`)return e;if(typeof e==`object`&&e){let t=e.name;if(typeof t==`string`)return t}return null}function pe(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(fe).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function me(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function he(e,t){return t.find(t=>e.capNames.includes(t))??null}function ge(e){switch(e){case`running`:return{state:`ok`,label:R.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:R.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??R.t(`common.unknownWord`)}}}c();var _e=[`wasteCollections`,`listSources`],ve=[`wasteCollections`,`listCountries`];function ye(e){return e instanceof Error?e.message:String(e)}function be(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function xe(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(typeof n!=`object`||!n)continue;let e=Reflect.get(n,`id`),r=Reflect.get(n,`label`),i=Reflect.get(n,`module`);if(typeof e!=`string`||typeof r!=`string`||typeof i!=`string`)continue;let a=Reflect.get(n,`enabled`),o=Reflect.get(n,`formValues`),s=Reflect.get(n,`serviceId`),c=Reflect.get(n,`countryId`);t.push({id:e,label:r,module:i,enabled:typeof a==`boolean`?a:!0,formValues:typeof o==`object`&&o&&!Array.isArray(o)?o:void 0,serviceId:typeof s==`string`?s:void 0,countryId:typeof c==`string`?c:void 0})}return t}function Se(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`);return typeof t!=`string`||typeof n!=`string`?[]:[{id:t,label:n}]}):[]}function Ce(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`),r=Reflect.get(e,`module`);if(typeof t!=`string`||typeof n!=`string`||typeof r!=`string`)return[];let i=Reflect.get(e,`title`);return[{id:t,label:n,title:typeof i==`string`&&i.length>0?i:n,module:r}]}):[]}function we(e,t,n){return{sections:[{id:`picker`,title:R.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:R.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:R.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:R.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?R.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):R.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function Te({addonId:c,capName:f}){let{t:p}=z(),g=v(),_=l(),y=ee(),b=ae({editKey:`wasteEdit`,newKey:`wasteNew`}),[x,S]=o(!1),[C,w]=o(null),[T,E]=o({countryId:``,serviceId:``}),[D,O]=o({label:p(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),k=t(null),A=typeof T.countryId==`string`?T.countryId:``,j=typeof T.serviceId==`string`?T.serviceId:``,M=r((e,t)=>g.trpcClient.addons.custom.mutate({addonId:c,action:e,input:t}),[c,g]),N=s({queryKey:[..._e,c],queryFn:async()=>xe(await M(`listSources`,{}))}),ie=s({queryKey:[...ve,c],queryFn:async()=>Se(await M(`listCountries`,{}))}),P=s({queryKey:[`wasteCollections`,`listServices`,c,A],enabled:A!==``,queryFn:async()=>Ce(await M(`listServices`,{countryId:A}))}),I=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,j],enabled:j!==``,queryFn:async()=>M(`serviceFormSchema`,{serviceId:j})}),R=N.data??[],B=ie.data??[],V=P.data??[],H=be(I.data)?I.data:void 0,U=n(()=>we(B,A===``?[]:V,A),[B,V,A]),W=b.state,G=W.mode===`edit`?R.find(e=>e.id===W.id)??null:null;a(()=>{if(b.state.mode===`edit`&&G!==null){let e=`edit:${G.id}`;if(k.current===e)return;k.current=e,w(null),E({countryId:G.countryId??``,serviceId:G.serviceId??``}),O(G.formValues===void 0?{label:G.label,enabled:G.enabled}:{...G.formValues});return}if(b.state.mode===`new`){if(k.current===`new`)return;k.current=`new`,w(null),E({countryId:``,serviceId:``}),O({label:p(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[G,b.state]),a(()=>{if(b.state.mode!==`new`||j===``)return;let e=V.find(e=>e.id===j);e&&O(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[b.state.mode,j,V]);let K=r(e=>{E(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),q=r(async()=>{await _.invalidateQueries({queryKey:_e})},[_]),J=u({mutationFn:async e=>M(`deleteSource`,{id:e}),onSuccess:async()=>q()}),Y=r(async e=>{await y({title:p(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:p(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:p(`common.delete`,`Delete`),cancelLabel:p(`common.cancel`,`Cancel`),variant:`danger`})&&(await J.mutateAsync(e.id),b.state.mode===`edit`&&b.state.id===e.id&&(b.close(),k.current=null))},[y,J,b,p]),X=r(async()=>{let e=D.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){w(`Label is required.`);return}if(j===``){w(`Pick a country and a service.`);return}let n=b.state.mode===`new`,r=G?.id;if(!n&&(r===void 0||r===``)){w(`That source is no longer available.`);return}let i=D.enabled,a={...D};delete a.label,delete a.enabled,S(!0),w(null);try{n?await M(`createSource`,{label:t,serviceId:j,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await M(`updateSource`,{id:r,label:t,serviceId:j,args:a,enabled:typeof i==`boolean`?i:!0}),await q(),b.close(),k.current=null}catch(e){w(ye(e))}finally{S(!1)}},[M,G,b,D,q,j]),le=n(()=>[{key:`label`,header:p(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>i(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:p(`system.wasteSettingsSources.module`,`Module`),sortValue:e=>e.module,render:e=>i(`span`,{className:`font-mono text-xs text-foreground-muted`,children:e.module})},{key:`enabled`,header:p(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>i(F,{variant:e.enabled?`success`:`default`,children:e.enabled?p(`system.wasteSettingsSources.on`,`On`):p(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>i(L,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":p(`system.wasteSettingsSources.delete`,`Delete {{label}}`,{label:e.label}),"data-testid":`waste-source-delete-${e.id}`,onClick:t=>{t.stopPropagation(),Y(e)},children:i(m,{className:`h-3.5 w-3.5 text-danger`})})}],[Y,p]),Z=b.state.mode===`new`,Q=Z||G!==null,ue=`${j}:${Z?`new`:G?.id??`closed`}`;return e(`div`,{className:`flex min-h-0 flex-col gap-4`,"data-testid":`waste-settings-sources`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i(`p`,{className:`text-sm text-foreground-muted`,children:p(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),e(L,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>b.openNew(),children:[i(h,{className:`h-3.5 w-3.5`}),p(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),N.isError?i(`p`,{className:`text-sm text-danger`,children:p(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,N.isPending?i(re,{className:`h-32 w-full`}):i(ne,{columns:le,rows:R,rowKey:e=>e.id,pageSize:25,emptyMessage:p(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>b.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),i(se,{open:Q,onClose:()=>{b.close(),w(null),k.current=null},title:Z?p(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):p(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:te,width:`xl`,testId:`waste-source-editor`,error:C,footer:i(L,{type:`button`,size:`sm`,disabled:x||j===``,onClick:()=>void X(),children:x?p(`system.wasteSettingsSources.saving`,`Saving…`):p(`common.save`,`Save`)}),children:Q?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(oe,{schema:U,values:T,onChange:K},`picker:${A}:${V.length}`)}),j!==``&&H!==void 0?i(oe,{schema:H,values:D,onChange:O,bare:!0},ue):j!==``&&I.isPending?i(`p`,{className:`text-sm text-foreground-muted`,children:p(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):i(`p`,{className:`text-sm text-foreground-muted`,children:p(`system.wasteSettingsSources.chooseACountryAndService`,`Choose a country and service to see the required fields.`)})]}):null}),i(ce,{nodeId:`hub`,addonIds:[c],level:`global`,capability:f,hideSectionChrome:!0})]})}c();var $=1e4,Ee={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},De=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:y,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:b,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:g,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:T,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function Oe(t,n,r,a){let o=me(w,t.kind),s=n.flatMap(n=>{let a=he(n,o);if(a===null)return[];let s=ge(n.processState);return[{id:n.addonId,name:n.displayName,fallbackIcon:t.icon,state:s.state,stateLabel:s.label,render:()=>i(Y,{addonId:n.addonId,displayName:n.displayName,capName:a,isActive:n.processState===`running`,badges:e(d,{children:[i(Me,{processState:n.processState}),i(Ne,{kind:t.kind,addonId:n.addonId})]}),lead:t.kind===`device-export`?i(ie,{addonId:n.addonId}):void 0,panels:je(t.kind,n.addonId,e=>r(`/devices/${e}`)),settingsContent:n.addonId===`waste-collections`?i(Te,{addonId:n.addonId,capName:a}):void 0})}]});return{id:t.sectionId,label:a(t.labelKey),entries:s,install:{capability:o[0]??t.kind,label:a(t.installLabelKey)}}}function ke({descriptor:e,rows:t,isLoading:r}){let{t:a}=z(),o=V(),s=n(()=>Oe(e,t,o,a),[e,t,o,a]);return i(le,{embedded:!0,icon:e.icon,title:a(e.labelKey),subtitle:null,groups:[s],isLoading:r,emptyTitle:a(e.emptyTitleKey),emptyDescription:a(e.emptyDescriptionKey)})}function Ae(){let{t:e}=z(),t=A(void 0,{refetchInterval:$}),[r,o]=W(),s=B(`/system/integrations`,{t:e,isAdmin:!0})??{icon:f,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};a(()=>{let e=r.get(`tab`);if(e===null)return;let t=Ee[e];t===void 0||t===e||o(e=>{let n=new URLSearchParams(e);return n.set(`tab`,t),n},{replace:!0})},[r,o]);let c=n(()=>(t.data??[]).map(pe).filter(e=>e!==null),[t.data]),l=n(()=>De.map(n=>({id:n.sectionId,label:e(n.labelKey),ownedParams:U,content:i(ke,{descriptor:n,rows:c,isLoading:t.isLoading})})),[t.isLoading,c,e]);return i(G,{icon:s.icon,title:s.title,subtitle:e(`admin.system.integrations.externalSystemsThisHubTalks`,`External systems this hub talks to — exporters, email, brokers and calendar sources.`),defaultSection:`exporters`,sectionsLabel:`Connectivity sections`,sections:l})}function je(e,t,n){return e===`device-export`?[{id:`devices`,title:R.t(`admin.system.integrations.devices`,`Devices`),icon:O,placement:`end`,content:i(N,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:R.t(`admin.system.integrations.connections`,`Connections`),icon:g,content:i(de,{addonId:t})}]:[]}function Me({processState:e}){let{state:t,label:n}=ge(e);return i(F,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${X} capitalize`,children:n})}function Ne({kind:e,addonId:t}){return e===`broker`?i(Pe,{addonId:t}):e===`device-export`?i(Fe,{addonId:t}):null}function Pe({addonId:e}){let{t}=z(),{data:n}=I({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(F,{variant:`info`,className:X,children:o>0?t(`system.connectivity.connectionsConnected`,{count:a,connected:o}):t(`system.connectivity.connections`,{count:a})})}function Fe({addonId:e}){let{t}=z(),{data:n}=P({addonId:e},{refetchInterval:$,retry:!1}),r=S.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(F,{variant:a===`linked`?`success`:a===`error`?`danger`:`default`,className:X,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:a,exposedDeviceCount:o})})}export{Ae as IntegrationsPage};
|
|
1
|
+
import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,a as s,et as c,o as l,t as u,x as d}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Fn as f,Hn as p,Ht as m,In as h,On as g,bt as _,dt as v,hn as y,lr as b,pr as x,st as ee}from"./player-overlays-Cw_gjG75.js";import{Ci as S,ba as C,tn as w}from"./client-r4i0EpF6.js";import{g as T,s as E}from"./video-DXegVNA2.js";import{t as D}from"./log-in-9Uirjetj.js";import{t as O}from"./monitor-smartphone-CwOoXB0L.js";import{t as te}from"./recycle-hW2Os1lc.js";import{An as ne,Fa as k,Hi as A,Ir as re,La as j,Ma as M,Mt as N,Nt as ie,_t as ae,ao as P,di as F,ja as I,mr as oe,ri as L,yt as se}from"./src-nnHXOip7.js";import{t as R}from"./i18n-BE1bPZOs.js";import{t as z}from"./useTranslation-BJr-n0es.js";import{T as B,br as V,g as H,i as U,vr as W}from"./index-Ohn-2iW_.js";import{t as G}from"./AdminSectionedPage-Bd2owMGm.js";import{n as K,r as q,t as J}from"./BrokerEditorDialog-Cp7neyJC.js";import{t as ce}from"./NodeAddonsSettingsPanel-JIXh-CLX.js";import{n as Y,r as X,t as le}from"./IntegrationHub-DndCuqMe.js";c();var Z={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Q({status:e}){return i(F,{variant:Z[e],className:`text-[10px]`,children:e})}function ue({broker:t,interactiveConnectPath:n,interactiveDisconnectPath:r,kindLabel:a,onEdit:s}){let{t:c}=z(),u=l(),d=ee(),[f,h]=o(null),g=j({onSuccess:e=>h(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>h({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),y=async()=>{await d({title:c(`brokers.brokerManager.deleteBroker`,`Delete broker`),message:c(`brokers.brokerManager.deleteBrokerIntegrationsThatDepend`,`Delete broker "{{name}}"? Integrations that depend on it will stop working.`,{name:t.name}),confirmLabel:c(`common.delete`,`Delete`),variant:`danger`})&&v.mutate({id:t.id,addonId:t.addonId})},b=n!==void 0&&n.length>0&&t.status!==`connected`,S=r!==void 0&&r.length>0&&t.status===`connected`;return e(`tr`,{className:`border-b border-border last:border-0`,children:[i(`td`,{className:`px-3 py-2 text-xs text-foreground font-medium`,children:t.name}),i(`td`,{className:`px-3 py-2 text-xs text-foreground-subtle`,children:a}),e(`td`,{className:`px-3 py-2`,children:[i(Q,{status:t.status}),f&&i(`span`,{className:`ml-2 text-[10px] ${f.ok?`text-success`:`text-danger`}`,children:f.ok?`OK`:f.error??c(`common.failedWord`)})]}),i(`td`,{className:`px-3 py-2`,children:e(`div`,{className:`flex items-center justify-end gap-1.5`,children:[b&&e(L,{variant:`primary`,size:`sm`,onClick:()=>{H(n,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signInOpensAPopup`,`Sign in — opens a popup that closes when done`),children:[i(D,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signIn`)]}),S&&e(L,{variant:`outline`,size:`sm`,onClick:()=>{H(r,t.id,()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})})},title:c(`brokers.brokerManager.signOutClearsTheLinked`,`Sign out — clears the linked Google account on this broker`),children:[i(E,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signOut`)]}),e(L,{variant:`outline`,size:`sm`,onClick:()=>g.mutate({id:t.id,addonId:t.addonId}),disabled:g.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[g.isPending?i(x,{className:`h-3 w-3 animate-spin`}):i(_,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(L,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(p,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(L,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{y()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(x,{className:`h-3 w-3 animate-spin`}):i(m,{className:`h-3 w-3`}),c(`common.delete`,`Delete`)]})]})})]})}function de({addonId:t}={}){let{t:r}=z(),a=M({}),s=n(()=>K(a.data).filter(e=>t===void 0||e.addonId===t),[a.data,t]),[c,l]=o(!1),[u,d]=o(null),{options:f}=q(t===void 0?{}:{addonId:t}),p=n(()=>new Map(f.map(e=>[e.kind,e.label])),[f]),m=n(()=>{let e=new Map;for(let t of f)e.has(t.kind)||e.set(t.kind,{...t.interactiveConnectPath===void 0?{}:{connect:t.interactiveConnectPath},...t.interactiveDisconnectPath===void 0?{}:{disconnect:t.interactiveDisconnectPath}});return e},[f]);return e(`div`,{className:`space-y-3`,children:[i(`div`,{className:`flex items-center justify-end`,children:e(L,{variant:`primary`,size:`sm`,onClick:()=>l(!0),disabled:f.length===0,title:f.length===0?r(`brokers.brokerManager.noBrokerProvidersAvailable`,`No broker providers available`):void 0,children:[i(h,{className:`h-3.5 w-3.5`}),` `,r(`brokers.brokerManager.addBroker`)]})}),i(`div`,{className:`rounded-lg border border-border bg-surface overflow-x-auto`,children:e(`table`,{className:`w-full min-w-[36rem] border-collapse`,children:[i(`thead`,{children:e(`tr`,{className:`border-b border-border bg-background/50`,children:[i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.name`,`Name`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.kind`,`Kind`)}),i(`th`,{className:`px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.status`,`Status`)}),i(`th`,{className:`px-3 py-2 text-right text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle`,children:r(`brokers.brokerManager.actions`,`Actions`)})]})}),e(`tbody`,{children:[a.isLoading&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:[i(x,{className:`inline h-4 w-4 animate-spin`}),` `,r(`brokers.brokerManager.loadingBrokers`)]})}),a.isError&&i(`tr`,{children:e(`td`,{colSpan:4,className:`px-3 py-4 text-center text-xs text-danger`,children:[r(`brokers.brokerManager.failedToLoadBrokers`,`Failed to load brokers:`),` `,a.error instanceof Error?a.error.message:r(`brokers.brokerManager.unknownError`,`Unknown error`)]})}),!a.isLoading&&!a.isError&&s.length===0&&i(`tr`,{children:i(`td`,{colSpan:4,className:`px-3 py-6 text-center text-xs text-foreground-subtle`,children:r(`brokers.brokerManager.noBrokersRegisteredYetAdd`,`No brokers registered yet. Add one to publish device events for downstream automations.`)})}),s.map(e=>{let t=m.get(e.kind);return i(ue,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},kindLabel:p.get(e.kind)??e.kind,onEdit:d},e.id)})]})]})}),c&&i(J,{...t===void 0?{}:{addonId:t},onClose:()=>l(!1),onSaved:()=>l(!1)}),u&&i(J,{broker:u,onClose:()=>d(null),onSaved:()=>d(null)})]})}function fe(e){if(typeof e==`string`)return e;if(typeof e==`object`&&e){let t=e.name;if(typeof t==`string`)return t}return null}function pe(e){let t=e,n=t?.manifest;if(n?.id===void 0)return null;let r=(n.capabilities??[]).map(fe).filter(e=>e!==null);return{addonId:n.id,displayName:n.packageDisplayName??n.name??n.id,capNames:r,processState:t?.process?.state??null}}function me(e,t){return Object.entries(e).filter(([,e])=>e===t).map(([e])=>e)}function he(e,t){return t.find(t=>e.capNames.includes(t))??null}function ge(e){switch(e){case`running`:return{state:`ok`,label:R.t(`helpers.connectivityModel.running`)};case`crashed`:case`failed`:return{state:`error`,label:e};case`stopped`:case`disabled`:return{state:`off`,label:R.t(`helpers.connectivityModel.stopped`)};default:return{state:`unknown`,label:e??R.t(`common.unknownWord`)}}}c();var _e=[`wasteCollections`,`listSources`],ve=[`wasteCollections`,`listCountries`];function ye(e){return e instanceof Error?e.message:String(e)}function be(e){return typeof e!=`object`||!e?!1:Array.isArray(Reflect.get(e,`sections`))}function xe(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(typeof n!=`object`||!n)continue;let e=Reflect.get(n,`id`),r=Reflect.get(n,`label`),i=Reflect.get(n,`module`);if(typeof e!=`string`||typeof r!=`string`||typeof i!=`string`)continue;let a=Reflect.get(n,`enabled`),o=Reflect.get(n,`formValues`),s=Reflect.get(n,`serviceId`),c=Reflect.get(n,`countryId`);t.push({id:e,label:r,module:i,enabled:typeof a==`boolean`?a:!0,formValues:typeof o==`object`&&o&&!Array.isArray(o)?o:void 0,serviceId:typeof s==`string`?s:void 0,countryId:typeof c==`string`?c:void 0})}return t}function Se(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`);return typeof t!=`string`||typeof n!=`string`?[]:[{id:t,label:n}]}):[]}function Ce(e){return Array.isArray(e)?e.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=Reflect.get(e,`id`),n=Reflect.get(e,`label`),r=Reflect.get(e,`module`);if(typeof t!=`string`||typeof n!=`string`||typeof r!=`string`)return[];let i=Reflect.get(e,`title`);return[{id:t,label:n,title:typeof i==`string`&&i.length>0?i:n,module:r}]}):[]}function we(e,t,n){return{sections:[{id:`picker`,title:R.t(`system.wasteSettingsSources.countryService`,`Country & service`),columns:2,fields:[{type:`select`,key:`countryId`,label:R.t(`system.wasteSettingsSources.country`,`Country`),options:[{value:``,label:R.t(`system.wasteSettingsSources.selectCountry`,`Select country…`)},...e.map(e=>({value:e.id,label:e.label}))]},{type:`select`,key:`serviceId`,label:R.t(`system.wasteSettingsSources.service`,`Service`),options:[{value:``,label:n===``?R.t(`system.wasteSettingsSources.pickACountryFirst`,`Pick a country first`):R.t(`system.wasteSettingsSources.selectService`,`Select service…`)},...t.map(e=>({value:e.id,label:e.label}))]}]}]}}function Te({addonId:c,capName:f}){let{t:p}=z(),g=v(),_=l(),y=ee(),b=ae({editKey:`wasteEdit`,newKey:`wasteNew`}),[x,S]=o(!1),[C,w]=o(null),[T,E]=o({countryId:``,serviceId:``}),[D,O]=o({label:p(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),k=t(null),A=typeof T.countryId==`string`?T.countryId:``,j=typeof T.serviceId==`string`?T.serviceId:``,M=r((e,t)=>g.trpcClient.addons.custom.mutate({addonId:c,action:e,input:t}),[c,g]),N=s({queryKey:[..._e,c],queryFn:async()=>xe(await M(`listSources`,{}))}),ie=s({queryKey:[...ve,c],queryFn:async()=>Se(await M(`listCountries`,{}))}),P=s({queryKey:[`wasteCollections`,`listServices`,c,A],enabled:A!==``,queryFn:async()=>Ce(await M(`listServices`,{countryId:A}))}),I=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,j],enabled:j!==``,queryFn:async()=>M(`serviceFormSchema`,{serviceId:j})}),R=N.data??[],B=ie.data??[],V=P.data??[],H=be(I.data)?I.data:void 0,U=n(()=>we(B,A===``?[]:V,A),[B,V,A]),W=b.state,G=W.mode===`edit`?R.find(e=>e.id===W.id)??null:null;a(()=>{if(b.state.mode===`edit`&&G!==null){let e=`edit:${G.id}`;if(k.current===e)return;k.current=e,w(null),E({countryId:G.countryId??``,serviceId:G.serviceId??``}),O(G.formValues===void 0?{label:G.label,enabled:G.enabled}:{...G.formValues});return}if(b.state.mode===`new`){if(k.current===`new`)return;k.current=`new`,w(null),E({countryId:``,serviceId:``}),O({label:p(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[G,b.state]),a(()=>{if(b.state.mode!==`new`||j===``)return;let e=V.find(e=>e.id===j);e&&O(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[b.state.mode,j,V]);let K=r(e=>{E(t=>{let n=typeof e.countryId==`string`?e.countryId:``;return n===(typeof t.countryId==`string`?t.countryId:``)?e:{countryId:n,serviceId:``}})},[]),q=r(async()=>{await _.invalidateQueries({queryKey:_e})},[_]),J=u({mutationFn:async e=>M(`deleteSource`,{id:e}),onSuccess:async()=>q()}),Y=r(async e=>{await y({title:p(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:p(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:p(`common.delete`,`Delete`),cancelLabel:p(`common.cancel`,`Cancel`),variant:`danger`})&&(await J.mutateAsync(e.id),b.state.mode===`edit`&&b.state.id===e.id&&(b.close(),k.current=null))},[y,J,b,p]),X=r(async()=>{let e=D.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){w(`Label is required.`);return}if(j===``){w(`Pick a country and a service.`);return}let n=b.state.mode===`new`,r=G?.id;if(!n&&(r===void 0||r===``)){w(`That source is no longer available.`);return}let i=D.enabled,a={...D};delete a.label,delete a.enabled,S(!0),w(null);try{n?await M(`createSource`,{label:t,serviceId:j,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await M(`updateSource`,{id:r,label:t,serviceId:j,args:a,enabled:typeof i==`boolean`?i:!0}),await q(),b.close(),k.current=null}catch(e){w(ye(e))}finally{S(!1)}},[M,G,b,D,q,j]),le=n(()=>[{key:`label`,header:p(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>i(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:p(`system.wasteSettingsSources.module`,`Module`),sortValue:e=>e.module,render:e=>i(`span`,{className:`font-mono text-xs text-foreground-muted`,children:e.module})},{key:`enabled`,header:p(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>i(F,{variant:e.enabled?`success`:`default`,children:e.enabled?p(`system.wasteSettingsSources.on`,`On`):p(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>i(L,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":p(`system.wasteSettingsSources.delete`,`Delete {{label}}`,{label:e.label}),"data-testid":`waste-source-delete-${e.id}`,onClick:t=>{t.stopPropagation(),Y(e)},children:i(m,{className:`h-3.5 w-3.5 text-danger`})})}],[Y,p]),Z=b.state.mode===`new`,Q=Z||G!==null,ue=`${j}:${Z?`new`:G?.id??`closed`}`;return e(`div`,{className:`flex min-h-0 flex-col gap-4`,"data-testid":`waste-settings-sources`,children:[e(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[i(`p`,{className:`text-sm text-foreground-muted`,children:p(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),e(L,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>b.openNew(),children:[i(h,{className:`h-3.5 w-3.5`}),p(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),N.isError?i(`p`,{className:`text-sm text-danger`,children:p(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,N.isPending?i(re,{className:`h-32 w-full`}):i(ne,{columns:le,rows:R,rowKey:e=>e.id,pageSize:25,emptyMessage:p(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>b.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),i(se,{open:Q,onClose:()=>{b.close(),w(null),k.current=null},title:Z?p(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):p(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:te,width:`xl`,testId:`waste-source-editor`,error:C,footer:i(L,{type:`button`,size:`sm`,disabled:x||j===``,onClick:()=>void X(),children:x?p(`system.wasteSettingsSources.saving`,`Saving…`):p(`common.save`,`Save`)}),children:Q?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(oe,{schema:U,values:T,onChange:K},`picker:${A}:${V.length}`)}),j!==``&&H!==void 0?i(oe,{schema:H,values:D,onChange:O,bare:!0},ue):j!==``&&I.isPending?i(`p`,{className:`text-sm text-foreground-muted`,children:p(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):i(`p`,{className:`text-sm text-foreground-muted`,children:p(`system.wasteSettingsSources.chooseACountryAndService`,`Choose a country and service to see the required fields.`)})]}):null}),i(ce,{nodeId:`hub`,addonIds:[c],level:`global`,capability:f,hideSectionChrome:!0})]})}c();var $=1e4,Ee={"device-export":`exporters`,exporters:`exporters`,email:`email`,broker:`brokers`,brokers:`brokers`,"message-brokers":`brokers`,calendar:`calendars`,calendars:`calendars`,"calendar-source":`calendars`},De=[{sectionId:`exporters`,kind:`device-export`,labelKey:`system.connectivity.exporters`,icon:y,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:b,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:g,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:T,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function Oe(t,n,r,a){let o=me(w,t.kind),s=n.flatMap(n=>{let a=he(n,o);if(a===null)return[];let s=ge(n.processState);return[{id:n.addonId,name:n.displayName,fallbackIcon:t.icon,state:s.state,stateLabel:s.label,render:()=>i(Y,{addonId:n.addonId,displayName:n.displayName,capName:a,isActive:n.processState===`running`,badges:e(d,{children:[i(Me,{processState:n.processState}),i(Ne,{kind:t.kind,addonId:n.addonId})]}),lead:t.kind===`device-export`?i(ie,{addonId:n.addonId}):void 0,panels:je(t.kind,n.addonId,e=>r(`/devices/${e}`)),settingsContent:n.addonId===`waste-collections`?i(Te,{addonId:n.addonId,capName:a}):void 0})}]});return{id:t.sectionId,label:a(t.labelKey),entries:s,install:{capability:o[0]??t.kind,label:a(t.installLabelKey)}}}function ke({descriptor:e,rows:t,isLoading:r}){let{t:a}=z(),o=W(),s=n(()=>Oe(e,t,o,a),[e,t,o,a]);return i(le,{embedded:!0,icon:e.icon,title:a(e.labelKey),subtitle:null,groups:[s],isLoading:r,emptyTitle:a(e.emptyTitleKey),emptyDescription:a(e.emptyDescriptionKey)})}function Ae(){let{t:e}=z(),t=A(void 0,{refetchInterval:$}),[r,o]=V(),s=B(`/system/integrations`,{t:e,isAdmin:!0})??{icon:f,title:e(`admin.system.integrations.connectivity`,`Connectivity`)};a(()=>{let e=r.get(`tab`);if(e===null)return;let t=Ee[e];t===void 0||t===e||o(e=>{let n=new URLSearchParams(e);return n.set(`tab`,t),n},{replace:!0})},[r,o]);let c=n(()=>(t.data??[]).map(pe).filter(e=>e!==null),[t.data]),l=n(()=>De.map(n=>({id:n.sectionId,label:e(n.labelKey),ownedParams:U,content:i(ke,{descriptor:n,rows:c,isLoading:t.isLoading})})),[t.isLoading,c,e]);return i(G,{icon:s.icon,title:s.title,subtitle:e(`admin.system.integrations.externalSystemsThisHubTalks`,`External systems this hub talks to — exporters, email, brokers and calendar sources.`),defaultSection:`exporters`,sectionsLabel:`Connectivity sections`,sections:l})}function je(e,t,n){return e===`device-export`?[{id:`devices`,title:R.t(`admin.system.integrations.devices`,`Devices`),icon:O,placement:`end`,content:i(N,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:R.t(`admin.system.integrations.connections`,`Connections`),icon:g,content:i(de,{addonId:t})}]:[]}function Me({processState:e}){let{state:t,label:n}=ge(e);return i(F,{variant:t===`ok`?`success`:t===`error`?`danger`:`default`,className:`${X} capitalize`,children:n})}function Ne({kind:e,addonId:t}){return e===`broker`?i(Pe,{addonId:t}):e===`device-export`?i(Fe,{addonId:t}):null}function Pe({addonId:e}){let{t}=z(),{data:n}=I({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(F,{variant:`info`,className:X,children:o>0?t(`system.connectivity.connectionsConnected`,{count:a,connected:o}):t(`system.connectivity.connections`,{count:a})})}function Fe({addonId:e}){let{t}=z(),{data:n}=P({addonId:e},{refetchInterval:$,retry:!1}),r=S.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(F,{variant:a===`linked`?`success`:a===`error`?`danger`:`default`,className:X,children:t(`admin.system.integrations.exposed`,`{{linkState}} · {{exposedDeviceCount}} exposed`,{linkState:a,exposedDeviceCount:o})})}export{Ae as IntegrationsPage};
|