Skip to content

Commit 3bf58bd

Browse files
committed
v0.9.5
* fix(app): fix error caused from onClick not being passed to SplitButton * fix(app): pass user info to error handler * fix(app): switch start_url in manifest.json ot ./ (in attempt to fix invalid loading of manifest)
1 parent 8ecb470 commit 3bf58bd

File tree

8 files changed

+97
-50
lines changed

8 files changed

+97
-50
lines changed

.github/workflows/app-deploy.yml

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,13 @@ jobs:
114114
-y --project $gcloudProject \
115115
"/versionInfo"
116116
117-
- name: Archive Debug Log
118-
uses: actions/upload-artifact@v2
119-
if: failure()
120-
with:
121-
name: firebase-debug
122-
path: firebase-debug.log
117+
- name: Check if version has been updated
118+
if: github.ref == 'refs/heads/prod'
119+
id: check
120+
uses: EndBug/version-check@v1
123121

124122
- name: Create Release In Sentry
123+
if: github.ref == 'refs/heads/prod' && steps.check.outputs.changed == 'true'
125124
env:
126125
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
127126
SENTRY_ORG: pruvit
@@ -142,11 +141,6 @@ jobs:
142141
$(yarn bin)/sentry-cli releases finalize $releaseName
143142
echo Release created successfully
144143
145-
- name: Check if version has been updated
146-
if: github.ref == 'refs/heads/prod'
147-
id: check
148-
uses: EndBug/version-check@v1
149-
150144
- name: Create Release
151145
if: github.ref == 'refs/heads/prod' && steps.check.outputs.changed == 'true'
152146
id: create_release

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"name": "fireadmin",
3-
"version": "0.9.4",
3+
"version": "0.9.5",
44
"description": "Application for Managing Firebase Applications. Includes support for multiple environments and data migrations.",
55
"scripts": {
66
"clean": "rimraf build",
77
"size": "size-limit",
8-
"build": "react-scripts build && cp public/manifest.json build",
8+
"build": "react-scripts build",
99
"build:config": "firebase-ci createConfig",
1010
"build:size": "yarn build && size-limit",
1111
"build:size:why": "yarn build && yarn size --why",
@@ -52,7 +52,8 @@
5252
"react-hook-form": "^5.7.2",
5353
"react-instantsearch": "^4.2.0",
5454
"react-router-dom": "^5.1.2",
55-
"reactfire": "^2.0.3"
55+
"reactfire": "^2.0.3",
56+
"stackdriver-errors-js": "^0.8.0"
5657
},
5758
"devDependencies": {
5859
"@sentry/cli": "^1.53.0",

public/index.html

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
-->
1414
<!-- PWA Manifest -->
1515
<link rel="manifest" crossorigin="use-credentials" href="%PUBLIC_URL%/manifest.json">
16-
<!-- Global Styling -->
17-
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
18-
<link rel="stylesheet" href="https://unpkg.com/[email protected]/style.min.css">
1916
<!--
2017
Notice the use of %PUBLIC_URL% in the tags above.
2118
It will be replaced with the URL of the `public` folder during the build.
@@ -26,8 +23,9 @@
2623
Learn how to configure a non-root public URL by running `npm run build`.
2724
-->
2825
<meta name="description" content="Application for Managing Firebase Applications. Includes support for multiple environments and data migrations.">
29-
<!-- Tracking/Reporting Bundles -->
30-
<script defer src="https://cdn.jsdelivr.net/gh/GoogleCloudPlatform/[email protected]/dist/stackdriver-errors-concat.min.js"></script>
26+
<!-- Global Styling -->
27+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
28+
<link rel="stylesheet" href="https://unpkg.com/[email protected]/style.min.css">
3129
<script>
3230
// Minified version of isMobile included in the HTML since it's small
3331
(function () {var f=/iPhone/i,j=/iPod/i,p=/iPad/i,g=/\bAndroid(?:.+)Mobile\b/i,i=/Android/i,d=/\bAndroid(?:.+)SD4930UR\b/i,e=/\bAndroid(?:.+)(?:KF[A-Z]{2,4})\b/i,c=/Windows Phone/i,h=/\bWindows(?:.+)ARM\b/i,k=/BlackBerry/i,l=/BB10/i,m=/Opera Mini/i,n=/\b(CriOS|Chrome)(?:.+)Mobile/i,o=/Mobile(?:.+)Firefox\b/i;function b($,a){return $.test(a)}function a($){var a=($=$||("undefined"!=typeof navigator?navigator.userAgent:"")).split("[FBAN");void 0!==a[1]&&($=a[0]),void 0!==(a=$.split("Twitter"))[1]&&($=a[0]);var r={apple:{phone:b(f,$)&&!b(c,$),ipod:b(j,$),tablet:!b(f,$)&&b(p,$)&&!b(c,$),device:(b(f,$)||b(j,$)||b(p,$))&&!b(c,$)},amazon:{phone:b(d,$),tablet:!b(d,$)&&b(e,$),device:b(d,$)||b(e,$)},android:{phone:!b(c,$)&&b(d,$)||!b(c,$)&&b(g,$),tablet:!b(c,$)&&!b(d,$)&&!b(g,$)&&(b(e,$)||b(i,$)),device:!b(c,$)&&(b(d,$)||b(e,$)||b(g,$)||b(i,$))||b(/\bokhttp\b/i,$)},windows:{phone:b(c,$),tablet:b(h,$),device:b(c,$)||b(h,$)},other:{blackberry:b(k,$),blackberry10:b(l,$),opera:b(m,$),firefox:b(o,$),chrome:b(n,$),device:b(k,$)||b(l,$)||b(m,$)||b(o,$)||b(n,$)},any:!1,phone:!1,tablet:!1};return r.any=r.apple.device||r.android.device||r.windows.device||r.other.device,r.phone=r.apple.phone||r.android.phone||r.windows.phone,r.tablet=r.apple.tablet||r.android.tablet||r.windows.tablet,r}window.isMobile=a();})();

public/manifest.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"short_name": "fireadmin",
33
"name": "fireadmin",
4-
"start_url": "/login/",
4+
"start_url": "./",
5+
"scope": ".",
56
"background_color": "#ef6c00",
67
"theme_color": "#ef6c00",
78
"display": "standalone",
89
"gcm_sender_id": "103953800507"
9-
}
10+
}

