UNPKG

10.1 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/ViewWrapper.js"],"names":["React","isEqual","createFilterOrig","ObservationDialog","getStats","defaultGetPreset","noop","createFilter","filter","length","presetFilter","subFilter","WrappedMapView","observations","onUpdateObservation","onDeleteObservation","presets","getMediaUrl","children","otherProps","stats","useMemo","editingObservation","setEditingObservation","useState","editingInitialImageIndex","setEditingInitialImageIndex","getPresetWithFallback","useCallback","observation","preset","getPreset","defaultPreset","additionalFields","additionalField","fields","field","fieldKey","key","additionalFieldKey","handleObservationClick","observationId","imageIndex","obs","id","getMedia","attachment","width","dpr","window","devicePixelRatio","size","src","type","filterFunction","filteredObservations","onClickObservation","tags","categoryId"],"mappings":"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","sourcesContent":["// @flow\nimport * as React from 'react'\nimport isEqual from 'lodash/isEqual'\nimport createFilterOrig from 'mapeo-entity-filter'\n\nimport ObservationDialog from './ObservationDialog'\nimport getStats from './stats'\nimport { defaultGetPreset } from './utils/helpers'\n\nimport type { Observation } from 'mapeo-schema'\nimport type {\n PresetWithFields,\n PresetWithAdditionalFields,\n GetMedia,\n Filter,\n GetIconUrl,\n GetMediaUrl\n} from './types'\n\nexport type CommonViewProps = {\n /** Array of observations to render */\n observations?: Array<Observation>,\n /** Called when an observation is editing/updated */\n onUpdateObservation: (observation: Observation) => void,\n onDeleteObservation: (id: string) => void,\n /** A function called with an observation that should return a matching preset\n * with field definitions */\n presets?: PresetWithFields[],\n getMediaUrl: GetMediaUrl,\n getIconUrl?: GetIconUrl,\n /** Filter to apply to observations */\n filter?: Filter\n}\n\ntype Props = {\n ...$Exact<CommonViewProps>,\n children: ({\n filteredObservations: Array<Observation>,\n onClickObservation: (observationId: string, imageIndex?: number) => void,\n getPreset: Observation => PresetWithAdditionalFields,\n getMedia: GetMedia\n }) => React.Node\n}\n\nconst noop = () => {}\n\n// This is a temporary wrapper to compile a filter that defines $preset into a\n// filter that will work with our dataset, which currently uses categoryId to\n// define which preset applies. We will need to improve how this works in the\n// future once we start matching presets like we do with iD\nconst createFilter = (filter: Filter | void) => {\n if (!Array.isArray(filter) || filter[0] !== 'all' || filter.length < 2) {\n return () => true\n }\n const presetFilter = filter.map(subFilter => {\n if (\n !Array.isArray(subFilter) ||\n (subFilter[1] !== '$preset' && !isEqual(subFilter[1], ['$preset']))\n ) {\n return subFilter\n }\n return [subFilter[0], 'categoryId', ...subFilter.slice(2)]\n })\n return createFilterOrig(presetFilter)\n}\n\nconst WrappedMapView = ({\n observations = [],\n onUpdateObservation = noop,\n onDeleteObservation = noop,\n presets = [],\n getMediaUrl,\n filter,\n children,\n ...otherProps\n}: Props) => {\n const stats = React.useMemo(() => getStats(observations), [observations])\n const [editingObservation, setEditingObservation] = React.useState(null)\n const [\n editingInitialImageIndex,\n setEditingInitialImageIndex\n ] = React.useState()\n\n const getPresetWithFallback = React.useCallback(\n (observation: Observation): PresetWithAdditionalFields => {\n const preset = getPreset(observation, presets)\n const defaultPreset = defaultGetPreset(observation, stats)\n if (!preset) return defaultPreset\n return {\n ...preset,\n additionalFields: defaultPreset.additionalFields.filter(\n // Any fields that are not defined in the preset we show as 'additionalFields'\n additionalField => {\n return !preset.fields.find(field => {\n const fieldKey = Array.isArray(field.key)\n ? field.key\n : [field.key]\n const additionalFieldKey = Array.isArray(additionalField.key)\n ? additionalField.key\n : [additionalField.key]\n return isEqual(fieldKey, additionalFieldKey)\n })\n }\n )\n }\n },\n [presets, stats]\n )\n\n const handleObservationClick = React.useCallback(\n (observationId, imageIndex) => {\n setEditingInitialImageIndex(imageIndex)\n setEditingObservation(observations.find(obs => obs.id === observationId))\n },\n [observations]\n )\n\n const getMedia = React.useCallback(\n (attachment, { width = 800 } = {}) => {\n const dpr = window.devicePixelRatio\n const size =\n width < 300 * dpr\n ? 'thumbnail'\n : width < 1200 * dpr\n ? 'preview'\n : 'original'\n return {\n src: getMediaUrl(attachment.id, size),\n type: 'image'\n }\n },\n [getMediaUrl]\n )\n\n const filterFunction = React.useMemo(() => createFilter(filter), [filter])\n const filteredObservations = React.useMemo(\n () => (filter ? observations.filter(filterFunction) : observations),\n [observations, filterFunction, filter]\n )\n\n return (\n <>\n {children({\n onClickObservation: handleObservationClick,\n filteredObservations,\n getPreset: getPresetWithFallback,\n getMedia\n })}\n <ObservationDialog\n open={!!editingObservation}\n observation={editingObservation}\n initialImageIndex={editingInitialImageIndex}\n getPreset={getPresetWithFallback}\n getMedia={getMedia}\n onRequestClose={() => setEditingObservation(false)}\n onSave={onUpdateObservation}\n onDelete={onDeleteObservation}\n />\n </>\n )\n}\n\nexport default WrappedMapView\n\n// TODO: Update this function to match presets like ID Editor\nfunction getPreset(\n observation: Observation,\n presets: PresetWithFields[]\n): PresetWithFields | void {\n const tags = observation.tags\n if (!tags || !tags.categoryId) return\n const preset = presets.find(preset => preset.id === tags.categoryId)\n return preset\n}\n"],"file":"ViewWrapper.js"}
\No newline at end of file