parent
58671dd59e
commit
9b9d7e6471
|
@ -6,6 +6,7 @@ x.x.x Release notes (xxxx-xx-xx)
|
||||||
* None.
|
* None.
|
||||||
|
|
||||||
### Enhancements
|
### Enhancements
|
||||||
|
* Added `isEmpty()` method on `Realm.Results` and `Realm.List`.
|
||||||
* Added schema change listener to `Realm.addListener()` (#1825).
|
* Added schema change listener to `Realm.addListener()` (#1825).
|
||||||
|
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
|
|
|
@ -63,6 +63,13 @@ class Collection {
|
||||||
*/
|
*/
|
||||||
isValid() {}
|
isValid() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if this collection is empty.
|
||||||
|
* @returns {boolean} indicating if the collection is empty or not.
|
||||||
|
* @since 2.7.0
|
||||||
|
*/
|
||||||
|
isEmpty() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns new _Results_ that represent this collection being filtered by the provided query.
|
* Returns new _Results_ that represent this collection being filtered by the provided query.
|
||||||
*
|
*
|
||||||
|
|
|
@ -150,6 +150,11 @@ declare namespace Realm {
|
||||||
*/
|
*/
|
||||||
isValid(): boolean;
|
isValid(): boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns boolean
|
||||||
|
*/
|
||||||
|
isEmpty(): boolean;
|
||||||
|
|
||||||
min(property?: string): number | Date | null;
|
min(property?: string): number | Date | null;
|
||||||
max(property?: string): number | Date | null;
|
max(property?: string): number | Date | null;
|
||||||
sum(property?: string): number | null;
|
sum(property?: string): number | null;
|
||||||
|
|
|
@ -74,6 +74,7 @@ struct ListClass : ClassDefinition<T, realm::js::List<T>, CollectionClass<T>> {
|
||||||
static void filtered(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void filtered(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
static void sorted(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void sorted(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
static void is_valid(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void is_valid(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
|
static void is_empty(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
static void index_of(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void index_of(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
|
|
||||||
// observable
|
// observable
|
||||||
|
@ -93,6 +94,7 @@ struct ListClass : ClassDefinition<T, realm::js::List<T>, CollectionClass<T>> {
|
||||||
{"filtered", wrap<filtered>},
|
{"filtered", wrap<filtered>},
|
||||||
{"sorted", wrap<sorted>},
|
{"sorted", wrap<sorted>},
|
||||||
{"isValid", wrap<is_valid>},
|
{"isValid", wrap<is_valid>},
|
||||||
|
{"isEmpty", wrap<is_empty>},
|
||||||
{"indexOf", wrap<index_of>},
|
{"indexOf", wrap<index_of>},
|
||||||
{"min", wrap<compute_aggregate_on_collection<ListClass<T>, AggregateFunc::Min>>},
|
{"min", wrap<compute_aggregate_on_collection<ListClass<T>, AggregateFunc::Min>>},
|
||||||
{"max", wrap<compute_aggregate_on_collection<ListClass<T>, AggregateFunc::Max>>},
|
{"max", wrap<compute_aggregate_on_collection<ListClass<T>, AggregateFunc::Max>>},
|
||||||
|
@ -272,6 +274,11 @@ void ListClass<T>::is_valid(ContextType ctx, ObjectType this_object, Arguments a
|
||||||
return_value.set(get_internal<T, ListClass<T>>(this_object)->is_valid());
|
return_value.set(get_internal<T, ListClass<T>>(this_object)->is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void ListClass<T>::is_empty(ContextType ctx, ObjectType this_object, Arguments args, ReturnValue &return_value) {
|
||||||
|
return_value.set(get_internal<T, ListClass<T>>(this_object)->size() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void ListClass<T>::index_of(ContextType ctx, ObjectType this_object, Arguments args, ReturnValue &return_value) {
|
void ListClass<T>::index_of(ContextType ctx, ObjectType this_object, Arguments args, ReturnValue &return_value) {
|
||||||
auto fn = [&](auto&& row) {
|
auto fn = [&](auto&& row) {
|
||||||
|
|
|
@ -87,6 +87,7 @@ struct ResultsClass : ClassDefinition<T, realm::js::Results<T>, CollectionClass<
|
||||||
static void filtered(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void filtered(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
static void sorted(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void sorted(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
static void is_valid(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void is_valid(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
|
static void is_empty(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
#if REALM_ENABLE_SYNC
|
#if REALM_ENABLE_SYNC
|
||||||
static void subscribe(ContextType, ObjectType, Arguments, ReturnValue &);
|
static void subscribe(ContextType, ObjectType, Arguments, ReturnValue &);
|
||||||
#endif
|
#endif
|
||||||
|
@ -115,6 +116,7 @@ struct ResultsClass : ClassDefinition<T, realm::js::Results<T>, CollectionClass<
|
||||||
{"filtered", wrap<filtered>},
|
{"filtered", wrap<filtered>},
|
||||||
{"sorted", wrap<sorted>},
|
{"sorted", wrap<sorted>},
|
||||||
{"isValid", wrap<is_valid>},
|
{"isValid", wrap<is_valid>},
|
||||||
|
{"isEmpty", wrap<is_empty>},
|
||||||
#if REALM_ENABLE_SYNC
|
#if REALM_ENABLE_SYNC
|
||||||
{"subscribe", wrap<subscribe>},
|
{"subscribe", wrap<subscribe>},
|
||||||
#endif
|
#endif
|
||||||
|
@ -283,6 +285,11 @@ void ResultsClass<T>::is_valid(ContextType ctx, ObjectType this_object, Argument
|
||||||
return_value.set(get_internal<T, ResultsClass<T>>(this_object)->is_valid());
|
return_value.set(get_internal<T, ResultsClass<T>>(this_object)->is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void ResultsClass<T>::is_empty(ContextType ctx, ObjectType this_object, Arguments args, ReturnValue &return_value) {
|
||||||
|
return_value.set(get_internal<T, ResultsClass<T>>(this_object)->size() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
#if REALM_ENABLE_SYNC
|
#if REALM_ENABLE_SYNC
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void ResultsClass<T>::subscribe(ContextType ctx, ObjectType this_object, Arguments args, ReturnValue &return_value) {
|
void ResultsClass<T>::subscribe(ContextType ctx, ObjectType this_object, Arguments args, ReturnValue &return_value) {
|
||||||
|
|
|
@ -1002,6 +1002,28 @@ module.exports = {
|
||||||
TestCase.assertThrowsContaining(() => list.length, 'invalidated');
|
TestCase.assertThrowsContaining(() => list.length, 'invalidated');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testIsEmpty: function () {
|
||||||
|
const realm = new Realm({ schema: [schemas.PersonObject, schemas.PersonList] });
|
||||||
|
let object;
|
||||||
|
realm.write(() => {
|
||||||
|
object = realm.create('PersonList', {
|
||||||
|
list: [
|
||||||
|
]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
TestCase.assertTrue(object.list.isEmpty());
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
object.list = [
|
||||||
|
{ name: 'Bob', age: 42 },
|
||||||
|
{ name: 'Alice', age: 42 }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
TestCase.assertFalse(object.list.isEmpty());
|
||||||
|
|
||||||
|
realm.close();
|
||||||
|
},
|
||||||
|
|
||||||
testListAggregateFunctions: function() {
|
testListAggregateFunctions: function() {
|
||||||
const NullableBasicTypesList = {
|
const NullableBasicTypesList = {
|
||||||
name: 'NullableBasicTypesList',
|
name: 'NullableBasicTypesList',
|
||||||
|
@ -1301,5 +1323,5 @@ module.exports = {
|
||||||
TestCase.assertEqual(objects[1].list1[0], "Foo");
|
TestCase.assertEqual(objects[1].list1[0], "Foo");
|
||||||
TestCase.assertEqual(objects[1].list2.length, 1);
|
TestCase.assertEqual(objects[1].list2.length, 1);
|
||||||
TestCase.assertEqual(objects[1].list2[0], "Bar");
|
TestCase.assertEqual(objects[1].list2[0], "Bar");
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -334,6 +334,17 @@ module.exports = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testIsEmpty: function () {
|
||||||
|
let realm = new Realm({ schema: [schemas.TestObject] });
|
||||||
|
let result = realm.objects('TestObject');
|
||||||
|
TestCase.assertTrue(result.isEmpty());
|
||||||
|
realm.write(function () {
|
||||||
|
realm.create('TestObject', { doubleCol: 42 });
|
||||||
|
});
|
||||||
|
TestCase.assertFalse(result.isEmpty());
|
||||||
|
realm.close();
|
||||||
|
},
|
||||||
|
|
||||||
testResultsDeletedObjects: function() {
|
testResultsDeletedObjects: function() {
|
||||||
var realm = new Realm({schema: [schemas.TestObject]});
|
var realm = new Realm({schema: [schemas.TestObject]});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue