This commit is contained in:
shamsmosowi
2021-09-18 17:50:45 +10:00
8 changed files with 114 additions and 94 deletions

View File

@@ -14,12 +14,12 @@
"@emotion/styled": "^11.3.0",
"@mdi/js": "^5.9.55",
"@monaco-editor/react": "^4.1.0",
"@mui/icons-material": "^5.0.0-rc.1",
"@mui/lab": "^5.0.0-alpha.46",
"@mui/material": "^5.0.0-rc.1",
"@mui/styles": "^5.0.0-rc.1",
"@rowy/form-builder": "^0.1.1",
"@rowy/multiselect": "^0.1.5",
"@mui/icons-material": "^5.0.0",
"@mui/lab": "^5.0.0-alpha.47",
"@mui/material": "^5.0.0",
"@mui/styles": "^5.0.0",
"@rowy/form-builder": "^0.1.2",
"@rowy/multiselect": "^0.1.6",
"@tinymce/tinymce-react": "^3.4.0",
"algoliasearch": "^4.8.6",
"ansi-to-react": "^6.1.5",

View File

@@ -8,6 +8,7 @@ import DialogContent from "@mui/material/DialogContent";
import DialogContentText from "@mui/material/DialogContentText";
import DialogTitle from "@mui/material/DialogTitle";
import TextField from "@mui/material/TextField";
import { SlideTransitionMui } from "components/Modal/SlideTransition";
const useStyles = makeStyles(() =>
createStyles({
@@ -62,7 +63,12 @@ export default function Confirmation({
<>
{button}
<Dialog open={showDialog} onClose={handleClose}>
<Dialog
open={showDialog}
onClose={handleClose}
TransitionComponent={SlideTransitionMui}
maxWidth="xs"
>
<DialogTitle>
{(message && message.title) || "Are you sure?"}
</DialogTitle>
@@ -98,7 +104,7 @@ export default function Confirmation({
</DialogContent>
)}
<DialogActions>
<Button onClick={handleClose} color={message?.color || "primary"}>
<Button onClick={handleClose}>
{(message && message.cancel) || "Cancel"}
</Button>
<Button

View File

@@ -27,9 +27,6 @@ const useStyles = makeStyles((theme) =>
},
tab: { minWidth: 0 },
divider: {
margin: "-1px calc(var(--dialog-spacing) * -1) 0",
},
tabPanel: {
marginTop: "var(--dialog-contents-spacing)",
@@ -121,7 +118,7 @@ export default function Export() {
value="Download"
/>
</TabList>
<Divider className={classes.divider} />
<Divider style={{ marginTop: -1 }} />
</>
}
ScrollableDialogContentProps={{

View File

@@ -24,7 +24,7 @@ interface IAppContext {
projectId: string;
currentUser: firebase.User | null | undefined;
userClaims: Record<string, any> | undefined;
userRoles: null | string[];
userRoles: string[];
getAuthToken: () => Promise<string>;
userDoc: any;
theme: keyof typeof themes;
@@ -80,7 +80,9 @@ export const AppProvider: React.FC = ({ children }) => {
if (auth)
auth.getIdTokenResult(true).then((results) => {
setAuthToken(results.token);
setUserRoles(results.claims.roles || []);
setUserRoles(
Array.isArray(results.claims.roles) ? results.claims.roles : []
);
setUserClaims(results.claims);
});
});
@@ -96,7 +98,7 @@ export const AppProvider: React.FC = ({ children }) => {
);
// Store matching userDoc
const [userDoc, dispatchUserDoc] = useDoc({});
const [userDoc, dispatchUserDoc] = useDoc({}, { createIfMissing: true });
// Get userDoc
useEffect(() => {
if (currentUser) {
@@ -108,12 +110,18 @@ export const AppProvider: React.FC = ({ children }) => {
// Set userDoc if it doesnt exist
useEffect(() => {
if (!userDoc.doc && !userDoc.loading && userDoc.path && currentUser) {
if (
(!userDoc.doc || !userDoc.doc.user) &&
!userDoc.loading &&
userDoc.path &&
currentUser
) {
const userFields = ["email", "displayName", "photoURL", "phoneNumber"];
const user = userFields.reduce((acc, curr) => {
if (currentUser[curr]) return { ...acc, [curr]: currentUser[curr] };
return acc;
}, {});
console.log("create user", userDoc.path, user);
db.doc(userDoc.path).set({ user }, { merge: true });
}
}, [userDoc, currentUser]);

View File

@@ -48,7 +48,7 @@ import { APP_BAR_HEIGHT } from "components/Navigation";
const useHomeViewState = createPersistedState("__ROWY__HOME_VIEW");
export default function HomePage() {
const { userDoc, userClaims } = useAppContext();
const { userDoc, userRoles } = useAppContext();
const { tables } = useProjectContext();
const [results, query, handleQuery] = useBasicSearch(
@@ -131,7 +131,7 @@ export default function HomePage() {
);
if (tables.length === 0) {
if (userClaims?.roles.includes("ADMIN"))
if (userRoles.includes("ADMIN"))
return (
<>
<HomeWelcomePrompt />
@@ -167,7 +167,7 @@ export default function HomePage() {
const getActions = (table: Table) => (
<>
{userClaims?.roles.includes("ADMIN") && (
{userRoles.includes("ADMIN") && (
<IconButton
aria-label="Edit table"
onClick={() =>
@@ -258,7 +258,7 @@ export default function HomePage() {
/>
)}
{userClaims?.roles.includes("ADMIN") && (
{userRoles.includes("ADMIN") && (
<>
{createTableFab}
<TableSettingsDialog

View File

@@ -94,7 +94,7 @@ export const colorsLight = (
MuiBackdrop: {
styleOverrides: {
root: {
backgroundColor: colord({ l: 5, c: 5, h }).alpha(0.6).toHslString(),
backgroundColor: colord({ l: 5, c: 5, h }).alpha(0.2).toHslString(),
},
invisible: { backgroundColor: "transparent" },
},

View File

@@ -42,6 +42,15 @@ export const components = (theme: Theme): ThemeOptions => {
components: {
MuiCssBaseline: {
styleOverrides: {
code: {
fontFamily: theme.typography.fontFamilyMono,
letterSpacing: 0,
backgroundColor: theme.palette.action.selected,
borderRadius: theme.shape.borderRadius,
padding: `${1 / 16}em ${4 / 16}em`,
},
".chrome-picker": {
colorScheme: "light",
boxShadow: theme.shadows[1] + " !important",
@@ -809,7 +818,7 @@ export const components = (theme: Theme): ThemeOptions => {
MuiStepIcon: {
styleOverrides: {
root: {
color: theme.palette.divider,
color: theme.palette.action.selected,
"&.Mui-completed:not(.Mui-active)": {
color: theme.palette.text.disabled,
},

144
yarn.lock
View File

@@ -2370,91 +2370,91 @@
"@monaco-editor/loader" "^1.1.1"
prop-types "^15.7.2"
"@mui/core@5.0.0-alpha.46":
version "5.0.0-alpha.46"
resolved "https://registry.yarnpkg.com/@mui/core/-/core-5.0.0-alpha.46.tgz#f4c0e5b2ad346e31e74bb96b684f6734b55cc9e6"
integrity sha512-LZa0s450YSHv58xlMRIWszE0zsqqTyxgP+l70gUyPvYwCfQErkxsvRjEInKI5GCrYDcr3N+jlKJ5MSRZDvtvig==
"@mui/core@5.0.0-alpha.47":
version "5.0.0-alpha.47"
resolved "https://registry.yarnpkg.com/@mui/core/-/core-5.0.0-alpha.47.tgz#68d044a5e81fa0f752b8c8a7b40deec04925beab"
integrity sha512-/GCIWOq+ydeY8HTWexrvQw7OsmRRvdzW+BB4vQ+V6alaECKSXPQrTDuQtd+lgI2il4p7uhPIKIqjcaAZ/FaNHA==
dependencies:
"@babel/runtime" "^7.14.8"
"@emotion/is-prop-valid" "^1.1.0"
"@mui/utils" "5.0.0-rc.1"
"@mui/utils" "^5.0.0"
clsx "^1.1.1"
prop-types "^15.7.2"
react-is "^17.0.2"
"@mui/icons-material@^5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.0.0-rc.1.tgz#ffb5ec5195d2bf8105da6a78b7d6b9fc195c8511"
integrity sha512-w9tfGQaND221fkPaCp70gHg/8f4mk1RYx22YBLtV4wV0SLoI3d4+41DRrqTxeyKB1WIxETDVxaAqeBthrXM6hg==
"@mui/icons-material@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.0.0.tgz#f6282b6044d221d80729bffe976ede2072c8d313"
integrity sha512-Vl5pMIdD1MC+LVBEKDQkWeoU/0mdxx/WLBuTVo5y2yzOzEp8gcwkegtiUyN1gubiXcqzNNZQNvJ6/YSdFRr84Q==
dependencies:
"@babel/runtime" "^7.14.8"
"@mui/lab@^5.0.0-alpha.46":
version "5.0.0-alpha.46"
resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.46.tgz#456403bf1c8a810f052733119b9013778054bdf8"
integrity sha512-aGgX3GWOOPq7RuxDI4wQMrm+J7q7cvPDLxN1uS85oIZnMrFLTrFZaQlf4x6LQJtFpVTa7LKuhzNU6kLT37BWMg==
"@mui/lab@^5.0.0-alpha.47":
version "5.0.0-alpha.47"
resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.47.tgz#ede1ca4c70bfe79837892007ced11edaddb52e18"
integrity sha512-og0OYSbxkmrj41A0aChAEXugq9fs334jpVTFOoY735yP0TBedI/djqjrqnSm7JdMrwUxy8JfMt1PXYWrw/2SEg==
dependencies:
"@babel/runtime" "^7.14.8"
"@date-io/date-fns" "^2.10.6"
"@date-io/dayjs" "^2.10.6"
"@date-io/luxon" "^2.10.6"
"@date-io/moment" "^2.10.6"
"@mui/core" "5.0.0-alpha.46"
"@mui/system" "5.0.0-rc.1"
"@mui/utils" "5.0.0-rc.1"
"@mui/core" "5.0.0-alpha.47"
"@mui/system" "^5.0.0"
"@mui/utils" "^5.0.0"
clsx "^1.1.1"
prop-types "^15.7.2"
react-is "^17.0.2"
react-transition-group "^4.4.1"
react-transition-group "^4.4.2"
rifm "^0.12.0"
"@mui/material@^5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.0.0-rc.1.tgz#456218bfeb659dfb17c516ecc03f86013feaf253"
integrity sha512-23lEM2n0Y8VcFbk7mjNZzbAHDh7wu5P4foe1hDiSJaipBX4ESWnBAwo9exxQbFrDd+l2xtLzaoTmTOVOgkElrA==
"@mui/material@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.0.0.tgz#e5397b7778615933cabee7918230b9e7019ff1b9"
integrity sha512-XZNPYQocFyS2Q8Wc7PMudazKa8VDaXADK9PxUfOF6Q0GQNXjLkOn1vRWlyF9EOZQ4QLbgJHyHDlH7ELBN0CA0w==
dependencies:
"@babel/runtime" "^7.14.8"
"@mui/core" "5.0.0-alpha.46"
"@mui/system" "5.0.0-rc.1"
"@mui/types" "7.0.0-rc.1"
"@mui/utils" "5.0.0-rc.1"
"@mui/core" "5.0.0-alpha.47"
"@mui/system" "^5.0.0"
"@mui/types" "^7.0.0"
"@mui/utils" "^5.0.0"
"@popperjs/core" "^2.4.4"
"@types/react-transition-group" "^4.2.0"
"@types/react-transition-group" "^4.4.2"
clsx "^1.1.1"
csstype "^3.0.8"
hoist-non-react-statics "^3.3.2"
prop-types "^15.7.2"
react-is "^17.0.2"
react-transition-group "^4.4.0"
react-transition-group "^4.4.2"
"@mui/private-theming@5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.0.0-rc.1.tgz#eab6d20db119b6f2176d76ed725f53b9ebc12e97"
integrity sha512-dibj1bc+tX4+sKOhSAYoJVndk7MAVZkYLKRa3E3GDObDe5I/YOv0fS8cvfB3sTFiQWxbdKj//p2QJtos6o83NQ==
"@mui/private-theming@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.0.0.tgz#db89a0efb536bd68f258c0313ba33d2bd3a08ae4"
integrity sha512-xCaQss6B6EyEPxyn/vv5CwidqihrF6AJlrCYDgOAqYHtCgBhzMjWhh/n4L3jlrt4SmE+STHD2FdA8DImpEgItg==
dependencies:
"@babel/runtime" "^7.14.8"
"@mui/utils" "5.0.0-rc.1"
"@mui/utils" "^5.0.0"
prop-types "^15.7.2"
"@mui/styled-engine@5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.0.0-rc.1.tgz#8a0c68e88868c42944042e01e28a0d11b6caf756"
integrity sha512-cYK3oGHzriPqULPSy5iitupk6JbvvwVqBC1n1gxISZzm7wEsBx0hDCDhh7tgCa1B7CXdl0Ntl27PXJjtukoo/A==
"@mui/styled-engine@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.0.0.tgz#caa1e9c0dd434c3b0c5db32be0e17d8237a4b17d"
integrity sha512-JoZLKLB6WoXYPbMNDzz2gC8incY6zyx0dd1jFg3faOzp2NuzEremDbY/Lmo93M22cOjd3cLInoup+Wm7O05d0A==
dependencies:
"@babel/runtime" "^7.14.8"
"@emotion/cache" "^11.4.0"
prop-types "^15.7.2"
"@mui/styles@^5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.0.0-rc.1.tgz#479c082afbdef116ad5323e15e3f1324efd29205"
integrity sha512-lOAEpHDTOv/mLGBXvu0zO+FJihezo3Z4PKggTEGIdEuZUvz2slyJOtlSGwvbURK7+dGT04jFBfMOHbPR1JODSw==
"@mui/styles@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.0.0.tgz#ef9d1ab02a29729f15c92390e281849e3cd132c0"
integrity sha512-J4Cg43m1M+7HsvV4XtTGAs39ogZcnzTUDxw0VbEdDdaEYdXG0jC5VXT/UouOPI2SWA3/v+trfanW8t/U2pIsqA==
dependencies:
"@babel/runtime" "^7.14.8"
"@emotion/hash" "^0.8.0"
"@mui/private-theming" "5.0.0-rc.1"
"@mui/types" "7.0.0-rc.1"
"@mui/utils" "5.0.0-rc.1"
"@mui/private-theming" "^5.0.0"
"@mui/types" "^7.0.0"
"@mui/utils" "^5.0.0"
clsx "^1.1.1"
csstype "^3.0.8"
hoist-non-react-statics "^3.3.2"
@@ -2468,29 +2468,29 @@
jss-plugin-vendor-prefixer "^10.7.1"
prop-types "^15.7.2"
"@mui/system@5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.0.0-rc.1.tgz#24c99469b48c350802929f6097f671742be9a7f1"
integrity sha512-c+esT+9wZR5aNcssMHg5Wm19VdX+uyhNLLTzqAg8oW36LBeIMTfiN18GShcxnFV3faje78Nr3BhmMFn9yBunMA==
"@mui/system@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.0.0.tgz#ed520742e417aa2b1ad34a7bbaa6ab04758305ef"
integrity sha512-CT5HLbQjzPZLMl5EjqY++lVuKVQKGbRNKQtOTpM2ABta6QQSTj/vARbIPYSZnwpDGUyGyzBZp2xfI3X3UNyVOg==
dependencies:
"@babel/runtime" "^7.14.8"
"@mui/private-theming" "5.0.0-rc.1"
"@mui/styled-engine" "5.0.0-rc.1"
"@mui/types" "7.0.0-rc.1"
"@mui/utils" "5.0.0-rc.1"
"@mui/private-theming" "^5.0.0"
"@mui/styled-engine" "^5.0.0"
"@mui/types" "^7.0.0"
"@mui/utils" "^5.0.0"
clsx "^1.1.1"
csstype "^3.0.8"
prop-types "^15.7.2"
"@mui/types@7.0.0-rc.1":
version "7.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.0.0-rc.1.tgz#276090e2cd062a5e9241cf8d4ad795a4ee10eb03"
integrity sha512-4vYFVi8ExcC7EEuk5melw/XPG2DVPeXI/HUYnQj+3t5NESpdvLJhbbvmHH366ZWAhXR2FechYWo/cQfGIsSG8Q==
"@mui/types@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.0.0.tgz#a7398502bc9c508875aafcbe28aea599b2c3d203"
integrity sha512-M/tkF2pZ4uoPhZ8pnNhlVnOFtz6F3dnYKIsnj8MuXKT6d26IE2u0UjA8B0275ggN74dR9rlHG5xJt5jgDx/Ung==
"@mui/utils@5.0.0-rc.1":
version "5.0.0-rc.1"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.0.0-rc.1.tgz#8427d1117a380b8c861be9a6bbf51075e776cd63"
integrity sha512-FSh/zaZqfzz0Iz7/RHb2ajA/q6dfFKeNIXZCl7sZeYq9L1u8GR4IHi4n1MphLiJTco02XBw3KwME9Bqmk73LEQ==
"@mui/utils@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.0.0.tgz#f34887968e506707d45594719202135a160b9193"
integrity sha512-WGikt+LTiGadqqKIGRwPVGtOUHchEEN6/af/T6nln8REkE2COY5nUirNc89ciPz1AznwZFzLtDmNkeV3NqUz2w==
dependencies:
"@babel/runtime" "^7.14.8"
"@types/prop-types" "^15.7.4"
@@ -2652,10 +2652,10 @@
estree-walker "^1.0.1"
picomatch "^2.2.2"
"@rowy/form-builder@^0.1.1":
version "0.1.1"
resolved "https://registry.yarnpkg.com/@rowy/form-builder/-/form-builder-0.1.1.tgz#17bbf7bfe2fcd2c4ec95edcdcb17ef0d22eb7f12"
integrity sha512-KEuQrljHwM+ByTzVZ3AaUPsECebPYqjbO3Yyj9y10gGA+AScdQk3En66nT2TdZjdkGsGKk+EwQi5E3FwN0jMrA==
"@rowy/form-builder@^0.1.2":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@rowy/form-builder/-/form-builder-0.1.2.tgz#eb19bfa329ad38f0fd9047c0a4f3259c12fac780"
integrity sha512-m92jbHUe81KCCr1PiuyC9kpNhRaZylMOunDp3/PMhzxb7Ng+Ua+RQkQYQuVxz59ucapvLDrGtraieeQdU8HChg==
dependencies:
"@hookform/resolvers" "^2.6.0"
"@mdi/js" "^5.9.55"
@@ -2672,10 +2672,10 @@
use-debounce "^3.4.3"
yup "^0.32.9"
"@rowy/multiselect@^0.1.5":
version "0.1.5"
resolved "https://registry.yarnpkg.com/@rowy/multiselect/-/multiselect-0.1.5.tgz#2d8d6ccc70e4c5264644804a319626db0f7b2158"
integrity sha512-tOPrq87mlAHcw41OnqbmoiPTYJfIHZlKoRHyBrUwrwuAC51wfwYakeg8owScVbLcO+rIFrs4b2Ak5/Bme9vQ9Q==
"@rowy/multiselect@^0.1.6":
version "0.1.6"
resolved "https://registry.yarnpkg.com/@rowy/multiselect/-/multiselect-0.1.6.tgz#a1edfbc67d4f9267cb73a3d33d5a2570662b74d1"
integrity sha512-NxyskBT/8GA1ARtWv1XSBr8ltfmArhnETujbf/PgT7sRtDhv5dFB/XNSMH46rNYuN6zGmG1jHR/pIRs2fTy08w==
"@sindresorhus/is@^0.14.0":
version "0.14.0"
@@ -3232,10 +3232,10 @@
"@types/history" "*"
"@types/react" "*"
"@types/react-transition-group@^4.2.0":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.2.tgz#38890fd9db68bf1f2252b99a942998dc7877c5b3"
integrity sha512-KibDWL6nshuOJ0fu8ll7QnV/LVTo3PzQ9aCPnRUYPfX7eZohHwLIdNHj7pftanREzHNP4/nJa8oeM73uSiavMQ==
"@types/react-transition-group@^4.4.2":
version "4.4.3"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.3.tgz#b0994da0a7023d67dbb4a8910a62112bc00d5688"
integrity sha512-fUx5muOWSYP8Bw2BUQ9M9RK9+W1XBK/7FLJ8PTQpnpTEkn0ccyMffyEQvan4C3h53gHdx7KE5Qrxi/LnUGQtdg==
dependencies:
"@types/react" "*"
@@ -13779,7 +13779,7 @@ react-textarea-autosize@^8.3.2:
use-composed-ref "^1.0.0"
use-latest "^1.0.0"
react-transition-group@^4.4.0, react-transition-group@^4.4.1:
react-transition-group@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==