diff --git a/packages/components/add-provider/package.json b/packages/components/add-provider/package.json index dad9a71..9f28286 100644 --- a/packages/components/add-provider/package.json +++ b/packages/components/add-provider/package.json @@ -9,6 +9,7 @@ "dependencies": { "@echo/core-types": "^1.0.0", "@echo/components-provider-status": "^1.0.0", + "@echo/components-shared-controllers": "^1.0.0", "@echo/services-bootstrap-runtime": "^1.0.0", "effect": "^3.6.5", "lit": "^3.2.0", diff --git a/packages/components/add-provider/src/add-provider.ts b/packages/components/add-provider/src/add-provider.ts index cccf5c7..11fa325 100644 --- a/packages/components/add-provider/src/add-provider.ts +++ b/packages/components/add-provider/src/add-provider.ts @@ -3,14 +3,14 @@ import { type FolderMetadata, type ProviderMetadata, } from "@echo/core-types"; -import { Task } from "@lit/task"; import { LitElement, html } from "lit"; import { customElement, property } from "lit/decorators.js"; -import { getOrCreateRuntime } from "@echo/services-bootstrap-runtime"; import type { ProviderLoadedEvent } from "./provider-loader"; import "@echo/components-provider-status"; import "./provider-loader"; import "./select-root"; +import { EffectController } from "@echo/components-shared-controllers"; +import { Match } from "effect"; type ProviderStatus = | { _tag: "LoadingProviders" } @@ -27,34 +27,44 @@ export class AddProvider extends LitElement { @property() private _providerStatus: ProviderStatus = { _tag: "LoadingProviders" }; - // @ts-expect-error "Task executes automatically" - private _availableProvidersTask = new Task(this, { - task: () => - getOrCreateRuntime() - .runPromise(AddProviderWorkflow.availableProviders) - .then((availableProviders) => { - this._providerStatus = { - _tag: "ProvidersLoaded", - availableProviders, - }; - }), - args: () => [], - }); + connectedCallback(): void { + super.connectedCallback(); + + new EffectController(this, AddProviderWorkflow.availableProviders, { + complete: (availableProviders) => { + this._providerStatus = { + _tag: "ProvidersLoaded", + availableProviders, + }; + }, + }); + } render() { - return this._providerStatus._tag === "LoadingProviders" - ? html`