Skip to content

Commit 5d1d7da

Browse files
committed
fix types
1 parent 59c5673 commit 5d1d7da

12 files changed

Lines changed: 272 additions & 92 deletions

File tree

apps/events/src/routes/podcasts.lazy.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { Person, Podcast, Topic } from '@/schema';
21
import { useEntities, useEntity, usePublicSpaces } from '@graphprotocol/hypergraph-react';
32
import { createLazyFileRoute } from '@tanstack/react-router';
3+
import { Person, Podcast, Topic } from '@/schema';
44

55
export const Route = createLazyFileRoute('/podcasts')({
66
component: RouteComponent,
@@ -37,12 +37,13 @@ function RouteComponent() {
3737
valueSpaces: ['021265e2-d839-47c3-8d03-0ee3dfb29ffc', '95a4a1cc-bfcc-4038-b7a1-02c513d27700'],
3838
},
3939
},
40+
skillsTotalCount: true,
4041
},
4142
includeSpaceIds: true,
4243
});
4344
console.log({ person, personInvalidEntity, personInvalidRelationEntities });
4445
if (person) {
45-
console.log('person', person.spaceIds);
46+
console.log('person', person.skillsTotalCount);
4647
}
4748

4849
const {

packages/hypergraph-react/src/hooks/use-entities.tsx

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@ import type { Entity } from '@graphprotocol/hypergraph';
22
import type * as Schema from 'effect/Schema';
33
import { useHypergraphApp } from '../HypergraphAppContext.js';
44
import { useEntitiesPrivate } from '../internal/use-entities-private.js';
5-
import { useEntitiesPublic } from '../internal/use-entities-public.js';
5+
import { type UseEntitiesPublicResult, useEntitiesPublic } from '../internal/use-entities-public.js';
66
import { useHypergraphSpaceInternal } from '../internal/use-hypergraph-space-internal.js';
77

88
type SpaceSelectionInputOptionInContext = {
99
space?: never;
1010
spaces?: never;
1111
};
1212

13-
type UseEntitiesParams<S extends Schema.Schema.AnyNoContext> = (
14-
| Entity.SpaceSelectionInput
15-
| SpaceSelectionInputOptionInContext
16-
) & {
17-
mode: 'public' | 'private';
13+
type UseEntitiesParams<
14+
S extends Schema.Schema.AnyNoContext,
15+
IncludeSpaceIds extends boolean | undefined = boolean | undefined,
16+
Mode extends 'public' | 'private' = 'public' | 'private',
17+
> = (Entity.SpaceSelectionInput | SpaceSelectionInputOptionInContext) & {
18+
mode: Mode;
1819
filter?: Entity.EntityFilter<Schema.Schema.Type<S>> | undefined;
1920
// TODO: restrict multi-level nesting to the actual relation keys
2021
include?: Entity.EntityInclude<S> | undefined;
@@ -27,11 +28,34 @@ type UseEntitiesParams<S extends Schema.Schema.AnyNoContext> = (
2728
}
2829
| undefined;
2930
backlinksTotalCountsTypeId1?: string | undefined;
30-
includeSpaceIds?: boolean | undefined;
31+
includeSpaceIds?: IncludeSpaceIds;
3132
logInvalidResults?: boolean;
3233
};
3334

34-
export function useEntities<const S extends Schema.Schema.AnyNoContext>(type: S, params: UseEntitiesParams<S>) {
35+
type UseEntitiesPublicReturn<
36+
S extends Schema.Schema.AnyNoContext,
37+
IncludeSpaceIds extends boolean | undefined,
38+
> = UseEntitiesPublicResult<S, IncludeSpaceIds> & { deleted: [] };
39+
40+
type UseEntitiesPrivateResult<S extends Schema.Schema.AnyNoContext> = Omit<
41+
UseEntitiesPublicResult<S, false>,
42+
'data'
43+
> & {
44+
data: (Entity.Entity<S> & { backlinksTotalCountsTypeId1?: number })[];
45+
deleted: Entity.Entity<S>[];
46+
};
47+
48+
type UseEntitiesResult<
49+
S extends Schema.Schema.AnyNoContext,
50+
IncludeSpaceIds extends boolean | undefined,
51+
Mode extends 'public' | 'private',
52+
> = Mode extends 'public' ? UseEntitiesPublicReturn<S, IncludeSpaceIds> : UseEntitiesPrivateResult<S>;
53+
54+
export function useEntities<
55+
const S extends Schema.Schema.AnyNoContext,
56+
IncludeSpaceIds extends boolean | undefined = false,
57+
Mode extends 'public' | 'private' = 'public',
58+
>(type: S, params: UseEntitiesParams<S, IncludeSpaceIds, Mode>): UseEntitiesResult<S, IncludeSpaceIds, Mode> {
3559
const {
3660
mode,
3761
filter,
@@ -50,15 +74,15 @@ export function useEntities<const S extends Schema.Schema.AnyNoContext>(type: S,
5074
const logInvalidResults = logInvalidResultsParam ?? contextLogInvalidResults ?? true;
5175
const resolvedSpace = space ?? spaceFromContext;
5276
const publicSpaceParams = spaces ? { spaces } : { space: resolvedSpace };
53-
const publicResult = useEntitiesPublic(type, {
77+
const publicResult = useEntitiesPublic<S, IncludeSpaceIds>(type, {
5478
enabled: mode === 'public',
5579
filter,
5680
include,
5781
first,
5882
offset,
5983
orderBy,
6084
backlinksTotalCountsTypeId1,
61-
includeSpaceIds,
85+
...(includeSpaceIds !== undefined ? { includeSpaceIds } : {}),
6286
...publicSpaceParams,
6387
logInvalidResults,
6488
});
@@ -68,12 +92,12 @@ export function useEntities<const S extends Schema.Schema.AnyNoContext>(type: S,
6892
return {
6993
...publicResult,
7094
deleted: [],
71-
};
95+
} as UseEntitiesResult<S, IncludeSpaceIds, Mode>;
7296
}
7397

7498
return {
7599
...publicResult,
76100
data: localResult.entities as (Entity.Entity<S> & { backlinksTotalCountsTypeId1?: number })[],
77101
deleted: localResult.deletedEntities,
78-
};
102+
} as UseEntitiesResult<S, IncludeSpaceIds, Mode>;
79103
}

packages/hypergraph-react/src/hooks/use-entity.tsx

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,60 @@ import type { Entity, Id } from '@graphprotocol/hypergraph';
22
import type * as Schema from 'effect/Schema';
33
import { useHypergraphApp } from '../HypergraphAppContext.js';
44
import { useEntityPrivate } from '../internal/use-entity-private.js';
5-
import { useEntityPublic } from '../internal/use-entity-public.js';
5+
import { type UseEntityPublicResult, useEntityPublic } from '../internal/use-entity-public.js';
66

7-
export function useEntity<const S extends Schema.Schema.AnyNoContext>(
8-
type: S,
9-
params: {
10-
id: string | Id;
11-
space?: string;
12-
mode: 'private' | 'public';
13-
include?: Entity.EntityInclude<S> | undefined;
14-
includeSpaceIds?: boolean | undefined;
15-
logInvalidResults?: boolean;
16-
},
17-
) {
7+
type UseEntityParams<
8+
S extends Schema.Schema.AnyNoContext,
9+
IncludeSpaceIds extends boolean | undefined = boolean | undefined,
10+
Mode extends 'private' | 'public' = 'private' | 'public',
11+
> = {
12+
id: string | Id;
13+
space?: string;
14+
mode: Mode;
15+
include?: Entity.EntityInclude<S> | undefined;
16+
includeSpaceIds?: IncludeSpaceIds;
17+
logInvalidResults?: boolean;
18+
};
19+
20+
type UseEntityPrivateResult<S extends Schema.Schema.AnyNoContext> = Omit<
21+
UseEntityPublicResult<S, false>,
22+
'data' | 'invalidEntity' | 'invalidRelationEntities'
23+
> & {
24+
data: Entity.Entity<S> | undefined;
25+
invalidEntity: Entity.InvalidEntity | undefined;
26+
invalidRelationEntities: [];
27+
};
28+
29+
type UseEntityResult<
30+
S extends Schema.Schema.AnyNoContext,
31+
IncludeSpaceIds extends boolean | undefined,
32+
Mode extends 'public' | 'private',
33+
> = Mode extends 'public' ? UseEntityPublicResult<S, IncludeSpaceIds> : UseEntityPrivateResult<S>;
34+
35+
export function useEntity<
36+
const S extends Schema.Schema.AnyNoContext,
37+
IncludeSpaceIds extends boolean | undefined = false,
38+
Mode extends 'public' | 'private' = 'public',
39+
>(type: S, params: UseEntityParams<S, IncludeSpaceIds, Mode>): UseEntityResult<S, IncludeSpaceIds, Mode> {
1840
const { mode, includeSpaceIds, logInvalidResults: logInvalidResultsParam, ...restParams } = params;
1941
const { logInvalidResults: contextLogInvalidResults = true } = useHypergraphApp();
2042
const logInvalidResults = logInvalidResultsParam ?? contextLogInvalidResults ?? true;
21-
const resultPublic = useEntityPublic(type, {
43+
const resultPublic = useEntityPublic<S, IncludeSpaceIds>(type, {
2244
...restParams,
23-
includeSpaceIds,
45+
...(includeSpaceIds !== undefined ? { includeSpaceIds } : {}),
2446
logInvalidResults,
2547
enabled: mode === 'public',
2648
});
2749
const resultPrivate = useEntityPrivate(type, { ...restParams, enabled: mode === 'private' });
2850

2951
if (mode === 'public') {
30-
return resultPublic;
52+
return resultPublic as UseEntityResult<S, IncludeSpaceIds, Mode>;
3153
}
3254

3355
return {
3456
...resultPublic,
3557
data: resultPrivate.data,
3658
invalidEntity: resultPrivate.invalidEntity,
3759
invalidRelationEntities: [],
38-
};
60+
} as UseEntityResult<S, IncludeSpaceIds, Mode>;
3961
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import type { Entity } from '@graphprotocol/hypergraph';
22
import type * as Schema from 'effect/Schema';
33

4-
export type QueryPublicParams<S extends Schema.Schema.AnyNoContext> = {
4+
export type QueryPublicParams<
5+
S extends Schema.Schema.AnyNoContext,
6+
IncludeSpaceIds extends boolean | undefined = boolean | undefined,
7+
> = {
58
enabled?: boolean | undefined;
6-
} & Entity.FindManyPublicParams<S>;
9+
} & Entity.FindManyPublicParams<S, IncludeSpaceIds>;

packages/hypergraph-react/src/internal/use-entities-public.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,31 @@
11
import { Constants, Entity } from '@graphprotocol/hypergraph';
2+
import type { UseQueryResult } from '@tanstack/react-query';
23
import { useQuery as useQueryTanstack } from '@tanstack/react-query';
34
import * as Option from 'effect/Option';
45
import type * as Schema from 'effect/Schema';
56
import * as SchemaAST from 'effect/SchemaAST';
67
import type { QueryPublicParams } from './types.js';
78
import { useHypergraphSpaceInternal } from './use-hypergraph-space-internal.js';
89

9-
export const useEntitiesPublic = <S extends Schema.Schema.AnyNoContext>(type: S, params?: QueryPublicParams<S>) => {
10+
type FindManyPublicResult<S extends Schema.Schema.AnyNoContext, IncludeSpaceIds extends boolean | undefined> = Awaited<
11+
ReturnType<typeof Entity.findManyPublic<S, IncludeSpaceIds>>
12+
>;
13+
14+
export type UseEntitiesPublicResult<
15+
S extends Schema.Schema.AnyNoContext,
16+
IncludeSpaceIds extends boolean | undefined,
17+
> = Omit<UseQueryResult<FindManyPublicResult<S, IncludeSpaceIds>, Error>, 'data'> & {
18+
data: FindManyPublicResult<S, IncludeSpaceIds>['data'];
19+
invalidEntities: FindManyPublicResult<S, IncludeSpaceIds>['invalidEntities'];
20+
invalidRelationEntities: FindManyPublicResult<S, IncludeSpaceIds>['invalidRelationEntities'];
21+
};
22+
23+
type UseEntitiesPublicFn = <S extends Schema.Schema.AnyNoContext, IncludeSpaceIds extends boolean | undefined = false>(
24+
type: S,
25+
params?: QueryPublicParams<S, IncludeSpaceIds>,
26+
) => UseEntitiesPublicResult<S, IncludeSpaceIds>;
27+
28+
export const useEntitiesPublic: UseEntitiesPublicFn = (type, params) => {
1029
const {
1130
enabled = true,
1231
filter,
@@ -17,9 +36,10 @@ export const useEntitiesPublic = <S extends Schema.Schema.AnyNoContext>(type: S,
1736
offset,
1837
orderBy,
1938
backlinksTotalCountsTypeId1,
20-
includeSpaceIds = false,
39+
includeSpaceIds: includeSpaceIdsParam,
2140
logInvalidResults = true,
2241
} = params ?? {};
42+
const includeSpaceIds = includeSpaceIdsParam ?? false;
2343
const { space: spaceFromContext } = useHypergraphSpaceInternal();
2444
const space = spaceFromParams ?? spaceFromContext;
2545
const spaceSelectionKey = spaces ?? space;
@@ -49,7 +69,7 @@ export const useEntitiesPublic = <S extends Schema.Schema.AnyNoContext>(type: S,
4969
offset,
5070
orderBy,
5171
backlinksTotalCountsTypeId1,
52-
includeSpaceIds,
72+
...(includeSpaceIdsParam !== undefined ? { includeSpaceIds: includeSpaceIdsParam } : {}),
5373
logInvalidResults,
5474
});
5575
},

packages/hypergraph-react/src/internal/use-entity-public.tsx

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,52 @@
11
import { Constants, Entity } from '@graphprotocol/hypergraph';
2+
import type { UseQueryResult } from '@tanstack/react-query';
23
import { useQuery as useQueryTanstack } from '@tanstack/react-query';
34
import * as Option from 'effect/Option';
45
import type * as Schema from 'effect/Schema';
56
import * as SchemaAST from 'effect/SchemaAST';
67
import { useHypergraphSpaceInternal } from './use-hypergraph-space-internal.js';
78

8-
type UseEntityPublicParams<S extends Schema.Schema.AnyNoContext> = {
9+
type UseEntityPublicParams<
10+
S extends Schema.Schema.AnyNoContext,
11+
IncludeSpaceIds extends boolean | undefined = boolean | undefined,
12+
> = {
913
id: string;
1014
enabled?: boolean;
1115
space?: string;
1216
// TODO: restrict multi-level nesting to the actual relation keys
1317
include?: Entity.EntityInclude<S> | undefined;
14-
includeSpaceIds?: boolean | undefined;
18+
includeSpaceIds?: IncludeSpaceIds;
1519
logInvalidResults?: boolean;
1620
};
1721

18-
export const useEntityPublic = <S extends Schema.Schema.AnyNoContext>(type: S, params: UseEntityPublicParams<S>) => {
22+
type FindOnePublicResult<S extends Schema.Schema.AnyNoContext, IncludeSpaceIds extends boolean | undefined> = Awaited<
23+
ReturnType<typeof Entity.findOnePublic<S, IncludeSpaceIds>>
24+
>;
25+
26+
export type UseEntityPublicResult<
27+
S extends Schema.Schema.AnyNoContext,
28+
IncludeSpaceIds extends boolean | undefined,
29+
> = Omit<UseQueryResult<FindOnePublicResult<S, IncludeSpaceIds>, Error>, 'data'> & {
30+
data: FindOnePublicResult<S, IncludeSpaceIds>['entity'];
31+
invalidEntity: FindOnePublicResult<S, IncludeSpaceIds>['invalidEntity'];
32+
invalidRelationEntities: FindOnePublicResult<S, IncludeSpaceIds>['invalidRelationEntities'];
33+
};
34+
35+
type UseEntityPublicFn = <S extends Schema.Schema.AnyNoContext, IncludeSpaceIds extends boolean | undefined = false>(
36+
type: S,
37+
params: UseEntityPublicParams<S, IncludeSpaceIds>,
38+
) => UseEntityPublicResult<S, IncludeSpaceIds>;
39+
40+
export const useEntityPublic: UseEntityPublicFn = (type, params) => {
1941
const {
2042
id,
2143
enabled = true,
2244
space: spaceFromParams,
2345
include,
24-
includeSpaceIds = false,
46+
includeSpaceIds: includeSpaceIdsParam,
2547
logInvalidResults = true,
2648
} = params;
49+
const includeSpaceIds = includeSpaceIdsParam ?? false;
2750
const { space: spaceFromContext } = useHypergraphSpaceInternal();
2851
const space = spaceFromParams ?? spaceFromContext;
2952

@@ -38,7 +61,7 @@ export const useEntityPublic = <S extends Schema.Schema.AnyNoContext>(type: S, p
3861
id,
3962
space,
4063
include,
41-
includeSpaceIds,
64+
...(includeSpaceIdsParam !== undefined ? { includeSpaceIds: includeSpaceIdsParam } : {}),
4265
logInvalidResults,
4366
});
4467
},

0 commit comments

Comments
 (0)