/ client / src / pages / filaments / functions.ts
functions.ts
 1  import { ExternalFilament } from "../../utils/queryExternalDB";
 2  import { getAPIURL } from "../../utils/url";
 3  import { getOrCreateVendorFromExternal } from "../vendors/functions";
 4  import { IFilament } from "./model";
 5  
 6  /**
 7   * Create a new internal filament given an external filament object.
 8   * Returns the created internal filament.
 9   */
10  export async function createFilamentFromExternal(externalFilament: ExternalFilament): Promise<IFilament> {
11    const vendor = await getOrCreateVendorFromExternal(externalFilament.manufacturer);
12  
13    let color_hex: string | undefined = undefined;
14    let multi_color_hexes: string | undefined = undefined;
15    let multi_color_direction: string | undefined = undefined;
16    if (externalFilament.color_hex) {
17      color_hex = externalFilament.color_hex;
18    } else if (externalFilament.color_hexes && externalFilament.color_hexes.length > 0) {
19      multi_color_hexes = externalFilament.color_hexes.join(",");
20      multi_color_direction = externalFilament.multi_color_direction;
21    }
22  
23    const body: Omit<IFilament, "id" | "registered" | "extra"> & { vendor_id: number } = {
24      name: externalFilament.name,
25      material: externalFilament.material,
26      vendor_id: vendor.id,
27      density: externalFilament.density,
28      diameter: externalFilament.diameter,
29      weight: externalFilament.weight,
30      spool_weight: externalFilament.spool_weight || undefined,
31      color_hex: color_hex,
32      multi_color_hexes: multi_color_hexes,
33      multi_color_direction: multi_color_direction,
34      settings_extruder_temp: externalFilament.extruder_temp || undefined,
35      settings_bed_temp: externalFilament.bed_temp || undefined,
36      external_id: externalFilament.id,
37    };
38  
39    const response = await fetch(getAPIURL() + "/filament", {
40      method: "POST",
41      headers: {
42        "Content-Type": "application/json",
43      },
44      body: JSON.stringify(body),
45    });
46    if (!response.ok) {
47      throw new Error("Network response was not ok");
48    }
49    return response.json();
50  }