diff --git a/src/components/FeaturePanel/EditDialog/EditContent/AddMemberForm.tsx b/src/components/FeaturePanel/EditDialog/EditContent/AddMemberForm.tsx index cdc2244e..afadfc9e 100644 --- a/src/components/FeaturePanel/EditDialog/EditContent/AddMemberForm.tsx +++ b/src/components/FeaturePanel/EditDialog/EditContent/AddMemberForm.tsx @@ -41,7 +41,28 @@ const getNewNodeLocation = async (items: EditDataItem[], members: Members) => { return lonLat.map((x) => x + 0.0001); }; -export const AddMemberForm = ({ newLonLat }: { newLonLat?: LonLat }) => { +const defaultRouteBottomTags = { + climbing: 'route_bottom', + sport: 'climbing', +}; + +export const AddMemberForm = ({ + newLonLat, + selectedPresetKey, +}: { + newLonLat?: LonLat; + selectedPresetKey?: string; +}) => { + const getDefaultTags = useCallback( + () => ({ + ...(selectedPresetKey === 'climbing/route_bottom' + ? defaultRouteBottomTags + : {}), + }), + [selectedPresetKey], + ); + const defaultTags = getDefaultTags(); + const { addFeature, items, setCurrent, current } = useEditContext(); const { members, setMembers, tags, setShortId } = useFeatureEditData(); const [showInput, setShowInput] = React.useState(false); @@ -51,7 +72,7 @@ export const AddMemberForm = ({ newLonLat }: { newLonLat?: LonLat }) => { const handleAddMember = useCallback(async () => { const lastNodeLocation = newLonLat ?? (await getNewNodeLocation(items, members)); - const newNode = getNewNode(lastNodeLocation, label); + const newNode = getNewNode(lastNodeLocation, label, defaultTags); const newShortId = getShortId(newNode.osmMeta); addFeature(newNode); setMembers((prev) => [ @@ -61,7 +82,16 @@ export const AddMemberForm = ({ newLonLat }: { newLonLat?: LonLat }) => { setShowInput(false); setLabel(''); setCurrent(newShortId); - }, [addFeature, items, label, members, newLonLat, setCurrent, setMembers]); + }, [ + addFeature, + defaultTags, + items, + label, + members, + newLonLat, + setCurrent, + setMembers, + ]); React.useEffect(() => { const downHandler = (e) => { diff --git a/src/components/FeaturePanel/EditDialog/EditContent/MembersEditor.tsx b/src/components/FeaturePanel/EditDialog/EditContent/MembersEditor.tsx index 2a20398d..6bac378d 100644 --- a/src/components/FeaturePanel/EditDialog/EditContent/MembersEditor.tsx +++ b/src/components/FeaturePanel/EditDialog/EditContent/MembersEditor.tsx @@ -57,6 +57,9 @@ export const MembersEditor = () => { ); const isClimbingCrag = tags.climbing === 'crag'; + const selectedPresetKey = isClimbingCrag + ? 'climbing/route_bottom' + : undefined; const hasNoMembers = !members || members.length === 0; if (!isClimbingCrag && hasNoMembers) return null; @@ -74,9 +77,12 @@ export const MembersEditor = () => { ); })} {isClimbingCrag && hasNoMembers ? ( - + ) : ( - + )} ); diff --git a/src/services/getCoordsFeature.ts b/src/services/getCoordsFeature.ts index 6a15313f..225f8dbf 100644 --- a/src/services/getCoordsFeature.ts +++ b/src/services/getCoordsFeature.ts @@ -1,5 +1,5 @@ import { getImagesFromCenter } from './images/getImageDefs'; -import { Feature, LonLat, LonLatRounded, OsmType } from './types'; +import { Feature, FeatureTags, LonLat, LonLatRounded, OsmType } from './types'; let nextId = 0; @@ -22,7 +22,11 @@ export const getCoordsFeature = ([lon, lat]: LonLatRounded): Feature => { }; }; -export const getNewNode = ([lon, lat]: LonLat, name: string): Feature => { +export const getNewNode = ( + [lon, lat]: LonLat, + name: string, + defaultTags: FeatureTags = {}, +): Feature => { nextId += 1; return { @@ -33,7 +37,7 @@ export const getNewNode = ([lon, lat]: LonLat, name: string): Feature => { type: 'node', id: nextId * -1, // negative id means "adding new point" in osmApiAuth#saveChanges() }, - tags: { name }, + tags: { name, ...defaultTags }, properties: { class: 'marker', subclass: 'point' }, }; };