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' },
};
};