UNPKG

10.1 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/ViewWrapper.js"],"names":["noop","createFilter","filter","length","presetFilter","subFilter","WrappedMapView","observations","onUpdateObservation","onDeleteObservation","presets","getMediaUrl","children","otherProps","stats","React","useMemo","useState","editingObservation","setEditingObservation","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