@@ -91,6 +91,16 @@ export interface NavState {
9191 edgeColoring ?: EdgeColoring | undefined ;
9292 edgeDirection ?: EdgeDirection | undefined ;
9393
94+ // Edge creation conditions:
95+ edgeCreationTopicThreshold ?: number | undefined ;
96+ edgeCreationContributorThreshold ?: number | undefined ;
97+ edgeCreationStargazerThreshold ?: number | undefined ;
98+ edgeCreationEnableTopicLinking ?: boolean | undefined ;
99+ edgeCreationEnableContributorOverlap ?: boolean | undefined ;
100+ edgeCreationEnableSharedOrganization ?: boolean | undefined ;
101+ edgeCreationEnableCommonStargazers ?: boolean | undefined ;
102+ edgeCreationEnableDependencies ?: boolean | undefined ;
103+
94104 // Only for some specific transitions:
95105 preventBlocker ?: boolean ;
96106}
@@ -131,6 +141,15 @@ export function cleanNavState(state: NavState, data: Data): NavState {
131141 labelThresholdRatio,
132142 disableDefaultSize,
133143 disableDefaultColor,
144+ // Edge creation conditions
145+ edgeCreationTopicThreshold,
146+ edgeCreationContributorThreshold,
147+ edgeCreationStargazerThreshold,
148+ edgeCreationEnableTopicLinking,
149+ edgeCreationEnableContributorOverlap,
150+ edgeCreationEnableSharedOrganization,
151+ edgeCreationEnableCommonStargazers,
152+ edgeCreationEnableDependencies,
134153 } = state ;
135154
136155 const cleanedSubtitleFields = uniq ( ( subtitleFields || [ ] ) . filter ( ( f ) => fieldsIndex [ f ] ) ) ;
@@ -171,7 +190,7 @@ export function cleanNavState(state: NavState, data: Data): NavState {
171190 subtitleFields : cleanedSubtitleFields . length ? cleanedSubtitleFields : undefined ,
172191 // Viewer state:
173192 nodeSizeField :
174- ( nodeSizeField && fieldsIndex [ nodeSizeField ] && cleanedSizeableIndex [ nodeSizeField ]
193+ ( nodeSizeField && ( nodeSizeField === "pagerank" || ( fieldsIndex [ nodeSizeField ] && cleanedSizeableIndex [ nodeSizeField ] ) )
175194 ? nodeSizeField
176195 : undefined ) || ( cleanedDisableDefaultSize ? cleanedSizeable [ 0 ] : undefined ) ,
177196 nodeColorField :
@@ -205,9 +224,27 @@ export function cleanNavState(state: NavState, data: Data): NavState {
205224 maxLabelSize : cleanedMaxLabelSize !== DEFAULT_LABEL_SIZE ? cleanedMaxLabelSize : undefined ,
206225 disableDefaultSize : cleanedDisableDefaultSize || undefined ,
207226 disableDefaultColor : cleanedDisableDefaultColor || undefined ,
227+ // Edge creation conditions - preserve as-is since they don't need cleaning
228+ edgeCreationTopicThreshold,
229+ edgeCreationContributorThreshold,
230+ edgeCreationStargazerThreshold,
231+ edgeCreationEnableTopicLinking,
232+ edgeCreationEnableContributorOverlap,
233+ edgeCreationEnableSharedOrganization,
234+ edgeCreationEnableCommonStargazers,
235+ edgeCreationEnableDependencies,
208236 } ;
209237
210- return omitBy ( cleanedState , isNil ) as NavState ;
238+ // Don't filter out edge creation conditions even if they're undefined initially
239+ // This allows them to be set later and persist
240+ const finalState = omitBy ( cleanedState , ( value , key ) => {
241+ // Don't filter out edge creation conditions
242+ if ( key . startsWith ( 'edgeCreation' ) ) return false ;
243+ // Filter out other undefined values
244+ return isNil ( value ) ;
245+ } ) ;
246+
247+ return finalState as NavState ;
211248}
212249
213250export function navStateToQueryURL ( state : NavState ) : string {
@@ -247,11 +284,21 @@ export function navStateToQueryURL(state: NavState): string {
247284 if ( state . minLabelSize ) params . append ( "ls" , state . minLabelSize + "" ) ;
248285 if ( state . maxLabelSize ) params . append ( "le" , state . maxLabelSize + "" ) ;
249286
287+ // Edge creation conditions
288+ if ( state . edgeCreationTopicThreshold ) params . append ( "ett" , state . edgeCreationTopicThreshold + "" ) ;
289+ if ( state . edgeCreationContributorThreshold ) params . append ( "ect" , state . edgeCreationContributorThreshold + "" ) ;
290+ if ( state . edgeCreationStargazerThreshold ) params . append ( "est" , state . edgeCreationStargazerThreshold + "" ) ;
291+ if ( state . edgeCreationEnableTopicLinking ) params . append ( "etl" , "1" ) ;
292+ if ( state . edgeCreationEnableContributorOverlap ) params . append ( "eco" , "1" ) ;
293+ if ( state . edgeCreationEnableSharedOrganization ) params . append ( "eso" , "1" ) ;
294+ if ( state . edgeCreationEnableCommonStargazers ) params . append ( "ecs" , "1" ) ;
295+ if ( state . edgeCreationEnableDependencies ) params . append ( "edp" , "1" ) ;
296+
250297 return urlSearchParamsToString ( params ) ;
251298}
252299
253300export function queryURLToNavState ( queryURL : string ) : NavState {
254- const { url, l, r, s, c, n, fa, ca, sa, le, ls, nr, er, ec, ed, gm, lt, ds, dc, st, ...query } =
301+ const { url, l, r, s, c, n, fa, ca, sa, le, ls, nr, er, ec, ed, gm, lt, ds, dc, st, ett , ect , est , etl , eco , eso , ecs , edp , ...query } =
255302 queryStringToRecord ( queryURL ) ;
256303 const navState : NavState = { } ;
257304
@@ -276,6 +323,16 @@ export function queryURLToNavState(queryURL: string): NavState {
276323 if ( fa ) navState . filterable = arrayify ( fa ) ;
277324 if ( st ) navState . subtitleFields = arrayify ( st ) ;
278325
326+ // Edge creation conditions
327+ if ( typeof ett === "string" ) navState . edgeCreationTopicThreshold = + ett ;
328+ if ( typeof ect === "string" ) navState . edgeCreationContributorThreshold = + ect ;
329+ if ( typeof est === "string" ) navState . edgeCreationStargazerThreshold = + est ;
330+ if ( typeof etl === "string" ) navState . edgeCreationEnableTopicLinking = etl === "1" ;
331+ if ( typeof eco === "string" ) navState . edgeCreationEnableContributorOverlap = eco === "1" ;
332+ if ( typeof eso === "string" ) navState . edgeCreationEnableSharedOrganization = eso === "1" ;
333+ if ( typeof ecs === "string" ) navState . edgeCreationEnableCommonStargazers = ecs === "1" ;
334+ if ( typeof edp === "string" ) navState . edgeCreationEnableDependencies = edp === "1" ;
335+
279336 const fields = groupBy ( Object . keys ( query ) , ( key ) => key . replace ( / \. ( v | t | m i n | m a x ) $ / , "" ) ) ;
280337 const filters = map ( fields , ( [ q0 , q1 ] , field ) : Filter => {
281338 // Terms case:
0 commit comments