diff --git a/frontend/app.vue b/frontend/app.vue
index d570ea3..8793e66 100644
--- a/frontend/app.vue
+++ b/frontend/app.vue
@@ -35,6 +35,6 @@ const closeModal = () => {
/>
-
+
diff --git a/frontend/assets/css/button.comp.css b/frontend/assets/css/button.comp.css
index 76cf8de..d1bff66 100644
--- a/frontend/assets/css/button.comp.css
+++ b/frontend/assets/css/button.comp.css
@@ -53,7 +53,7 @@
}
&:hover {
- @apply bg-blue-200 border-blue-500 text-blue-500;
+ @apply bg-transparent border-blue-500 text-blue-500;
svg[class~="iconify"] path {
@apply stroke-blue-500;
diff --git a/frontend/components/cart/checkout/Gateway.vue b/frontend/components/cart/checkout/Gateway.vue
new file mode 100644
index 0000000..e38d385
--- /dev/null
+++ b/frontend/components/cart/checkout/Gateway.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+ {{ gateway.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/components/cart/delivery/AddressModal.vue b/frontend/components/cart/delivery/AddressModal.vue
index c8a33f5..e71c1eb 100644
--- a/frontend/components/cart/delivery/AddressModal.vue
+++ b/frontend/components/cart/delivery/AddressModal.vue
@@ -43,6 +43,7 @@ const addressData = ref({
: address.value?.for_me == true
? "بله"
: "خیر",
+ is_main: address.value?.is_main ?? false,
});
// queries
@@ -67,6 +68,7 @@ const closeModal = () => {
name: "",
phone: "",
for_me: "بله",
+ is_main: false,
};
}
isShow.value = false;
@@ -253,6 +255,16 @@ watch(
class="flex items-center field-sizing-content resize-none bg-slate-50 border-slate-200 hover:border-black focus:border-black max-h-[10rem] text-black justify-between cursor-text transition-all border-[1.5px] gap-3 typo-label-md px-4 py-3.5 selection:bg-slate-100 rounded-100 outline-none flex-1 !text-sm placeholder-slate-400"
>
+
+
+
+ به عنوان آدرس پیش فرض ثبت شود؟
+
+
+
diff --git a/frontend/components/cart/global/CartSummary.vue b/frontend/components/cart/global/CartSummary.vue
index fe35394..2172d2b 100644
--- a/frontend/components/cart/global/CartSummary.vue
+++ b/frontend/components/cart/global/CartSummary.vue
@@ -21,17 +21,19 @@ const discountCode = ref(cart.value?.discount_code?.code || "");
const {
mutateAsync: submitDiscountCode,
- isPending: submitDiscountCodeIsPending
+ isPending: submitDiscountCodeIsPending,
} = useSubmitDiscountCode();
const {
mutateAsync: deleteDiscountCode,
- isPending: deleteDiscountCodeIsPending
+ isPending: deleteDiscountCodeIsPending,
} = useDeleteDiscountCode();
// computed
-const nextPage = computed(() => route.meta.nextPage as { name: string; label: string } | undefined);
+const nextPage = computed(
+ () => route.meta.nextPage as { name: string; label: string } | undefined
+);
const hasSubmittedDiscountCode = computed(() => !!cart.value?.discount_code);
@@ -48,11 +50,11 @@ const handleSubmitDiscountCode = () => {
addToast({
message: "خطایی در ثبت کد تخفیف رخ داد",
options: {
- status: "error"
- }
+ status: "error",
+ },
});
discountCode.value = "";
- }
+ },
}
);
};
@@ -67,11 +69,11 @@ const handleDeleteDiscountCode = () => {
addToast({
message: "خطایی در حذف کد تخفیف رخ داد",
options: {
- status: "error"
- }
+ status: "error",
+ },
});
discountCode.value = "";
- }
+ },
});
};
diff --git a/frontend/components/global/Brands.vue b/frontend/components/global/Brands.vue
index ca209e9..d8cfe08 100644
--- a/frontend/components/global/Brands.vue
+++ b/frontend/components/global/Brands.vue
@@ -12,42 +12,55 @@ const {} = toRefs(props);
-
+
+
+
+ مجله در ستون و سطرآنچ
+
+
+ لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و
+ متون بلکه روزنامه و مجله در ستون و سطرآنچنان که
+
+
-
- TEST {{ i }}
-
-
- TEST {{ i }}
-
+
+
+ HEYMLZ
+
+
+
+
+
+ HEYMLZ
+
+
+
-
- TEST {{ i }}
-
-
- TEST {{ i }}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/components/global/ProductsGrid.vue b/frontend/components/global/ProductsGrid.vue
index a0565df..2edbb1f 100644
--- a/frontend/components/global/ProductsGrid.vue
+++ b/frontend/components/global/ProductsGrid.vue
@@ -26,7 +26,7 @@ withDefaults(defineProps
(), {
diff --git a/frontend/components/home/Categories.vue b/frontend/components/home/Categories.vue
index 06ec0dd..eb01a3b 100644
--- a/frontend/components/home/Categories.vue
+++ b/frontend/components/home/Categories.vue
@@ -25,28 +25,27 @@ const onSwiper = (swiper: SwiperClass) => {
class="flex flex-col justify-center gap-4 bg-black h-[150svh] relative overflow-hidden"
>
-
-
-
-
-
+
+
+
+ دسته بندی ها
+
+
+ لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها
+ و
+ متون بلکه روزنامه و مجله در ستون و سطرآنچنان که
+
+
+
-
{
-
مشاهده همه دسته ها
diff --git a/frontend/components/home/LatestStories.vue b/frontend/components/home/LatestStories.vue
index 98088bc..85fbeb2 100644
--- a/frontend/components/home/LatestStories.vue
+++ b/frontend/components/home/LatestStories.vue
@@ -20,7 +20,7 @@ await suspense();
مقالات اخیر سایت
-
نمایش همه
diff --git a/frontend/components/home/Preview.vue b/frontend/components/home/Preview.vue
index 897ac08..8622cf5 100644
--- a/frontend/components/home/Preview.vue
+++ b/frontend/components/home/Preview.vue
@@ -15,6 +15,13 @@ const activeSlideVideo = ref<"left" | "right" | "none">("none");
const draggableEl = ref(null);
const previewContainerEl = ref(null);
+const heymlzElement = useTemplateRef("heymlzElement");
+const heymlzElementIsVisible = useElementVisibility(heymlzElement, {
+ rootMargin: "0px 0px -40% 0px"
+});
+
+const showHeymlzAnimation = ref(false);
+
const { x: dragAxisX } = useDraggable(draggableEl, {
initialValue: { x: 0, y: 0 },
axis: "x"
@@ -22,6 +29,17 @@ const { x: dragAxisX } = useDraggable(draggableEl, {
// watch
+watch(heymlzElementIsVisible, (newValue) => {
+ if (newValue) {
+ showHeymlzAnimation.value = true;
+ setTimeout(() => {
+ showHeymlzAnimation.value = false;
+ }, 3200);
+ }
+}, {
+ once: true
+});
+
watch(() => clipPathPercent.value, (newValue) => {
if (newValue > 80) {
activeSlideVideo.value = "right";
@@ -62,7 +80,8 @@ watch(
-
+
@@ -135,7 +162,7 @@ watch(
>
{{ homeData!.difreance_section.description1 }}
diff --git a/frontend/components/home/ProductsShowcase.vue b/frontend/components/home/ProductsShowcase.vue
index f1f19b5..4bb2c84 100644
--- a/frontend/components/home/ProductsShowcase.vue
+++ b/frontend/components/home/ProductsShowcase.vue
@@ -92,7 +92,6 @@ onUnmounted(() => {
:to="slide.link"
class="showcase-slide origin-bottom absolute size-full bg-transparent flex items-center justify-center"
>
-
{
}"
alt=""
/>
-
+
{{ slide.title }}
@@ -110,8 +109,9 @@ onUnmounted(() => {
مشاهده دسته بندی
diff --git a/frontend/components/product/ChatBox/AiLoading.vue b/frontend/components/product/ChatBox/AiLoading.vue
index 6dba1e2..52ab73e 100644
--- a/frontend/components/product/ChatBox/AiLoading.vue
+++ b/frontend/components/product/ChatBox/AiLoading.vue
@@ -21,18 +21,18 @@ const { circle } = toRefs(props);
-
diff --git a/frontend/components/product/ChatBox/ChatBoxContainer.vue b/frontend/components/product/ChatBox/ChatBoxContainer.vue
index 677dcb2..3e40912 100644
--- a/frontend/components/product/ChatBox/ChatBoxContainer.vue
+++ b/frontend/components/product/ChatBox/ChatBoxContainer.vue
@@ -20,6 +20,8 @@ const { isLoggedIn } = useAuth();
const route = useRoute();
const id = route.params.id as string | number;
+const scrollToBottomTimer = ref
(null);
+
const chatContainerEl = ref(null);
const lastMessageBeforeUpdate = ref(0);
@@ -63,7 +65,10 @@ useInfiniteScroll(
// methods
const scrollToBottom = () => {
- chatContainerScrollY.value = chatContainerEl.value?.scrollHeight ?? 0;
+ if (scrollToBottomTimer.value) clearTimeout(scrollToBottomTimer.value);
+ scrollToBottomTimer.value = setTimeout(() => {
+ chatContainerScrollY.value = chatContainerEl.value?.scrollHeight ?? 0;
+ }, 50);
};
// computed
@@ -137,8 +142,7 @@ whenever(
>
diff --git a/frontend/components/product/ChatBox/ChatInput.vue b/frontend/components/product/ChatBox/ChatInput.vue
index d59a17c..cb9a21f 100644
--- a/frontend/components/product/ChatBox/ChatInput.vue
+++ b/frontend/components/product/ChatBox/ChatInput.vue
@@ -7,6 +7,9 @@ import { useToast } from "~/composables/global/useToast";
// state
+const route = useRoute();
+const id = route.params.id as string | number;
+
const { $queryClient: queryClient } = useNuxtApp();
const { addToast } = useToast();
@@ -27,7 +30,7 @@ const sendMessage = async () => {
await createMessage({
new_message: value,
- productId: 1,
+ productId: id,
});
} catch (e) {
addToast({
diff --git a/frontend/components/product/ChatBox/ChatMessage.vue b/frontend/components/product/ChatBox/ChatMessage.vue
index 8728ebb..0c351f4 100644
--- a/frontend/components/product/ChatBox/ChatMessage.vue
+++ b/frontend/components/product/ChatBox/ChatMessage.vue
@@ -54,13 +54,12 @@ onMounted(() => {
`#chat-message-content-${id.value}`,
{
text: "",
- duration: 2.5,
ease: "none",
},
{
text: { value: content.value, rtl: false },
- duration: 2.5,
ease: "none",
+ duration: 2.5,
onUpdate: () => emit("textUpdate"),
}
);
@@ -78,9 +77,9 @@ onMounted(() => {
-
diff --git a/frontend/components/profile/index/ProfilePictureModal.vue b/frontend/components/profile/index/ProfilePictureModal.vue
index 046e7a7..5674c7e 100644
--- a/frontend/components/profile/index/ProfilePictureModal.vue
+++ b/frontend/components/profile/index/ProfilePictureModal.vue
@@ -45,11 +45,11 @@ const {
});
const avatars = ref([
- "/avatars/1.jpg",
- "/avatars/2.jpg",
- "/avatars/3.jpg",
- "/avatars/4.jpg",
- "/avatars/5.jpg",
+ "/img/avatars/1.jpg",
+ "/img/avatars/2.jpg",
+ "/img/avatars/3.jpg",
+ "/img/avatars/4.jpg",
+ "/img/avatars/5.jpg",
]);
// queries
@@ -134,11 +134,7 @@ onFileDialogChange((files: any) => {
-
+
-
تغییر وضعیت سفارش
+
تغییر وضعیت سفارش
|
۲۳ تیر
diff --git a/frontend/components/profile/tickets/[id]/TicketBubble.vue b/frontend/components/profile/tickets/[id]/TicketBubble.vue
index 42bfdf6..fb5acf0 100644
--- a/frontend/components/profile/tickets/[id]/TicketBubble.vue
+++ b/frontend/components/profile/tickets/[id]/TicketBubble.vue
@@ -33,8 +33,8 @@ const profile = computed(() => {
return is_user.value
? account.value?.profile_photo
? account.value?.profile_photo
- : "/avatars/1.jpg"
- : "/avatars/3.jpg";
+ : "/img/avatars/1.jpg"
+ : "/img/avatars/3.jpg";
});
const username = computed(() => {
diff --git a/frontend/composables/api/account/useCreateOrUpdateAddress.ts b/frontend/composables/api/account/useCreateOrUpdateAddress.ts
index a2f978b..f1ca8a8 100644
--- a/frontend/composables/api/account/useCreateOrUpdateAddress.ts
+++ b/frontend/composables/api/account/useCreateOrUpdateAddress.ts
@@ -5,7 +5,7 @@ import { API_ENDPOINTS } from "~/constants";
// types
-export type CreateOrUpdateAddressResponse = Omit;
+export type CreateOrUpdateAddressResponse = Address;
const useCreateOrUpdateAddress = (update: ComputedRef) => {
// state
diff --git a/frontend/composables/api/chat/useGetChat.ts b/frontend/composables/api/chat/useGetChat.ts
index 927af3e..447076b 100644
--- a/frontend/composables/api/chat/useGetChat.ts
+++ b/frontend/composables/api/chat/useGetChat.ts
@@ -6,9 +6,9 @@ import { useAuth } from "~/composables/api/auth/useAuth";
// types
-export type GetBranchResponse = ApiPaginated;
+export type GetChatResponse = ApiPaginated;
-const useGetBranch = (productId: string | number, enabled: Ref) => {
+const useGetChat = (productId: string | number, enabled: Ref) => {
// state
const { $axios: axios } = useNuxtApp();
@@ -26,7 +26,7 @@ const useGetBranch = (productId: string | number, enabled: Ref) => {
limit: number;
offset: number;
}) => {
- const { data } = await axios.get(
+ const { data } = await axios.get(
`${API_ENDPOINTS.chat.messages}/${productId}`,
{
params: {
@@ -65,4 +65,4 @@ const useGetBranch = (productId: string | number, enabled: Ref) => {
});
};
-export default useGetBranch;
+export default useGetChat;
diff --git a/frontend/composables/api/orders/useSetOrderAddress.ts b/frontend/composables/api/orders/useSetOrderAddress.ts
new file mode 100644
index 0000000..bc239f6
--- /dev/null
+++ b/frontend/composables/api/orders/useSetOrderAddress.ts
@@ -0,0 +1,33 @@
+// imports
+
+import { useMutation } from "@tanstack/vue-query";
+import { API_ENDPOINTS } from "~/constants";
+
+// types
+
+export type SetOrderAddressRequest = {
+ address_id: number;
+};
+
+const useSetOrderAddress = () => {
+ // state
+
+ const { $axios: axios } = useNuxtApp();
+
+ // methods
+
+ const handleSetOrderAddress = async (params: SetOrderAddressRequest) => {
+ const { data } = await axios.post(
+ API_ENDPOINTS.orders.delivery.set_address,
+ { ...params }
+ );
+ return data;
+ };
+
+ return useMutation({
+ mutationFn: (AddressData: SetOrderAddressRequest) =>
+ handleSetOrderAddress(AddressData),
+ });
+};
+
+export default useSetOrderAddress;
diff --git a/frontend/constants/index.ts b/frontend/constants/index.ts
index a11407a..20c0f3f 100644
--- a/frontend/constants/index.ts
+++ b/frontend/constants/index.ts
@@ -53,6 +53,12 @@ export const API_ENDPOINTS = {
add_discount: "/order/cart/discount",
delete_discount: "/order/cart/discount",
},
+ delivery: {
+ set_address: "/order/cart/set-address",
+ },
+ checkout: {
+ payment: "/order/cart/payment",
+ },
},
};
diff --git a/frontend/pages/cart/checkout.vue b/frontend/pages/cart/checkout.vue
index 4fe5265..6a41544 100644
--- a/frontend/pages/cart/checkout.vue
+++ b/frontend/pages/cart/checkout.vue
@@ -1,6 +1,8 @@
@@ -64,24 +84,13 @@ const selectedGateway = ref(paymentGateways.value[0]);
-
-
-
-
-
- {{ gateway.title }}
-
-
+ :index="index"
+ :gateway="gateway"
+ :isSelected="selectedGateway?.id == gateway.id"
+ @select="selectedGateway = { ...gateway }"
+ />
diff --git a/frontend/pages/cart/delivery.vue b/frontend/pages/cart/delivery.vue
index 568a7f3..5b3774b 100644
--- a/frontend/pages/cart/delivery.vue
+++ b/frontend/pages/cart/delivery.vue
@@ -2,6 +2,9 @@
// imports
import useGetAllAddress from "~/composables/api/account/useGetAllAddress";
+import useSetOrderAddress from "~/composables/api/orders/useSetOrderAddress";
+import { useToast } from "~/composables/global/useToast";
+import { QUERY_KEYS } from "~/constants";
// meta
@@ -24,10 +27,26 @@ type DeliveryData = {
};
};
+// queries
+
+const { data: addresses, isLoading: addressesIsLoading } = useGetAllAddress();
+
+const { mutateAsync: setOrderAddress, isPending: setOrderAddressIsPending } =
+ useSetOrderAddress();
+
+// computed
+
+const selectedAddress = computed(() => {
+ return addresses.value?.find((i) => i.is_main) ?? null;
+});
+
// state
+const { $queryClient: queryClient } = useNuxtApp();
+const { addToast } = useToast();
+
const deliveryData = ref({
- address: null,
+ address: selectedAddress.value,
deliveryMethod: {
peyk: false,
pishtaz: true,
@@ -35,26 +54,57 @@ const deliveryData = ref({
},
});
-const { data: addresses, isLoading: addressesIsLoading } = useGetAllAddress();
-
// methods
const handleSelectAddress = (address: Address) => {
deliveryData.value.address = { ...address };
};
+
+// watch
+
+whenever(
+ () => deliveryData.value.address,
+ (nv) => {
+ setOrderAddress(
+ { address_id: nv.id! },
+ {
+ onSettled: () => {
+ queryClient.invalidateQueries({
+ queryKey: [QUERY_KEYS.addresses],
+ });
+ },
+ onError: () => {
+ addToast({
+ message: "در انتخاب آدرس خطایی رخ داد",
+ options: {
+ description: "لطفا مجدد تلاش کنید",
+ },
+ });
+ },
+ }
+ );
+ },
+ {
+ deep: true,
+ }
+);
-
آدرس های شما
-
-
+ آدرس های شما
+
+
+
+
-
diff --git a/frontend/pages/index.vue b/frontend/pages/index.vue
index c865955..be910f0 100644
--- a/frontend/pages/index.vue
+++ b/frontend/pages/index.vue
@@ -15,7 +15,6 @@ const disableLoadingOverlay = useState("disableLoadingOverlay", () => false);
const response = await suspense();
if (response.isError) {
- console.log(response);
throw createError({
statusCode: 500,
statusMessage: `Landing error : ${response.error.message}`
diff --git a/frontend/plugins/tanstack.ts b/frontend/plugins/tanstack.ts
index 231859c..cfcfea4 100644
--- a/frontend/plugins/tanstack.ts
+++ b/frontend/plugins/tanstack.ts
@@ -1,12 +1,12 @@
import type {
DehydratedState,
- VueQueryPluginOptions
+ VueQueryPluginOptions,
} from "@tanstack/vue-query";
import {
VueQueryPlugin,
QueryClient,
hydrate,
- dehydrate
+ dehydrate,
} from "@tanstack/vue-query";
import { defineNuxtPlugin, useState } from "#imports";
@@ -15,7 +15,12 @@ export default defineNuxtPlugin((nuxt) => {
const vueQueryState = useState("vue-query");
const queryClient = new QueryClient({
- defaultOptions: { queries: { staleTime: 5000 } }
+ defaultOptions: {
+ queries: {
+ staleTime: 5000,
+ experimental_prefetchInRender: true,
+ },
+ },
});
const options: VueQueryPluginOptions = { queryClient };
@@ -33,7 +38,7 @@ export default defineNuxtPlugin((nuxt) => {
return {
provide: {
- queryClient
- }
+ queryClient,
+ },
};
});
diff --git a/frontend/public/avatars/1.jpg b/frontend/public/img/avatars/1.jpg
similarity index 100%
rename from frontend/public/avatars/1.jpg
rename to frontend/public/img/avatars/1.jpg
diff --git a/frontend/public/avatars/2.jpg b/frontend/public/img/avatars/2.jpg
similarity index 100%
rename from frontend/public/avatars/2.jpg
rename to frontend/public/img/avatars/2.jpg
diff --git a/frontend/public/avatars/3.jpg b/frontend/public/img/avatars/3.jpg
similarity index 100%
rename from frontend/public/avatars/3.jpg
rename to frontend/public/img/avatars/3.jpg
diff --git a/frontend/public/avatars/4.jpg b/frontend/public/img/avatars/4.jpg
similarity index 100%
rename from frontend/public/avatars/4.jpg
rename to frontend/public/img/avatars/4.jpg
diff --git a/frontend/public/avatars/5.jpg b/frontend/public/img/avatars/5.jpg
similarity index 100%
rename from frontend/public/avatars/5.jpg
rename to frontend/public/img/avatars/5.jpg
diff --git a/frontend/public/img/brands/brand-1.png b/frontend/public/img/brands/brand-1.png
new file mode 100644
index 0000000..c7fa6c0
Binary files /dev/null and b/frontend/public/img/brands/brand-1.png differ
diff --git a/frontend/public/img/brands/brand-2.png b/frontend/public/img/brands/brand-2.png
new file mode 100644
index 0000000..01db740
Binary files /dev/null and b/frontend/public/img/brands/brand-2.png differ
diff --git a/frontend/public/img/brands/brand-3.png b/frontend/public/img/brands/brand-3.png
new file mode 100644
index 0000000..2214e2e
Binary files /dev/null and b/frontend/public/img/brands/brand-3.png differ
diff --git a/frontend/public/img/brands/brand-4.png b/frontend/public/img/brands/brand-4.png
new file mode 100644
index 0000000..144c180
Binary files /dev/null and b/frontend/public/img/brands/brand-4.png differ
diff --git a/frontend/public/img/brands/brand-5.png b/frontend/public/img/brands/brand-5.png
new file mode 100644
index 0000000..5555c52
Binary files /dev/null and b/frontend/public/img/brands/brand-5.png differ
diff --git a/frontend/public/img/brands/brand-6.png b/frontend/public/img/brands/brand-6.png
new file mode 100644
index 0000000..d0e8e34
Binary files /dev/null and b/frontend/public/img/brands/brand-6.png differ
diff --git a/frontend/public/img/gateways/bahamta.png b/frontend/public/img/gateways/bahamta.png
new file mode 100644
index 0000000..62c0747
Binary files /dev/null and b/frontend/public/img/gateways/bahamta.png differ
diff --git a/frontend/public/img/gateways/bmi.png b/frontend/public/img/gateways/bmi.png
new file mode 100644
index 0000000..1003230
Binary files /dev/null and b/frontend/public/img/gateways/bmi.png differ
diff --git a/frontend/public/idpay.png b/frontend/public/img/gateways/idpay.png
similarity index 100%
rename from frontend/public/idpay.png
rename to frontend/public/img/gateways/idpay.png
diff --git a/frontend/public/mellat-bank.png b/frontend/public/img/gateways/mellat-bank.png
similarity index 100%
rename from frontend/public/mellat-bank.png
rename to frontend/public/img/gateways/mellat-bank.png
diff --git a/frontend/public/img/gateways/sep.png b/frontend/public/img/gateways/sep.png
new file mode 100644
index 0000000..05d6b43
Binary files /dev/null and b/frontend/public/img/gateways/sep.png differ
diff --git a/frontend/public/zarinpal.png b/frontend/public/img/gateways/zarinpal.png
similarity index 100%
rename from frontend/public/zarinpal.png
rename to frontend/public/img/gateways/zarinpal.png
diff --git a/frontend/public/img/gateways/zibal.png b/frontend/public/img/gateways/zibal.png
new file mode 100644
index 0000000..0b5dce7
Binary files /dev/null and b/frontend/public/img/gateways/zibal.png differ
diff --git a/frontend/public/img/heymlz/heymlz-logo.png b/frontend/public/img/heymlz/heymlz-logo.png
new file mode 100644
index 0000000..90f977f
Binary files /dev/null and b/frontend/public/img/heymlz/heymlz-logo.png differ
diff --git a/frontend/public/jibimo.png b/frontend/public/jibimo.png
deleted file mode 100644
index b41bdeb..0000000
Binary files a/frontend/public/jibimo.png and /dev/null differ
diff --git a/frontend/public/mlz.jpeg b/frontend/public/mlz.jpeg
deleted file mode 100644
index f37b8b0..0000000
Binary files a/frontend/public/mlz.jpeg and /dev/null differ
diff --git a/frontend/public/saman-bank.png b/frontend/public/saman-bank.png
deleted file mode 100644
index 81c9ec8..0000000
Binary files a/frontend/public/saman-bank.png and /dev/null differ
diff --git a/frontend/types/global.d.ts b/frontend/types/global.d.ts
index 1e0fcb5..c353263 100644
--- a/frontend/types/global.d.ts
+++ b/frontend/types/global.d.ts
@@ -11,22 +11,22 @@ declare global {
type LogType = {
title: string;
status?: "success" | "error" | "info" | "warning";
- message?: string,
- details?: any
- }
+ message?: string;
+ details?: any;
+ };
type AxiosLogType = {
- url: string,
- method: string,
- status: number,
- code: string,
- requestHeaders: Record,
- responseHeaders?: Record,
- response?: any,
- payload?: Record,
- params?: Record,
- date: string
- }
+ url: string;
+ method: string;
+ status: number;
+ code: string;
+ requestHeaders: Record;
+ responseHeaders?: Record;
+ response?: any;
+ payload?: Record;
+ params?: Record;
+ date: string;
+ };
type Chat = {
id: number;
@@ -276,4 +276,18 @@ declare global {
updated_at: string;
order: Order;
};
+
+ type PaymentGateway = {
+ id: number;
+ picture: string;
+ title: string;
+ type:
+ | "ZARINPAL"
+ | "SEP"
+ | "MELLAT"
+ | "IDPAY"
+ | "ZIBAL"
+ | "BAHAMTA"
+ | "BMI";
+ };
}