1 | /******/ (() => { // webpackBootstrap
|
---|
2 | /******/ "use strict";
|
---|
3 | var __webpack_exports__ = {};
|
---|
4 |
|
---|
5 | ;// CONCATENATED MODULE: ../mods/markers/mapComponent.js
|
---|
6 | /* eslint-disable react/prop-types */
|
---|
7 |
|
---|
8 | function MarkersComponent({
|
---|
9 | map,
|
---|
10 | React,
|
---|
11 | HTTP,
|
---|
12 | checkPermission,
|
---|
13 | useQuery,
|
---|
14 | LayerGroup,
|
---|
15 | LayersControl,
|
---|
16 | Marker,
|
---|
17 | HideBasedOnAuth,
|
---|
18 | L
|
---|
19 | }) {
|
---|
20 | const [markers, setMarkers] = React.useState([]);
|
---|
21 | const {
|
---|
22 | data
|
---|
23 | } = useQuery('markers', async () => HTTP.get('/api/markers'));
|
---|
24 | React.useEffect(() => {
|
---|
25 | async function getMarkers() {
|
---|
26 | if (checkPermission({
|
---|
27 | module: 'webapi.Markers',
|
---|
28 | method: 'GET'
|
---|
29 | })) {
|
---|
30 | const markerComponents = data.map(marker => {
|
---|
31 | const {
|
---|
32 | x,
|
---|
33 | y,
|
---|
34 | icon = 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Blue_question_mark_icon.svg/1200px-Blue_question_mark_icon.svg.png'
|
---|
35 | } = marker;
|
---|
36 | const iconComponent = L.icon({
|
---|
37 | iconSize: [25, 25],
|
---|
38 | iconUrl: icon
|
---|
39 | });
|
---|
40 | return /*#__PURE__*/React.createElement(Marker, {
|
---|
41 | key: marker.id,
|
---|
42 | icon: iconComponent,
|
---|
43 | position: {
|
---|
44 | lat: x,
|
---|
45 | lng: y
|
---|
46 | }
|
---|
47 | });
|
---|
48 | });
|
---|
49 | setMarkers(markerComponents);
|
---|
50 | }
|
---|
51 | }
|
---|
52 | getMarkers();
|
---|
53 | }, [data]);
|
---|
54 | return /*#__PURE__*/React.createElement(HideBasedOnAuth, {
|
---|
55 | requiredPermission: {
|
---|
56 | module: 'webapi.Markers',
|
---|
57 | method: 'GET'
|
---|
58 | }
|
---|
59 | }, /*#__PURE__*/React.createElement(LayersControl.Overlay, {
|
---|
60 | name: "Markers"
|
---|
61 | }, /*#__PURE__*/React.createElement(LayerGroup, null, markers)));
|
---|
62 | }
|
---|
63 | ;// CONCATENATED MODULE: ../mods/markers/settings.js
|
---|
64 | function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
---|
65 | /* eslint-disable react/prop-types */
|
---|
66 |
|
---|
67 | function MarkersSettings({
|
---|
68 | React,
|
---|
69 | styled,
|
---|
70 | HTTP,
|
---|
71 | EditableTable,
|
---|
72 | FormElements,
|
---|
73 | TfpForm,
|
---|
74 | useForm,
|
---|
75 | useQuery,
|
---|
76 | useMutation,
|
---|
77 | checkPermission
|
---|
78 | }) {
|
---|
79 | const {
|
---|
80 | register,
|
---|
81 | handleSubmit,
|
---|
82 | formState: {
|
---|
83 | errors
|
---|
84 | }
|
---|
85 | } = useForm();
|
---|
86 | const {
|
---|
87 | data,
|
---|
88 | refetch
|
---|
89 | } = useQuery('markers', async () => HTTP.get('/api/markers'));
|
---|
90 | const {
|
---|
91 | mutate: createMarker
|
---|
92 | } = useMutation('createMarker', data => HTTP.post('/api/markers', {
|
---|
93 | x: parseInt(data.x, 10),
|
---|
94 | y: parseInt(data.y, 10)
|
---|
95 | }), {
|
---|
96 | onSuccess: () => refetch()
|
---|
97 | });
|
---|
98 | const {
|
---|
99 | mutate: deleteMarker
|
---|
100 | } = useMutation('deleteMarker', id => HTTP.delete(`/api/markers/${id}`), {
|
---|
101 | onSuccess: () => refetch()
|
---|
102 | });
|
---|
103 | const {
|
---|
104 | mutate: updateMarker
|
---|
105 | } = useMutation('updateMarker', data => HTTP.put(`/api/markers/${data.id}`, {
|
---|
106 | x: parseInt(data.x, 10),
|
---|
107 | y: parseInt(data.y, 10),
|
---|
108 | icon: data.icon
|
---|
109 | }), {
|
---|
110 | onSuccess: () => refetch()
|
---|
111 | });
|
---|
112 | const canEditRows = checkPermission({
|
---|
113 | module: 'webapi.Markers',
|
---|
114 | method: 'PUT'
|
---|
115 | });
|
---|
116 | const columnDef = [{
|
---|
117 | field: 'id',
|
---|
118 | filter: 'agTextColumnFilter',
|
---|
119 | checkboxSelection: true,
|
---|
120 | width: 300,
|
---|
121 | flex: 0
|
---|
122 | }, {
|
---|
123 | field: 'x',
|
---|
124 | filter: 'agNumberColumnFilter',
|
---|
125 | editable: canEditRows,
|
---|
126 | cellEditorPopup: true,
|
---|
127 | width: 50,
|
---|
128 | flex: 0
|
---|
129 | }, {
|
---|
130 | field: 'y',
|
---|
131 | filter: 'agNumberColumnFilter',
|
---|
132 | editable: canEditRows,
|
---|
133 | cellEditorPopup: true,
|
---|
134 | width: 50,
|
---|
135 | flex: 0
|
---|
136 | }, {
|
---|
137 | field: 'icon',
|
---|
138 | filter: 'agTextColumnFilter',
|
---|
139 | editable: canEditRows,
|
---|
140 | cellEditorPopup: true,
|
---|
141 | flex: 1
|
---|
142 | }];
|
---|
143 | const CreateMarker = () => {
|
---|
144 | if (!checkPermission({
|
---|
145 | module: 'webapi.Markers',
|
---|
146 | method: 'POST'
|
---|
147 | })) {
|
---|
148 | return null;
|
---|
149 | }
|
---|
150 | return /*#__PURE__*/React.createElement(TfpForm, {
|
---|
151 | id: "markers-form",
|
---|
152 | handleSubmit: handleSubmit(createMarker),
|
---|
153 | error: errors
|
---|
154 | }, /*#__PURE__*/React.createElement(FormElements.StyledFormItem, null, /*#__PURE__*/React.createElement(FormElements.FormLabel, {
|
---|
155 | htmlFor: "input-x"
|
---|
156 | }, "X"), /*#__PURE__*/React.createElement(FormElements.FormInput, _extends({
|
---|
157 | key: "x",
|
---|
158 | id: "input-x"
|
---|
159 | }, register('x', {
|
---|
160 | required: true
|
---|
161 | })))), /*#__PURE__*/React.createElement(FormElements.StyledFormItem, null, /*#__PURE__*/React.createElement(FormElements.FormLabel, {
|
---|
162 | htmlFor: "input-y"
|
---|
163 | }, "Y"), /*#__PURE__*/React.createElement(FormElements.FormInput, _extends({
|
---|
164 | key: "y",
|
---|
165 | id: "input-y"
|
---|
166 | }, register('y', {
|
---|
167 | required: true
|
---|
168 | })))));
|
---|
169 | };
|
---|
170 | async function cellEdited({
|
---|
171 | data,
|
---|
172 | newValue,
|
---|
173 | column
|
---|
174 | }) {
|
---|
175 | if (!checkPermission({
|
---|
176 | module: 'webapi.Markers',
|
---|
177 | method: 'PUT'
|
---|
178 | })) {
|
---|
179 | return;
|
---|
180 | }
|
---|
181 | const changedField = column.colId;
|
---|
182 | updateMarker({
|
---|
183 | ...data,
|
---|
184 | [changedField]: newValue
|
---|
185 | });
|
---|
186 | }
|
---|
187 | async function cellDeleted(row) {
|
---|
188 | if (!checkPermission({
|
---|
189 | module: 'webapi.Markers',
|
---|
190 | method: 'DELETE'
|
---|
191 | })) {
|
---|
192 | return;
|
---|
193 | }
|
---|
194 | deleteMarker(row.id);
|
---|
195 | }
|
---|
196 | return /*#__PURE__*/React.createElement("div", {
|
---|
197 | style: {
|
---|
198 | flexDirection: 'row',
|
---|
199 | height: '80vh'
|
---|
200 | }
|
---|
201 | }, /*#__PURE__*/React.createElement(CreateMarker, null), /*#__PURE__*/React.createElement(EditableTable, {
|
---|
202 | columnDef: columnDef,
|
---|
203 | rowData: data,
|
---|
204 | reloadFn: refetch,
|
---|
205 | editRowFn: cellEdited,
|
---|
206 | deleteRowFn: cellDeleted,
|
---|
207 | height: '90%'
|
---|
208 | }));
|
---|
209 | }
|
---|
210 | ;// CONCATENATED MODULE: ../mods/markers/index.js
|
---|
211 | /* eslint-disable react/prop-types */
|
---|
212 |
|
---|
213 |
|
---|
214 | const modId = 'TFP_MarkersExample';
|
---|
215 | const Markers = {
|
---|
216 | about: `This mod manages markers on a Leaflet map.`,
|
---|
217 | routes: {},
|
---|
218 | settings: {
|
---|
219 | 'Map markers': MarkersSettings
|
---|
220 | },
|
---|
221 | mapComponents: [MarkersComponent]
|
---|
222 | };
|
---|
223 | window[modId] = Markers;
|
---|
224 | window.dispatchEvent(new Event(`mod:${modId}:ready`));
|
---|
225 | /******/ })()
|
---|
226 | ;
|
---|