1 | import "core-js/modules/es.array.iterator";
|
2 | import "core-js/modules/web.dom-collections.iterator";
|
3 | import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
4 | import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
5 | import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
|
6 | import _objectWithoutPropertiesLoose from "@babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose";
|
7 | import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
8 | import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
9 | import _Array$isArray from "@babel/runtime-corejs3/core-js-stable/array/is-array";
|
10 |
|
11 | import * as React from 'react';
|
12 | import isEqual from 'lodash/isEqual';
|
13 | import createFilterOrig from 'mapeo-entity-filter';
|
14 | import ObservationDialog from './ObservationDialog';
|
15 | import getStats from './stats';
|
16 | import { defaultGetPreset } from './utils/helpers';
|
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 | const noop = () => {};
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 | const createFilter = (filter
|
60 |
|
61 | ) => {
|
62 | if (!_Array$isArray(filter) || filter[0] !== 'all' || filter.length < 2) {
|
63 | return () => true;
|
64 | }
|
65 |
|
66 | const presetFilter = _mapInstanceProperty(filter).call(filter, subFilter => {
|
67 | if (!_Array$isArray(subFilter) || subFilter[1] !== '$preset' && !isEqual(subFilter[1], ['$preset'])) {
|
68 | return subFilter;
|
69 | }
|
70 |
|
71 | return [subFilter[0], 'categoryId', ..._sliceInstanceProperty(subFilter).call(subFilter, 2)];
|
72 | });
|
73 |
|
74 | return createFilterOrig(presetFilter);
|
75 | };
|
76 |
|
77 | const WrappedMapView = (_ref) => {
|
78 | let {
|
79 | observations = [],
|
80 | onUpdateObservation = noop,
|
81 | onDeleteObservation = noop,
|
82 | presets = [],
|
83 | getMediaUrl,
|
84 | filter,
|
85 | children
|
86 | }
|
87 |
|
88 | = _ref,
|
89 | otherProps = _objectWithoutPropertiesLoose(_ref, ["observations", "onUpdateObservation", "onDeleteObservation", "presets", "getMediaUrl", "filter", "children"]);
|
90 |
|
91 | const stats = React.useMemo(() => getStats(observations), [observations]);
|
92 | const [editingObservation, setEditingObservation] = React.useState(null);
|
93 | const [editingInitialImageIndex, setEditingInitialImageIndex] = React.useState();
|
94 | const getPresetWithFallback = React.useCallback((observation
|
95 |
|
96 | ) =>
|
97 |
|
98 | {
|
99 | var _context;
|
100 |
|
101 | const preset = getPreset(observation, presets);
|
102 | const defaultPreset = defaultGetPreset(observation, stats);
|
103 | if (!preset) return defaultPreset;
|
104 | return _Object$assign({}, preset, {
|
105 | additionalFields: _filterInstanceProperty(_context = defaultPreset.additionalFields).call(_context,
|
106 | additionalField => {
|
107 | var _context2;
|
108 |
|
109 | return !_findInstanceProperty(_context2 = preset.fields).call(_context2, field => {
|
110 | const fieldKey = _Array$isArray(field.key) ? field.key : [field.key];
|
111 | const additionalFieldKey = _Array$isArray(additionalField.key) ? additionalField.key : [additionalField.key];
|
112 | return isEqual(fieldKey, additionalFieldKey);
|
113 | });
|
114 | })
|
115 | });
|
116 | }, [presets, stats]);
|
117 | const handleObservationClick = React.useCallback((observationId, imageIndex) => {
|
118 | setEditingInitialImageIndex(imageIndex);
|
119 | setEditingObservation(_findInstanceProperty(observations).call(observations, obs => obs.id === observationId));
|
120 | }, [observations]);
|
121 | const getMedia = React.useCallback((attachment, {
|
122 | width = 800
|
123 | } = {}) => {
|
124 | const dpr = window.devicePixelRatio;
|
125 | const size = width < 300 * dpr ? 'thumbnail' : width < 1200 * dpr ? 'preview' : 'original';
|
126 | return {
|
127 | src: getMediaUrl(attachment.id, size),
|
128 | type: 'image'
|
129 | };
|
130 | }, [getMediaUrl]);
|
131 | const filterFunction = React.useMemo(() => createFilter(filter), [filter]);
|
132 | const filteredObservations = React.useMemo(() => filter ? _filterInstanceProperty(observations).call(observations, filterFunction) : observations, [observations, filterFunction, filter]);
|
133 | return React.createElement(React.Fragment, null, children({
|
134 | onClickObservation: handleObservationClick,
|
135 | filteredObservations,
|
136 | getPreset: getPresetWithFallback,
|
137 | getMedia
|
138 | }), React.createElement(ObservationDialog, {
|
139 | open: !!editingObservation,
|
140 | observation: editingObservation,
|
141 | initialImageIndex: editingInitialImageIndex,
|
142 | getPreset: getPresetWithFallback,
|
143 | getMedia: getMedia,
|
144 | onRequestClose: () => setEditingObservation(false),
|
145 | onSave: onUpdateObservation,
|
146 | onDelete: onDeleteObservation
|
147 | }));
|
148 | };
|
149 |
|
150 | export default WrappedMapView;
|
151 |
|
152 | function getPreset(observation
|
153 | /*: Observation*/
|
154 | , presets
|
155 | /*: PresetWithFields[]*/
|
156 | )
|
157 | /*: PresetWithFields | void*/
|
158 | {
|
159 | const tags = observation.tags;
|
160 | if (!tags || !tags.categoryId) return;
|
161 |
|
162 | const preset = _findInstanceProperty(presets).call(presets, preset => preset.id === tags.categoryId);
|
163 |
|
164 | return preset;
|
165 | }
|
166 |
|
\ | No newline at end of file |