Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Index track categories based on existing moves #461

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading