|
10 | 10 | ModelRelationship, |
11 | 11 | ) |
12 | 12 | from fastapi_forge.enums import FieldDataTypeEnum, OnDeleteEnum |
| 13 | +from fastapi_forge.frontend import validation |
13 | 14 | from fastapi_forge.frontend.constants import ( |
14 | 15 | DEFAULT_AUTH_USER_FIELDS, |
15 | 16 | FIELD_COLUMNS, |
|
24 | 25 | from fastapi_forge.frontend.notifications import ( |
25 | 26 | notify_field_exists, |
26 | 27 | notify_validation_error, |
| 28 | + notify_value_error, |
27 | 29 | ) |
28 | 30 | from fastapi_forge.frontend.state import state |
29 | 31 | from fastapi_forge.jinja import render_model_to_model |
@@ -309,21 +311,32 @@ def _handle_modal_add_field( |
309 | 311 | self._add_field(**kwargs) |
310 | 312 | self.add_field_modal.close() |
311 | 313 | except ValueError as exc: |
312 | | - ui.notify(str(exc), type="negative") |
| 314 | + notify_value_error(exc) |
313 | 315 |
|
314 | 316 | def _handle_modal_add_relation( |
315 | 317 | self, |
316 | 318 | field_name: str, |
317 | 319 | target_model: str, |
| 320 | + on_delete: OnDeleteEnum, |
318 | 321 | nullable: bool, |
319 | 322 | index: bool, |
320 | 323 | unique: bool, |
321 | | - on_delete: OnDeleteEnum, |
322 | 324 | back_populates: str | None = None, |
323 | 325 | ) -> None: |
324 | 326 | if not state.selected_model: |
325 | 327 | return |
326 | 328 |
|
| 329 | + try: |
| 330 | + validation.raise_if_missing_fields( |
| 331 | + [ |
| 332 | + ("Field Name", field_name), |
| 333 | + ("Target Model", target_model), |
| 334 | + ("On Delete", on_delete), |
| 335 | + ] |
| 336 | + ) |
| 337 | + except ValueError as exc: |
| 338 | + raise exc |
| 339 | + |
327 | 340 | target_model_instance = next( |
328 | 341 | (model for model in state.models if model.name == target_model), |
329 | 342 | None, |
@@ -408,6 +421,13 @@ def _add_field( |
408 | 421 | if state.selected_model is None: |
409 | 422 | return |
410 | 423 |
|
| 424 | + try: |
| 425 | + validation.raise_if_missing_fields( |
| 426 | + [("Field Name", name), ("Field Type", type)] |
| 427 | + ) |
| 428 | + except ValueError as exc: |
| 429 | + raise exc |
| 430 | + |
411 | 431 | if self._field_name_exists(name): |
412 | 432 | notify_field_exists(name, state.selected_model.name) |
413 | 433 | return |
@@ -519,6 +539,13 @@ def _handle_update_field( |
519 | 539 | if name in exclude_set: |
520 | 540 | return |
521 | 541 |
|
| 542 | + try: |
| 543 | + validation.raise_if_missing_fields( |
| 544 | + [("Field Name", name), ("Field Type", type)] |
| 545 | + ) |
| 546 | + except ValueError as exc: |
| 547 | + raise exc |
| 548 | + |
522 | 549 | if state.selected_field.name != name and self._field_name_exists(name): |
523 | 550 | notify_field_exists(name, state.selected_model.name) |
524 | 551 | return |
@@ -561,6 +588,17 @@ def _handle_update_relation( |
561 | 588 | if not state.selected_model or not state.selected_relation: |
562 | 589 | return |
563 | 590 |
|
| 591 | + try: |
| 592 | + validation.raise_if_missing_fields( |
| 593 | + [ |
| 594 | + ("Field Name", field_name), |
| 595 | + ("Target Model", target_model), |
| 596 | + ("On Delete", on_delete), |
| 597 | + ] |
| 598 | + ) |
| 599 | + except ValueError as exc: |
| 600 | + raise exc |
| 601 | + |
564 | 602 | target_model_instance = next( |
565 | 603 | (model for model in state.models if model.name == target_model), |
566 | 604 | None, |
|
0 commit comments