UNPKG

7.6 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
7var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
8
9_Object$defineProperty(exports, "__esModule", {
10 value: true
11});
12
13exports.default = void 0;
14
15var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
16
17var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
18
19var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
20
21var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
22
23var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
24
25var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
26
27var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
28
29var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
30
31var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
32
33var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
34
35var React = _interopRequireWildcard(require("react"));
36
37var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
38
39var _mapeoEntityFilter = _interopRequireDefault(require("mapeo-entity-filter"));
40
41var _ObservationDialog = _interopRequireDefault(require("./ObservationDialog"));
42
43var _stats = _interopRequireDefault(require("./stats"));
44
45var _helpers = require("./utils/helpers");
46
47// @flow
48var noop = function noop() {}; // This is a temporary wrapper to compile a filter that defines $preset into a
49// filter that will work with our dataset, which currently uses categoryId to
50// define which preset applies. We will need to improve how this works in the
51// future once we start matching presets like we do with iD
52
53
54var createFilter = function createFilter(filter
55/*: Filter | void*/
56) {
57 if (!(0, _isArray.default)(filter) || filter[0] !== 'all' || filter.length < 2) {
58 return function () {
59 return true;
60 };
61 }
62
63 var presetFilter = (0, _map.default)(filter).call(filter, function (subFilter) {
64 var _context;
65
66 if (!(0, _isArray.default)(subFilter) || subFilter[1] !== '$preset' && !(0, _isEqual.default)(subFilter[1], ['$preset'])) {
67 return subFilter;
68 }
69
70 return (0, _concat.default)(_context = [subFilter[0], 'categoryId']).call(_context, (0, _toConsumableArray2.default)((0, _slice.default)(subFilter).call(subFilter, 2)));
71 });
72 return (0, _mapeoEntityFilter.default)(presetFilter);
73};
74
75var WrappedMapView = function WrappedMapView(_ref) {
76 var _ref$observations = _ref.observations,
77 observations = _ref$observations === void 0 ? [] : _ref$observations,
78 _ref$onUpdateObservat = _ref.onUpdateObservation,
79 onUpdateObservation = _ref$onUpdateObservat === void 0 ? noop : _ref$onUpdateObservat,
80 _ref$onDeleteObservat = _ref.onDeleteObservation,
81 onDeleteObservation = _ref$onDeleteObservat === void 0 ? noop : _ref$onDeleteObservat,
82 _ref$presets = _ref.presets,
83 presets = _ref$presets === void 0 ? [] : _ref$presets,
84 getMediaUrl = _ref.getMediaUrl,
85 filter = (0, _filter.default)(_ref),
86 children = _ref.children,
87 otherProps = (0, _objectWithoutProperties2.default)(_ref, ["observations", "onUpdateObservation", "onDeleteObservation", "presets", "getMediaUrl", "filter", "children"]);
88 var stats = React.useMemo(function () {
89 return (0, _stats.default)(observations);
90 }, [observations]);
91
92 var _React$useState = React.useState(null),
93 _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
94 editingObservation = _React$useState2[0],
95 setEditingObservation = _React$useState2[1];
96
97 var _React$useState3 = React.useState(),
98 _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
99 editingInitialImageIndex = _React$useState4[0],
100 setEditingInitialImageIndex = _React$useState4[1];
101
102 var getPresetWithFallback = React.useCallback(function (observation
103 /*: Observation*/
104 )
105 /*: PresetWithAdditionalFields*/
106 {
107 var _context2;
108
109 var preset = getPreset(observation, presets);
110 var defaultPreset = (0, _helpers.defaultGetPreset)(observation, stats);
111 if (!preset) return defaultPreset;
112 return (0, _assign.default)({}, preset, {
113 additionalFields: (0, _filter.default)(_context2 = defaultPreset.additionalFields).call(_context2, // Any fields that are not defined in the preset we show as 'additionalFields'
114 function (additionalField) {
115 var _context3;
116
117 return !(0, _find.default)(_context3 = preset.fields).call(_context3, function (field) {
118 var fieldKey = (0, _isArray.default)(field.key) ? field.key : [field.key];
119 var additionalFieldKey = (0, _isArray.default)(additionalField.key) ? additionalField.key : [additionalField.key];
120 return (0, _isEqual.default)(fieldKey, additionalFieldKey);
121 });
122 })
123 });
124 }, [presets, stats]);
125 var handleObservationClick = React.useCallback(function (observationId, imageIndex) {
126 setEditingInitialImageIndex(imageIndex);
127 setEditingObservation((0, _find.default)(observations).call(observations, function (obs) {
128 return obs.id === observationId;
129 }));
130 }, [observations]);
131 var getMedia = React.useCallback(function (attachment) {
132 var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
133 _ref2$width = _ref2.width,
134 width = _ref2$width === void 0 ? 800 : _ref2$width;
135
136 var dpr = window.devicePixelRatio;
137 var size = width < 300 * dpr ? 'thumbnail' : width < 1200 * dpr ? 'preview' : 'original';
138 return {
139 src: getMediaUrl(attachment.id, size),
140 type: 'image'
141 };
142 }, [getMediaUrl]);
143 var filterFunction = React.useMemo(function () {
144 return createFilter(filter);
145 }, [filter]);
146 var filteredObservations = React.useMemo(function () {
147 return filter ? (0, _filter.default)(observations).call(observations, filterFunction) : observations;
148 }, [observations, filterFunction, filter]);
149 return /*#__PURE__*/React.createElement(React.Fragment, null, children({
150 onClickObservation: handleObservationClick,
151 filteredObservations: filteredObservations,
152 getPreset: getPresetWithFallback,
153 getMedia: getMedia
154 }), /*#__PURE__*/React.createElement(_ObservationDialog.default, {
155 open: !!editingObservation,
156 observation: editingObservation,
157 initialImageIndex: editingInitialImageIndex,
158 getPreset: getPresetWithFallback,
159 getMedia: getMedia,
160 onRequestClose: function onRequestClose() {
161 return setEditingObservation(false);
162 },
163 onSave: onUpdateObservation,
164 onDelete: onDeleteObservation
165 }));
166};
167
168var _default = WrappedMapView; // TODO: Update this function to match presets like ID Editor
169
170exports.default = _default;
171
172function getPreset(observation
173/*: Observation*/
174, presets
175/*: PresetWithFields[]*/
176)
177/*: PresetWithFields | void*/
178{
179 var tags = observation.tags;
180 if (!tags || !tags.categoryId) return;
181 var preset = (0, _find.default)(presets).call(presets, function (preset) {
182 return preset.id === tags.categoryId;
183 });
184 return preset;
185}
186//# sourceMappingURL=ViewWrapper.js.map
\No newline at end of file