mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 00:03:33 +10:00
## Description
**Fixes issues with mismatching state between document steps.**
For example, editing a recipient and proceeding to the next step may not
display the updated recipient. And going back will display the old
recipient instead of the updated values.
**This PR also improves mutation and query speeds by adding logic to
bypass query invalidation.**
```ts
export const trpc = createTRPCReact<AppRouter>({
unstable_overrides: {
useMutation: {
async onSuccess(opts) {
await opts.originalFn();
// This forces mutations to wait for all the queries on the page to reload, and in
// this case one of the queries is `searchDocument` for the command overlay, which
// on average takes ~500ms. This means that every single mutation must wait for this.
await opts.queryClient.invalidateQueries();
},
},
},
});
```
I've added workarounds to allow us to bypass things such as batching and
invalidating queries. But I think we should instead remove this and
update all the mutations where a query is required for a more optimised
system.
## Example benchmarks
Using stg-app vs this preview there's an average 50% speed increase
across mutations.
**Set signer step:**
Average old speed: ~1100ms
Average new speed: ~550ms
**Set recipient step:**
Average old speed: ~1200ms
Average new speed: ~600ms
**Set fields step:**
Average old speed: ~1200ms
Average new speed: ~600ms
## Related Issue
This will resolve #470
## Changes Made
- Added ability to skip batch queries
- Added a state to store the required document data.
- Refetch the data between steps if/when required
- Optimise mutations and queries
## Checklist
- [X] I have tested these changes locally and they work as expected.
- [X] I have followed the project's coding style guidelines.
---------
Co-authored-by: Lucas Smith <me@lucasjamessmith.me>
33 lines
756 B
TypeScript
33 lines
756 B
TypeScript
import { prisma } from '@documenso/prisma';
|
|
import type { DocumentWithDetails } from '@documenso/prisma/types/document';
|
|
|
|
import { getDocumentWhereInput } from './get-document-by-id';
|
|
|
|
export type GetDocumentWithDetailsByIdOptions = {
|
|
id: number;
|
|
userId: number;
|
|
teamId?: number;
|
|
};
|
|
|
|
export const getDocumentWithDetailsById = async ({
|
|
id,
|
|
userId,
|
|
teamId,
|
|
}: GetDocumentWithDetailsByIdOptions): Promise<DocumentWithDetails> => {
|
|
const documentWhereInput = await getDocumentWhereInput({
|
|
documentId: id,
|
|
userId,
|
|
teamId,
|
|
});
|
|
|
|
return await prisma.document.findFirstOrThrow({
|
|
where: documentWhereInput,
|
|
include: {
|
|
documentData: true,
|
|
documentMeta: true,
|
|
Recipient: true,
|
|
Field: true,
|
|
},
|
|
});
|
|
};
|