export function useAliases()

in frontend/src/hooks/api/aliases.ts [55:142]


export function useAliases(): {
  randomAliasData: SWRResponse<RandomAliasData[], unknown>;
  customAliasData: SWRResponse<CustomAliasData[], unknown>;
  create: AliasCreateFn;
  update: AliasUpdateFn;
  delete: AliasDeleteFn;
} {
  const randomAliases: SWRResponse<RandomAliasData[], unknown> =
    useApiV1("/relayaddresses/");
  const customAliases: SWRResponse<CustomAliasData[], unknown> =
    useApiV1("/domainaddresses/");

  const randomAliasData = {
    ...randomAliases,
    data: randomAliases.data,
  };
  const customAliasData = {
    ...customAliases,
    data: customAliases.data,
  };

  const createAlias: AliasCreateFn = async (options) => {
    if (options.mask_type === "custom") {
      const body: Partial<CustomAliasData> = {
        enabled: true,
        address: options.address,
        block_list_emails: options.blockPromotionals,
      };
      const response = await apiFetch("/domainaddresses/", {
        method: "POST",
        body: JSON.stringify(body),
      });
      customAliases.mutate();
      return response;
    }

    const body: Partial<RandomAliasData> = { enabled: true };
    const response = await apiFetch("/relayaddresses/", {
      method: "POST",
      body: JSON.stringify(body),
    });
    randomAliases.mutate();
    return response;
  };

  const updateAlias: AliasUpdateFn = async (alias, updatedFields) => {
    const endpoint =
      alias.mask_type === "random"
        ? `/relayaddresses/${alias.id}/`
        : `/domainaddresses/${alias.id}/`;

    const response = await apiFetch(endpoint, {
      method: "PATCH",
      body: JSON.stringify(updatedFields),
    });
    if (alias.mask_type === "random") {
      randomAliases.mutate();
    } else {
      customAliases.mutate();
    }
    return response;
  };

  const deleteAlias: AliasDeleteFn = async (aliasData) => {
    const endpoint =
      aliasData.mask_type === "random"
        ? `/relayaddresses/${aliasData.id}/`
        : `/domainaddresses/${aliasData.id}/`;

    const response = await apiFetch(endpoint, {
      method: "DELETE",
    });
    if (aliasData.mask_type === "random") {
      randomAliases.mutate();
    } else {
      customAliases.mutate();
    }
    return response;
  };

  return {
    randomAliasData: randomAliasData,
    customAliasData: customAliasData,
    create: createAlias,
    update: updateAlias,
    delete: deleteAlias,
  };
}