From 9f4f6d48b7a098e0977966d86d2a5d54117319d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Weing=C3=A4rtner?= Date: Sun, 9 Oct 2022 13:57:51 +0200 Subject: [PATCH] feat: display locations for races Fixes #100 --- src/KankaJournal/KankaJournalApplication.scss | 17 ++--------- .../shared/detailRowAncestors.partial.hbs | 14 --------- .../shared/detailRowArray.partial.hbs | 17 +++++++++++ src/KankaJournal/sheets/ability.partial.hbs | 2 +- src/KankaJournal/sheets/event.partial.hbs | 2 +- src/KankaJournal/sheets/family.partial.hbs | 2 +- src/KankaJournal/sheets/item.partial.hbs | 2 +- src/KankaJournal/sheets/journal.partial.hbs | 2 +- src/KankaJournal/sheets/location.partial.hbs | 2 +- src/KankaJournal/sheets/note.partial.hbs | 2 +- .../sheets/organisation.partial.hbs | 2 +- src/KankaJournal/sheets/quest.partial.hbs | 2 +- src/KankaJournal/sheets/race.partial.hbs | 3 +- src/module/TypeLoaders/RaceTypeLoader.test.ts | 30 +++++++++++++++++++ src/module/TypeLoaders/RaceTypeLoader.ts | 1 + src/types/kanka.ts | 1 + 16 files changed, 63 insertions(+), 38 deletions(-) delete mode 100644 src/KankaJournal/shared/detailRowAncestors.partial.hbs create mode 100644 src/KankaJournal/shared/detailRowArray.partial.hbs diff --git a/src/KankaJournal/KankaJournalApplication.scss b/src/KankaJournal/KankaJournalApplication.scss index 7b14186..9c4e21f 100644 --- a/src/KankaJournal/KankaJournalApplication.scss +++ b/src/KankaJournal/KankaJournalApplication.scss @@ -130,20 +130,9 @@ grid-column: 2; padding-left: 1.5em; - &.path > a { - margin-right: 1em; - position: relative; - - &:after { - content: '»'; - position: absolute; - right: -0.8em; - pointer-events: none; - text-shadow: none; - } - - &:last-child:after { - content: none; + &.path { + .delimiter { + margin: 0 .5em; } } } diff --git a/src/KankaJournal/shared/detailRowAncestors.partial.hbs b/src/KankaJournal/shared/detailRowAncestors.partial.hbs deleted file mode 100644 index 7a24a35..0000000 --- a/src/KankaJournal/shared/detailRowAncestors.partial.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{{~#if ancestors.length ~}} -
- {{~#if rawLabel~}} - {{~rawLabel~}} - {{~else~}} - {{~ kankaLocalize 'journal' label ~}} - {{~/if~}} -
-
- {{~#each ancestors as | ancestorId |~}} - {{~kankaLinkReference (kankaFindReference ancestorId) ~}} - {{~/each~}} -
-{{~/if~}} \ No newline at end of file diff --git a/src/KankaJournal/shared/detailRowArray.partial.hbs b/src/KankaJournal/shared/detailRowArray.partial.hbs new file mode 100644 index 0000000..a97456d --- /dev/null +++ b/src/KankaJournal/shared/detailRowArray.partial.hbs @@ -0,0 +1,17 @@ +{{~#if references.length ~}} +
+ {{~#if rawLabel~}} + {{~rawLabel~}} + {{~else~}} + {{~ kankaLocalize 'journal' label ~}} + {{~/if~}} +
+
+ {{~#each references as | referenceId |~}} + {{~kankaLinkReference (kankaFindReference referenceId ../type) ~}} + {{#unless @last}} + {{#if ../delimiter}}{{../delimiter}}{{else}}»{{/if}} + {{/unless}} + {{~/each~}} +
+{{~/if~}} \ No newline at end of file diff --git a/src/KankaJournal/sheets/ability.partial.hbs b/src/KankaJournal/sheets/ability.partial.hbs index c50b751..bce1a36 100644 --- a/src/KankaJournal/sheets/ability.partial.hbs +++ b/src/KankaJournal/sheets/ability.partial.hbs @@ -1,7 +1,7 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~>../shared/detailRow value=kankaEntity.charges label='ability.labels.charges' }} {{~/inline}} {{/../shared/baseLayout}} diff --git a/src/KankaJournal/sheets/event.partial.hbs b/src/KankaJournal/sheets/event.partial.hbs index 471dab1..d90d2f1 100644 --- a/src/KankaJournal/sheets/event.partial.hbs +++ b/src/KankaJournal/sheets/event.partial.hbs @@ -1,7 +1,7 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~>../shared/detailRow value=kankaEntity.location_id type='location' label='shared.labels.location' reference=true }} {{~>../shared/detailRow value=kankaEntity.date label='event.labels.date' }} {{~/inline}} diff --git a/src/KankaJournal/sheets/family.partial.hbs b/src/KankaJournal/sheets/family.partial.hbs index bc743fa..9c057d6 100644 --- a/src/KankaJournal/sheets/family.partial.hbs +++ b/src/KankaJournal/sheets/family.partial.hbs @@ -12,7 +12,7 @@ {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~/inline}} {{#*inline 'content'}} diff --git a/src/KankaJournal/sheets/item.partial.hbs b/src/KankaJournal/sheets/item.partial.hbs index da443af..9f5b8a0 100644 --- a/src/KankaJournal/sheets/item.partial.hbs +++ b/src/KankaJournal/sheets/item.partial.hbs @@ -1,7 +1,7 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~>../shared/detailRow value=kankaEntity.location_id type='location' label='shared.labels.location' reference=true }} {{~>../shared/detailRow value=kankaEntity.character_id type='character' label='shared.labels.character' reference=true }} {{~/inline}} diff --git a/src/KankaJournal/sheets/journal.partial.hbs b/src/KankaJournal/sheets/journal.partial.hbs index b481c66..80b93bf 100644 --- a/src/KankaJournal/sheets/journal.partial.hbs +++ b/src/KankaJournal/sheets/journal.partial.hbs @@ -1,7 +1,7 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~>../shared/detailRow value=kankaEntity.location_id type='location' label='shared.labels.location' reference=true }} {{~>../shared/detailRow value=kankaEntity.character_id type='character' label='shared.labels.character' reference=true }} {{~>../shared/detailRow value=kankaEntity.date label='journal.labels.date' }} diff --git a/src/KankaJournal/sheets/location.partial.hbs b/src/KankaJournal/sheets/location.partial.hbs index 4062caa..aa6dc67 100644 --- a/src/KankaJournal/sheets/location.partial.hbs +++ b/src/KankaJournal/sheets/location.partial.hbs @@ -1,6 +1,6 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~/inline}} {{/../shared/baseLayout}} diff --git a/src/KankaJournal/sheets/note.partial.hbs b/src/KankaJournal/sheets/note.partial.hbs index 4062caa..aa6dc67 100644 --- a/src/KankaJournal/sheets/note.partial.hbs +++ b/src/KankaJournal/sheets/note.partial.hbs @@ -1,6 +1,6 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~/inline}} {{/../shared/baseLayout}} diff --git a/src/KankaJournal/sheets/organisation.partial.hbs b/src/KankaJournal/sheets/organisation.partial.hbs index f9690fc..d3fed9b 100644 --- a/src/KankaJournal/sheets/organisation.partial.hbs +++ b/src/KankaJournal/sheets/organisation.partial.hbs @@ -12,7 +12,7 @@ {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~>../shared/detailRow value=kankaEntity.location_id type='location' label='shared.labels.location' reference=true }} {{~#with (kankaFilterBy (kankaFilterReferences kankaEntity.members) 'pin_id' 'regex:2|3') as | starred |~}} diff --git a/src/KankaJournal/sheets/quest.partial.hbs b/src/KankaJournal/sheets/quest.partial.hbs index 64617b1..44bd04a 100644 --- a/src/KankaJournal/sheets/quest.partial.hbs +++ b/src/KankaJournal/sheets/quest.partial.hbs @@ -11,7 +11,7 @@ {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type'~}} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} {{~>../shared/detailRow value=kankaEntity.character_id type='quest' label='quest.labels.instigator' reference=true~}} {{~>../shared/detailRow value=kankaEntity.date label='quest.labels.date'~}} {{~>../shared/detailRow value=kankaEntity.is_completed label='quest.labels.completed' localizeValue='shared.value'~}} diff --git a/src/KankaJournal/sheets/race.partial.hbs b/src/KankaJournal/sheets/race.partial.hbs index 4062caa..da8e87d 100644 --- a/src/KankaJournal/sheets/race.partial.hbs +++ b/src/KankaJournal/sheets/race.partial.hbs @@ -1,6 +1,7 @@ {{#>../shared/baseLayout}} {{#*inline 'profile'~}} {{~>../shared/detailRow value=kankaEntity.type label='shared.labels.type' }} - {{~>../shared/detailRowAncestors ancestors=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.ancestors label='shared.labels.parent' }} + {{~>../shared/detailRowArray references=kankaEntity.locations type='location' label='shared.labels.location' delimiter=" " }} {{~/inline}} {{/../shared/baseLayout}} diff --git a/src/module/TypeLoaders/RaceTypeLoader.test.ts b/src/module/TypeLoaders/RaceTypeLoader.test.ts index afa712e..2b4b838 100644 --- a/src/module/TypeLoaders/RaceTypeLoader.test.ts +++ b/src/module/TypeLoaders/RaceTypeLoader.test.ts @@ -22,6 +22,7 @@ function createRace(data: Partial = {}): KankaApiRace { entity_abilities: [], ancestors: [], children: [], + locations: [], ...data, } as KankaApiRace; } @@ -224,5 +225,34 @@ describe('RaceTypeLoader', () => { }, }); }); + + it('includes locations from the lookup array', async () => { + const expectedResult = createRace({ + locations: [2001, 2004], + }); + + const entities = [ + createEntity(1001, 2001, 'location'), + createEntity(1002, 2002, 'race'), + createEntity(1003, 2003, 'quest'), + createEntity(1004, 2004, 'location'), + ]; + + const loader = new RaceTypeLoader(api); + const collection = await loader.createReferenceCollection(4711, expectedResult, entities); + + expect(collection.getRecord()).toMatchObject({ + 1001: { + id: 2001, + entityId: 1001, + type: 'location', + }, + 1004: { + id: 2004, + entityId: 1004, + type: 'location', + }, + }); + }); }); }); diff --git a/src/module/TypeLoaders/RaceTypeLoader.ts b/src/module/TypeLoaders/RaceTypeLoader.ts index 592b0f8..7bbfbf8 100644 --- a/src/module/TypeLoaders/RaceTypeLoader.ts +++ b/src/module/TypeLoaders/RaceTypeLoader.ts @@ -16,6 +16,7 @@ export default class RaceTypeLoader extends AbstractTypeLoader { await Promise.all([ collection.addById(entity.race_id, 'race'), + ...entity.locations.map(location => collection.addById(location, 'location')), ...entity.ancestors.map(ancestor => collection.addByEntityId(ancestor)), ...entity.children.map(child => collection.addByEntityId(child.entity_id)), ]); diff --git a/src/types/kanka.ts b/src/types/kanka.ts index 6219a68..f2bc3c2 100644 --- a/src/types/kanka.ts +++ b/src/types/kanka.ts @@ -376,6 +376,7 @@ export interface KankaApiQuest extends KankaApiChildEntity { export interface KankaApiRace extends KankaApiChildEntity { ancestors: KankaApiEntityId[]; children: KankaApiChild[]; + locations: KankaApiId[]; race_id: KankaApiId | null; type: string | null; }