48 lines · 1.6 KB · TypeScript
RawDownload
import { useAtomValue } from "@effect/atom-react";import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets";import type { AssetResource, EnvironmentId } from "@t3tools/contracts";import { AsyncResult } from "effect/unstable/reactivity";import { useMemo } from "react"; import { assetEnvironment } from "~/state/assets";import { usePreparedConnection } from "~/state/session"; export { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; export function useAssetUrl(environmentId: EnvironmentId, resource: AssetResource): string | null {  const preparedConnection = usePreparedConnection(environmentId);  const result = useAtomValue(    assetEnvironment.createUrl({      environmentId,      input: { resource },    }),  );  if (preparedConnection._tag === "None" || result._tag !== "Success") {    return null;  }  return resolveAssetUrl(preparedConnection.value.httpBaseUrl, result.value.relativeUrl);} 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],  );}