From 23896e6d7f13ed382d20c9a887257f713de078bd Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Thu, 17 Oct 2024 02:38:28 +0200 Subject: [PATCH] feat: refactor form system and setup validation --- package.json | 1 + .../components/fields/belongs_to/form.vue | 35 +++++---- .../components/fields/belongs_to/index.vue | 5 +- resources/components/fields/boolean/form.vue | 23 +++--- .../components/fields/has_many/detail.vue | 38 ++++++++++ resources/components/fields/has_many/form.vue | 17 ++--- resources/components/fields/has_many/index.ts | 2 + .../components/fields/has_many/index.vue | 2 +- .../components/fields/multi-select/form.vue | 23 +++--- resources/components/fields/password/form.vue | 22 +++--- resources/components/fields/select/form.vue | 24 +++--- resources/components/fields/text/form.vue | 24 +++--- resources/components/form/form-message.vue | 9 +++ resources/components/form/inject-field.vue | 15 ++++ resources/components/resource-detail.vue | 20 +++-- resources/components/resource-form.vue | 75 ++++++------------ resources/components/resource-peek.vue | 19 +++-- resources/components/resource-table.vue | 14 ++-- .../components/resource/actions-menu.vue | 7 +- .../resource/{ => buttons}/create-button.vue | 11 ++- .../resource/{ => buttons}/delete-button.vue | 8 +- .../resource/{ => buttons}/detail-button.vue | 11 ++- .../resource/{ => buttons}/edit-button.vue | 11 ++- .../components/resource/provide-resource.vue | 14 ++++ .../components/resource/views/create.vue | 40 ++++++++++ .../components/resource/views/detail.vue | 35 +++++++++ resources/components/resource/views/edit.vue | 59 ++++++++++++++ resources/components/resource/views/list.vue | 20 +++++ resources/components/sidebar.vue | 4 +- resources/composables/field.ts | 25 ++++++ resources/composables/form.ts | 27 +++++++ resources/composables/resource.ts | 58 +++++++++++--- resources/composables/resources.ts | 7 +- resources/layouts/app.vue | 7 +- resources/pages/home.vue | 8 -- resources/pages/resources/create.vue | 57 ++------------ resources/pages/resources/detail.vue | 51 +++---------- resources/pages/resources/edit.vue | 76 +++---------------- resources/pages/resources/index.vue | 25 ++---- resources/services/resource_service.ts | 33 +++++--- resources/types.ts | 7 ++ resources/utils/errors.ts | 13 ++++ src/fields/boolean.ts | 2 + src/fields/email.ts | 5 +- src/fields/field.ts | 24 +++++- src/fields/has_many.ts | 4 + src/fields/multi_select.ts | 1 + src/fields/text.ts | 7 +- src/plugins/inertia.ts | 7 +- src/plugins/vite.ts | 1 + src/resources/model_resource.ts | 2 +- src/routes/handlers/api/create.ts | 3 +- src/routes/handlers/api/update.ts | 7 +- src/routes/handlers/detail.ts | 2 +- src/routes/handlers/edit.ts | 8 +- src/types.ts | 2 + tests/frontend/fields/boolean.test.ts | 2 +- tests/frontend/fields/email.test.ts | 27 ++++--- tests/frontend/fields/id.test.ts | 10 ++- tests/frontend/fields/text.test.ts | 2 +- 60 files changed, 649 insertions(+), 449 deletions(-) create mode 100644 resources/components/fields/has_many/detail.vue create mode 100644 resources/components/form/form-message.vue create mode 100644 resources/components/form/inject-field.vue rename resources/components/resource/{ => buttons}/create-button.vue (55%) rename resources/components/resource/{ => buttons}/delete-button.vue (76%) rename resources/components/resource/{ => buttons}/detail-button.vue (51%) rename resources/components/resource/{ => buttons}/edit-button.vue (51%) create mode 100644 resources/components/resource/provide-resource.vue create mode 100644 resources/components/resource/views/create.vue create mode 100644 resources/components/resource/views/detail.vue create mode 100644 resources/components/resource/views/edit.vue create mode 100644 resources/components/resource/views/list.vue create mode 100644 resources/composables/field.ts create mode 100644 resources/composables/form.ts create mode 100644 resources/types.ts create mode 100644 resources/utils/errors.ts diff --git a/package.json b/package.json index 9f87acc..43950db 100644 --- a/package.json +++ b/package.json @@ -128,6 +128,7 @@ "tailwindcss-primeui": "^0.3.4", "ts-morph": "^23.0.0", "unplugin-vue-components": "^0.27.4", + "vee-validate": "^4.13.2", "vue": "^3.5.10" } } diff --git a/resources/components/fields/belongs_to/form.vue b/resources/components/fields/belongs_to/form.vue index 7464f8a..1769cde 100644 --- a/resources/components/fields/belongs_to/form.vue +++ b/resources/components/fields/belongs_to/form.vue @@ -1,36 +1,45 @@ diff --git a/resources/components/fields/belongs_to/index.vue b/resources/components/fields/belongs_to/index.vue index 0a26aa0..ddba394 100644 --- a/resources/components/fields/belongs_to/index.vue +++ b/resources/components/fields/belongs_to/index.vue @@ -7,6 +7,7 @@ import { useResourceQuery } from '../../../composables/resource' import { injectResources } from '../../../composables/resources' import Popover from 'primevue/popover' import Button from 'primevue/button' +import { ResourceRecord } from '../../../types' defineOptions({ inheritAttrs: false, @@ -14,8 +15,8 @@ defineOptions({ const props = defineProps<{ field: InferSerializable + record: ResourceRecord value: any - record: any }>() const opened = ref(false) @@ -36,6 +37,6 @@ const label = relation[props.field.resource.titleKey] ?? props.value diff --git a/resources/components/fields/boolean/form.vue b/resources/components/fields/boolean/form.vue index d25736e..e9e9949 100644 --- a/resources/components/fields/boolean/form.vue +++ b/resources/components/fields/boolean/form.vue @@ -1,30 +1,27 @@ diff --git a/resources/components/fields/has_many/detail.vue b/resources/components/fields/has_many/detail.vue new file mode 100644 index 0000000..cf01abb --- /dev/null +++ b/resources/components/fields/has_many/detail.vue @@ -0,0 +1,38 @@ + + + diff --git a/resources/components/fields/has_many/form.vue b/resources/components/fields/has_many/form.vue index ae3e43e..19c8261 100644 --- a/resources/components/fields/has_many/form.vue +++ b/resources/components/fields/has_many/form.vue @@ -1,23 +1,18 @@ diff --git a/resources/components/fields/multi-select/form.vue b/resources/components/fields/multi-select/form.vue index b514601..e26b7af 100644 --- a/resources/components/fields/multi-select/form.vue +++ b/resources/components/fields/multi-select/form.vue @@ -1,35 +1,36 @@ diff --git a/resources/components/fields/password/form.vue b/resources/components/fields/password/form.vue index ee71b50..60cf15f 100644 --- a/resources/components/fields/password/form.vue +++ b/resources/components/fields/password/form.vue @@ -1,28 +1,26 @@ diff --git a/resources/components/fields/select/form.vue b/resources/components/fields/select/form.vue index be1687b..1598661 100644 --- a/resources/components/fields/select/form.vue +++ b/resources/components/fields/select/form.vue @@ -1,19 +1,16 @@ diff --git a/resources/components/form/form-message.vue b/resources/components/form/form-message.vue new file mode 100644 index 0000000..6514b16 --- /dev/null +++ b/resources/components/form/form-message.vue @@ -0,0 +1,9 @@ + + + diff --git a/resources/components/form/inject-field.vue b/resources/components/form/inject-field.vue new file mode 100644 index 0000000..a52ec74 --- /dev/null +++ b/resources/components/form/inject-field.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/components/resource-detail.vue b/resources/components/resource-detail.vue index a6b688e..0767167 100644 --- a/resources/components/resource-detail.vue +++ b/resources/components/resource-detail.vue @@ -1,11 +1,11 @@ @@ -25,8 +25,8 @@ defineProps<{ @@ -35,7 +35,13 @@ defineProps<{
diff --git a/resources/components/resource-form.vue b/resources/components/resource-form.vue index bfbf992..d46bd86 100644 --- a/resources/components/resource-form.vue +++ b/resources/components/resource-form.vue @@ -1,68 +1,35 @@