Skip to content

Commit

Permalink
Index track categories based on existing moves (#461)
Browse files Browse the repository at this point in the history
Fixes #395
  • Loading branch information
cwegrzyn committed Aug 17, 2024
1 parent 66ffee7 commit 14c30aa
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 14 deletions.
10 changes: 9 additions & 1 deletion src/campaigns/context.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { CharacterContext } from "character-tracker";
import { ClockFileAdapter } from "clocks/clock-file";
import { BaseDataContext, ICompleteDataContext } from "datastore/data-context";
import {
BaseDataContext,
ICompleteDataContext,
trackTypesFromMoves,
} from "datastore/data-context";
import {
DataIndexer,
SourcedByArray,
Expand Down Expand Up @@ -91,6 +95,10 @@ export class CampaignDataContext
return this.dataContext.prioritized;
}

get trackTypes() {
return trackTypesFromMoves(this.moves);
}

diceRollerFor(kind: "move"): AsyncDiceRoller & DiceRoller {
switch (kind) {
case "move":
Expand Down
8 changes: 8 additions & 0 deletions src/characters/action-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ export class NoCharacterActionConext implements IActionContext {
MOMENTUM_METER_DEFINITION,
];
}

get trackTypes() {
return this.campaignContext.trackTypes;
}
}

export class CharacterActionContext implements IActionContext {
Expand Down Expand Up @@ -217,6 +221,10 @@ export class CharacterActionContext implements IActionContext {
updater,
);
}

get trackTypes() {
return this.campaignContext.trackTypes;
}
}

export type ActionContext = CharacterActionContext | NoCharacterActionConext;
Expand Down
21 changes: 21 additions & 0 deletions src/datastore/data-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export interface IDataContext {
readonly moveCategories: StandardIndex<DataswornTypes["move_category"]>;
readonly oracles: StandardIndex<DataswornTypes["oracle"]>;
readonly truths: StandardIndex<DataswornTypes["truth"]>;
readonly trackTypes: Set<string>;

readonly rulesPackages: StandardIndex<DataswornTypes["rules_package"]>;
readonly ruleset: Ruleset;
Expand Down Expand Up @@ -67,6 +68,22 @@ export class MockDataContext implements IDataContext {
get ruleset(): Ruleset {
throw new Error("not implemented");
}

get trackTypes(): Set<string> {
return trackTypesFromMoves(this.moves);
}
}

export function trackTypesFromMoves(
moves: StandardIndex<DataswornTypes["move"]>,
): Set<string> {
const types = new Set<string>();
moves.forEach((move) => {
if (move.roll_type == "progress_roll") {
types.add(move.tracks.category);
}
});
return types;
}

// TODO(@cwegrzyn): make this cacheable
Expand Down Expand Up @@ -123,4 +140,8 @@ export class BaseDataContext implements ICompleteDataContext {

return new Ruleset(base[0], expansions);
}

get trackTypes() {
return trackTypesFromMoves(this.moves);
}
}
22 changes: 10 additions & 12 deletions src/tracks/progress-create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import {
debounce,
} from "obsidian";
import { generateObsidianFilename } from "utils/filename";
import { CampaignSelectComponent } from "utils/ui/settings/campaign-suggest";
import { FolderTextSuggest } from "utils/ui/settings/folder";
import { GenericTextSuggest } from "utils/ui/settings/generic-text-suggest";
import { ChallengeRanks, ProgressTrack } from "./progress";
import { CampaignSelectComponent } from "utils/ui/settings/campaign-suggest";
import { RelativeFolderSearchComponent } from "utils/ui/settings/relative-folder-search";
import { ChallengeRanks, ProgressTrack } from "./progress";

export type ProgressTrackCreateResultType = {
rank: ChallengeRanks;
Expand Down Expand Up @@ -65,6 +65,9 @@ export class ProgressTrackCreateModal extends Modal {
.setBaseFolder(campaign.file.parent!)
.setValue(this.plugin.settings.defaultProgressTrackFolder)
.onChanged();
trackTypeSuggest.items = [
...this.plugin.campaignManager.campaignContextFor(campaign).trackTypes,
];
};

const validate = debounce(() => {
Expand Down Expand Up @@ -131,9 +134,6 @@ export class ProgressTrackCreateModal extends Modal {
},
);

onChangeCampaign();
validate();

// TODO: since the string value equals the display string, i don't actually know if this
// is working as intended with the options
new Setting(contentEl).setName("Rank").addDropdown((dropdown) =>
Expand All @@ -145,18 +145,13 @@ export class ProgressTrackCreateModal extends Modal {
.setValue(this.result.rank),
);

let trackTypeSuggest!: GenericTextSuggest;
new Setting(contentEl).setName("Type").addSearch((search) => {
search.setPlaceholder(
"What kind of track is this? (e.g., Vow, Connection)",
);

new GenericTextSuggest(this.app, search.inputEl, [
"Vow",
"Connection",
"Combat",
"Scene Challenge",
"Expedition",
]);
trackTypeSuggest = new GenericTextSuggest(this.app, search.inputEl, []);

search.onChange((value) => {
this.result.trackType = value;
Expand All @@ -180,6 +175,9 @@ export class ProgressTrackCreateModal extends Modal {
this.close();
}),
);

onChangeCampaign();
validate();
}

accept(): void {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/ui/settings/generic-text-suggest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export class GenericTextSuggest extends AbstractInputSuggest<
constructor(
app: App,
readonly inputEl: HTMLInputElement,
public readonly items: string[],
public items: string[],
) {
super(app, inputEl);
}
Expand Down

0 comments on commit 14c30aa

Please sign in to comment.