Implementing the OSM tag format definitions library
This commit is contained in:
parent
3f56cf9c23
commit
3fba5b0529
|
@ -2,9 +2,34 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||||
import { getTagStatus } from './tags';
|
import { getTagStatus } from './tags';
|
||||||
|
|
||||||
describe('The getTagStatus function', () => {
|
describe('The getTagStatus function', () => {
|
||||||
it('should return false/false for a tag that does NOT exist', () => {
|
it('should return undefined/false for a tag that does NOT exist', () => {
|
||||||
expect(getTagStatus('whatever', {}, '', '')).toEqual({
|
expect(getTagStatus('whatever', {}, '', '')).toEqual({
|
||||||
selected: false,
|
highlighted: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should return definition/true for a tag that exists and is highlighted', () => {
|
||||||
|
expect(
|
||||||
|
getTagStatus(
|
||||||
|
'whatever',
|
||||||
|
{ hiking: { eating: { whatever: {} } } },
|
||||||
|
'hiking',
|
||||||
|
'eating'
|
||||||
|
)
|
||||||
|
).toEqual({
|
||||||
|
definition: {},
|
||||||
|
highlighted: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should return definition/false for a tag that exists and is NOT highlighted', () => {
|
||||||
|
expect(
|
||||||
|
getTagStatus(
|
||||||
|
'whatever',
|
||||||
|
{ hiking: { sleeping: { whatever: {} } } },
|
||||||
|
'hiking',
|
||||||
|
'eating'
|
||||||
|
)
|
||||||
|
).toEqual({
|
||||||
|
definition: {},
|
||||||
highlighted: false,
|
highlighted: false,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
interface TagStatus {
|
|
||||||
selected: boolean;
|
|
||||||
highlighted: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface TagFormatDefinition {}
|
interface TagFormatDefinition {}
|
||||||
|
|
||||||
interface TagCategoryDefinitions {
|
interface TagCategoryDefinitions {
|
||||||
|
@ -17,15 +12,43 @@ interface TagDefinitions {
|
||||||
[key: string]: TagActivityDefinitions;
|
[key: string]: TagActivityDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getTagStatus = (
|
interface TagStatus {
|
||||||
|
definition?: TagFormatDefinition;
|
||||||
|
highlighted: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTagStatus = <TagStatus>(
|
||||||
tag: string,
|
tag: string,
|
||||||
definitions: TagDefinitions,
|
definitions: TagDefinitions,
|
||||||
selectedKey: string,
|
selectedKey: string,
|
||||||
highlightedKey: string
|
highlightedKey: string
|
||||||
) => {
|
) => {
|
||||||
let status: TagStatus = {
|
const defaultStatus = {
|
||||||
selected: false,
|
|
||||||
highlighted: false,
|
highlighted: false,
|
||||||
};
|
};
|
||||||
return status;
|
const activityDefinitions = definitions[selectedKey];
|
||||||
|
if (!activityDefinitions) {
|
||||||
|
return defaultStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
const highlightedDefinitions = activityDefinitions[highlightedKey];
|
||||||
|
|
||||||
|
if (!!highlightedDefinitions) {
|
||||||
|
const definition = highlightedDefinitions[tag];
|
||||||
|
if (!!definition) {
|
||||||
|
return { definition, highlighted: true };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const category of Object.keys(activityDefinitions)) {
|
||||||
|
if (category !== highlightedKey) {
|
||||||
|
const categoryDefinitions = activityDefinitions[category];
|
||||||
|
const definition = categoryDefinitions[tag];
|
||||||
|
if (!!definition) {
|
||||||
|
return { definition, highlighted: false };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultStatus;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue