mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 02:37:05 +02:00
Merge pull request #277 from Hitjack007/search-issues
This commit is contained in:
5 files changed
+55
-7
No files matched your search
@@ -350,6 +350,15 @@ export abstract class ServerBlitzKitAPI1 extends ServerBlitzKitAPI0 {
|
|||||||
const tankClass =
|
const tankClass =
|
||||||
this.blitzTankClassToBlitzkit[blitzTankClass as BlitzTankClass];
|
this.blitzTankClassToBlitzkit[blitzTankClass as BlitzTankClass];
|
||||||
|
|
||||||
|
const canonicalFullName = this.getString(tank.userString);
|
||||||
|
const name =
|
||||||
|
(tank.shortUserString
|
||||||
|
? this.getString(tank.shortUserString)
|
||||||
|
: undefined) ?? canonicalFullName;
|
||||||
|
// only supply full name if it's different from the displayed short name to save some bytes
|
||||||
|
const name_full =
|
||||||
|
name === canonicalFullName ? undefined : canonicalFullName;
|
||||||
|
|
||||||
tankDefinitions.tanks[tankId] = {
|
tankDefinitions.tanks[tankId] = {
|
||||||
ancestors: [],
|
ancestors: [],
|
||||||
successors: [],
|
successors: [],
|
||||||
@@ -367,10 +376,8 @@ export abstract class ServerBlitzKitAPI1 extends ServerBlitzKitAPI0 {
|
|||||||
typeof equipment === "string" ? equipment : equipment.at(-1)!,
|
typeof equipment === "string" ? equipment : equipment.at(-1)!,
|
||||||
max_consumables: tankDefinition.root.consumableSlots,
|
max_consumables: tankDefinition.root.consumableSlots,
|
||||||
max_provisions: tankDefinition.root.provisionSlots,
|
max_provisions: tankDefinition.root.provisionSlots,
|
||||||
name:
|
name,
|
||||||
(tank.shortUserString
|
name_full,
|
||||||
? this.getString(tank.shortUserString)
|
|
||||||
: undefined) ?? this.getString(tank.userString),
|
|
||||||
slug,
|
slug,
|
||||||
nation,
|
nation,
|
||||||
type: tankTags.includes("collectible")
|
type: tankTags.includes("collectible")
|
||||||
|
|||||||
@@ -18,11 +18,22 @@ export async function fetchTankNames(api: BlitzKitAPI) {
|
|||||||
searchableNameDeburr.locales[key] = deburr(value);
|
searchableNameDeburr.locales[key] = deburr(value);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const searchableNameFull: I18nString = {
|
||||||
|
locales: { ...tank.name_full?.locales },
|
||||||
|
};
|
||||||
|
const searchableNameFullDeburr: I18nString = { locales: {} };
|
||||||
|
|
||||||
|
Object.entries(searchableNameFull.locales).forEach(([key, value]) => {
|
||||||
|
searchableNameFullDeburr.locales[key] = deburr(value);
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: tank.id,
|
id: tank.id,
|
||||||
name: tank.name,
|
name: tank.name,
|
||||||
searchableName: tank.name,
|
searchableName: tank.name,
|
||||||
searchableNameDeburr,
|
searchableNameDeburr,
|
||||||
|
searchableNameFull,
|
||||||
|
searchableNameFullDeburr,
|
||||||
camouflages: tank.camouflages
|
camouflages: tank.camouflages
|
||||||
?.map((id) =>
|
?.map((id) =>
|
||||||
locales.supported.map(
|
locales.supported.map(
|
||||||
@@ -45,6 +56,8 @@ export const SEARCH_KEYS = [
|
|||||||
.map(({ locale }) => [
|
.map(({ locale }) => [
|
||||||
`searchableName.locales.${locale}`,
|
`searchableName.locales.${locale}`,
|
||||||
`searchableNameDeburr.locales.${locale}`,
|
`searchableNameDeburr.locales.${locale}`,
|
||||||
|
`searchableNameFull.locales.${locale}`,
|
||||||
|
`searchableNameFullDeburr.locales.${locale}`,
|
||||||
])
|
])
|
||||||
.flat(),
|
.flat(),
|
||||||
"camouflages",
|
"camouflages",
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ message TankDefinition {
|
|||||||
required uint32 weight = 31;
|
required uint32 weight = 31;
|
||||||
required string dev_name = 32;
|
required string dev_name = 32;
|
||||||
optional Equalizer equalizer = 33;
|
optional Equalizer equalizer = 33;
|
||||||
|
optional I18nString name_full = 34;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Equalizer {
|
message Equalizer {
|
||||||
|
|||||||
@@ -292,6 +292,7 @@ export interface TankDefinition {
|
|||||||
weight: number;
|
weight: number;
|
||||||
dev_name: string;
|
dev_name: string;
|
||||||
equalizer?: Equalizer | undefined;
|
equalizer?: Equalizer | undefined;
|
||||||
|
name_full?: I18nString | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TankDefinition_RolesEntry {
|
export interface TankDefinition_RolesEntry {
|
||||||
@@ -651,6 +652,7 @@ function createBaseTankDefinition(): TankDefinition {
|
|||||||
weight: 0,
|
weight: 0,
|
||||||
dev_name: "",
|
dev_name: "",
|
||||||
equalizer: undefined,
|
equalizer: undefined,
|
||||||
|
name_full: undefined,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -752,6 +754,9 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
if (message.equalizer !== undefined) {
|
if (message.equalizer !== undefined) {
|
||||||
Equalizer.encode(message.equalizer, writer.uint32(266).fork()).join();
|
Equalizer.encode(message.equalizer, writer.uint32(266).fork()).join();
|
||||||
}
|
}
|
||||||
|
if (message.name_full !== undefined) {
|
||||||
|
I18nString.encode(message.name_full, writer.uint32(274).fork()).join();
|
||||||
|
}
|
||||||
return writer;
|
return writer;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1051,6 +1056,14 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
message.equalizer = Equalizer.decode(reader, reader.uint32());
|
message.equalizer = Equalizer.decode(reader, reader.uint32());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
case 34: {
|
||||||
|
if (tag !== 274) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
message.name_full = I18nString.decode(reader, reader.uint32());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((tag & 7) === 4 || tag === 0) {
|
if ((tag & 7) === 4 || tag === 0) {
|
||||||
break;
|
break;
|
||||||
@@ -1111,6 +1124,7 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
||||||
dev_name: isSet(object.dev_name) ? globalThis.String(object.dev_name) : "",
|
dev_name: isSet(object.dev_name) ? globalThis.String(object.dev_name) : "",
|
||||||
equalizer: isSet(object.equalizer) ? Equalizer.fromJSON(object.equalizer) : undefined,
|
equalizer: isSet(object.equalizer) ? Equalizer.fromJSON(object.equalizer) : undefined,
|
||||||
|
name_full: isSet(object.name_full) ? I18nString.fromJSON(object.name_full) : undefined,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1218,6 +1232,9 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
if (message.equalizer !== undefined) {
|
if (message.equalizer !== undefined) {
|
||||||
obj.equalizer = Equalizer.toJSON(message.equalizer);
|
obj.equalizer = Equalizer.toJSON(message.equalizer);
|
||||||
}
|
}
|
||||||
|
if (message.name_full !== undefined) {
|
||||||
|
obj.name_full = I18nString.toJSON(message.name_full);
|
||||||
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1271,6 +1288,9 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
message.equalizer = (object.equalizer !== undefined && object.equalizer !== null)
|
message.equalizer = (object.equalizer !== undefined && object.equalizer !== null)
|
||||||
? Equalizer.fromPartial(object.equalizer)
|
? Equalizer.fromPartial(object.equalizer)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
message.name_full = (object.name_full !== undefined && object.name_full !== null)
|
||||||
|
? I18nString.fromPartial(object.name_full)
|
||||||
|
: undefined;
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export function SearchBar({ topResult, skeleton, onSelect }: SearchBarProps) {
|
|||||||
draft.search = sanitized.length === 0 ? null : sanitized;
|
draft.search = sanitized.length === 0 ? null : sanitized;
|
||||||
});
|
});
|
||||||
}, 500),
|
}, 500),
|
||||||
[]
|
[],
|
||||||
);
|
);
|
||||||
const handleChange = useCallback(() => {
|
const handleChange = useCallback(() => {
|
||||||
if (!searching) {
|
if (!searching) {
|
||||||
@@ -46,7 +46,14 @@ export function SearchBar({ topResult, skeleton, onSelect }: SearchBarProps) {
|
|||||||
}, [searching]);
|
}, [searching]);
|
||||||
const handleKeyDown = useCallback<KeyboardEventHandler>(
|
const handleKeyDown = useCallback<KeyboardEventHandler>(
|
||||||
(event) => {
|
(event) => {
|
||||||
if (event.key !== "Enter" || !topResult || searching) return;
|
if (
|
||||||
|
event.key !== "Enter" ||
|
||||||
|
!topResult ||
|
||||||
|
!TankFilters.state.search ||
|
||||||
|
TankFilters.state.searching
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
@@ -56,7 +63,7 @@ export function SearchBar({ topResult, skeleton, onSelect }: SearchBarProps) {
|
|||||||
window.location.href = `/tanks/${topResult.slug}`;
|
window.location.href = `/tanks/${topResult.slug}`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[topResult]
|
[topResult],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in new issue
Block a user