Skip to content

Commit

Permalink
EditDialog: Create climbing/route_bottom as default member in crag (#897
Browse files Browse the repository at this point in the history
)
  • Loading branch information
jvaclavik authored Jan 26, 2025
1 parent 3fa5765 commit 3733ee5
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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) => [
Expand All @@ -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) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -74,9 +77,12 @@ export const MembersEditor = () => {
);
})}
{isClimbingCrag && hasNoMembers ? (
<AddMemberForm newLonLat={nodeLonLat} />
<AddMemberForm
newLonLat={nodeLonLat}
selectedPresetKey={selectedPresetKey}
/>
) : (
<AddMemberForm />
<AddMemberForm selectedPresetKey={selectedPresetKey} />
)}
</AccordionComponent>
);
Expand Down
10 changes: 7 additions & 3 deletions src/services/getCoordsFeature.ts
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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 {
Expand All @@ -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' },
};
};

0 comments on commit 3733ee5

Please sign in to comment.