-
-
Notifications
You must be signed in to change notification settings - Fork 102
/
Copy pathWebcamMarkerModal.svelte
118 lines (97 loc) · 3.48 KB
/
WebcamMarkerModal.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<script>
import { Modal } from '@keenmate/svelte-adminlte';
import { onMount, getContext } from 'svelte';
import { _ } from 'svelte-i18n';
import { createForm } from 'felte';
import { errorNotification } from '../providers/notification-provider';
import { updateSensor } from '../stores/terrariumpi';
import { fetchSensors } from '../providers/api';
import { formToJSON } from '../helpers/form-helpers';
import Helper from '../components/form/Helper.svelte';
import Select from '../components/form/Select.svelte';
let modal;
let editForm;
let validated = false;
let sensors = [];
let selected = [];
let edit = false;
const { setMarker, deleteMarker } = getContext('webcamMarker');
const _processForm = async (values, context) => {
validated = true;
if (context.form.checkValidity()) {
values = formToJSON(editForm);
setMarker(values);
hide();
} else {
errorNotification('Error saving markers', 'ERROR');
}
};
const { form, isSubmitting, createSubmitHandler } = createForm({
onSubmit: _processForm,
});
const formSubmit = createSubmitHandler({
onSubmit: _processForm,
});
export const show = (marker) => {
edit = marker ? true : false;
selected = edit ? marker.target.options.sensors : [];
editForm.elements['markerid'].value = edit ? marker.target._leaflet_id : '';
fetchSensors(false, (data) => {
sensors = data.map((item) => {
updateSensor(item);
return { value: item.id, text: item.name };
});
});
validated = false;
modal.show();
};
export const hide = () => {
modal.hide();
};
onMount(() => {
editForm.setAttribute('novalidate', 'novalidate');
});
</script>
<Modal bind:this={modal}>
<svelte:fragment slot="header">
<i class="fas fa-marker mr-2"></i>
{$_('webcams.markers.settings.title', { default: 'Sensors' })}
<Helper />
</svelte:fragment>
<form class="form-horizontal needs-validation" class:was-validated={validated} use:form bind:this={editForm}>
<input type="hidden" name="markerid" disabled={!edit} value="" />
<Select
name="sensors"
value={selected}
multiple={true}
required={true}
options={sensors}
label={$_('webcams.markers.settings.doors.label', { default: 'Sensors' })}
help={$_('webcams.markers.settings.doors.help', { default: 'Select the senors you want to show.' })}
invalid={$_('webcams.markers.settings.doors.invalid', { default: 'Make a choice.' })}
/>
<!-- We need this nasty hack to make submit with enter key to work -->
<button type="submit" style="display:none"> </button>
</form>
<svelte:fragment slot="actions">
<div class="d-flex justify-content-between w-100">
<button type="button" class="btn btn-default" on:click={hide}>
{$_('modal.general.close', { default: 'Close ' })}
</button>
{#if edit}
<button
type="button"
class="btn btn-danger mr-5"
on:click={() => deleteMarker(editForm.elements['markerid'].value)}
>
{$_('webcams.markers.settings.delete', { default: 'Delete' })}
</button>
{/if}
<button type="button" class="btn btn-primary ml-3" disabled={$isSubmitting} on:click={formSubmit}>
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true" class:d-none={!$isSubmitting}
></span>
{$_('modal.general.save', { default: 'Save' })}
</button>
</div>
</svelte:fragment>
</Modal>