Ship invoice templates, public viewer, and print-ready show page.

Move template/issue editors to full pages, add public invoice SPA with PDF print, and local-aware public URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-07-26 11:04:29 +03:30
co-authored by Cursor
parent 8f4af7a16c
commit cbffb23ec3
20 changed files with 2501 additions and 564 deletions
+19 -1
View File
@@ -9,8 +9,26 @@ export function isAllowedAdminHost(hostname = window.location.hostname): boolean
return hostname === getAdminDomain()
}
/** Public invoice URL for platform (super-admin) invoices. */
/**
* Public invoice URL for platform invoices.
* Local/dev: current origin (`https://meshkee.app:5174/invoices/{id}`) so the show page is reachable.
* Production: `https://{VITE_INVOICE_PUBLIC_DOMAIN}/invoices/{id}` (default meshkee.com).
* Override either with `VITE_INVOICE_PUBLIC_BASE_URL` (full origin, optional path prefix).
*/
export function getPlatformInvoicePublicUrl(invoiceId: string): string {
const baseOverride = import.meta.env.VITE_INVOICE_PUBLIC_BASE_URL?.trim()
if (baseOverride) {
return `${baseOverride.replace(/\/$/, '')}/invoices/${invoiceId}`
}
if (import.meta.env.DEV) {
return `${window.location.origin}/invoices/${invoiceId}`
}
const domain = import.meta.env.VITE_INVOICE_PUBLIC_DOMAIN?.trim() || 'meshkee.com'
return `https://${domain}/invoices/${invoiceId}`
}
/** Marketing / main business site for platform invoices (default https://meshkee.com). */
export function getPlatformMarketingUrl(): string {
const domain = import.meta.env.VITE_INVOICE_PUBLIC_DOMAIN?.trim() || 'meshkee.com'
return `https://${domain.replace(/^https?:\/\//, '').replace(/\/$/, '')}`
}