fix(jazz-tools/tools): explicit loadAs in CoList.upsertUnique to use it without loaded context

This commit is contained in:
Matteo Manchi
2025-08-21 16:31:01 +02:00
parent fd186f769e
commit bb9d837236
3 changed files with 34 additions and 1 deletions

View File

@@ -0,0 +1,5 @@
---
"jazz-tools": patch
---
Explicit loadAs in CoList.upsertUnique to use it without loaded context

View File

@@ -621,7 +621,11 @@ export class CoList<out Item = any> extends Array<Item> implements CoValue {
resolve?: RefsToResolveStrict<L, R>;
},
): Promise<Resolved<L, R> | null> {
let listId = CoList._findUnique(options.unique, options.owner.id);
const listId = CoList._findUnique(
options.unique,
options.owner.id,
options.owner._loadedAs,
);
let list: Resolved<L, R> | null = await loadCoValueWithoutMe(this, listId, {
...options,
loadAs: options.owner._loadedAs,

View File

@@ -3,6 +3,7 @@ import { assert, beforeEach, describe, expect, test, vi } from "vitest";
import { Account, Group, subscribeToCoValue, z } from "../index.js";
import {
Loaded,
activeAccountContext,
co,
coValueClassFromCoValueClassOrSchema,
} from "../internal.js";
@@ -906,6 +907,29 @@ describe("CoList unique methods", () => {
expect(result?.[2]).toBe("item3");
});
test("upsertUnique without an active account", async () => {
const account = activeAccountContext.get();
activeAccountContext.set(null);
const ItemList = co.list(z.string());
const sourceData = ["item1", "item2", "item3"];
const result = await ItemList.upsertUnique({
value: sourceData,
unique: "new-list",
owner: account,
});
expect(result).not.toBeNull();
expect(result?.length).toBe(3);
expect(result?.[0]).toBe("item1");
expect(result?.[1]).toBe("item2");
expect(result?.[2]).toBe("item3");
expect(result?._owner).toEqual(account);
});
test("upsertUnique updates existing list", async () => {
const ItemList = co.list(z.string());
const group = Group.create();