Skip to content

Commit e141ce5

Browse files
Merge pull request #63 from objectstack-ai/chore/objectstack-7.5-upgrade
chore(objectstack): upgrade to 7.5.0 + fix date-field save regression
2 parents d786ff3 + fcb2839 commit e141ce5

6 files changed

Lines changed: 727 additions & 608 deletions

File tree

apps/server/objectstack.config.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { defineStack } from '@objectstack/spec';
1+
import { defineStack, type ObjectStackDefinition } from '@objectstack/spec';
22
import * as objects from './src/objects';
33

4-
export default defineStack({
4+
const stack: ObjectStackDefinition = defineStack({
55
manifest: {
66
id: 'com.example.server',
77
namespace: 'server',
@@ -13,3 +13,5 @@ export default defineStack({
1313

1414
objects: Object.values(objects),
1515
});
16+
17+
export default stack;

apps/server/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
"typecheck": "tsc --noEmit"
1212
},
1313
"dependencies": {
14-
"@objectstack/spec": "^7.3.0",
15-
"@objectstack/runtime": "^7.3.0",
16-
"@objectstack/objectql": "^7.3.0",
17-
"@objectstack/driver-memory": "^7.3.0"
14+
"@objectstack/spec": "^7.5.0",
15+
"@objectstack/runtime": "^7.5.0",
16+
"@objectstack/objectql": "^7.5.0",
17+
"@objectstack/driver-memory": "^7.5.0"
1818
},
1919
"devDependencies": {
20-
"@objectstack/cli": "^7.3.0",
20+
"@objectstack/cli": "^7.5.0",
2121
"typescript": "^5.3.0"
2222
}
2323
}

apps/server/src/objects/server_item.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import * as Data from '@objectstack/spec/data';
22

3-
const serverItem: Data.Object = {
3+
const serverItem: Data.ServiceObjectInput = {
44
name: 'server_item',
55
label: 'Server Item',
6-
ownership: 'own',
76
fields: {
87
name: {
98
type: 'text',

components/renderers/FormViewRenderer.tsx

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,37 @@ function isEntryField(f: FieldDefinition): boolean {
2929
return true;
3030
}
3131

32+
/**
33+
* Coerce form values into the wire format the data API expects before submit.
34+
*
35+
* `date`/`datetime` fields flow through the form (and the DatePicker) as
36+
* epoch-ms numbers, but the ObjectStack data API requires ISO-8601 strings and
37+
* rejects raw epochs with a `invalid_date` validation error. Convert any
38+
* number / `Date` / numeric-string value on a date field to ISO-8601; leave
39+
* `time` ("HH:MM"), already-ISO strings, and empty values untouched.
40+
*/
41+
function normalizeForSubmit(
42+
values: Record<string, unknown>,
43+
fields: FieldDefinition[],
44+
): Record<string, unknown> {
45+
const dateFields = new Set(
46+
fields.filter((f) => f.type === "date" || f.type === "datetime").map((f) => f.name),
47+
);
48+
if (dateFields.size === 0) return values;
49+
50+
const out: Record<string, unknown> = { ...values };
51+
for (const name of dateFields) {
52+
const v = out[name];
53+
if (v == null || v === "") continue;
54+
let d: Date | null = null;
55+
if (v instanceof Date) d = v;
56+
else if (typeof v === "number") d = new Date(v);
57+
else if (typeof v === "string" && /^\d+$/.test(v.trim())) d = new Date(Number(v.trim()));
58+
if (d && !isNaN(d.getTime())) out[name] = d.toISOString();
59+
}
60+
return out;
61+
}
62+
3263
/* ------------------------------------------------------------------ */
3364
/* Props */
3465
/* ------------------------------------------------------------------ */
@@ -227,7 +258,7 @@ export function FormViewRenderer({
227258
return;
228259
}
229260

230-
onSubmit?.(values);
261+
onSubmit?.(normalizeForSubmit(values, fields));
231262
}, [sections, fields, values, onSubmit]);
232263

233264
/* ---- Render ---- */

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
},
2222
"dependencies": {
2323
"@better-auth/expo": "^1.4.18",
24-
"@objectstack/client": "^7.3.0",
25-
"@objectstack/client-react": "^7.3.0",
26-
"@objectstack/spec": "^7.3.0",
24+
"@objectstack/client": "^7.5.0",
25+
"@objectstack/client-react": "^7.5.0",
26+
"@objectstack/spec": "^7.5.0",
2727
"@sentry/react-native": "^7.12.0",
2828
"@shopify/flash-list": "^2.2.2",
2929
"@tanstack/react-query": "^5.90.20",
@@ -76,12 +76,12 @@
7676
"@babel/core": "^7.29.0",
7777
"@changesets/changelog-github": "^0.5.2",
7878
"@changesets/cli": "^2.29.8",
79-
"@objectstack/cli": "7.3.0",
80-
"@objectstack/core": "^7.3.0",
81-
"@objectstack/driver-memory": "^7.3.0",
82-
"@objectstack/objectql": "^7.3.0",
83-
"@objectstack/plugin-auth": "^7.3.0",
84-
"@objectstack/plugin-hono-server": "^7.3.0",
79+
"@objectstack/cli": "7.5.0",
80+
"@objectstack/core": "^7.5.0",
81+
"@objectstack/driver-memory": "^7.5.0",
82+
"@objectstack/objectql": "^7.5.0",
83+
"@objectstack/plugin-auth": "^7.5.0",
84+
"@objectstack/plugin-hono-server": "^7.5.0",
8585
"@testing-library/jest-native": "^5.4.3",
8686
"@testing-library/react-native": "^12.9.0",
8787
"@types/jest": "^29.5.14",

0 commit comments

Comments
 (0)