mirror of
https://github.com/wekan/wekan.git
synced 2025-12-17 16:00:13 +01:00
Fix problem with dates in selector being unpickled as a String
This commit is contained in:
parent
223cc07139
commit
a63a61e7fc
3 changed files with 61 additions and 24 deletions
|
|
@ -143,36 +143,73 @@ SessionData.helpers({
|
|||
|
||||
SessionData.unpickle = pickle => {
|
||||
return JSON.parse(pickle, (key, value) => {
|
||||
if (value === null) {
|
||||
return null;
|
||||
} else if (typeof value === 'object') {
|
||||
// eslint-disable-next-line no-prototype-builtins
|
||||
if (value.hasOwnProperty('$$class')) {
|
||||
if (value.$$class === 'RegExp') {
|
||||
return new RegExp(value.source, value.flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
return unpickleValue(value);
|
||||
});
|
||||
};
|
||||
|
||||
function unpickleValue(value) {
|
||||
if (value === null) {
|
||||
return null;
|
||||
} else if (typeof value === 'object') {
|
||||
// eslint-disable-next-line no-prototype-builtins
|
||||
if (value.hasOwnProperty('$$class')) {
|
||||
switch (value.$$class) {
|
||||
case 'RegExp':
|
||||
return new RegExp(value.source, value.flags);
|
||||
case 'Date':
|
||||
return new Date(value.stringValue);
|
||||
case 'Object':
|
||||
return unpickleObject(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
function unpickleObject(obj) {
|
||||
const newObject = {};
|
||||
Object.entries(obj).forEach(([key, value]) => {
|
||||
newObject[key] = unpickleValue(value);
|
||||
});
|
||||
return newObject;
|
||||
}
|
||||
|
||||
SessionData.pickle = value => {
|
||||
return JSON.stringify(value, (key, value) => {
|
||||
if (value === null) {
|
||||
return null;
|
||||
} else if (typeof value === 'object') {
|
||||
if (value.constructor.name === 'RegExp') {
|
||||
return pickleValue(value);
|
||||
});
|
||||
};
|
||||
|
||||
function pickleValue(value) {
|
||||
if (value === null) {
|
||||
return null;
|
||||
} else if (typeof value === 'object') {
|
||||
switch(value.constructor.name) {
|
||||
case 'RegExp':
|
||||
return {
|
||||
$$class: 'RegExp',
|
||||
source: value.source,
|
||||
flags: value.flags,
|
||||
};
|
||||
}
|
||||
case 'Date':
|
||||
return {
|
||||
$$class: 'Date',
|
||||
stringValue: String(value),
|
||||
};
|
||||
case 'Object':
|
||||
return pickleObject(value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
function pickleObject(obj) {
|
||||
const newObject = {};
|
||||
Object.entries(obj).forEach(([key, value]) => {
|
||||
newObject[key] = pickleValue(value);
|
||||
});
|
||||
};
|
||||
return newObject;
|
||||
}
|
||||
|
||||
if (!Meteor.isServer) {
|
||||
SessionData.getSessionId = () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue