diff --git a/package.json b/package.json index 0c11afde..e784c4fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fireadmin", - "version": "0.9.2", + "version": "0.9.3", "description": "Application for Managing Firebase Applications. Includes support for multiple environments and data migrations.", "scripts": { "clean": "rimraf build", diff --git a/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/ActionsPage.js b/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/ActionsPage.js index e40f9230..e8e98770 100644 --- a/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/ActionsPage.js +++ b/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/ActionsPage.js @@ -55,7 +55,7 @@ function ActionsPage({ projectId }) { const templateName = selectedTemplate?.name ? `Template: ${selectedTemplate.name}` : 'Template' - // TODO: Disable run action button if form is not fully filled out + return (
Actions diff --git a/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/useActionsPage.js b/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/useActionsPage.js index 25fcd51f..37dc60ab 100644 --- a/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/useActionsPage.js +++ b/src/routes/Projects/routes/Project/routes/Actions/components/ActionsPage/useActionsPage.js @@ -5,6 +5,7 @@ import { useFirestore, useFirestoreCollectionData } from 'reactfire' +import * as Sentry from '@sentry/browser' import { ACTION_RUNNER_REQUESTS_PATH, PROJECTS_COLLECTION @@ -141,7 +142,8 @@ export default function useActionRunner({ } catch (err) { console.error('Error starting action request: ', err.message) // eslint-disable-line no-console showError('Error starting action request') - triggerAnalyticsEvent('actionRunError', { + Sentry.captureException(err) + triggerAnalyticsEvent('action-run-error', { err, message: err.message, projectId, diff --git a/src/routes/Projects/routes/Project/routes/Environments/components/EditEnvironmentDialog/EditEnvironmentDialog.js b/src/routes/Projects/routes/Project/routes/Environments/components/EditEnvironmentDialog/EditEnvironmentDialog.js index f2de6f60..fabfb0da 100644 --- a/src/routes/Projects/routes/Project/routes/Environments/components/EditEnvironmentDialog/EditEnvironmentDialog.js +++ b/src/routes/Projects/routes/Project/routes/Environments/components/EditEnvironmentDialog/EditEnvironmentDialog.js @@ -35,7 +35,9 @@ function EditEnvironmentDialog({ const projectRef = firestore.doc(`${PROJECTS_COLLECTION}/${projectId}`) const project = useFirestoreDocData(projectRef) const userHasPermission = createPermissionGetter(project, user?.uid) - const hasUpdatePermission = userHasPermission('update.environments') + // TODO: Remove checking of ownership once update role is setup by default on project + const hasUpdatePermission = + user?.uid === project.createdBy || userHasPermission('update.environments') // Form const { diff --git a/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTable/PermissionsTable.js b/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTable/PermissionsTable.js index cbf08b97..57b37a4a 100644 --- a/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTable/PermissionsTable.js +++ b/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTable/PermissionsTable.js @@ -13,7 +13,10 @@ import { triggerAnalyticsEvent } from 'utils/analytics' import useNotifications from 'modules/notification/useNotifications' import PermissionsTableRow from '../PermissionsTableRow' import DeleteMemberModal from '../DeleteMemberModal' -import { PROJECTS_COLLECTION } from 'constants/firebasePaths' +import { + PROJECTS_COLLECTION, + DISPLAY_NAMES_PATH +} from 'constants/firebasePaths' import styles from './PermissionsTable.styles' const useStyles = makeStyles(styles) @@ -29,7 +32,7 @@ function PermissionsTable({ projectId }) { changeSelectedMemberId(selectedId) } const database = useDatabase() - const displayNamesRef = database.ref('displayNames') + const displayNamesRef = database.ref(DISPLAY_NAMES_PATH) const displayNames = useDatabaseObjectData(displayNamesRef) const firestore = useFirestore() diff --git a/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTableRow/PermissionsTableRow.js b/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTableRow/PermissionsTableRow.js index 5c908b3d..0ef2b822 100644 --- a/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTableRow/PermissionsTableRow.js +++ b/src/routes/Projects/routes/Project/routes/Permissions/components/PermissionsTableRow/PermissionsTableRow.js @@ -24,6 +24,7 @@ import { makeStyles } from '@material-ui/core/styles' import { triggerAnalyticsEvent, createProjectEvent } from 'utils/analytics' import useNotifications from 'modules/notification/useNotifications' import styles from './PermissionsTableRow.styles' +import { PROJECTS_COLLECTION } from 'constants/firebasePaths' const useStyles = makeStyles(styles) @@ -54,7 +55,7 @@ function PermissionsTableRow({ const { showSuccess } = useNotifications() const user = useUser() - const projectRef = firestore.doc(`projects/${projectId}`) + const projectRef = firestore.doc(`${PROJECTS_COLLECTION}/${projectId}`) const project = useFirestoreDocData(projectRef) const roleOptions = map(project.roles, ({ name }, value) => ({ value, name })) diff --git a/src/routes/Projects/routes/Project/routes/Permissions/components/RolesTable/RolesTable.js b/src/routes/Projects/routes/Project/routes/Permissions/components/RolesTable/RolesTable.js index 99d695d5..7ebc25a7 100644 --- a/src/routes/Projects/routes/Project/routes/Permissions/components/RolesTable/RolesTable.js +++ b/src/routes/Projects/routes/Project/routes/Permissions/components/RolesTable/RolesTable.js @@ -14,6 +14,7 @@ import NewRoleCard from '../NewRoleCard' import NoRolesFound from './NoRolesFound' import styles from './RolesTable.styles' import { createPermissionGetter } from 'utils/data' +import { PROJECTS_COLLECTION } from 'constants/firebasePaths' const useStyles = makeStyles(styles) @@ -24,7 +25,7 @@ function RolesTable({ projectId }) { const { FieldValue } = useFirestore const user = useUser() const { showError, showSuccess } = useNotifications() - const projectRef = firestore.doc(`projects/${projectId}`) + const projectRef = firestore.doc(`${PROJECTS_COLLECTION}/${projectId}`) const project = useFirestoreDocData(projectRef) const openNewRole = () => changeRoleOpen(true) const closeNewRole = () => changeRoleOpen(false) @@ -97,7 +98,11 @@ function RolesTable({ projectId }) { projectId={projectId} currentRoles={project.roles} roleOptions={roleOptions} - updateRolesDisabled={!userHasPermission('update.roles')} + updateRolesDisabled={ + // TODO: Remove checking of ownership once update role is setup by default on project + project.createdBy !== user?.uid && + !userHasPermission('update.roles') + } initialValues={permissions} /> ))