Skip to content

Commit

Permalink
Added getState
Browse files Browse the repository at this point in the history
  • Loading branch information
valkjsaaa committed Jul 27, 2023
1 parent b02929b commit f8ca83c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 21 deletions.
57 changes: 37 additions & 20 deletions lib/decorators/decorators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,19 +272,22 @@ export function GenieClass(comment: string) {
path: (string | number)[]
): HelperClassGetterSetter {
return [
() => genieDispatch(()=>getJsonByPath(sharedState[target.name][obj[keyField]], path)),
() => getJsonByPath(sharedState["OBJECT"][target.name][obj[keyField]], path),
(value) => {
genieDispatch(() => {
setSharedState({
...sharedState,
[target.name]: {
...sharedState[target.name],
[obj[keyField]]: setJsonByPath(
sharedState[target.name][obj[keyField]],
path,
value
),
},
["OBJECT"]: {
...sharedState["OBJECT"],
[target.name]: {
...sharedState["OBJECT"][target.name],
[obj[keyField]]: setJsonByPath(
sharedState["OBJECT"][target.name][obj[keyField]],
path,
value
),
},
}
});
});
},
Expand Down Expand Up @@ -319,9 +322,9 @@ export function GenieClass(comment: string) {
// save data to store
genieDispatch(() => {
let objectState = {};
if (sharedState[target.name]) {
if (sharedState["OBJECT"][target.name]) {
objectState = {
...sharedState[target.name],
...sharedState["OBJECT"][target.name],
};
}
// overwrite existing object
Expand All @@ -338,7 +341,10 @@ export function GenieClass(comment: string) {
});
setSharedState({
...sharedState,
[target.name]: objectState,
["OBJECT"]: {
...sharedState["OBJECT"],
[target.name]: objectState,
}
});
});
// replace fields with getters and setters
Expand All @@ -348,20 +354,23 @@ export function GenieClass(comment: string) {
}
Object.defineProperty(obj, field, {
get: function () {
let value = sharedState[target.name][obj[keyField]][field];
let value = sharedState["OBJECT"][target.name][obj[keyField]][field];
return deserializeField(generateGetterSetter)(value, [field]);
},
set: function (value) {
genieDispatch(() => {
setSharedState({
...sharedState,
[target.name]: {
...sharedState[target.name],
[obj[keyField]]: {
...sharedState[target.name][obj[keyField]],
[field]: serializeField(generateGetterSetter)(value, [
field,
]),
["OBJECT"]: {
...sharedState["OBJECT"],
[target.name]: {
...sharedState["OBJECT"][target.name],
[obj[keyField]]: {
...sharedState["OBJECT"][target.name][obj[keyField]],
[field]: serializeField(generateGetterSetter)(value, [
field,
]),
},
},
},
});
Expand All @@ -373,6 +382,14 @@ export function GenieClass(comment: string) {
objects[target.name] = {};
}
objects[target.name][obj[keyField]] = obj;
obj.__getState = function () {
return genieDispatch(() => {
return {
"object": sharedState["OBJECT"][target.name][obj[keyField]],
"class": sharedState["CLASS"][target.name]
}
});
}
return obj;
};

Expand Down
2 changes: 1 addition & 1 deletion lib/decorators/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export function setSharedState(state: {}) {
}

export function storeReducer(
state: {} = {},
state: {} = {"CLASS": {}, "OBJECT": {}},
action: { type: string; payload: any }
) {
if (action.type === "genieAction") {
Expand Down
4 changes: 4 additions & 0 deletions lib/dsl-descriptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ export class GenieObject {
static Examples: ExampleParse[] = [];

static ClassDescriptor: ClassDescriptor<GenieObject>;

__getState(): {} {
return {};
}
}

/**
Expand Down

0 comments on commit f8ca83c

Please sign in to comment.