dify/web/app/components/custom/custom-page/index.tsx
yyh 01460f681e
fix(web): render workspace plan badge during SSR (#40581)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-08-12 07:45:39 +00:00

61 lines
2.5 KiB
TypeScript

import { useSuspenseQuery } from '@tanstack/react-query'
import { useTranslation } from 'react-i18next'
import { contactSalesUrl } from '@/app/components/billing/config'
import { useModalContext } from '@/context/modal-context'
import { useProviderContext } from '@/context/provider-context'
import { systemFeaturesQueryOptions } from '@/features/system-features/client'
import CustomWebAppBrand from '../custom-web-app-brand'
const CustomPage = () => {
const { t } = useTranslation()
const { data: deploymentEdition } = useSuspenseQuery({
...systemFeaturesQueryOptions(),
select: ({ deployment_edition }) => deployment_edition,
})
const { plan, enableBilling } = useProviderContext()
const { setShowPricingModal } = useModalContext()
const showBillingTip = deploymentEdition === 'CLOUD' && enableBilling && plan.type === 'sandbox'
const showContact = enableBilling && (plan.type === 'professional' || plan.type === 'team')
return (
<div className="flex flex-col overflow-x-hidden">
{showBillingTip && (
<div className="mb-1 flex justify-between rounded-xl bg-linear-to-r from-components-input-border-active-prompt-1 to-components-input-border-active-prompt-2 p-4 pl-6 shadow-lg backdrop-blur-xs">
<div className="space-y-1 text-text-primary-on-surface">
<div className="title-xl-semi-bold">
{t(($) => $['upgradeTip.title'], { ns: 'custom' })}
</div>
<div className="system-sm-regular">
{t(($) => $['upgradeTip.des'], { ns: 'custom' })}
</div>
</div>
<button
type="button"
className="flex h-10 w-30 cursor-pointer items-center justify-center rounded-3xl border-none bg-white p-0 system-md-semibold text-text-accent shadow-xs hover:opacity-95"
onClick={() => setShowPricingModal()}
>
{t(($) => $['upgradeBtn.encourageShort'], { ns: 'billing' })}
</button>
</div>
)}
<CustomWebAppBrand />
{showContact && (
<div className="absolute bottom-0 h-12.5 text-xs leading-12.5 text-text-quaternary">
{t(($) => $['customize.prefix'], { ns: 'custom' })}
<a
className="text-text-accent"
href={contactSalesUrl}
target="_blank"
rel="noopener noreferrer"
>
{t(($) => $['customize.contactUs'], { ns: 'custom' })}
</a>
{t(($) => $['customize.suffix'], { ns: 'custom' })}
</div>
)}
</div>
)
}
export default CustomPage