72 lines · 2.4 KB · TypeScript
RawDownload
import { useAtomValue } from "@effect/atom-react";import {  type AssetUrlState,  assetUrlStateFromResult,  EMPTY_ASSET_URL_ATOM,  resolveAssetUrl,} from "@t3tools/client-runtime/state/assets";import { squashAtomCommandFailure } from "@t3tools/client-runtime/state/runtime";import type { AssetResource, EnvironmentId } from "@t3tools/contracts";import { AsyncResult } from "effect/unstable/reactivity";import { useCallback, useMemo } from "react"; import { assetEnvironment } from "~/state/assets";import { usePreparedConnection } from "~/state/session";import { useAtomQueryRunner } from "~/state/use-atom-query-runner"; export { resolveAssetUrl, type AssetUrlState } from "@t3tools/client-runtime/state/assets"; export function useAssetUrlState(  environmentId: EnvironmentId | null,  resource: AssetResource | null,): AssetUrlState {  const preparedConnection = usePreparedConnection(environmentId);  const result = useAtomValue(    environmentId === null || resource === null      ? EMPTY_ASSET_URL_ATOM      : assetEnvironment.createUrl({ environmentId, input: { resource } }),  );  return assetUrlStateFromResult(    result,    preparedConnection._tag === "Some" ? preparedConnection.value.httpBaseUrl : null,  );} export function useAssetUrlRefresh(  environmentId: EnvironmentId | null,  resource: AssetResource | null,): () => Promise<void> {  const refresh = useAtomQueryRunner(assetEnvironment.createUrl, {    reportFailure: false,    refresh: true,  });  return useCallback(async () => {    if (environmentId === null || resource === null) return;    const result = await refresh({ environmentId, input: { resource } });    if (result._tag === "Failure") throw squashAtomCommandFailure(result);  }, [environmentId, resource, refresh]);} export function useAssetUrls(  environmentId: EnvironmentId,  resources: ReadonlyArray<AssetResource>,): ReadonlyArray<string | null> {  const preparedConnection = usePreparedConnection(environmentId);  const results = useAtomValue(    assetEnvironment.createUrls({      environmentId,      resources,    }),  );  return useMemo(    () =>      preparedConnection._tag === "None"        ? resources.map(() => null)        : results.map((result) =>            AsyncResult.isSuccess(result)              ? resolveAssetUrl(preparedConnection.value.httpBaseUrl, result.value.relativeUrl)              : null,          ),    [preparedConnection, resources, results],  );}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t