From a3dd9aa22091dc0571fa52933f5cceb3c96ce8e5 Mon Sep 17 00:00:00 2001 From: Travis Lawrence Date: Wed, 18 Dec 2024 22:08:46 -0800 Subject: [PATCH 1/4] more --- package.json | 1 + src/constants.ts | 4 +- src/hooks/useFetchApod.ts | 2 +- src/manifest.json | 2 +- src/pages/types.ts | 4 +- src/utilities/images.ts | 29 ++----- yarn.lock | 154 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 170 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index f9003f7..0f3fa48 100755 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-hot-loader": "^4.13.0", + "sass": "^1.83.0", "styled-components": "^5.3.3", "use-keyboard-shortcut": "^1.1.4" }, diff --git a/src/constants.ts b/src/constants.ts index d2d7cf6..2a30f89 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,7 +1,7 @@ import { TAppOptions } from './pages/types'; -export const APOD_API_URL = 'https://api.nasa.gov/planetary/apod'; -export const API_KEY = 'hPgI2kGa1jCxvfXjv6hq6hsYBQawAqvjMaZNs447'; +export const REDUNDANT_URL = 'https://apod.redundantrobot.com/apod'; +export const REDUNDANT_RANDOM_URL = `${REDUNDANT_URL}/random`; export const MIN_APOD_DATE = `1995-6-16`; export const DELAY_FOR_HD_LOAD = 1500; diff --git a/src/hooks/useFetchApod.ts b/src/hooks/useFetchApod.ts index d113e29..1e5ce5a 100644 --- a/src/hooks/useFetchApod.ts +++ b/src/hooks/useFetchApod.ts @@ -57,7 +57,7 @@ const useFetchApod = ({ hiResOnly, setDrawerIsOpen }: TFetchApodParams) => { setErrorMessage(false); if (response.media_type === 'other') { - console.log(response, 'OTHER REPSONSE'); + console.log(response, 'OTHER RESPONSE'); fetchApod({ random: true }); return; } diff --git a/src/manifest.json b/src/manifest.json index 8d1892d..3fc2334 100755 --- a/src/manifest.json +++ b/src/manifest.json @@ -4,7 +4,7 @@ "description": "Displays the Astronomy Picture of the Day (APOD) and allows you to review similar images of planets, stars, galaxies and nebulas", "options_page": "popup.html", "short_name": "APOD by The Trav", - "version": "4.1.4", + "version": "4.2.0", "background": { "service_worker": "background.bundle.js" }, "action": { "default_popup": "popup.html", diff --git a/src/pages/types.ts b/src/pages/types.ts index 3f78b47..7ab5490 100644 --- a/src/pages/types.ts +++ b/src/pages/types.ts @@ -27,7 +27,7 @@ export type TFavoriteItem = { imgUrl?: string; }; -export type TFavorites = { [date: string]: TFavoriteItem }; +export type TFavorites = Record; export type TAppOptions = { [APOD_FAVORITES]: TFavorites; @@ -58,6 +58,8 @@ export type TApodResponse = { isImageHd?: boolean; error?: any; errorMessage?: string; + apodLink?: string; + thumbnailLink?: string; }; export type TUseNavigationProps = { diff --git a/src/utilities/images.ts b/src/utilities/images.ts index 526af07..760d734 100644 --- a/src/utilities/images.ts +++ b/src/utilities/images.ts @@ -1,8 +1,7 @@ import { - API_KEY, - APOD_API_URL, RANDOM_APODS, - RANDOM_FETCH_COUNT, + REDUNDANT_RANDOM_URL, + REDUNDANT_URL, RELOAD_RANDOM_LIMIT, } from '../constants'; import axios from 'axios'; @@ -16,11 +15,7 @@ import { let isReloadingCache = false; const reloadCache = async () => { - const params = { - api_key: API_KEY, - count: RANDOM_FETCH_COUNT, - }; - const resp = await axios.get(APOD_API_URL, { params }); + const resp = await axios.get(REDUNDANT_RANDOM_URL); const images = resp.data.map((item: TApodResponse) => transformResponse(item) ); @@ -73,18 +68,14 @@ const transformResponse = (data: TApodResponse) => { preloadImage(data.url); preloadImage(data.hdurl); } - data.apodUrl = `https://apod.nasa.gov/apod/ap${linkDateFormat( - data.date - )}.html`; + data.apodUrl = + data.apodLink || + `https://apod.nasa.gov/apod/ap${linkDateFormat(data.date)}.html`; data.date = trimDateString(data.date); data.isToday = isDateToday(data.date); return data; }; export const fetchRandomImage = async (): Promise => { - const params = { - api_key: API_KEY, - count: RANDOM_FETCH_COUNT, - }; try { // Look in cache const cacheResp = await randomCache(); @@ -93,7 +84,7 @@ export const fetchRandomImage = async (): Promise => { } // Otherwise fetch - const resp = await axios.get(APOD_API_URL, { params }); + const resp = await axios.get(REDUNDANT_RANDOM_URL); const images = resp.data.map((item: TApodResponse) => transformResponse(item) ); @@ -113,12 +104,8 @@ export const fetchRandomImage = async (): Promise => { export const fetchImage = async ( fetchOptions: TFetchOptions = {} ): Promise => { - const params = { - api_key: API_KEY, - ...fetchOptions, - }; try { - const resp = await axios.get(APOD_API_URL, { params }); + const resp = await axios.get(REDUNDANT_URL, { params: fetchOptions }); const data = transformResponse(resp.data); saveToHistory(data); return data; diff --git a/yarn.lock b/yarn.lock index c96d049..c4f0577 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1234,6 +1234,95 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@parcel/watcher-android-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" + integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== + +"@parcel/watcher-darwin-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" + integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + +"@parcel/watcher-darwin-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" + integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== + +"@parcel/watcher-freebsd-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" + integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== + +"@parcel/watcher-linux-arm-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" + integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== + +"@parcel/watcher-linux-arm-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" + integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== + +"@parcel/watcher-linux-arm64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" + integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== + +"@parcel/watcher-linux-arm64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" + integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== + +"@parcel/watcher-linux-x64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz#2e254600fda4e32d83942384d1106e1eed84494d" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + +"@parcel/watcher-linux-x64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz#01fcea60fedbb3225af808d3f0a7b11229792eef" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== + +"@parcel/watcher-win32-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" + integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== + +"@parcel/watcher-win32-ia32@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" + integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== + +"@parcel/watcher-win32-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" + integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== + +"@parcel/watcher@^2.4.1": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.0.tgz#5c88818b12b8de4307a9d3e6dc3e28eba0dfbd10" + integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.0" + "@parcel/watcher-darwin-arm64" "2.5.0" + "@parcel/watcher-darwin-x64" "2.5.0" + "@parcel/watcher-freebsd-x64" "2.5.0" + "@parcel/watcher-linux-arm-glibc" "2.5.0" + "@parcel/watcher-linux-arm-musl" "2.5.0" + "@parcel/watcher-linux-arm64-glibc" "2.5.0" + "@parcel/watcher-linux-arm64-musl" "2.5.0" + "@parcel/watcher-linux-x64-glibc" "2.5.0" + "@parcel/watcher-linux-x64-musl" "2.5.0" + "@parcel/watcher-win32-arm64" "2.5.0" + "@parcel/watcher-win32-ia32" "2.5.0" + "@parcel/watcher-win32-x64" "2.5.0" + "@rushstack/eslint-patch@^1.1.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" @@ -2183,6 +2272,13 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" @@ -2333,6 +2429,13 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -2721,6 +2824,11 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -3368,6 +3476,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" @@ -3940,6 +4055,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immutable@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.3.tgz#aa037e2313ea7b5d400cd9298fa14e404c933db1" + integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -4588,6 +4708,14 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -4798,6 +4926,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + node-forge@^1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" @@ -5424,6 +5557,11 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -5647,6 +5785,17 @@ sass-loader@^12.4.0: klona "^2.0.4" neo-async "^2.6.2" +sass@^1.83.0: + version "1.83.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.0.tgz#e36842c0b88a94ed336fd16249b878a0541d536f" + integrity sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" @@ -5874,6 +6023,11 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" +"source-map-js@>=0.6.2 <2.0.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" From 461c9ab7c3f5c125fbe60ec8e6ebec51fe34d760 Mon Sep 17 00:00:00 2001 From: Travis Lawrence Date: Sat, 21 Dec 2024 18:09:51 -0800 Subject: [PATCH 2/4] random still go through api --- src/manifest.json | 5 ++++- src/utilities/images.ts | 24 +++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/manifest.json b/src/manifest.json index 3fc2334..036ef82 100755 --- a/src/manifest.json +++ b/src/manifest.json @@ -22,6 +22,9 @@ "matches": [] } ], - "host_permissions": ["https://api.nasa.gov/*"], + "host_permissions": [ + "https://api.nasa.gov/*", + "https://apod.redundantrobot.com/apod/*" + ], "permissions": ["topSites", "storage"] } diff --git a/src/utilities/images.ts b/src/utilities/images.ts index 760d734..8c2d58b 100644 --- a/src/utilities/images.ts +++ b/src/utilities/images.ts @@ -16,9 +16,15 @@ import { let isReloadingCache = false; const reloadCache = async () => { const resp = await axios.get(REDUNDANT_RANDOM_URL); - const images = resp.data.map((item: TApodResponse) => - transformResponse(item) - ); + const images = resp.data.map((item: TApodResponse) => { + const data = transformResponse(item); + return { + date: data.date, + title: data.title, + media_type: data.media_type, + url: data.url, + }; + }); getLocalChrome([RANDOM_APODS], (options) => { const cache = options[RANDOM_APODS]; @@ -80,19 +86,19 @@ export const fetchRandomImage = async (): Promise => { // Look in cache const cacheResp = await randomCache(); if (cacheResp) { - return cacheResp; + const resp = await fetchImage({ date: cacheResp.date }); + return resp; } // Otherwise fetch - const resp = await axios.get(REDUNDANT_RANDOM_URL); - const images = resp.data.map((item: TApodResponse) => - transformResponse(item) - ); + const { data } = await axios.get(REDUNDANT_RANDOM_URL); + const images = data.map((item: TApodResponse) => transformResponse(item)); return new Promise((resolve) => { setLocalChrome({ [RANDOM_APODS]: images }, async () => { const response = await randomCache(); - resolve(response); + const resp = await fetchImage({ date: response.date }); + resolve(resp); }); }); } catch (error) { From 587c30dd5c535addaa52bb70d1a2cf2fc171b10e Mon Sep 17 00:00:00 2001 From: Travis Lawrence Date: Sun, 22 Dec 2024 18:30:48 -0800 Subject: [PATCH 3/4] add userId uuid --- src/constants.ts | 2 ++ src/pages/Newtab/index.tsx | 17 ++++++++++++++--- src/pages/Newtab/styles.ts | 6 +++--- src/pages/Popup/Popup.jsx | 25 ++++++++++++++++++++----- src/pages/types.ts | 2 ++ src/utilities/utilities.ts | 8 ++++++++ 6 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index 2a30f89..91c9240 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -27,6 +27,7 @@ export const TODAY_COUNT = 'todayCount'; export const TODAY_LIMIT = 'todayLimit'; export const IS_TODAY_LIMIT_ON = 'isTodayLimitOn'; export const RANDOM_APODS = 'randomApods'; +export const USER_ID = 'userId'; export const DRAWER_EXPLANATION = 'explanation'; export const DRAWER_FAVORITES = 'favorites'; @@ -43,6 +44,7 @@ export const APOD_OPTIONS: (keyof TAppOptions)[] = [ SHOW_TOP_SITES, TODAY_COUNT, TODAY_LIMIT, + USER_ID, ]; export const KEY_MAP = { diff --git a/src/pages/Newtab/index.tsx b/src/pages/Newtab/index.tsx index 641a53d..6688fc4 100644 --- a/src/pages/Newtab/index.tsx +++ b/src/pages/Newtab/index.tsx @@ -1,8 +1,14 @@ import React, { useEffect, useState } from 'react'; import { render } from 'react-dom'; -import { CURRENT_DATE, DEFAULT_OPTIONS, TODAY_COUNT } from '../../constants'; +import { + CURRENT_DATE, + DEFAULT_OPTIONS, + TODAY_COUNT, + USER_ID, +} from '../../constants'; import { formatDate, + generateUUID, getAllChrome, getToday, isDateToday, @@ -53,12 +59,17 @@ const App: React.FC<{ options?: TAppOptions }> = ({ options }) => { }; getAllChrome((options) => { + const userId = options.userId ?? generateUUID(); + + if (!options[USER_ID]) { + setChrome({ [USER_ID]: userId }); + } + render( <> - + , - window.document.querySelector('#app-container') ); }); diff --git a/src/pages/Newtab/styles.ts b/src/pages/Newtab/styles.ts index dbe074d..84aac90 100644 --- a/src/pages/Newtab/styles.ts +++ b/src/pages/Newtab/styles.ts @@ -5,6 +5,9 @@ import { DRAWER_HISTORY, } from '../../constants'; +// @ts-expect-error +import Montserrat from '../../assets/fonts/Montserrat-VariableFont_wght.ttf'; + const black = '#111111'; export const lightBlack = 'rgba(0,0,0, 0.5)'; export const gray = 'rgba(51,51,51, 0.8)'; @@ -12,9 +15,6 @@ export const activeGray = 'rgba(80,80,80, 0.8)'; export const lightGray = 'rgba(199,199,199, 0.8)'; const highlightBlue = 'rgb(117, 221, 255)'; -// @ts-expect-error -import Montserrat from '../../assets/fonts/Montserrat-VariableFont_wght.ttf'; - export const FontStyles = createGlobalStyle` @font-face { font-family: 'Montserrat'; diff --git a/src/pages/Popup/Popup.jsx b/src/pages/Popup/Popup.jsx index 02689bd..9ced100 100644 --- a/src/pages/Popup/Popup.jsx +++ b/src/pages/Popup/Popup.jsx @@ -7,7 +7,6 @@ import { IS_TODAY_LIMIT_ON, DEFAULT_OPTIONS, APOD_OPTIONS, - TODAY_LIMIT_COUNT, TODAY_LIMIT, } from '../../constants'; import { getChrome, setChrome } from '../../utilities'; @@ -119,22 +118,38 @@ const Popup = () => {

