Skip to content

add view pages for admin resources#2390

Open
rxtted wants to merge 23 commits into
pelican-dev:mainfrom
rxtted:view-pages
Open

add view pages for admin resources#2390
rxtted wants to merge 23 commits into
pelican-dev:mainfrom
rxtted:view-pages

Conversation

@rxtted

@rxtted rxtted commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

closes #583. creating the read crud on egg, node & server views. #963 fixed the other resources & this picks up on @JoanFo1456 work

this continues the intent of #1998 which had drifted and wasn't really cherry-pickable after the v4 to v5 form/schema bump. used its class structures as reference only.

egg is pretty much done. node and server are what's left, each needs its own pass since they're more involved than egg. it's good for review once all three are in. any feedback on the design would be appreciated, i'll try to imitate the approaches the existing read only pages use where possible.

  • egg
  • node (page-injected services + operational relation manager actions need a dedicated pass)
  • server (same as node)

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds ViewRecord pages for Egg, Node, and Server resources, centralizing detail tab schemas in each Resource class via a new detailTabs() method. Edit pages are refactored to delegate to these shared schemas. Relation managers for Nodes and Servers gain read-only mode gating. List pages add conditional ViewAction row actions. Tests validate authorization, UI visibility, and read-only enforcement.

Changes

Egg View Page Feature

Layer / File(s) Summary
EggResource: detailTabs() and view route registration
app/Filament/Admin/Resources/Eggs/EggResource.php
Imports UI components, registers ViewEgg route in getDefaultPages(), and defines shared detailTabs() across configuration, process management, egg variables, and install script tabs with nested repeaters, scoped validation, and relationship mutation defaults.
ViewEgg page and Monaco read-only support
app/Filament/Admin/Resources/Eggs/Pages/ViewEgg.php, resources/views/filament/components/monaco-editor.blade.php
Implements ViewEgg extending ViewRecord, renders EggResource::detailTabs() in full-width Tabs with query-string persistence and EditAction header; Monaco editor sets readOnly from its disabled state.
EditEgg refactored to shared schema
app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php
Removes ~252 lines of inline tab schema; getDefaultTabs() now delegates to EggResource::detailTabs().
ListEggs ViewAction and Egg tests
app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php, tests/Filament/Admin/ViewEggTest.php
Adds ViewAction to list table hidden when edit is permitted; tests cover view/edit access control, upload_icon action visibility, and list row action conditional visibility.

Node View Page Feature

Layer / File(s) Summary
NodeResource: detailTabs() and view route registration
app/Filament/Admin/Resources/Nodes/NodeResource.php
Registers ViewNode route; detailTabs() defines overview, basic settings, advanced settings, config, and diagnostics tabs with action handlers, notification feedback, and operation-aware visibility.
ViewNode page with DNS resolution
app/Filament/Admin/Resources/Nodes/Pages/ViewNode.php
Implements ViewNode page with full-width Tabs, EditAction header, mutateFormDataBeforeFill() resolving FQDN to IP, and null column span/start overrides.
EditNode refactored to shared schema
app/Filament/Admin/Resources/Nodes/Pages/EditNode.php
Import cleanup, boot() drops NodeUpdateService, getDefaultTabs() delegates to NodeResource::detailTabs().
ListNodes ViewAction and Node relation managers
app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php, app/Filament/Admin/Resources/Nodes/RelationManagers/AllocationsRelationManager.php, app/Filament/Admin/Resources/Nodes/RelationManagers/ServersRelationManager.php
Adds ViewAction to list; allocations relation manager disables inputs and hides write actions in read-only mode; servers relation manager disables allocation select when read-only.
Node tests
tests/Filament/Admin/ViewNodeTest.php
Tests for view/edit access control, absence of token fields on view page, reset-token action visibility, list row action, and relation manager read-only enforcement for both viewer and updater roles.

Server View Page Feature

