Skip to content

Commit

Permalink
EditDialog: Add major keys for climbing route (#908)
Browse files Browse the repository at this point in the history
  • Loading branch information
jvaclavik authored Jan 28, 2025
1 parent 992db2f commit 38d142e
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/components/FeaturePanel/ClimbingRouteGrade.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { useFeatureContext } from '../utils/FeatureContext';
import { isClimbingRoute } from '../../utils';
import { isFeatureClimbingRoute } from '../../utils';
import { getDifficulties } from './Climbing/utils/grades/routeGrade';
import { ConvertedRouteDifficultyBadge } from './Climbing/ConvertedRouteDifficultyBadge';
import React from 'react';

export const ClimbingRouteGrade = () => {
const { feature } = useFeatureContext();
if (!isClimbingRoute(feature)) {
if (!isFeatureClimbingRoute(feature)) {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@ import { OpeningHoursEditor } from './OpeningHoursEditor/OpeningHoursEditor';
import styled from '@emotion/styled';
import { CharacterCount, getInputTypeForKey } from '../helpers';
import { useFeatureEditData } from './SingleFeatureEditContext';
import { isClimbingRoute } from '../../../../../utils';

export const climbingRouteMajorKeys = [
'author',
'climbing:grade:uiaa',
'climbing:grade:french',
'climbing:boulder',
'length',
];

export const majorKeys = [
'name',
Expand All @@ -21,7 +30,7 @@ export const majorKeys = [

const MAX_INPUT_LENGTH = 255;

const getData = (numberOfWikimediaItems: number) => {
const getData = (numberOfWikimediaItems: number, isClimbingRoute?: boolean) => {
const wikimediaCommonTags = Array(numberOfWikimediaItems)
.fill('')
.reduce((acc, _, index) => {
Expand All @@ -31,14 +40,27 @@ const getData = (numberOfWikimediaItems: number) => {
}, {});

return {
keys: [...majorKeys, ...Object.keys(wikimediaCommonTags)],
keys: [
...majorKeys,
...Object.keys(wikimediaCommonTags),
...(isClimbingRoute ? climbingRouteMajorKeys : []),
],
names: {
name: t('tags.name'),
description: t('tags.description'),
website: t('tags.website'),
phone: t('tags.phone'),
opening_hours: t('tags.opening_hours'),
...wikimediaCommonTags,
...(isClimbingRoute
? {
author: t('tags.author'),
'climbing:grade:uiaa': t('tags.climbing_grade_uiaa'),
'climbing:grade:french': t('tags.climbing_grade_french'),
'climbing:boulder': t('tags.climbing_boulder'),
length: t('tags.length'),
}
: {}),
},
};
};
Expand Down Expand Up @@ -100,8 +122,7 @@ export const MajorKeysEditor = () => {

// TODO this code will be replaced when implementing id presets fields
const nextWikimediaCommonsIndex = getNextWikimediaCommonsIndex(tags);
const data = getData(nextWikimediaCommonsIndex + 1);

const data = getData(nextWikimediaCommonsIndex + 1, isClimbingRoute(tags));
const [activeMajorKeys, setActiveMajorKeys] = useState(() =>
data.keys.filter((k) => !!tags[k]),
);
Expand Down
6 changes: 4 additions & 2 deletions src/components/FeaturePanel/Properties/Properties.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { getReactKey, getShortId } from '../../../services/helpers';
import * as Sentry from '@sentry/nextjs';
import { MyRouteTicks } from '../Climbing/Ticks/MyRouteTicks';

import { isClimbingRoute } from '../../../utils';
import { isFeatureClimbingRoute } from '../../../utils';

class ErrorBoundary extends React.Component<
{ fallback: React.ReactNode },
Expand Down Expand Up @@ -92,7 +92,9 @@ export const Properties = ({ showTags }) => {
</ErrorBoundary>
)}

{isClimbingRoute(feature) && <MyRouteTicks shortOsmId={shortOsmId} />}
{isFeatureClimbingRoute(feature) && (
<MyRouteTicks shortOsmId={shortOsmId} />
)}
</>
);
};
5 changes: 5 additions & 0 deletions src/locales/cs.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,11 @@ export default {
'tags.website': 'Web',
'tags.phone': 'Telefon',
'tags.opening_hours': 'Otevírací doba',
'tags.author': 'Autor',
'tags.climbing_grade_uiaa': 'UIAA klasifikace',
'tags.climbing_grade_french': 'Francouzská klasifikace',
'tags.climbing_boulder': 'Boulder',
'tags.length': 'Délka',

'coordinates.geo_uri': 'GeoURI (mapová appka v telefonu)',

Expand Down
5 changes: 5 additions & 0 deletions src/locales/vocabulary.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,11 @@ export default {
'tags.website': 'Website',
'tags.phone': 'Phone',
'tags.opening_hours': 'Hours',
'tags.author': 'Author',
'tags.climbing_grade_uiaa': 'UIAA climbing grade',
'tags.climbing_grade_french': 'French climbing grade',
'tags.climbing_boulder': 'Boulder',
'tags.length': 'Length',

'coordinates.geo_uri': 'GeoURI (phone map app)',

Expand Down
4 changes: 2 additions & 2 deletions src/services/osm/osmApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { getImageDefs, mergeMemberImageDefs } from '../images/getImageDefs';
import { fetchOverpassCenter } from '../overpass/fetchOverpassCenter';
import {
isClimbingRelation,
isClimbingRoute,
isFeatureClimbingRoute,
isPublictransportRoute,
isRouteMaster,
} from '../../utils';
Expand Down Expand Up @@ -180,7 +180,7 @@ const addMemberFeaturesToRelation = async (relation: Feature) => {
export const addMembersAndParents = async (
feature: Feature,
): Promise<Feature> => {
if (isClimbingRoute(feature)) {
if (isFeatureClimbingRoute(feature)) {
const parentFeatures = await fetchParentFeatures(feature.osmMeta);
return { ...feature, parentFeatures };
}
Expand Down
8 changes: 6 additions & 2 deletions src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
Feature,
FeatureTags,
LonLatRounded,
Position,
PositionBoth,
Expand Down Expand Up @@ -68,8 +69,11 @@ export const isClimbingRelation = (feature: Feature) =>
feature.osmMeta.type === 'relation' &&
(feature.tags.climbing === 'crag' || feature.tags.climbing === 'area');

export const isClimbingRoute = (feature: Feature) =>
['route_bottom', 'route_top', 'route'].includes(feature?.tags.climbing);
export const isFeatureClimbingRoute = (feature: Feature) =>
isClimbingRoute(feature?.tags);

export const isClimbingRoute = (tags: FeatureTags) =>
['route_bottom', 'route_top', 'route'].includes(tags.climbing);

export const isRouteMaster = ({
tags,
Expand Down

0 comments on commit 38d142e

Please sign in to comment.