diff --git a/src/pages/types.ts b/src/pages/types.ts index 7ab5490..df0b591 100644 --- a/src/pages/types.ts +++ b/src/pages/types.ts @@ -10,6 +10,7 @@ import { IS_TODAY_LIMIT_ON, APOD_HISTORY, RANDOM_APODS, + USER_ID, } from '../constants'; export type THistoryItem = { @@ -41,6 +42,7 @@ export type TAppOptions = { [TODAY_COUNT]: number; [TODAY_LIMIT]: number; [RANDOM_APODS]?: number; + [USER_ID]?: string; }; export type TApodResponse = { diff --git a/src/utilities/utilities.ts b/src/utilities/utilities.ts index c2c9a1a..d97b6ee 100644 --- a/src/utilities/utilities.ts +++ b/src/utilities/utilities.ts @@ -20,3 +20,11 @@ export function titleCase(text: string) { if (!text) return text; return text[0].toUpperCase() + text.slice(1); } + +export const generateUUID = () => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +}; From 96f809ec6cc9b5bf4ceeca980aecb0b741028bc3 Mon Sep 17 00:00:00 2001 From: Travis Lawrence Date: Sun, 22 Dec 2024 18:42:51 -0800 Subject: [PATCH 4/4] random things --- src/pages/Newtab/ApodBody.tsx | 4 ++-- src/pages/Newtab/Drawer/Tabs/Favorites.tsx | 2 +- src/pages/Newtab/Drawer/Tabs/GridImage.tsx | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/Newtab/ApodBody.tsx b/src/pages/Newtab/ApodBody.tsx index 14c3444..ed20e7a 100644 --- a/src/pages/Newtab/ApodBody.tsx +++ b/src/pages/Newtab/ApodBody.tsx @@ -43,8 +43,8 @@ const ApodBody: React.FC<{ options: TAppOptions }> = ({ options }) => { return ; } - if (apodResponse.errorMessage) { - return

{apodResponse.errorMessage}

; + if (errorMessage) { + return

{errorMessage}

; } return apodResponse.media_type === 'video' ? ( diff --git a/src/pages/Newtab/Drawer/Tabs/Favorites.tsx b/src/pages/Newtab/Drawer/Tabs/Favorites.tsx index 1da6bd3..4dc85f1 100644 --- a/src/pages/Newtab/Drawer/Tabs/Favorites.tsx +++ b/src/pages/Newtab/Drawer/Tabs/Favorites.tsx @@ -46,7 +46,7 @@ const Favorites: React.FC<{ filteredItems.map((item: any, idx: number) => { return ( {item.title}