@camstack/addon-admin-ui 1.2.518 → 1.2.519
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 +6 -0
- package/dist/assets/{AddonAssetIcon-BC78agF0.js → AddonAssetIcon-Do54wTZ7.js} +1 -1
- package/dist/assets/Addons-6_-wfXxF.js +5 -0
- package/dist/assets/{AdminPage-Bjs-nytk.js → AdminPage-BmoKOToB.js} +1 -1
- package/dist/assets/{AdminSectionedPage-C2tP0k-6.js → AdminSectionedPage-BVRb5Xx_.js} +1 -1
- package/dist/assets/{AiProfiles-pD02-18U.js → AiProfiles-BDvnR_4v.js} +2 -2
- package/dist/assets/{BrokerEditorDialog-DqKS37Rv.js → BrokerEditorDialog-BGzqj_xB.js} +1 -1
- package/dist/assets/{Build-CS_dj5Hw.js → Build-Bt7G7Fl-.js} +4 -4
- package/dist/assets/{Calendars-DCACjLC6.js → Calendars-0sdMS0h-.js} +1 -1
- package/dist/assets/Cluster-C8z_ezr0.js +1 -0
- package/dist/assets/{ComposedDeviceEditDialog-BbJPDw4o.js → ComposedDeviceEditDialog-DMHHX26S.js} +1 -1
- package/dist/assets/CompositionBlockEditor-BN_Knc98.js +2 -0
- package/dist/assets/{CompositionEditorPage-DP0zujWv.js → CompositionEditorPage-jHRMkJAB.js} +1 -1
- package/dist/assets/Data-BLCk3bRU.js +2 -0
- package/dist/assets/{DeviceDetail-DkP5CZVE.js → DeviceDetail-WuonpcW1.js} +2 -2
- package/dist/assets/DeviceDoActionFields-QuNvGYh2.js +1 -0
- package/dist/assets/{Devices-mBnndiKl.js → Devices-uoz9LDSC.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-BcZOBNUY.js → EmbedPlayerPage-B-NlJHwD.js} +1 -1
- package/dist/assets/{History-DaqaF73n.js → History-Dvaf0xT6.js} +1 -1
- package/dist/assets/Identity-DfU1qxG7.js +1 -0
- package/dist/assets/IntegrationDetail-CRMLO8el.js +1 -0
- package/dist/assets/{IntegrationHub-CBRrUUwz.js → IntegrationHub-BWv5Fg0o.js} +1 -1
- package/dist/assets/Integrations-BzA5bIzc.js +1 -0
- package/dist/assets/{Integrations-LJTGYZMx.js → Integrations-D76PKsKH.js} +1 -1
- package/dist/assets/{Library-DpuCsSIr.js → Library-CGtKaxY5.js} +1 -1
- package/dist/assets/Locations-6OyPx_9Z.js +3 -0
- package/dist/assets/{Logs-D1cD43iv.js → Logs-73QHCsO8.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-uxChMknO.js → MaskShapeCanvas-B599Qff8.js} +1 -1
- package/dist/assets/{MotionZonesSettings--b5THRq8.js → MotionZonesSettings-kGwQFrli.js} +1 -1
- package/dist/assets/{MyAccess-CM3VRR_i.js → MyAccess-aAaXYWh8.js} +1 -1
- package/dist/assets/Network-81XYmJI_.js +1 -0
- package/dist/assets/{NodeAddonsSettingsPanel-09f8jHVS.js → NodeAddonsSettingsPanel-4ZIViPki.js} +1 -1
- package/dist/assets/Notifications-C3Q-zMJT.js +1 -0
- package/dist/assets/{Pipeline-Bbec-Y6A.js → Pipeline-BU1kCg0o.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-C4vaTevi.js → PrivacyMaskSettings-D3OKCG5L.js} +1 -1
- package/dist/assets/Recordings-X80n4tx4.js +1 -0
- package/dist/assets/{RemoteGrid-BEi9hXEQ.js → RemoteGrid-BC7RcI7j.js} +1 -1
- package/dist/assets/{ScanNetworkModal-Da7Ia5fk.js → ScanNetworkModal-B-q8sfOu.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-CRNON98X.js → SceneMonitorEditor-BWwBdarY.js} +1 -1
- package/dist/assets/SessionsList-BTc6C0Y8.js +2 -0
- package/dist/assets/{Showroom-B8oIkjzd.js → Showroom-GvVEKdMA.js} +1 -1
- package/dist/assets/{System-BAxBoDDo.js → System-8ayhyG8M.js} +1 -1
- package/dist/assets/{Templates-BzDGxVCB.js → Templates-DIMuzzu_.js} +1 -1
- package/dist/assets/{Terminal-DOuAcBhK.js → Terminal-CwX9MQHx.js} +3 -3
- package/dist/assets/{Viewer-D8Z0j_5f.js → Viewer-BzxcMFB5.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CAe-SPFx.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DvIAWVsR.js} +1 -1
- package/dist/assets/{addon-icons-context-BFP9swAt.js → addon-icons-context-D-3KCr36.js} +1 -1
- package/dist/assets/{archive-Ci7cm4G6.js → archive-sIPC64K9.js} +1 -1
- package/dist/assets/{assignment-candidates-VjT4o6uu.js → assignment-candidates-C_UoiwJK.js} +1 -1
- package/dist/assets/{authed-media-Cez6z7Na.js → authed-media-BE3neYoh.js} +1 -1
- package/dist/assets/{bell-off-BQ5f8XC0.js → bell-off-DBYFNI8u.js} +1 -1
- package/dist/assets/{board-model-BTA-bFlQ.js → board-model-CeWFKx9n.js} +1 -1
- package/dist/assets/{boxes-Czy7yEhH.js → boxes-5j10egHw.js} +1 -1
- package/dist/assets/circle-slash-VFJ46qWN.js +1 -0
- package/dist/assets/client-BmfSvq-t.js +674 -0
- package/dist/assets/{cloud-upload-BA2sS5fo.js → cloud-upload-CUkN17bl.js} +1 -1
- package/dist/assets/crop-DwwjG8X9.js +1 -0
- package/dist/assets/{device-integration-icon-DSBE3o4D.js → device-integration-icon-BOTb2lo-.js} +1 -1
- package/dist/assets/device-picker-model-C2rxDYB3.js +1 -0
- package/dist/assets/dist-CGa31Bpn.js +674 -0
- package/dist/assets/{dist-eJJt48HH.js → dist-dCyhYCji.js} +1 -1
- package/dist/assets/{file-up-CoCeS48c.js → file-up-DF9281zn.js} +1 -1
- package/dist/assets/format-Ctn7h3o7.js +1 -0
- package/dist/assets/{hard-drive-download-D1726cbL.js → hard-drive-download-YoDQjZ6G.js} +1 -1
- package/dist/assets/{hostInit-DrD-30zD.js → hostInit-BqZN7ExA.js} +1 -1
- package/dist/assets/i18n-CWf2gqjI.js +1 -0
- package/dist/assets/{icons-BMj2QemZ.js → icons-CUtj9rug.js} +1 -1
- package/dist/assets/{index-DhFn-OXx.js → index-3I8aJwfA.js} +3 -3
- package/dist/assets/{key-Cuez9yo6.js → key-BpA5yjS5.js} +1 -1
- package/dist/assets/{key-round-aeHPqKM8.js → key-round-BbwlZYgP.js} +1 -1
- package/dist/assets/{layers-CR_BGB4-.js → layers-Bxrx5612.js} +1 -1
- package/dist/assets/{linked-devices-model-DFhvKJk0.js → linked-devices-model-4X2JNgtv.js} +1 -1
- package/dist/assets/{list-ordered-C8f5XMRn.js → list-ordered-BQZRweJv.js} +1 -1
- package/dist/assets/{location-owned-usage-DtY0j8BQ.js → location-owned-usage-exyIAC5r.js} +1 -1
- package/dist/assets/{log-in-CHoY0fr_.js → log-in-BFtLVkKt.js} +1 -1
- package/dist/assets/{memory-stick-BEIQDnvw.js → memory-stick-65f0Nh--.js} +1 -1
- package/dist/assets/{message-square-plus-BRE3KNcy.js → message-square-plus-Cz97-8Ea.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-193177ad.js → mf-entry-bootstrap-0-4f81b329.js} +2 -2
- package/dist/assets/{mic-off-DdBze9n7.js → mic-off-C90AfhxH.js} +1 -1
- package/dist/assets/{monitor-off-BlV0-S9V.js → monitor-off-Kj0KouMn.js} +1 -1
- package/dist/assets/{monitor-smartphone-dysQUSro.js → monitor-smartphone-dJjQFha0.js} +1 -1
- package/dist/assets/mount-C2rxDYB3.js +1 -0
- package/dist/assets/{player-overlays-gMD_rhHz.js → player-overlays-Cl9fdVyE.js} +1 -1
- package/dist/assets/{recycle-BA7-S0W8.js → recycle-B_n3HNql.js} +1 -1
- package/dist/assets/remoteEntry-Bgu2wj6M.js +1 -0
- package/dist/assets/{ruler-D9Jk5se7.js → ruler-DFksgfFc.js} +1 -1
- package/dist/assets/{scan-eye-C8pDlR8P.js → scan-eye-Dcs85qj4.js} +1 -1
- package/dist/assets/{scissors-DXW7xXbW.js → scissors-DpVQCMjY.js} +1 -1
- package/dist/assets/{search-x-D_xVJpAe.js → search-x-BUboqisx.js} +1 -1
- package/dist/assets/{send-rR1Ku0wT.js → send-i8_gi4Wv.js} +1 -1
- package/dist/assets/{settings-2-D4IIivH2.js → settings-2-BuOeZPiK.js} +1 -1
- package/dist/assets/{shapes-w5Fgi2N8.js → shapes-DGstG7DR.js} +1 -1
- package/dist/assets/{sigma-CaOfCqqr.js → sigma-B0KIxXLC.js} +1 -1
- package/dist/assets/{speaker-CwxMftpn.js → speaker-C7Ctczma.js} +1 -1
- package/dist/assets/src-Cjqv1L1_.js +67 -0
- package/dist/assets/{step-inspector-model-DjL5SesH.js → step-inspector-model-CSluC3K5.js} +1 -1
- package/dist/assets/{table-2-8ixw9N56.js → table-2-Bi2N6ehZ.js} +1 -1
- package/dist/assets/{timer-reset-CKI15cld.js → timer-reset-C-DbgYsd.js} +1 -1
- package/dist/assets/{unlink-CCyI_xx8.js → unlink-DOrqvhrS.js} +1 -1
- package/dist/assets/{usb-DEn49T2d.js → usb-D21IcPqp.js} +1 -1
- package/dist/assets/{use-device-bound-caps-T07YegIU.js → use-device-bound-caps-DUbLU0h-.js} +1 -1
- package/dist/assets/{use-scenes-feed-D5RNpqtT.js → use-scenes-feed-Cc_FfCf0.js} +1 -1
- package/dist/assets/{use-stationary-objects-DD6qOZ6v.js → use-stationary-objects-C9cIQpEH.js} +1 -1
- package/dist/assets/useEventInvalidation-C2rxDYB3.js +1 -0
- package/dist/assets/{useNodeUrlSelection-DR_meIYe.js → useNodeUrlSelection-BmuHzJCe.js} +1 -1
- package/dist/assets/user-round-CCHLAyrG.js +1 -0
- package/dist/assets/{user-x-DQZ1obZM.js → user-x-dk19_EsK.js} +1 -1
- package/dist/assets/{variable-BxoapzPU.js → variable-jCYthbGt.js} +1 -1
- package/dist/assets/{video-BnPjevi_.js → video-BbvU47vV.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BhdwB_BG.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DOT_MvML.js} +2 -2
- package/dist/index.html +9 -9
- package/dist/server/addon.js +67 -7
- package/package.json +1 -1
- package/dist/assets/Addons-CQDH0HWD.js +0 -5
- package/dist/assets/Cluster-BrqN0cCD.js +0 -1
- package/dist/assets/CompositionBlockEditor-Dmmow4DP.js +0 -2
- package/dist/assets/Data-CqOCFJFz.js +0 -2
- package/dist/assets/DeviceDoActionFields-H3tNQT9N.js +0 -1
- package/dist/assets/Identity-_pfy495m.js +0 -1
- package/dist/assets/IntegrationDetail-CoIH_IOT.js +0 -1
- package/dist/assets/Integrations-BgQD7R9-.js +0 -1
- package/dist/assets/Locations-itQSSJiL.js +0 -3
- package/dist/assets/Network-Bu0zlJZn.js +0 -1
- package/dist/assets/Notifications-CNGSWjOJ.js +0 -1
- package/dist/assets/Recordings-Ccv0flf6.js +0 -1
- package/dist/assets/SessionsList-BT-nRXks.js +0 -2
- package/dist/assets/circle-slash-Bj89nMWC.js +0 -1
- package/dist/assets/client-Btf9JC4a.js +0 -674
- package/dist/assets/crop-Cf489T6c.js +0 -1
- package/dist/assets/device-picker-model-BGDU8PR0.js +0 -1
- package/dist/assets/dist-Ca-InGm-.js +0 -674
- package/dist/assets/i18n-Bz5ob6rD.js +0 -1
- package/dist/assets/mount-BGDU8PR0.js +0 -1
- package/dist/assets/remoteEntry-BvdQpL1M.js +0 -1
- package/dist/assets/src-D55o373U.js +0 -67
- package/dist/assets/useEventInvalidation-BGDU8PR0.js +0 -1
- package/dist/assets/user-round-Dds3N7A4.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{Dn as f,Fn as p,Ht as m,Pn as h,Vn as g,bt as _,cr as v,dt as ee,fr as y,hn as b,st as x}from"./player-overlays-gMD_rhHz.js";import{tn as S,va as te,yi as C}from"./client-Btf9JC4a.js";import{g as w,s as T}from"./video-BnPjevi_.js";import{t as E}from"./log-in-CHoY0fr_.js";import{t as D}from"./monitor-smartphone-dysQUSro.js";import{t as ne}from"./recycle-BA7-S0W8.js";import{At as O,Dn as re,Ma as k,Nr as ie,Oa as A,Pa as j,ci as M,dr as N,ei as P,gt as ae,ka as F,kt as I,mt as oe,no as se,zi as L}from"./src-D55o373U.js";import{t as R}from"./i18n-Bz5ob6rD.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-DhFn-OXx.js";import{t as G}from"./AdminSectionedPage-C2tP0k-6.js";import{n as K,r as q,t as J}from"./BrokerEditorDialog-DqKS37Rv.js";import{t as ce}from"./NodeAddonsSettingsPanel-09f8jHVS.js";import{n as Y,r as X,t as le}from"./IntegrationHub-CBRrUUwz.js";c();var Z={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Q({status:e}){return i(M,{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=x(),[f,p]=o(null),h=j({onSuccess:e=>p(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>p({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),ee=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(P,{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(E,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signIn`)]}),S&&e(P,{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(T,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signOut`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>h.mutate({id:t.id,addonId:t.addonId}),disabled:h.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[h.isPending?i(y,{className:`h-3 w-3 animate-spin`}):i(_,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(g,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(P,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{ee()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(y,{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=F({}),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}),m=n(()=>new Map(f.map(e=>[e.kind,e.label])),[f]),h=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(P,{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(p,{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(y,{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=h.get(e.kind);return i(ue,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},kindLabel:m.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:h}=z(),g=ee(),_=l(),v=x(),y=oe({editKey:`wasteEdit`,newKey:`wasteNew`}),[b,S]=o(!1),[te,C]=o(null),[w,T]=o({countryId:``,serviceId:``}),[E,D]=o({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),O=t(null),k=typeof w.countryId==`string`?w.countryId:``,A=typeof w.serviceId==`string`?w.serviceId:``,j=r((e,t)=>g.trpcClient.addons.custom.mutate({addonId:c,action:e,input:t}),[c,g]),F=s({queryKey:[..._e,c],queryFn:async()=>xe(await j(`listSources`,{}))}),I=s({queryKey:[...ve,c],queryFn:async()=>Se(await j(`listCountries`,{}))}),se=s({queryKey:[`wasteCollections`,`listServices`,c,k],enabled:k!==``,queryFn:async()=>Ce(await j(`listServices`,{countryId:k}))}),L=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),R=F.data??[],B=I.data??[],V=se.data??[],H=be(L.data)?L.data:void 0,U=n(()=>we(B,k===``?[]:V,k),[B,V,k]),W=y.state,G=W.mode===`edit`?R.find(e=>e.id===W.id)??null:null;a(()=>{if(y.state.mode===`edit`&&G!==null){let e=`edit:${G.id}`;if(O.current===e)return;O.current=e,C(null),T({countryId:G.countryId??``,serviceId:G.serviceId??``}),D(G.formValues===void 0?{label:G.label,enabled:G.enabled}:{...G.formValues});return}if(y.state.mode===`new`){if(O.current===`new`)return;O.current=`new`,C(null),T({countryId:``,serviceId:``}),D({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[G,y.state]),a(()=>{if(y.state.mode!==`new`||A===``)return;let e=V.find(e=>e.id===A);e&&D(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[y.state.mode,A,V]);let K=r(e=>{T(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=>j(`deleteSource`,{id:e}),onSuccess:async()=>q()}),Y=r(async e=>{await v({title:h(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:h(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:h(`common.delete`,`Delete`),cancelLabel:h(`common.cancel`,`Cancel`),variant:`danger`})&&(await J.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),O.current=null))},[v,J,y,h]),X=r(async()=>{let e=E.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){C(`Label is required.`);return}if(A===``){C(`Pick a country and a service.`);return}let n=y.state.mode===`new`,r=G?.id;if(!n&&(r===void 0||r===``)){C(`That source is no longer available.`);return}let i=E.enabled,a={...E};delete a.label,delete a.enabled,S(!0),C(null);try{n?await j(`createSource`,{label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await j(`updateSource`,{id:r,label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}),await q(),y.close(),O.current=null}catch(e){C(ye(e))}finally{S(!1)}},[j,G,y,E,q,A]),le=n(()=>[{key:`label`,header:h(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>i(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:h(`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:h(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>i(M,{variant:e.enabled?`success`:`default`,children:e.enabled?h(`system.wasteSettingsSources.on`,`On`):h(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>i(P,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":h(`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,h]),Z=y.state.mode===`new`,Q=Z||G!==null,ue=`${A}:${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:h(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),e(P,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[i(p,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),F.isError?i(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,F.isPending?i(ie,{className:`h-32 w-full`}):i(re,{columns:le,rows:R,rowKey:e=>e.id,pageSize:25,emptyMessage:h(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>y.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),i(ae,{open:Q,onClose:()=>{y.close(),C(null),O.current=null},title:Z?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:ne,width:`xl`,testId:`waste-source-editor`,error:te,footer:i(P,{type:`button`,size:`sm`,disabled:b||A===``,onClick:()=>void X(),children:b?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:Q?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(N,{schema:U,values:w,onChange:K},`picker:${k}:${V.length}`)}),A!==``&&H!==void 0?i(N,{schema:H,values:E,onChange:D,bare:!0},ue):A!==``&&L.isPending?i(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):i(`p`,{className:`text-sm text-foreground-muted`,children:h(`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:b,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:v,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:f,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:w,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function Oe(t,n,r,a){let o=me(S,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(O,{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=L(void 0,{refetchInterval:$}),[r,o]=W(),s=B(`/system/integrations`,{t:e,isAdmin:!0})??{icon:h,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:D,placement:`end`,content:i(I,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:R.t(`admin.system.integrations.connections`,`Connections`),icon:f,content:i(de,{addonId:t})}]:[]}function Me({processState:e}){let{state:t,label:n}=ge(e);return i(M,{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}=A({addonId:e},{refetchInterval:$,retry:!1}),r=te.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(M,{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}=se({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(M,{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{Dn as f,Fn as p,Ht as m,Pn as h,Vn as g,bt as _,cr as v,dt as ee,fr as y,hn as b,st as x}from"./player-overlays-Cl9fdVyE.js";import{tn as S,va as te,yi as C}from"./client-BmfSvq-t.js";import{g as w,s as T}from"./video-BbvU47vV.js";import{t as E}from"./log-in-BFtLVkKt.js";import{t as D}from"./monitor-smartphone-dJjQFha0.js";import{t as ne}from"./recycle-B_n3HNql.js";import{At as O,Dn as re,Ma as k,Nr as ie,Oa as A,Pa as j,ci as M,dr as N,ei as P,gt as ae,ka as F,kt as I,mt as oe,no as se,zi as L}from"./src-Cjqv1L1_.js";import{t as R}from"./i18n-CWf2gqjI.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-3I8aJwfA.js";import{t as G}from"./AdminSectionedPage-BVRb5Xx_.js";import{n as K,r as q,t as J}from"./BrokerEditorDialog-BGzqj_xB.js";import{t as ce}from"./NodeAddonsSettingsPanel-4ZIViPki.js";import{n as Y,r as X,t as le}from"./IntegrationHub-BWv5Fg0o.js";c();var Z={connected:`success`,connecting:`warning`,disconnected:`default`,"auth-failed":`danger`,unreachable:`danger`,error:`danger`};function Q({status:e}){return i(M,{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=x(),[f,p]=o(null),h=j({onSuccess:e=>p(e.ok?{ok:!0}:{ok:!1,error:e.error}),onError:e=>p({ok:!1,error:e instanceof Error?e.message:String(e)})}),v=k({onSuccess:()=>{u.invalidateQueries({queryKey:[[`broker`,`list`]]})}}),ee=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(P,{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(E,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signIn`)]}),S&&e(P,{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(T,{className:`h-3 w-3`}),` `,c(`brokers.brokerManager.signOut`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>h.mutate({id:t.id,addonId:t.addonId}),disabled:h.isPending,title:c(`brokers.brokerManager.testConnection`,`Test connection`),children:[h.isPending?i(y,{className:`h-3 w-3 animate-spin`}):i(_,{className:`h-3 w-3`}),c(`brokers.brokerManager.test`,`Test`)]}),e(P,{variant:`outline`,size:`sm`,onClick:()=>s(t),title:c(`common.edit`,`Edit`),children:[i(g,{className:`h-3 w-3`}),` `,c(`common.edit`)]}),e(P,{variant:`outline`,size:`sm`,className:`border-danger/40 text-danger hover:bg-danger/10`,onClick:()=>{ee()},disabled:v.isPending,title:c(`common.delete`,`Delete`),children:[v.isPending?i(y,{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=F({}),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}),m=n(()=>new Map(f.map(e=>[e.kind,e.label])),[f]),h=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(P,{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(p,{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(y,{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=h.get(e.kind);return i(ue,{broker:e,...t?.connect===void 0?{}:{interactiveConnectPath:t.connect},...t?.disconnect===void 0?{}:{interactiveDisconnectPath:t.disconnect},kindLabel:m.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:h}=z(),g=ee(),_=l(),v=x(),y=oe({editKey:`wasteEdit`,newKey:`wasteNew`}),[b,S]=o(!1),[te,C]=o(null),[w,T]=o({countryId:``,serviceId:``}),[E,D]=o({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0}),O=t(null),k=typeof w.countryId==`string`?w.countryId:``,A=typeof w.serviceId==`string`?w.serviceId:``,j=r((e,t)=>g.trpcClient.addons.custom.mutate({addonId:c,action:e,input:t}),[c,g]),F=s({queryKey:[..._e,c],queryFn:async()=>xe(await j(`listSources`,{}))}),I=s({queryKey:[...ve,c],queryFn:async()=>Se(await j(`listCountries`,{}))}),se=s({queryKey:[`wasteCollections`,`listServices`,c,k],enabled:k!==``,queryFn:async()=>Ce(await j(`listServices`,{countryId:k}))}),L=s({queryKey:[`wasteCollections`,`serviceFormSchema`,c,A],enabled:A!==``,queryFn:async()=>j(`serviceFormSchema`,{serviceId:A})}),R=F.data??[],B=I.data??[],V=se.data??[],H=be(L.data)?L.data:void 0,U=n(()=>we(B,k===``?[]:V,k),[B,V,k]),W=y.state,G=W.mode===`edit`?R.find(e=>e.id===W.id)??null:null;a(()=>{if(y.state.mode===`edit`&&G!==null){let e=`edit:${G.id}`;if(O.current===e)return;O.current=e,C(null),T({countryId:G.countryId??``,serviceId:G.serviceId??``}),D(G.formValues===void 0?{label:G.label,enabled:G.enabled}:{...G.formValues});return}if(y.state.mode===`new`){if(O.current===`new`)return;O.current=`new`,C(null),T({countryId:``,serviceId:``}),D({label:h(`system.wasteSettingsSources.newSource`,`New source`),enabled:!0})}},[G,y.state]),a(()=>{if(y.state.mode!==`new`||A===``)return;let e=V.find(e=>e.id===A);e&&D(t=>{let n=t.label;return typeof n==`string`&&n!==``&&n!==`New source`?t:{...t,label:e.title}})},[y.state.mode,A,V]);let K=r(e=>{T(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=>j(`deleteSource`,{id:e}),onSuccess:async()=>q()}),Y=r(async e=>{await v({title:h(`system.wasteSettingsSources.deleteWasteSource`,`Delete waste source?`),message:h(`system.wasteSettingsSources.removeItsCalendarUnderSystem`,`Remove “{{label}}” ({{id}}). Its calendar under System → Calendars is dropped.`,{label:e.label,id:e.id}),confirmLabel:h(`common.delete`,`Delete`),cancelLabel:h(`common.cancel`,`Cancel`),variant:`danger`})&&(await J.mutateAsync(e.id),y.state.mode===`edit`&&y.state.id===e.id&&(y.close(),O.current=null))},[v,J,y,h]),X=r(async()=>{let e=E.label,t=typeof e==`string`&&e.trim()!==``?e.trim():``;if(t===``){C(`Label is required.`);return}if(A===``){C(`Pick a country and a service.`);return}let n=y.state.mode===`new`,r=G?.id;if(!n&&(r===void 0||r===``)){C(`That source is no longer available.`);return}let i=E.enabled,a={...E};delete a.label,delete a.enabled,S(!0),C(null);try{n?await j(`createSource`,{label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}):r!==void 0&&await j(`updateSource`,{id:r,label:t,serviceId:A,args:a,enabled:typeof i==`boolean`?i:!0}),await q(),y.close(),O.current=null}catch(e){C(ye(e))}finally{S(!1)}},[j,G,y,E,q,A]),le=n(()=>[{key:`label`,header:h(`system.wasteSettingsSources.label`,`Label`),sortValue:e=>e.label,render:e=>i(`span`,{className:`text-sm text-foreground`,children:e.label})},{key:`module`,header:h(`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:h(`system.wasteSettingsSources.enabled`,`Enabled`),sortValue:e=>+!!e.enabled,render:e=>i(M,{variant:e.enabled?`success`:`default`,children:e.enabled?h(`system.wasteSettingsSources.on`,`On`):h(`system.wasteSettingsSources.off`,`Off`)})},{key:`actions`,header:``,notSortableReason:`actions`,render:e=>i(P,{type:`button`,size:`sm`,variant:`ghost`,"aria-label":h(`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,h]),Z=y.state.mode===`new`,Q=Z||G!==null,ue=`${A}:${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:h(`system.wasteSettingsSources.pickACountryAndA`,`Pick a country and a service — configuration fields come from that HACS source.`)}),e(P,{type:`button`,size:`sm`,"data-testid":`waste-sources-add`,onClick:()=>y.openNew(),children:[i(p,{className:`h-3.5 w-3.5`}),h(`system.wasteSettingsSources.addSource`,`Add source`)]})]}),F.isError?i(`p`,{className:`text-sm text-danger`,children:h(`system.wasteSettingsSources.couldNotLoadSources`,`Could not load sources.`)}):null,F.isPending?i(ie,{className:`h-32 w-full`}):i(re,{columns:le,rows:R,rowKey:e=>e.id,pageSize:25,emptyMessage:h(`system.wasteSettingsSources.noWasteSourcesYetAdd`,`No waste sources yet. Add one to register a municipal service.`),onRowClick:e=>y.openEdit(e.id),defaultSort:{columnKey:`label`,dir:`asc`}}),i(ae,{open:Q,onClose:()=>{y.close(),C(null),O.current=null},title:Z?h(`system.wasteSettingsSources.addWasteSource`,`Add waste source`):h(`system.wasteSettingsSources.edit`,`Edit {{value1}}`,{value1:G?.label??`source`}),icon:ne,width:`xl`,testId:`waste-source-editor`,error:te,footer:i(P,{type:`button`,size:`sm`,disabled:b||A===``,onClick:()=>void X(),children:b?h(`system.wasteSettingsSources.saving`,`Saving…`):h(`common.save`,`Save`)}),children:Q?e(d,{children:[i(`div`,{"data-testid":`waste-country-service`,children:i(N,{schema:U,values:w,onChange:K},`picker:${k}:${V.length}`)}),A!==``&&H!==void 0?i(N,{schema:H,values:E,onChange:D,bare:!0},ue):A!==``&&L.isPending?i(`p`,{className:`text-sm text-foreground-muted`,children:h(`system.wasteSettingsSources.loadingFields`,`Loading fields…`)}):i(`p`,{className:`text-sm text-foreground-muted`,children:h(`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:b,installLabelKey:`system.connectivity.exportersInstall`,emptyTitleKey:`system.connectivity.exportersEmptyTitle`,emptyDescriptionKey:`system.connectivity.exportersEmptyDescription`},{sectionId:`email`,kind:`email`,labelKey:`system.connectivity.email`,icon:v,installLabelKey:`system.connectivity.emailInstall`,emptyTitleKey:`system.connectivity.emailEmptyTitle`,emptyDescriptionKey:`system.connectivity.emailEmptyDescription`},{sectionId:`brokers`,kind:`broker`,labelKey:`system.connectivity.brokers`,icon:f,installLabelKey:`system.connectivity.brokersInstall`,emptyTitleKey:`system.connectivity.brokersEmptyTitle`,emptyDescriptionKey:`system.connectivity.brokersEmptyDescription`},{sectionId:`calendars`,kind:`calendar`,labelKey:`system.connectivity.calendars`,icon:w,installLabelKey:`system.connectivity.calendarsInstall`,emptyTitleKey:`system.connectivity.calendarsEmptyTitle`,emptyDescriptionKey:`system.connectivity.calendarsEmptyDescription`}];function Oe(t,n,r,a){let o=me(S,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(O,{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=L(void 0,{refetchInterval:$}),[r,o]=W(),s=B(`/system/integrations`,{t:e,isAdmin:!0})??{icon:h,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:D,placement:`end`,content:i(I,{addonId:t,onOpenDevice:n,showSetup:!1})}]:e===`broker`?[{id:`connections`,title:R.t(`admin.system.integrations.connections`,`Connections`),icon:f,content:i(de,{addonId:t})}]:[]}function Me({processState:e}){let{state:t,label:n}=ge(e);return i(M,{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}=A({addonId:e},{refetchInterval:$,retry:!1}),r=te.safeParse(n);if(!r.success)return null;let{brokerCount:a,connectedCount:o}=r.data;return i(M,{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}=se({addonId:e},{refetchInterval:$,retry:!1}),r=C.safeParse(n);if(!r.success)return null;let{linkState:a,exposedDeviceCount:o}=r.data;return i(M,{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};
|