Layer / File(s) Summary
ServerResource: detailTabs(), transferServer(), and view route registration
app/Filament/Admin/Resources/Servers/ServerResource.php
Registers ViewServer route; detailTabs() defines full server detail UI with operation-aware visibility; transferServer() builds transfer form inputs.
ViewServer page
app/Filament/Admin/Resources/Servers/Pages/ViewServer.php
Implements ViewServer page with full-width Tabs sourced from ServerResource::detailTabs(false), query-string tab persistence, and EditAction header.
EditServer refactored to shared schema
app/Filament/Admin/Resources/Servers/Pages/EditServer.php
Removes ~903 lines of inline tab schema; getDefaultTabs() delegates to ServerResource::detailTabs().
ListServers ViewAction swap and Server relation managers
app/Filament/Admin/Resources/Servers/Pages/ListServers.php, app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php, app/Filament/Admin/Resources/Servers/RelationManagers/DatabasesRelationManager.php
Replaces custom "view" action with ViewAction hidden when edit is permitted; allocations relation manager disables inputs and hides all write actions in read-only mode; databases relation manager hides rotate-password, delete, and create actions when read-only.
Server tests
tests/Filament/Admin/ViewServerTest.php
Tests for view/edit access control, no server variable materialization on view mount, reinstall action visibility, list row action, relation manager read-only for viewer and updater roles, and database password rotation visibility.

Possibly related PRs

  • pelican-dev/panel#1837: Introduces getEditAuthorizationResponse() policy checks, which this PR uses in all three list pages to conditionally hide ViewAction.
  • pelican-dev/panel#2134: Modifies Filament Egg page action/tab UI in app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php, directly overlapping with this PR's refactor of the same methods.
  • pelican-dev/panel#2281: Updates Egg variables repeater and ListEggs icon column wiring, which this PR consolidates into the centralized EggResource::detailTabs() structure.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 56.10% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'add view pages for admin resources' clearly and directly summarizes the main change: implementing ViewRecord pages for admin resources (Egg, Node, Server).
