Skip to content

Commit dd80d5e

Browse files
committed
fix: ⚡ Working
1 parent ac5b4f6 commit dd80d5e

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

packages/qwik/src/core/state/store.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,25 @@ export class ReadWriteProxyHandler implements ProxyHandler<TargetType> {
237237
: a;
238238
});
239239
}
240+
getOwnPropertyDescriptor(
241+
target: TargetType,
242+
prop: string | symbol
243+
): PropertyDescriptor | undefined {
244+
if (isArray(target) || typeof prop === 'symbol') {
245+
return Reflect.getOwnPropertyDescriptor(target, prop);
246+
}
247+
248+
const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
249+
250+
if (descriptor && !descriptor.configurable) {
251+
return descriptor;
252+
}
253+
254+
return {
255+
enumerable: true,
256+
configurable: true,
257+
};
258+
}
240259
}
241260

242261
const immutableValue = (value: any) => {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { component$, Resource, useResource$, useStore } from "@builder.io/qwik";
2+
3+
import { server$ } from "@builder.io/qwik-city";
4+
5+
export interface Hello {
6+
print: string;
7+
}
8+
9+
const hello = server$((hello: Hello) => {
10+
// Error: 'getOwnPropertyDescriptor' on proxy: trap returned descriptor for property 'print' that is incompatible with the existing property in the proxy target
11+
return helloBar(hello);
12+
});
13+
14+
const helloBar = server$(
15+
(hello: Hello): Promise<string> =>
16+
new Promise((res) => {
17+
setTimeout(() => {
18+
res(hello.print + " Bar");
19+
}, 200);
20+
}),
21+
);
22+
export default component$(() => {
23+
const helloStore = useStore<Hello>({ print: "hello" });
24+
const resource = useResource$(({ track }) => {
25+
track(() => helloStore.print);
26+
27+
return hello(helloStore);
28+
});
29+
30+
return (
31+
<>
32+
<Resource
33+
value={resource}
34+
onPending={() => <div>Loading...</div>}
35+
onRejected={(error) => <div>Error: {error.message}</div>}
36+
onResolved={(data) => <div>Data: {data}</div>}
37+
/>
38+
39+
<button
40+
onClick$={() => {
41+
helloStore.print = "Foo";
42+
}}
43+
>
44+
Reset
45+
</button>
46+
</>
47+
);
48+
});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { expect, test } from "@playwright/test";
2+
3+
test.describe("Resource", () => {
4+
test("should handle the resource correctly", async ({ page }) => {
5+
await page.goto("/qwikcity-test/issue7254/");
6+
7+
await page.getByText("Data: hello Bar");
8+
9+
await page.getByRole("button", { name: "Reset" }).click();
10+
11+
await expect(page.getByText("Data: Foo Bar")).toBeVisible();
12+
});
13+
});

0 commit comments

Comments
 (0)