diff --git a/web/app/(commonLayout)/apps/Apps.tsx b/web/app/(commonLayout)/apps/Apps.tsx index 7f24f595447..e264cc2301d 100644 --- a/web/app/(commonLayout)/apps/Apps.tsx +++ b/web/app/(commonLayout)/apps/Apps.tsx @@ -4,13 +4,12 @@ import { useEffect, useRef } from 'react' import useSWRInfinite from 'swr/infinite' import { debounce } from 'lodash-es' import { useTranslation } from 'react-i18next' -import { useSearchParams } from 'next/navigation' import AppCard from './AppCard' import NewAppCard from './NewAppCard' import type { AppListResponse } from '@/models/app' import { fetchAppList } from '@/service/apps' import { useSelector } from '@/context/app-context' -import { NEED_REFRESH_APP_LIST_KEY, SPARK_FREE_QUOTA_PENDING } from '@/config' +import { NEED_REFRESH_APP_LIST_KEY } from '@/config' const getKey = (pageIndex: number, previousPageData: AppListResponse) => { if (!pageIndex || previousPageData.has_more) @@ -24,7 +23,6 @@ const Apps = () => { const loadingStateRef = useRef(false) const pageContainerRef = useSelector(state => state.pageContainerRef) const anchorRef = useRef(null) - const searchParams = useSearchParams() useEffect(() => { document.title = `${t('app.title')} - Dify` @@ -32,13 +30,6 @@ const Apps = () => { localStorage.removeItem(NEED_REFRESH_APP_LIST_KEY) mutate() } - if ( - localStorage.getItem(SPARK_FREE_QUOTA_PENDING) !== '1' - && searchParams.get('type') === 'provider_apply_callback' - && searchParams.get('provider') === 'spark' - && searchParams.get('result') === 'success' - ) - localStorage.setItem(SPARK_FREE_QUOTA_PENDING, '1') }, []) useEffect(() => { diff --git a/web/app/components/base/icons/assets/vender/line/general/link-external-01.svg b/web/app/components/base/icons/assets/vender/line/general/link-external-01.svg new file mode 100644 index 00000000000..e05780c2274 --- /dev/null +++ b/web/app/components/base/icons/assets/vender/line/general/link-external-01.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/web/app/components/base/icons/src/vender/line/general/LinkExternal01.json b/web/app/components/base/icons/src/vender/line/general/LinkExternal01.json new file mode 100644 index 00000000000..2275ad979a4 --- /dev/null +++ b/web/app/components/base/icons/src/vender/line/general/LinkExternal01.json @@ -0,0 +1,38 @@ +{ + "icon": { + "type": "element", + "isRootNode": true, + "name": "svg", + "attributes": { + "width": "12", + "height": "12", + "viewBox": "0 0 12 12", + "fill": "none", + "xmlns": "http://www.w3.org/2000/svg" + }, + "children": [ + { + "type": "element", + "name": "g", + "attributes": { + "id": "link-external-01" + }, + "children": [ + { + "type": "element", + "name": "path", + "attributes": { + "id": "Icon", + "d": "M10.5 4.5L10.5 1.5M10.5 1.5H7.5M10.5 1.5L6.5 5.5M5 2.5H3.9C3.05992 2.5 2.63988 2.5 2.31901 2.66349C2.03677 2.8073 1.8073 3.03677 1.66349 3.31901C1.5 3.63988 1.5 4.05992 1.5 4.9V8.1C1.5 8.94008 1.5 9.36012 1.66349 9.68099C1.8073 9.96323 2.03677 10.1927 2.31901 10.3365C2.63988 10.5 3.05992 10.5 3.9 10.5H7.1C7.94008 10.5 8.36012 10.5 8.68099 10.3365C8.96323 10.1927 9.1927 9.96323 9.33651 9.68099C9.5 9.36012 9.5 8.94008 9.5 8.1V7", + "stroke": "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round" + }, + "children": [] + } + ] + } + ] + }, + "name": "LinkExternal01" +} \ No newline at end of file diff --git a/web/app/components/base/icons/src/vender/line/general/LinkExternal01.tsx b/web/app/components/base/icons/src/vender/line/general/LinkExternal01.tsx new file mode 100644 index 00000000000..cd53dfbb490 --- /dev/null +++ b/web/app/components/base/icons/src/vender/line/general/LinkExternal01.tsx @@ -0,0 +1,14 @@ +// GENERATE BY script +// DON NOT EDIT IT MANUALLY + +import * as React from 'react' +import data from './LinkExternal01.json' +import IconBase from '@/app/components/base/icons/IconBase' +import type { IconBaseProps, IconData } from '@/app/components/base/icons/IconBase' + +const Icon = React.forwardRef, Omit>(( + props, + ref, +) => ) + +export default Icon diff --git a/web/app/components/base/icons/src/vender/line/general/index.ts b/web/app/components/base/icons/src/vender/line/general/index.ts index ca44bf39e01..53669ec55a2 100644 --- a/web/app/components/base/icons/src/vender/line/general/index.ts +++ b/web/app/components/base/icons/src/vender/line/general/index.ts @@ -5,6 +5,7 @@ export { default as Edit03 } from './Edit03' export { default as Hash02 } from './Hash02' export { default as HelpCircle } from './HelpCircle' export { default as InfoCircle } from './InfoCircle' +export { default as LinkExternal01 } from './LinkExternal01' export { default as LinkExternal02 } from './LinkExternal02' export { default as Loading02 } from './Loading02' export { default as LogOut01 } from './LogOut01' diff --git a/web/app/components/header/account-setting/model-page/model-item/FreeQuota.tsx b/web/app/components/header/account-setting/model-page/model-item/FreeQuota.tsx index 03eb0adc96a..f2e47784634 100644 --- a/web/app/components/header/account-setting/model-page/model-item/FreeQuota.tsx +++ b/web/app/components/header/account-setting/model-page/model-item/FreeQuota.tsx @@ -1,14 +1,14 @@ -import { useEffect, useState } from 'react' +import { useState } from 'react' import type { FC } from 'react' import { useTranslation } from 'react-i18next' import { useContext } from 'use-context-selector' -import type { ProviderConfigItem, ProviderWithQuota, TypeWithI18N } from '../declarations' +import type { ProviderConfigItem, TypeWithI18N } from '../declarations' import { ProviderEnum as ProviderEnumValue } from '../declarations' import s from './index.module.css' import I18n from '@/context/i18n' import Button from '@/app/components/base/button' import { submitFreeQuota } from '@/service/common' -import { SPARK_FREE_QUOTA_PENDING } from '@/config' +import { LinkExternal01 } from '@/app/components/base/icons/src/vender/line/general' const TIP_MAP: { [k: string]: TypeWithI18N } = { [ProviderEnumValue.minimax]: { @@ -20,34 +20,17 @@ const TIP_MAP: { [k: string]: TypeWithI18N } = { 'zh-Hans': '免费获取 300 万个 token', }, } -const FREE_QUOTA_TIP = { - 'en': 'Your 3 million tokens will be credited in 5 minutes.', - 'zh-Hans': '您的 300 万 token 将在 5 分钟内到账。', -} type FreeQuotaProps = { modelItem: ProviderConfigItem onUpdate: () => void - freeProvider?: ProviderWithQuota } const FreeQuota: FC = ({ modelItem, onUpdate, - freeProvider, }) => { const { locale } = useContext(I18n) const { t } = useTranslation() const [loading, setLoading] = useState(false) - const [freeQuotaPending, setFreeQuotaPending] = useState(false) - - useEffect(() => { - if ( - modelItem.key === ProviderEnumValue.spark - && localStorage.getItem(SPARK_FREE_QUOTA_PENDING) === '1' - && freeProvider - && !freeProvider.is_valid - ) - setFreeQuotaPending(true) - }, [freeProvider, modelItem.key]) const handleClick = async () => { try { @@ -64,29 +47,21 @@ const FreeQuota: FC = ({ } } - if (freeQuotaPending) { - return ( -
- ⏳ -
{FREE_QUOTA_TIP[locale]}
- -
-
- ) - } - return (
📣 -
{TIP_MAP[modelItem.key][locale]}
+
{TIP_MAP[modelItem.key][locale]}
+
·
+ + {t('common.modelProvider.freeQuota.howToEarn')} + +