Files
twenty/packages/twenty-front/nyc.config.cjs
martmull 42e060ac74 Ws poc (#11293)
related to https://github.com/twentyhq/core-team-issues/issues/601

## Done
- add a `onDbEvent` `Subscription` graphql endpoint to listen to
database_event using what we have done with webhooks:
- you can subscribe to any `action` (created, updated, ...) for any
`objectNameSingular` or a specific `recordId`. Parameters are nullable
and treated as wildcards when null.
  - returns events with following shape
```typescript
  @Field(() => String)
  eventId: string;

  @Field()
  emittedAt: string;

  @Field(() => DatabaseEventAction)
  action: DatabaseEventAction;

  @Field(() => String)
  objectNameSingular: string;

  @Field(() => GraphQLJSON)
  record: ObjectRecord;

  @Field(() => [String], { nullable: true })
  updatedFields?: string[];
```
- front provide a componentEffect `<ListenRecordUpdatesEffect />` that
listen for an `objectNameSingular`, a `recordId` and a list of
`listenedFields`. It subscribes to record updates and updates its apollo
cached value for specified `listenedFields`
- subscription is protected with credentials

## Result

Here is an application with `workflowRun`


https://github.com/user-attachments/assets/c964d857-3b54-495f-bf14-587ba26c5a8c

---------

Co-authored-by: prastoin <paul@twenty.com>
2025-04-17 16:03:51 +02:00

50 lines
1002 B
JavaScript

// @ts-check
const globalCoverage = {
branches: 23,
statements: 39,
lines: 39,
functions: 28,
exclude: ['src/generated/**/*'],
};
const modulesCoverage = {
branches: 25,
statements: 43,
lines: 44,
functions: 38,
include: ['src/modules/**/*'],
exclude: ['src/**/*.ts'],
};
const pagesCoverage = {
branches: 35,
statements: 60,
lines: 60,
functions: 45,
exclude: ['src/generated/**/*', 'src/modules/**/*', 'src/**/*.ts'],
};
const performanceCoverage = {
branches: 35,
statements: 60,
lines: 60,
functions: 45,
exclude: ['src/generated/**/*', 'src/modules/**/*', 'src/**/*.ts'],
};
const getCoverageConfig = () => {
const storybookStoriesFolders = process.env.STORYBOOK_SCOPE;
switch (storybookStoriesFolders) {
case 'pages':
return pagesCoverage;
case 'modules':
return modulesCoverage;
case 'performance':
return performanceCoverage;
default:
return globalCoverage;
}
};
module.exports = getCoverageConfig();