diff --git a/examples/data-provider-supabase/src/App.tsx b/examples/data-provider-supabase/src/App.tsx index 40d8088c49519..d9540ecf689f5 100644 --- a/examples/data-provider-supabase/src/App.tsx +++ b/examples/data-provider-supabase/src/App.tsx @@ -301,7 +301,7 @@ const App: React.FC = () => { * Please set `liveMode: "auto"` or `liveMode: "manual"` manually while using real-time features of refine. */ options={{ - liveMode: "off", + liveMode: "auto", syncWithLocation: true, warnWhenUnsavedChanges: true, }} diff --git a/packages/supabase/src/liveProvider/index.ts b/packages/supabase/src/liveProvider/index.ts index 19200da1de4c4..95621c68722ea 100644 --- a/packages/supabase/src/liveProvider/index.ts +++ b/packages/supabase/src/liveProvider/index.ts @@ -49,31 +49,40 @@ export const liveProvider = ( } }; + // TEMP: testing PR visibility + + // ✅ FIXED: Supabase Realtime supports only ONE filter const mapFilter = (filters?: CrudFilters): string | undefined => { - if (!filters || filters?.length === 0) { + if (!filters || filters.length === 0) { return; } - return filters - .map((filter: CrudFilter): string | undefined => { - if ("field" in filter) { - return `${filter.field}=${mapOperator(filter.operator)}.${ - filter.value - }`; - } - return; - }) - .filter(Boolean) - .join(","); + if (filters.length > 1) { + console.warn( + "[refine][supabase] Supabase Realtime does not support multiple filters. Using only the first filter.", + ); + } + + const filter = filters[0]; + + if ("field" in filter) { + return `${filter.field}=${mapOperator(filter.operator)}.${ + filter.value + }`; + } + + return; }; const events = types .map((x) => supabaseTypes[x]) .sort((a, b) => a.localeCompare(b)); + const filter = mapFilter(params?.filters); const ch = `${channel}:${events.join("|")}${filter ? `:${filter}` : ""}`; let client = supabaseClient.channel(ch); + for (let i = 0; i < events.length; i++) { client = client.on( "postgres_changes",