diff --git a/.changeset/little-zebras-boil.md b/.changeset/little-zebras-boil.md
new file mode 100644
index 000000000..a1e4b49fe
--- /dev/null
+++ b/.changeset/little-zebras-boil.md
@@ -0,0 +1,6 @@
+---
+'@halfdomelabs/project-builder-web': patch
+'@halfdomelabs/ui-components': patch
+---
+
+Fix model UI fields alignment
diff --git a/packages/project-builder-web/src/index.tsx b/packages/project-builder-web/src/index.tsx
index ee7d0b928..5d62bb1f5 100644
--- a/packages/project-builder-web/src/index.tsx
+++ b/packages/project-builder-web/src/index.tsx
@@ -3,7 +3,7 @@ import * as ReactDOM from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import './index.css';
-import { router } from './pages';
+import { router } from './pages/_routes';
const rootElement = document.querySelector('#root');
if (!rootElement) throw new Error('Failed to find root element');
diff --git a/packages/project-builder-web/src/pages/index.tsx b/packages/project-builder-web/src/pages/_routes.tsx
similarity index 97%
rename from packages/project-builder-web/src/pages/index.tsx
rename to packages/project-builder-web/src/pages/_routes.tsx
index 2a0eed084..76e9f0400 100644
--- a/packages/project-builder-web/src/pages/index.tsx
+++ b/packages/project-builder-web/src/pages/_routes.tsx
@@ -5,7 +5,7 @@ import { AppLayout } from '@src/app/AppLayout/AppLayout';
import { createRouteCrumb } from '@src/types/routes';
import { AppsRoutes } from './apps';
-import { DataRoutes } from './data';
+import { DataRoutes } from './data/_routes';
import { FeatureRoutes } from './features';
import HomePage from './home/home.page';
import { NotFoundRoute } from './NotFound.page';
diff --git a/packages/project-builder-web/src/pages/data/DataLayout.tsx b/packages/project-builder-web/src/pages/data/_layout.tsx
similarity index 96%
rename from packages/project-builder-web/src/pages/data/DataLayout.tsx
rename to packages/project-builder-web/src/pages/data/_layout.tsx
index b8ba5d22a..20fda53af 100644
--- a/packages/project-builder-web/src/pages/data/DataLayout.tsx
+++ b/packages/project-builder-web/src/pages/data/_layout.tsx
@@ -8,7 +8,7 @@ import { NavLink, Outlet, useMatch } from 'react-router-dom';
import { ErrorBoundary } from '@src/components/ErrorBoundary/ErrorBoundary';
import { EnumsSidebarList } from './enums/EnumsSidebarList';
-import { ModelsSidebarList } from './models/ModelsSidebarList';
+import { ModelsSidebarList } from './models/_components/ModelsSidebarList';
export function DataLayout(): React.JSX.Element {
const {
diff --git a/packages/project-builder-web/src/pages/data/index.tsx b/packages/project-builder-web/src/pages/data/_routes.tsx
similarity index 74%
rename from packages/project-builder-web/src/pages/data/index.tsx
rename to packages/project-builder-web/src/pages/data/_routes.tsx
index f26f00c23..760427d5c 100644
--- a/packages/project-builder-web/src/pages/data/index.tsx
+++ b/packages/project-builder-web/src/pages/data/_routes.tsx
@@ -2,16 +2,16 @@ import type { RouteObject } from 'react-router-dom';
import { Navigate } from 'react-router-dom';
-import { DataLayout } from './DataLayout';
+import { DataLayout } from './_layout';
import { EnumRoutes } from './enums';
-import { ModelRoutes } from './models';
+import { ModelsRoutes } from './models/_routes';
export const DataRoutes: RouteObject = {
element: ,
path: '/data',
children: [
{ index: true, element: },
- ModelRoutes,
+ ModelsRoutes,
EnumRoutes,
],
};
diff --git a/packages/project-builder-web/src/pages/data/enums/EnumsSidebarList.tsx b/packages/project-builder-web/src/pages/data/enums/EnumsSidebarList.tsx
index a29986001..55c055186 100644
--- a/packages/project-builder-web/src/pages/data/enums/EnumsSidebarList.tsx
+++ b/packages/project-builder-web/src/pages/data/enums/EnumsSidebarList.tsx
@@ -13,7 +13,7 @@ import { useState } from 'react';
import { MdAdd, MdClear } from 'react-icons/md';
import { NavLink } from 'react-router-dom';
-import { createEnumEditLink } from '../models/utils/url';
+import { createEnumEditLink } from '../models/_utils/url';
import { NewEnumDialog } from './new/NewEnumDialog';
interface EnumsSidebarListProps {
diff --git a/packages/project-builder-web/src/pages/data/enums/hooks/useEnumForm.tsx b/packages/project-builder-web/src/pages/data/enums/hooks/useEnumForm.tsx
index 06bc5687e..521afa90a 100644
--- a/packages/project-builder-web/src/pages/data/enums/hooks/useEnumForm.tsx
+++ b/packages/project-builder-web/src/pages/data/enums/hooks/useEnumForm.tsx
@@ -23,7 +23,7 @@ import { useDeleteReferenceDialog } from '@src/hooks/useDeleteReferenceDialog';
import { logAndFormatError } from '@src/services/error-formatter';
import { NotFoundError, RefDeleteError } from '@src/utils/error';
-import { createEnumEditLink } from '../../models/utils/url';
+import { createEnumEditLink } from '../../models/_utils/url';
interface UseEnumFormOptions {
schema?: z.ZodTypeAny;
diff --git a/packages/project-builder-web/src/pages/data/models/ModelsSidebarList.tsx b/packages/project-builder-web/src/pages/data/models/_components/ModelsSidebarList.tsx
similarity index 98%
rename from packages/project-builder-web/src/pages/data/models/ModelsSidebarList.tsx
rename to packages/project-builder-web/src/pages/data/models/_components/ModelsSidebarList.tsx
index 81e12d0e2..bfcf1f11d 100644
--- a/packages/project-builder-web/src/pages/data/models/ModelsSidebarList.tsx
+++ b/packages/project-builder-web/src/pages/data/models/_components/ModelsSidebarList.tsx
@@ -13,8 +13,8 @@ import { useState } from 'react';
import { MdAdd, MdClear } from 'react-icons/md';
import { NavLink } from 'react-router-dom';
+import { createModelEditLink } from '../_utils/url';
import { NewModelDialog } from './NewModelDialog';
-import { createModelEditLink } from './utils/url';
interface ModelsSidebarListProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/NewModelDialog.tsx b/packages/project-builder-web/src/pages/data/models/_components/NewModelDialog.tsx
similarity index 93%
rename from packages/project-builder-web/src/pages/data/models/NewModelDialog.tsx
rename to packages/project-builder-web/src/pages/data/models/_components/NewModelDialog.tsx
index b5abaf9af..b3a66cd03 100644
--- a/packages/project-builder-web/src/pages/data/models/NewModelDialog.tsx
+++ b/packages/project-builder-web/src/pages/data/models/_components/NewModelDialog.tsx
@@ -7,8 +7,8 @@ import {
useControlledState,
} from '@halfdomelabs/ui-components';
-import { ModelInfoForm } from './edit/model/ModelInfoForm';
-import { useModelForm } from './hooks/useModelForm';
+import { useModelForm } from '../_hooks/useModelForm';
+import { ModelInfoForm } from '../edit/[id]/_components/ModelInfoForm';
interface NewModelDialogProps {
children: React.ReactNode;
diff --git a/packages/project-builder-web/src/pages/data/models/constants/scalar-types.ts b/packages/project-builder-web/src/pages/data/models/_constants.tsx
similarity index 55%
rename from packages/project-builder-web/src/pages/data/models/constants/scalar-types.ts
rename to packages/project-builder-web/src/pages/data/models/_constants.tsx
index 6441dce91..574e0f38d 100644
--- a/packages/project-builder-web/src/pages/data/models/constants/scalar-types.ts
+++ b/packages/project-builder-web/src/pages/data/models/_constants.tsx
@@ -1,5 +1,32 @@
import type { ScalarFieldType } from '@halfdomelabs/project-builder-lib';
+import { modelTransformerEntityType } from '@halfdomelabs/project-builder-lib';
+import { createNewModelTransformerWebConfig } from '@halfdomelabs/project-builder-lib/web';
+
+import { embeddedRelationTransformerWebConfig } from './edit/[id]/_components/service/ServiceEmbeddedRelationForm';
+
+export const BUILT_IN_TRANSFORMER_WEB_CONFIGS = [
+ embeddedRelationTransformerWebConfig,
+ createNewModelTransformerWebConfig({
+ name: 'password',
+ label: 'Password',
+ description: "Hashes the input value of value 'password' using Argon2id",
+ getNewTransformer: () => ({
+ id: modelTransformerEntityType.generateNewId(),
+ type: 'password',
+ }),
+ allowNewTransformer(_, modelConfig) {
+ return (
+ !modelConfig.service?.transformers?.some(
+ (t) => t.type === 'password',
+ ) && modelConfig.model.fields.some((f) => f.name === 'passwordHash')
+ );
+ },
+ getSummary: () => [],
+ pluginId: undefined,
+ }),
+];
+
export interface ScalarFieldTypeOption {
label: string;
value: string;
diff --git a/packages/project-builder-web/src/pages/data/models/hooks/useEditedModelConfig.tsx b/packages/project-builder-web/src/pages/data/models/_hooks/useEditedModelConfig.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/hooks/useEditedModelConfig.tsx
rename to packages/project-builder-web/src/pages/data/models/_hooks/useEditedModelConfig.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/hooks/useModelForm.ts b/packages/project-builder-web/src/pages/data/models/_hooks/useModelForm.ts
similarity index 99%
rename from packages/project-builder-web/src/pages/data/models/hooks/useModelForm.ts
rename to packages/project-builder-web/src/pages/data/models/_hooks/useModelForm.ts
index a15f97340..15e81985d 100644
--- a/packages/project-builder-web/src/pages/data/models/hooks/useModelForm.ts
+++ b/packages/project-builder-web/src/pages/data/models/_hooks/useModelForm.ts
@@ -24,7 +24,7 @@ import { logAndFormatError } from 'src/services/error-formatter';
import { useDeleteReferenceDialog } from '@src/hooks/useDeleteReferenceDialog';
import { NotFoundError, RefDeleteError } from '@src/utils/error';
-import { createModelEditLink } from '../utils/url';
+import { createModelEditLink } from '../_utils/url';
interface UseModelFormOptions {
schema?: z.ZodTypeAny;
diff --git a/packages/project-builder-web/src/pages/data/models/index.tsx b/packages/project-builder-web/src/pages/data/models/_routes.tsx
similarity index 63%
rename from packages/project-builder-web/src/pages/data/models/index.tsx
rename to packages/project-builder-web/src/pages/data/models/_routes.tsx
index 397c5c34b..9008dbb87 100644
--- a/packages/project-builder-web/src/pages/data/models/index.tsx
+++ b/packages/project-builder-web/src/pages/data/models/_routes.tsx
@@ -3,16 +3,16 @@ import type { RouteObject } from 'react-router-dom';
import { NotFoundRoute } from '@src/pages/NotFound.page';
import { createRouteCrumb } from '@src/types/routes';
-import { ModelEditRoutes } from './edit/_routes';
-import ModelListPage from './ModelList.page';
+import { ModelEditRoutes } from './edit/[id]/_routes';
+import ModelsIndexPage from './index.page';
-export const ModelRoutes: RouteObject = {
+export const ModelsRoutes: RouteObject = {
path: 'models/*',
handle: {
crumb: createRouteCrumb({ label: 'Models', url: '/data/models' }),
},
children: [
- { index: true, element: },
+ { index: true, element: },
ModelEditRoutes,
NotFoundRoute,
],
diff --git a/packages/project-builder-web/src/pages/data/models/utils/url.ts b/packages/project-builder-web/src/pages/data/models/_utils/url.ts
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/utils/url.ts
rename to packages/project-builder-web/src/pages/data/models/_utils/url.ts
diff --git a/packages/project-builder-web/src/pages/data/models/constants/built-in-transformers.ts b/packages/project-builder-web/src/pages/data/models/constants/built-in-transformers.ts
deleted file mode 100644
index 9e5e33514..000000000
--- a/packages/project-builder-web/src/pages/data/models/constants/built-in-transformers.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { modelTransformerEntityType } from '@halfdomelabs/project-builder-lib';
-import { createNewModelTransformerWebConfig } from '@halfdomelabs/project-builder-lib/web';
-
-import { embeddedRelationTransformerWebConfig } from '../edit/service/ServiceEmbeddedRelationForm';
-
-export const BUILT_IN_TRANSFORMER_WEB_CONFIGS = [
- embeddedRelationTransformerWebConfig,
- createNewModelTransformerWebConfig({
- name: 'password',
- label: 'Password',
- description: "Hashes the input value of value 'password' using SHA-256",
- getNewTransformer: () => ({
- id: modelTransformerEntityType.generateNewId(),
- type: 'password',
- }),
- allowNewTransformer(_, modelConfig) {
- return (
- !modelConfig.service?.transformers?.some(
- (t) => t.type === 'password',
- ) && modelConfig.model.fields.some((f) => f.name === 'passwordHash')
- );
- },
- getSummary: () => [],
- pluginId: undefined,
- }),
-];
diff --git a/packages/project-builder-web/src/pages/data/models/edit/components/BadgeWithTypeLabel.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/BadgeWithTypeLabel.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/components/BadgeWithTypeLabel.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/BadgeWithTypeLabel.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/ModelHeaderBar.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelHeaderBar.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/ModelHeaderBar.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelHeaderBar.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/ModelInfoEditDialog.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelInfoEditDialog.tsx
similarity index 92%
rename from packages/project-builder-web/src/pages/data/models/edit/ModelInfoEditDialog.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelInfoEditDialog.tsx
index b46326b08..12b2c9a55 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/ModelInfoEditDialog.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelInfoEditDialog.tsx
@@ -6,8 +6,9 @@ import {
useControlledState,
} from '@halfdomelabs/ui-components';
-import { useModelForm } from '../hooks/useModelForm';
-import { ModelInfoForm } from './model/ModelInfoForm';
+import { useModelForm } from '@src/pages/data/models/_hooks/useModelForm';
+
+import { ModelInfoForm } from './ModelInfoForm';
interface ModelInfoEditDialogProps {
open?: boolean;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/ModelInfoForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelInfoForm.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/ModelInfoForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelInfoForm.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/ModelRelationsSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelRelationsSection.tsx
similarity index 97%
rename from packages/project-builder-web/src/pages/data/models/edit/model/ModelRelationsSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelRelationsSection.tsx
index 77c6d6395..98a5db7d9 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/ModelRelationsSection.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelRelationsSection.tsx
@@ -11,7 +11,7 @@ import {
} from '@halfdomelabs/ui-components';
import { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../_hooks/useEditedModelConfig';
import { ModelRelationDialog } from './fields/relations/ModelRelationDialog';
interface Props {
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/ModelUniqueConstraintsSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelUniqueConstraintsSection.tsx
similarity index 97%
rename from packages/project-builder-web/src/pages/data/models/edit/model/ModelUniqueConstraintsSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelUniqueConstraintsSection.tsx
index 7786399c8..3a9fa50d6 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/ModelUniqueConstraintsSection.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/ModelUniqueConstraintsSection.tsx
@@ -10,7 +10,7 @@ import {
} from '@halfdomelabs/ui-components';
import { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../_hooks/useEditedModelConfig';
import { ModelUniqueConstraintDialog } from './fields/unique-constraints/ModelUniqueConstraintDialog';
interface Props {
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelAddFieldButton.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelAddFieldButton.tsx
similarity index 97%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelAddFieldButton.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelAddFieldButton.tsx
index 112212ee8..60ea18f00 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelAddFieldButton.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelAddFieldButton.tsx
@@ -10,7 +10,7 @@ import { Button, ButtonGroup, Dropdown } from '@halfdomelabs/ui-components';
import { useMemo } from 'react';
import { MdExpandMore } from 'react-icons/md';
-import { useEditedModelConfig } from '../../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
interface ModelAddFieldButtonProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldDefaultValueInput.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldDefaultValueInput.tsx
similarity index 82%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldDefaultValueInput.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldDefaultValueInput.tsx
index bdf734ecd..4a9fb189f 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldDefaultValueInput.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldDefaultValueInput.tsx
@@ -45,7 +45,7 @@ export function ModelFieldDefaultValueInput({
if (type === 'boolean') {
return (
-
+
{defaultValue && (
-
+ />
)}
);
@@ -76,15 +75,17 @@ export function ModelFieldDefaultValueInput({
if (['string', 'int', 'float'].includes(type)) {
return (
-
+
{defaultValue && (
-
+ />
)}
);
}
+
if (type === 'uuid') {
if (optionsValue?.genUuid) {
return (
-
-
-
+ />
);
}
return (
-
+
-
+
@@ -154,10 +157,15 @@ export function ModelFieldDefaultValueInput({
if (defaultToNow ?? updatedAt) {
return (
-
-
-
+ />
);
}
@@ -179,12 +185,16 @@ export function ModelFieldDefaultValueInput({
placeholder="NULL"
control={control}
name={`model.fields.${idx}.options.default`}
+ className="flex-1"
/>
-
+
@@ -235,10 +245,12 @@ export function ModelFieldDefaultValueInput({
});
}}
options={enumValues}
+ className="flex-1"
/>
{optionsValue.defaultEnumValueRef && (
-
+ />
)}
);
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldForm.tsx
similarity index 99%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldForm.tsx
index 4a2bda7b0..c63a28244 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldForm.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldForm.tsx
@@ -16,7 +16,7 @@ import { useWatch } from 'react-hook-form';
import { HiDotsVertical } from 'react-icons/hi';
import { MdOutlineDelete } from 'react-icons/md';
-import { useEditedModelConfig } from '../../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
import { ModelFieldBadges } from './badges/ModelFieldBadges';
import { ModelFieldDefaultValueInput } from './ModelFieldDefaultValueInput';
import { ModelFieldTypeInput } from './ModelFieldTypeInput';
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldTypeInput.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldTypeInput.tsx
similarity index 93%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldTypeInput.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldTypeInput.tsx
index 31ae1deb2..0f413272d 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldTypeInput.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldTypeInput.tsx
@@ -10,9 +10,9 @@ import { useProjectDefinition } from '@halfdomelabs/project-builder-lib/web';
import { ComboboxField } from '@halfdomelabs/ui-components';
import { useController } from 'react-hook-form';
-import type { ScalarFieldTypeOption } from '../../../constants/scalar-types';
+import type { ScalarFieldTypeOption } from '../../../../_constants';
-import { SCALAR_FIELD_TYPE_OPTIONS } from '../../../constants/scalar-types';
+import { SCALAR_FIELD_TYPE_OPTIONS } from '../../../../_constants';
interface ModelFieldTypeInputProps {
control: Control
;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldsForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldsForm.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/ModelFieldsForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/ModelFieldsForm.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/badges/ModelFieldBadges.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/badges/ModelFieldBadges.tsx
similarity index 95%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/badges/ModelFieldBadges.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/badges/ModelFieldBadges.tsx
index c8b4c9d27..0fab65ba5 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/badges/ModelFieldBadges.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/badges/ModelFieldBadges.tsx
@@ -4,7 +4,8 @@ import type { Control } from 'react-hook-form';
import { clsx } from 'clsx';
-import { useEditedModelConfig } from '../../../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '@src/pages/data/models/_hooks/useEditedModelConfig';
+
import { ModelPrimaryKeyBadge } from '../primary-key/ModelPrimaryKeyBadge';
import { ModelRelationsBadge } from '../relations/ModelRelationBadge';
import { ModelFieldUniqueBadge } from '../unique-constraints/ModelUniqueConstraintBadge';
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyBadge.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyBadge.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyBadge.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyBadge.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyDialog.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyDialog.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyDialog.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyDialog.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyForm.tsx
similarity index 95%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyForm.tsx
index 048c077f7..c7ee37ae7 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/primary-key/ModelPrimaryKeyForm.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/primary-key/ModelPrimaryKeyForm.tsx
@@ -13,7 +13,7 @@ import { useId } from 'react';
import { useController, useForm } from 'react-hook-form';
import { z } from 'zod';
-import { useEditedModelConfig } from '@src/pages/data/models/hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '@src/pages/data/models/_hooks/useEditedModelConfig';
interface ModelPrimaryKeyFormProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationBadge.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationBadge.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationBadge.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationBadge.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationDialog.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationDialog.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationDialog.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationDialog.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationForm.tsx
similarity index 99%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationForm.tsx
index 7900d0f66..bdf6d0eb5 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/relations/ModelRelationForm.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/relations/ModelRelationForm.tsx
@@ -26,7 +26,7 @@ import { pluralize } from 'inflection';
import React, { useId, useMemo } from 'react';
import { useController, useForm } from 'react-hook-form';
-import { useEditedModelConfig } from '@src/pages/data/models/hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '@src/pages/data/models/_hooks/useEditedModelConfig';
interface ModelRelationFormProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintBadge.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintBadge.tsx
similarity index 94%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintBadge.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintBadge.tsx
index 4c47380c8..e015eaa21 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintBadge.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintBadge.tsx
@@ -7,7 +7,7 @@ import { clsx } from 'clsx';
import { useState } from 'react';
import { MdStar } from 'react-icons/md';
-import { useEditedModelConfig } from '@src/pages/data/models/hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '@src/pages/data/models/_hooks/useEditedModelConfig';
import { ModelUniqueConstraintDialog } from './ModelUniqueConstraintDialog';
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintDialog.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintDialog.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintDialog.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintDialog.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintForm.tsx
similarity index 97%
rename from packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintForm.tsx
index f6a4e14ba..c83ffa648 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/fields/unique-constraints/ModelUniqueConstraintForm.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/fields/unique-constraints/ModelUniqueConstraintForm.tsx
@@ -14,7 +14,7 @@ import { useId } from 'react';
import { useController, useForm } from 'react-hook-form';
import { z } from 'zod';
-import { useEditedModelConfig } from '@src/pages/data/models/hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '@src/pages/data/models/_hooks/useEditedModelConfig';
interface ModelUniqueConstraintFormProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLMutationsSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLMutationsSection.tsx
similarity index 98%
rename from packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLMutationsSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLMutationsSection.tsx
index 0b8b6b972..da22a7d15 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLMutationsSection.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLMutationsSection.tsx
@@ -13,7 +13,7 @@ import { useWatch } from 'react-hook-form';
import { MdInfo } from 'react-icons/md';
import { Link } from 'react-router-dom';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
interface GraphQLMutationsSectionProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLObjectTypeSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLObjectTypeSection.tsx
similarity index 98%
rename from packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLObjectTypeSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLObjectTypeSection.tsx
index 64890495c..e79c374e6 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLObjectTypeSection.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLObjectTypeSection.tsx
@@ -9,9 +9,9 @@ import { useState } from 'react';
import { useController, useWatch } from 'react-hook-form';
import { MdExpandLess, MdExpandMore } from 'react-icons/md';
-import { SCALAR_FIELD_TYPE_OPTIONS } from '../../constants/scalar-types';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
-import { BadgeWithTypeLabel } from '../components/BadgeWithTypeLabel';
+import { SCALAR_FIELD_TYPE_OPTIONS } from '../../../../_constants';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
+import { BadgeWithTypeLabel } from '../BadgeWithTypeLabel';
interface GraphQLObjectTypeSectionProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLQueriesSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLQueriesSection.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/schema/GraphQLQueriesSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/graphql/GraphQLQueriesSection.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceEmbeddedRelationForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceEmbeddedRelationForm.tsx
similarity index 98%
rename from packages/project-builder-web/src/pages/data/models/edit/service/ServiceEmbeddedRelationForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceEmbeddedRelationForm.tsx
index 1cea93df4..6cce07a44 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceEmbeddedRelationForm.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceEmbeddedRelationForm.tsx
@@ -17,7 +17,7 @@ import { useEffect } from 'react';
import { useWatch } from 'react-hook-form';
import { usePrevious } from 'src/hooks/usePrevious';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
function ServiceEmbeddedRelationForm({
formProps,
diff --git a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceMethodFieldsSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceMethodFieldsSection.tsx
similarity index 95%
rename from packages/project-builder-web/src/pages/data/models/edit/service/ServiceMethodFieldsSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceMethodFieldsSection.tsx
index 7180fc5d0..0799d1ab8 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceMethodFieldsSection.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceMethodFieldsSection.tsx
@@ -10,10 +10,12 @@ import {
import { SectionList, SwitchField } from '@halfdomelabs/ui-components';
import { useWatch } from 'react-hook-form';
-import { BUILT_IN_TRANSFORMER_WEB_CONFIGS } from '../../constants/built-in-transformers';
-import { SCALAR_FIELD_TYPE_OPTIONS } from '../../constants/scalar-types';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
-import { BadgeWithTypeLabel } from '../components/BadgeWithTypeLabel';
+import {
+ BUILT_IN_TRANSFORMER_WEB_CONFIGS,
+ SCALAR_FIELD_TYPE_OPTIONS,
+} from '../../../../_constants';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
+import { BadgeWithTypeLabel } from '../BadgeWithTypeLabel';
interface ServiceMethodFieldsSectionProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformerDialog.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformerDialog.tsx
similarity index 100%
rename from packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformerDialog.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformerDialog.tsx
diff --git a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformerForm.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformerForm.tsx
similarity index 96%
rename from packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformerForm.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformerForm.tsx
index f016b9fe6..4fac18a0f 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformerForm.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformerForm.tsx
@@ -14,7 +14,7 @@ import { useId } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
+import { useEditedModelConfig } from '../../../../_hooks/useEditedModelConfig';
interface ServiceTransformerFormProps {
className?: string;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformersSection.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformersSection.tsx
similarity index 97%
rename from packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformersSection.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformersSection.tsx
index 6cbbf9eab..c2a9e9d3c 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/service/ServiceTransformersSection.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_components/service/ServiceTransformersSection.tsx
@@ -19,8 +19,9 @@ import { useState } from 'react';
import { useFieldArray, useWatch } from 'react-hook-form';
import { MdAdd, MdEdit, MdOutlineDelete } from 'react-icons/md';
-import { BUILT_IN_TRANSFORMER_WEB_CONFIGS } from '../../constants/built-in-transformers';
-import { useEditedModelConfig } from '../../hooks/useEditedModelConfig';
+import { BUILT_IN_TRANSFORMER_WEB_CONFIGS } from '@src/pages/data/models/_constants';
+import { useEditedModelConfig } from '@src/pages/data/models/_hooks/useEditedModelConfig';
+
import { ServiceTransformerDialog } from './ServiceTransformerDialog';
interface Props {
diff --git a/packages/project-builder-web/src/pages/data/models/edit/ModelEditLayout.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_layout.tsx
similarity index 96%
rename from packages/project-builder-web/src/pages/data/models/edit/ModelEditLayout.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/_layout.tsx
index a4e633d3f..7f81d91b7 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/ModelEditLayout.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_layout.tsx
@@ -6,7 +6,7 @@ import { NavigationTabs } from '@halfdomelabs/ui-components';
import { NavLink, Outlet, useParams } from 'react-router-dom';
import { NotFoundCard } from 'src/components';
-import { ModelHeaderBar } from './ModelHeaderBar';
+import { ModelHeaderBar } from './_components/ModelHeaderBar';
export function ModelEditLayout(): React.JSX.Element {
const { uid } = useParams<'uid'>();
diff --git a/packages/project-builder-web/src/pages/data/models/edit/[id]/_routes.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/_routes.tsx
new file mode 100644
index 000000000..ac9f1f9eb
--- /dev/null
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/_routes.tsx
@@ -0,0 +1,51 @@
+import type { RouteObject } from 'react-router-dom';
+
+import { modelEntityType } from '@halfdomelabs/project-builder-lib';
+import { Navigate } from 'react-router-dom';
+
+import { NotFoundRoute } from '@src/pages/NotFound.page';
+import { createCrumbFromUid, createRouteCrumb } from '@src/types/routes';
+
+import { ModelEditLayout } from './_layout';
+import ModelEditGraphQLPage from './graphql.page';
+import ModelEditModelPage from './index.page';
+import ModelEditServicePage from './service.page';
+
+export const ModelEditRoutes: RouteObject = {
+ path: 'edit',
+ children: [
+ {
+ index: true,
+ element: ,
+ },
+ {
+ path: ':uid',
+ element: ,
+ handle: {
+ crumb: createCrumbFromUid(
+ modelEntityType,
+ 'Edit Model',
+ '/data/models/edit/:uid',
+ ),
+ },
+ children: [
+ { index: true, element: },
+ {
+ path: 'service',
+ element: ,
+ handle: {
+ crumb: createRouteCrumb('Service'),
+ },
+ },
+ {
+ path: 'graphql',
+ element: ,
+ handle: {
+ crumb: createRouteCrumb('GraphQL'),
+ },
+ },
+ NotFoundRoute,
+ ],
+ },
+ ],
+};
diff --git a/packages/project-builder-web/src/pages/data/models/edit/schema/schema.page.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/graphql.page.tsx
similarity index 66%
rename from packages/project-builder-web/src/pages/data/models/edit/schema/schema.page.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/graphql.page.tsx
index 66f0a855a..ca9a690dd 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/schema/schema.page.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/graphql.page.tsx
@@ -5,13 +5,13 @@ import { useBlockUnsavedChangesNavigate } from '@halfdomelabs/project-builder-li
import FormActionBar from '@src/components/FormActionBar';
-import { EditedModelContextProvider } from '../../hooks/useEditedModelConfig';
-import { useModelForm } from '../../hooks/useModelForm';
-import { GraphQLMutationsSection } from './GraphQLMutationsSection';
-import { GraphQLObjectTypeSection } from './GraphQLObjectTypeSection';
-import { GraphQLQueriesSection } from './GraphQLQueriesSection';
+import { EditedModelContextProvider } from '../../_hooks/useEditedModelConfig';
+import { useModelForm } from '../../_hooks/useModelForm';
+import { GraphQLMutationsSection } from './_components/graphql/GraphQLMutationsSection';
+import { GraphQLObjectTypeSection } from './_components/graphql/GraphQLObjectTypeSection';
+import { GraphQLQueriesSection } from './_components/graphql/GraphQLQueriesSection';
-function ModelEditSchemaPage(): React.JSX.Element {
+function ModelEditGraphQLPage(): React.JSX.Element {
const { form, onSubmit, defaultValues } = useModelForm({
schema: modelBaseSchema.omit({ name: true, featureRef: true }),
});
@@ -39,4 +39,4 @@ function ModelEditSchemaPage(): React.JSX.Element {
);
}
-export default ModelEditSchemaPage;
+export default ModelEditGraphQLPage;
diff --git a/packages/project-builder-web/src/pages/data/models/edit/model/model.page.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/index.page.tsx
similarity index 84%
rename from packages/project-builder-web/src/pages/data/models/edit/model/model.page.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/index.page.tsx
index bbea78fb2..127d7ec55 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/model/model.page.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/index.page.tsx
@@ -13,11 +13,11 @@ import { registerEntityTypeUrl } from 'src/services/entity-type';
import { ErrorBoundary } from '@src/components/ErrorBoundary/ErrorBoundary';
import FormActionBar from '@src/components/FormActionBar';
-import { EditedModelContextProvider } from '../../hooks/useEditedModelConfig';
-import { useModelForm } from '../../hooks/useModelForm';
-import { ModelFieldsForm } from './fields/ModelFieldsForm';
-import { ModelRelationsSection } from './ModelRelationsSection';
-import { ModelUniqueConstraintsSection } from './ModelUniqueConstraintsSection';
+import { EditedModelContextProvider } from '../../_hooks/useEditedModelConfig';
+import { useModelForm } from '../../_hooks/useModelForm';
+import { ModelFieldsForm } from './_components/fields/ModelFieldsForm';
+import { ModelRelationsSection } from './_components/ModelRelationsSection';
+import { ModelUniqueConstraintsSection } from './_components/ModelUniqueConstraintsSection';
registerEntityTypeUrl(modelEntityType, `/data/models/edit/{uid}`);
registerEntityTypeUrl(
diff --git a/packages/project-builder-web/src/pages/data/models/edit/service/service.page.tsx b/packages/project-builder-web/src/pages/data/models/edit/[id]/service.page.tsx
similarity index 87%
rename from packages/project-builder-web/src/pages/data/models/edit/service/service.page.tsx
rename to packages/project-builder-web/src/pages/data/models/edit/[id]/service.page.tsx
index b03fa9819..6a35cbd7d 100644
--- a/packages/project-builder-web/src/pages/data/models/edit/service/service.page.tsx
+++ b/packages/project-builder-web/src/pages/data/models/edit/[id]/service.page.tsx
@@ -10,10 +10,10 @@ import { SectionList, SwitchField } from '@halfdomelabs/ui-components';
import FormActionBar from '@src/components/FormActionBar';
import { registerEntityTypeUrl } from '@src/services/entity-type';
-import { EditedModelContextProvider } from '../../hooks/useEditedModelConfig';
-import { useModelForm } from '../../hooks/useModelForm';
-import { ServiceMethodFieldsSection } from './ServiceMethodFieldsSection';
-import { ServiceTransformersSection } from './ServiceTransformersSection';
+import { EditedModelContextProvider } from '../../_hooks/useEditedModelConfig';
+import { useModelForm } from '../../_hooks/useModelForm';
+import { ServiceMethodFieldsSection } from './_components/service/ServiceMethodFieldsSection';
+import { ServiceTransformersSection } from './_components/service/ServiceTransformersSection';
registerEntityTypeUrl(
modelTransformerEntityType,
diff --git a/packages/project-builder-web/src/pages/data/models/edit/_routes.tsx b/packages/project-builder-web/src/pages/data/models/edit/_routes.tsx
deleted file mode 100644
index ca5dd0646..000000000
--- a/packages/project-builder-web/src/pages/data/models/edit/_routes.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import type { RouteObject } from 'react-router-dom';
-
-import { modelEntityType } from '@halfdomelabs/project-builder-lib';
-
-import { NotFoundRoute } from '@src/pages/NotFound.page';
-import { createCrumbFromUid, createRouteCrumb } from '@src/types/routes';
-
-import ModelEditModelPage from './model/model.page';
-import { ModelEditLayout } from './ModelEditLayout';
-import ModelEditSchemaPage from './schema/schema.page';
-import ModelEditServicePage from './service/service.page';
-
-export const ModelEditRoutes: RouteObject = {
- path: 'edit/:uid/*',
- element: ,
- handle: {
- crumb: createCrumbFromUid(
- modelEntityType,
- 'Edit Model',
- '/data/models/edit/:uid',
- ),
- },
- children: [
- { index: true, element: },
- {
- path: 'service',
- element: ,
- handle: {
- crumb: createRouteCrumb('Service'),
- },
- },
- {
- path: 'graphql',
- element: ,
- handle: {
- crumb: createRouteCrumb('GraphQL'),
- },
- },
- NotFoundRoute,
- ],
-};
diff --git a/packages/project-builder-web/src/pages/data/models/ModelList.page.tsx b/packages/project-builder-web/src/pages/data/models/index.page.tsx
similarity index 88%
rename from packages/project-builder-web/src/pages/data/models/ModelList.page.tsx
rename to packages/project-builder-web/src/pages/data/models/index.page.tsx
index 6201ea672..86b7fa161 100644
--- a/packages/project-builder-web/src/pages/data/models/ModelList.page.tsx
+++ b/packages/project-builder-web/src/pages/data/models/index.page.tsx
@@ -4,9 +4,9 @@ import { useProjectDefinition } from '@halfdomelabs/project-builder-lib/web';
import { Button, EmptyDisplay } from '@halfdomelabs/ui-components';
import { HiDatabase } from 'react-icons/hi';
-import { NewModelDialog } from './NewModelDialog';
+import { NewModelDialog } from './_components/NewModelDialog';
-function ModelListPage(): React.JSX.Element {
+function ModelsIndexPage(): React.JSX.Element {
const { definition } = useProjectDefinition();
if (definition.models.length === 0) {
@@ -44,4 +44,4 @@ function ModelListPage(): React.JSX.Element {
);
}
-export default ModelListPage;
+export default ModelsIndexPage;
diff --git a/packages/ui-components/src/components/InputField/InputField.tsx b/packages/ui-components/src/components/InputField/InputField.tsx
index 26cbc4976..f0f10aa2e 100644
--- a/packages/ui-components/src/components/InputField/InputField.tsx
+++ b/packages/ui-components/src/components/InputField/InputField.tsx
@@ -13,6 +13,7 @@ import { get, useFormState } from 'react-hook-form';
import type { FieldProps } from '@src/types/form';
+import { cn } from '@src/utils';
import { genericForwardRef } from '@src/utils/generic-forward-ref.js';
import { FormItem } from '../FormItem/FormItem';
@@ -27,11 +28,28 @@ export interface InputFieldProps
onChange?: (value: string) => void;
value?: string;
register?: UseFormRegisterReturn;
+ inputClassName?: string;
}
const InputFieldRoot = React.forwardRef(
- ({ label, description, error, onChange, register, ...props }, ref) => (
-
+ (
+ {
+ label,
+ description,
+ error,
+ onChange,
+ register,
+ className,
+ inputClassName,
+ ...props
+ },
+ ref,
+ ) => (
+
{label && {label}}
(
onChange(e.target.value);
})
}
+ className={inputClassName}
{...props}
{...register}
/>