diff --git a/CHANGELOG.md b/CHANGELOG.md index d30e42740..c3d474171 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## v1.0.0-120 + + +### 🩹 Fixes + +- Fix invalidate ([4e2514c](https://github.com/undb-io/undb/commit/4e2514c)) + +### ❤️ Contributors + +- Nichenqin ([@nichenqin](http://github.com/nichenqin)) + ## v1.0.0-119 diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 4d613746b..f7bb4dd9a 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -21,7 +21,7 @@ "@svelte-put/shortcut": "^3.1.1", "@sveltejs/adapter-static": "^3.0.6", "@sveltejs/kit": "^2.8.0", - "@sveltejs/vite-plugin-svelte": "^3.1.2", + "@sveltejs/vite-plugin-svelte": "^4.0.0", "@tailwindcss/typography": "^0.5.15", "@tanstack/eslint-plugin-query": "^5.60.1", "@types/eslint": "^8.56.12", @@ -60,7 +60,7 @@ "rollup-plugin-visualizer": "^5.12.0", "safe-flat": "^2.1.0", "sortablejs": "^1.15.3", - "svelte": "^4.2.19", + "svelte": "^5.1.16", "svelte-check": "^4.0.7", "svelte-headless-table": "^0.18.3", "svelte-inview": "^4.0.4", diff --git a/apps/frontend/src/lib/components/blocks/create-table/create-table.svelte b/apps/frontend/src/lib/components/blocks/create-table/create-table.svelte index 0e22f5afe..afffd9af5 100644 --- a/apps/frontend/src/lib/components/blocks/create-table/create-table.svelte +++ b/apps/frontend/src/lib/components/blocks/create-table/create-table.svelte @@ -63,12 +63,12 @@ console.log(event.form.errors) return } - const baseId = $currentBase?.id ?? $baseId - if (!baseId) return + const _baseId = $currentBase?.id ?? $baseId + if (!_baseId) return await $mutation.mutateAsync({ ...event.form.data, - baseId: baseId, + baseId: _baseId, }) }, }, diff --git a/apps/frontend/src/lib/components/blocks/dashboard/create-dialog.svelte b/apps/frontend/src/lib/components/blocks/dashboard/create-dialog.svelte index 3d624e099..b65f4a0a9 100644 --- a/apps/frontend/src/lib/components/blocks/dashboard/create-dialog.svelte +++ b/apps/frontend/src/lib/components/blocks/dashboard/create-dialog.svelte @@ -34,11 +34,11 @@ }, onUpdate: ({ form: f }) => { if (f.valid) { - const baseId = $currentBase?.id ?? $baseId - if (!baseId) return + const _baseId = $currentBase?.id ?? $baseId + if (!_baseId) return $createDashboard.mutate({ ...f.data, - baseId, + baseId: _baseId, }) } else { toast.error("Please fix the errors in the form.") diff --git a/apps/frontend/src/lib/components/blocks/field-control/field-control.svelte b/apps/frontend/src/lib/components/blocks/field-control/field-control.svelte index 54283670b..4c8147a61 100644 --- a/apps/frontend/src/lib/components/blocks/field-control/field-control.svelte +++ b/apps/frontend/src/lib/components/blocks/field-control/field-control.svelte @@ -2,7 +2,7 @@ import type { NoneSystemField, NoneSystemFieldType, RecordDO } from "@undb/table" import StringControl from "./string-control.svelte" import NumberControl from "./number-control.svelte" - import type { ComponentType } from "svelte" + import type { Component } from "svelte" import DateControl from "./date-control.svelte" import UserControl from "./user-control.svelte" import ReferenceControl from "./reference-control.svelte" @@ -22,6 +22,7 @@ import PercentageControl from "./percentage-control.svelte" import DateRangeControl from "./date-range-control.svelte" import { type Writable } from "svelte/store" + import { onMount } from "svelte" export let readonly = false export let field: NoneSystemField @@ -39,9 +40,13 @@ } } - $: field, handleValue() + onMount(() => { + if (field) { + handleValue() + } + }) - const map: Record = { + const map: Record = { string: StringControl, currency: CurrencyControl, longText: LongTextControl, diff --git a/apps/frontend/src/lib/components/blocks/forms/form-display.svelte b/apps/frontend/src/lib/components/blocks/forms/form-display.svelte index d2100a369..a0e78ca5b 100644 --- a/apps/frontend/src/lib/components/blocks/forms/form-display.svelte +++ b/apps/frontend/src/lib/components/blocks/forms/form-display.svelte @@ -20,6 +20,7 @@ import { isNumber } from "radash" import { getFormBgColor } from "./form-bg-color" import { invalidate } from "$app/navigation" + import { derived } from "svelte/store" export let readonly = false @@ -27,8 +28,6 @@ const table = getTable() - $: schema = $table.schema.fieldMapById - export let form: FormVO $: formFields = form.visibleFields @@ -51,7 +50,7 @@ let isEditingFormName = false - let el: HTMLDivElement + let el: HTMLDivElement | undefined $: if ($selectedFieldId) { el?.querySelector(`[data-field-id="${$selectedFieldId}"]`)?.scrollIntoView({ behavior: "smooth" }) } @@ -128,9 +127,11 @@ } }} > - {#each formFields as formField (formField.fieldId)} - {@const field = schema.get(formField.fieldId)} + {#each formFields as _, i (formFields[i].fieldId)} + {@const formField = formFields[i]} + {@const field = $table.schema.getFieldByIdOrName(formField.fieldId).into(undefined)} {#if field} + {@const required = formField.getRequired(field)} {@const isSelected = $selectedFieldId === field.id.value} diff --git a/apps/frontend/src/lib/components/blocks/forms/form-field-options.svelte b/apps/frontend/src/lib/components/blocks/forms/form-field-options.svelte index 2f9fad322..0ab7f1313 100644 --- a/apps/frontend/src/lib/components/blocks/forms/form-field-options.svelte +++ b/apps/frontend/src/lib/components/blocks/forms/form-field-options.svelte @@ -29,6 +29,8 @@ export let form: FormVO export let field: Field + $: required = formField.getRequired(field) + const setFormMutation = createMutation({ mutationFn: trpc.table.form.set.mutate, mutationKey: ["table", $table.id.value, "setForm"], @@ -57,7 +59,7 @@ } $: previousFields = form.getPreviousFields(field.id.value) ?? [] - $: disabled = formField.getRequired(field) && !formField.defaultValue + $: disabled = required && !formField.defaultValue
{ + onCheckedChange={async (checked) => { formField.setRequired(field, checked) + await tick() form = form setForm() @@ -116,6 +119,7 @@ disabled={disabled || field.type === "button"} onCheckedChange={async () => { await tick() + form = form setForm() }} /> diff --git a/apps/frontend/src/lib/components/blocks/forms/form-fields-editor.svelte b/apps/frontend/src/lib/components/blocks/forms/form-fields-editor.svelte index f101da73a..cf6729d83 100644 --- a/apps/frontend/src/lib/components/blocks/forms/form-fields-editor.svelte +++ b/apps/frontend/src/lib/components/blocks/forms/form-fields-editor.svelte @@ -43,12 +43,12 @@ }) } - function swapFormFields(oldIndex: number, newIndex: number) { + async function swapFormFields(oldIndex: number, newIndex: number) { const fields = [...form.fields.props] const [removed] = fields.splice(oldIndex, 1) fields.splice(newIndex, 0, removed) form.fields = new FormFieldsVO(fields) - setForm() + await setForm() } let selectAll = form.getAllSelected() @@ -118,7 +118,8 @@ } }} > - {#each filteredFields as formField (formField.fieldId)} + {#each filteredFields as _, i (filteredFields[i].fieldId)} + {@const formField = filteredFields[i]} {@const field = schema.get(formField.fieldId)} {#if field} {@const required = formField.getRequired(field)} @@ -155,8 +156,9 @@ { + onCheckedChange={async (checked) => { formField.setRequired(field, checked) + await tick() setForm() }} disabled={field.required} @@ -178,6 +180,7 @@ } await tick() + form = form setForm() }} /> diff --git a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/button-cell.svelte b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/button-cell.svelte index 8efd59902..1740f3a3c 100644 --- a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/button-cell.svelte +++ b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/button-cell.svelte @@ -27,7 +27,7 @@ mutationFn: trpc.record.trigger.mutate, async onSuccess(data, variables, context) { gridViewStore.exitEditing() - await recordsStore.invalidateRecord($table, recordId) + await recordsStore?.invalidateRecord($table, recordId) }, onError(error: Error) { toast.error(error.message) diff --git a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/reference-cell.svelte b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/reference-cell.svelte index 41793e661..46ace1011 100644 --- a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/reference-cell.svelte +++ b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/reference-cell.svelte @@ -35,7 +35,7 @@ function onSuccess(id?: string) { if (id) { - recordStore.invalidateRecord($table, id, $viewId) + recordStore?.invalidateRecord($table, id, $viewId) } } diff --git a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/user-cell.svelte b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/user-cell.svelte index 5b237f423..42019ba10 100644 --- a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/user-cell.svelte +++ b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/user-cell.svelte @@ -36,7 +36,7 @@ async onSuccess(data, variables) { const value = variables.values[field.id.value] if (isUserFieldMacro(value)) { - await store.invalidateRecord($table, recordId) + await store?.invalidateRecord($table, recordId) } }, onError(error: Error) { diff --git a/apps/frontend/src/lib/components/blocks/grid-view/grid-view-data-table.svelte b/apps/frontend/src/lib/components/blocks/grid-view/grid-view-data-table.svelte index 232f59714..ea3c7eeb1 100644 --- a/apps/frontend/src/lib/components/blocks/grid-view/grid-view-data-table.svelte +++ b/apps/frontend/src/lib/components/blocks/grid-view/grid-view-data-table.svelte @@ -338,7 +338,7 @@ {/each} - + {#each $visibleColumns as column} {@const width = $columnWidths[column.id]} @@ -352,7 +352,7 @@ {/each} - + {:else if !isLoading} {/if} diff --git a/apps/frontend/src/lib/components/blocks/import-table/import-table.svelte b/apps/frontend/src/lib/components/blocks/import-table/import-table.svelte index ecd127931..fb9fb4ecc 100644 --- a/apps/frontend/src/lib/components/blocks/import-table/import-table.svelte +++ b/apps/frontend/src/lib/components/blocks/import-table/import-table.svelte @@ -183,13 +183,13 @@ if (step === 1) { if (!file || !data) return - const baseId = $currentBase?.id ?? $baseId - if (!baseId) return + const _baseId = $currentBase?.id ?? $baseId + if (!_baseId) return $createTable.mutate({ id: tableId, name: tableName!, - baseId, + baseId: _baseId, schema: filteredSchema, }) diff --git a/apps/frontend/src/lib/components/blocks/list-view/list-view-list.svelte b/apps/frontend/src/lib/components/blocks/list-view/list-view-list.svelte index 473a3d328..679c5801a 100644 --- a/apps/frontend/src/lib/components/blocks/list-view/list-view-list.svelte +++ b/apps/frontend/src/lib/components/blocks/list-view/list-view-list.svelte @@ -5,6 +5,7 @@ import { getRecordsStore } from "$lib/store/records.store" import FieldValue from "../field-value/field-value.svelte" import { Maximize2Icon } from "lucide-svelte" + import { cn } from "$lib/utils" const table = getTable() export let viewId: Readable @@ -43,7 +44,7 @@ - {#each $fields as field} + {#each $fields as field, i} diff --git a/apps/frontend/src/lib/components/blocks/table-header/table-header.svelte b/apps/frontend/src/lib/components/blocks/table-header/table-header.svelte index 36d57fd92..e4ca8dcfb 100644 --- a/apps/frontend/src/lib/components/blocks/table-header/table-header.svelte +++ b/apps/frontend/src/lib/components/blocks/table-header/table-header.svelte @@ -267,10 +267,12 @@ return } - tab.set(value === "data" ? null : (value ?? null)) if (value === "developer" && !$developerTab) { $developerTab = "openapi" + return } + + tab.set(value === "data" ? null : (value ?? null)) }} class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 transform" > diff --git a/apps/frontend/src/routes/(authed)/(space)/account/profile/+page.svelte b/apps/frontend/src/routes/(authed)/(space)/account/profile/+page.svelte index da9072ced..2b2d6f46d 100644 --- a/apps/frontend/src/routes/(authed)/(space)/account/profile/+page.svelte +++ b/apps/frontend/src/routes/(authed)/(space)/account/profile/+page.svelte @@ -9,6 +9,7 @@ import type { PageData } from "./$types" import * as Form from "$lib/components/ui/form/index.js" import Label from "$lib/components/ui/label/label.svelte" + import { toast } from "svelte-sonner" export let data: PageData @@ -26,6 +27,12 @@ validators: zodClient(updateaccountCommand), resetForm: false, invalidateAll: false, + onSubmit(input) { + validateForm({ update: true }) + }, + onChange(event) { + validateForm({ update: true }) + }, onUpdate(event) { if (!event.form.valid) return @@ -33,11 +40,14 @@ }, }, ) - const { enhance, form: formData } = form + const { enhance, form: formData, validateForm, allErrors } = form const updateAccountMutation = createMutation({ mutationFn: trpc.user.updateAccount.mutate, mutationKey: ["updateAccount"], + onSuccess() { + toast.success("Account updated") + }, }) @@ -59,7 +69,7 @@ - Save + 0}>Save diff --git a/bun.lockb b/bun.lockb index 1406897bb..78cc6c3cb 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index d73bc04c7..669d421e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "undb", - "version": "1.0.0-119", + "version": "1.0.0-120", "private": true, "scripts": { "build": "NODE_ENV=production bun --bun turbo build", diff --git a/packages/commands/src/update-account.command.ts b/packages/commands/src/update-account.command.ts index b69e297b0..379b97e42 100644 --- a/packages/commands/src/update-account.command.ts +++ b/packages/commands/src/update-account.command.ts @@ -3,7 +3,7 @@ import { z } from "@undb/zod" export const updateaccountCommand = z.object({ userId: z.string(), - username: z.string(), + username: z.string().min(1), }) export type IUpdateAccountCommand = z.infer diff --git a/packages/table/src/modules/forms/form/form-field.vo.ts b/packages/table/src/modules/forms/form/form-field.vo.ts index 853e9aaf0..368db659c 100644 --- a/packages/table/src/modules/forms/form/form-field.vo.ts +++ b/packages/table/src/modules/forms/form/form-field.vo.ts @@ -65,9 +65,9 @@ export class FormFieldVO extends ValueObject { public setRequired(field: Field, value: boolean) { if (field.required) { - this.props.required = true + this.required = true } else { - this.props.required = value + this.required = value } }