@shipfox/client-projects 4.0.0 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +78 -0
- package/dist/chrome.d.ts.map +1 -1
- package/dist/chrome.js +7 -10
- package/dist/chrome.js.map +1 -1
- package/dist/components/model-provider-reminder-banner.d.ts.map +1 -1
- package/dist/components/model-provider-reminder-banner.js +1 -1
- package/dist/components/model-provider-reminder-banner.js.map +1 -1
- package/dist/components/source-strip.d.ts +2 -2
- package/dist/components/source-strip.d.ts.map +1 -1
- package/dist/components/source-strip.js +2 -2
- package/dist/components/source-strip.js.map +1 -1
- package/dist/core/definition.d.ts +32 -0
- package/dist/core/definition.d.ts.map +1 -0
- package/dist/core/definition.js +3 -0
- package/dist/core/definition.js.map +1 -0
- package/dist/core/project.d.ts +26 -0
- package/dist/core/project.d.ts.map +1 -0
- package/dist/core/project.js +12 -0
- package/dist/core/project.js.map +1 -0
- package/dist/feature.d.ts +8 -10
- package/dist/feature.d.ts.map +1 -1
- package/dist/feature.js +11 -22
- package/dist/feature.js.map +1 -1
- package/dist/hooks/api/definitions.d.ts +12 -88
- package/dist/hooks/api/definitions.d.ts.map +1 -1
- package/dist/hooks/api/definitions.js +18 -10
- package/dist/hooks/api/definitions.js.map +1 -1
- package/dist/hooks/api/mappers.d.ts +17 -0
- package/dist/hooks/api/mappers.d.ts.map +1 -0
- package/dist/hooks/api/mappers.js +56 -0
- package/dist/hooks/api/mappers.js.map +1 -0
- package/dist/hooks/api/projects.d.ts +19 -81
- package/dist/hooks/api/projects.d.ts.map +1 -1
- package/dist/hooks/api/projects.js +72 -18
- package/dist/hooks/api/projects.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/pages/create-project-page.d.ts.map +1 -1
- package/dist/pages/create-project-page.js +12 -37
- package/dist/pages/create-project-page.js.map +1 -1
- package/dist/pages/create-project-page.stories.d.ts.map +1 -1
- package/dist/pages/create-project-page.stories.js +4 -5
- package/dist/pages/create-project-page.stories.js.map +1 -1
- package/dist/pages/home-router.d.ts +4 -1
- package/dist/pages/home-router.d.ts.map +1 -1
- package/dist/pages/home-router.js +4 -2
- package/dist/pages/home-router.js.map +1 -1
- package/dist/pages/projects-hub-page.d.ts +3 -1
- package/dist/pages/projects-hub-page.d.ts.map +1 -1
- package/dist/pages/projects-hub-page.js +26 -30
- package/dist/pages/projects-hub-page.js.map +1 -1
- package/dist/routes/home.d.ts +3 -2
- package/dist/routes/home.d.ts.map +1 -1
- package/dist/routes/home.js +7 -2
- package/dist/routes/home.js.map +1 -1
- package/dist/routes/inputs.d.ts +6 -0
- package/dist/routes/inputs.d.ts.map +1 -0
- package/dist/routes/inputs.js +14 -0
- package/dist/routes/inputs.js.map +1 -0
- package/dist/routes/search.d.ts +5 -0
- package/dist/routes/search.d.ts.map +1 -0
- package/dist/routes/search.js +8 -0
- package/dist/routes/search.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +14 -17
- package/src/chrome.tsx +11 -6
- package/src/components/model-provider-reminder-banner.tsx +1 -3
- package/src/components/project-switcher.test.tsx +2 -1
- package/src/components/source-strip.tsx +5 -5
- package/src/core/definition.ts +31 -0
- package/src/core/project.ts +47 -0
- package/src/feature.ts +13 -23
- package/src/hooks/api/definitions.ts +54 -19
- package/src/hooks/api/mappers.ts +67 -0
- package/src/hooks/api/projects.test.ts +11 -4
- package/src/hooks/api/projects.ts +125 -28
- package/src/index.ts +10 -6
- package/src/pages/create-project-page.stories.tsx +7 -5
- package/src/pages/create-project-page.test.tsx +3 -1
- package/src/pages/create-project-page.tsx +16 -51
- package/src/pages/home-router.tsx +3 -2
- package/src/pages/projects-hub-page.test.tsx +13 -8
- package/src/pages/projects-hub-page.tsx +24 -34
- package/src/routes/home.tsx +6 -2
- package/src/routes/inputs.test.ts +14 -0
- package/src/routes/inputs.ts +15 -0
- package/src/routes/search.ts +8 -0
- package/test/pages.tsx +2 -17
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/components/workspace-setup-guard.d.ts +0 -9
- package/dist/components/workspace-setup-guard.d.ts.map +0 -1
- package/dist/components/workspace-setup-guard.js +0 -160
- package/dist/components/workspace-setup-guard.js.map +0 -1
- package/dist/pages/project-workflows-page.d.ts +0 -4
- package/dist/pages/project-workflows-page.d.ts.map +0 -1
- package/dist/pages/project-workflows-page.js +0 -481
- package/dist/pages/project-workflows-page.js.map +0 -1
- package/dist/routes/workflows.d.ts +0 -5
- package/dist/routes/workflows.d.ts.map +0 -1
- package/dist/routes/workflows.js +0 -16
- package/dist/routes/workflows.js.map +0 -1
- package/src/components/workspace-setup-guard.test.tsx +0 -534
- package/src/components/workspace-setup-guard.tsx +0 -185
- package/src/pages/project-workflows-page.test.tsx +0 -258
- package/src/pages/project-workflows-page.tsx +0 -445
- package/src/routes/workflows.tsx +0 -10
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { definitionListResponseSchema } from '@shipfox/api-definitions-dto';
|
|
2
|
+
import { checkedApiRequest } from '@shipfox/client-api';
|
|
3
|
+
import { keepPreviousData, queryOptions, useInfiniteQuery, useQuery } from '@tanstack/react-query';
|
|
4
|
+
import { toDefinitionList } from './mappers.js';
|
|
3
5
|
export const definitionsQueryKeys = {
|
|
4
6
|
all: [
|
|
5
7
|
'definitions'
|
|
@@ -16,12 +18,12 @@ export async function listDefinitions({ projectId, limit = 50, cursor, signal })
|
|
|
16
18
|
limit: String(limit)
|
|
17
19
|
});
|
|
18
20
|
if (cursor) params.set('cursor', cursor);
|
|
19
|
-
return await
|
|
21
|
+
return toDefinitionList(await checkedApiRequest(definitionListResponseSchema, `/definitions?${params.toString()}`, {
|
|
20
22
|
signal
|
|
21
|
-
});
|
|
23
|
+
}));
|
|
22
24
|
}
|
|
23
|
-
export function
|
|
24
|
-
return
|
|
25
|
+
export function definitionsInfiniteQueryOptions(projectId, limit = 50) {
|
|
26
|
+
return {
|
|
25
27
|
queryKey: projectId ? definitionsQueryKeys.list(projectId) : [
|
|
26
28
|
...definitionsQueryKeys.all,
|
|
27
29
|
'list'
|
|
@@ -34,12 +36,12 @@ export function useDefinitionsInfiniteQuery(projectId, limit = 50) {
|
|
|
34
36
|
cursor: pageParam,
|
|
35
37
|
signal
|
|
36
38
|
}),
|
|
37
|
-
getNextPageParam: (lastPage)=>lastPage.
|
|
39
|
+
getNextPageParam: (lastPage)=>lastPage.nextCursor ?? undefined,
|
|
38
40
|
placeholderData: keepPreviousData
|
|
39
|
-
}
|
|
41
|
+
};
|
|
40
42
|
}
|
|
41
|
-
export function
|
|
42
|
-
return
|
|
43
|
+
export function definitionsQueryOptions(projectId) {
|
|
44
|
+
return queryOptions({
|
|
43
45
|
queryKey: projectId ? definitionsQueryKeys.list(projectId) : [
|
|
44
46
|
...definitionsQueryKeys.all,
|
|
45
47
|
'list'
|
|
@@ -51,5 +53,11 @@ export function useDefinitionsQuery(projectId) {
|
|
|
51
53
|
})
|
|
52
54
|
});
|
|
53
55
|
}
|
|
56
|
+
export function useDefinitionsInfiniteQuery(projectId, limit = 50) {
|
|
57
|
+
return useInfiniteQuery(definitionsInfiniteQueryOptions(projectId, limit));
|
|
58
|
+
}
|
|
59
|
+
export function useDefinitionsQuery(projectId) {
|
|
60
|
+
return useQuery(definitionsQueryOptions(projectId));
|
|
61
|
+
}
|
|
54
62
|
|
|
55
63
|
//# sourceMappingURL=definitions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/api/definitions.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/api/definitions.ts"],"sourcesContent":["import {definitionListResponseSchema} from '@shipfox/api-definitions-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {\n type InfiniteData,\n keepPreviousData,\n queryOptions,\n type UseInfiniteQueryOptions,\n type UseQueryOptions,\n useInfiniteQuery,\n useQuery,\n} from '@tanstack/react-query';\nimport type {DefinitionList} from '#core/definition.js';\nimport {toDefinitionList} from './mappers.js';\n\nexport const definitionsQueryKeys = {\n all: ['definitions'] as const,\n list: (projectId: string) => [...definitionsQueryKeys.all, 'list', projectId] as const,\n};\n\ntype DefinitionListQueryKey =\n | ReturnType<typeof definitionsQueryKeys.list>\n | readonly ['definitions', 'list'];\ntype DefinitionListInfiniteQueryOptions = UseInfiniteQueryOptions<\n DefinitionList,\n Error,\n InfiniteData<DefinitionList, string | undefined>,\n DefinitionListQueryKey,\n string | undefined\n>;\ntype DefinitionListQueryOptions = UseQueryOptions<\n DefinitionList,\n Error,\n DefinitionList,\n DefinitionListQueryKey\n>;\nexport async function listDefinitions({\n projectId,\n limit = 50,\n cursor,\n signal,\n}: {\n projectId: string;\n limit?: number;\n cursor?: string | undefined;\n signal?: AbortSignal | undefined;\n}): Promise<DefinitionList> {\n const params = new URLSearchParams({project_id: projectId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n return toDefinitionList(\n await checkedApiRequest(definitionListResponseSchema, `/definitions?${params.toString()}`, {\n signal,\n }),\n );\n}\nexport function definitionsInfiniteQueryOptions(\n projectId: string | undefined,\n limit = 50,\n): DefinitionListInfiniteQueryOptions {\n return {\n queryKey: projectId\n ? definitionsQueryKeys.list(projectId)\n : ([...definitionsQueryKeys.all, 'list'] as const),\n enabled: Boolean(projectId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}: {pageParam: string | undefined; signal: AbortSignal}) =>\n listDefinitions({projectId: projectId ?? '', limit, cursor: pageParam, signal}),\n getNextPageParam: (lastPage: DefinitionList) => lastPage.nextCursor ?? undefined,\n placeholderData: keepPreviousData,\n };\n}\nexport function definitionsQueryOptions(projectId: string | undefined): DefinitionListQueryOptions {\n return queryOptions({\n queryKey: projectId\n ? definitionsQueryKeys.list(projectId)\n : ([...definitionsQueryKeys.all, 'list'] as const),\n enabled: Boolean(projectId),\n queryFn: ({signal}) => listDefinitions({projectId: projectId ?? '', signal}),\n });\n}\nexport function useDefinitionsInfiniteQuery(projectId: string | undefined, limit = 50) {\n return useInfiniteQuery(definitionsInfiniteQueryOptions(projectId, limit));\n}\nexport function useDefinitionsQuery(projectId: string | undefined) {\n return useQuery(definitionsQueryOptions(projectId));\n}\n"],"names":["definitionListResponseSchema","checkedApiRequest","keepPreviousData","queryOptions","useInfiniteQuery","useQuery","toDefinitionList","definitionsQueryKeys","all","list","projectId","listDefinitions","limit","cursor","signal","params","URLSearchParams","project_id","String","set","toString","definitionsInfiniteQueryOptions","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","nextCursor","placeholderData","definitionsQueryOptions","useDefinitionsInfiniteQuery","useDefinitionsQuery"],"mappings":"AAAA,SAAQA,4BAA4B,QAAO,+BAA+B;AAC1E,SAAQC,iBAAiB,QAAO,sBAAsB;AACtD,SAEEC,gBAAgB,EAChBC,YAAY,EAGZC,gBAAgB,EAChBC,QAAQ,QACH,wBAAwB;AAE/B,SAAQC,gBAAgB,QAAO,eAAe;AAE9C,OAAO,MAAMC,uBAAuB;IAClCC,KAAK;QAAC;KAAc;IACpBC,MAAM,CAACC,YAAsB;eAAIH,qBAAqBC,GAAG;YAAE;YAAQE;SAAU;AAC/E,EAAE;AAkBF,OAAO,eAAeC,gBAAgB,EACpCD,SAAS,EACTE,QAAQ,EAAE,EACVC,MAAM,EACNC,MAAM,EAMP;IACC,MAAMC,SAAS,IAAIC,gBAAgB;QAACC,YAAYP;QAAWE,OAAOM,OAAON;IAAM;IAC/E,IAAIC,QAAQE,OAAOI,GAAG,CAAC,UAAUN;IACjC,OAAOP,iBACL,MAAML,kBAAkBD,8BAA8B,CAAC,aAAa,EAAEe,OAAOK,QAAQ,IAAI,EAAE;QACzFN;IACF;AAEJ;AACA,OAAO,SAASO,gCACdX,SAA6B,EAC7BE,QAAQ,EAAE;IAEV,OAAO;QACLU,UAAUZ,YACNH,qBAAqBE,IAAI,CAACC,aACzB;eAAIH,qBAAqBC,GAAG;YAAE;SAAO;QAC1Ce,SAASC,QAAQd;QACjBe,kBAAkBC;QAClBC,SAAS,CAAC,EAACC,SAAS,EAAEd,MAAM,EAAuD,GACjFH,gBAAgB;gBAACD,WAAWA,aAAa;gBAAIE;gBAAOC,QAAQe;gBAAWd;YAAM;QAC/Ee,kBAAkB,CAACC,WAA6BA,SAASC,UAAU,IAAIL;QACvEM,iBAAiB9B;IACnB;AACF;AACA,OAAO,SAAS+B,wBAAwBvB,SAA6B;IACnE,OAAOP,aAAa;QAClBmB,UAAUZ,YACNH,qBAAqBE,IAAI,CAACC,aACzB;eAAIH,qBAAqBC,GAAG;YAAE;SAAO;QAC1Ce,SAASC,QAAQd;QACjBiB,SAAS,CAAC,EAACb,MAAM,EAAC,GAAKH,gBAAgB;gBAACD,WAAWA,aAAa;gBAAII;YAAM;IAC5E;AACF;AACA,OAAO,SAASoB,4BAA4BxB,SAA6B,EAAEE,QAAQ,EAAE;IACnF,OAAOR,iBAAiBiB,gCAAgCX,WAAWE;AACrE;AACA,OAAO,SAASuB,oBAAoBzB,SAA6B;IAC/D,OAAOL,SAAS4B,wBAAwBvB;AAC1C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DefinitionDto, DefinitionSyncSummaryDto } from '@shipfox/api-definitions-dto';
|
|
2
|
+
import type { ProjectResponseDto } from '@shipfox/api-projects-dto';
|
|
3
|
+
import type { Definition, DefinitionList, DefinitionSyncSummary } from '#core/definition.js';
|
|
4
|
+
import type { Project, ProjectList } from '#core/project.js';
|
|
5
|
+
export declare function toProject(dto: ProjectResponseDto): Project;
|
|
6
|
+
export declare function toProjectList(dto: {
|
|
7
|
+
projects: ProjectResponseDto[];
|
|
8
|
+
next_cursor: string | null;
|
|
9
|
+
}): ProjectList;
|
|
10
|
+
export declare function toDefinition(dto: DefinitionDto): Definition;
|
|
11
|
+
export declare function toDefinitionSyncSummary(dto: DefinitionSyncSummaryDto): DefinitionSyncSummary;
|
|
12
|
+
export declare function toDefinitionList(dto: {
|
|
13
|
+
definitions: DefinitionDto[];
|
|
14
|
+
sync: DefinitionSyncSummaryDto | null;
|
|
15
|
+
next_cursor: string | null;
|
|
16
|
+
}): DefinitionList;
|
|
17
|
+
//# sourceMappingURL=mappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,wBAAwB,EAAC,MAAM,8BAA8B,CAAC;AAC1F,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC3F,OAAO,KAAK,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE3D,wBAAgB,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAY1D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE;IACjC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,WAAW,CAEd;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAgB3D;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAU5F;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACpC,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,IAAI,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,cAAc,CAMjB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function toProject(dto) {
|
|
2
|
+
return {
|
|
3
|
+
id: dto.id,
|
|
4
|
+
workspaceId: dto.workspace_id,
|
|
5
|
+
name: dto.name,
|
|
6
|
+
source: {
|
|
7
|
+
connectionId: dto.source.connection_id,
|
|
8
|
+
externalRepositoryId: dto.source.external_repository_id
|
|
9
|
+
},
|
|
10
|
+
createdAt: dto.created_at,
|
|
11
|
+
updatedAt: dto.updated_at
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function toProjectList(dto) {
|
|
15
|
+
return {
|
|
16
|
+
projects: dto.projects.map(toProject),
|
|
17
|
+
nextCursor: dto.next_cursor
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function toDefinition(dto) {
|
|
21
|
+
return {
|
|
22
|
+
id: dto.id,
|
|
23
|
+
projectId: dto.project_id,
|
|
24
|
+
configPath: dto.config_path,
|
|
25
|
+
source: dto.source,
|
|
26
|
+
sha: dto.sha,
|
|
27
|
+
ref: dto.ref,
|
|
28
|
+
name: dto.name,
|
|
29
|
+
workflowDocument: dto.workflow_document,
|
|
30
|
+
workflowModel: dto.workflow_model,
|
|
31
|
+
manualTrigger: dto.manual_trigger,
|
|
32
|
+
fetchedAt: dto.fetched_at,
|
|
33
|
+
createdAt: dto.created_at,
|
|
34
|
+
updatedAt: dto.updated_at
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function toDefinitionSyncSummary(dto) {
|
|
38
|
+
return {
|
|
39
|
+
ref: dto.ref,
|
|
40
|
+
status: dto.status,
|
|
41
|
+
lastSyncAt: dto.last_sync_at,
|
|
42
|
+
startedAt: dto.started_at,
|
|
43
|
+
finishedAt: dto.finished_at,
|
|
44
|
+
lastErrorCode: dto.last_error_code,
|
|
45
|
+
lastErrorMessage: dto.last_error_message
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function toDefinitionList(dto) {
|
|
49
|
+
return {
|
|
50
|
+
definitions: dto.definitions.map(toDefinition),
|
|
51
|
+
sync: dto.sync && toDefinitionSyncSummary(dto.sync),
|
|
52
|
+
nextCursor: dto.next_cursor
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=mappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/api/mappers.ts"],"sourcesContent":["import type {DefinitionDto, DefinitionSyncSummaryDto} from '@shipfox/api-definitions-dto';\nimport type {ProjectResponseDto} from '@shipfox/api-projects-dto';\nimport type {Definition, DefinitionList, DefinitionSyncSummary} from '#core/definition.js';\nimport type {Project, ProjectList} from '#core/project.js';\n\nexport function toProject(dto: ProjectResponseDto): Project {\n return {\n id: dto.id,\n workspaceId: dto.workspace_id,\n name: dto.name,\n source: {\n connectionId: dto.source.connection_id,\n externalRepositoryId: dto.source.external_repository_id,\n },\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toProjectList(dto: {\n projects: ProjectResponseDto[];\n next_cursor: string | null;\n}): ProjectList {\n return {projects: dto.projects.map(toProject), nextCursor: dto.next_cursor};\n}\n\nexport function toDefinition(dto: DefinitionDto): Definition {\n return {\n id: dto.id,\n projectId: dto.project_id,\n configPath: dto.config_path,\n source: dto.source,\n sha: dto.sha,\n ref: dto.ref,\n name: dto.name,\n workflowDocument: dto.workflow_document,\n workflowModel: dto.workflow_model,\n manualTrigger: dto.manual_trigger,\n fetchedAt: dto.fetched_at,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n };\n}\n\nexport function toDefinitionSyncSummary(dto: DefinitionSyncSummaryDto): DefinitionSyncSummary {\n return {\n ref: dto.ref,\n status: dto.status,\n lastSyncAt: dto.last_sync_at,\n startedAt: dto.started_at,\n finishedAt: dto.finished_at,\n lastErrorCode: dto.last_error_code,\n lastErrorMessage: dto.last_error_message,\n };\n}\n\nexport function toDefinitionList(dto: {\n definitions: DefinitionDto[];\n sync: DefinitionSyncSummaryDto | null;\n next_cursor: string | null;\n}): DefinitionList {\n return {\n definitions: dto.definitions.map(toDefinition),\n sync: dto.sync && toDefinitionSyncSummary(dto.sync),\n nextCursor: dto.next_cursor,\n };\n}\n"],"names":["toProject","dto","id","workspaceId","workspace_id","name","source","connectionId","connection_id","externalRepositoryId","external_repository_id","createdAt","created_at","updatedAt","updated_at","toProjectList","projects","map","nextCursor","next_cursor","toDefinition","projectId","project_id","configPath","config_path","sha","ref","workflowDocument","workflow_document","workflowModel","workflow_model","manualTrigger","manual_trigger","fetchedAt","fetched_at","toDefinitionSyncSummary","status","lastSyncAt","last_sync_at","startedAt","started_at","finishedAt","finished_at","lastErrorCode","last_error_code","lastErrorMessage","last_error_message","toDefinitionList","definitions","sync"],"mappings":"AAKA,OAAO,SAASA,UAAUC,GAAuB;IAC/C,OAAO;QACLC,IAAID,IAAIC,EAAE;QACVC,aAAaF,IAAIG,YAAY;QAC7BC,MAAMJ,IAAII,IAAI;QACdC,QAAQ;YACNC,cAAcN,IAAIK,MAAM,CAACE,aAAa;YACtCC,sBAAsBR,IAAIK,MAAM,CAACI,sBAAsB;QACzD;QACAC,WAAWV,IAAIW,UAAU;QACzBC,WAAWZ,IAAIa,UAAU;IAC3B;AACF;AAEA,OAAO,SAASC,cAAcd,GAG7B;IACC,OAAO;QAACe,UAAUf,IAAIe,QAAQ,CAACC,GAAG,CAACjB;QAAYkB,YAAYjB,IAAIkB,WAAW;IAAA;AAC5E;AAEA,OAAO,SAASC,aAAanB,GAAkB;IAC7C,OAAO;QACLC,IAAID,IAAIC,EAAE;QACVmB,WAAWpB,IAAIqB,UAAU;QACzBC,YAAYtB,IAAIuB,WAAW;QAC3BlB,QAAQL,IAAIK,MAAM;QAClBmB,KAAKxB,IAAIwB,GAAG;QACZC,KAAKzB,IAAIyB,GAAG;QACZrB,MAAMJ,IAAII,IAAI;QACdsB,kBAAkB1B,IAAI2B,iBAAiB;QACvCC,eAAe5B,IAAI6B,cAAc;QACjCC,eAAe9B,IAAI+B,cAAc;QACjCC,WAAWhC,IAAIiC,UAAU;QACzBvB,WAAWV,IAAIW,UAAU;QACzBC,WAAWZ,IAAIa,UAAU;IAC3B;AACF;AAEA,OAAO,SAASqB,wBAAwBlC,GAA6B;IACnE,OAAO;QACLyB,KAAKzB,IAAIyB,GAAG;QACZU,QAAQnC,IAAImC,MAAM;QAClBC,YAAYpC,IAAIqC,YAAY;QAC5BC,WAAWtC,IAAIuC,UAAU;QACzBC,YAAYxC,IAAIyC,WAAW;QAC3BC,eAAe1C,IAAI2C,eAAe;QAClCC,kBAAkB5C,IAAI6C,kBAAkB;IAC1C;AACF;AAEA,OAAO,SAASC,iBAAiB9C,GAIhC;IACC,OAAO;QACL+C,aAAa/C,IAAI+C,WAAW,CAAC/B,GAAG,CAACG;QACjC6B,MAAMhD,IAAIgD,IAAI,IAAId,wBAAwBlC,IAAIgD,IAAI;QAClD/B,YAAYjB,IAAIkB,WAAW;IAC7B;AACF"}
|
|
@@ -1,93 +1,31 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type InfiniteData, type UseInfiniteQueryOptions, type UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { CreateProjectCommand, Project, ProjectList } from '#core/project.js';
|
|
2
3
|
export declare const projectsQueryKeys: {
|
|
3
4
|
all: readonly ["projects"];
|
|
4
5
|
list: (workspaceId: string, search?: string) => readonly ["projects", "list", string, string];
|
|
5
6
|
exists: (workspaceId: string) => readonly ["projects", "exists", string];
|
|
6
7
|
detail: (projectId: string) => readonly ["projects", "detail", string];
|
|
7
8
|
};
|
|
9
|
+
type ProjectListQueryKey = ReturnType<typeof projectsQueryKeys.list> | readonly ['projects', 'list'];
|
|
10
|
+
type ProjectExistenceQueryKey = ReturnType<typeof projectsQueryKeys.exists> | readonly ['projects', 'exists'];
|
|
11
|
+
type ProjectDetailQueryKey = ReturnType<typeof projectsQueryKeys.detail> | readonly ['projects', 'detail'];
|
|
12
|
+
type ProjectListInfiniteQueryOptions = UseInfiniteQueryOptions<ProjectList, Error, InfiniteData<ProjectList, string | undefined>, ProjectListQueryKey, string | undefined>;
|
|
13
|
+
type ProjectExistenceQueryOptions = UseQueryOptions<ProjectList, Error, ProjectList, ProjectExistenceQueryKey>;
|
|
14
|
+
type ProjectDetailQueryOptions = UseQueryOptions<Project, Error, Project, ProjectDetailQueryKey>;
|
|
8
15
|
export declare function listProjects({ workspaceId, limit, cursor, search, signal, }: {
|
|
9
16
|
workspaceId: string;
|
|
10
17
|
limit?: number;
|
|
11
18
|
cursor?: string | undefined;
|
|
12
19
|
search?: string | undefined;
|
|
13
|
-
signal?: AbortSignal;
|
|
14
|
-
}): Promise<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
updated_at: string;
|
|
25
|
-
}[];
|
|
26
|
-
next_cursor: string | null;
|
|
27
|
-
}>;
|
|
28
|
-
export declare function getProject(projectId: string): Promise<{
|
|
29
|
-
id: string;
|
|
30
|
-
workspace_id: string;
|
|
31
|
-
name: string;
|
|
32
|
-
source: {
|
|
33
|
-
connection_id: string;
|
|
34
|
-
external_repository_id: string;
|
|
35
|
-
};
|
|
36
|
-
created_at: string;
|
|
37
|
-
updated_at: string;
|
|
38
|
-
}>;
|
|
39
|
-
export declare function createProject(body: CreateProjectBodyDto): Promise<{
|
|
40
|
-
id: string;
|
|
41
|
-
workspace_id: string;
|
|
42
|
-
name: string;
|
|
43
|
-
source: {
|
|
44
|
-
connection_id: string;
|
|
45
|
-
external_repository_id: string;
|
|
46
|
-
};
|
|
47
|
-
created_at: string;
|
|
48
|
-
updated_at: string;
|
|
49
|
-
}>;
|
|
50
|
-
export declare function useProjectsInfiniteQuery(workspaceId: string | undefined, search?: string, limit?: number): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
|
|
51
|
-
projects: {
|
|
52
|
-
id: string;
|
|
53
|
-
workspace_id: string;
|
|
54
|
-
name: string;
|
|
55
|
-
source: {
|
|
56
|
-
connection_id: string;
|
|
57
|
-
external_repository_id: string;
|
|
58
|
-
};
|
|
59
|
-
created_at: string;
|
|
60
|
-
updated_at: string;
|
|
61
|
-
}[];
|
|
62
|
-
next_cursor: string | null;
|
|
63
|
-
}, unknown>, Error>;
|
|
64
|
-
export declare function useProjectQuery(projectId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
|
|
65
|
-
id: string;
|
|
66
|
-
workspace_id: string;
|
|
67
|
-
name: string;
|
|
68
|
-
source: {
|
|
69
|
-
connection_id: string;
|
|
70
|
-
external_repository_id: string;
|
|
71
|
-
};
|
|
72
|
-
created_at: string;
|
|
73
|
-
updated_at: string;
|
|
74
|
-
}>, Error>;
|
|
75
|
-
export declare function useCreateProjectMutation(): import("@tanstack/react-query").UseMutationResult<{
|
|
76
|
-
id: string;
|
|
77
|
-
workspace_id: string;
|
|
78
|
-
name: string;
|
|
79
|
-
source: {
|
|
80
|
-
connection_id: string;
|
|
81
|
-
external_repository_id: string;
|
|
82
|
-
};
|
|
83
|
-
created_at: string;
|
|
84
|
-
updated_at: string;
|
|
85
|
-
}, Error, {
|
|
86
|
-
workspace_id: string;
|
|
87
|
-
name: string;
|
|
88
|
-
source: {
|
|
89
|
-
connection_id: string;
|
|
90
|
-
external_repository_id: string;
|
|
91
|
-
};
|
|
92
|
-
}, unknown>;
|
|
20
|
+
signal?: AbortSignal | undefined;
|
|
21
|
+
}): Promise<ProjectList>;
|
|
22
|
+
export declare function getProject(projectId: string): Promise<Project>;
|
|
23
|
+
export declare function createProject(command: CreateProjectCommand): Promise<Project>;
|
|
24
|
+
export declare function projectsInfiniteQueryOptions(workspaceId: string | undefined, search?: string, limit?: number): ProjectListInfiniteQueryOptions;
|
|
25
|
+
export declare function projectExistenceQueryOptions(workspaceId: string | undefined): ProjectExistenceQueryOptions;
|
|
26
|
+
export declare function projectQueryOptions(projectId: string | undefined): ProjectDetailQueryOptions;
|
|
27
|
+
export declare function useProjectsInfiniteQuery(workspaceId: string | undefined, search?: string, limit?: number): import("@tanstack/react-query").UseInfiniteQueryResult<InfiniteData<ProjectList, string | undefined>, Error>;
|
|
28
|
+
export declare function useProjectQuery(projectId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<Project>, Error>;
|
|
29
|
+
export declare function useCreateProjectMutation(): import("@tanstack/react-query").UseMutationResult<Project, Error, CreateProjectCommand, unknown>;
|
|
30
|
+
export {};
|
|
93
31
|
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/projects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/projects.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EAKrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAGjF,eAAO,MAAM,iBAAiB;;wBAER,MAAM;0BAEJ,MAAM;wBACR,MAAM;CAC3B,CAAC;AAEF,KAAK,mBAAmB,GACpB,UAAU,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GACzC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAClC,KAAK,wBAAwB,GACzB,UAAU,CAAC,OAAO,iBAAiB,CAAC,MAAM,CAAC,GAC3C,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpC,KAAK,qBAAqB,GACtB,UAAU,CAAC,OAAO,iBAAiB,CAAC,MAAM,CAAC,GAC3C,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEpC,KAAK,+BAA+B,GAAG,uBAAuB,CAC5D,WAAW,EACX,KAAK,EACL,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,mBAAmB,EACnB,MAAM,GAAG,SAAS,CACnB,CAAC;AACF,KAAK,4BAA4B,GAAG,eAAe,CACjD,WAAW,EACX,KAAK,EACL,WAAW,EACX,wBAAwB,CACzB,CAAC;AACF,KAAK,yBAAyB,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;AAEjG,wBAAsB,YAAY,CAAC,EACjC,WAAW,EACX,KAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC,GAAG,OAAO,CAAC,WAAW,CAAC,CAOvB;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYnF;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,SAAK,GACT,+BAA+B,CAmBjC;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,4BAA4B,CAS9B;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,yBAAyB,CAQ5F;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,SAAK,gHAGX;AACD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,2EAE5D;AAED,wBAAgB,wBAAwB,qGAoBvC"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createProjectBodySchema, listProjectsResponseSchema, projectResponseSchema } from '@shipfox/api-projects-dto';
|
|
2
|
+
import { checkedApiRequest } from '@shipfox/client-api';
|
|
3
|
+
import { keepPreviousData, queryOptions, useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
4
|
+
import { toProject, toProjectList } from './mappers.js';
|
|
3
5
|
export const projectsQueryKeys = {
|
|
4
6
|
all: [
|
|
5
7
|
'projects'
|
|
6
8
|
],
|
|
7
|
-
list: (workspaceId, search)=>[
|
|
9
|
+
list: (workspaceId, search = '')=>[
|
|
8
10
|
...projectsQueryKeys.all,
|
|
9
11
|
'list',
|
|
10
12
|
workspaceId,
|
|
11
|
-
search
|
|
13
|
+
search
|
|
12
14
|
],
|
|
13
15
|
exists: (workspaceId)=>[
|
|
14
16
|
...projectsQueryKeys.all,
|
|
@@ -28,22 +30,31 @@ export async function listProjects({ workspaceId, limit = 50, cursor, search, si
|
|
|
28
30
|
});
|
|
29
31
|
if (cursor) params.set('cursor', cursor);
|
|
30
32
|
if (search) params.set('search', search);
|
|
31
|
-
return await
|
|
33
|
+
return toProjectList(await checkedApiRequest(listProjectsResponseSchema, `/projects?${params.toString()}`, {
|
|
32
34
|
signal
|
|
33
|
-
});
|
|
35
|
+
}));
|
|
34
36
|
}
|
|
35
37
|
export async function getProject(projectId) {
|
|
36
|
-
return await
|
|
38
|
+
return toProject(await checkedApiRequest(projectResponseSchema, `/projects/${projectId}`));
|
|
37
39
|
}
|
|
38
|
-
export async function createProject(
|
|
39
|
-
|
|
40
|
+
export async function createProject(command) {
|
|
41
|
+
const body = createProjectBodySchema.parse({
|
|
42
|
+
workspace_id: command.workspaceId,
|
|
43
|
+
name: command.name,
|
|
44
|
+
source: {
|
|
45
|
+
connection_id: command.source.connectionId,
|
|
46
|
+
external_repository_id: command.source.externalRepositoryId
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return toProject(await checkedApiRequest(projectResponseSchema, '/projects', {
|
|
40
50
|
method: 'POST',
|
|
41
51
|
body
|
|
42
|
-
});
|
|
52
|
+
}));
|
|
43
53
|
}
|
|
44
|
-
export function
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
export function projectsInfiniteQueryOptions(workspaceId, search, limit = 50) {
|
|
55
|
+
const normalizedSearch = search?.trim() ?? '';
|
|
56
|
+
return {
|
|
57
|
+
queryKey: workspaceId ? projectsQueryKeys.list(workspaceId, normalizedSearch) : [
|
|
47
58
|
...projectsQueryKeys.all,
|
|
48
59
|
'list'
|
|
49
60
|
],
|
|
@@ -53,15 +64,30 @@ export function useProjectsInfiniteQuery(workspaceId, search, limit = 50) {
|
|
|
53
64
|
workspaceId: workspaceId ?? '',
|
|
54
65
|
limit,
|
|
55
66
|
cursor: pageParam,
|
|
56
|
-
search,
|
|
67
|
+
search: normalizedSearch || undefined,
|
|
57
68
|
signal
|
|
58
69
|
}),
|
|
59
|
-
getNextPageParam: (lastPage)=>lastPage.
|
|
70
|
+
getNextPageParam: (lastPage)=>lastPage.nextCursor ?? undefined,
|
|
60
71
|
placeholderData: keepPreviousData
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function projectExistenceQueryOptions(workspaceId) {
|
|
75
|
+
return queryOptions({
|
|
76
|
+
queryKey: workspaceId ? projectsQueryKeys.exists(workspaceId) : [
|
|
77
|
+
...projectsQueryKeys.all,
|
|
78
|
+
'exists'
|
|
79
|
+
],
|
|
80
|
+
enabled: Boolean(workspaceId),
|
|
81
|
+
queryFn: ({ signal })=>listProjects({
|
|
82
|
+
workspaceId: workspaceId ?? '',
|
|
83
|
+
limit: 1,
|
|
84
|
+
signal
|
|
85
|
+
}),
|
|
86
|
+
staleTime: 30_000
|
|
61
87
|
});
|
|
62
88
|
}
|
|
63
|
-
export function
|
|
64
|
-
return
|
|
89
|
+
export function projectQueryOptions(projectId) {
|
|
90
|
+
return queryOptions({
|
|
65
91
|
queryKey: projectId ? projectsQueryKeys.detail(projectId) : [
|
|
66
92
|
...projectsQueryKeys.all,
|
|
67
93
|
'detail'
|
|
@@ -70,9 +96,37 @@ export function useProjectQuery(projectId) {
|
|
|
70
96
|
queryFn: ()=>getProject(projectId ?? '')
|
|
71
97
|
});
|
|
72
98
|
}
|
|
99
|
+
export function useProjectsInfiniteQuery(workspaceId, search, limit = 50) {
|
|
100
|
+
return useInfiniteQuery(projectsInfiniteQueryOptions(workspaceId, search, limit));
|
|
101
|
+
}
|
|
102
|
+
export function useProjectQuery(projectId) {
|
|
103
|
+
return useQuery(projectQueryOptions(projectId));
|
|
104
|
+
}
|
|
73
105
|
export function useCreateProjectMutation() {
|
|
106
|
+
const queryClient = useQueryClient();
|
|
74
107
|
return useMutation({
|
|
75
|
-
mutationFn: createProject
|
|
108
|
+
mutationFn: createProject,
|
|
109
|
+
onSuccess: async (project)=>{
|
|
110
|
+
queryClient.setQueryData(projectsQueryKeys.detail(project.id), project);
|
|
111
|
+
queryClient.setQueryData(projectsQueryKeys.exists(project.workspaceId), {
|
|
112
|
+
projects: [
|
|
113
|
+
project
|
|
114
|
+
],
|
|
115
|
+
nextCursor: null
|
|
116
|
+
});
|
|
117
|
+
await queryClient.invalidateQueries({
|
|
118
|
+
queryKey: projectsQueryKeys.list(project.workspaceId)
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
onError: async (_error, command)=>{
|
|
122
|
+
await queryClient.invalidateQueries({
|
|
123
|
+
queryKey: projectsQueryKeys.exists(command.workspaceId),
|
|
124
|
+
refetchType: 'active'
|
|
125
|
+
});
|
|
126
|
+
await queryClient.invalidateQueries({
|
|
127
|
+
queryKey: projectsQueryKeys.list(command.workspaceId)
|
|
128
|
+
});
|
|
129
|
+
}
|
|
76
130
|
});
|
|
77
131
|
}
|
|
78
132
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/api/projects.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/api/projects.ts"],"sourcesContent":["import {\n createProjectBodySchema,\n listProjectsResponseSchema,\n projectResponseSchema,\n} from '@shipfox/api-projects-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {\n type InfiniteData,\n keepPreviousData,\n queryOptions,\n type UseInfiniteQueryOptions,\n type UseQueryOptions,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\nimport type {CreateProjectCommand, Project, ProjectList} from '#core/project.js';\nimport {toProject, toProjectList} from './mappers.js';\n\nexport const projectsQueryKeys = {\n all: ['projects'] as const,\n list: (workspaceId: string, search = '') =>\n [...projectsQueryKeys.all, 'list', workspaceId, search] as const,\n exists: (workspaceId: string) => [...projectsQueryKeys.all, 'exists', workspaceId] as const,\n detail: (projectId: string) => [...projectsQueryKeys.all, 'detail', projectId] as const,\n};\n\ntype ProjectListQueryKey =\n | ReturnType<typeof projectsQueryKeys.list>\n | readonly ['projects', 'list'];\ntype ProjectExistenceQueryKey =\n | ReturnType<typeof projectsQueryKeys.exists>\n | readonly ['projects', 'exists'];\ntype ProjectDetailQueryKey =\n | ReturnType<typeof projectsQueryKeys.detail>\n | readonly ['projects', 'detail'];\n\ntype ProjectListInfiniteQueryOptions = UseInfiniteQueryOptions<\n ProjectList,\n Error,\n InfiniteData<ProjectList, string | undefined>,\n ProjectListQueryKey,\n string | undefined\n>;\ntype ProjectExistenceQueryOptions = UseQueryOptions<\n ProjectList,\n Error,\n ProjectList,\n ProjectExistenceQueryKey\n>;\ntype ProjectDetailQueryOptions = UseQueryOptions<Project, Error, Project, ProjectDetailQueryKey>;\n\nexport async function listProjects({\n workspaceId,\n limit = 50,\n cursor,\n search,\n signal,\n}: {\n workspaceId: string;\n limit?: number;\n cursor?: string | undefined;\n search?: string | undefined;\n signal?: AbortSignal | undefined;\n}): Promise<ProjectList> {\n const params = new URLSearchParams({workspace_id: workspaceId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n if (search) params.set('search', search);\n return toProjectList(\n await checkedApiRequest(listProjectsResponseSchema, `/projects?${params.toString()}`, {signal}),\n );\n}\n\nexport async function getProject(projectId: string): Promise<Project> {\n return toProject(await checkedApiRequest(projectResponseSchema, `/projects/${projectId}`));\n}\n\nexport async function createProject(command: CreateProjectCommand): Promise<Project> {\n const body = createProjectBodySchema.parse({\n workspace_id: command.workspaceId,\n name: command.name,\n source: {\n connection_id: command.source.connectionId,\n external_repository_id: command.source.externalRepositoryId,\n },\n });\n return toProject(\n await checkedApiRequest(projectResponseSchema, '/projects', {method: 'POST', body}),\n );\n}\n\nexport function projectsInfiniteQueryOptions(\n workspaceId: string | undefined,\n search?: string,\n limit = 50,\n): ProjectListInfiniteQueryOptions {\n const normalizedSearch = search?.trim() ?? '';\n return {\n queryKey: workspaceId\n ? projectsQueryKeys.list(workspaceId, normalizedSearch)\n : ([...projectsQueryKeys.all, 'list'] as const),\n enabled: Boolean(workspaceId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}: {pageParam: string | undefined; signal: AbortSignal}) =>\n listProjects({\n workspaceId: workspaceId ?? '',\n limit,\n cursor: pageParam,\n search: normalizedSearch || undefined,\n signal,\n }),\n getNextPageParam: (lastPage: ProjectList) => lastPage.nextCursor ?? undefined,\n placeholderData: keepPreviousData,\n };\n}\n\nexport function projectExistenceQueryOptions(\n workspaceId: string | undefined,\n): ProjectExistenceQueryOptions {\n return queryOptions({\n queryKey: workspaceId\n ? projectsQueryKeys.exists(workspaceId)\n : ([...projectsQueryKeys.all, 'exists'] as const),\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => listProjects({workspaceId: workspaceId ?? '', limit: 1, signal}),\n staleTime: 30_000,\n });\n}\n\nexport function projectQueryOptions(projectId: string | undefined): ProjectDetailQueryOptions {\n return queryOptions({\n queryKey: projectId\n ? projectsQueryKeys.detail(projectId)\n : ([...projectsQueryKeys.all, 'detail'] as const),\n enabled: Boolean(projectId),\n queryFn: () => getProject(projectId ?? ''),\n });\n}\n\nexport function useProjectsInfiniteQuery(\n workspaceId: string | undefined,\n search?: string,\n limit = 50,\n) {\n return useInfiniteQuery(projectsInfiniteQueryOptions(workspaceId, search, limit));\n}\nexport function useProjectQuery(projectId: string | undefined) {\n return useQuery(projectQueryOptions(projectId));\n}\n\nexport function useCreateProjectMutation() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: createProject,\n onSuccess: async (project) => {\n queryClient.setQueryData(projectsQueryKeys.detail(project.id), project);\n queryClient.setQueryData<ProjectList>(projectsQueryKeys.exists(project.workspaceId), {\n projects: [project],\n nextCursor: null,\n });\n await queryClient.invalidateQueries({queryKey: projectsQueryKeys.list(project.workspaceId)});\n },\n onError: async (_error, command) => {\n await queryClient.invalidateQueries({\n queryKey: projectsQueryKeys.exists(command.workspaceId),\n refetchType: 'active',\n });\n await queryClient.invalidateQueries({queryKey: projectsQueryKeys.list(command.workspaceId)});\n },\n });\n}\n"],"names":["createProjectBodySchema","listProjectsResponseSchema","projectResponseSchema","checkedApiRequest","keepPreviousData","queryOptions","useInfiniteQuery","useMutation","useQuery","useQueryClient","toProject","toProjectList","projectsQueryKeys","all","list","workspaceId","search","exists","detail","projectId","listProjects","limit","cursor","signal","params","URLSearchParams","workspace_id","String","set","toString","getProject","createProject","command","body","parse","name","source","connection_id","connectionId","external_repository_id","externalRepositoryId","method","projectsInfiniteQueryOptions","normalizedSearch","trim","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","nextCursor","placeholderData","projectExistenceQueryOptions","staleTime","projectQueryOptions","useProjectsInfiniteQuery","useProjectQuery","useCreateProjectMutation","queryClient","mutationFn","onSuccess","project","setQueryData","id","projects","invalidateQueries","onError","_error","refetchType"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { Definition, DefinitionList, DefinitionSyncSummary } from '#core/definition.js';
|
|
2
|
+
export { type CreateProjectCommand, type Project, type ProjectList, type ProjectSource, projectNameFromRepository, selectProjectSource, } from '#core/project.js';
|
|
2
3
|
export { ProjectBreadcrumb, ProjectLayoutGuard } from './chrome.js';
|
|
3
4
|
export { ProjectCrumb, type ProjectCrumbProps } from './components/project-crumb.js';
|
|
4
5
|
export { ProjectSwitcher, type ProjectSwitcherProps } from './components/project-switcher.js';
|
|
5
|
-
export {
|
|
6
|
+
export { SourceStrip } from './components/source-strip.js';
|
|
6
7
|
export * from './hooks/api/definitions.js';
|
|
7
8
|
export * from './hooks/api/projects.js';
|
|
8
9
|
export * from './pages/create-project-page.js';
|
|
9
10
|
export * from './pages/home-router.js';
|
|
10
|
-
export * from './pages/project-workflows-page.js';
|
|
11
11
|
export * from './pages/projects-hub-page.js';
|
|
12
12
|
export * from './project-error.js';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAC,YAAY,EAAE,KAAK,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAC,eAAe,EAAE,KAAK,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
export { projectNameFromRepository, selectProjectSource } from '#core/project.js';
|
|
1
2
|
export { ProjectBreadcrumb, ProjectLayoutGuard } from './chrome.js';
|
|
2
3
|
export { ProjectCrumb } from './components/project-crumb.js';
|
|
3
4
|
export { ProjectSwitcher } from './components/project-switcher.js';
|
|
4
|
-
export {
|
|
5
|
+
export { SourceStrip } from './components/source-strip.js';
|
|
5
6
|
export * from './hooks/api/definitions.js';
|
|
6
7
|
export * from './hooks/api/projects.js';
|
|
7
8
|
export * from './pages/create-project-page.js';
|
|
8
9
|
export * from './pages/home-router.js';
|
|
9
|
-
export * from './pages/project-workflows-page.js';
|
|
10
10
|
export * from './pages/projects-hub-page.js';
|
|
11
11
|
export * from './project-error.js';
|
|
12
12
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export type {
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export type {Definition, DefinitionList, DefinitionSyncSummary} from '#core/definition.js';\nexport {\n type CreateProjectCommand,\n type Project,\n type ProjectList,\n type ProjectSource,\n projectNameFromRepository,\n selectProjectSource,\n} from '#core/project.js';\nexport {ProjectBreadcrumb, ProjectLayoutGuard} from './chrome.js';\nexport {ProjectCrumb, type ProjectCrumbProps} from './components/project-crumb.js';\nexport {ProjectSwitcher, type ProjectSwitcherProps} from './components/project-switcher.js';\nexport {SourceStrip} from './components/source-strip.js';\nexport * from './hooks/api/definitions.js';\nexport * from './hooks/api/projects.js';\nexport * from './pages/create-project-page.js';\nexport * from './pages/home-router.js';\nexport * from './pages/projects-hub-page.js';\nexport * from './project-error.js';\n"],"names":["projectNameFromRepository","selectProjectSource","ProjectBreadcrumb","ProjectLayoutGuard","ProjectCrumb","ProjectSwitcher","SourceStrip"],"mappings":"AACA,SAKEA,yBAAyB,EACzBC,mBAAmB,QACd,mBAAmB;AAC1B,SAAQC,iBAAiB,EAAEC,kBAAkB,QAAO,cAAc;AAClE,SAAQC,YAAY,QAA+B,gCAAgC;AACnF,SAAQC,eAAe,QAAkC,mCAAmC;AAC5F,SAAQC,WAAW,QAAO,+BAA+B;AACzD,cAAc,6BAA6B;AAC3C,cAAc,0BAA0B;AACxC,cAAc,iCAAiC;AAC/C,cAAc,yBAAyB;AACvC,cAAc,+BAA+B;AAC7C,cAAc,qBAAqB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project-page.d.ts","sourceRoot":"","sources":["../../src/pages/create-project-page.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-project-page.d.ts","sourceRoot":"","sources":["../../src/pages/create-project-page.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,iBAAiB,gCAiShC"}
|