Retain direction for empty KeysetScrollPosition.

We now retain the direction when an empty KeysetScrollPosition is created.

Closes #2840
This commit is contained in:
Mark Paluch
2023-07-04 15:50:46 +02:00
parent 0a6b71fc2d
commit 9af41c9729
2 changed files with 19 additions and 5 deletions

View File

@@ -34,9 +34,12 @@ import org.springframework.util.ObjectUtils;
*/
public final class KeysetScrollPosition implements ScrollPosition {
private static final KeysetScrollPosition INITIAL = new KeysetScrollPosition(Collections.emptyMap(),
private static final KeysetScrollPosition EMPTY_FORWARD = new KeysetScrollPosition(Collections.emptyMap(),
Direction.FORWARD);
private static final KeysetScrollPosition EMPTY_BACKWARD = new KeysetScrollPosition(Collections.emptyMap(),
Direction.BACKWARD);
private final Map<String, Object> keys;
private final Direction direction;
@@ -55,7 +58,7 @@ public final class KeysetScrollPosition implements ScrollPosition {
* @return will never be {@literal null}.
*/
static KeysetScrollPosition initial() {
return INITIAL;
return EMPTY_FORWARD;
}
/**
@@ -70,8 +73,7 @@ public final class KeysetScrollPosition implements ScrollPosition {
Assert.notNull(keys, "Keys must not be null");
Assert.notNull(direction, "Direction must not be null");
return keys.isEmpty()
? initial()
return keys.isEmpty() ? (direction == Direction.FORWARD ? EMPTY_FORWARD : EMPTY_BACKWARD)
: new KeysetScrollPosition(Collections.unmodifiableMap(new LinkedHashMap<>(keys)), direction);
}

View File

@@ -129,12 +129,24 @@ class ScrollPositionUnitTests {
assertThat(position.getOffset()).isEqualTo(0);
}
@Test // GH-2824
@Test // GH-2824, GH-2840
void initialKeysetPosition() {
KeysetScrollPosition keyset = ScrollPosition.keyset();
assertThat(keyset.isInitial()).isTrue();
assertThat(keyset.scrollsForward()).isTrue();
keyset = ScrollPosition.of(Collections.emptyMap(), Direction.FORWARD);
assertThat(keyset.isInitial()).isTrue();
assertThat(keyset.scrollsForward()).isTrue();
assertThat(keyset.scrollsBackward()).isFalse();
keyset = ScrollPosition.of(Collections.emptyMap(), Direction.BACKWARD);
assertThat(keyset.isInitial()).isTrue();
assertThat(keyset.scrollsForward()).isFalse();
assertThat(keyset.scrollsBackward()).isTrue();
}
}