# Sub-Pages — Entity Data Types
> **Part of:** [Sub-Pages guide](../sub-pages.md)
> **See also:** [Settings Tab](04-settings-tab.md) | [Data Hook](02-data-hook.md)
How to use TypeScript interfaces and API metadata when generating sub-pages.
## Using Entity Data Types
Always check the entity's TypeScript interface in `src/utils/datatypes/globalDataTypes.ts`.
The interface provides:
1. **Field types** — Use the correct form component
2. **Type constraints** — Comments specify defaults, min/max, allowed values
3. **Optional vs required** — Fields without `?` are typically required
**Example:** The `OtpToken` interface:
```typescript
export interface OtpToken {
ipatokenuniqueid: string;
ipatokentotpclockoffset: number; // Default: 0 | Minimum value: -2147483648 | Maximum value: 2147483647
ipatokentotptimestep: number; // Default: 30 | Minimum value: 5 | Maximum value: 2147483647
ipatokenotpdigits: OtpTokenDigits; // Default: 6
}
```
Apply constraints to form components:
```tsx
```
For plain `string` fields, `IpaTextInput` needs no extra constraint props — `required` is inferred automatically from metadata. Add `rules` only when custom validation is needed:
```tsx
value.length <= 255,
},
]}
/>
```
Each rule provides live feedback: `indeterminate` when empty, `success`/`error` as the user types.
## Type-to-Component Mappings
| TypeScript Type | Comment Hints | Form Component | Extra Props |
|-----------------|---------------|----------------|-------------|
| `string` | — | `IpaTextInput` | — |
| `string` | (multi-line) | `IpaTextArea` | — |
| `number` | `Minimum/Maximum value` | `IpaNumberInput` | `minValue`, `maxValue`, `numCharsShown` |
| `boolean` | — | `IpaCheckbox` | — |
| `Date \| string` | datetime | `IpaCalendar` | — |
| `string[]` | — | `IpaSelect` | `options` |
| Custom type | — | `IpaSelect` | `options` from type values |
## Calculating numCharsShown
For `IpaNumberInput`, set width based on the longest possible value:
```
numCharsShown = max(String(minValue).length, String(maxValue).length)
```
| Field | Min | Max | numCharsShown |
|-------|-----|-----|---------------|
| `ipatokentotpclockoffset` | -2147483648 | 2147483647 | 11 (includes `-`) |
| `ipatokentotptimestep` | 5 | 2147483647 | 10 |
| `ipatokenotpdigits` | 6 | 8 | 1 |
## Tab Shorthand Reference
Use these shorthand codes in prompts to specify membership tabs:
| Shorthand | Tab Type | Uses Component |
|-----------|----------|----------------|
| `memberof_group` | Member of User groups | `MemberOfUserGroups` |
| `memberof_hostgroup` | Member of Host groups | `MemberOfHostGroups` |
| `memberof_netgroup` | Member of Netgroups | `MemberOfNetgroups` |
| `memberof_role` | Member of Roles | `MemberOfRoles` |
| `memberof_hbacrule` | Member of HBAC rules | `MemberOfHbacRules` |
| `memberof_sudorule` | Member of Sudo rules | `MemberOfSudoRules` |
| `member_user` | User members | `MembersUsers` |
| `member_group` | Group members | `MembersUserGroups` |
| `member_host` | Host members | `MembersHosts` |
| `managedby_host` | Managed by hosts | `ManagedByHosts` |
| `managedby_user` | Managed by users | `ManagedByUsers` |
| `manager_user` | Member managers (users) | `ManagersUsers` |
| `manager_usergroup` | Member managers (groups) | `ManagersUserGroups` |
| `` (table: cols) | Custom table | Custom implementation |
## Quick Reference
See also:
- [01-overview.md](01-overview.md) — Full input reference, example prompts
- [04-settings-tab.md](04-settings-tab.md) — Form components, field constraints
- [06-membership-tabs.md](06-membership-tabs.md) — Available membership components