2019-02-12 04:00:45 +00:00
|
|
|
import { computed } from '@ember/object';
|
|
|
|
|
|
|
|
// An unattractive but robust way to encode query params
|
2021-04-29 20:00:59 +00:00
|
|
|
export const serialize = val => {
|
|
|
|
if (typeof val === 'string' || typeof val === 'number') return val;
|
|
|
|
return val.length ? JSON.stringify(val) : '';
|
|
|
|
};
|
2019-02-12 04:00:45 +00:00
|
|
|
|
|
|
|
export const deserialize = str => {
|
|
|
|
try {
|
|
|
|
return JSON.parse(str)
|
|
|
|
.compact()
|
|
|
|
.without('');
|
|
|
|
} catch (e) {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// A computed property macro for deserializing a query param
|
|
|
|
export const deserializedQueryParam = qpKey =>
|
|
|
|
computed(qpKey, function() {
|
|
|
|
return deserialize(this.get(qpKey));
|
|
|
|
});
|