src/components/AnalyticsPageViewLogger/AnalyticsPageViewLogger.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useEffect } from 'react'
22
import { useAnalytics, useUser } from 'reactfire'
33
import { useLocation } from 'react-router-dom'
44
import * as config from 'config' // eslint-disable-line import/no-unresolved
5+
import { setErrorUser } from 'utils/errorHandler'
56

67
export default function AnalyticsPageViewLogger() {
78
const location = useLocation()
@@ -12,6 +13,7 @@ export default function AnalyticsPageViewLogger() {
1213
useEffect(() => {
1314
if (user?.uid) {
1415
analytics.setUserId(user.uid)
16+
setErrorUser(user)
1517
}
1618
}, [user?.uid]) // eslint-disable-line react-hooks/exhaustive-deps
1719

src/components/SplitButton/SplitButton.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function SplitButton({
2222
const [selectedIndex, setSelectedIndex] = useState(defaultIndex)
2323
const anchorRef = useRef(null)
2424
const handleClick = () => {
25-
onClick(selectedIndex, options[selectedIndex])
25+
onClick && onClick(selectedIndex, options[selectedIndex])
2626
}
2727

2828
const handleMenuItemClick = (event, index) => {
@@ -39,9 +39,9 @@ function SplitButton({
3939
if (anchorRef.current?.contains(event.target)) {
4040
return
4141
}
42-
4342
setOpen(false)
4443
}
44+
4545
return (
4646
<>
4747
<ButtonGroup

src/utils/errorHandler.js

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as Sentry from '@sentry/browser'
2+
import StackdriverErrorReporter from 'stackdriver-errors-js'
23
import { firebase, sentryDsn, env as environment } from '../config'
34
import { version } from '../../package.json'
45

@@ -8,39 +9,40 @@ let errorHandler // eslint-disable-line import/no-mutable-exports
89
* Initialize Stackdriver Error Reporter only if api key exists
910
*/
1011
function initStackdriverErrorReporter() {
11-
if (typeof window.StackdriverErrorReporter === 'function') {
12-
window.addEventListener('DOMContentLoaded', () => {
13-
const errorHandler = new window.StackdriverErrorReporter()
14-
errorHandler.start({
15-
key: firebase.apiKey,
16-
projectId: firebase.projectId,
17-
service: 'fireadmin-site',
18-
version
19-
})
12+
try {
13+
const errorHandler = new StackdriverErrorReporter()
14+
errorHandler.start({
15+
key: firebase.apiKey,
16+
projectId: firebase.projectId,
17+
service: 'fireadmin-site',
18+
version
2019
})
20+
} catch (err) {
21+
// eslint-disable-next-line no-console
22+
console.error(
23+
'Error setting up stackdriver client side error reporting',
24+
err
25+
)
2126
}
22-
return errorHandler
2327
}
2428

2529
/**
2630
* Initialize Sentry (reports to sentry.io)
2731
*/
2832
function initSentry() {
29-
if (environment !== 'dev' && !window.Cypress) {
30-
Sentry.init({
31-
dsn: sentryDsn,
32-
environment,
33-
release: version
34-
})
35-
}
33+
Sentry.init({
34+
dsn: sentryDsn,
35+
environment,
36+
release: version
37+
})
3638
}
3739

3840
/**
3941
* Initialize client side error reporting. Error handling is only
4042
* initialized if in production environment.
4143
*/
4244
export function init() {
43-
if (environment !== 'dev') {
45+
if (!window.location.origin.includes('localhost') && !window.Cypress) {
4446
initStackdriverErrorReporter()
4547
initSentry()
4648
} else {
@@ -51,20 +53,20 @@ export function init() {
5153
/**
5254
* Set user's uid within error reporting context (can be one or
5355
* many error handling utilities)
54-
* @param {Object} auth - Authentication data
55-
* @param {String} auth.uid - User's id
56+
* @param {Object} user - Authentication data
57+
* @param {String} user.uid - User's id
5658
*/
57-
export function setErrorUser(auth) {
58-
if (auth && auth.uid && environment !== 'dev') {
59+
export function setErrorUser(user) {
60+
if (user?.uid && !window.location.origin.includes('localhost')) {
5961
// Set user within Stackdriver
60-
if (errorHandler && errorHandler.setUser) {
61-
errorHandler.setUser(auth.uid)
62+
if (errorHandler?.setUser) {
63+
errorHandler.setUser(user.uid)
6264
}
6365
// Set user within Sentry
6466
Sentry.configureScope((scope) => {
6567
scope.setUser({
66-
id: auth.uid,
67-
email: auth.email || 'none'
68+
id: user.uid,
69+
email: user.email || 'none'
6870
})
6971
})
7072
}

yarn.lock

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4518,7 +4518,7 @@ [email protected], core-js@^3.5.0:
45184518
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
45194519
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
45204520

4521-
core-js@^2.4.0, core-js@^2.5.0:
4521+
core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.9:
45224522
version "2.6.11"
45234523
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
45244524
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
@@ -5659,6 +5659,13 @@ error-ex@^1.2.0, error-ex@^1.3.1:
56595659
dependencies:
56605660
is-arrayish "^0.2.1"
56615661

5662+
error-stack-parser@^2.0.6:
5663+
version "2.0.6"
5664+
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
5665+
integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
5666+
dependencies:
5667+
stackframe "^1.1.1"
5668+
56625669
es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5:
56635670
version "1.17.5"
56645671
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
@@ -13598,6 +13605,11 @@ source-map-url@^0.4.0:
1359813605
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
1359913606
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
1360013607

13608+
13609+
version "0.5.6"
13610+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
13611+
integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
13612+
1360113613
[email protected], source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
1360213614
version "0.6.1"
1360313615
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
@@ -13709,6 +13721,13 @@ stable@^0.1.8:
1370913721
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
1371013722
integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
1371113723

13724+
stack-generator@^2.0.5:
13725+
version "2.0.5"
13726+
resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36"
13727+
integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==
13728+
dependencies:
13729+
stackframe "^1.1.1"
13730+
1371213731
1371313732
version "0.0.10"
1371413733
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
@@ -13719,6 +13738,36 @@ stack-utils@^1.0.1:
1371913738
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
1372013739
integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
1372113740

13741+
stackdriver-errors-js@^0.8.0:
13742+
version "0.8.0"
13743+
resolved "https://registry.yarnpkg.com/stackdriver-errors-js/-/stackdriver-errors-js-0.8.0.tgz#7aa9964c04b45e9449862472d51e60b12a48608a"
13744+
integrity sha512-D8TA0Ty36UmnhMXWiwdGgbAVAka8Bma9xjuipBoAKNu1CmCPtOEIXBlIZ1Q/WjE1GddxPNeSoDs0ufZP8mF1ww==
13745+
dependencies:
13746+
core-js "^2.6.9"
13747+
stacktrace-js "^2.0.0"
13748+
13749+
stackframe@^1.1.1:
13750+
version "1.1.1"
13751+
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.1.1.tgz#ffef0a3318b1b60c3b58564989aca5660729ec71"
13752+
integrity sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ==
13753+
13754+
stacktrace-gps@^3.0.4:
13755+
version "3.0.4"
13756+
resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a"
13757+
integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==
13758+
dependencies:
13759+
source-map "0.5.6"
13760+
stackframe "^1.1.1"
13761+
13762+
stacktrace-js@^2.0.0:
13763+
version "2.0.2"
13764+
resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b"
13765+
integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==
13766+
dependencies:
13767+
error-stack-parser "^2.0.6"
13768+
stack-generator "^2.0.5"
13769+
stacktrace-gps "^3.0.4"
13770+
1372213771
static-extend@^0.1.1:
1372313772
version "0.1.2"
1372413773
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"

0 commit comments

Comments
 (0)