sdk-datagrid
Version:
Customizable (Angular) datagrid with data options for manipulation, and charts for visualization.
32 lines • 4.35 kB
JavaScript
export class Clone {
static deepCopy(source) {
if (Array.isArray(source)) {
return this.copyArray(source);
}
if (source instanceof Date) {
return this.copyDate(source);
}
if (source && typeof source === 'object') {
return this.copyObject(source);
}
return source;
}
static copyArray(source) {
return source.map(item => this.deepCopy(item));
}
static copyDate(source) {
return new Date(source.getTime());
}
static copyObject(source) {
const copy = Object.create(Object.getPrototypeOf(source));
Object.getOwnPropertyNames(source).forEach(prop => {
const descriptor = Object.getOwnPropertyDescriptor(source, prop);
if (descriptor) {
Object.defineProperty(copy, prop, descriptor);
copy[prop] = this.deepCopy(source[prop]);
}
});
return copy;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGstZGF0YWdyaWQvc3JjL2xpYi91dGlscy9jbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sS0FBSztJQUNQLE1BQU0sQ0FBQyxRQUFRLENBQUksTUFBUztRQUMvQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFpQixDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLE1BQU0sWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFpQixDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFJLE1BQVc7UUFDbkMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQVk7UUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sTUFBTSxDQUFDLFVBQVUsQ0FBSSxNQUFTO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDN0MsSUFBK0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFFLE1BQWlDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyRyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQVMsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ2xvbmUge1xuICAgIHB1YmxpYyBzdGF0aWMgZGVlcENvcHk8VD4oc291cmNlOiBUKTogVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvcHlBcnJheShzb3VyY2UpIGFzIHVua25vd24gYXMgVDtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvcHlEYXRlKHNvdXJjZSkgYXMgdW5rbm93biBhcyBUO1xuICAgICAgICB9XG4gIFxuICAgICAgICBpZiAoc291cmNlICYmIHR5cGVvZiBzb3VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3B5T2JqZWN0KHNvdXJjZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuICBcbiAgICBwcml2YXRlIHN0YXRpYyBjb3B5QXJyYXk8VD4oc291cmNlOiBUW10pOiBUW10ge1xuICAgICAgICByZXR1cm4gc291cmNlLm1hcChpdGVtID0+IHRoaXMuZGVlcENvcHkoaXRlbSkpO1xuICAgIH1cbiAgXG4gICAgcHJpdmF0ZSBzdGF0aWMgY29weURhdGUoc291cmNlOiBEYXRlKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShzb3VyY2UuZ2V0VGltZSgpKTtcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgc3RhdGljIGNvcHlPYmplY3Q8VD4oc291cmNlOiBUKTogVCB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpKTtcbiAgXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSkuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgcHJvcCk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3B5LCBwcm9wLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAoY29weSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KVtwcm9wXSA9IHRoaXMuZGVlcENvcHkoKHNvdXJjZSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KVtwcm9wXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICBcbiAgICAgICAgcmV0dXJuIGNvcHkgYXMgVDtcbiAgICB9XG4gIH1cbiAgIl19