Skip to content

Commit 3e725af

Browse files
committed
Module bindable data, detect url change in getState (onDestroy not cald)
UI == - SettingsCard: add data as bindable prop - ObjectArray: change data to a bindable prop and pass as bindable recursively, remove value1 and value2 - Module.svelte: add socketOn/Off (instead of onMount, onDestroy, updateRecursive: create empty array if not exists Server ===== - Animations: only emit event if something changed
1 parent 719458b commit 3e725af

File tree

7 files changed

+12717
-12739
lines changed

7 files changed

+12717
-12739
lines changed

interface/src/lib/components/SettingsCard.svelte

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
interface Props {
66
open?: boolean;
77
collapsible?: boolean;
8+
data?: any; //added by MM to pass through data to other components
89
icon?: import('svelte').Snippet;
910
title?: import('svelte').Snippet;
1011
children?: import('svelte').Snippet;
@@ -13,6 +14,7 @@
1314
let {
1415
open = $bindable(true),
1516
collapsible = true,
17+
data = $bindable({}),
1618
icon,
1719
title,
1820
children

interface/src/lib/components/custom/ArrayLight.svelte

Lines changed: 0 additions & 42 deletions
This file was deleted.

interface/src/lib/components/custom/ObjectArray.svelte

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313

1414
<script lang="ts">
15-
import FileEdit from '$lib/components/custom/FileEdit.svelte';
1615
import DragDropList, { VerticalDropZone, reorder, type DropEvent } from 'svelte-dnd-list';
1716
import Add from '~icons/tabler/circle-plus';
1817
import { user } from '$lib/stores/user';
@@ -24,10 +23,9 @@
2423
import Delete from '~icons/tabler/trash';
2524
import MultiInput from '$lib/components/custom/MultiInput.svelte';
2625
import ObjectArray from '$lib/components/custom/ObjectArray.svelte';
27-
import ArrayLight from '$lib/components/custom/ArrayLight.svelte';
2826
import {initCap} from '$lib/stores/custom_utilities';
2927
30-
let { property, data, definition, onChange, changeOnInput, value1=$bindable(), value2 } = $props();
28+
let { property, data = $bindable(), definition, onChange, changeOnInput} = $props();
3129
3230
let dataEditable: any = $state({});
3331
@@ -200,7 +198,7 @@
200198
</div>
201199
{:else if propertyN.type == "array"}
202200
<label for="{propertyN.name}">{propertyN.name}</label>
203-
<ObjectArray property={propertyN} bind:value1={data[propertyN.name]} value2={data} data={dataEditable} definition={localDefinition} onChange={onChange} changeOnInput={changeOnInput}></ObjectArray>
201+
<ObjectArray property={propertyN} bind:data={dataEditable} definition={localDefinition} onChange={onChange} changeOnInput={changeOnInput}></ObjectArray>
204202
{/if}
205203
{/each}
206204
{/if}

interface/src/routes/moonbase/module/Module.svelte

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import Help from '~icons/tabler/help';
99
import Cancel from '~icons/tabler/x';
1010
import MultiInput from '$lib/components/custom/MultiInput.svelte';
11-
import { onMount, onDestroy } from 'svelte';
1211
import { socket } from '$lib/stores/socket';
1312
import ObjectArray from '$lib/components/custom/ObjectArray.svelte';
1413
import {initCap} from '$lib/stores/custom_utilities';
@@ -20,10 +19,27 @@
2019
2120
const modeWS: boolean = true; //todo: make this an argument
2221
22+
// https://github.com/sveltejs/svelte/issues/14091
23+
// https://www.reddit.com/r/sveltejs/comments/1atm5xw/detect_url_params_changes_in_sveltekit_2/
24+
// let params = $state(page.url.searchParams)
25+
// let mName = $derived(params.get('module'));
26+
// didn't work
27+
let oldName: string = "";//workaround for let params = $state(page.url.searchParams)
28+
2329
async function getState() {
2430
2531
let moduleName = page.url.searchParams.get('module') || '';
2632
33+
//workaround for let params = $state(page.url.searchParams)
34+
if (moduleName != oldName) {
35+
console.log("getState changed", moduleName);
36+
if (oldName != "") {
37+
socketOff(oldName);
38+
}
39+
oldName = moduleName;
40+
socketOn(moduleName);
41+
}
42+
2743
console.log("getState", '/rest/' + moduleName)
2844
2945
//load definition
@@ -112,6 +128,7 @@
112128
} else {
113129
if (Array.isArray(newData[key])) {
114130
//loop over array
131+
if (!oldData[key]) oldData[key] = []; //create an empty array
115132
for (let i = 0; i < Math.max(oldData[key].length, newData[key].length); i++) {
116133
if (oldData[key][i] == undefined) {
117134
oldData[key][i] = newData[key][i]; //create new row if not existed, trigger reactiveness
@@ -138,27 +155,25 @@
138155
updateRecursive(data, state);
139156
};
140157
141-
onMount(() => {
158+
//workaround for let params = $state(page.url.searchParams)
159+
const socketOn = ((name: string) => {
142160
if (modeWS) {
143-
let moduleName = page.url.searchParams.get('module') || ''
144-
console.log("onMount", moduleName);
145-
socket.on(moduleName, handleState);
146-
socket.on(moduleName + "RO", handleRO);
161+
console.log("socketOn", name);
162+
socket.on(name, handleState);
163+
socket.on(name + "RO", handleRO);
147164
}
148165
});
149-
150-
onDestroy(() => {
166+
const socketOff = ((name: string) => {
151167
if (modeWS) {
152-
let moduleName = page.url.searchParams.get('module') || ''
153-
console.log("onDestroy", moduleName);
154-
socket.off(moduleName, handleState);
155-
socket.off(moduleName + "RO", handleRO);
168+
console.log("socketOff", name);
169+
socket.off(name, handleState);
170+
socket.off(name + "RO", handleRO);
156171
}
157172
});
158173
159174
</script>
160175

161-
<SettingsCard collapsible={false}>
176+
<SettingsCard collapsible={false} bind:data={data}>
162177
{#snippet icon()}
163178
<Router class="lex-shrink-0 mr-2 h-6 w-6 self-end" />
164179
{/snippet}
@@ -180,7 +195,7 @@
180195
<MultiInput property={property} bind:value={data[property.name]} onChange={inputChanged} changeOnInput={!modeWS}></MultiInput>
181196
</div>
182197
{:else if property.type == "array"}
183-
<ObjectArray property={property} value2={data[property.name]} data={data} definition={definition} onChange={inputChanged} changeOnInput={!modeWS}></ObjectArray>
198+
<ObjectArray property={property} bind:data={data} definition={definition} onChange={inputChanged} changeOnInput={!modeWS}></ObjectArray>
184199
{/if}
185200
{/each}
186201
</div>

lib/framework/EventSocket.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ void EventSocket::emitEvent(String event, JsonObject &jsonObject, const char *or
109109
// Only process valid events
110110
if (!isEventValid(event))
111111
{
112-
ESP_LOGW("EventSocket", "Method tried to emit unregistered event: %s", event.c_str());
113112
ESP_LOGW(TAG, "Method tried to emit unregistered event: %s", event.c_str());
114113
return;
115114
}

0 commit comments

Comments
 (0)