mirror of https://github.com/usememos/memos.git
fix(web): convert visibility enum values to string names in filter expressions
Problem: The Explore page filter was sending visibility filter as: visibility in ["3", "2"] when it should send: visibility in ["PUBLIC", "PROTECTED"] The backend CEL filter parser expects string enum names, not numeric values. This caused the Explore page to return no memos even when public memos existed. Solution: - Added getVisibilityName() helper to convert Visibility enum values to string names - Updated useMemoFilters to use getVisibilityName() when building visibility filter - Follows same pattern as existing getInstanceSettingKeyName() and getUserSettingKeyName() - Added validation to warn on invalid enum values Files changed: - web/src/store/common.ts: Add getVisibilityName() helper with validation - web/src/hooks/useMemoFilters.ts: Use getVisibilityName() in visibility filter 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
3d893a7394
commit
06a0f8d618
|
|
@ -1,6 +1,6 @@
|
|||
import { useMemo } from "react";
|
||||
import { instanceStore, userStore } from "@/store";
|
||||
import { extractUserIdFromName } from "@/store/common";
|
||||
import { extractUserIdFromName, getVisibilityName } from "@/store/common";
|
||||
import memoFilterStore from "@/store/memoFilter";
|
||||
import { InstanceSetting_Key } from "@/types/proto/api/v1/instance_service_pb";
|
||||
import { Visibility } from "@/types/proto/api/v1/memo_service_pb";
|
||||
|
|
@ -81,7 +81,8 @@ export const useMemoFilters = (options: UseMemoFiltersOptions = {}): string | un
|
|||
if (visibilities && visibilities.length > 0) {
|
||||
// Build visibility filter based on allowed visibility levels
|
||||
// Format: visibility in ["PUBLIC", "PROTECTED"]
|
||||
const visibilityValues = visibilities.map((v) => `"${v}"`).join(", ");
|
||||
// Convert enum values to string names (e.g., 3 -> "PUBLIC", 2 -> "PROTECTED")
|
||||
const visibilityValues = visibilities.map((v) => `"${getVisibilityName(v)}"`).join(", ");
|
||||
conditions.push(`visibility in [${visibilityValues}]`);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { InstanceSetting_Key } from "@/types/proto/api/v1/instance_service_pb";
|
||||
import { Visibility } from "@/types/proto/api/v1/memo_service_pb";
|
||||
import { UserSetting_Key } from "@/types/proto/api/v1/user_service_pb";
|
||||
|
||||
export const instanceSettingNamePrefix = "instance/settings/";
|
||||
|
|
@ -40,3 +41,17 @@ export const getUserSettingKeyName = (key: UserSetting_Key): string => {
|
|||
export const buildUserSettingName = (username: string, key: UserSetting_Key): string => {
|
||||
return `${username}/settings/${getUserSettingKeyName(key)}`;
|
||||
};
|
||||
|
||||
// Helper function to convert Visibility enum value to string name
|
||||
// Used when building filter expressions that require string enum names instead of numeric values
|
||||
// Example: visibility in ["PUBLIC", "PROTECTED"] instead of visibility in ["3", "2"]
|
||||
export const getVisibilityName = (visibility: Visibility): string => {
|
||||
// TypeScript enum reverse mapping: converts numeric value to string name
|
||||
// e.g., Visibility.PUBLIC (3) -> "PUBLIC"
|
||||
const name = Visibility[visibility];
|
||||
if (!name) {
|
||||
console.warn(`Invalid visibility value: ${visibility}, defaulting to PUBLIC`);
|
||||
return "PUBLIC";
|
||||
}
|
||||
return name;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue