From 769cadb6f402b086e592763ceaa989c076c6e610 Mon Sep 17 00:00:00 2001 From: jkronlachner Date: Fri, 17 Jan 2025 10:23:58 +0100 Subject: [PATCH 1/3] fix(supabase): fixed 'in'-filter when used inside 'or' not generating correct supabase syntax --- packages/supabase/src/utils/generateFilter.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/supabase/src/utils/generateFilter.ts b/packages/supabase/src/utils/generateFilter.ts index 70cb5cfd72c5..35eebf1a170e 100644 --- a/packages/supabase/src/utils/generateFilter.ts +++ b/packages/supabase/src/utils/generateFilter.ts @@ -70,6 +70,9 @@ export const generateFilter = (filter: CrudFilter, query: any) => { if (item.operator === "endswith") { value = `%${value}`; } + if (item.operator === "in") { + value = `(${item.value.map((val: any) => `"${val}"`).join(",")})`; + } return `${item.field}.${mapOperator(item.operator)}.${value}`; } From 0ac2cce0b6e667260a993b6d23208f2d6b697333 Mon Sep 17 00:00:00 2001 From: jkronlachner Date: Fri, 17 Jan 2025 13:43:55 +0100 Subject: [PATCH 2/3] chore(supabase): added changeset --- .changeset/good-eyes-cover.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/good-eyes-cover.md diff --git a/.changeset/good-eyes-cover.md b/.changeset/good-eyes-cover.md new file mode 100644 index 000000000000..58d5d9c98c99 --- /dev/null +++ b/.changeset/good-eyes-cover.md @@ -0,0 +1,9 @@ +--- +"@refinedev/supabase": patch +--- + +fix: fixed 'in'-filter when used inside 'or' not generating correct supabase syntax + +When using the 'in'-filter inside a Conditional 'or' Filter the syntax being pushed to supabase would be incorrect. + +This resolves # From 94e82acb7a1eace364cae4ebbb3b128c9629518b Mon Sep 17 00:00:00 2001 From: jkronlachner Date: Fri, 17 Jan 2025 13:46:09 +0100 Subject: [PATCH 3/3] chore(supabase): added tests for correct nesting and correct issue number --- .changeset/good-eyes-cover.md | 2 +- packages/supabase/test/getList/index.mock.ts | 74 ++++++++++++++++++++ packages/supabase/test/getList/index.spec.ts | 17 +++++ 3 files changed, 92 insertions(+), 1 deletion(-) diff --git a/.changeset/good-eyes-cover.md b/.changeset/good-eyes-cover.md index 58d5d9c98c99..71250d002dff 100644 --- a/.changeset/good-eyes-cover.md +++ b/.changeset/good-eyes-cover.md @@ -6,4 +6,4 @@ fix: fixed 'in'-filter when used inside 'or' not generating correct supabase syn When using the 'in'-filter inside a Conditional 'or' Filter the syntax being pushed to supabase would be incorrect. -This resolves # +This resolves #6651 diff --git a/packages/supabase/test/getList/index.mock.ts b/packages/supabase/test/getList/index.mock.ts index 44609cf55730..fb35372c1ea9 100644 --- a/packages/supabase/test/getList/index.mock.ts +++ b/packages/supabase/test/getList/index.mock.ts @@ -2073,3 +2073,77 @@ nock("https://iwdfzvfqbtokqetmbmbp.supabase.co:443", { 'h3=":443"; ma=86400', ], ); + +nock("https://iwdfzvfqbtokqetmbmbp.supabase.co:443", { + encodedQueryParams: true, +}) + .get("/rest/v1/posts") + .query({ + select: "%2A", + offset: "0", + limit: "10", + or: "%28id.in.%28%221%22%2C%222%22%29%29", + }) + .reply( + 200, + [ + { + id: 1, + title: "Black Psorotichia Lichen", + slug: "61a31089-c85d-48a0-a4be-d5dce5c96b6a", + createdAt: "2024-04-24T13:20:10.200327+00:00", + content: + "Integer tincidunt ante vel ipsum. Praesent blandit lacinia erat. Vestibulum sed magna at nunc commodo placerat.\n\nPraesent blandit. Nam nulla. Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.\n\nMorbi porttitor lorem id ligula. Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.", + categoryId: 7, + images: null, + }, + { + id: 2, + title: "Dust Lichen", + slug: "ca038c02-0c6f-417b-aaf8-6f51b777d1f5", + createdAt: "2024-04-24T13:20:10.200327+00:00", + content: + "Fusce posuere felis sed lacus. Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl. Nunc rhoncus dui vel sem.\n\nSed sagittis. Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci. Nullam molestie nibh in lectus.", + categoryId: 7, + images: null, + }, + ], + [ + "Date", + "Thu, 25 Apr 2024 07:26:59 GMT", + "Content-Type", + "application/json; charset=utf-8", + "Transfer-Encoding", + "chunked", + "Connection", + "close", + "Content-Range", + "0-1/2", + "CF-Ray", + "879c9ba35d5b68ae-IST", + "CF-Cache-Status", + "DYNAMIC", + "Access-Control-Allow-Origin", + "*", + "Content-Location", + "/posts?limit=10&offset=0&or=%28title.ilike.%25Black+Psorotichia%25%2Ccontent.ilike.%25Sed+sagittis%25%29&select=%2A", + "Strict-Transport-Security", + "max-age=15552000; includeSubDomains", + "Vary", + "Accept-Encoding", + "Via", + "kong/2.8.1", + "content-profile", + "public", + "sb-gateway-version", + "1", + "x-kong-proxy-latency", + "1", + "x-kong-upstream-latency", + "3", + "Server", + "cloudflare", + "alt-svc", + 'h3=":443"; ma=86400', + ], + ); diff --git a/packages/supabase/test/getList/index.spec.ts b/packages/supabase/test/getList/index.spec.ts index 4f55f9ce2b2a..45df54f64d51 100644 --- a/packages/supabase/test/getList/index.spec.ts +++ b/packages/supabase/test/getList/index.spec.ts @@ -427,6 +427,23 @@ describe("filtering", () => { expect(total).toBe(2); }); + it("in operator should work correctly with or", async () => { + const { data, total } = await dataProvider(supabaseClient).getList({ + resource: "posts", + filters: [ + { + operator: "or", + value: [{ field: "id", operator: "in", value: [1, 2] }], + }, + ], + }); + + expect(data).toHaveLength(2); + expect(data[0].title).toBe("Black Psorotichia Lichen"); + expect(data[1].title).toBe("Dust Lichen"); + expect(total).toBe(2); + }); + it("should change schema", async () => { const { data } = await dataProvider(supabaseClient).getList({ resource: "posts",