diff --git a/resources/lang/en.json b/resources/lang/en.json index 58af1c01b..2c61a00be 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -949,7 +949,8 @@ "default": "Default" }, "select_skin": "Select Skin", - "selected": "selected" + "selected": "selected", + "search": "Search..." }, "cosmetics": { "artist_label": "Artist:" diff --git a/src/client/TerritoryPatternsModal.ts b/src/client/TerritoryPatternsModal.ts index 9d9c995ed..6702d05ef 100644 --- a/src/client/TerritoryPatternsModal.ts +++ b/src/client/TerritoryPatternsModal.ts @@ -22,6 +22,7 @@ export class TerritoryPatternsModal extends BaseModal { @state() private selectedPattern: PlayerPattern | null; @state() private selectedColor: string | null = null; + @state() private search = ""; private cosmetics: Cosmetics | null = null; private userSettings: UserSettings = new UserSettings(); @@ -67,6 +68,15 @@ export class TerritoryPatternsModal extends BaseModal { this.refresh(); } + private includedInSearch(name: string): boolean { + const displayName = name.replace(/_/g, " "); + return displayName.toLowerCase().includes(this.search.toLowerCase()); + } + + private handleSearch(event: Event) { + this.search = (event.target as HTMLInputElement).value; + } + private renderPatternGrid(): TemplateResult { const buttons: TemplateResult[] = []; const patterns: (Pattern | null)[] = [ @@ -74,6 +84,12 @@ export class TerritoryPatternsModal extends BaseModal { ...Object.values(this.cosmetics?.patterns ?? {}), ]; for (const pattern of patterns) { + if (pattern === null && this.search) { + continue; + } + if (pattern !== null && !this.includedInSearch(pattern.name)) { + continue; + } const colorPalettes = pattern ? [...(pattern.colorPalettes ?? []), null] : [null]; @@ -135,6 +151,19 @@ export class TerritoryPatternsModal extends BaseModal { ariaLabel: translateText("common.back"), rightContent: html``, })} + +
+ +