diff --git a/.github/workflows/first-issue-first-pr.yml b/.github/workflows/first-issue-first-pr.yml new file mode 100644 index 000000000..98f6ef9de --- /dev/null +++ b/.github/workflows/first-issue-first-pr.yml @@ -0,0 +1,9 @@ + - name: First interaction + uses: actions/first-interaction@v1.3.0 + with: + # Token for the repository. Can be passed in using {{ secrets.GITHUB_TOKEN }} + repo-token: + # Comment to post on an individual's first issue + issue-message: Thanks for opening your first issue! :) # optional + # Comment to post on an individual's first pull request + pr-message: Thanks for creating your first PR! :) # optional diff --git a/src/Components/Inputs/Search/index.jsx b/src/Components/Inputs/Search/index.jsx index 662ade695..647af874a 100644 --- a/src/Components/Inputs/Search/index.jsx +++ b/src/Components/Inputs/Search/index.jsx @@ -128,7 +128,7 @@ const Search = ({ { const theme = useTheme(); const levelConfig = { - primary: {}, + primary: { + color: theme.palette.primary.contrastTextTertiary, + sx: { + ":hover": { + color: theme.palette.primary.contrastTextSecondary, + }, + }, + }, secondary: { color: theme.palette.primary.contrastTextSecondary, sx: { diff --git a/src/Components/Sidebar/index.jsx b/src/Components/Sidebar/index.jsx index c82f2e5be..4fbc12538 100644 --- a/src/Components/Sidebar/index.jsx +++ b/src/Components/Sidebar/index.jsx @@ -17,6 +17,7 @@ import { } from "@mui/material"; import ThemeSwitch from "../ThemeSwitch"; import Avatar from "../Avatar"; +import StarPrompt from "../StarPrompt"; import LockSvg from "../../assets/icons/lock.svg?react"; import UserSvg from "../../assets/icons/user.svg?react"; import TeamSvg from "../../assets/icons/user-two.svg?react"; @@ -608,6 +609,8 @@ function Sidebar() { + {!collapsed && } + { + const theme = useTheme(); + const dispatch = useDispatch(); + const { t } = useTranslation(); + const isOpen = useSelector((state) => state.ui?.starPromptOpen ?? true); + const mode = useSelector((state) => state.ui.mode); + + const handleClose = () => { + dispatch(setStarPromptOpen(false)); + }; + + const handleStarClick = () => { + window.open(repoUrl, '_blank'); + }; + + if (!isOpen) return null; + + return ( + + + + {t('starPromptTitle')} + + + + + + + + {t('starPromptDescription')} + + + + + ); +}; + +export default StarPrompt; diff --git a/src/Components/WalletProvider/index.css b/src/Components/WalletProvider/index.css new file mode 100644 index 000000000..15fb9d816 --- /dev/null +++ b/src/Components/WalletProvider/index.css @@ -0,0 +1,51 @@ +.wallet-adapter-dropdown { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + gap: var(--env-var-spacing-1); +} + +.wallet-adapter-button { + display: flex; + align-items: center; + justify-content: center; + width: auto; + height: var(--env-var-height-2) !important; + font-size: var(--env-var-font-size-medium-plus) !important; + font-weight: 500 !important; + margin: 0; + padding: calc((var(--env-var-height-2) - var(--env-var-font-size-medium-plus) * 1.2) / 2) var(--env-var-spacing-1); + white-space: nowrap; +} + +.wallet-adapter-modal-title { + font-size: var(--font-size-h5) !important; +} + +/* Separator styling */ +.wallet-adapter-modal-divider { + background-color: var(--border-color) !important; + margin: var(--spacing-md) 0 !important; +} + +/* Responsive fixes */ +@media (max-width: 1200px) { + .wallet-adapter-button { + font-size: var(--env-var-font-size-medium) !important; + padding: calc((var(--env-var-height-2) - var(--env-var-font-size-medium) * 1.2) / 2) + var(--env-var-spacing-1-minus) !important; + + } +} + +@media (max-width: 900px) { + .wallet-adapter-modal-wrapper { + flex-direction: column !important; + } + + .wallet-adapter-modal-divider { + margin: var(--spacing-sm) 0 !important; + } +} \ No newline at end of file diff --git a/src/Components/WalletProvider/index.jsx b/src/Components/WalletProvider/index.jsx index a24124d93..9491c1d39 100644 --- a/src/Components/WalletProvider/index.jsx +++ b/src/Components/WalletProvider/index.jsx @@ -9,6 +9,7 @@ import { import { WalletModalProvider } from "@solana/wallet-adapter-react-ui"; import { clusterApiUrl } from "@solana/web3.js"; import PropTypes from "prop-types"; +import "./index.css"; // Default styles that can be overridden by your app import "@solana/wallet-adapter-react-ui/styles.css"; diff --git a/src/Features/UI/uiSlice.js b/src/Features/UI/uiSlice.js index ebafdbbf6..f20115b92 100644 --- a/src/Features/UI/uiSlice.js +++ b/src/Features/UI/uiSlice.js @@ -24,6 +24,7 @@ const initialState = { timezone: "America/Toronto", distributedUptimeEnabled: false, language: "gb", + starPromptOpen: true, }; const uiSlice = createSlice({ @@ -55,6 +56,9 @@ const uiSlice = createSlice({ setLanguage(state, action) { state.language = action.payload; }, + setStarPromptOpen: (state, action) => { + state.starPromptOpen = action.payload; + }, }, }); @@ -67,4 +71,5 @@ export const { setTimezone, setDistributedUptimeEnabled, setLanguage, + setStarPromptOpen, } = uiSlice.actions; diff --git a/src/Pages/DistributedUptime/Details/Components/StatusHeader/index.jsx b/src/Pages/DistributedUptime/Details/Components/StatusHeader/index.jsx index 8f188c970..22a56bd7e 100644 --- a/src/Pages/DistributedUptime/Details/Components/StatusHeader/index.jsx +++ b/src/Pages/DistributedUptime/Details/Components/StatusHeader/index.jsx @@ -30,7 +30,6 @@ const StatusHeader = ({ monitor, connectionStatus, elementToCapture }) => { }; let bgColor = COLOR_MAP[connectionStatus]; - return ( { backgroundColor={theme.palette.successSecondary.lowContrast} color={theme.palette.success.lowContrast} > - {t("distributedUptimeDetailsStatusHeaderUptime")} {(monitor.totalUptime * 100).toFixed(2)}% + {t("distributedUptimeDetailsStatusHeaderUptime")}{" "} + {(monitor.uptimePercentage * 100).toFixed(2)}% { {t("settingsWalletDescription")} - + { )} + {t("settingsAbout")} diff --git a/src/Pages/StatusPage/Status/index.jsx b/src/Pages/StatusPage/Status/index.jsx index ac5877815..a47e9d33e 100644 --- a/src/Pages/StatusPage/Status/index.jsx +++ b/src/Pages/StatusPage/Status/index.jsx @@ -24,7 +24,6 @@ const PublicStatus = () => { const [isDeleteOpen, setIsDeleteOpen] = useState(false); // Utils const theme = useTheme(); - const isAdmin = useIsAdmin(); const location = useLocation(); const navigate = useNavigate(); @@ -33,7 +32,6 @@ const PublicStatus = () => { const [deleteStatusPage, isDeleting] = useStatusPageDelete(fetchStatusPage, url); // Setup - const currentPath = location.pathname; let sx = { paddingLeft: theme.spacing(20), paddingRight: theme.spacing(20) }; let link = undefined; const isPublic = location.pathname.startsWith("/status/uptime/public"); diff --git a/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable/index.jsx b/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable/index.jsx index 7bee4be8f..6772dcdb7 100644 --- a/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable/index.jsx +++ b/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable/index.jsx @@ -25,7 +25,7 @@ const StatusPagesTable = ({ data }) => { row.type === "distributed" ? `/status/distributed/public/${row.url}` : `/status/uptime/public/${row.url}`; - navigate(url); + window.open(url, "_blank", "noopener,noreferrer") } }, render: (row) => { diff --git a/src/Pages/Uptime/Details/Hooks/useChecksFetch.jsx b/src/Pages/Uptime/Details/Hooks/useChecksFetch.jsx index 51da1a20b..23c66b084 100644 --- a/src/Pages/Uptime/Details/Hooks/useChecksFetch.jsx +++ b/src/Pages/Uptime/Details/Hooks/useChecksFetch.jsx @@ -2,18 +2,30 @@ import { useState } from "react"; import { useEffect } from "react"; import { networkService } from "../../../../main"; import { createToast } from "../../../../Utils/toastUtils"; -export const useChecksFetch = ({ monitorId, dateRange, page, rowsPerPage }) => { +export const useChecksFetch = ({ + monitorId, + monitorType, + dateRange, + page, + rowsPerPage, +}) => { const [checks, setChecks] = useState(undefined); const [checksCount, setChecksCount] = useState(undefined); const [isLoading, setIsLoading] = useState(false); const [networkError, setNetworkError] = useState(false); useEffect(() => { + if (!monitorType) { + console.warn("Monitor Type is not provided. Fetching checks will not proceed."); + return; + } + const fetchChecks = async () => { try { setIsLoading(true); const res = await networkService.getChecksByMonitor({ monitorId: monitorId, + type: monitorType, sortOrder: "desc", limit: null, dateRange: dateRange, @@ -31,7 +43,7 @@ export const useChecksFetch = ({ monitorId, dateRange, page, rowsPerPage }) => { } }; fetchChecks(); - }, [monitorId, dateRange, page, rowsPerPage]); + }, [monitorId, monitorType, dateRange, page, rowsPerPage]); return [checks, checksCount, isLoading, networkError]; }; diff --git a/src/Pages/Uptime/Details/index.jsx b/src/Pages/Uptime/Details/index.jsx index d170f7b18..672640d67 100644 --- a/src/Pages/Uptime/Details/index.jsx +++ b/src/Pages/Uptime/Details/index.jsx @@ -59,8 +59,11 @@ const UptimeDetails = () => { uiTimezone, }); + const monitorType = monitor?.type; + const [checks, checksCount, checksAreLoading, checksNetworkError] = useChecksFetch({ monitorId, + monitorType, dateRange, page, rowsPerPage, diff --git a/src/Utils/Theme/globalTheme.js b/src/Utils/Theme/globalTheme.js index 6e05fa592..490a5baea 100644 --- a/src/Utils/Theme/globalTheme.js +++ b/src/Utils/Theme/globalTheme.js @@ -332,13 +332,13 @@ const baseTheme = (palette) => ({ color: palette.error.main, opacity: 0.8, fontSize: "var(--env-var-font-size-medium)", - marginLeft: 0, }, "& .MuiFormHelperText-root.Mui-error": { opacity: 0.8, fontSize: "var(--env-var-font-size-medium)", color: palette.error.main, + whiteSpace: 'nowrap', }, }), }, diff --git a/src/locales/gb.json b/src/locales/gb.json index 60d0899cb..7db2644d5 100644 --- a/src/locales/gb.json +++ b/src/locales/gb.json @@ -142,7 +142,8 @@ "settingsFailedToAddDemoMonitors": "Failed to add demo monitors", "settingsMonitorsDeleted": "Successfully deleted all monitors", "settingsFailedToDeleteMonitors": "Failed to delete all monitors", - + "starPromptTitle": "Star Checkmate", + "starPromptDescription": "See the latest releases and help grow the community on GitHub" "notifications": { "enableNotifications": "Enable {{platform}} notifications", "testNotification": "Test notification", diff --git a/src/locales/tr.json b/src/locales/tr.json index abd358548..d93083871 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -101,5 +101,7 @@ "settingsDemoMonitorsAdded": "Demo monitörler başarıyla eklendi", "settingsFailedToAddDemoMonitors": "Demo monitörler eklenemedi", "settingsMonitorsDeleted": "Tüm monitörler başarıyla silindi", - "settingsFailedToDeleteMonitors": "Monitörler silinemedi" + "settingsFailedToDeleteMonitors": "Monitörler silinemedi", + "starPromptTitle": "Checkmate yıldızla değerlendirin", + "starPromptDescription": "En son sürümleri görün ve GitHub'daki topluluğun büyümesine yardımcı olun" }