# Sub-Pages — Overview > **Part of:** [Sub-Pages guide](../sub-pages.md) > **See also:** [Best Practices](00-best-practices.md) | [Tabs Component](03-tabs-component.md) | [Checklist](08-checklist.md) A sub-page is a detail view for a single entity, accessed by clicking a row in a main page table. ## Tab Types | Type | Description | Example | |------|-------------|---------| | **Settings** | Form with editable properties | `RolesSettings.tsx` | | **Member Of** | Groups entity belongs to | `UserMemberOf.tsx` | | **Members** | Entities inside this one | `UserGroupsMembers.tsx` | | **Managed By** | Entities that manage this | `HostsManagedBy.tsx` | | **Independent** | Entity-specific table with Add/Delete | `RolesPrivileges.tsx` | ## Required Input | Input | Example | |-------|---------| | **Entity name** | `OTP Token` | | **IPA API object** | `otptoken` | | **Primary key** | `ipatokenuniqueid` | | **Parent pathname** | `otp-tokens` | | **Tabs** | `settings`, `managedby_user` | ## Tab Shorthand | Shorthand | Component | |-----------|-----------| | `memberof_group` | `MemberOfUserGroups` | | `memberof_role` | `MemberOfRoles` | | `member_user` | `MembersUsers` | | `member_host` | `MembersHosts` | | `managedby_host` | `ManagedByHosts` | ## Example Prompts **Settings-only:** ``` Based on the sub-pages guide, generate a sub-page for 'Roles' with: - IPA API object: `role` - Primary key: `cn` - Parent pathname: `roles` - Settings title: "Role settings" - Settings fields: `cn` → "Name" (read-only), `description` → "Description" ``` **Settings + Membership:** ``` - Tabs: `memberof_group`, `managedby_host` ``` **Independent Sub-Page:** ``` Based on the sub-pages guide, generate a 'Privileges' independent page for 'Roles' with: - IPA API object: `role` - Data field: `memberof_privilege` (string[]) - Table column: "Privilege name" - 'Add' modal: `privilege_find` with `no_members: true`, `role_add_privilege` - 'Delete' modal: `role_remove_privilege` ``` ## Files Generated | Condition | Files | |-----------|-------| | Settings | `Tabs.tsx`, `Settings.tsx`, `useSettingsData.tsx` | | Membership | `MemberOf.tsx`, `Members.tsx` | | Independent | `.tsx` | | Always | Routes in `AppRoutes.tsx` | ## ⚠️ Enable Clicking from Main Page In `.tsx`: ```tsx ``` Without `showLink={true}`, rows are not clickable! ## RPC Endpoints Needed > **Reference:** [API.txt](https://codeberg.org/freeipa/freeipa/src/branch/master/API.txt) contains the full specification (options, inputs, outputs) for every IPA API command. Use it to determine which fields a command accepts and what parameters are required. | Tab Type | Commands | |----------|----------| | Settings | `_show`, `_mod` | | Membership | `_add_member`, `_remove_member` | | Independent | `_add_`, `_remove_` |