diff --git a/next.config.js b/next.config.js index 40cfc3e7..e2c68f5b 100644 --- a/next.config.js +++ b/next.config.js @@ -1,10 +1,9 @@ /** @type {import('next').NextConfig} */ - const { i18n } = require('./next-i18next.config'); const { cronJob } = require('./src/services/crons'); const { queueReceiver } = require('./src/services/queue'); const { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER } = require('next/constants'); -const isTest = process.env.NODE_ENV === 'test'; +const isLocal = process.env.NEXT_PUBLIC_BUILD_ENV === 'local'; const nextConfig = { reactStrictMode: true, @@ -15,12 +14,12 @@ const nextConfig = { module.exports = async (phase, { defaultConfig }) => { console.log('Quickshare is starting...'); - // let shouldRunQueue = phase === PHASE_DEVELOPMENT_SERVER || phase === PHASE_PRODUCTION_SERVER; - // if (isTest) shouldRunQueue = false; - // if (process.env.NEXT_PUBLIC_SHORT_DOMAIN === 'true') shouldRunQueue = false; - // if (shouldRunQueue) { - // queueReceiver(); - // } + let shouldRunQueue = phase === PHASE_DEVELOPMENT_SERVER || phase === PHASE_PRODUCTION_SERVER; + if (!isLocal) shouldRunQueue = false; + if (process.env.NEXT_PUBLIC_SHORT_DOMAIN === 'true') shouldRunQueue = false; + if (shouldRunQueue) { + queueReceiver(); + } // cronJob(); return nextConfig; diff --git a/package.json b/package.json index 99a47f98..46b08f50 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,10 @@ "migrate:test": "dotenv -e .env.test.local -- prisma migrate deploy", "migrate:uat": "dotenv -e .env.uat.local -- prisma migrate deploy", "migrate:prod": "dotenv -e .env.production.local -- prisma migrate deploy", - "migrate:local": "prisma migrate deploy", "migrate:status": "npx prisma migrate status", + "migrate:status:uat": "dotenv -e .env.production.uat -- prisma migrate status", + "migrate:status:prod": "dotenv -e .env.production.local -- prisma migrate status", + "migrate:local": "prisma migrate deploy", "build": "next build", "start": "next start", "lint": "next lint", diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 4ef9ea79..bf275691 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -112,7 +112,7 @@ "card1": "Luôn tôn trọng dữ liệu của bạn", "card1-content": "Link rút gọn được lưu vĩnh viễn, miễn phí và sao lưu nhiều lần trong ngày. Uptime của hệ thống cam kết 99% và chịu tải tốt khi bạn cần nhiều lượt truy cập.", "card2": "Dữ liệu của bạn được bảo mật", - "card2-content": "Link gốc của bạn sẽ ẩn danh thông qua Quickshare, link rút gọn sẽ không tìm thấy ở các công cụ tìm kiếm. Ngoài ra, có thể đặt mật khẩu cho link theo dõi của bạn.", + "card2-content": "Link gốc của bạn sẽ ẩn danh thông qua Quickshare, link rút gọn sẽ không tìm thấy ở các công cụ tìm kiếm. Ngoài ra, có thể đặt mật khẩu cho link rút gọn của bạn.", "card3": "Theo dõi link là minh bạch", "card3-content": "Tất cả truy cập vào link rút gọn, kể cả bot hay người dùng đều được ghi lại. Thông tin theo dõi bao gồm đầy đủ User Agent, địa chỉ IP và thông tin thiết bị." }, diff --git a/src/components/screens/URLTracking/SetPassword.tsx b/src/components/screens/URLTracking/SetPassword.tsx index 80e56f81..bb716b83 100644 --- a/src/components/screens/URLTracking/SetPassword.tsx +++ b/src/components/screens/URLTracking/SetPassword.tsx @@ -90,6 +90,7 @@ export const SetPassword = ({ hash, onSetPasswordSuccess }: { hash: string; onSe title={t('setPassword')} ConfirmButtonProps={{ onClick: handleSubmit(onSubmit), + loading: setPassword.isLoading, }}>
diff --git a/src/components/screens/URLTracking/TrackingClick.tsx b/src/components/screens/URLTracking/TrackingClick.tsx index 431a97c1..d51f8be3 100644 --- a/src/components/screens/URLTracking/TrackingClick.tsx +++ b/src/components/screens/URLTracking/TrackingClick.tsx @@ -89,6 +89,9 @@ export const TrackingClick = ({ hash }: { hash: string }) => { onSuccess(data) { setParsedUA(data); }, + onMutate(data) { + setParsedUA({ userAgent: data } as any); + }, }); const onLoadMore = () => { @@ -135,7 +138,9 @@ export const TrackingClick = ({ hash }: { hash: string }) => { title={'User Agent'} onDismiss={() => setParsedUA(undefined)} ConfirmButtonProps={{ ['data-te-modal-dismiss']: true } as any}> -
{parsedUA && !getMoreUA.isLoading && }
+
+ {parsedUA ? !getMoreUA.isLoading && : ''} +
{!needValidate && ( <> @@ -143,9 +148,7 @@ export const TrackingClick = ({ hash }: { hash: string }) => {
{data?.record &&

{`${t('author')}: ${data?.record.ip}`}

} {data?.record && ( -

- {`${t('shortCreatedAt')}: ${date(data?.record.createdAt).locale(locale).format(DATE_FULL_FORMAT)}`} -

+

{`${t('shortCreatedAt')}: ${date(history?.createdAt).locale(locale).format(DATE_FULL_FORMAT)}`}

)} {history?.hash && ( (); const router = useRouter(); @@ -49,6 +49,7 @@ export const ValidatePassword = ({ open, hash }: { hash: string; open?: boolean title={t('unlock')} ConfirmButtonProps={{ onClick: handleSubmit(onSubmit), + loading: isSubmitting, }} modalOptions={{ backdrop: 'static',