MiNiMALM
tRPC3y ago
3 replies
MiNiMAL

Dynamic input not leading to changes on the front end

I'm building a dynamic procedure to access my database via Drizzle ORM.

Ideally a developer would be able to send input parameters to the procedure and have it's output adjusted by that input.

For example, in the below, I have a table called demotable which has an updatedAt column. If a developer passes in columns: { updatedAt: false } to the procedure, then ideally the column would not get included in the result.

If I hard code the columns parameter in the backend itself, then it works great. Is there a way to accomplish this for the full round trip?

// Inferring type for the findMany argument
type FindManyArg = Parameters<DB['query']['demotable']['findMany']>[0]

// ...

//Setting up the procedure
discordTest: privateProcedure
  .input(input => input as FindManyArg)
  .query(async ({ input }) => {
    const result = await db.query.demotable.findMany(input)
    return result
}),

// On the front end,
const { data: demo } = trpc.discordTest.useQuery({
  columns: { updatedAt: false }, // <== this is properly typed and intellisense is working
})
console.log(demo?.[0].updatedAt) // <=== does not error

// ============================

// Hardcoding columns does properly reflect on the front end
const result = await db.query.demotable.findMany({
  ...input,
  columns: { updatedAt: false },
})
return result

// On the front end,
const { data: demo } = trpc.discordTest.useQuery({})
console.log(demo?.[0].updatedAt) // <=== errors as expected
Was this page helpful?