@@ -1182,6 +1182,7 @@ export function useRowsByGroup(groupId: string) {
11821182export function useRowOrdersSelector ( ) {
11831183 const rows = useRowMap ( ) ;
11841184 const view = useDatabaseView ( ) ;
1185+ const rowOrders = view ?. get ( YjsDatabaseKey . row_orders ) ;
11851186 const viewId = useDatabaseViewId ( ) ;
11861187 const sorts = view ?. get ( YjsDatabaseKey . sorts ) ;
11871188 const fields = useDatabaseFields ( ) ;
@@ -1316,6 +1317,29 @@ export function useRowOrdersSelector() {
13161317 [ blobPrefetchComplete , ensureRow , loadRowFromSeed , markConditionRowsUnavailable , seedsReady ]
13171318 ) ;
13181319
1320+ const syncUnconditionedRowOrders = useCallback ( ( ) => {
1321+ const originalRowOrders = rowOrders ?. toJSON ( ) as Row [ ] | undefined ;
1322+
1323+ if ( ! originalRowOrders ) return false ;
1324+
1325+ const conditionSignature = getConditionSignature ( sorts , filters ) ;
1326+ const conditionStateKey = `${ viewId ?? '' } :${ conditionSignature } ` ;
1327+ const currentHasConditions = conditionSignature !== '' ;
1328+
1329+ if ( conditionSignatureRef . current !== conditionStateKey ) {
1330+ conditionSignatureRef . current = conditionStateKey ;
1331+ filtersAppliedRef . current = false ;
1332+ pendingConditionRowLoadsRef . current . clear ( ) ;
1333+ unavailableConditionRowsRef . current . clear ( ) ;
1334+ }
1335+
1336+ if ( currentHasConditions ) return false ;
1337+
1338+ filtersAppliedRef . current = false ;
1339+ setRowOrdersState ( { rows : originalRowOrders , conditionSignature : conditionStateKey } ) ;
1340+ return true ;
1341+ } , [ filters , rowOrders , sorts , viewId ] ) ;
1342+
13191343 // Getter for relation cell text (used in sorting/filtering)
13201344 const relationTextGetter = useCallback (
13211345 ( rowId : string , fieldId : string ) => {
@@ -1381,7 +1405,7 @@ export function useRowOrdersSelector() {
13811405 const onConditionsChange = useCallback ( ( ) => {
13821406 const shouldLogConditionCompute = shouldLogDatabaseConditionPerformance ( ) ;
13831407 const computeStartedAt = shouldLogConditionCompute ? performance . now ( ) : 0 ;
1384- const originalRowOrders = view ?. get ( YjsDatabaseKey . row_orders ) ?. toJSON ( ) as Row [ ] | undefined ;
1408+ const originalRowOrders = rowOrders ?. toJSON ( ) as Row [ ] | undefined ;
13851409
13861410 if ( ! originalRowOrders ) return ;
13871411
@@ -1477,7 +1501,7 @@ export function useRowOrdersSelector() {
14771501 filters ,
14781502 rowDocsForConditions ,
14791503 sorts ,
1480- view ,
1504+ rowOrders ,
14811505 relationTextGetter ,
14821506 rollupValueGetter ,
14831507 rollupTextGetter ,
@@ -1511,7 +1535,13 @@ export function useRowOrdersSelector() {
15111535 onConditionsChange ( ) ;
15121536 } , 200 ) ;
15131537
1514- view ?. get ( YjsDatabaseKey . row_orders ) ?. observeDeep ( debouncedChange ) ;
1538+ const handleRowOrdersChange = ( ) => {
1539+ if ( ! syncUnconditionedRowOrders ( ) ) {
1540+ debouncedChange ( ) ;
1541+ }
1542+ } ;
1543+
1544+ rowOrders ?. observeDeep ( handleRowOrdersChange ) ;
15151545
15161546 const observers = new Map < string , ( ) => void > ( ) ;
15171547 let relationFieldIds : string [ ] = [ ] ;
@@ -1593,7 +1623,7 @@ export function useRowOrdersSelector() {
15931623 } ) ;
15941624
15951625 return ( ) => {
1596- view ?. get ( YjsDatabaseKey . row_orders ) ?. unobserveDeep ( debouncedChange ) ;
1626+ rowOrders ?. unobserveDeep ( handleRowOrdersChange ) ;
15971627 sorts ?. unobserveDeep ( handleSortFilterChange ) ;
15981628 filters ?. unobserveDeep ( handleSortFilterChange ) ;
15991629 fields ?. unobserveDeep ( handleFieldChange ) ;
@@ -1606,7 +1636,7 @@ export function useRowOrdersSelector() {
16061636 }
16071637 } ) ;
16081638 } ;
1609- } , [ onConditionsChange , view , fields , filters , sorts , rows , viewId ] ) ;
1639+ } , [ onConditionsChange , rowOrders , fields , filters , sorts , rows , viewId , syncUnconditionedRowOrders ] ) ;
16101640
16111641 // Set up rollup field observers (extracted hook)
16121642 useRollupFieldObservers ( onConditionsChange , rollupWatchVersion ) ;
0 commit comments