filamentphp / filament

A collection of beautiful full-stack components for Laravel. The perfect starting point for your next app. Using Livewire, Alpine.js and Tailwind CSS.
https://filamentphp.com
MIT License
18.08k stars 2.83k forks source link

Error "Unable to find component" encountered after triggering live function #7892

Closed StringKe closed 1 year ago

StringKe commented 1 year ago

Package

filament/filament

Package Version

v3.0.26

Laravel Version

v10.19.0

Livewire Version

v3.0@beta

PHP Version

v8.2.8

Problem description

Unable to find component: [app.filament.company.pages.tenancy.create-company]

After adding this part of the code, an error occurs and live is not executed correctly. https://github.com/StringKe/report-filamentphp-error/blob/main/app/Filament/Company/Pages/Tenancy/CreateCompany.php#L31-L38

video: https://share.cleanshot.com/7k5lDPmm

Expected behavior

Be able to execute live correctly and update the data.

Steps to reproduce

  1. Installation of dependencies (composer install && npm install)
  2. npm run dev
  3. migration databases
  4. open /company
  5. registry a user
  6. open /company/new
  7. entering a name that triggers a blur will result in an error

Reproduction repository

https://github.com/StringKe/report-filamentphp-error

Relevant log output

[2023-08-18 10:19:34] local.ERROR: Unable to find component: [app.filament.company.pages.tenancy.create-company] {"userId":1,"exception":"[object] (Livewire\\Exceptions\\ComponentNotFoundException(code: 0): Unable to find component: [app.filament.company.pages.tenancy.create-company] at /Users/chen/Herd/scaling/vendor/livewire/livewire/src/Mechanisms/ComponentRegistry.php:126)
[stacktrace]
#0 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/Mechanisms/ComponentRegistry.php(35): Livewire\\Mechanisms\\ComponentRegistry->getNameAndClass('app.filament.co...')
#1 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/LivewireManager.php(57): Livewire\\Mechanisms\\ComponentRegistry->new('app.filament.co...', 'x0xmAdS7BSW4UmW...')
#2 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php(138): Livewire\\LivewireManager->new('app.filament.co...', 'x0xmAdS7BSW4UmW...')
#3 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/Mechanisms/HandleComponents/HandleComponents.php(98): Livewire\\Mechanisms\\HandleComponents\\HandleComponents->fromSnapshot(Array)
#4 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/LivewireManager.php(96): Livewire\\Mechanisms\\HandleComponents\\HandleComponents->update(Array, Array, Array)
#5 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/Mechanisms/HandleRequests/HandleRequests.php(85): Livewire\\LivewireManager->update(Array, Array, Array)
#6 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(46): Livewire\\Mechanisms\\HandleRequests\\HandleRequests->handleUpdate()
#7 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Livewire\\Mechanisms\\HandleRequests\\HandleRequests), 'handleUpdate')
#8 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#9 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\\Routing\\Route->run()
#10 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#11 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#12 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#13 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#14 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#15 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#16 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#17 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#18 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure))
#19 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#20 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#26 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Router.php(777): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#27 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Router.php(741): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#28 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Routing/Router.php(730): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#29 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#30 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#31 /Users/chen/Herd/scaling/vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(36): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#39 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#40 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#41 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#42 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#43 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#44 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#45 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#46 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#47 /Users/chen/Herd/scaling/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#48 /Users/chen/Herd/scaling/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#49 /Users/chen/.composer/vendor/laravel/valet/server.php(110): require('/Users/chen/Her...')
#50 {main}
"}
StringKe commented 1 year ago

It seems to be the namespace that is causing the problem? But why?

Success: namespace App\Filament\Pages\Tenancy;

{
    "data": {
        ...
    },
    "memo": {
        "id": "ATv0P0GVuW0YEyrlMCP1",
        "name": "app.filament.pages.tenancy.create-company",
        "path": "company\/new",
        "method": "GET",
        "children": [],
        "lazyLoaded": true,
        "errors": [],
        "locale": "en"
    },
    "checksum": "11dc1654b9d852a260ce0b40c1b775e395861fc82e5ef2dcf7a242e61429d346"
}

Error: namespace App\Filament\Company\Pages\Tenancy;

{
    "data": {
        ...
    },
    "memo": {
        "id": "6atcwEsej8kDCvGPCnge",
        "name": "app.filament.company.pages.tenancy.create-company",
        "path": "company\/new",
        "method": "GET",
        "children": [],
        "lazyLoaded": true,
        "errors": [],
        "locale": "en"
    },
    "checksum": "69ebe0b5fec631f281c9df006e241cbf6011d75f9811d703c9cf2407cb5593f5"
}

I checked the source code and found that.

https://github.com/filamentphp/filament/blob/HEAD/packages/panels/src/Panel/Concerns/HasComponents.php#L359-L376

Did HasComponents forget to register the multi-tenant components?

danharrin commented 1 year ago

I think the problem here is that your CompanyPanelProvider does not register the correct namespace for pages? https://github.com/StringKe/report-filamentphp-error/blob/main/app/Providers/Filament/CompanyPanelProvider.php

StringKe commented 1 year ago

@danharrin Sorry I didn't understand, can you elaborate?

The namespaces I've checked don't have typo errors and are all in the correct directory (the one I think is correct).

danharrin commented 1 year ago

Check discoverPages() in the company provider. It's using App/Filament/Pages instead of App/Filament/Company/Pages. That's how components get registered

StringKe commented 1 year ago

I understand! Thank you @danharrin .

I have some confusion about the fact that the login / registry components are registered by default in filament, but why is the multi-tenant login / register excluded?

danharrin commented 1 year ago

Because Login and Register are not pages that are "discovered", they do not need to be in your Pages directory unless you need to customize them. Whereas you cannot use the tenant registration page without there being a file.

ehs4nm commented 1 year ago

I got this Error: "Unable to locate component: [filament.livewire.notifications]." Hello, I encountered a similar issue. I attempted to utilize specific namespaces and modify the namespaces within the AdminPanelProvider in the discoverPages() function, but unfortunately, I haven't achieved the desired outcome.

My objective is to integrate a mobile verification page with the forgot password functionality. The process involves transitioning from the input of a mobile number (the action button to run 'request' and) to sending a 4-digit verification code. Subsequently, the Livewire page that I developed becomes visible. However, I'm encountering an issue within the 'request' action section of the VerifyMobile page. When a user enters an incorrect verification code, an error message appears: "Unable to locate component: [filament.livewire.notifications]."

This error doesn't come up when the user inputs the correct verification code, as the page successfully redirects to the admin panel.

Here is the repo: https://github.com/ehs4nm/filament3

Thanks for the time and this great Filamentphp panel, its magic!