From f2a665b201702179116f448fc5210ae343b4bf4c Mon Sep 17 00:00:00 2001 From: Gregor Becker Date: Wed, 30 Aug 2023 21:34:48 +0200 Subject: [PATCH 1/4] fix(pinia-orm-1569): Wrong behaviour of `$getOriginal` --- packages/pinia-orm/src/model/Model.ts | 4 +-- packages/pinia-orm/src/store/Config.ts | 2 +- .../pinia-orm/tests/unit/model/Model.spec.ts | 26 ++++++++++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/packages/pinia-orm/src/model/Model.ts b/packages/pinia-orm/src/model/Model.ts index 97986241f..070e76b0e 100644 --- a/packages/pinia-orm/src/model/Model.ts +++ b/packages/pinia-orm/src/model/Model.ts @@ -745,7 +745,7 @@ export class Model { this[key] = this[key] ?? keyValue } - operation === 'set' && (this.$self().original = this.$getAttributes()) + operation === 'set' && (this.$self().original[this[this.$getKeyName()]] = this.$getAttributes()) modelConfig.withMeta && operation === 'set' && this.$fillMeta(options.action) @@ -930,7 +930,7 @@ export class Model { * Get the original values of the model instance */ $getOriginal(): Element { - return this.$self().original + return this.$self().original[this[this.$getKeyName()]] } /** diff --git a/packages/pinia-orm/src/store/Config.ts b/packages/pinia-orm/src/store/Config.ts index 0cd001c98..48ca18274 100644 --- a/packages/pinia-orm/src/store/Config.ts +++ b/packages/pinia-orm/src/store/Config.ts @@ -4,7 +4,7 @@ import type { FilledInstallOptions } from './Store' export const CONFIG_DEFAULTS = { model: { withMeta: false, - hidden: ['_meta'], + hidden: ['_meta', 'original'], visible: ['*'], }, cache: { diff --git a/packages/pinia-orm/tests/unit/model/Model.spec.ts b/packages/pinia-orm/tests/unit/model/Model.spec.ts index afb01ebb7..48939b136 100644 --- a/packages/pinia-orm/tests/unit/model/Model.spec.ts +++ b/packages/pinia-orm/tests/unit/model/Model.spec.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' +import { computed } from 'vue-demi' -import { Model } from '../../../src' +import { Model, useRepo } from '../../../src' import { Attr } from '../../../src/decorators' describe('unit/model/Model', () => { @@ -40,4 +41,27 @@ describe('unit/model/Model', () => { expect(user.lastName).toBe('John Doe') expect(() => user.$isDirty('name')).toThrowError() }) + + it('it displays states correctly with multiple same models', () => { + const userRepo = useRepo(User) + userRepo.save([ + { + id: 1, + lastName: 'JohnK', + }, + { + id: 2, + lastName: 'JaneD', + }, + { + id: 3, + lastName: 'TomH', + }, + ]) + + const users = computed(() => userRepo.all()) + const usersOriginal = computed(() => users.value.map(u => u.$getOriginal())) + + expect(users.value.map(user => user.$toJson())).toEqual(usersOriginal.value) + }) }) From e292ce72577f11ef2e9aaaf60a1652527a0e7fee Mon Sep 17 00:00:00 2001 From: Gregor Becker Date: Wed, 30 Aug 2023 21:43:14 +0200 Subject: [PATCH 2/4] refactor(pinia-orm-1569): fix build error --- packages/pinia-orm/src/model/Model.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pinia-orm/src/model/Model.ts b/packages/pinia-orm/src/model/Model.ts index 070e76b0e..510050ab2 100644 --- a/packages/pinia-orm/src/model/Model.ts +++ b/packages/pinia-orm/src/model/Model.ts @@ -745,7 +745,7 @@ export class Model { this[key] = this[key] ?? keyValue } - operation === 'set' && (this.$self().original[this[this.$getKeyName()]] = this.$getAttributes()) + operation === 'set' && (this.$self().original[this[this.$getKey(this, true) as string]] = this.$getAttributes()) modelConfig.withMeta && operation === 'set' && this.$fillMeta(options.action) @@ -930,7 +930,7 @@ export class Model { * Get the original values of the model instance */ $getOriginal(): Element { - return this.$self().original[this[this.$getKeyName()]] + return this.$self().original[this[this.$getKey(this, true) as string]] } /** From 470641f654cd99cae762a58440deebc575239c7f Mon Sep 17 00:00:00 2001 From: Gregor Becker Date: Wed, 30 Aug 2023 21:54:47 +0200 Subject: [PATCH 3/4] refactor(pinia-orm-1569): fix test --- packages/pinia-orm/src/model/Model.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pinia-orm/src/model/Model.ts b/packages/pinia-orm/src/model/Model.ts index 510050ab2..faa960487 100644 --- a/packages/pinia-orm/src/model/Model.ts +++ b/packages/pinia-orm/src/model/Model.ts @@ -745,7 +745,7 @@ export class Model { this[key] = this[key] ?? keyValue } - operation === 'set' && (this.$self().original[this[this.$getKey(this, true) as string]] = this.$getAttributes()) + operation === 'set' && (this.$self().original[this.$getKey(this, true) as string] = this.$getAttributes()) modelConfig.withMeta && operation === 'set' && this.$fillMeta(options.action) @@ -930,7 +930,7 @@ export class Model { * Get the original values of the model instance */ $getOriginal(): Element { - return this.$self().original[this[this.$getKey(this, true) as string]] + return this.$self().original[this.$getKey(this, true) as string] } /** From 0b962ed8fa90c6f3e6754f209799f7361f5ede77 Mon Sep 17 00:00:00 2001 From: Gregor Becker Date: Wed, 30 Aug 2023 22:24:27 +0200 Subject: [PATCH 4/4] refactor(pinia-orm-1569): add clearing --- packages/pinia-orm/src/model/Model.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/pinia-orm/src/model/Model.ts b/packages/pinia-orm/src/model/Model.ts index faa960487..3cde08763 100644 --- a/packages/pinia-orm/src/model/Model.ts +++ b/packages/pinia-orm/src/model/Model.ts @@ -259,6 +259,7 @@ export class Model { */ static clearBootedModels(): void { this.booted = {} + this.original = {} this.schemas = {} this.fieldMutators = {} this.fieldCasts = {}