Skip to content

Commit 90e6f36

Browse files
committed
Add method to reload record
1 parent f467b70 commit 90e6f36

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

packages/api-client-core/src/AnyModelManager.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,11 @@ export interface AnyLegacyModelManager {
5959
* Any model manager, either public or internal
6060
*/
6161
export type AnyModelManager = AnyPublicModelManager | AnyPublicSingletonModelManager | AnyLegacyModelManager | InternalModelManager;
62+
63+
export function isPublicModelManager(manager: AnyModelManager): manager is AnyPublicModelManager {
64+
return "findOne" in manager;
65+
}
66+
67+
export function isPublicSingletonModelManager(manager: AnyModelManager): manager is AnyPublicSingletonModelManager {
68+
return "get" in manager;
69+
}

packages/api-client-core/src/GadgetRecord.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { klona as cloneDeep } from "klona";
22
import type { Jsonify } from "type-fest";
3-
import type { AnyModelManager } from "./AnyModelManager.js";
3+
import { isPublicModelManager, isPublicSingletonModelManager, type AnyModelManager } from "./AnyModelManager.js";
44
import { isEqual, toPrimitiveObject } from "./support.js";
55

66
export enum ChangeTracking {
@@ -212,6 +212,24 @@ export class GadgetRecord_<Shape extends RecordShape> {
212212
touch(): void {
213213
this[kTouched] = true;
214214
}
215+
216+
async reload() {
217+
const modelManager = this[kModelManager];
218+
219+
if (!modelManager) {
220+
throw new Error("Record can not be reloaded");
221+
}
222+
223+
if (isPublicModelManager(modelManager)) {
224+
return await modelManager.findOne(this.getField("id"));
225+
}
226+
227+
if (isPublicSingletonModelManager(modelManager)) {
228+
return await modelManager.get();
229+
}
230+
231+
throw new Error("Record can not be reloaded");
232+
}
215233
}
216234

217235
/**

0 commit comments

Comments
 (0)