Skip to content

Commit

Permalink
Merge pull request #261 from mikecao/dev
Browse files Browse the repository at this point in the history
v0.71.0
  • Loading branch information
mikecao authored Oct 2, 2020
2 parents e60376f + dd651e3 commit a87356a
Show file tree
Hide file tree
Showing 14 changed files with 476 additions and 90 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
.DS_Store
.idea
*.iml
.vscode/*

# debug
npm-debug.log*
Expand Down
10 changes: 5 additions & 5 deletions components/common/UpdateNotice.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ import Button from './Button';
import useForceUpdate from '../../hooks/useForceUpdate';

export default function UpdateNotice() {
const forceUpdte = useForceUpdate();
const { hasUpdate, latest, updateCheck } = useVersion();
const forceUpdate = useForceUpdate();
const { hasUpdate, checked, latest, updateCheck } = useVersion(true);

function handleViewClick() {
location.href = 'https://github.com/mikecao/umami/releases';
updateCheck();
forceUpdte();
forceUpdate();
}

function handleDismissClick() {
updateCheck();
forceUpdte();
forceUpdate();
}

if (!hasUpdate) {
if (!hasUpdate || checked) {
return null;
}

Expand Down
5 changes: 3 additions & 2 deletions components/layout/Footer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ import React from 'react';
import { FormattedMessage } from 'react-intl';
import Link from 'components/common/Link';
import styles from './Footer.module.css';
import useVersion from 'hooks/useVersion';

export default function Footer() {
const version = process.env.VERSION;
const { current } = useVersion();
return (
<footer className="container">
<div className={styles.footer}>
Expand All @@ -22,7 +23,7 @@ export default function Footer() {
}}
/>
</div>
<div>{`v${version}`}</div>
<div>{`v${current}`}</div>
</div>
</footer>
);
Expand Down
8 changes: 3 additions & 5 deletions components/pages/WebsiteList.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
import { useRouter } from 'next/router';
import Link from 'components/common/Link';
import WebsiteChart from 'components/metrics/WebsiteChart';
import Page from 'components/layout/Page';
import Button from 'components/common/Button';
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
import useFetch from 'hooks/useFetch';
import Arrow from 'assets/arrow-right.svg';
import styles from './WebsiteList.module.css';

export default function WebsiteList({ userId }) {
const router = useRouter();
const { data } = useFetch('/api/websites', { user_id: userId });

if (!data) {
Expand All @@ -33,9 +31,9 @@ export default function WebsiteList({ userId }) {
/>
}
>
<Button icon={<Arrow />} size="medium" onClick={() => router.push('/settings')}>
<Link href="/settings" icon={<Arrow />} iconRight>
<FormattedMessage id="message.go-to-settings" defaultMessage="Go to settings" />
</Button>
</Link>
</EmptyPlaceholder>
)}
</Page>
Expand Down
18 changes: 7 additions & 11 deletions hooks/useVersion.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@
import { useEffect, useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import semver from 'semver';
import { getItem, setItem } from 'lib/web';
import { checkVersion } from 'redux/actions/app';
import { VERSION_CHECK } from 'lib/constants';
import { getItem, setItem } from 'lib/web';

export default function useVersion() {
export default function useVersion(check) {
const dispatch = useDispatch();
const versions = useSelector(state => state.app.versions);
const lastCheck = getItem(VERSION_CHECK);

const { current, latest } = versions;
const hasUpdate = latest && semver.gt(latest, current) && lastCheck?.version !== latest;
const checked = versions.latest === getItem(VERSION_CHECK)?.version;

const updateCheck = useCallback(() => {
setItem(VERSION_CHECK, { version: latest, time: Date.now() });
setItem(VERSION_CHECK, { version: versions.latest, time: Date.now() });
}, [versions]);

useEffect(() => {
if (!versions.latest) {
if (check && !versions.latest) {
dispatch(checkVersion());
}
}, [versions]);
}, [versions, check]);

return { ...versions, hasUpdate, updateCheck };
return { ...versions, checked, updateCheck };
}
97 changes: 97 additions & 0 deletions lang/nb-NO.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{
"button.add-account": "Legg til konto",
"button.add-website": "Legg til nettsted",
"button.back": "Tilbake",
"button.cancel": "Avvis",
"button.change-password": "Bytt passord",
"button.copy-to-clipboard": "Kopier til utklippstavle",
"button.date-range": "Datointervall",
"button.delete": "Slett",
"button.dismiss": "Avbryt",
"button.edit": "Rediger",
"button.login": "Logg inn",
"button.more": "Mer",
"button.refresh": "Oppdater",
"button.reset": "Nullstill",
"button.save": "Lagre",
"button.single-day": "Enkelt dag",
"button.view-details": "Vis detaljer",
"label.accounts": "Kontoer",
"label.administrator": "Administrator",
"label.confirm-password": "Godkjenn passord",
"label.current-password": "Nåværende passord",
"label.custom-range": "Egendefinert utvalg",
"label.dashboard": "Dashboard",
"label.default-date-range": "Standard datoperiode",
"label.domain": "Domene",
"label.enable-share-url": "Aktiver delings-URL",
"label.invalid": "Ugyldig",
"label.invalid-domain": "Ugyldig domene",
"label.last-days": "Siste {x} dager",
"label.last-hours": "Siste {x} timer",
"label.logged-in-as": "Logget på som {brukernavn}",
"label.logout": "Logg ut",
"label.name": "Navn",
"label.new-password": "Nytt passord",
"label.password": "Passord",
"label.passwords-dont-match": "Passordene er ikke like",
"label.profile": "Profil",
"label.required": "Påkrevd",
"label.settings": "Innstillinger",
"label.this-month": "Denne måneden",
"label.this-week": "Denne uka",
"label.this-year": "I år",
"label.timezone": "Tidssone",
"label.today": "I dag",
"label.unknown": "Ukjent",
"label.username": "Brukernavn",
"label.websites": "Nettsteder",
"message.active-users": "{x} {x, plural, one {besøkende} other {besøkende}} nå",
"message.confirm-delete": "Er du sikker på at du vil slette {target}?",
"message.copied": "Kopiert!",
"message.delete-warning": "Alle tilknyttede data slettes også.",
"message.failure": "Noe gikk galt.",
"message.get-share-url": "Få delings-URL",
"message.get-tracking-code": "Få sporingskode",
"message.go-to-settings": "Gå til innstillinger",
"message.incorrect-username-password": "Ugyldig brukernavn/passord.",
"message.new-version-available": "En ny versjon av umami {version} er tilgjengelig!",
"message.no-data-available": "Ingen data tilgjengelig.",
"message.no-websites-configured": "Du har ikke satt opp noen nettsteder.",
"message.page-not-found": "Side ikke funnet.",
"message.powered-by": "Drevet av {name}",
"message.save-success": "Lagret!",
"message.share-url": "Dette er den offentlige delings-URL-en for {target}.",
"message.track-stats": "For å spore statistikk for {target}, plasser følgende kode i {head}-delen av nettstedet ditt.",
"message.type-delete": "Skriv inn {delete} i boksen nedenfor for å bekrefte.",
"metrics.actions": "Handlinger",
"metrics.average-visit-time": "Gjennomsnittlig besøkelsestid",
"metrics.bounce-rate": "Avvisningsfrekvens",
"metrics.browsers": "Nettlesere",
"metrics.countries": "Land",
"metrics.device.desktop": "Desktop",
"metrics.device.laptop": "Laptop",
"metrics.device.mobile": "Mobiltelefon",
"metrics.device.tablet": "Nettbrett",
"metrics.devices": "Enheter",
"metrics.events": "Arrangementer",
"metrics.filter.combined": "Kombinert",
"metrics.filter.domain-only": "Bare domene",
"metrics.filter.raw": "",
"metrics.operating-systems": "Operativsystemer",
"metrics.page-views": "Sidevisninger",
"metrics.pages": "Sider",
"metrics.referrers": "Referanser",
"metrics.unique-visitors": "Unike besøkende",
"metrics.views": "Visninger",
"metrics.visitors": "Besøkende",
"title.add-account": "Legg til konto",
"title.add-website": "Legg til nettsted",
"title.change-password": "Bytt passord",
"title.delete-account": "Slett konto",
"title.delete-website": "Slett nettstedet",
"title.edit-account": "Rediger konto",
"title.edit-website": "Rediger nettsted",
"title.share-url": "Del URL",
"title.tracking-code": "Sporingskode"
}
6 changes: 5 additions & 1 deletion lib/lang.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { format } from 'date-fns';
import { enUS, nl, zhCN, tr, ru, de, ja, es, fr, da, sv, el, pt, ro } from 'date-fns/locale';
import { enUS, nl, zhCN, tr, ru, de, ja, es, fr, da, sv, el, pt, ro, nb } from 'date-fns/locale';
import enMessages from 'lang-compiled/en-US.json';
import nlMessages from 'lang-compiled/nl-NL.json';
import zhCNMessages from 'lang-compiled/zh-CN.json';
Expand All @@ -16,6 +16,7 @@ import grMessages from 'lang-compiled/el-GR.json';
import foMessages from 'lang-compiled/fo-FO.json';
import ptMessages from 'lang-compiled/pt-PT.json';
import roMessages from 'lang-compiled/ro-RO.json';
import nbNOMessages from 'lang-compiled/nb-NO.json';

export const messages = {
'en-US': enMessages,
Expand All @@ -34,6 +35,7 @@ export const messages = {
'fo-FO': foMessages,
'pt-PT': ptMessages,
'ro-RO': roMessages,
'nb-NO': nbNOMessages,
};

export const dateLocales = {
Expand All @@ -53,6 +55,7 @@ export const dateLocales = {
'fo-FO': da,
'pt-PT': pt,
'ro-RO': ro,
'nb-NO': nb,
};

export const menuOptions = [
Expand All @@ -67,6 +70,7 @@ export const menuOptions = [
{ label: '日本語', value: 'ja-JP', display: 'ja' },
{ label: 'Монгол', value: 'mn-MN', display: 'mn' },
{ label: 'Nederlands', value: 'nl-NL', display: 'nl' },
{ label: 'Norsk Bokmål', value: 'nb-NO', display: 'nb' },
{ label: 'Português', value: 'pt-PT', display: 'pt' },
{ label: 'Русский', value: 'ru-RU', display: 'ru' },
{ label: 'Română', value: 'ro-RO', display: 'ro' },
Expand Down
2 changes: 1 addition & 1 deletion lib/queries.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export async function runQuery(query) {
});
}

export async function rawQuery(query, params) {
export async function rawQuery(query, params = []) {
const db = getDatabase();

if (db !== POSTGRESQL && db !== MYSQL) {
Expand Down
16 changes: 10 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "umami",
"version": "0.68.0",
"version": "0.70.0",
"description": "A simple, fast, website analytics alternative to Google Analytics. ",
"author": "Mike Cao <[email protected]>",
"license": "MIT",
Expand Down Expand Up @@ -31,7 +31,10 @@
"merge-lang": "node scripts/merge-lang.js",
"format-lang": "node scripts/format-lang.js",
"compile-lang": "formatjs compile-folder --ast build lang-compiled",
"check-lang": "node scripts/check-lang.js"
"check-lang": "node scripts/check-lang.js",
"loadtest": "node scripts/loadtest.js",
"loadtest:medium": "node scripts/loadtest.js --weight=medium",
"loadtest:heavy": "node scripts/loadtest.js --weight=heavy --verbose"
},
"lint-staged": {
"**/*.js": [
Expand Down Expand Up @@ -63,7 +66,8 @@
"date-fns": "^2.16.1",
"date-fns-tz": "^1.0.10",
"detect-browser": "^5.1.1",
"formik": "^2.1.6",
"dotenv": "^8.2.0",
"formik": "^2.1.7",
"immer": "^7.0.9",
"is-localhost-ip": "^1.4.0",
"isbot-fast": "^1.2.0",
Expand All @@ -73,7 +77,7 @@
"next": "^9.5.3",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-intl": "^5.8.3",
"react-intl": "^5.8.4",
"react-redux": "^7.2.1",
"react-simple-maps": "^2.1.2",
"react-spring": "^8.0.27",
Expand All @@ -89,15 +93,14 @@
"uuid": "^8.3.0"
},
"devDependencies": {
"@formatjs/cli": "^2.12.0",
"@formatjs/cli": "^2.13.0",
"@prisma/cli": "2.8.0",
"@rollup/plugin-buble": "^0.21.3",
"@rollup/plugin-node-resolve": "^9.0.0",
"@rollup/plugin-replace": "^2.3.3",
"@svgr/webpack": "^5.4.0",
"cross-env": "^7.0.2",
"del": "^6.0.0",
"dotenv": "^8.2.0",
"dotenv-cli": "^4.0.0",
"eslint": "^7.10.0",
"eslint-config-prettier": "^6.12.0",
Expand All @@ -107,6 +110,7 @@
"extract-react-intl-messages": "^4.1.1",
"husky": "^4.3.0",
"lint-staged": "^10.4.0",
"loadtest": "5.1.0",
"npm-run-all": "^4.1.5",
"postcss-flexbugs-fixes": "^4.2.1",
"postcss-import": "^12.0.1",
Expand Down
1 change: 1 addition & 0 deletions public/country/nb-NO.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"AF":"Afghanistan","AL":"Albania","DZ":"Algerie","AS":"Amerikansk Samoa","AD":"Andorra","AO":"Angola","AI":"Anguilla","AQ":"Antarktis","AG":"Antigua og Barbuda","AR":"Argentina","AM":"Armenia","AW":"Aruba","AZ":"Aserbajdsjan","AU":"Australia","BS":"Bahamas","BH":"Bahrain","BD":"Bangladesh","BB":"Barbados","BE":"Belgia","BZ":"Belize","BJ":"Benin","BM":"Bermuda","BT":"Bhutan","BO":"Bolivia","BA":"Bosnia-Hercegovina","BW":"Botswana","BV":"Bouvet\u00f8ya","BR":"Brasil","BN":"Brunei","BG":"Bulgaria","BF":"Burkina Faso","BI":"Burundi","CA":"Canada","KY":"Cayman\u00f8yene","CL":"Chile","CX":"Christmas\u00f8ya","CO":"Colombia","CK":"Cook\u00f8yene","CR":"Costa Rica","CU":"Cuba","CW":"Cura\u00e7ao","DK":"Danmark","VI":"De amerikanske jomfru\u00f8yene","VG":"De britiske jomfru\u00f8yene","AE":"De forente arabiske emirater","TF":"De franske s\u00f8rterritorier","DO":"Den dominikanske republikk","CF":"Den sentralafrikanske republikk","IO":"Det britiske territoriet i Indiahavet","PS":"Det palestinske omr\u00e5det","DJ":"Djibouti","DM":"Dominica","EC":"Ecuador","EG":"Egypt","GQ":"Ekvatorial-Guinea","SV":"El Salvador","CI":"Elfenbenskysten","ER":"Eritrea","EE":"Estland","SZ":"Eswatini","ET":"Etiopia","FK":"Falklands\u00f8yene","FJ":"Fiji","PH":"Filippinene","FI":"Finland","FR":"Frankrike","GF":"Fransk Guyana","PF":"Fransk Polynesia","FO":"F\u00e6r\u00f8yene","GA":"Gabon","GM":"Gambia","GE":"Georgia","GH":"Ghana","GI":"Gibraltar","GD":"Grenada","GL":"Gr\u00f8nland","GP":"Guadeloupe","GU":"Guam","GT":"Guatemala","GG":"Guernsey","GN":"Guinea","GW":"Guinea-Bissau","GY":"Guyana","HT":"Haiti","HM":"Heard- og McDonald\u00f8yene","GR":"Hellas","HN":"Honduras","HK":"Hongkong S.A.R. Kina","BY":"Hviterussland","IN":"India","ID":"Indonesia","IQ":"Irak","IR":"Iran","IE":"Irland","IS":"Island","IL":"Israel","IT":"Italia","JM":"Jamaica","JP":"Japan","YE":"Jemen","JE":"Jersey","JO":"Jordan","KH":"Kambodsja","CM":"Kamerun","CV":"Kapp Verde","BQ":"Karibisk Nederland","KZ":"Kasakhstan","KE":"Kenya","CN":"Kina","KG":"Kirgisistan","KI":"Kiribati","CC":"Kokos\u00f8yene","KM":"Komorene","CG":"Kongo-Brazzaville","CD":"Kongo-Kinshasa","HR":"Kroatia","KW":"Kuwait","CY":"Kypros","LA":"Laos","LV":"Latvia","LS":"Lesotho","LB":"Libanon","LR":"Liberia","LY":"Libya","LI":"Liechtenstein","LT":"Litauen","LU":"Luxemburg","MO":"Macao S.A.R. Kina","MG":"Madagaskar","MW":"Malawi","MY":"Malaysia","MV":"Maldivene","ML":"Mali","MT":"Malta","IM":"Man","MA":"Marokko","MH":"Marshall\u00f8yene","MQ":"Martinique","MR":"Mauritania","MU":"Mauritius","YT":"Mayotte","MX":"Mexico","FM":"Mikronesiaf\u00f8derasjonen","MD":"Moldova","MC":"Monaco","MN":"Mongolia","ME":"Montenegro","MS":"Montserrat","MZ":"Mosambik","MM":"Myanmar (Burma)","NA":"Namibia","NR":"Nauru","NL":"Nederland","NP":"Nepal","NZ":"New Zealand","NI":"Nicaragua","NE":"Niger","NG":"Nigeria","NU":"Niue","KP":"Nord-Korea","MK":"Nord-Makedonia","MP":"Nord-Marianene","NF":"Norfolk\u00f8ya","NO":"Norge","NC":"Ny-Caledonia","OM":"Oman","PK":"Pakistan","PW":"Palau","PA":"Panama","PG":"Papua Ny-Guinea","PY":"Paraguay","PE":"Peru","PN":"Pitcairn\u00f8yene","PL":"Polen","PT":"Portugal","PR":"Puerto Rico","QA":"Qatar","RE":"R\u00e9union","RO":"Romania","RU":"Russland","RW":"Rwanda","KN":"Saint Kitts og Nevis","BL":"Saint-Barth\u00e9lemy","MF":"Saint-Martin","PM":"Saint-Pierre-et-Miquelon","SB":"Salomon\u00f8yene","WS":"Samoa","SM":"San Marino","ST":"S\u00e3o Tom\u00e9 og Pr\u00edncipe","SA":"Saudi-Arabia","SN":"Senegal","RS":"Serbia","SC":"Seychellene","SL":"Sierra Leone","SG":"Singapore","SX":"Sint Maarten","SK":"Slovakia","SI":"Slovenia","SO":"Somalia","ES":"Spania","LK":"Sri Lanka","SH":"St. Helena","LC":"St. Lucia","VC":"St. Vincent og Grenadinene","GB":"Storbritannia","SD":"Sudan","SR":"Surinam","SJ":"Svalbard og Jan Mayen","CH":"Sveits","SE":"Sverige","SY":"Syria","ZA":"S\u00f8r-Afrika","GS":"S\u00f8r-Georgia og S\u00f8r-Sandwich\u00f8yene","KR":"S\u00f8r-Korea","SS":"S\u00f8r-Sudan","TJ":"Tadsjikistan","TW":"Taiwan","TZ":"Tanzania","TH":"Thailand","TG":"Togo","TK":"Tokelau","TO":"Tonga","TT":"Trinidad og Tobago","TD":"Tsjad","CZ":"Tsjekkia","TN":"Tunisia","TM":"Turkmenistan","TC":"Turks- og Caicos\u00f8yene","TV":"Tuvalu","TR":"Tyrkia","DE":"Tyskland","UG":"Uganda","UA":"Ukraina","HU":"Ungarn","UY":"Uruguay","US":"USA","UM":"USAs ytre \u00f8yer","UZ":"Usbekistan","VU":"Vanuatu","VA":"Vatikanstaten","VE":"Venezuela","EH":"Vest-Sahara","VN":"Vietnam","WF":"Wallis og Futuna","ZM":"Zambia","ZW":"Zimbabwe","TL":"\u00d8st-Timor","AT":"\u00d8sterrike","AX":"\u00c5land"}
7 changes: 6 additions & 1 deletion redux/actions/app.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { createSlice } from '@reduxjs/toolkit';
import { getItem } from 'lib/web';
import { LOCALE_CONFIG, THEME_CONFIG } from 'lib/constants';
import { LOCALE_CONFIG, THEME_CONFIG, VERSION_CHECK } from 'lib/constants';
import semver from 'semver';

const app = createSlice({
name: 'app',
Expand All @@ -10,6 +11,7 @@ const app = createSlice({
versions: {
current: process.env.VERSION,
latest: null,
hasUpdate: false,
},
},
reducers: {
Expand Down Expand Up @@ -60,11 +62,14 @@ export function checkVersion() {
const { tag_name } = data;

const latest = tag_name.startsWith('v') ? tag_name.slice(1) : tag_name;
const lastCheck = getItem(VERSION_CHECK);
const hasUpdate = latest && semver.gt(latest, current) && lastCheck?.version !== latest;

return dispatch(
setVersions({
current,
latest,
hasUpdate,
}),
);
};
Expand Down
Loading

1 comment on commit a87356a

@vercel
Copy link

@vercel vercel bot commented on a87356a Oct 2, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.