@fastybird/smart-panel-admin 1.1.0-alpha.15 → 1.1.0-alpha.16
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/dist/assets/{card-add-form-E8HD5P7x.js → card-add-form-CwVNfOa0.js} +1 -1
- package/dist/assets/{card-edit-form-krG-iKtG.js → card-edit-form-CSyu6tst.js} +1 -1
- package/dist/assets/{components-BvH9AXH1.js → components-C29cEP3E.js} +1 -1
- package/dist/assets/{components-V875k_UY.js → components-ChpIwZ2c.js} +1 -1
- package/dist/assets/{components-DwaYj6Cf.js → components-DOu6SAYU.js} +1 -1
- package/dist/assets/{components-Zbysysf4.js → components-EQDhXTcZ.js} +2 -2
- package/dist/assets/components-I6YluL_k.js +1 -0
- package/dist/assets/{components-fOCQ1-ME.js → components-g-LPjaFP.js} +1 -1
- package/dist/assets/{components-DGTDixMX.js → components-xe0tG-zv.js} +2 -2
- package/dist/assets/composables-2NuyfNXO.js +1 -0
- package/dist/assets/{composables-CEiy-ejt.js → composables-Cpk78oG1.js} +1 -1
- package/dist/assets/{composables-DHJBUFeX.js → composables-D2O7i4W5.js} +1 -1
- package/dist/assets/{composables-DDdN4T8e.js → composables-DeXiqZuU.js} +1 -1
- package/dist/assets/{dashboard-DtLQGoww.js → dashboard-YUP0xrqH.js} +2 -2
- package/dist/assets/devices-DQl0qr-s.js +2 -0
- package/dist/assets/devices.constants-DHQemX04.js +1 -0
- package/dist/assets/index-CV45di_J.css +1 -0
- package/dist/assets/{index-CgcWJbCW.js → index-W6henE9u.js} +5 -5
- package/dist/assets/{keys-DghNVBR5.js → keys-DMEIfK2a.js} +1 -1
- package/dist/assets/{page-configure-DNI83REl.js → page-configure-Dn69RQ5P.js} +1 -1
- package/dist/assets/{page-configure-B_5W0yDK.js → page-configure-Dz17Sp3H.js} +1 -1
- package/dist/assets/{scene-add-form-B5GZmYBe.js → scene-add-form-telggkNn.js} +1 -1
- package/dist/assets/{scene-edit-form-BpyqxJsJ.js → scene-edit-form-D6fUKT6Q.js} +1 -1
- package/dist/assets/{spaces-CJibihNe.js → spaces-DVdwHxsH.js} +2 -2
- package/dist/assets/{spaces-home-control.constants-Bmyd_bxK.js → spaces-home-control.constants-BgmjmN0q.js} +1 -1
- package/dist/assets/{system-BHTxM7b2.js → system-EoTYvhDY.js} +2 -2
- package/dist/assets/{useDevicesPlugins-C5GU_Od9.js → useDevicesPlugins-DEYJEOHX.js} +1 -1
- package/dist/assets/{view-card-add-6cJ2Oi8A.js → view-card-add-pt5m96qu.js} +1 -1
- package/dist/assets/{view-card-edit-Cj0ZaAZc.js → view-card-edit-DXjl5oBU.js} +1 -1
- package/dist/assets/{view-channel-DhNP8G5E.js → view-channel-Ba138KV7.js} +1 -1
- package/dist/assets/{view-channel-add-Dq2g9C2Q.js → view-channel-add-DuoPUzeY.js} +1 -1
- package/dist/assets/{view-channel-edit-CRBGnNO1.js → view-channel-edit-DQ6tJADU.js} +1 -1
- package/dist/assets/{view-channel-property-add-CiPpsqLa.js → view-channel-property-add-CnTLdMir.js} +1 -1
- package/dist/assets/{view-channel-property-edit-DgKq8lY_.js → view-channel-property-edit-1YMqTX0A.js} +1 -1
- package/dist/assets/{view-channels-V4deGym0.js → view-channels-CGqkcr4L.js} +1 -1
- package/dist/assets/{view-data-source-add-Duyt58zK.js → view-data-source-add-BwwcOapn.js} +1 -1
- package/dist/assets/{view-data-source-add-BVOljAgp.js → view-data-source-add-C-YsEqNf.js} +1 -1
- package/dist/assets/{view-data-source-edit-BrHBWN9M.js → view-data-source-edit-3a7uStGk.js} +1 -1
- package/dist/assets/{view-data-source-edit-DAp5tr92.js → view-data-source-edit-Bjpg7BqJ.js} +1 -1
- package/dist/assets/{view-device-HW-FYK6m.js → view-device-CbiJT-WF.js} +1 -1
- package/dist/assets/{view-device-add-h9XeQkR4.js → view-device-add-BbaM0dhl.js} +1 -1
- package/dist/assets/{view-device-control-k8ySBs5q.js → view-device-control-DaaVC0p8.js} +1 -1
- package/dist/assets/{view-device-edit-B6w4Pwoa.js → view-device-edit-Bmi8qely.js} +1 -1
- package/dist/assets/{view-devices-CuSYafue.js → view-devices-D3bJGe5R.js} +1 -1
- package/dist/assets/{view-devices-wizard-CVWxP2qH.js → view-devices-wizard-Bie75MnV.js} +1 -1
- package/dist/assets/{view-display-WkLUe2li.js → view-display-BPX9RiY5.js} +1 -1
- package/dist/assets/{view-display-edit-CVsjKYSe.js → view-display-edit-C1nr56vB.js} +1 -1
- package/dist/assets/{view-displays-DEfXxQsx.js → view-displays-DvlfLyrG.js} +1 -1
- package/dist/assets/{view-extension-detail-Dt-TRcGZ.js → view-extension-detail-DFw0OsMF.js} +1 -1
- package/dist/assets/{view-extensions-Djz5EFGI.js → view-extensions-BA9i1fyS.js} +1 -1
- package/dist/assets/{view-onboarding-DHUjhce1.js → view-onboarding-BHdDgVMj.js} +1 -1
- package/dist/assets/{view-page-add-B6B4ZDvT.js → view-page-add-CMkgrgRF.js} +1 -1
- package/dist/assets/{view-page-configure-CN7s71ow.js → view-page-configure-JhXEhrod.js} +1 -1
- package/dist/assets/{view-page-configure-CXwMF5sY.js → view-page-configure-ho3B4Gtr.js} +1 -1
- package/dist/assets/{view-page-edit-Cd0oAyro.js → view-page-edit-ubc81fqj.js} +1 -1
- package/dist/assets/{view-pages-BA2aoTFo.js → view-pages-CZR6c3uY.js} +1 -1
- package/dist/assets/{view-scene-add-CcmfdYfo.js → view-scene-add-H5f00zTk.js} +1 -1
- package/dist/assets/{view-scene-edit-CJnJk4xt.js → view-scene-edit-BYUTky-m.js} +1 -1
- package/dist/assets/{view-scenes-CzLR08or.js → view-scenes-eWQiAb02.js} +1 -1
- package/dist/assets/{view-simulator-device-wizard-DULtvgds.js → view-simulator-device-wizard-xcGSPrEU.js} +1 -1
- package/dist/assets/{view-space-add-bXDK88NX.js → view-space-add-DLF9C3Az.js} +1 -1
- package/dist/assets/{view-space-configure-sQY9tDyB.js → view-space-configure-LA94Bfj9.js} +1 -1
- package/dist/assets/{view-space-edit-DPp0vLpb.js → view-space-edit-CVBH6AaO.js} +1 -1
- package/dist/assets/{view-space-plugin-BoJTYQbN.js → view-space-plugin-DALFumLq.js} +1 -1
- package/dist/assets/{view-spaces-D76KLcmr.js → view-spaces-BpplLq0s.js} +1 -1
- package/dist/assets/{view-spaces-wizard-CbbVSvgt.js → view-spaces-wizard-DTzT5Ajh.js} +1 -1
- package/dist/assets/{view-stats-BdFxYCJ1.js → view-stats-DgbiVpuT.js} +1 -1
- package/dist/assets/{view-system-backups-DupEuFGr.js → view-system-backups-BUaKjaoI.js} +1 -1
- package/dist/assets/{view-system-info-BRiwO4VM.js → view-system-info-DOVllJ0V.js} +1 -1
- package/dist/assets/{view-system-log-detail-Bilyx2Rg.js → view-system-log-detail-D19o4Zoo.js} +1 -1
- package/dist/assets/{view-system-logs-CCBxaNJd.js → view-system-logs-CnF-VVpx.js} +1 -1
- package/dist/assets/{view-tile-add-Bv0G2Mux.js → view-tile-add-ChtKYIGF.js} +1 -1
- package/dist/assets/{view-tile-add-ByeFvQ1C.js → view-tile-add-DNOx9gjy.js} +1 -1
- package/dist/assets/{view-tile-edit-9CB74778.js → view-tile-edit-CLNWeo9W.js} +1 -1
- package/dist/assets/{view-tile-edit--n1jPylB.js → view-tile-edit-pikK5iSE.js} +1 -1
- package/dist/assets/{view-virtual-device-wizard-CbkHskbg.js → view-virtual-device-wizard-CHj4A2oD.js} +1 -1
- package/dist/assets/{weather-Dkj5so01.js → weather-Bd3vPXEz.js} +1 -1
- package/dist/index.html +28 -28
- package/package.json +1 -1
- package/dist/assets/components-CExMo9as.js +0 -1
- package/dist/assets/composables-CsFD_4mm.js +0 -1
- package/dist/assets/devices-3HwG1Cda.js +0 -2
- package/dist/assets/devices.constants-HX5whDWr.js +0 -1
- package/dist/assets/index-hWiJEHfB.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Er as e,Si as t,T as n,bi as r,n as i}from"./icon-with-child-CgZMNB3F.js";import{kn as a,m as o,p as s,x as c}from"./common-D4Z2wgrj.js";import{t as l}from"./keys-CIqUg3Jv.js";import{a as u}from"./config.constants-17QBQ_kF.js";import{f as d,g as f,n as p}from"./keys-BMDz3FOI.js";import{o as m}from"./weather.constants-_S0I_w_Q.js";import{r as h}from"./devices.constants-
|
|
1
|
+
import{Er as e,Si as t,T as n,bi as r,n as i}from"./icon-with-child-CgZMNB3F.js";import{kn as a,m as o,p as s,x as c}from"./common-D4Z2wgrj.js";import{t as l}from"./keys-CIqUg3Jv.js";import{a as u}from"./config.constants-17QBQ_kF.js";import{f as d,g as f,n as p}from"./keys-BMDz3FOI.js";import{o as m}from"./weather.constants-_S0I_w_Q.js";import{r as h}from"./devices.constants-DHQemX04.js";var g=t(null),_=t(!1),v=t(null),y=300*1e3,b=e(()=>g.value!==null&&!g.value.hasOwner),x=e(()=>g.value?.onboardingCompleted??!1),S=()=>{g.value=null,v.value=null},C=()=>{let e=o(),t=async(t=!1)=>{if(!t&&g.value&&v.value&&Date.now()-v.value<y)return g.value;_.value=!0;try{let{data:t,error:n}=await e.client.GET(`/${i}/system/system/onboarding`);return n||!t?null:(g.value={hasOwner:t.data.has_owner,onboardingCompleted:t.data.onboarding_completed,devicesCount:t.data.devices_count,spacesCount:t.data.spaces_count,displaysCount:t.data.displays_count},v.value=Date.now(),g.value)}catch{return null}finally{_.value=!1}},n=()=>{g.value=null,v.value=null};return{status:g,isLoading:_,needsOnboarding:b,isOnboardingCompleted:x,fetchStatus:t,invalidate:n,markComplete:async()=>{try{let{error:r}=await e.client.POST(`/${i}/system/system/onboarding/complete`);return r?!1:(n(),await t(!0),!0)}catch{return!1}}}},w={ONBOARDING:`onboarding_module-onboarding`},T=function(e){return e[e.WELCOME=0]=`WELCOME`,e[e.ACCOUNT=1]=`ACCOUNT`,e[e.LOCATION=2]=`LOCATION`,e[e.INTEGRATIONS=3]=`INTEGRATIONS`,e[e.SPACES=4]=`SPACES`,e[e.COMPLETE=5]=`COMPLETE`,e}({}),E=[{searchToken:`Living Room`,category:`living_room`,icon:`mdi:sofa`,i18nKey:`livingRoom`},{searchToken:`Bedroom`,category:`bedroom`,icon:`mdi:bed`,i18nKey:`bedroom`},{searchToken:`Kitchen`,category:`kitchen`,icon:`mdi:countertop`,i18nKey:`kitchen`},{searchToken:`Bathroom`,category:`bathroom`,icon:`mdi:shower`,i18nKey:`bathroom`},{searchToken:`Toilet`,category:`toilet`,icon:`mdi:toilet`,i18nKey:`toilet`},{searchToken:`Office`,category:`office`,icon:`mdi:desk`,i18nKey:`office`},{searchToken:`Garage`,category:`garage`,icon:`mdi:garage`,i18nKey:`garage`},{searchToken:`Hallway`,category:`hallway`,icon:`mdi:door-open`,i18nKey:`hallway`},{searchToken:`Entryway`,category:`entryway`,icon:`mdi:door-sliding`,i18nKey:`entryway`},{searchToken:`Dining Room`,category:`dining_room`,icon:`mdi:silverware-fork-knife`,i18nKey:`diningRoom`},{searchToken:`Laundry`,category:`laundry`,icon:`mdi:washing-machine`,i18nKey:`laundry`},{searchToken:`Nursery`,category:`nursery`,icon:`mdi:baby-carriage`,i18nKey:`nursery`},{searchToken:`Guest Room`,category:`guest_room`,icon:`mdi:bed-outline`,i18nKey:`guestRoom`},{searchToken:`Storage`,category:`storage`,icon:`mdi:package-variant-closed`,i18nKey:`storage`},{searchToken:`Workshop`,category:`workshop`,icon:`mdi:hammer-wrench`,i18nKey:`workshop`}],D=t(T.WELCOME),O=t(!1),k=t(!1),A=t(!1),j=t(!1),M=t(0),N=r({username:``,password:``,confirmPassword:``,email:``,firstName:``,lastName:``}),P=r({city:``,latitude:null,longitude:null,timezone:``}),F=r([]),I=r(new Set),L=r([]),R=r({}),z={},B=null,V=null,H=()=>{let{t}=n(),r=o(),g=s(),_=c(),v=_.getStore(l),y=_.getStore(p),{invalidate:b,markComplete:x}=C(),S=e(()=>D.value===T.COMPLETE),w=()=>{D.value<T.COMPLETE&&(D.value+=1)},H=()=>{D.value>T.WELCOME&&--D.value},U=async()=>{if(A.value)return!0;O.value=!0;try{return k.value||=(await v.register({data:{username:N.username,password:N.password,firstName:N.firstName,lastName:N.lastName,email:N.email||void 0}}),!0),await v.create({data:{username:N.username,password:N.password}}),A.value=!0,N.password=``,N.confirmPassword=``,b(),!0}catch{return g.error(t(`onboardingModule.account.messages.error`)),!1}finally{O.value=!1}},W=e(()=>P.latitude!==null&&P.longitude!==null),G=async()=>{if(j.value||P.latitude===null||P.longitude===null)return!0;try{if(B&&V&&(V.latitude!==P.latitude||V.longitude!==P.longitude)&&(B=null,V=null),!B){let e={type:`weather-open-meteo`,name:P.city||`Home`,latitude:P.latitude,longitude:P.longitude},{data:t,error:n}=await r.client.POST(`/${i}/${m}/locations`,{body:{data:e}});if(n||(B=t?.data?.id??null,!B))return!1;V={latitude:P.latitude,longitude:P.longitude}}let{error:e}=await r.client.PATCH(`/${i}/${u}/config/module/{module}`,{params:{path:{module:`weather-module`}},body:{data:{type:`weather-module`,primary_location_id:B}}});return e?!1:(j.value=!0,!0)}catch{return!1}},K=async()=>{try{let{data:e,error:t}=await r.client.GET(`/${i}/${h}/devices`,{params:{query:{hidden:a.false}}});if(t||!e)return!1;let n=e.data;L.splice(0,L.length);for(let e of n)L.push({id:e.id,name:e.name,type:e.type,category:e.category??`generic`,description:e.description??null,roomId:e.room_id??null});return!0}catch{return!1}},q=e=>e.i18nKey?t(`onboardingModule.spaces.categories.${e.i18nKey}`):e.searchToken,J=e=>{let t=e.toLowerCase();return E.find(e=>t.includes(e.searchToken.toLowerCase()))??null},Y=()=>{let e=new Set(F.map(e=>e.name.toLowerCase()));for(let t of L){let n=J(t.name);if(!n)continue;let r=q(n);!e.has(r.toLowerCase())&&!I.has(r.toLowerCase())&&(F.push({name:r,category:n.category,icon:n.icon}),e.add(r.toLowerCase())),!(t.id in R)&&!I.has(r.toLowerCase())&&(R[t.id]=r)}},X=async()=>{if(F.length===0)return!0;try{for(;F.length>0;){let e=F[0],t=await y.add({data:{name:e.name,type:f.ROOM,category:e.category,icon:e.icon}});z[e.name]=t.id,M.value++,F.splice(0,1)}return!0}catch{return!1}},Z=async()=>{let e={};for(let[t,n]of Object.entries(R)){if(!n)continue;let r=z[n];r&&(e[r]||(e[r]=[]),e[r].push(t))}for(let[t,n]of Object.entries(e)){let{error:e}=await r.client.POST(`/${i}/${d}/spaces/{id}/assign`,{params:{path:{id:t}},body:{data:{device_ids:n,display_ids:[]}}});if(e)return!1}return!0};return{currentStep:D,isLoading:O,accountCreated:A,hasLocationData:W,accountData:N,locationData:P,spacesToCreate:F,dismissedSpaces:I,discoveredDevices:L,deviceAssignments:R,savedSpacesCount:M,isLastStep:S,nextStep:w,prevStep:H,createAccount:U,saveLocation:G,saveSpaces:X,fetchDevices:K,suggestSpacesFromDevices:Y,completeOnboarding:async()=>{O.value=!0;try{return P.latitude!==null&&P.longitude!==null&&!await G()?(g.error(t(`onboardingModule.location.messages.error`)),!1):F.length>0&&!await X()?(g.error(t(`onboardingModule.spaces.messages.error`)),!1):Object.values(R).some(e=>e!==null)&&!await Z()?(g.error(t(`onboardingModule.spaces.messages.assignmentError`)),!1):await x()?!0:(g.error(t(`onboardingModule.complete.messages.error`)),!1)}catch{return g.error(t(`onboardingModule.complete.messages.error`)),!1}finally{O.value=!1}},reset:()=>{D.value=T.WELCOME,k.value=!1,A.value=!1,j.value=!1,M.value=0,N.username=``,N.password=``,N.confirmPassword=``,N.email=``,N.firstName=``,N.lastName=``,P.city=``,P.latitude=null,P.longitude=null,P.timezone=``,F.splice(0),I.clear(),L.splice(0),Object.keys(R).forEach(e=>delete R[e]),Object.keys(z).forEach(e=>delete z[e]),B=null,V=null}}};export{S as a,w as i,H as n,C as o,T as r,E as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,ji as o,ki as s}from"./icon-with-child-CgZMNB3F.js";import{bt as c,f as l,gt as u,ht as d,it as f,jr as p,l as m,la as h,ot as g,p as _,pt as v,s as y,st as b,x,yt as S}from"./common-D4Z2wgrj.js";import{r as C}from"./config-DAgVgX46.js";import{r as w}from"./usePlugins-CLZiBdYY.js";import{t as T}from"./dist-DJgPCOr0.js";import{t as E}from"./keys-DExX7OfU.js";import{C as D,S as O,_ as k,b as A,d as j,g as M,h as N,n as P,s as F,y as I}from"./keys-BMDz3FOI.js";import{l as L,u as R}from"./useSpaces-CPYe_mwZ.js";import{a as z}from"./keys-DghNVBR5.js";var B=e=>{let n=x().getStore(P),{data:r,semaphore:i}=h(n);return{space:t(()=>e.value?r.value[e.value]??null:null),fetching:t(()=>e.value?i.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?n.get({id:e.value}):null,editSpace:async t=>{if(!e.value)throw Error(`Space ID is required`);return n.edit({id:e.value,data:t})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return n.remove({id:e.value})}}},V=l(),H=u({search:S().optional(),types:g(S())}),U=u({name:S().min(1),description:S().nullable().optional(),category:c([v(N),v(k)]).nullable().optional(),icon:S().nullable().optional(),displayOrder:d().int().min(0).default(0),parentId:S().uuid().nullable().optional()}),W=U.extend({id:S().uuid(),type:f([M.ROOM,M.ZONE]).default(M.ROOM)}),G=U.extend({id:S().uuid(),type:v(M),suggestionsEnabled:b().default(!0),statusWidgets:g(L).nullable().optional()}),K=({id:t,type:o})=>{let s=x().getStore(P),{t:c}=r(),l=_(),u=n(F.NONE),d=n(null),f,p=i({id:t,type:o??M.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let e=W.safeParse(p);if(!e.success)throw Error(`Failed to validate create space model.`);u.value=F.WORKING;let n=c(`spacesModule.messages.notCreated`,{space:p.name});try{d.value=await s.add({id:t,data:{name:e.data.name,type:e.data.type,category:e.data.category??null,description:e.data.description??null,icon:e.data.icon??null,displayOrder:e.data.displayOrder,parentId:e.data.parentId??null}})}catch(e){throw u.value=F.ERROR,d.value=null,f=window.setTimeout(b,2e3),l.error(n),e}return u.value=F.OK,f=window.setTimeout(b,2e3),l.success(c(`spacesModule.messages.created`,{space:p.name})),`added`},b=()=>{window.clearTimeout(f),u.value=F.NONE,d.value=null};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:u,createdSpace:d}};function q(e){let n=e=>{let t=I(e);return e===M.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=A(e);return t&&t.length>0?t:null};return{getCategoryOptions:n,getCategoryGroups:r,getCategoryTemplates:e=>O(e),categoryOptions:t(()=>{let t=o(e)??M.ROOM;return n(t)}),categoryGroups:t(()=>{let t=o(e)??M.ROOM;return r(t)}),currentTemplates:t(()=>O(o(e)??M.ROOM))}}var J=(e,r)=>{let i=x(),a=i.getStore(z),o=i.getStore(P),{semaphore:s,firstLoad:c}=h(a),l=n(!1);return{devices:t(()=>{if(!e.value||!r.value)return[];let t=a.findAll().filter(e=>!e.draft&&!e.hidden),n;return n=r.value===M.ROOM?t.filter(t=>t.roomId===e.value):t.filter(t=>t.zoneIds.includes(e.value)),n.sort((e,t)=>e.name.localeCompare(t.name))}),loading:t(()=>!!(l.value||s.value.fetching.items||!c.value)),firstLoadFinished:t(()=>c.value),fetchDevices:async()=>{await a.fetch()},addDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let n=a.findById(t);if(!n)throw Error(`Device not found`);await a.edit({id:t,data:{type:n.type,roomId:e.value}})}else{let n=o.findById(e.value);if(n&&D(n.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await a.addZone({id:t,zoneId:e.value})}}finally{l.value=!1}},removeDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let e=a.findById(t);if(!e)throw Error(`Device not found`);await a.edit({id:t,data:{type:e.type,roomId:null}})}else await a.removeZone({id:t,zoneId:e.value})}finally{l.value=!1}},reassignDevice:async(e,t)=>{l.value=!0;try{let n=a.findById(e);if(!n)throw Error(`Device not found`);await a.edit({id:e,data:{type:n.type,roomId:t}})}finally{l.value=!1}}}},Y=e=>{let r=x().getStore(E),i=n(!1);return{displays:t(()=>e.value?r.findAll().filter(t=>t.spaceId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:t(()=>i.value?!0:r.fetching()),fetchDisplays:async()=>{await r.fetch()},reassignDisplay:async(e,t)=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:t}})}finally{i.value=!1}},removeDisplay:async e=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:null}})}finally{i.value=!1}}}},X=({space:t})=>{let o=()=>`value`in t?t.value:t,s=o(),c=x().getStore(P),{t:l}=r(),u=_(),d=n(F.NONE),f,p=i({id:s.id,type:s.type,name:s.name,description:s.description,category:s.category,icon:s.icon,displayOrder:s.displayOrder,parentId:s.parentId,suggestionsEnabled:s.suggestionsEnabled,statusWidgets:s.statusWidgets?[...s.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let t=G.safeParse(p);if(!t.success)throw Error(`Failed to validate edit space model.`);d.value=F.WORKING;let n=l(`spacesModule.messages.notEdited`,{space:p.name});try{await c.edit({id:s.id,data:{name:t.data.name,type:t.data.type,category:t.data.category??null,description:t.data.description??null,icon:t.data.icon??null,displayOrder:t.data.displayOrder,parentId:t.data.parentId??null,suggestionsEnabled:t.data.suggestionsEnabled,statusWidgets:t.data.statusWidgets??null}})}catch(e){throw d.value=F.ERROR,f=window.setTimeout(b,2e3),u.error(n),e}return d.value=F.OK,f=window.setTimeout(b,2e3),v.value=!1,h=m(e(p)),`saved`},b=()=>{window.clearTimeout(f),d.value=F.NONE};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),a(()=>o(),t=>{t&&(p.id=t.id,p.type=t.type,p.name=t.name,p.description=t.description,p.category=t.category,p.icon=t.icon,p.displayOrder=t.displayOrder,p.parentId=t.parentId,p.suggestionsEnabled=t.suggestionsEnabled,p.statusWidgets=t.statusWidgets?[...t.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,h=m(e(p)),v.value=!1)},{deep:!0}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:d}},Z=()=>{let{t:e}=r(),t=_(),n=x().getStore(P);return{remove:async r=>{let i=n.findById(r);return i?p.confirm(e(`spacesModule.messages.confirmRemove`,{name:i.name}),e(`spacesModule.headings.removeSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{return await n.remove({id:r}),t.success(e(`spacesModule.messages.removed`,{space:i.name})),!0}catch(e){return e instanceof R&&t.error(e.message),!1}}).catch(()=>(t.info(e(`spacesModule.messages.removeCanceled`,{space:i.name})),!1)):(t.error(e(`spacesModule.messages.notFound`)),!1)},bulkRemove:async r=>{if(r.length!==0){try{await p.confirm(e(`spacesModule.messages.confirmBulkRemove`,{count:r.length}),e(`spacesModule.headings.bulkRemoveSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`spacesModule.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:r.length}))}}}}},Q={search:void 0,types:[]},ee={by:`name`,dir:`asc`},te=()=>{let e=x().getStore(P),{firstLoad:r,semaphore:i}=h(e),{filters:o,sort:s,pagination:c,reset:l}=y({key:`${j}:spaces:list`,filters:{schema:H,defaults:Q},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:2}),u=t(()=>o.value.search!==Q.search||!(0,V.isEqual)(o.value.types,Q.types)),d=n(c.value.size||10),f=n(c.value.page||1),p=n(s.value.length>0?s.value[0]?.by:void 0),m=n(s.value.length>0?s.value[0]?.dir??null:null),g=t(()=>T(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.id.toLowerCase().includes(o.value.search.toLowerCase())||e.name?.toLowerCase().includes(o.value.search.toLowerCase())||e.description?.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))),[e=>{switch(p.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[m.value??`asc`])),_=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},b=t(()=>!!(i.value.fetching.items||!r.value)),S=t(()=>r.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),a(()=>f.value,e=>{c.value.page=e}),a(()=>d.value,e=>{c.value.size=e}),a(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),a(()=>p.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:m.value}]}),{spaces:g,spacesPaginated:_,totalRows:C,areLoading:b,loaded:S,fetchSpaces:v,filters:o,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}},$=()=>{let e=w(),{enabled:n}=C(),{t:i,te:a}=r(),o=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`,`spaceWizard`],s=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`],c=[`spaceSchema`,`spaceAddFormSchema`,`spaceEditFormSchema`,`spaceCreateReqSchema`,`spaceUpdateReqSchema`],l=[`configure`],u=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)?l.length>0&&l.some(t=>e.routes&&t in e.routes)?!0:(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`spaces-module`)))return!1;let t=o.length===0||!!e.components&&o.some(t=>e.components&&t in e.components),n=c.length===0||!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),d=e=>a(e)?i(e):e;return{plugins:u,options:t(()=>T(u.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)).filter(e=>{let t=!!e.components&&s.some(t=>e.components&&t in e.components),n=!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?d(t.name):d(e.name),disabled:!n(e.type)}))),[e=>e.label],[`asc`])),wizardOptions:t(()=>T(u.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`spaces-module`))&&!!e.components?.spaceWizard)).map(e=>({value:e.type,label:d(e.name),description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),getByPluginType:e=>u.value.find(t=>t.type===e),getByType:e=>u.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)))),getElement:e=>{for(let t of u.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(s(e)));return{plugin:r,element:t(()=>{let t=s(e);return(r.value?.elements??[]).find(e=>e.type===t&&(e.modules===void 0||e.modules.includes(`spaces-module`)))})}};export{X as a,q as c,G as d,B as f,Z as i,K as l,$ as n,Y as o,te as r,J as s,ne as t,W as u};
|
|
1
|
+
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Si as n,T as r,bi as i,ci as a,ji as o,ki as s}from"./icon-with-child-CgZMNB3F.js";import{bt as c,f as l,gt as u,ht as d,it as f,jr as p,l as m,la as h,ot as g,p as _,pt as v,s as y,st as b,x,yt as S}from"./common-D4Z2wgrj.js";import{r as C}from"./config-DAgVgX46.js";import{r as w}from"./usePlugins-CLZiBdYY.js";import{t as T}from"./dist-DJgPCOr0.js";import{t as E}from"./keys-DExX7OfU.js";import{C as D,S as O,_ as k,b as A,d as j,g as M,h as N,n as P,s as F,y as I}from"./keys-BMDz3FOI.js";import{l as L,u as R}from"./useSpaces-CPYe_mwZ.js";import{o as z}from"./keys-DMEIfK2a.js";var B=e=>{let n=x().getStore(P),{data:r,semaphore:i}=h(n);return{space:t(()=>e.value?r.value[e.value]??null:null),fetching:t(()=>e.value?i.value.fetching.item.includes(e.value):!1),fetchSpace:async()=>e.value?n.get({id:e.value}):null,editSpace:async t=>{if(!e.value)throw Error(`Space ID is required`);return n.edit({id:e.value,data:t})},removeSpace:async()=>{if(!e.value)throw Error(`Space ID is required`);return n.remove({id:e.value})}}},V=l(),H=u({search:S().optional(),types:g(S())}),U=u({name:S().min(1),description:S().nullable().optional(),category:c([v(N),v(k)]).nullable().optional(),icon:S().nullable().optional(),displayOrder:d().int().min(0).default(0),parentId:S().uuid().nullable().optional()}),W=U.extend({id:S().uuid(),type:f([M.ROOM,M.ZONE]).default(M.ROOM)}),G=U.extend({id:S().uuid(),type:v(M),suggestionsEnabled:b().default(!0),statusWidgets:g(L).nullable().optional()}),K=({id:t,type:o})=>{let s=x().getStore(P),{t:c}=r(),l=_(),u=n(F.NONE),d=n(null),f,p=i({id:t,type:o??M.ROOM,name:``,description:null,category:null,icon:null,displayOrder:0,parentId:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let e=W.safeParse(p);if(!e.success)throw Error(`Failed to validate create space model.`);u.value=F.WORKING;let n=c(`spacesModule.messages.notCreated`,{space:p.name});try{d.value=await s.add({id:t,data:{name:e.data.name,type:e.data.type,category:e.data.category??null,description:e.data.description??null,icon:e.data.icon??null,displayOrder:e.data.displayOrder,parentId:e.data.parentId??null}})}catch(e){throw u.value=F.ERROR,d.value=null,f=window.setTimeout(b,2e3),l.error(n),e}return u.value=F.OK,f=window.setTimeout(b,2e3),l.success(c(`spacesModule.messages.created`,{space:p.name})),`added`},b=()=>{window.clearTimeout(f),u.value=F.NONE,d.value=null};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:u,createdSpace:d}};function q(e){let n=e=>{let t=I(e);return e===M.ROOM?[...t].sort((e,t)=>e.localeCompare(t)):t},r=e=>{let t=A(e);return t&&t.length>0?t:null};return{getCategoryOptions:n,getCategoryGroups:r,getCategoryTemplates:e=>O(e),categoryOptions:t(()=>{let t=o(e)??M.ROOM;return n(t)}),categoryGroups:t(()=>{let t=o(e)??M.ROOM;return r(t)}),currentTemplates:t(()=>O(o(e)??M.ROOM))}}var J=(e,r)=>{let i=x(),a=i.getStore(z),o=i.getStore(P),{semaphore:s,firstLoad:c}=h(a),l=n(!1);return{devices:t(()=>{if(!e.value||!r.value)return[];let t=a.findAll().filter(e=>!e.draft&&!e.hidden),n;return n=r.value===M.ROOM?t.filter(t=>t.roomId===e.value):t.filter(t=>t.zoneIds.includes(e.value)),n.sort((e,t)=>e.name.localeCompare(t.name))}),loading:t(()=>!!(l.value||s.value.fetching.items||!c.value)),firstLoadFinished:t(()=>c.value),fetchDevices:async()=>{await a.fetch()},addDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let n=a.findById(t);if(!n)throw Error(`Device not found`);await a.edit({id:t,data:{type:n.type,roomId:e.value}})}else{let n=o.findById(e.value);if(n&&D(n.category))throw Error(`Cannot assign devices to floor zones. Floor membership is derived from room assignment.`);await a.addZone({id:t,zoneId:e.value})}}finally{l.value=!1}},removeDevice:async t=>{if(!e.value||!r.value)throw Error(`Space ID and type are required`);l.value=!0;try{if(r.value===M.ROOM){let e=a.findById(t);if(!e)throw Error(`Device not found`);await a.edit({id:t,data:{type:e.type,roomId:null}})}else await a.removeZone({id:t,zoneId:e.value})}finally{l.value=!1}},reassignDevice:async(e,t)=>{l.value=!0;try{let n=a.findById(e);if(!n)throw Error(`Device not found`);await a.edit({id:e,data:{type:n.type,roomId:t}})}finally{l.value=!1}}}},Y=e=>{let r=x().getStore(E),i=n(!1);return{displays:t(()=>e.value?r.findAll().filter(t=>t.spaceId===e.value).sort((e,t)=>(e.name||e.macAddress).localeCompare(t.name||t.macAddress)):[]),loading:t(()=>i.value?!0:r.fetching()),fetchDisplays:async()=>{await r.fetch()},reassignDisplay:async(e,t)=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:t}})}finally{i.value=!1}},removeDisplay:async e=>{i.value=!0;try{await r.edit({id:e,data:{spaceId:null}})}finally{i.value=!1}}}},X=({space:t})=>{let o=()=>`value`in t?t.value:t,s=o(),c=x().getStore(P),{t:l}=r(),u=_(),d=n(F.NONE),f,p=i({id:s.id,type:s.type,name:s.name,description:s.description,category:s.category,icon:s.icon,displayOrder:s.displayOrder,parentId:s.parentId,suggestionsEnabled:s.suggestionsEnabled,statusWidgets:s.statusWidgets?[...s.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null}),h=m(e(p)),g=n(void 0),v=n(!1),y=async()=>{if(g.value.clearValidate(),!await g.value.validate())throw Error(`Form not valid`);let t=G.safeParse(p);if(!t.success)throw Error(`Failed to validate edit space model.`);d.value=F.WORKING;let n=l(`spacesModule.messages.notEdited`,{space:p.name});try{await c.edit({id:s.id,data:{name:t.data.name,type:t.data.type,category:t.data.category??null,description:t.data.description??null,icon:t.data.icon??null,displayOrder:t.data.displayOrder,parentId:t.data.parentId??null,suggestionsEnabled:t.data.suggestionsEnabled,statusWidgets:t.data.statusWidgets??null}})}catch(e){throw d.value=F.ERROR,f=window.setTimeout(b,2e3),u.error(n),e}return d.value=F.OK,f=window.setTimeout(b,2e3),v.value=!1,h=m(e(p)),`saved`},b=()=>{window.clearTimeout(f),d.value=F.NONE};return a(p,()=>{v.value=!(0,V.isEqual)(e(p),h)}),a(()=>o(),t=>{t&&(p.id=t.id,p.type=t.type,p.name=t.name,p.description=t.description,p.category=t.category,p.icon=t.icon,p.displayOrder=t.displayOrder,p.parentId=t.parentId,p.suggestionsEnabled=t.suggestionsEnabled,p.statusWidgets=t.statusWidgets?[...t.statusWidgets.map(e=>({...e,settings:{...e.settings}}))]:null,h=m(e(p)),v.value=!1)},{deep:!0}),{model:p,formEl:g,formChanged:v,submit:y,clear:b,formResult:d}},Z=()=>{let{t:e}=r(),t=_(),n=x().getStore(P);return{remove:async r=>{let i=n.findById(r);return i?p.confirm(e(`spacesModule.messages.confirmRemove`,{name:i.name}),e(`spacesModule.headings.removeSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`}).then(async()=>{try{return await n.remove({id:r}),t.success(e(`spacesModule.messages.removed`,{space:i.name})),!0}catch(e){return e instanceof R&&t.error(e.message),!1}}).catch(()=>(t.info(e(`spacesModule.messages.removeCanceled`,{space:i.name})),!1)):(t.error(e(`spacesModule.messages.notFound`)),!1)},bulkRemove:async r=>{if(r.length!==0){try{await p.confirm(e(`spacesModule.messages.confirmBulkRemove`,{count:r.length}),e(`spacesModule.headings.bulkRemoveSpace`),{confirmButtonText:e(`spacesModule.buttons.yes.title`),cancelButtonText:e(`spacesModule.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`spacesModule.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`spacesModule.messages.bulkRemoveFailed`,{count:r.length}))}}}}},Q={search:void 0,types:[]},ee={by:`name`,dir:`asc`},te=()=>{let e=x().getStore(P),{firstLoad:r,semaphore:i}=h(e),{filters:o,sort:s,pagination:c,reset:l}=y({key:`${j}:spaces:list`,filters:{schema:H,defaults:Q},sort:{defaults:[ee]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:2}),u=t(()=>o.value.search!==Q.search||!(0,V.isEqual)(o.value.types,Q.types)),d=n(c.value.size||10),f=n(c.value.page||1),p=n(s.value.length>0?s.value[0]?.by:void 0),m=n(s.value.length>0?s.value[0]?.dir??null:null),g=t(()=>T(e.findAll().filter(e=>!e.draft&&(!o.value.search||e.id.toLowerCase().includes(o.value.search.toLowerCase())||e.name?.toLowerCase().includes(o.value.search.toLowerCase())||e.description?.toLowerCase().includes(o.value.search.toLowerCase()))&&(o.value.types.length===0||o.value.types.includes(e.type))),[e=>{switch(p.value){case`name`:return e.name;case`type`:return e.type;case`displayOrder`:return e.displayOrder;default:return e.displayOrder}}],[m.value??`asc`])),_=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),v=async()=>{await e.fetch()},b=t(()=>!!(i.value.fetching.items||!r.value)),S=t(()=>r.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return a(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),a(()=>f.value,e=>{c.value.page=e}),a(()=>d.value,e=>{c.value.size=e}),a(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),a(()=>p.value,e=>{e===void 0?s.value=[]:s.value=[{by:e,dir:m.value}]}),{spaces:g,spacesPaginated:_,totalRows:C,areLoading:b,loaded:S,fetchSpaces:v,filters:o,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}},$=()=>{let e=w(),{enabled:n}=C(),{t:i,te:a}=r(),o=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`,`spaceWizard`],s=[`spaceDetail`,`spaceAddForm`,`spaceEditForm`],c=[`spaceSchema`,`spaceAddFormSchema`,`spaceEditFormSchema`,`spaceCreateReqSchema`,`spaceUpdateReqSchema`],l=[`configure`],u=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)?l.length>0&&l.some(t=>e.routes&&t in e.routes)?!0:(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`spaces-module`)))return!1;let t=o.length===0||!!e.components&&o.some(t=>e.components&&t in e.components),n=c.length===0||!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}):!1)),d=e=>a(e)?i(e):e;return{plugins:u,options:t(()=>T(u.value.flatMap(e=>(e.elements??[]).filter(e=>e.modules===void 0||e.modules.includes(`spaces-module`)).filter(e=>{let t=!!e.components&&s.some(t=>e.components&&t in e.components),n=!!e.schemas&&c.some(t=>e.schemas&&t in e.schemas);return t||n}).map(t=>({value:t.type,label:t.name?.trim()?d(t.name):d(e.name),disabled:!n(e.type)}))),[e=>e.label],[`asc`])),wizardOptions:t(()=>T(u.value.filter(e=>(e.elements??[]).some(e=>(e.modules===void 0||e.modules.includes(`spaces-module`))&&!!e.components?.spaceWizard)).map(e=>({value:e.type,label:d(e.name),description:e.description,disabled:!n(e.type)})),[e=>e.label],[`asc`])),getByPluginType:e=>u.value.find(t=>t.type===e),getByType:e=>u.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)))),getElement:e=>{for(let t of u.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`spaces-module`)));if(n)return n}}}},ne=({type:e})=>{let{getByType:n}=$(),r=t(()=>n(s(e)));return{plugin:r,element:t(()=>{let t=s(e);return(r.value?.elements??[]).find(e=>e.type===t&&(e.modules===void 0||e.modules.includes(`spaces-module`)))})}};export{X as a,q as c,G as d,B as f,Z as i,K as l,$ as n,Y as o,te as r,J as s,ne as t,W as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o}from"./icon-with-child-CgZMNB3F.js";import{Wn as s,_ as c,bt as l,dt as u,f as d,gt as f,ht as p,it as m,jr as h,l as g,la as _,ot as v,p as y,pt as b,s as x,st as S,vt as C,x as w,xt as T,yt as E}from"./common-D4Z2wgrj.js";import{r as D}from"./config-DAgVgX46.js";import{r as O}from"./usePlugins-CLZiBdYY.js";import{t as k}from"./dist-DJgPCOr0.js";import{g as A,x as j}from"./keys-BMDz3FOI.js";import{t as ee}from"./useSpaces-CPYe_mwZ.js";import"./composables-DHJBUFeX.js";var M=`scenes`,N=`scenes-module`,P=`ScenesModule.`,F=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),te=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),L=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),R={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},z={[s.generic]:`mdi:playlist-play`,[s.lighting]:`mdi:lightbulb-group`,[s.climate]:`mdi:thermostat`,[s.media]:`mdi:television-play`,[s.work]:`mdi:briefcase`,[s.relax]:`mdi:sofa`,[s.night]:`mdi:weather-night`,[s.morning]:`mdi:weather-sunset-up`,[s.party]:`mdi:party-popper`,[s.movie]:`mdi:movie-open`,[s.away]:`mdi:home-export-outline`,[s.home]:`mdi:home-import-outline`,[s.security]:`mdi:shield-home`,[s.energy]:`mdi:flash`,[s.custom]:`mdi:shape-outline`},B=f({search:E().optional(),categories:v(b(s)),primarySpaceId:l([E().uuid(),u(`whole_home`)]).optional(),enabled:m([`all`,`enabled`,`disabled`]).default(`all`)}),V=Symbol(`FB-Module-Scenes-ScenesStore`),H=Symbol(`FB-Module-Scenes-ScenesActionsStore`),U=({id:e})=>{let n=w(),r=n.getStore(V),i=n.getStore(H),{data:a,semaphore:o}=_(r);return{scene:t(()=>e===null?null:a.value.get(e)??null),isLoading:t(()=>o.value.fetching.item.includes(e)?!0:a.value.get(e)===void 0&&o.value.fetching.items),fetchScene:async()=>{a.value.get(e)?.draft||(await r.get({id:e}),await i.fetch({sceneId:e}))}}},W=d(),G=f({id:E().uuid().optional(),type:E().trim().nonempty(),configuration:C(E(),T()).default({}),order:p().int().min(0).optional(),enabled:S().default(!0)}).catchall(T());f({id:E().uuid(),type:E().trim().nonempty(),configuration:C(E(),T()).optional(),order:p().int().min(0).optional(),enabled:S().optional()}).catchall(T());var K=f({id:E().uuid().optional(),name:E().trim().nonempty(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:b(s).default(s.generic),icon:E().nullable().optional(),enabled:S().default(!0),order:p().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:v(G).default([])}),q=f({id:E().uuid(),name:E().trim().nonempty().optional(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:b(s).optional(),icon:E().nullable().optional(),enabled:S().optional(),order:p().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:v(G).default([])}),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},ne=()=>{let e=O(),{enabled:n}=D(),r=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],i=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>k(a.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),n=!!e.components&&r.some(t=>e.components&&t in e.components);return t&&n}).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)));if(n)return n}}}},Z=({id:n})=>{let l=w(),u=l.getStore(V),d=l.getStore(H),{t:f}=i(),p=y(),m=c(),{spaces:h,fetching:_,fetchSpaces:v}=ee(),b=r(L.NONE),x,S=t(()=>Object.values(s).map(e=>({value:e,label:f(`scenes.categories.${e}`),icon:z[e]}))),C=t(()=>{let e=h.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=h.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:f(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:f(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),T=a({id:n,category:s.generic,name:``,description:null,icon:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:E,getElement:D}=ne(),O=e=>{let t=e.propertyId;return t&&T.actions.find(e=>e.propertyId===t)?(p.warning(f(`scenes.messages.duplicateAction`)),!1):(T.actions.push(e),!0)},k=e=>{T.actions.splice(e,1)},M=(e,t)=>{e>=0&&e<T.actions.length&&(T.actions[e]=t)},N=e=>D(e)?.components?.sceneActionCard??null,P=e=>D(e)?.components?.sceneActionAddForm??null,F=e=>D(e)?.components?.sceneActionEditForm??null,I=e=>E.value.find(t=>t.value===e)?.label??e,te=g(e(T)),R=r(void 0),B=r(!1),U=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await d.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw m.error(`Error syncing scene actions:`,e),e}},G=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);let e=K.safeParse(T);if(!e.success)throw m.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create scene model.`);b.value=L.WORKING;let t=f(`scenes.messages.createFailed`);try{let t=await u.add({id:n,draft:!1,data:e.data});e.data.actions.length>0&&await U(t.id,e.data.actions)}catch(e){throw b.value=L.ERROR,x=window.setTimeout(q,2e3),e instanceof Y&&e.code===422?p.error(e.message):p.error(t),e}return b.value=L.OK,x=window.setTimeout(q,2e3),p.success(f(`scenes.messages.created`)),`added`},q=()=>{window.clearTimeout(x),b.value=L.NONE};return o(T,()=>{B.value=!(0,W.isEqual)(e(T),te)}),{categoriesOptions:S,spacesOptionsGrouped:C,model:T,formEl:R,formChanged:B,submit:G,clear:q,formResult:b,loadingSpaces:_,fetchSpaces:v,actionPluginOptions:E,addAction:O,removeAction:k,updateAction:M,getActionCardComponent:N,getActionFormComponent:P,getActionEditFormComponent:F,getPluginLabel:I}},re=({scene:l,messages:u})=>{let d=w(),f=d.getStore(V),p=d.getStore(H),{t:m}=i(),h=y(),_=c(),{spaces:v,fetching:b,fetchSpaces:x}=ee(),S=r(L.NONE),C=t(()=>p.findForScene(l.id)),T=r(g(C.value)),E,D=t(()=>Object.values(s).map(e=>({value:e,label:m(`scenes.categories.${e}`),icon:z[e]}))),O=t(()=>{let e=v.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=v.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:m(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:m(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),k=t(()=>C.value.map(e=>({...e}))),M=a({id:l.id,category:l.category,name:l.name,description:l.description,icon:l.icon,enabled:l.enabled,primarySpaceId:l.primarySpaceId,actions:k.value}),{options:N,getElement:P}=ne(),F=e=>{let t=e.propertyId;return t&&M.actions.find(e=>e.propertyId===t)?(h.warning(m(`scenes.messages.duplicateAction`)),!1):(M.actions.push(e),!0)},I=e=>{M.actions.splice(e,1)},te=(e,t)=>{e>=0&&e<M.actions.length&&(M.actions[e]=t)},R=e=>P(e)?.components?.sceneActionCard??null,B=e=>P(e)?.components?.sceneActionAddForm??null,U=e=>P(e)?.components?.sceneActionEditForm??null,G=e=>N.value.find(t=>t.value===e)?.label??e,K=r(void 0),J=r(!1),Z=g(e(M)),re=async(e,t)=>{try{let n=new Set(T.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of T.value)r.has(t.id)||await p.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await p.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=T.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,W.isEqual)(i(t),{...i(a),order:r})||await p.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=M.actions[e];n&&(n.id=t)}T.value=g(p.findForScene(e))}catch(e){throw _.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let t=l.draft,n=u&&u.error?u.error:l.draft?m(`scenes.messages.createFailed`):m(`scenes.messages.editFailed`,{scene:l.name});if(K.value.clearValidate(),!await K.value.validate())throw new X(`Form not valid`);let r=q.safeParse(M);if(!r.success)throw _.error(`Schema validation failed with:`,r.error),new X(`Failed to validate edit scene model.`);S.value=L.WORKING;try{await f.edit({id:l.id,data:r.data});let e=l.id;if(t){let t=await f.save({id:l.id});M.id=t.id,M.category=t.category,M.name=t.name,M.description=t.description,M.icon=t.icon,M.enabled=t.enabled,M.primarySpaceId=t.primarySpaceId,e=t.id}await re(e,r.data.actions)}catch(e){throw S.value=L.ERROR,E=window.setTimeout(Q,2e3),e instanceof Y&&e.code===422?h.error(e.message):e instanceof X||(h.error(n),_.error(`Scene edit failed:`,e)),e}return S.value=L.OK,E=window.setTimeout(Q,2e3),t?(h.success(m(u&&u.success?u.success:`scenes.messages.created`)),`added`):(h.success(m(u&&u.success?u.success:`scenes.messages.edited`,{scene:l.name})),J.value=!1,Z=g(e(M)),`saved`)},Q=()=>{window.clearTimeout(E),S.value=L.NONE};return o(M,()=>{J.value=!(0,W.isEqual)(e(M),Z)}),n(()=>{Q()}),{categoriesOptions:D,spacesOptionsGrouped:O,model:M,formEl:K,formChanged:J,submit:ie,clear:Q,formResult:S,loadingSpaces:b,fetchSpaces:x,actionPluginOptions:N,addAction:F,removeAction:I,updateAction:te,getActionCardComponent:R,getActionFormComponent:B,getActionEditFormComponent:U,getPluginLabel:G}},ie=({id:e})=>{let n=w().getStore(V);return{icon:t(()=>{let t=n.findById(e);return t?.icon?t.icon:t?.category&&t.category in z?z[t.category]:z[s.generic]})}},Q=()=>{let e=w().getStore(V),{data:n,semaphore:r,firstLoad:i}=_(e);return{scenes:t(()=>Array.from(n.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:t(()=>r.value.fetching.items),loaded:t(()=>i.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=i(),t=y(),n=w().getStore(V);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`})}catch{t.info(e(`scenes.messages.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{t.info(e(`scenes.messages.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkDisableFailed`,{count:r.length}))}}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=w().getStore(V),{firstLoad:n,semaphore:i}=_(e),{filters:a,sort:s,pagination:c,reset:l}=x({key:`${N}:scenes:list`,filters:{schema:B,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>a.value.search!==$.search||!(0,W.isEqual)(a.value.categories,$.categories)||a.value.primarySpaceId!==$.primarySpaceId||a.value.enabled!==$.enabled),d=r(c.value.size||10),f=r(c.value.page||1),p=r(s.value.length>0?s.value[0]?.by:void 0),m=r(s.value.length>0?s.value[0]?.dir??null:null),h=(e,t)=>t?t===`whole_home`?!e:e===t:!0,g=t(()=>{let t=e.findAll().filter(e=>!e.draft&&(!a.value.search||e.id.toLowerCase().includes(a.value.search.toLowerCase())||e.name.toLowerCase().includes(a.value.search.toLowerCase())||e.description?.toLowerCase().includes(a.value.search.toLowerCase()))&&(a.value.categories.length===0||a.value.categories.includes(e.category))&&h(e.primarySpaceId,a.value.primarySpaceId)&&(a.value.enabled===`all`||a.value.enabled===`enabled`&&e.enabled||a.value.enabled===`disabled`&&!e.enabled)),n=p.value??`order`;return k(t,[e=>e[n]??``],[m.value??`asc`])}),v=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),y=async()=>{await e.fetch()},b=t(()=>i.value.fetching.items||!n.value),S=t(()=>n.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return o(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),o(()=>f.value,e=>{c.value.page=e}),o(()=>d.value,e=>{c.value.size=e}),o(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),o(()=>p.value,e=>{e===void 0||m.value===null?s.value=[]:s.value=[{by:e,dir:m.value}]}),o(()=>a.value,()=>{f.value=1},{deep:!0}),{scenes:g,scenesPaginated:v,totalRows:C,areLoading:b,loaded:S,fetchScenes:y,filters:a,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}};export{R as _,re as a,M as b,J as c,H as d,V as f,L as g,te as h,ie as i,X as l,F as m,ae as n,Z as o,I as p,Q as r,Y as s,se as t,U as u,P as v,z as x,N as y};
|
|
1
|
+
import"./rolldown-runtime-QTnfLwEv.js";import{Ei as e,Er as t,Gr as n,Si as r,T as i,bi as a,ci as o}from"./icon-with-child-CgZMNB3F.js";import{Wn as s,_ as c,bt as l,dt as u,f as d,gt as f,ht as p,it as m,jr as h,l as g,la as _,ot as v,p as y,pt as b,s as x,st as S,vt as C,x as w,xt as T,yt as E}from"./common-D4Z2wgrj.js";import{r as D}from"./config-DAgVgX46.js";import{r as O}from"./usePlugins-CLZiBdYY.js";import{t as k}from"./dist-DJgPCOr0.js";import{g as A,x as j}from"./keys-BMDz3FOI.js";import{t as ee}from"./useSpaces-CPYe_mwZ.js";import"./composables-D2O7i4W5.js";var M=`scenes`,N=`scenes-module`,P=`ScenesModule.`,F=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerScene`,e}({}),I=function(e){return e.TRIGGER_SCENE=`ScenesModule.TriggerSceneHandler`,e}({}),te=function(e){return e.SCENE_CREATED=`ScenesModule.Scene.Created`,e.SCENE_UPDATED=`ScenesModule.Scene.Updated`,e.SCENE_DELETED=`ScenesModule.Scene.Deleted`,e.SCENE_TRIGGERED=`ScenesModule.Scene.Triggered`,e.SCENE_EXECUTION_STARTED=`ScenesModule.Scene.ExecutionStarted`,e.SCENE_EXECUTION_COMPLETED=`ScenesModule.Scene.ExecutionCompleted`,e.SCENE_EXECUTION_FAILED=`ScenesModule.Scene.ExecutionFailed`,e.SCENE_ACTION_CREATED=`ScenesModule.SceneAction.Created`,e.SCENE_ACTION_UPDATED=`ScenesModule.SceneAction.Updated`,e.SCENE_ACTION_DELETED=`ScenesModule.SceneAction.Deleted`,e}({}),L=function(e){return e.NONE=`none`,e.WORKING=`working`,e.ERROR=`error`,e.OK=`ok`,e}({}),R={SCENES:`scenes_module-scenes`,SCENES_ADD:`scenes_module-scenes_add`,SCENES_EDIT:`scenes_module-scenes_edit`,SCENE:`scenes_module-scene`,SCENE_EDIT:`scenes_module-scene_edit`,SCENE_ADD_ACTION:`scenes_module-scene_add_action`,SCENE_EDIT_ACTION:`scenes_module-scene_edit_action`},z={[s.generic]:`mdi:playlist-play`,[s.lighting]:`mdi:lightbulb-group`,[s.climate]:`mdi:thermostat`,[s.media]:`mdi:television-play`,[s.work]:`mdi:briefcase`,[s.relax]:`mdi:sofa`,[s.night]:`mdi:weather-night`,[s.morning]:`mdi:weather-sunset-up`,[s.party]:`mdi:party-popper`,[s.movie]:`mdi:movie-open`,[s.away]:`mdi:home-export-outline`,[s.home]:`mdi:home-import-outline`,[s.security]:`mdi:shield-home`,[s.energy]:`mdi:flash`,[s.custom]:`mdi:shape-outline`},B=f({search:E().optional(),categories:v(b(s)),primarySpaceId:l([E().uuid(),u(`whole_home`)]).optional(),enabled:m([`all`,`enabled`,`disabled`]).default(`all`)}),V=Symbol(`FB-Module-Scenes-ScenesStore`),H=Symbol(`FB-Module-Scenes-ScenesActionsStore`),U=({id:e})=>{let n=w(),r=n.getStore(V),i=n.getStore(H),{data:a,semaphore:o}=_(r);return{scene:t(()=>e===null?null:a.value.get(e)??null),isLoading:t(()=>o.value.fetching.item.includes(e)?!0:a.value.get(e)===void 0&&o.value.fetching.items),fetchScene:async()=>{a.value.get(e)?.draft||(await r.get({id:e}),await i.fetch({sceneId:e}))}}},W=d(),G=f({id:E().uuid().optional(),type:E().trim().nonempty(),configuration:C(E(),T()).default({}),order:p().int().min(0).optional(),enabled:S().default(!0)}).catchall(T());f({id:E().uuid(),type:E().trim().nonempty(),configuration:C(E(),T()).optional(),order:p().int().min(0).optional(),enabled:S().optional()}).catchall(T());var K=f({id:E().uuid().optional(),name:E().trim().nonempty(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:b(s).default(s.generic),icon:E().nullable().optional(),enabled:S().default(!0),order:p().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:v(G).default([])}),q=f({id:E().uuid(),name:E().trim().nonempty().optional(),description:E().trim().transform(e=>e===``?null:e).nullable().optional(),category:b(s).optional(),icon:E().nullable().optional(),enabled:S().optional(),order:p().optional(),primarySpaceId:E().uuid().nullable().optional().transform(e=>e===``?null:e),actions:v(G).default([])}),J=class extends Error{exception;constructor(e,t=null){super(e),this.name=`ScenesException`,this.exception=t}},Y=class extends J{code;constructor(e,t=null,n=null){super(e,n),this.name=`ScenesApiException`,this.code=t}},X=class extends J{constructor(e,t=null){super(e,t),this.name=`ScenesValidationException`}},ne=()=>{let e=O(),{enabled:n}=D(),r=[`sceneActionAddForm`,`sceneActionEditForm`,`sceneActionCard`],i=[`sceneActionSchema`,`sceneActionAddFormSchema`,`sceneActionEditFormSchema`,`sceneActionCreateReqSchema`,`sceneActionUpdateReqSchema`],a=t(()=>e.getPlugins().filter(e=>e.modules===void 0||e.modules.includes(`scenes-module`)?(e.elements??[]).some(e=>{if(!(e.modules===void 0||e.modules.includes(`scenes-module`)))return!1;let t=r.length===0||!!e.components&&r.some(t=>e.components&&t in e.components),n=i.length===0||!!e.schemas&&i.some(t=>e.schemas&&t in e.schemas);return t||n}):!1));return{plugins:a,options:t(()=>k(a.value.flatMap(e=>(e.elements??[]).filter(e=>{let t=e.modules===void 0||e.modules.includes(`scenes-module`),n=!!e.components&&r.some(t=>e.components&&t in e.components);return t&&n}).map(t=>({value:t.type,label:t.name?.trim()?t.name:e.name,disabled:!n(e.type)}))),[e=>e.label],[`asc`])),getByName:e=>a.value.find(t=>t.type===e),getByType:e=>a.value.find(t=>(t.elements??[]).some(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)))),getElement:e=>{for(let t of a.value){let n=(t.elements??[]).find(t=>t.type===e&&(t.modules===void 0||t.modules.includes(`scenes-module`)));if(n)return n}}}},Z=({id:n})=>{let l=w(),u=l.getStore(V),d=l.getStore(H),{t:f}=i(),p=y(),m=c(),{spaces:h,fetching:_,fetchSpaces:v}=ee(),b=r(L.NONE),x,S=t(()=>Object.values(s).map(e=>({value:e,label:f(`scenes.categories.${e}`),icon:z[e]}))),C=t(()=>{let e=h.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=h.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:f(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:f(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),T=a({id:n,category:s.generic,name:``,description:null,icon:null,enabled:!0,primarySpaceId:null,actions:[]}),{options:E,getElement:D}=ne(),O=e=>{let t=e.propertyId;return t&&T.actions.find(e=>e.propertyId===t)?(p.warning(f(`scenes.messages.duplicateAction`)),!1):(T.actions.push(e),!0)},k=e=>{T.actions.splice(e,1)},M=(e,t)=>{e>=0&&e<T.actions.length&&(T.actions[e]=t)},N=e=>D(e)?.components?.sceneActionCard??null,P=e=>D(e)?.components?.sceneActionAddForm??null,F=e=>D(e)?.components?.sceneActionEditForm??null,I=e=>E.value.find(t=>t.value===e)?.label??e,te=g(e(T)),R=r(void 0),B=r(!1),U=async(e,t)=>{try{for(let n=0;n<t.length;n++){let r=t[n];r&&await d.add({sceneId:e,data:{...r,order:n,enabled:r.enabled??!0}})}}catch(e){throw m.error(`Error syncing scene actions:`,e),e}},G=async()=>{if(R.value.clearValidate(),!await R.value.validate())throw new X(`Form not valid`);let e=K.safeParse(T);if(!e.success)throw m.error(`Schema validation failed with:`,e.error),new X(`Failed to validate create scene model.`);b.value=L.WORKING;let t=f(`scenes.messages.createFailed`);try{let t=await u.add({id:n,draft:!1,data:e.data});e.data.actions.length>0&&await U(t.id,e.data.actions)}catch(e){throw b.value=L.ERROR,x=window.setTimeout(q,2e3),e instanceof Y&&e.code===422?p.error(e.message):p.error(t),e}return b.value=L.OK,x=window.setTimeout(q,2e3),p.success(f(`scenes.messages.created`)),`added`},q=()=>{window.clearTimeout(x),b.value=L.NONE};return o(T,()=>{B.value=!(0,W.isEqual)(e(T),te)}),{categoriesOptions:S,spacesOptionsGrouped:C,model:T,formEl:R,formChanged:B,submit:G,clear:q,formResult:b,loadingSpaces:_,fetchSpaces:v,actionPluginOptions:E,addAction:O,removeAction:k,updateAction:M,getActionCardComponent:N,getActionFormComponent:P,getActionEditFormComponent:F,getPluginLabel:I}},re=({scene:l,messages:u})=>{let d=w(),f=d.getStore(V),p=d.getStore(H),{t:m}=i(),h=y(),_=c(),{spaces:v,fetching:b,fetchSpaces:x}=ee(),S=r(L.NONE),C=t(()=>p.findForScene(l.id)),T=r(g(C.value)),E,D=t(()=>Object.values(s).map(e=>({value:e,label:m(`scenes.categories.${e}`),icon:z[e]}))),O=t(()=>{let e=v.value.filter(e=>e.type===A.ROOM).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),t=v.value.filter(e=>e.type===A.ZONE).map(e=>({value:e.id,label:e.name,icon:j(e)})).sort((e,t)=>e.label.localeCompare(t.label)),n=[];return e.length>0&&n.push({type:A.ROOM,label:m(`scenes.form.spaceGroups.rooms`),icon:`mdi:door`,options:e}),t.length>0&&n.push({type:A.ZONE,label:m(`scenes.form.spaceGroups.zones`),icon:`mdi:map-marker-radius`,options:t}),n}),k=t(()=>C.value.map(e=>({...e}))),M=a({id:l.id,category:l.category,name:l.name,description:l.description,icon:l.icon,enabled:l.enabled,primarySpaceId:l.primarySpaceId,actions:k.value}),{options:N,getElement:P}=ne(),F=e=>{let t=e.propertyId;return t&&M.actions.find(e=>e.propertyId===t)?(h.warning(m(`scenes.messages.duplicateAction`)),!1):(M.actions.push(e),!0)},I=e=>{M.actions.splice(e,1)},te=(e,t)=>{e>=0&&e<M.actions.length&&(M.actions[e]=t)},R=e=>P(e)?.components?.sceneActionCard??null,B=e=>P(e)?.components?.sceneActionAddForm??null,U=e=>P(e)?.components?.sceneActionEditForm??null,G=e=>N.value.find(t=>t.value===e)?.label??e,K=r(void 0),J=r(!1),Z=g(e(M)),re=async(e,t)=>{try{let n=new Set(T.value.map(e=>e.id)),r=new Set(t.filter(e=>e.id).map(e=>e.id));for(let t of T.value)r.has(t.id)||await p.remove({id:t.id,sceneId:e});let i=new Map;for(let r=0;r<t.length;r++){let a=t[r];if(!a)continue;let o=a.id;if(!o||!n.has(o)){let t=await p.add({sceneId:e,data:{...a,order:r,enabled:a.enabled??!0}});i.set(r,t.id)}else{let t=T.value.find(e=>e.id===o);if(t){let n=new Set([`id`,`draft`,`createdAt`,`updatedAt`,`scene`]),i=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)));(0,W.isEqual)(i(t),{...i(a),order:r})||await p.edit({id:o,sceneId:e,data:{...a,order:r}})}}}for(let[e,t]of i){let n=M.actions[e];n&&(n.id=t)}T.value=g(p.findForScene(e))}catch(e){throw _.error(`Error syncing scene actions:`,e),e}},ie=async()=>{let t=l.draft,n=u&&u.error?u.error:l.draft?m(`scenes.messages.createFailed`):m(`scenes.messages.editFailed`,{scene:l.name});if(K.value.clearValidate(),!await K.value.validate())throw new X(`Form not valid`);let r=q.safeParse(M);if(!r.success)throw _.error(`Schema validation failed with:`,r.error),new X(`Failed to validate edit scene model.`);S.value=L.WORKING;try{await f.edit({id:l.id,data:r.data});let e=l.id;if(t){let t=await f.save({id:l.id});M.id=t.id,M.category=t.category,M.name=t.name,M.description=t.description,M.icon=t.icon,M.enabled=t.enabled,M.primarySpaceId=t.primarySpaceId,e=t.id}await re(e,r.data.actions)}catch(e){throw S.value=L.ERROR,E=window.setTimeout(Q,2e3),e instanceof Y&&e.code===422?h.error(e.message):e instanceof X||(h.error(n),_.error(`Scene edit failed:`,e)),e}return S.value=L.OK,E=window.setTimeout(Q,2e3),t?(h.success(m(u&&u.success?u.success:`scenes.messages.created`)),`added`):(h.success(m(u&&u.success?u.success:`scenes.messages.edited`,{scene:l.name})),J.value=!1,Z=g(e(M)),`saved`)},Q=()=>{window.clearTimeout(E),S.value=L.NONE};return o(M,()=>{J.value=!(0,W.isEqual)(e(M),Z)}),n(()=>{Q()}),{categoriesOptions:D,spacesOptionsGrouped:O,model:M,formEl:K,formChanged:J,submit:ie,clear:Q,formResult:S,loadingSpaces:b,fetchSpaces:x,actionPluginOptions:N,addAction:F,removeAction:I,updateAction:te,getActionCardComponent:R,getActionFormComponent:B,getActionEditFormComponent:U,getPluginLabel:G}},ie=({id:e})=>{let n=w().getStore(V);return{icon:t(()=>{let t=n.findById(e);return t?.icon?t.icon:t?.category&&t.category in z?z[t.category]:z[s.generic]})}},Q=()=>{let e=w().getStore(V),{data:n,semaphore:r,firstLoad:i}=_(e);return{scenes:t(()=>Array.from(n.value.values()).sort((e,t)=>e.name.localeCompare(t.name))),fetching:t(()=>r.value.fetching.items),loaded:t(()=>i.value),fetchScenes:async()=>e.fetch(),getScene:async t=>e.get({id:t}),findById:t=>e.findById(t),findBySpace:t=>e.findBySpace(t),triggerScene:async(t,n)=>{await e.trigger({id:t,source:n})},removeScene:async t=>{await e.remove({id:t})}}},ae=()=>{let{t:e}=i(),t=y(),n=w().getStore(V);return{addScene:async e=>n.add(e),editScene:async e=>n.edit(e),removeScene:async e=>{await n.remove({id:e})},bulkRemove:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkRemove`,{count:r.length}),e(`scenes.headings.bulkRemove`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{return}try{let i=await n.bulkRemove({ids:r.map(e=>e.id)});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkRemoved`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkRemoveFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkRemoveFailed`,{count:r.length}))}}},bulkEnable:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkEnable`,{count:r.length}),e(`scenes.headings.bulkEnable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`info`})}catch{t.info(e(`scenes.messages.bulkEnableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!0});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkEnabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkEnableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkEnableFailed`,{count:r.length}))}}},bulkDisable:async r=>{if(r.length!==0){try{await h.confirm(e(`scenes.texts.confirmBulkDisable`,{count:r.length}),e(`scenes.headings.bulkDisable`),{confirmButtonText:e(`scenes.buttons.yes.title`),cancelButtonText:e(`scenes.buttons.no.title`),type:`warning`})}catch{t.info(e(`scenes.messages.bulkDisableCanceled`));return}try{let i=await n.bulkSetEnabled({ids:r.map(e=>e.id),enabled:!1});i.succeeded.length>0&&t.success(e(`scenes.messages.bulkDisabled`,{count:i.succeeded.length})),i.failed.length>0&&t.error(e(`scenes.messages.bulkDisableFailed`,{count:i.failed.length}))}catch{t.error(e(`scenes.messages.bulkDisableFailed`,{count:r.length}))}}}}},$={search:void 0,categories:[],primarySpaceId:void 0,enabled:`all`},oe={by:`name`,dir:`asc`},se=()=>{let e=w().getStore(V),{firstLoad:n,semaphore:i}=_(e),{filters:a,sort:s,pagination:c,reset:l}=x({key:`${N}:scenes:list`,filters:{schema:B,defaults:$},sort:{defaults:[oe]},pagination:{defaults:{page:1,size:10}},syncQuery:!0,version:1}),u=t(()=>a.value.search!==$.search||!(0,W.isEqual)(a.value.categories,$.categories)||a.value.primarySpaceId!==$.primarySpaceId||a.value.enabled!==$.enabled),d=r(c.value.size||10),f=r(c.value.page||1),p=r(s.value.length>0?s.value[0]?.by:void 0),m=r(s.value.length>0?s.value[0]?.dir??null:null),h=(e,t)=>t?t===`whole_home`?!e:e===t:!0,g=t(()=>{let t=e.findAll().filter(e=>!e.draft&&(!a.value.search||e.id.toLowerCase().includes(a.value.search.toLowerCase())||e.name.toLowerCase().includes(a.value.search.toLowerCase())||e.description?.toLowerCase().includes(a.value.search.toLowerCase()))&&(a.value.categories.length===0||a.value.categories.includes(e.category))&&h(e.primarySpaceId,a.value.primarySpaceId)&&(a.value.enabled===`all`||a.value.enabled===`enabled`&&e.enabled||a.value.enabled===`disabled`&&!e.enabled)),n=p.value??`order`;return k(t,[e=>e[n]??``],[m.value??`asc`])}),v=t(()=>{let e=(f.value-1)*d.value,t=e+d.value;return g.value.slice(e,t)}),y=async()=>{await e.fetch()},b=t(()=>i.value.fetching.items||!n.value),S=t(()=>n.value),C=t(()=>e.findAll().filter(e=>!e.draft).length);return o(()=>c.value,e=>{f.value=e.page??1,d.value=e.size??10},{deep:!0}),o(()=>f.value,e=>{c.value.page=e}),o(()=>d.value,e=>{c.value.size=e}),o(()=>m.value,e=>{p.value===void 0||e===null?s.value=[]:s.value=[{by:p.value,dir:e}]}),o(()=>p.value,e=>{e===void 0||m.value===null?s.value=[]:s.value=[{by:e,dir:m.value}]}),o(()=>a.value,()=>{f.value=1},{deep:!0}),{scenes:g,scenesPaginated:v,totalRows:C,areLoading:b,loaded:S,fetchScenes:y,filters:a,filtersActive:u,paginateSize:d,paginatePage:f,sortBy:p,sortDir:m,resetFilter:l}};export{R as _,re as a,M as b,J as c,H as d,V as f,L as g,te as h,ie as i,X as l,F as m,ae as n,Z as o,I as p,Q as r,Y as s,se as t,U as u,P as v,z as x,N as y};
|