mirror of
https://github.com/fluxscape/fluxscape.git
synced 2026-01-11 06:42:56 +01:00
fix: Keep object id when fetching a Object column from the Cloud Service (#87)
This commit is contained in:
@@ -471,8 +471,15 @@ class CloudStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _isArrayOfObjects(a) {
|
function _isArrayOfObjects(a) {
|
||||||
if (!Array.isArray(a)) return false;
|
if (!Array.isArray(a)) {
|
||||||
for (var i = 0; i < a.length; i++) if (typeof a[i] !== 'object' || a[i] === null) return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < a.length; i++) {
|
||||||
|
if (typeof a[i] !== 'object' || a[i] === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -544,54 +551,86 @@ function _serializeObject(data, collectionName, modelScope) {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {unknown} data
|
||||||
|
* @param {string} type
|
||||||
|
* @param {*} modelScope
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
function _deserializeJSON(data, type, modelScope) {
|
function _deserializeJSON(data, type, modelScope) {
|
||||||
if (data === undefined) return;
|
if (data === undefined) return undefined;
|
||||||
if (data === null) return null;
|
if (data === null) return null;
|
||||||
|
|
||||||
if (type === 'Relation' && data.__type === 'Relation') {
|
if (type === 'Relation' && data.__type === 'Relation') {
|
||||||
return undefined; // Ignore relation fields
|
return undefined; // Ignore relation fields
|
||||||
} else if (type === 'Pointer' && data.__type === 'Pointer') {
|
}
|
||||||
// This is a pointer type, resolve into id
|
|
||||||
|
// This is a pointer type, resolve into id
|
||||||
|
if (type === 'Pointer' && data.__type === 'Pointer') {
|
||||||
return data.objectId;
|
return data.objectId;
|
||||||
} else if (type === 'Date' && data.__type === 'Date') {
|
}
|
||||||
|
|
||||||
|
if (type === 'Date' && data.__type === 'Date') {
|
||||||
return new Date(data.iso);
|
return new Date(data.iso);
|
||||||
} else if (type === 'Date' && typeof data === 'string') {
|
}
|
||||||
|
|
||||||
|
if (type === 'Date' && typeof data === 'string') {
|
||||||
return new Date(data);
|
return new Date(data);
|
||||||
} else if (type === 'File' && data.__type === 'File') {
|
}
|
||||||
|
|
||||||
|
if (type === 'File' && data.__type === 'File') {
|
||||||
return new CloudFile(data);
|
return new CloudFile(data);
|
||||||
} else if (type === 'GeoPoint' && data.__type === 'GeoPoint') {
|
}
|
||||||
|
|
||||||
|
if (type === 'GeoPoint' && data.__type === 'GeoPoint') {
|
||||||
return {
|
return {
|
||||||
latitude: data.latitude,
|
latitude: data.latitude,
|
||||||
longitude: data.longitude
|
longitude: data.longitude
|
||||||
};
|
};
|
||||||
} else if (_isArrayOfObjects(data)) {
|
}
|
||||||
var a = [];
|
|
||||||
for (var i = 0; i < data.length; i++) {
|
if (_isArrayOfObjects(data)) {
|
||||||
|
const a = [];
|
||||||
|
for (let i = 0; i < data.length; i++) {
|
||||||
a.push(_deserializeJSON(data[i], undefined, modelScope));
|
a.push(_deserializeJSON(data[i], undefined, modelScope));
|
||||||
}
|
}
|
||||||
var c = Collection.get();
|
const c = Collection.get();
|
||||||
c.set(a);
|
c.set(a);
|
||||||
return c;
|
return c;
|
||||||
} else if (Array.isArray(data)) return data;
|
}
|
||||||
|
|
||||||
|
// An array with mixed types
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
// This is an array with mixed data, just return it
|
// This is an array with mixed data, just return it
|
||||||
else if (data && data.__type === 'Object' && data.className !== undefined && data.objectId !== undefined) {
|
if (data && data.__type === 'Object' && data.className !== undefined && data.objectId !== undefined) {
|
||||||
const _data = Object.assign({}, data);
|
const _data = Object.assign({}, data);
|
||||||
delete _data.className;
|
delete _data.className;
|
||||||
delete _data.__type;
|
delete _data.__type;
|
||||||
return _fromJSON(_data, data.className, modelScope);
|
return _fromJSON(_data, data.className, modelScope);
|
||||||
} else if (typeof data === 'object' && data !== null) {
|
}
|
||||||
var m = (modelScope || Model).get();
|
|
||||||
for (var key in data) {
|
if (typeof data === 'object' && data !== null) {
|
||||||
m.set(key, _deserializeJSON(data[key], undefined, modelScope));
|
// Try to get the model by id, if it is defined, otherwise we create a new unique id.
|
||||||
|
const model = (modelScope || Model).get(data.id);
|
||||||
|
for (const key in data) {
|
||||||
|
const nestedValue = _deserializeJSON(data[key], undefined, modelScope);
|
||||||
|
model.set(key, nestedValue);
|
||||||
}
|
}
|
||||||
return m;
|
return model;
|
||||||
} else return data;
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _fromJSON(item, collectionName, modelScope) {
|
function _fromJSON(item, collectionName, modelScope) {
|
||||||
const modelStore = modelScope || Model;
|
const modelStore = modelScope || Model;
|
||||||
|
|
||||||
const model = modelStore.get(item.objectId);
|
// Try to get the model by the object id (record) or id, otherwise we create a new unique id.
|
||||||
|
const model = modelStore.get(item.objectId || item.id);
|
||||||
model._class = collectionName;
|
model._class = collectionName;
|
||||||
|
|
||||||
let schema = undefined;
|
let schema = undefined;
|
||||||
@@ -605,7 +644,8 @@ function _fromJSON(item, collectionName, modelScope) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const _type = schema && schema.properties && schema.properties[key] ? schema.properties[key].type : undefined;
|
const _type = schema && schema.properties && schema.properties[key] ? schema.properties[key].type : undefined;
|
||||||
model.set(key, _deserializeJSON(item[key], _type, modelScope));
|
const nestedValue = _deserializeJSON(item[key], _type, modelScope);
|
||||||
|
model.set(key, nestedValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
|
|||||||
Reference in New Issue
Block a user