| const [promptConfig, setPromptConfig] = useState<PromptConfig | null>(null) | const [promptConfig, setPromptConfig] = useState<PromptConfig | null>(null) | ||||
| const [inited, setInited] = useState<boolean>(false) | const [inited, setInited] = useState<boolean>(false) | ||||
| const [plan, setPlan] = useState<string>('basic') // basic/plus/pro | const [plan, setPlan] = useState<string>('basic') // basic/plus/pro | ||||
| const [canReplaceLogo, setCanReplaceLogo] = useState<boolean>(false) | |||||
| // in mobile, show sidebar by click button | // in mobile, show sidebar by click button | ||||
| const [isShowSidebar, { setTrue: showSidebar, setFalse: hideSidebar }] = useBoolean(false) | const [isShowSidebar, { setTrue: showSidebar, setFalse: hideSidebar }] = useBoolean(false) | ||||
| // Can Use metadata(https://beta.nextjs.org/docs/api-reference/metadata) to set title. But it only works in server side client. | // Can Use metadata(https://beta.nextjs.org/docs/api-reference/metadata) to set title. But it only works in server side client. | ||||
| useEffect(() => { | useEffect(() => { | ||||
| if (siteInfo?.title) { | if (siteInfo?.title) { | ||||
| if (plan !== 'basic') | |||||
| if (canReplaceLogo) | |||||
| document.title = `${siteInfo.title}` | document.title = `${siteInfo.title}` | ||||
| else | else | ||||
| document.title = `${siteInfo.title} - Powered by Dify` | document.title = `${siteInfo.title} - Powered by Dify` | ||||
| } | } | ||||
| }, [siteInfo?.title, plan]) | |||||
| }, [siteInfo?.title, canReplaceLogo]) | |||||
| /* | /* | ||||
| * conversation info | * conversation info | ||||
| (async () => { | (async () => { | ||||
| try { | try { | ||||
| const [appData, conversationData, appParams]: any = await fetchInitData() | const [appData, conversationData, appParams]: any = await fetchInitData() | ||||
| const { app_id: appId, site: siteInfo, plan }: any = appData | |||||
| const { app_id: appId, site: siteInfo, plan, can_replace_logo }: any = appData | |||||
| setAppId(appId) | setAppId(appId) | ||||
| setPlan(plan) | setPlan(plan) | ||||
| setCanReplaceLogo(can_replace_logo) | |||||
| const tempIsPublicVersion = siteInfo.prompt_public | const tempIsPublicVersion = siteInfo.prompt_public | ||||
| setIsPublicVersion(tempIsPublicVersion) | setIsPublicVersion(tempIsPublicVersion) | ||||
| const prompt_template = '' | const prompt_template = '' | ||||
| savedInputs={currInputs as Record<string, any>} | savedInputs={currInputs as Record<string, any>} | ||||
| onInputsChange={setCurrInputs} | onInputsChange={setCurrInputs} | ||||
| plan={plan} | plan={plan} | ||||
| canReplaceLogo={canReplaceLogo} | |||||
| ></ConfigSence> | ></ConfigSence> | ||||
| { | { |
| savedInputs: Record<string, any> | savedInputs: Record<string, any> | ||||
| onInputsChange: (inputs: Record<string, any>) => void | onInputsChange: (inputs: Record<string, any>) => void | ||||
| plan?: string | plan?: string | ||||
| canReplaceLogo?: boolean | |||||
| } | } | ||||
| const Welcome: FC<IWelcomeProps> = ({ | const Welcome: FC<IWelcomeProps> = ({ | ||||
| canEidtInpus, | canEidtInpus, | ||||
| savedInputs, | savedInputs, | ||||
| onInputsChange, | onInputsChange, | ||||
| canReplaceLogo, | |||||
| }) => { | }) => { | ||||
| const { t } = useTranslation() | const { t } = useTranslation() | ||||
| const hasVar = promptConfig.prompt_variables.length > 0 | const hasVar = promptConfig.prompt_variables.length > 0 | ||||
| </div> | </div> | ||||
| : <div> | : <div> | ||||
| </div>} | </div>} | ||||
| {plan === 'basic' && <a className='flex items-center pr-3 space-x-3' href="https://dify.ai/" target="_blank"> | |||||
| {!canReplaceLogo && <a className='flex items-center pr-3 space-x-3' href="https://dify.ai/" target="_blank"> | |||||
| <span className='uppercase'>{t('share.chat.powerBy')}</span> | <span className='uppercase'>{t('share.chat.powerBy')}</span> | ||||
| <FootLogo /> | <FootLogo /> | ||||
| </a>} | </a>} |
| const [promptConfig, setPromptConfig] = useState<PromptConfig | null>(null) | const [promptConfig, setPromptConfig] = useState<PromptConfig | null>(null) | ||||
| const [inited, setInited] = useState<boolean>(false) | const [inited, setInited] = useState<boolean>(false) | ||||
| const [plan, setPlan] = useState<string>('basic') // basic/plus/pro | const [plan, setPlan] = useState<string>('basic') // basic/plus/pro | ||||
| const [canReplaceLogo, setCanReplaceLogo] = useState<boolean>(false) | |||||
| // Can Use metadata(https://beta.nextjs.org/docs/api-reference/metadata) to set title. But it only works in server side client. | // Can Use metadata(https://beta.nextjs.org/docs/api-reference/metadata) to set title. But it only works in server side client. | ||||
| useEffect(() => { | useEffect(() => { | ||||
| if (siteInfo?.title) { | if (siteInfo?.title) { | ||||
| if (plan !== 'basic') | |||||
| if (canReplaceLogo) | |||||
| document.title = `${siteInfo.title}` | document.title = `${siteInfo.title}` | ||||
| else | else | ||||
| document.title = `${siteInfo.title} - Powered by Dify` | document.title = `${siteInfo.title} - Powered by Dify` | ||||
| } | } | ||||
| }, [siteInfo?.title, plan]) | |||||
| }, [siteInfo?.title, canReplaceLogo]) | |||||
| /* | /* | ||||
| * conversation info | * conversation info | ||||
| (async () => { | (async () => { | ||||
| try { | try { | ||||
| const [appData, conversationData, appParams]: any = await fetchInitData() | const [appData, conversationData, appParams]: any = await fetchInitData() | ||||
| const { app_id: appId, site: siteInfo, plan }: any = appData | |||||
| const { app_id: appId, site: siteInfo, plan, can_replace_logo }: any = appData | |||||
| setAppId(appId) | setAppId(appId) | ||||
| setPlan(plan) | setPlan(plan) | ||||
| setCanReplaceLogo(can_replace_logo) | |||||
| const tempIsPublicVersion = siteInfo.prompt_public | const tempIsPublicVersion = siteInfo.prompt_public | ||||
| setIsPublicVersion(tempIsPublicVersion) | setIsPublicVersion(tempIsPublicVersion) | ||||
| const prompt_template = '' | const prompt_template = '' | ||||
| savedInputs={currInputs as Record<string, any>} | savedInputs={currInputs as Record<string, any>} | ||||
| onInputsChange={setCurrInputs} | onInputsChange={setCurrInputs} | ||||
| plan={plan} | plan={plan} | ||||
| canReplaceLogo={canReplaceLogo} | |||||
| ></ConfigScene> | ></ConfigScene> | ||||
| { | { | ||||
| shouldReload && ( | shouldReload && ( |
| savedInputs: Record<string, any> | savedInputs: Record<string, any> | ||||
| onInputsChange: (inputs: Record<string, any>) => void | onInputsChange: (inputs: Record<string, any>) => void | ||||
| plan: string | plan: string | ||||
| canReplaceLogo?: boolean | |||||
| } | } | ||||
| const Welcome: FC<IWelcomeProps> = ({ | const Welcome: FC<IWelcomeProps> = ({ | ||||
| canEditInputs, | canEditInputs, | ||||
| savedInputs, | savedInputs, | ||||
| onInputsChange, | onInputsChange, | ||||
| canReplaceLogo, | |||||
| }) => { | }) => { | ||||
| const { t } = useTranslation() | const { t } = useTranslation() | ||||
| const hasVar = promptConfig.prompt_variables.length > 0 | const hasVar = promptConfig.prompt_variables.length > 0 | ||||
| </div> | </div> | ||||
| : <div> | : <div> | ||||
| </div>} | </div>} | ||||
| {plan === 'basic' && <a className='flex items-center pr-3 space-x-3' href="https://dify.ai/" target="_blank"> | |||||
| {!canReplaceLogo && <a className='flex items-center pr-3 space-x-3' href="https://dify.ai/" target="_blank"> | |||||
| <span className='uppercase'>{t('share.chat.powerBy')}</span> | <span className='uppercase'>{t('share.chat.powerBy')}</span> | ||||
| <FootLogo /> | <FootLogo /> | ||||
| </a>} | </a>} |
| const [inputs, setInputs] = useState<Record<string, any>>({}) | const [inputs, setInputs] = useState<Record<string, any>>({}) | ||||
| const [appId, setAppId] = useState<string>('') | const [appId, setAppId] = useState<string>('') | ||||
| const [siteInfo, setSiteInfo] = useState<SiteInfo | null>(null) | const [siteInfo, setSiteInfo] = useState<SiteInfo | null>(null) | ||||
| const [canReplaceLogo, setCanReplaceLogo] = useState<boolean>(false) | |||||
| const [promptConfig, setPromptConfig] = useState<PromptConfig | null>(null) | const [promptConfig, setPromptConfig] = useState<PromptConfig | null>(null) | ||||
| const [moreLikeThisConfig, setMoreLikeThisConfig] = useState<MoreLikeThisConfig | null>(null) | const [moreLikeThisConfig, setMoreLikeThisConfig] = useState<MoreLikeThisConfig | null>(null) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| (async () => { | (async () => { | ||||
| const [appData, appParams]: any = await fetchInitData() | const [appData, appParams]: any = await fetchInitData() | ||||
| const { app_id: appId, site: siteInfo } = appData | |||||
| const { app_id: appId, site: siteInfo, can_replace_logo } = appData | |||||
| setAppId(appId) | setAppId(appId) | ||||
| setSiteInfo(siteInfo as SiteInfo) | setSiteInfo(siteInfo as SiteInfo) | ||||
| setCanReplaceLogo(can_replace_logo) | |||||
| changeLanguage(siteInfo.default_language) | changeLanguage(siteInfo.default_language) | ||||
| const { user_input_form, more_like_this, file_upload, sensitive_word_avoidance }: any = appParams | const { user_input_form, more_like_this, file_upload, sensitive_word_avoidance }: any = appParams | ||||
| // Can Use metadata(https://beta.nextjs.org/docs/api-reference/metadata) to set title. But it only works in server side client. | // Can Use metadata(https://beta.nextjs.org/docs/api-reference/metadata) to set title. But it only works in server side client. | ||||
| useEffect(() => { | useEffect(() => { | ||||
| if (siteInfo?.title) | |||||
| document.title = `${siteInfo.title} - Powered by Dify` | |||||
| }, [siteInfo?.title]) | |||||
| if (siteInfo?.title) { | |||||
| if (canReplaceLogo) | |||||
| document.title = `${siteInfo.title}` | |||||
| else | |||||
| document.title = `${siteInfo.title} - Powered by Dify` | |||||
| } | |||||
| }, [siteInfo?.title, canReplaceLogo]) | |||||
| const [isShowResSidebar, { setTrue: showResSidebar, setFalse: hideResSidebar }] = useBoolean(false) | const [isShowResSidebar, { setTrue: showResSidebar, setFalse: hideResSidebar }] = useBoolean(false) | ||||
| const resRef = useRef<HTMLDivElement>(null) | const resRef = useRef<HTMLDivElement>(null) |
| }, | }, | ||||
| settings: { | settings: { | ||||
| accountGroup: 'ACCOUNT', | accountGroup: 'ACCOUNT', | ||||
| workplaceGroup: 'WORKPLACE', | |||||
| workplaceGroup: 'WORKSPACE', | |||||
| account: 'My account', | account: 'My account', | ||||
| members: 'Members', | members: 'Members', | ||||
| billing: 'Billing', | billing: 'Billing', |