Add support for Results methods in Chrome
Which only consists of sortByProperty
This commit is contained in:
parent
78ec67cd6c
commit
5f52d07154
|
@ -6,11 +6,29 @@ let util = require('./util');
|
||||||
let idKey = util.idKey;
|
let idKey = util.idKey;
|
||||||
let realmKey = util.realmKey;
|
let realmKey = util.realmKey;
|
||||||
let resizeListKey = util.resizeListKey;
|
let resizeListKey = util.resizeListKey;
|
||||||
|
let prototype = {};
|
||||||
|
|
||||||
exports.create = create;
|
exports.create = create;
|
||||||
|
|
||||||
|
[
|
||||||
|
'sortByProperty',
|
||||||
|
].forEach(function(name) {
|
||||||
|
Object.defineProperty(prototype, name, {
|
||||||
|
value: function() {
|
||||||
|
let resultsId = this[idKey];
|
||||||
|
let realmId = this[realmKey];
|
||||||
|
|
||||||
|
if (!resultsId || !realmId) {
|
||||||
|
throw new TypeError(name + ' method was not called on Results!');
|
||||||
|
}
|
||||||
|
|
||||||
|
return rpc.callListMethod(realmId, resultsId, name, Array.from(arguments));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
function create(realmId, info) {
|
function create(realmId, info) {
|
||||||
let results = util.createList(null, getterForLength, getterForIndex);
|
let results = util.createList(prototype, getterForLength, getterForIndex);
|
||||||
let size = info.size;
|
let size = info.size;
|
||||||
|
|
||||||
results[realmKey] = realmId;
|
results[realmKey] = realmId;
|
||||||
|
|
42
lib/rpc.js
42
lib/rpc.js
|
@ -17,27 +17,30 @@ if (XMLHttpRequest.__proto__ != window.XMLHttpRequestEventTarget) {
|
||||||
window.XMLHttpRequest = override;
|
window.XMLHttpRequest = override;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.registerTypeConverter = registerTypeConverter;
|
module.exports = {
|
||||||
|
registerTypeConverter,
|
||||||
|
|
||||||
exports.createRealm = createRealm;
|
createRealm,
|
||||||
exports.callRealmMethod = callRealmMethod;
|
callRealmMethod,
|
||||||
|
|
||||||
exports.getObjectProperty = getObjectProperty;
|
getObjectProperty,
|
||||||
exports.setObjectProperty = setObjectProperty;
|
setObjectProperty,
|
||||||
|
|
||||||
exports.getListItem = getListItem;
|
getListItem,
|
||||||
exports.setListItem = setListItem;
|
setListItem,
|
||||||
exports.getListSize = getListSize;
|
getListSize,
|
||||||
exports.callListMethod = callListMethod;
|
callListMethod,
|
||||||
|
|
||||||
exports.getResultsItem = getResultsItem;
|
getResultsItem,
|
||||||
exports.getResultsSize = getResultsSize;
|
getResultsSize,
|
||||||
|
callResultsMethod,
|
||||||
|
|
||||||
exports.beginTransaction = beginTransaction;
|
beginTransaction,
|
||||||
exports.cancelTransaction = cancelTransaction;
|
cancelTransaction,
|
||||||
exports.commitTransaction = commitTransaction;
|
commitTransaction,
|
||||||
|
|
||||||
exports.clearTestState = clearTestState;
|
clearTestState,
|
||||||
|
};
|
||||||
|
|
||||||
function registerTypeConverter(type, handler) {
|
function registerTypeConverter(type, handler) {
|
||||||
typeConverters[type] = handler;
|
typeConverters[type] = handler;
|
||||||
|
@ -101,6 +104,15 @@ function getResultsSize(realmId, resultsId) {
|
||||||
return sendRequest('get_results_size', {realmId, resultsId});
|
return sendRequest('get_results_size', {realmId, resultsId});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function callResultsMethod(realmId, resultsId, name, args) {
|
||||||
|
if (args) {
|
||||||
|
args = args.map((arg) => serialize(realmId, arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = sendRequest('call_results_method', {realmId, resultsId, name, arguments: args});
|
||||||
|
return deserialize(realmId, result);
|
||||||
|
}
|
||||||
|
|
||||||
function beginTransaction(realmId) {
|
function beginTransaction(realmId) {
|
||||||
sendRequest('begin_transaction', {realmId});
|
sendRequest('begin_transaction', {realmId});
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ namespace realm {
|
||||||
typedef std::shared_ptr<Realm> SharedRealm;
|
typedef std::shared_ptr<Realm> SharedRealm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern const JSStaticFunction RJSResultsFuncs[];
|
||||||
JSClassRef RJSResultsClass();
|
JSClassRef RJSResultsClass();
|
||||||
JSObjectRef RJSResultsCreate(JSContextRef ctx, realm::SharedRealm realm, std::string className);
|
JSObjectRef RJSResultsCreate(JSContextRef ctx, realm::SharedRealm realm, std::string className);
|
||||||
JSObjectRef RJSResultsCreate(JSContextRef ctx, realm::SharedRealm realm, std::string className, std::string query);
|
JSObjectRef RJSResultsCreate(JSContextRef ctx, realm::SharedRealm realm, std::string className, std::string query);
|
||||||
|
|
|
@ -118,12 +118,12 @@ JSObjectRef RJSResultsCreate(JSContextRef ctx, SharedRealm realm, std::string cl
|
||||||
return RJSWrapObject<Results *>(ctx, RJSResultsClass(), new Results(realm, *object_schema, std::move(query)));
|
return RJSWrapObject<Results *>(ctx, RJSResultsClass(), new Results(realm, *object_schema, std::move(query)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const JSStaticFunction RJSResultsFuncs[] = {
|
||||||
JSClassRef RJSResultsClass() {
|
|
||||||
const JSStaticFunction resultsFuncs[] = {
|
|
||||||
{"sortByProperty", SortByProperty, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
|
{"sortByProperty", SortByProperty, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
static JSClassRef s_objectClass = RJSCreateWrapperClass<Results *>("Results", ResultsGetProperty, NULL, resultsFuncs, ResultsPropertyNames);
|
|
||||||
|
JSClassRef RJSResultsClass() {
|
||||||
|
static JSClassRef s_objectClass = RJSCreateWrapperClass<Results *>("Results", ResultsGetProperty, NULL, RJSResultsFuncs, ResultsPropertyNames);
|
||||||
return s_objectClass;
|
return s_objectClass;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,6 +169,13 @@ using RPCRequest = std::function<NSDictionary *(NSDictionary *dictionary)>;
|
||||||
}
|
}
|
||||||
return @{@"result": @(length)};
|
return @{@"result": @(length)};
|
||||||
};
|
};
|
||||||
|
_requests["/call_results_method"] = [=](NSDictionary *dict) {
|
||||||
|
NSString *name = dict[@"name"];
|
||||||
|
return [self performObjectMethod:name.UTF8String
|
||||||
|
classMethods:RJSResultsFuncs
|
||||||
|
args:dict[@"arguments"]
|
||||||
|
objectId:[dict[@"resultsId"] unsignedLongValue]];
|
||||||
|
};
|
||||||
_requests["/get_list_item"] = [=](NSDictionary *dict) {
|
_requests["/get_list_item"] = [=](NSDictionary *dict) {
|
||||||
RPCObjectID listId = [dict[@"listId"] unsignedLongValue];
|
RPCObjectID listId = [dict[@"listId"] unsignedLongValue];
|
||||||
long index = [dict[@"index"] longValue];
|
long index = [dict[@"index"] longValue];
|
||||||
|
|
Loading…
Reference in New Issue