Description check ✅ Passed The description is well-related to the changeset, referencing specific linked issues (#583, #1998, #963), explaining the implementation status for each resource, and discussing design decisions around read-only behavior.
Linked Issues check ✅ Passed The PR implements all primary objectives from #583: ViewRecord pages for Egg, Node, and Server resources with appropriate authorization and read-only UI behaviors, completing the resource checklist for that issue.
Out of Scope Changes check ✅ Passed All changes are directly scoped to implementing view pages and related read-only infrastructure for the three target resources; Monaco editor read-only setting is a necessary supporting change for disabled state handling.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@rxtted

rxtted commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/Filament/Admin/ViewEggTest.php`:
- Around line 109-110: The test sets a global Filament panel with
Filament::setCurrentPanel(Filament::getPanel('admin')) but doesn't restore the
prior panel, causing test leakage; capture the current panel before changing
(e.g., $previous = Filament::getCurrentPanel() or similar), then ensure you
restore it after the test by calling Filament::setCurrentPanel($previous) (use a
finally block inside the test or restore in the test class tearDown method) so
the Filament::getCurrentPanel()/Filament::setCurrentPanel() state is always
returned to its original value.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 2527f209-f9da-4210-87e7-417c87b5ca3f

📥 Commits

Reviewing files that changed from the base of the PR and between 666a409 and b359a8b.

📒 Files selected for processing (6)
  • app/Filament/Admin/Resources/Eggs/EggResource.php
  • app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php
  • app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php
  • app/Filament/Admin/Resources/Eggs/Pages/ViewEgg.php
  • resources/views/filament/components/monaco-editor.blade.php
  • tests/Filament/Admin/ViewEggTest.php

Comment thread tests/Filament/Admin/ViewEggTest.php Outdated
@rxtted

rxtted commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

like pelijoan said some of the decisions on what gets gated off on the read only pages will be up to interpretation, i'll be sure to mention those decisions & we can discuss them!

@rxtted

rxtted commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/Traits/Filament/NodeDetailTabs.php`:
- Around line 606-619: The success notification is sent unconditionally after
calling NodeUpdateService::handle, so when handle($node, [], true) throws the
catch block shows a warning but execution continues and still calls
Notification::make()->success()->title(...)->send() and $this->fillForm(); fix
by returning early from the catch (or move the success Notification into the
try) so that on Exception you do not send the success notification or call
fillForm; update the catch in NodeDetailTabs where NodeUpdateService::handle is
invoked to exit the method (or otherwise skip the success
Notification::make()->success() and $this->fillForm()).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: f4edbae0-311d-435e-9318-d596b065e4a9

📥 Commits

Reviewing files that changed from the base of the PR and between b359a8b and a22d0ea.

📒 Files selected for processing (8)
  • app/Filament/Admin/Resources/Nodes/NodeResource.php
  • app/Filament/Admin/Resources/Nodes/Pages/EditNode.php
  • app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php
  • app/Filament/Admin/Resources/Nodes/Pages/ViewNode.php
  • app/Filament/Admin/Resources/Nodes/RelationManagers/AllocationsRelationManager.php
  • app/Filament/Admin/Resources/Nodes/RelationManagers/ServersRelationManager.php
  • app/Traits/Filament/NodeDetailTabs.php
  • tests/Filament/Admin/ViewNodeTest.php

Comment thread app/Traits/Filament/NodeDetailTabs.php Outdated
@rxtted

rxtted commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

right now the config tab is hidden on the read only page. its preview renders the wings config yaml, and that's got the daemon token baked into it, so a view-only user reading it basically walks off with the credential that authenticates wings. you could redact just the token and still show the rest read-only but i went with hiding the whole tab since it's safe by default, no render path for the secret at all. redaction works too, it's just an ongoing contract.

if anyone thinks the config preview should be accessible by readonly i can make the change

@rxtted

rxtted commented Jun 13, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php (1)

64-71: ⚡ Quick win

Icon column remains interactive in read-only mode with misleading tooltip.

The tooltip on line 64 still shows "make_primary" text when isReadOnly() is true, but clicking the icon does nothing (early return on line 67). This creates a confusing UX where users see an actionable tooltip but the click is silently ignored. The row action on line 84 correctly uses ->hidden() to avoid this problem.

Consider disabling the icon action or adjusting the tooltip in read-only mode:

💡 Suggested improvement
             IconColumn::make('primary')
                 ->icon(fn ($state) => match ($state) {
                     true => TablerIcon::StarFilled,
                     default => TablerIcon::Star,
                 })
                 ->color(fn ($state) => match ($state) {
                     true => 'warning',
                     default => 'gray',
                 })
-                ->tooltip(fn (Allocation $allocation) => trans('admin/server.' . ($allocation->id === $this->getOwnerRecord()->allocation_id ? 'already' : 'make') . '_primary'))
+                ->tooltip(fn (Allocation $allocation) => $this->isReadOnly()
+                    ? trans('admin/server.primary')
+                    : trans('admin/server.' . ($allocation->id === $this->getOwnerRecord()->allocation_id ? 'already' : 'make') . '_primary'))
                 ->action(function (Allocation $allocation) {
                     if ($this->isReadOnly()) {
                         return;
                     }

                     $this->getOwnerRecord()->update(['allocation_id' => $allocation->id]) && $this->deselectAllTableRecords();
                 })
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php`
around lines 64 - 71, The icon's tooltip and action are inconsistent in
read-only mode: update the relation manager's column definition so the
interactive icon is disabled when isReadOnly() is true—either by adding
->hidden(fn()=> $this->isReadOnly()) to the action/column or by changing the
tooltip callback to return a non-actionable label when $this->isReadOnly() (use
getOwnerRecord(), allocation_id, and Allocation in the same closure), and ensure
the action callback (which uses $this->getOwnerRecord()->update(...) and
$this->deselectAllTableRecords()) cannot be invoked in read-only mode; pick one
approach and apply it so the icon is non-interactive and tooltip reflects
read-only state.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/Traits/Filament/ServerDetailTabs.php`:
- Around line 839-854: The call to TransferServerService::handle(...) can return
false, but the code proceeds to delete unselected daemon backups and show a
success notification regardless; change the action closure in ServerDetailTabs
so you capture the result (e.g., $result = $transfer->handle(...)) and only run
the subsequent backup-deletion loop and emit the success Notification when
$result is truthy; if $result === false, short-circuit (or emit an error/failure
Notification) and do not delete backups or show success.

---

Nitpick comments:
In
`@app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php`:
- Around line 64-71: The icon's tooltip and action are inconsistent in read-only
mode: update the relation manager's column definition so the interactive icon is
disabled when isReadOnly() is true—either by adding ->hidden(fn()=>
$this->isReadOnly()) to the action/column or by changing the tooltip callback to
return a non-actionable label when $this->isReadOnly() (use getOwnerRecord(),
allocation_id, and Allocation in the same closure), and ensure the action
callback (which uses $this->getOwnerRecord()->update(...) and
$this->deselectAllTableRecords()) cannot be invoked in read-only mode; pick one
approach and apply it so the icon is non-interactive and tooltip reflects
read-only state.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 520b0dbf-fbf0-4253-9718-6757fa7ec9e2

📥 Commits

Reviewing files that changed from the base of the PR and between a22d0ea and 722edd3.

📒 Files selected for processing (7)
  • app/Filament/Admin/Resources/Servers/Pages/EditServer.php
  • app/Filament/Admin/Resources/Servers/Pages/ListServers.php
  • app/Filament/Admin/Resources/Servers/Pages/ViewServer.php
  • app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php
  • app/Filament/Admin/Resources/Servers/RelationManagers/DatabasesRelationManager.php
  • app/Filament/Admin/Resources/Servers/ServerResource.php
  • app/Traits/Filament/ServerDetailTabs.php

Comment thread app/Traits/Filament/ServerDetailTabs.php Outdated
@rxtted

rxtted commented Jun 13, 2026

Copy link
Copy Markdown
Contributor Author

i was trying different approaches to handling the schemas for node & server, as they're a little more complex with the lifecycle hooks and i didn't want to be too invasive. however i'll probably just end up consolidating them onto the resource class, like egg and the other read pages just with some changes to how the lifecycle hooks on the edit page hand off to and rehydrate the shared resource schema.

@rxtted

rxtted commented Jun 14, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
tests/Filament/Admin/ViewServerTest.php (1)

29-38: ⚡ Quick win

Role names may collide across tests causing flaky failures.

The serverRole() helper creates roles with fixed names like 'Server Viewer' or 'Server Editor'. If tests run in parallel or the database isn't reset between tests, Role::factory()->create(['name' => $name]) may fail on unique constraint violations since the same role names are reused across multiple tests.

Consider using unique role names per test or using firstOrCreate:

Suggested fix
 function serverRole(string $name, array $abilities): Role
 {
-    $role = Role::factory()->create(['name' => $name, 'guard_name' => 'web']);
+    $role = Role::firstOrCreate(
+        ['name' => $name, 'guard_name' => 'web'],
+        Role::factory()->make(['name' => $name, 'guard_name' => 'web'])->toArray()
+    );

     foreach ($abilities as $ability) {
         $role->givePermissionTo(Permission::findOrCreate($ability, 'web'));
     }

     return $role;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/Filament/Admin/ViewServerTest.php` around lines 29 - 38, The
serverRole() helper function creates roles with fixed names that can cause
unique constraint violations when tests run in parallel or the database isn't
properly reset between test runs. Replace the Role::factory()->create() call
with Role::firstOrCreate() to handle the case where a role with that name
already exists, preventing duplicate key errors while ensuring the correct role
permissions are assigned regardless of test execution order.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/Filament/Admin/Resources/Nodes/NodeResource.php`:
- Around line 676-692: The success notification in the action closure is
positioned outside the try-catch block, so it executes regardless of whether the
token reset succeeded or failed. When an exception occurs during the
$service->handle() call, users see both the warning notification and the success
notification, which is contradictory. Move the success notification that
displays trans('admin/node.token_reset') from line 689 into the try block
immediately after the $service->handle() call completes, ensuring it only fires
when the operation succeeds. Consider whether the $livewire->refreshFormData()
call should also be conditional on success.

In `@app/Filament/Admin/Resources/Servers/ServerResource.php`:
- Around line 780-783: Form fields in the ServerResource remain editable on view
pages because they lack operation-based disabled logic. Add `->disabled(fn
(string $operation) => $operation === 'view')` to disable fields when the
operation is 'view'. At
`app/Filament/Admin/Resources/Servers/ServerResource.php#L780-L783`, add this
disabled condition to the `StartupVariable` component. At the same file
`app/Filament/Admin/Resources/Servers/ServerResource.php#L786-L791`, add the
same disabled condition to the `CheckboxList` returned by
`getMountCheckboxList()`. This ensures both components become read-only on view
pages while remaining editable on create and edit pages.
- Around line 495-501: The formatStateUsing closure uses a match(true) statement
that does not account for null values returned by $get('swap'), which can occur
during initial form hydration before the record is loaded, causing the default
case to throw a LogicException. Add a null check to handle this case by adding a
condition before the other comparisons that returns a safe default value when
swap is null, or restructure the match statement to include a null-safe check
that prevents the exception from being thrown.

---

Nitpick comments:
In `@tests/Filament/Admin/ViewServerTest.php`:
- Around line 29-38: The serverRole() helper function creates roles with fixed
names that can cause unique constraint violations when tests run in parallel or
the database isn't properly reset between test runs. Replace the
Role::factory()->create() call with Role::firstOrCreate() to handle the case
where a role with that name already exists, preventing duplicate key errors
while ensuring the correct role permissions are assigned regardless of test
execution order.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0481f7d3-44a8-4fa1-a340-62eb07a8331a

📥 Commits

Reviewing files that changed from the base of the PR and between 722edd3 and 8a19578.

📒 Files selected for processing (9)
  • app/Filament/Admin/Resources/Nodes/NodeResource.php
  • app/Filament/Admin/Resources/Nodes/Pages/EditNode.php
  • app/Filament/Admin/Resources/Nodes/Pages/ViewNode.php
  • app/Filament/Admin/Resources/Servers/Pages/EditServer.php
  • app/Filament/Admin/Resources/Servers/Pages/ViewServer.php
  • app/Filament/Admin/Resources/Servers/ServerResource.php
  • tests/Filament/Admin/ViewEggTest.php
  • tests/Filament/Admin/ViewNodeTest.php
  • tests/Filament/Admin/ViewServerTest.php
🚧 Files skipped from review as they are similar to previous changes (2)
  • tests/Filament/Admin/ViewEggTest.php
  • tests/Filament/Admin/ViewNodeTest.php

Comment thread app/Filament/Admin/Resources/Nodes/NodeResource.php
Comment thread app/Filament/Admin/Resources/Servers/ServerResource.php
Comment thread app/Filament/Admin/Resources/Servers/ServerResource.php
@rxtted

rxtted commented Jun 14, 2026

Copy link
Copy Markdown
Contributor Author

ended up going with the consolidation. node and server sit on the resource as static detailtabs like egg now, traits gone. the lifecycle hooks i was wary about were fine in the end.

i did encounter some other unrelated bugs with some of the editpages, but because the changes on this one are heavy enough i'll pr those seperately

@rxtted

rxtted commented Jun 14, 2026

Copy link
Copy Markdown
Contributor Author

also i hid the diagnosticts tab as it's basically just the pull/upload/clear actions that hit wings, nothing on it is actually data you'd sit and read. so it has no real read only state to render, felt cleaner to drop it on view than leave a tab of dead buttons. any changes let me know, ready for review

@rxtted
rxtted marked this pull request as ready for review June 14, 2026 12:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add View pages for admin resources

1 participant