Files
boursecu_user/src/views/base/giftCard/composables/useGiftCardPage.ts
T
safavimohadeseh78andCursor a5e458ed25 Split desktop and mobile layouts with shared page data so APIs fetch once per context.
Add layout shells, desktop views, module-level page caches, and UI fixes for auth, home, wallet, transactions, address, and related pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-14 10:08:46 +03:30

59 lines
1.6 KiB
TypeScript

import { computed, inject, provide, ref, type ComputedRef, type InjectionKey, type Ref } from 'vue'
import { loading } from '@/utils'
import { registerCodeGiftCard } from '@/api/giftCard'
import { message } from 'ant-design-vue'
export interface GiftCardPageContext {
form: Ref<{ code: string }>
disableButton: ComputedRef<boolean>
loading: typeof loading
registerGiftCard: () => Promise<void>
}
export const GIFT_CARD_PAGE_CONTEXT_KEY: InjectionKey<GiftCardPageContext> =
Symbol('giftCardPageContext')
export function useGiftCardPage() {
const form = ref<{ code: string }>({
code: '',
})
const disableButton = computed(() => {
if (!loading.value) {
return !form.value.code || form.value.code.trim().length === 0
}
return true
})
async function registerGiftCard() {
try {
loading.value = true
await registerCodeGiftCard(form.value.code)
message.success('کد کارت هدیه با موفقیت ثبت شد')
form.value.code = ''
} catch (e: any) {
message.error(e?.response?.data?.message || 'خطا در ثبت کد کارت هدیه')
} finally {
loading.value = false
}
}
const context: GiftCardPageContext = {
form,
disableButton,
loading,
registerGiftCard,
}
provide(GIFT_CARD_PAGE_CONTEXT_KEY, context)
return context
}
export function useGiftCardPageContext() {
const context = inject(GIFT_CARD_PAGE_CONTEXT_KEY)
if (!context) {
throw new Error('useGiftCardPageContext must be used within a page that calls useGiftCardPage()')
}
return context
}