@@ -11,23 +11,33 @@ import {
1111} from "@t3tools/client-runtime" ;
1212
1313import { ConnectedEnvironmentSummary } from "./remote-runtime-types" ;
14+ import type { SavedRemoteConnection } from "../lib/connection" ;
1415import { useShellSnapshotStates } from "./use-shell-snapshot" ;
1516import {
1617 useRemoteConnectionStatus ,
1718 useRemoteEnvironmentState ,
1819} from "./use-remote-environment-registry" ;
1920
20- const projectsSortOrder = Order . make < EnvironmentScopedProjectShell > (
21- ( left , right ) =>
22- ( left . title . localeCompare ( right . title ) as - 1 | 0 | 1 ) ||
23- ( left . environmentId . localeCompare ( right . environmentId ) as - 1 | 0 | 1 ) ,
21+ const projectsSortOrder = Order . mapInput (
22+ Order . Struct ( {
23+ title : Order . String ,
24+ environmentId : Order . String ,
25+ } ) ,
26+ ( project : EnvironmentScopedProjectShell ) => ( {
27+ title : project . title ,
28+ environmentId : project . environmentId ,
29+ } ) ,
2430) ;
2531
26- const threadsSortOrder = Order . make < EnvironmentScopedThreadShell > (
27- ( left , right ) =>
28- ( ( new Date ( right . updatedAt ?? right . createdAt ) . getTime ( ) -
29- new Date ( left . updatedAt ?? left . createdAt ) . getTime ( ) ) as - 1 | 0 | 1 ) ||
30- ( left . environmentId . localeCompare ( right . environmentId ) as - 1 | 0 | 1 ) ,
32+ const threadsSortOrder = Order . mapInput (
33+ Order . Struct ( {
34+ activityAt : Order . flip ( Order . Number ) ,
35+ environmentId : Order . String ,
36+ } ) ,
37+ ( thread : EnvironmentScopedThreadShell ) => ( {
38+ activityAt : new Date ( thread . updatedAt ?? thread . createdAt ) . getTime ( ) ,
39+ environmentId : thread . environmentId ,
40+ } ) ,
3141) ;
3242
3343function deriveOverallConnectionState (
@@ -48,38 +58,44 @@ function deriveOverallConnectionState(
4858 return "disconnected" ;
4959}
5060
61+ function listRemoteCatalogEnvironmentIds (
62+ savedConnectionsById : Readonly < Record < string , SavedRemoteConnection > > ,
63+ ) : ReadonlyArray < SavedRemoteConnection [ "environmentId" ] > {
64+ const environmentIds : SavedRemoteConnection [ "environmentId" ] [ ] = [ ] ;
65+ for ( const connection of Object . values ( savedConnectionsById ) ) {
66+ environmentIds . push ( connection . environmentId ) ;
67+ }
68+ return environmentIds ;
69+ }
70+
5171export function useRemoteCatalog ( ) {
5272 const { connectedEnvironments, connectionState } = useRemoteConnectionStatus ( ) ;
5373 const { environmentStateById, savedConnectionsById } = useRemoteEnvironmentState ( ) ;
5474 const shellSnapshotStates = useShellSnapshotStates (
55- Object . values ( savedConnectionsById ) . map ( ( connection ) => connection . environmentId ) ,
75+ listRemoteCatalogEnvironmentIds ( savedConnectionsById ) ,
5676 ) ;
5777
58- const projects = useMemo (
59- ( ) =>
60- Arr . sort (
61- Object . values ( savedConnectionsById ) . flatMap ( ( connection ) =>
62- ( shellSnapshotStates [ connection . environmentId ] ?. data ?. projects ?? [ ] ) . map ( ( project ) =>
63- scopeProjectShell ( connection . environmentId , project ) ,
64- ) ,
65- ) ,
66- projectsSortOrder ,
67- ) ,
68- [ savedConnectionsById , shellSnapshotStates ] ,
69- ) ;
78+ const projects = useMemo ( ( ) => {
79+ const scopedProjects : EnvironmentScopedProjectShell [ ] = [ ] ;
80+ for ( const connection of Object . values ( savedConnectionsById ) ) {
81+ const projects = shellSnapshotStates [ connection . environmentId ] ?. data ?. projects ?? [ ] ;
82+ for ( const project of projects ) {
83+ scopedProjects . push ( scopeProjectShell ( connection . environmentId , project ) ) ;
84+ }
85+ }
86+ return Arr . sort ( scopedProjects , projectsSortOrder ) ;
87+ } , [ savedConnectionsById , shellSnapshotStates ] ) ;
7088
71- const threads = useMemo (
72- ( ) =>
73- Arr . sort (
74- Object . values ( savedConnectionsById ) . flatMap ( ( connection ) =>
75- ( shellSnapshotStates [ connection . environmentId ] ?. data ?. threads ?? [ ] ) . map ( ( thread ) =>
76- scopeThreadShell ( connection . environmentId , thread ) ,
77- ) ,
78- ) ,
79- threadsSortOrder ,
80- ) ,
81- [ savedConnectionsById , shellSnapshotStates ] ,
82- ) ;
89+ const threads = useMemo ( ( ) => {
90+ const scopedThreads : EnvironmentScopedThreadShell [ ] = [ ] ;
91+ for ( const connection of Object . values ( savedConnectionsById ) ) {
92+ const threads = shellSnapshotStates [ connection . environmentId ] ?. data ?. threads ?? [ ] ;
93+ for ( const thread of threads ) {
94+ scopedThreads . push ( scopeThreadShell ( connection . environmentId , thread ) ) ;
95+ }
96+ }
97+ return Arr . sort ( scopedThreads , threadsSortOrder ) ;
98+ } , [ savedConnectionsById , shellSnapshotStates ] ) ;
8399
84100 const serverConfigByEnvironmentId = useMemo (
85101 ( ) =>
0 commit comments