diff --git a/README.md b/README.md index e7038ca..b6b7009 100644 --- a/README.md +++ b/README.md @@ -80,14 +80,11 @@ If you want to know how, have a look at the respective components: ### 💅 Theme switcher -Includes a theme switcher which allows user to toggle between a light and a dark theme. Switching between them also happens automatically based on user's local sunset and sunrise times. Uses Cloudflare's geo location HTTP header functionality. - -If a visitor has set the theme manually that selection is remembered in `localStorage`, and is restored on next visit. +Includes a theme switcher which allows user to toggle between a light and a dark theme. Switching between them also happens automatically based on user's system preferences. If a visitor has set the theme manually that selection is remembered in `localStorage`, and is restored on next visit. All handled by [use-dark-mode](https://github.com/donavon/use-dark-mode) If you want to know how, have a look at the respective components: - [`src/components/molecules/ThemeSwitch.jsx`](src/components/molecules/ThemeSwitch.jsx) -- [`src/hooks/use-dark-mode.jsx`](src/hooks/use-dark-mode.jsx) ### 🏆 SEO component diff --git a/gatsby-config.js b/gatsby-config.js index 34cbc33..069e22f 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -71,6 +71,14 @@ module.exports = { theme_color_in_head: false // dynamically set in ThemeSwitch } }, + { + resolve: 'gatsby-plugin-use-dark-mode', + options: { + classNameDark: 'dark', + classNameLight: 'light', + minify: true + } + }, 'gatsby-plugin-react-helmet', 'gatsby-transformer-sharp', 'gatsby-plugin-sharp', diff --git a/package-lock.json b/package-lock.json index 23a1464..98321d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3683,6 +3683,11 @@ } } }, + "@use-it/event-listener": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@use-it/event-listener/-/event-listener-0.1.3.tgz", + "integrity": "sha512-UCHkLOVU+xj3/1R8jXz8GzDTowkzfIDPESOBlVC2ndgwUSBEqiFdwCoUEs2lcGhJOOiEdmWxF+T23C5+60eEew==" + }, "@webassemblyjs/ast": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", @@ -11464,6 +11469,15 @@ "resolved": "https://registry.npmjs.org/gatsby-plugin-svgr/-/gatsby-plugin-svgr-2.0.2.tgz", "integrity": "sha512-54REIMe79qFBAwpcnWHBkvEE9CKoEVkefF9rDXai0k642r91SZ4UeWFuAmsegPG+sPVub7tHfHu/2LVXK1I9kg==" }, + "gatsby-plugin-use-dark-mode": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gatsby-plugin-use-dark-mode/-/gatsby-plugin-use-dark-mode-1.1.2.tgz", + "integrity": "sha512-qZEg4XmCgeq4M7ojxMUTFFj951QMGb95pWnxsSvb4nsTWTYSb0qeRE+hR/4rE5GIFnh/w9GrwuyMwStM7o7R6Q==", + "requires": { + "prop-types": "^15.7.2", + "terser": "^4.0.0" + } + }, "gatsby-plugin-webpack-bundle-analyser-v2": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/gatsby-plugin-webpack-bundle-analyser-v2/-/gatsby-plugin-webpack-bundle-analyser-v2-1.1.8.tgz", @@ -23463,11 +23477,6 @@ } } }, - "suncalc": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", - "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=" - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -24545,6 +24554,23 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-dark-mode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/use-dark-mode/-/use-dark-mode-2.3.1.tgz", + "integrity": "sha512-hmcdJR96tTustRQdaQwe6jMrZHnmPqXBxgy4jaQ4gsfhwajsCpjECuq9prgDe9XxMx/f9r96o2/md6O4Lwhwjg==", + "requires": { + "@use-it/event-listener": "^0.1.2", + "use-persisted-state": "^0.3.0" + } + }, + "use-persisted-state": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/use-persisted-state/-/use-persisted-state-0.3.0.tgz", + "integrity": "sha512-UlWEq0JYg7NbvcRBZ1g6Bwe4SEbYfr1wr/D5mrmfCzSxXSwsPRYygGLlsxHcW58Rf7gGwRPBT23sNVvyVn4WYg==", + "requires": { + "@use-it/event-listener": "^0.1.2" + } + }, "utif": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", @@ -25376,16 +25402,6 @@ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" }, - "why-did-you-update": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/why-did-you-update/-/why-did-you-update-1.0.6.tgz", - "integrity": "sha512-XVrdHhdrPBDuSW8b/uH6DCb1/0984qv8KElpE8NZiRvWZX8nw49av577+ZyIrxSNesi6r2cQEhpxQTKFFHTj8A==", - "dev": true, - "requires": { - "lodash": "^4.17.11", - "react-fast-compare": "^2.0.3" - } - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index 901eb11..eab7a2d 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "gatsby-plugin-sharp": "^2.3.4", "gatsby-plugin-sitemap": "^2.2.22", "gatsby-plugin-svgr": "^2.0.2", + "gatsby-plugin-use-dark-mode": "^1.1.2", "gatsby-plugin-webpack-size": "^1.0.0", "gatsby-source-filesystem": "^2.1.39", "gatsby-transformer-json": "^2.2.20", @@ -55,7 +56,7 @@ "remark-parse": "^7.0.2", "remark-react": "^6.0.0", "shortid": "^2.2.15", - "suncalc": "^1.8.0", + "use-dark-mode": "^2.3.1", "vcf": "^2.0.6" }, "devDependencies": { @@ -92,8 +93,7 @@ "slugify": "^1.3.6", "stylelint": "^12.0.0", "stylelint-config-css-modules": "^2.1.0", - "stylelint-config-standard": "^19.0.0", - "why-did-you-update": "^1.0.6" + "stylelint-config-standard": "^19.0.0" }, "browserslist": [ ">0.2%", diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx index ffc5c72..f28e7f0 100644 --- a/src/components/Layout.jsx +++ b/src/components/Layout.jsx @@ -11,11 +11,11 @@ import styles from './Layout.module.scss' import { useMeta } from '../hooks/use-meta' // https://github.com/welldone-software/why-did-you-render -// if (process.env.NODE_ENV !== 'production') { -// // eslint-disable-next-line -// const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js') -// whyDidYouRender(React) -// } +if (process.env.NODE_ENV !== 'production') { + // eslint-disable-next-line + const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js') + whyDidYouRender(React) +} Layout.propTypes = { children: PropTypes.any.isRequired, diff --git a/src/components/atoms/Icon.jsx b/src/components/atoms/Icon.jsx index 8d81e2e..e61eedb 100644 --- a/src/components/atoms/Icon.jsx +++ b/src/components/atoms/Icon.jsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { memo } from 'react' import PropTypes from 'prop-types' // https://featherstyles.com @@ -27,7 +27,7 @@ import { import { ReactComponent as Dribbble } from '../../images/dribbble.svg' import styles from './Icon.module.scss' -const Icon = ({ name, ...props }) => { +const Icon = memo(({ name, ...props }) => { const components = { Dribbble, Email: Mail, @@ -63,7 +63,9 @@ const Icon = ({ name, ...props }) => { if (!IconMapped) return null return -} +}) + +Icon.displayName = 'Icon' Icon.propTypes = { name: PropTypes.string.isRequired diff --git a/src/components/molecules/ThemeSwitch.jsx b/src/components/molecules/ThemeSwitch.jsx index 7b1e034..c0a1c25 100644 --- a/src/components/molecules/ThemeSwitch.jsx +++ b/src/components/molecules/ThemeSwitch.jsx @@ -1,23 +1,25 @@ import React, { memo, useEffect, useState } from 'react' import PropTypes from 'prop-types' import Helmet from 'react-helmet' -import useDarkMode from '../../hooks/use-dark-mode' +import useDarkMode from 'use-dark-mode' import Icon from '../atoms/Icon' import styles from './ThemeSwitch.module.scss' -const ThemeToggle = ({ dark }) => ( +const ThemeToggle = memo(({ dark }) => ( -) +)) + +ThemeToggle.displayName = 'ThemeToggle' ThemeToggle.propTypes = { dark: PropTypes.bool.isRequired } -const ThemeToggleInput = ({ dark, toggleDark }) => ( +const ThemeToggleInput = memo(({ dark, toggleDark }) => ( toggleDark()} type="checkbox" @@ -26,36 +28,52 @@ const ThemeToggleInput = ({ dark, toggleDark }) => ( aria-describedby="toggle" checked={dark} /> -) +)) + +ThemeToggleInput.displayName = 'ThemeToggleInput' ThemeToggleInput.propTypes = { dark: PropTypes.bool.isRequired, toggleDark: PropTypes.func.isRequired } +const HeadItems = ({ bodyClass, themeColor }) => ( + + + + + +) + +HeadItems.propTypes = { + bodyClass: PropTypes.string.isRequired, + themeColor: PropTypes.string.isRequired +} + function ThemeSwitch() { - const { darkMode, toggleDark } = useDarkMode() + const { value, toggle } = useDarkMode(false, { + classNameDark: 'dark', + classNameLight: 'light' + }) const [themeColor, setThemeColor] = useState() + const [bodyClass, setBodyClass] = useState() useEffect(() => { - darkMode ? setThemeColor('#1d2224') : setThemeColor('#e7eef4') - }, [darkMode]) + setBodyClass(value ? 'dark' : null) + setThemeColor(value ? '#1d2224' : '#e7eef4') + }, [value]) return ( <> - - - - - + diff --git a/src/hooks/use-dark-mode.js b/src/hooks/use-dark-mode.js deleted file mode 100644 index a403057..0000000 --- a/src/hooks/use-dark-mode.js +++ /dev/null @@ -1,32 +0,0 @@ -import { useState, useEffect } from 'react' -import { getLocationTimes } from '../utils/getLocationTimes' -import { getCountry } from '../utils/getCountry' - -export default function useDarkMode() { - const store = typeof localStorage === 'undefined' ? null : localStorage - const darkLocalStorage = store && store.getItem('darkMode') - const [darkMode, setDarkMode] = useState(false) - - useEffect(() => { - darkLocalStorage - ? darkLocalStorage === 'true' - ? setDarkMode(true) - : setDarkMode(false) - : checkTimes() - - async function checkTimes() { - const geolocation = await getCountry() - const { sunset, sunrise } = getLocationTimes(geolocation) - const now = new Date().getHours() - const weWantItDarkTimes = now >= sunset || now <= sunrise - weWantItDarkTimes && setDarkMode(true) - } - }, [darkLocalStorage, darkMode]) - - function toggleDark() { - setDarkMode(!darkMode) - store && store.setItem('darkMode', !darkMode) - } - - return { darkMode, toggleDark } -} diff --git a/src/utils/countrycode-latlong.json b/src/utils/countrycode-latlong.json deleted file mode 100644 index 3faad38..0000000 --- a/src/utils/countrycode-latlong.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "ad": ["42.5000", "1.5000"], - "ae": ["24.0000", "54.0000"], - "af": ["33.0000", "65.0000"], - "ag": ["17.0500", "-61.8000"], - "ai": ["18.2500", "-63.1667"], - "al": ["41.0000", "20.0000"], - "am": ["40.0000", "45.0000"], - "an": ["12.2500", "-68.7500"], - "ao": ["-12.5000", "18.5000"], - "ap": ["35.0000", "105.0000"], - "aq": ["-90.0000", "0.0000"], - "ar": ["-34.0000", "-64.0000"], - "as": ["-14.3333", "-170.0000"], - "at": ["47.3333", "13.3333"], - "au": ["-27.0000", "133.0000"], - "aw": ["12.5000", "-69.9667"], - "az": ["40.5000", "47.5000"], - "ba": ["44.0000", "18.0000"], - "bb": ["13.1667", "-59.5333"], - "bd": ["24.0000", "90.0000"], - "be": ["50.8333", "4.0000"], - "bf": ["13.0000", "-2.0000"], - "bg": ["43.0000", "25.0000"], - "bh": ["26.0000", "50.5500"], - "bi": ["-3.5000", "30.0000"], - "bj": ["9.5000", "2.2500"], - "bm": ["32.3333", "-64.7500"], - "bn": ["4.5000", "114.6667"], - "bo": ["-17.0000", "-65.0000"], - "br": ["-10.0000", "-55.0000"], - "bs": ["24.2500", "-76.0000"], - "bt": ["27.5000", "90.5000"], - "bv": ["-54.4333", "3.4000"], - "bw": ["-22.0000", "24.0000"], - "by": ["53.0000", "28.0000"], - "bz": ["17.2500", "-88.7500"], - "ca": ["60.0000", "-95.0000"], - "cc": ["-12.5000", "96.8333"], - "cd": ["0.0000", "25.0000"], - "cf": ["7.0000", "21.0000"], - "cg": ["-1.0000", "15.0000"], - "ch": ["47.0000", "8.0000"], - "ci": ["8.0000", "-5.0000"], - "ck": ["-21.2333", "-159.7667"], - "cl": ["-30.0000", "-71.0000"], - "cm": ["6.0000", "12.0000"], - "cn": ["35.0000", "105.0000"], - "co": ["4.0000", "-72.0000"], - "cr": ["10.0000", "-84.0000"], - "cu": ["21.5000", "-80.0000"], - "cv": ["16.0000", "-24.0000"], - "cx": ["-10.5000", "105.6667"], - "cy": ["35.0000", "33.0000"], - "cz": ["49.7500", "15.5000"], - "de": ["51.0000", "9.0000"], - "dj": ["11.5000", "43.0000"], - "dk": ["56.0000", "10.0000"], - "dm": ["15.4167", "-61.3333"], - "do": ["19.0000", "-70.6667"], - "dz": ["28.0000", "3.0000"], - "ec": ["-2.0000", "-77.5000"], - "ee": ["59.0000", "26.0000"], - "eg": ["27.0000", "30.0000"], - "eh": ["24.5000", "-13.0000"], - "er": ["15.0000", "39.0000"], - "es": ["40.0000", "-4.0000"], - "et": ["8.0000", "38.0000"], - "eu": ["47.0000", "8.0000"], - "fi": ["64.0000", "26.0000"], - "fj": ["-18.0000", "175.0000"], - "fk": ["-51.7500", "-59.0000"], - "fm": ["6.9167", "158.2500"], - "fo": ["62.0000", "-7.0000"], - "fr": ["46.0000", "2.0000"], - "ga": ["-1.0000", "11.7500"], - "gb": ["54.0000", "-2.0000"], - "gd": ["12.1167", "-61.6667"], - "ge": ["42.0000", "43.5000"], - "gf": ["4.0000", "-53.0000"], - "gh": ["8.0000", "-2.0000"], - "gi": ["36.1833", "-5.3667"], - "gl": ["72.0000", "-40.0000"], - "gm": ["13.4667", "-16.5667"], - "gn": ["11.0000", "-10.0000"], - "gp": ["16.2500", "-61.5833"], - "gq": ["2.0000", "10.0000"], - "gr": ["39.0000", "22.0000"], - "gs": ["-54.5000", "-37.0000"], - "gt": ["15.5000", "-90.2500"], - "gu": ["13.4667", "144.7833"], - "gw": ["12.0000", "-15.0000"], - "gy": ["5.0000", "-59.0000"], - "hk": ["22.2500", "114.1667"], - "hm": ["-53.1000", "72.5167"], - "hn": ["15.0000", "-86.5000"], - "hr": ["45.1667", "15.5000"], - "ht": ["19.0000", "-72.4167"], - "hu": ["47.0000", "20.0000"], - "id": ["-5.0000", "120.0000"], - "ie": ["53.0000", "-8.0000"], - "il": ["31.5000", "34.7500"], - "in": ["20.0000", "77.0000"], - "io": ["-6.0000", "71.5000"], - "iq": ["33.0000", "44.0000"], - "ir": ["32.0000", "53.0000"], - "is": ["65.0000", "-18.0000"], - "it": ["42.8333", "12.8333"], - "jm": ["18.2500", "-77.5000"], - "jo": ["31.0000", "36.0000"], - "jp": ["36.0000", "138.0000"], - "ke": ["1.0000", "38.0000"], - "kg": ["41.0000", "75.0000"], - "kh": ["13.0000", "105.0000"], - "ki": ["1.4167", "173.0000"], - "km": ["-12.1667", "44.2500"], - "kn": ["17.3333", "-62.7500"], - "kp": ["40.0000", "127.0000"], - "kr": ["37.0000", "127.5000"], - "kw": ["29.3375", "47.6581"], - "ky": ["19.5000", "-80.5000"], - "kz": ["48.0000", "68.0000"], - "la": ["18.0000", "105.0000"], - "lb": ["33.8333", "35.8333"], - "lc": ["13.8833", "-61.1333"], - "li": ["47.1667", "9.5333"], - "lk": ["7.0000", "81.0000"], - "lr": ["6.5000", "-9.5000"], - "ls": ["-29.5000", "28.5000"], - "lt": ["56.0000", "24.0000"], - "lu": ["49.7500", "6.1667"], - "lv": ["57.0000", "25.0000"], - "ly": ["25.0000", "17.0000"], - "ma": ["32.0000", "-5.0000"], - "mc": ["43.7333", "7.4000"], - "md": ["47.0000", "29.0000"], - "me": ["42.0000", "19.0000"], - "mg": ["-20.0000", "47.0000"], - "mh": ["9.0000", "168.0000"], - "mk": ["41.8333", "22.0000"], - "ml": ["17.0000", "-4.0000"], - "mm": ["22.0000", "98.0000"], - "mn": ["46.0000", "105.0000"], - "mo": ["22.1667", "113.5500"], - "mp": ["15.2000", "145.7500"], - "mq": ["14.6667", "-61.0000"], - "mr": ["20.0000", "-12.0000"], - "ms": ["16.7500", "-62.2000"], - "mt": ["35.8333", "14.5833"], - "mu": ["-20.2833", "57.5500"], - "mv": ["3.2500", "73.0000"], - "mw": ["-13.5000", "34.0000"], - "mx": ["23.0000", "-102.0000"], - "my": ["2.5000", "112.5000"], - "mz": ["-18.2500", "35.0000"], - "na": ["-22.0000", "17.0000"], - "nc": ["-21.5000", "165.5000"], - "ne": ["16.0000", "8.0000"], - "nf": ["-29.0333", "167.9500"], - "ng": ["10.0000", "8.0000"], - "ni": ["13.0000", "-85.0000"], - "nl": ["52.5000", "5.7500"], - "no": ["62.0000", "10.0000"], - "np": ["28.0000", "84.0000"], - "nr": ["-0.5333", "166.9167"], - "nu": ["-19.0333", "-169.8667"], - "nz": ["-41.0000", "174.0000"], - "om": ["21.0000", "57.0000"], - "pa": ["9.0000", "-80.0000"], - "pe": ["-10.0000", "-76.0000"], - "pf": ["-15.0000", "-140.0000"], - "pg": ["-6.0000", "147.0000"], - "ph": ["13.0000", "122.0000"], - "pk": ["30.0000", "70.0000"], - "pl": ["52.0000", "20.0000"], - "pm": ["46.8333", "-56.3333"], - "pr": ["18.2500", "-66.5000"], - "ps": ["32.0000", "35.2500"], - "pt": ["39.5000", "-8.0000"], - "pw": ["7.5000", "134.5000"], - "py": ["-23.0000", "-58.0000"], - "qa": ["25.5000", "51.2500"], - "re": ["-21.1000", "55.6000"], - "ro": ["46.0000", "25.0000"], - "rs": ["44.0000", "21.0000"], - "ru": ["60.0000", "100.0000"], - "rw": ["-2.0000", "30.0000"], - "sa": ["25.0000", "45.0000"], - "sb": ["-8.0000", "159.0000"], - "sc": ["-4.5833", "55.6667"], - "sd": ["15.0000", "30.0000"], - "se": ["62.0000", "15.0000"], - "sg": ["1.3667", "103.8000"], - "sh": ["-15.9333", "-5.7000"], - "si": ["46.0000", "15.0000"], - "sj": ["78.0000", "20.0000"], - "sk": ["48.6667", "19.5000"], - "sl": ["8.5000", "-11.5000"], - "sm": ["43.7667", "12.4167"], - "sn": ["14.0000", "-14.0000"], - "so": ["10.0000", "49.0000"], - "sr": ["4.0000", "-56.0000"], - "st": ["1.0000", "7.0000"], - "sv": ["13.8333", "-88.9167"], - "sy": ["35.0000", "38.0000"], - "sz": ["-26.5000", "31.5000"], - "tc": ["21.7500", "-71.5833"], - "td": ["15.0000", "19.0000"], - "tf": ["-43.0000", "67.0000"], - "tg": ["8.0000", "1.1667"], - "th": ["15.0000", "100.0000"], - "tj": ["39.0000", "71.0000"], - "tk": ["-9.0000", "-172.0000"], - "tm": ["40.0000", "60.0000"], - "tn": ["34.0000", "9.0000"], - "to": ["-20.0000", "-175.0000"], - "tr": ["39.0000", "35.0000"], - "tt": ["11.0000", "-61.0000"], - "tv": ["-8.0000", "178.0000"], - "tw": ["23.5000", "121.0000"], - "tz": ["-6.0000", "35.0000"], - "ua": ["49.0000", "32.0000"], - "ug": ["1.0000", "32.0000"], - "um": ["19.2833", "166.6000"], - "us": ["38.0000", "-97.0000"], - "uy": ["-33.0000", "-56.0000"], - "uz": ["41.0000", "64.0000"], - "va": ["41.9000", "12.4500"], - "vc": ["13.2500", "-61.2000"], - "ve": ["8.0000", "-66.0000"], - "vg": ["18.5000", "-64.5000"], - "vi": ["18.3333", "-64.8333"], - "vn": ["16.0000", "106.0000"], - "vu": ["-16.0000", "167.0000"], - "wf": ["-13.3000", "-176.2000"], - "ws": ["-13.5833", "-172.3333"], - "ye": ["15.0000", "48.0000"], - "yt": ["-12.8333", "45.1667"], - "za": ["-29.0000", "24.0000"], - "zm": ["-15.0000", "30.0000"], - "zw": ["-20.0000", "30.0000"] -} diff --git a/src/utils/getCountry.js b/src/utils/getCountry.js deleted file mode 100644 index f2603c5..0000000 --- a/src/utils/getCountry.js +++ /dev/null @@ -1,28 +0,0 @@ -// -// Get user location from Cloudflare's geo location HTTP header -// -// @returns country: string -// -export const getCountry = async () => { - try { - const data = await fetch('/cdn-cgi/trace?no-cache=1') - const text = await data.text().replace(/ /g, '') - const lines = text.split('\n') - - let keyValue - let trace = [] - - await lines.forEach(line => { - keyValue = line.split('=') - trace[keyValue[0]] = decodeURIComponent(keyValue[1] || '') - }) - - const country = trace['loc'] - - if (country && country !== 'XX') { - return country - } - } catch (error) { - return null // fail silently - } -} diff --git a/src/utils/getCountry.test.js b/src/utils/getCountry.test.js deleted file mode 100644 index 2e0f902..0000000 --- a/src/utils/getCountry.test.js +++ /dev/null @@ -1,31 +0,0 @@ -import { getCountry } from './getCountry' - -const mockFetch = data => - jest.fn().mockImplementationOnce(() => - Promise.resolve({ - ok: true, - Id: '123', - text: () => data - // json: () => data - }) - ) - -describe('getCountry', () => { - it('fetches and returns correct value', async () => { - global.fetch = mockFetch('loc=DE') - const country = await getCountry() - - expect(global.fetch).toHaveBeenCalledTimes(1) - expect(global.fetch).toHaveBeenCalledWith('/cdn-cgi/trace?no-cache=1') - expect(country).toBe('DE') - }) - - it('returns nothing when XX country', async () => { - global.fetch = mockFetch('loc=XX') - const country = await getCountry() - - expect(global.fetch).toHaveBeenCalledTimes(1) - expect(global.fetch).toHaveBeenCalledWith('/cdn-cgi/trace?no-cache=1') - expect(country).toBe(undefined) - }) -}) diff --git a/src/utils/getLocationTimes.js b/src/utils/getLocationTimes.js deleted file mode 100644 index c627fd7..0000000 --- a/src/utils/getLocationTimes.js +++ /dev/null @@ -1,25 +0,0 @@ -import SunCalc from 'suncalc' -import countrycodes from './countrycode-latlong.json' - -// -// All the checks to see if we should go dark or light -// -export const getLocationTimes = location => { - // fallback times, in hours - let sunrise = 7 - let sunset = 19 - - // times based on detected country code - if (location && location !== 'XX' && location !== 'T1') { - const country = location.toLowerCase() - const times = SunCalc.getTimes( - new Date(), - countrycodes[country][0], - countrycodes[country][1] - ) - sunrise = times.sunrise.getHours() - sunset = times.sunset.getHours() - } - - return { sunrise, sunset } -} diff --git a/src/utils/getLocationTimes.test.js b/src/utils/getLocationTimes.test.js deleted file mode 100644 index 96bafde..0000000 --- a/src/utils/getLocationTimes.test.js +++ /dev/null @@ -1,9 +0,0 @@ -import { getLocationTimes } from './getLocationTimes' - -describe('getLocationTimes', () => { - it('returns values', async () => { - const { sunset, sunrise } = await getLocationTimes('DE') - expect(sunset).toBeDefined() - expect(sunrise).toBeDefined() - }) -})