| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import { StabilityPath, StoreKey } from "@/app/constant";
- import { showToast } from "@/app/components/ui-lib";
- import { getHeaders } from "@/app/client/api";
- import { createPersistStore } from "@/app/utils/store";
- import { nanoid } from "nanoid";
- import { uploadImage, base64Image2Blob } from "@/app/utils/chat";
- export const useSdStore = createPersistStore<
- {
- currentId: number;
- draw: any[];
- },
- {
- getNextId: () => number;
- sendTask: (data: any, okCall?: Function) => void;
- updateDraw: (draw: any) => void;
- }
- >(
- {
- currentId: 0,
- draw: [],
- },
- (set, _get) => {
- function get() {
- return {
- ..._get(),
- ...methods,
- };
- }
- const methods = {
- getNextId() {
- const id = ++_get().currentId;
- set({ currentId: id });
- return id;
- },
- sendTask(data: any, okCall?: Function) {
- data = { ...data, id: nanoid(), status: "running" };
- set({ draw: [data, ..._get().draw] });
- this.getNextId();
- this.stabilityRequestCall(data);
- okCall?.();
- },
- stabilityRequestCall(data: any) {
- const formData = new FormData();
- for (let paramsKey in data.params) {
- formData.append(paramsKey, data.params[paramsKey]);
- }
- const headers = getHeaders();
- delete headers["Content-Type"];
- fetch(`/api/stability/${StabilityPath.GeneratePath}/${data.model}`, {
- method: "POST",
- headers: {
- ...headers,
- Accept: "application/json",
- },
- body: formData,
- })
- .then((response) => response.json())
- .then((resData) => {
- if (resData.errors && resData.errors.length > 0) {
- this.updateDraw({
- ...data,
- status: "error",
- error: resData.errors[0],
- });
- this.getNextId();
- return;
- }
- if (resData.finish_reason === "SUCCESS") {
- const self = this;
- uploadImage(base64Image2Blob(resData.image, "image/png"))
- .then((img_data) => {
- console.debug("uploadImage success", img_data, self);
- self.updateDraw({
- ...data,
- status: "success",
- img_data,
- });
- })
- .catch((e) => {
- console.error("uploadImage error", e);
- self.updateDraw({
- ...data,
- status: "error",
- error: JSON.stringify(resData),
- });
- });
- } else {
- self.updateDraw({
- ...data,
- status: "error",
- error: JSON.stringify(resData),
- });
- }
- this.getNextId();
- })
- .catch((error) => {
- this.updateDraw({ ...data, status: "error", error: error.message });
- console.error("Error:", error);
- this.getNextId();
- });
- },
- updateDraw(_draw: any) {
- const draw = _get().draw || [];
- draw.some((item, index) => {
- if (item.id === _draw.id) {
- draw[index] = _draw;
- set(() => ({ draw }));
- return true;
- }
- });
- },
- };
- return methods;
- },
- {
- name: StoreKey.SdList,
- version: 1.0,
- },
- );
|