Add 'clear cache' to cmdk menu
This commit is contained in:
parent
4ab56b603f
commit
58fac5c81b
@ -4,18 +4,24 @@ import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus';
|
|||||||
import { clearCacheAction } from '@/photo/actions';
|
import { clearCacheAction } from '@/photo/actions';
|
||||||
import { useAppState } from '@/app/AppState';
|
import { useAppState } from '@/app/AppState';
|
||||||
import { BiTrash } from 'react-icons/bi';
|
import { BiTrash } from 'react-icons/bi';
|
||||||
|
import { useAppText } from '@/i18n/state/client';
|
||||||
|
import { toastSuccess } from '@/toast';
|
||||||
|
|
||||||
export default function ClearCacheButton() {
|
export default function ClearCacheButton() {
|
||||||
const { invalidateSwr } = useAppState();
|
const { invalidateSwr } = useAppState();
|
||||||
|
const appText = useAppText();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form action={clearCacheAction}>
|
<form action={clearCacheAction}>
|
||||||
<SubmitButtonWithStatus
|
<SubmitButtonWithStatus
|
||||||
icon={<BiTrash size={16} />}
|
icon={<BiTrash size={16} />}
|
||||||
hideText="never"
|
hideText="never"
|
||||||
onFormSubmit={invalidateSwr}
|
onFormSubmit={() => {
|
||||||
|
invalidateSwr?.();
|
||||||
|
toastSuccess(appText.admin.clearCacheSuccess);
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
Clear Cache
|
{appText.admin.clearCache}
|
||||||
</SubmitButtonWithStatus>
|
</SubmitButtonWithStatus>
|
||||||
</form>
|
</form>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -97,6 +97,8 @@ import IconSort from '@/components/icons/IconSort';
|
|||||||
import { useSelectPhotosState } from '@/admin/select/SelectPhotosState';
|
import { useSelectPhotosState } from '@/admin/select/SelectPhotosState';
|
||||||
import IconAlbum from '@/components/icons/IconAlbum';
|
import IconAlbum from '@/components/icons/IconAlbum';
|
||||||
import usePhotoQuery from '@/photo/usePhotoQuery';
|
import usePhotoQuery from '@/photo/usePhotoQuery';
|
||||||
|
import { clearCacheAction } from '@/photo/actions';
|
||||||
|
import { toastSuccess } from '@/toast';
|
||||||
|
|
||||||
const DIALOG_TITLE = 'Global Command-K Menu';
|
const DIALOG_TITLE = 'Global Command-K Menu';
|
||||||
const DIALOG_DESCRIPTION = 'For searching photos, views, and settings';
|
const DIALOG_DESCRIPTION = 'For searching photos, views, and settings';
|
||||||
@ -160,6 +162,7 @@ export default function CommandKClient({
|
|||||||
clearAuthStateAndRedirectIfNecessary,
|
clearAuthStateAndRedirectIfNecessary,
|
||||||
isCommandKOpen: isOpen,
|
isCommandKOpen: isOpen,
|
||||||
startUpload,
|
startUpload,
|
||||||
|
invalidateSwr,
|
||||||
photosCountTotal,
|
photosCountTotal,
|
||||||
photosCountHidden = 0,
|
photosCountHidden = 0,
|
||||||
uploadsCount,
|
uploadsCount,
|
||||||
@ -650,6 +653,14 @@ export default function CommandKClient({
|
|||||||
stopSelectingPhotos?.();
|
stopSelectingPhotos?.();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
label: appText.admin.clearCache,
|
||||||
|
annotation: <IconLock narrow />,
|
||||||
|
action: () => clearCacheAction()
|
||||||
|
.then(() => {
|
||||||
|
invalidateSwr?.();
|
||||||
|
toastSuccess(appText.admin.clearCacheSuccess);
|
||||||
|
}),
|
||||||
}, {
|
}, {
|
||||||
label: <span className="flex items-center gap-3">
|
label: <span className="flex items-center gap-3">
|
||||||
{appText.admin.appInsights}
|
{appText.admin.appInsights}
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'নির্বাচন বন্ধ করুন',
|
selectPhotosExit: 'নির্বাচন বন্ধ করুন',
|
||||||
appInsights: 'অ্যাপ ইনসাইট',
|
appInsights: 'অ্যাপ ইনসাইট',
|
||||||
appConfig: 'অ্যাপ কনফিগারেশন',
|
appConfig: 'অ্যাপ কনফিগারেশন',
|
||||||
|
clearCache: 'ক্যাশ সাফ করুন',
|
||||||
|
clearCacheSuccess: 'সাইট ক্যাশ সাফ করা হয়েছে',
|
||||||
edit: 'এডিট',
|
edit: 'এডিট',
|
||||||
favorite: 'পছন্দ',
|
favorite: 'পছন্দ',
|
||||||
unfavorite: 'পছন্দ অপসারণ',
|
unfavorite: 'পছন্দ অপসারণ',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Stop Selecting',
|
selectPhotosExit: 'Stop Selecting',
|
||||||
appInsights: 'App Insights',
|
appInsights: 'App Insights',
|
||||||
appConfig: 'App Configuration',
|
appConfig: 'App Configuration',
|
||||||
|
clearCache: 'Clear Cache',
|
||||||
|
clearCacheSuccess: 'Site cache has been cleared',
|
||||||
edit: 'Edit',
|
edit: 'Edit',
|
||||||
favorite: 'Favourite',
|
favorite: 'Favourite',
|
||||||
unfavorite: 'Unfavourite',
|
unfavorite: 'Unfavourite',
|
||||||
|
|||||||
@ -140,6 +140,8 @@ export const TEXT = {
|
|||||||
selectPhotosExit: 'Stop Selecting',
|
selectPhotosExit: 'Stop Selecting',
|
||||||
appInsights: 'App Insights',
|
appInsights: 'App Insights',
|
||||||
appConfig: 'App Configuration',
|
appConfig: 'App Configuration',
|
||||||
|
clearCache: 'Clear Cache',
|
||||||
|
clearCacheSuccess: 'Site cache has been cleared',
|
||||||
edit: 'Edit',
|
edit: 'Edit',
|
||||||
favorite: 'Favorite',
|
favorite: 'Favorite',
|
||||||
unfavorite: 'Unfavorite',
|
unfavorite: 'Unfavorite',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Dejar de Seleccionar',
|
selectPhotosExit: 'Dejar de Seleccionar',
|
||||||
appInsights: 'Estadísticas de la aplicación',
|
appInsights: 'Estadísticas de la aplicación',
|
||||||
appConfig: 'Configuración de la aplicación',
|
appConfig: 'Configuración de la aplicación',
|
||||||
|
clearCache: 'Limpiar caché',
|
||||||
|
clearCacheSuccess: 'La caché del sitio se ha borrado',
|
||||||
edit: 'Editar',
|
edit: 'Editar',
|
||||||
favorite: 'Marcar como favorito',
|
favorite: 'Marcar como favorito',
|
||||||
unfavorite: 'Quitar de favoritos',
|
unfavorite: 'Quitar de favoritos',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'चयन बंद करें',
|
selectPhotosExit: 'चयन बंद करें',
|
||||||
appInsights: 'ऐप इनसाइट्स',
|
appInsights: 'ऐप इनसाइट्स',
|
||||||
appConfig: 'ऐप कॉन्फ़िगरेशन',
|
appConfig: 'ऐप कॉन्फ़िगरेशन',
|
||||||
|
clearCache: 'कैश साफ़ करें',
|
||||||
|
clearCacheSuccess: 'साइट कैश साफ़ हो गया है',
|
||||||
edit: 'संपादित करें',
|
edit: 'संपादित करें',
|
||||||
favorite: 'पसंदीदा',
|
favorite: 'पसंदीदा',
|
||||||
unfavorite: 'पसंदीदा नहीं',
|
unfavorite: 'पसंदीदा नहीं',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Berhenti Memilih',
|
selectPhotosExit: 'Berhenti Memilih',
|
||||||
appInsights: 'Wawasan Aplikasi',
|
appInsights: 'Wawasan Aplikasi',
|
||||||
appConfig: 'Konfigurasi Aplikasi',
|
appConfig: 'Konfigurasi Aplikasi',
|
||||||
|
clearCache: 'Bersihkan Cache',
|
||||||
|
clearCacheSuccess: 'Cache situs telah dibersihkan',
|
||||||
edit: 'Edit',
|
edit: 'Edit',
|
||||||
favorite: 'Favorit',
|
favorite: 'Favorit',
|
||||||
unfavorite: 'Hapus dari Favorit',
|
unfavorite: 'Hapus dari Favorit',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Parar de Selecionar',
|
selectPhotosExit: 'Parar de Selecionar',
|
||||||
appInsights: 'Insights do aplicativo',
|
appInsights: 'Insights do aplicativo',
|
||||||
appConfig: 'Configuração da aplicação',
|
appConfig: 'Configuração da aplicação',
|
||||||
|
clearCache: 'Limpar cache',
|
||||||
|
clearCacheSuccess: 'O cache do site foi limpo',
|
||||||
edit: 'Editar',
|
edit: 'Editar',
|
||||||
favorite: 'Favoritar',
|
favorite: 'Favoritar',
|
||||||
unfavorite: 'Remover dos favoritos',
|
unfavorite: 'Remover dos favoritos',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Parar de Selecionar',
|
selectPhotosExit: 'Parar de Selecionar',
|
||||||
appInsights: 'Insights do aplicativo',
|
appInsights: 'Insights do aplicativo',
|
||||||
appConfig: 'Configuração da aplicação',
|
appConfig: 'Configuração da aplicação',
|
||||||
|
clearCache: 'Limpar cache',
|
||||||
|
clearCacheSuccess: 'A cache do site foi limpa',
|
||||||
edit: 'Editar',
|
edit: 'Editar',
|
||||||
favorite: 'Favoritar',
|
favorite: 'Favoritar',
|
||||||
unfavorite: 'Remover dos favoritos',
|
unfavorite: 'Remover dos favoritos',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Seçmeyi Durdur',
|
selectPhotosExit: 'Seçmeyi Durdur',
|
||||||
appInsights: 'Uygulama Analizi',
|
appInsights: 'Uygulama Analizi',
|
||||||
appConfig: 'Uygulama Yapılandırması',
|
appConfig: 'Uygulama Yapılandırması',
|
||||||
|
clearCache: 'Önbelleği Temizle',
|
||||||
|
clearCacheSuccess: 'Site önbelleği temizlendi',
|
||||||
edit: 'Düzenle',
|
edit: 'Düzenle',
|
||||||
favorite: 'Favori',
|
favorite: 'Favori',
|
||||||
unfavorite: 'Favoriden Çıkar',
|
unfavorite: 'Favoriden Çıkar',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: 'Dừng chọn',
|
selectPhotosExit: 'Dừng chọn',
|
||||||
appInsights: 'Thống kê ứng dụng',
|
appInsights: 'Thống kê ứng dụng',
|
||||||
appConfig: 'Cấu hình ứng dụng',
|
appConfig: 'Cấu hình ứng dụng',
|
||||||
|
clearCache: 'Xóa bộ nhớ cache',
|
||||||
|
clearCacheSuccess: 'Đã xóa bộ nhớ cache của trang web',
|
||||||
edit: 'Chỉnh sửa',
|
edit: 'Chỉnh sửa',
|
||||||
favorite: 'Yêu thích',
|
favorite: 'Yêu thích',
|
||||||
unfavorite: 'Bỏ yêu thích',
|
unfavorite: 'Bỏ yêu thích',
|
||||||
|
|||||||
@ -141,6 +141,8 @@ export const TEXT: I18N = {
|
|||||||
selectPhotosExit: '停止选择',
|
selectPhotosExit: '停止选择',
|
||||||
appInsights: '应用分析',
|
appInsights: '应用分析',
|
||||||
appConfig: '应用配置',
|
appConfig: '应用配置',
|
||||||
|
clearCache: '清除缓存',
|
||||||
|
clearCacheSuccess: '站点缓存已清除',
|
||||||
edit: '编辑',
|
edit: '编辑',
|
||||||
favorite: '收藏',
|
favorite: '收藏',
|
||||||
unfavorite: '取消收藏',
|
unfavorite: '取消收藏',
|
||||||
|
|||||||
@ -8,15 +8,15 @@ export default function ToasterWithThemes() {
|
|||||||
const { resolvedTheme } = useTheme();
|
const { resolvedTheme } = useTheme();
|
||||||
return (
|
return (
|
||||||
<Toaster
|
<Toaster
|
||||||
theme={resolvedTheme as 'light' | 'dark' | undefined}
|
theme={resolvedTheme as 'light' | 'dark'}
|
||||||
toastOptions={{
|
toastOptions={{
|
||||||
classNames: {
|
classNames: {
|
||||||
toast: clsx(
|
toast: clsx(
|
||||||
'flex items-center gap-x-1.5 p-4 w-full',
|
'flex items-center gap-x-1! px-5! py-4! w-full',
|
||||||
'font-mono text-sm',
|
'font-mono text-sm',
|
||||||
'bg-white dark:bg-black',
|
'bg-white dark:bg-black',
|
||||||
'text-gray-900 dark:text-gray-100',
|
'text-gray-900 dark:text-gray-100',
|
||||||
'outline-medium! outline-offset-[-1px]',
|
'outline-medium! outline-offset-[-1px] rounded-xl!',
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import type { ReactNode } from 'react';
|
import type { ReactNode } from 'react';
|
||||||
import { PiWarningBold } from 'react-icons/pi';
|
import { PiWarningBold } from 'react-icons/pi';
|
||||||
import { FiCheckSquare } from 'react-icons/fi';
|
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import Spinner from '@/components/Spinner';
|
import Spinner from '@/components/Spinner';
|
||||||
|
import { FaRegCircleCheck } from 'react-icons/fa6';
|
||||||
|
|
||||||
const DEFAULT_DURATION = 4000;
|
const DEFAULT_DURATION = 4000;
|
||||||
|
|
||||||
@ -11,7 +11,10 @@ export const toastSuccess = (
|
|||||||
duration = DEFAULT_DURATION,
|
duration = DEFAULT_DURATION,
|
||||||
) => toast(
|
) => toast(
|
||||||
message, {
|
message, {
|
||||||
icon: <FiCheckSquare size={16} />,
|
icon: <FaRegCircleCheck
|
||||||
|
size={15}
|
||||||
|
className="text-medium"
|
||||||
|
/>,
|
||||||
duration,
|
duration,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -21,7 +24,10 @@ export const toastWarning = (
|
|||||||
duration = DEFAULT_DURATION,
|
duration = DEFAULT_DURATION,
|
||||||
) => toast(
|
) => toast(
|
||||||
message, {
|
message, {
|
||||||
icon: <PiWarningBold size={16} />,
|
icon: <PiWarningBold
|
||||||
|
size={16}
|
||||||
|
className="text-medium"
|
||||||
|
/>,
|
||||||
duration,
|
duration,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user