-
Derivative Script
-
-
}>
-
-
+
+ Derivative script
+
+ }>
+
+
>
);
diff --git a/src/components/fields/Duration/SideDrawerField.tsx b/src/components/fields/Duration/SideDrawerField.tsx
index 555b948fc..f1a536b8d 100644
--- a/src/components/fields/Duration/SideDrawerField.tsx
+++ b/src/components/fields/Duration/SideDrawerField.tsx
@@ -11,7 +11,7 @@ export default function Duration({ column, control }: ISideDrawerFieldProps) {
{
+ render={({ field: { value } }) => {
if (
!value ||
!value.start ||
diff --git a/src/components/fields/Email/SideDrawerField.tsx b/src/components/fields/Email/SideDrawerField.tsx
index abe9e2625..0dffb1339 100644
--- a/src/components/fields/Email/SideDrawerField.tsx
+++ b/src/components/fields/Email/SideDrawerField.tsx
@@ -12,7 +12,7 @@ export default function Email({
{
+ render={({ field: { onChange, onBlur, value } }) => {
return (
(
+ render={({ field: { onChange, value } }) => (
requestConfirmation({
handleConfirm: () => handleDelete(file.ref),
- title: "Delete File",
+ title: "Delete file",
body: "Are you sure you want to delete this file?",
confirm: "Delete",
})
diff --git a/src/components/fields/Image/SideDrawerField.tsx b/src/components/fields/Image/SideDrawerField.tsx
index a8c541f97..d52752054 100644
--- a/src/components/fields/Image/SideDrawerField.tsx
+++ b/src/components/fields/Image/SideDrawerField.tsx
@@ -272,7 +272,7 @@ export default function Image_({
(
+ render={({ field: { onChange, value } }) => (
{
+ render={({ field: { onChange, value } }) => {
if (disabled)
return (
{
+ render={({ field: { onChange, onBlur, value } }) => {
return (
{
+ render={({ field: { onChange, onBlur, value } }) => {
const handleDelete = (index: number) => () => {
const newValues = [...value];
newValues.splice(index, 1);
diff --git a/src/components/fields/Number/SideDrawerField.tsx b/src/components/fields/Number/SideDrawerField.tsx
index 58382147f..998e58f55 100644
--- a/src/components/fields/Number/SideDrawerField.tsx
+++ b/src/components/fields/Number/SideDrawerField.tsx
@@ -12,7 +12,7 @@ export default function Number_({
{
+ render={({ field: { onChange, onBlur, value } }) => {
const handleChange = (e) => onChange(Number(e.target.value));
return (
diff --git a/src/components/fields/Percentage/SideDrawerField.tsx b/src/components/fields/Percentage/SideDrawerField.tsx
index 6fb2f1f71..661890dc8 100644
--- a/src/components/fields/Percentage/SideDrawerField.tsx
+++ b/src/components/fields/Percentage/SideDrawerField.tsx
@@ -39,7 +39,7 @@ export default function Percentage({
{
+ render={({ field: { onChange, onBlur, value } }) => {
const handleChange = (e) => onChange(Number(e.target.value) / 100);
return (
diff --git a/src/components/fields/Phone/SideDrawerField.tsx b/src/components/fields/Phone/SideDrawerField.tsx
index afa99aaae..ee3806bb4 100644
--- a/src/components/fields/Phone/SideDrawerField.tsx
+++ b/src/components/fields/Phone/SideDrawerField.tsx
@@ -12,7 +12,7 @@ export default function Phone({
{
+ render={({ field: { onChange, onBlur, value } }) => {
return (
(
+ render={({ field: { onChange, value } }) => (
(
+ render={({ field: { onChange, value } }) => (
{
+ render={({ field: { onChange, onBlur, value } }) => {
return (
handleChange("options")(
options.filter((o: string) => o !== option)
@@ -79,7 +79,7 @@ export default function Settings({ handleChange, config }) {
{
handleAdd();
}}
@@ -92,7 +92,7 @@ export default function Settings({ handleChange, config }) {
value={newOption}
className={classes.field}
fullWidth
- label={"New Option"}
+ label="New option"
id="new-option"
onChange={(e) => {
setNewOption(e.target.value);
diff --git a/src/components/fields/SingleSelect/SideDrawerField.tsx b/src/components/fields/SingleSelect/SideDrawerField.tsx
index 912e7e67e..3d4dd8c17 100644
--- a/src/components/fields/SingleSelect/SideDrawerField.tsx
+++ b/src/components/fields/SingleSelect/SideDrawerField.tsx
@@ -15,7 +15,7 @@ export default function SingleSelect({
(
+ render={({ field: { onChange, onBlur, value } }) => (
<>
- Slider Config
+ Slider config
handleChange("min")(parseFloat(e.target.value))}
value={config["min"]}
id={`settings-field-min`}
- label="Minimum Value"
+ label="Minimum value"
type="number"
/>
@@ -24,7 +24,7 @@ export default function Settings({ handleChange, config }) {
onChange={(e) => handleChange("max")(parseFloat(e.target.value))}
value={config["max"]}
id={`settings-field-max`}
- label="Maximum Value"
+ label="Maximum value"
type="number"
/>
@@ -35,7 +35,7 @@ export default function Settings({ handleChange, config }) {
onChange={(e) => handleChange("step")(parseFloat(e.target.value))}
value={config["step"]}
id={`settings-field-step`}
- label="Step Value"
+ label="Step value"
type="number"
/>
diff --git a/src/components/fields/Slider/SideDrawerField.tsx b/src/components/fields/Slider/SideDrawerField.tsx
index f772adddd..8ac3ca8c3 100644
--- a/src/components/fields/Slider/SideDrawerField.tsx
+++ b/src/components/fields/Slider/SideDrawerField.tsx
@@ -32,7 +32,7 @@ export default function Slider({
{
+ render={({ field: { onChange, onBlur, value } }) => {
const handleChange = (_: any, value: number | number[]) => {
onChange(value);
onBlur();
diff --git a/src/components/fields/Status/Settings.tsx b/src/components/fields/Status/Settings.tsx
index cb2a43628..63a829f81 100644
--- a/src/components/fields/Status/Settings.tsx
+++ b/src/components/fields/Status/Settings.tsx
@@ -8,6 +8,7 @@ import Grid from "@mui/material/Grid";
import Divider from "@mui/material/Divider";
import EditIcon from "@mui/icons-material/Edit";
+import AddIcon from "@mui/icons-material/Add";
import Modal from "components/Modal";
import DeleteIcon from "@mui/icons-material/Delete";
import Typography from "@mui/material/Typography";
@@ -64,19 +65,19 @@ const ConditionModal = ({ modal, setModal, conditions, setConditions }) => {
return (
{
}
: {
startIcon: ,
- children: "Remove Condition",
+ children: "Remove condition",
onClick: handleRemove,
},
}}
@@ -108,7 +109,7 @@ const ConditionModal = ({ modal, setModal, conditions, setConditions }) => {
onChange={handleUpdate("type")}
value={modal.condition.type}
multiple={false}
- label={"Select data type"}
+ label="Select data type"
/>
Condition
{modal.condition.type === "boolean" && (
@@ -120,7 +121,7 @@ const ConditionModal = ({ modal, setModal, conditions, setConditions }) => {
onChange={(v) => handleUpdate("value")(v === "true")}
value={modal.condition.value ? "true" : "false"}
multiple={false}
- label={"Select Condition Value"}
+ label="Select condition value"
/>
)}
@@ -129,21 +130,21 @@ const ConditionModal = ({ modal, setModal, conditions, setConditions }) => {
=" },
- { label: "More Than", value: ">" },
+ { label: "Equal or more than", value: ">=" },
+ { label: "More than", value: ">" },
]}
onChange={handleUpdate("operator")}
value={modal.condition.operator}
multiple={false}
- label={"Select Operator"}
+ label="Select operator"
/>
handleUpdate("value")(e.target.value)}
/>
@@ -152,16 +153,16 @@ const ConditionModal = ({ modal, setModal, conditions, setConditions }) => {
{modal.condition.type === "string" && (
handleUpdate("value")(e.target.value)}
/>
)}
- assigned label (output)
+ Assigned label (output)
handleUpdate("label")(e.target.value)}
/>
@@ -212,13 +213,16 @@ export default function Settings({ handleChange, config }: ISettingsProps) {
})
) : (
<>
- no conditions set yet
+ No conditions set yet
>
)}
-
),
}
diff --git a/src/pages/Auth/ImpersonatorAuth.tsx b/src/pages/Auth/ImpersonatorAuth.tsx
index ff6089ab1..9ffee15dc 100644
--- a/src/pages/Auth/ImpersonatorAuth.tsx
+++ b/src/pages/Auth/ImpersonatorAuth.tsx
@@ -45,7 +45,7 @@ export default function ImpersonatorAuthPage() {
return (
handleAuth(email)}
>
- Sign In
+ Sign in
>
)}
diff --git a/src/pages/Auth/JwtAuth.tsx b/src/pages/Auth/JwtAuth.tsx
index ea4be5491..d75bef300 100644
--- a/src/pages/Auth/JwtAuth.tsx
+++ b/src/pages/Auth/JwtAuth.tsx
@@ -27,7 +27,7 @@ export default function JwtAuthPage() {
};
return (
-
+
To sign in to {name}, first set up Firebase Authentication in the
@@ -20,12 +20,12 @@ export default function AuthSetupGuide() {
}
- href={WIKI_LINKS.setUpAuth}
+ href={WIKI_LINKS.setupFirebaseProject}
target="_blank"
rel="noopener noreferrer"
>
- Setup Guide
+ Setup guide
+
);
diff --git a/src/pages/Auth/SignOut.tsx b/src/pages/Auth/SignOut.tsx
index 74bff1f75..97e8f202a 100644
--- a/src/pages/Auth/SignOut.tsx
+++ b/src/pages/Auth/SignOut.tsx
@@ -12,9 +12,9 @@ export default function SignOutPage() {
}, []);
return (
-
+
- Sign In Again
+ Sign in again
);
diff --git a/src/pages/Auth/SignUp.tsx b/src/pages/Auth/SignUp.tsx
index 57a0100e6..7d709aa41 100644
--- a/src/pages/Auth/SignUp.tsx
+++ b/src/pages/Auth/SignUp.tsx
@@ -27,7 +27,7 @@ export default function SignUpPage() {
Welcome! To join this project, sign in with the email address
diff --git a/src/pages/Auth/index.tsx b/src/pages/Auth/index.tsx
index b21e42039..98454375f 100644
--- a/src/pages/Auth/index.tsx
+++ b/src/pages/Auth/index.tsx
@@ -14,7 +14,7 @@ export default function AuthPage() {
}
return (
-
+
);
diff --git a/src/pages/Deploy.tsx b/src/pages/Deploy.tsx
index 6c376c3e0..d922f2e54 100644
--- a/src/pages/Deploy.tsx
+++ b/src/pages/Deploy.tsx
@@ -44,7 +44,7 @@ export default function DeployPage() {
hideLogo={!isMobile}
hideProject
hideLinks={!isMobile}
- title="Get Started"
+ title="Get started"
description={
<>
@@ -88,7 +88,7 @@ export default function DeployPage() {
Don’t have a project? Follow our{" "}
diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx
index 21e2ec010..e44f8b2b2 100644
--- a/src/pages/Home.tsx
+++ b/src/pages/Home.tsx
@@ -105,7 +105,7 @@ export default function HomePage() {
return ;
const createTableFab = (
-
+
handleQuery(e.target.value)}
paperSx={{
maxWidth: (theme) => ({ md: theme.breakpoints.values.sm - 48 }),
@@ -227,7 +227,7 @@ export default function HomePage() {
sx={{ pl: 2, cursor: "default" }}
>
{query ? `${results.length} of ${tables.length}` : tables.length}{" "}
- Tables
+ tables
+
}>
+ }>
r.path === path)?.path ?? ""
diff --git a/src/pages/Settings/UserManagement.tsx b/src/pages/Settings/UserManagement.tsx
index 41a0b0e17..2b6bd0736 100644
--- a/src/pages/Settings/UserManagement.tsx
+++ b/src/pages/Settings/UserManagement.tsx
@@ -46,7 +46,7 @@ export default function UserManagementPage() {
return (
handleQuery(e.target.value)}
/>
@@ -62,7 +62,7 @@ export default function UserManagementPage() {
{!loading && query
? `${results.length} of ${usersState.documents.length}`
: usersState.documents.length}{" "}
- Users
+ users
diff --git a/src/pages/Setup.tsx b/src/pages/Setup.tsx
index c37ce72da..044fe1052 100644
--- a/src/pages/Setup.tsx
+++ b/src/pages/Setup.tsx
@@ -157,7 +157,7 @@ export default function SetupPage() {
color="primary"
type="submit"
>
- Get Started
+ Get started
) : (
@@ -168,7 +168,7 @@ export default function SetupPage() {
color="primary"
disabled
>
- Get Started
+ Get started
@@ -177,25 +177,25 @@ export default function SetupPage() {
{
id: "rowyRun",
shortTitle: `${name} Run`,
- title: `Set Up ${name} Run`,
+ title: `Set up ${name} Run`,
body: ,
},
{
id: "serviceAccount",
- shortTitle: `Service Account`,
- title: `Set Up Service Account`,
+ shortTitle: `Service account`,
+ title: `Set up service account`,
body: ,
},
{
id: "projectOwner",
- shortTitle: `Project Owner`,
- title: `Set Up Project Owner`,
+ shortTitle: `Project owner`,
+ title: `Set up project owner`,
body: ,
},
{
id: "rules",
shortTitle: `Rules`,
- title: `Set Up Firestore Rules`,
+ title: `Set up Firestore Rules`,
body: ,
},
completion.migrate !== undefined
@@ -265,6 +265,7 @@ export default function SetupPage() {
2
)} - env(safe-area-inset-top) - env(safe-area-inset-bottom))`,
height: 840 * 0.75,
+ resize: "both",
p: 0,
"& > *, & > .MuiDialogContent-root": { px: { xs: 2, sm: 4 } },
diff --git a/src/theme/components.tsx b/src/theme/components.tsx
index 55442d2f8..7f1ff186c 100644
--- a/src/theme/components.tsx
+++ b/src/theme/components.tsx
@@ -1,10 +1,13 @@
import { Theme, ThemeOptions } from "@mui/material/styles";
import type {} from "@mui/lab/themeAugmentation";
+import { MultiSelectProps } from "@rowy/multiselect";
import { toRem } from "./typography";
import RadioIcon from "theme/RadioIcon";
import CheckboxIcon from "theme/CheckboxIcon";
import CheckboxIndeterminateIcon from "theme/CheckboxIndeterminateIcon";
+import AddCircleIcon from "@mui/icons-material/AddCircleOutline";
+import { SvgIcon } from "@mui/material";
import { colord, extend } from "colord";
import mixPlugin from "colord/plugins/mix";
@@ -16,6 +19,17 @@ declare module "@mui/material/styles/createTransitions" {
}
}
+declare module "@mui/material/styles" {
+ interface Components {
+ RowyMultiSelect?: {
+ defaultProps?: Omit<
+ MultiSelectProps,
+ "multiple" | "value" | "onChange" | "options"
+ >;
+ };
+ }
+}
+
export const components = (theme: Theme): ThemeOptions => {
const buttonPrimaryHover = colord(theme.palette.primary.main)
.mix(theme.palette.primary.contrastText, 0.12)
@@ -901,6 +915,19 @@ export const components = (theme: Theme): ThemeOptions => {
},
},
},
+
+ RowyMultiSelect: {
+ defaultProps: {
+ AddButtonProps: {
+ singleIcon: ,
+ multipleIcon: (
+
+
+
+ ),
+ },
+ },
+ },
},
};
};
diff --git a/yarn.lock b/yarn.lock
index d995a16ff..979a06944 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2153,6 +2153,11 @@
resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-2.8.0.tgz#32e82b072ff71c71e62fb2901b129642a0c5897e"
integrity sha512-ALlr0Bg6zDHdRsdqkwfWGPMnIxP4hqMRPvFDHp7lWXQeA7rKykto3cWqQQh1s0PzX043RHwMB6OHVPMwFJqwxg==
+"@hookform/resolvers@^2.8.1":
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-2.8.1.tgz#0d4fdd25bdeb4b98bf4e177c63fc4efa173454dd"
+ integrity sha512-U5lgaCkvD+0e5X8iQmCHiF+jOqjTX6OHUA7zPdeIHI6xdAOoi3rH9MKNuwMwv5Hly2LL6XtDgDkS/k+YG9hOew==
+
"@icons/material@^0.2.4":
version "0.2.4"
resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8"
@@ -2652,10 +2657,10 @@
estree-walker "^1.0.1"
picomatch "^2.2.2"
-"@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==
+"@rowy/form-builder@^0.2.4":
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/@rowy/form-builder/-/form-builder-0.2.4.tgz#f8f39c85c6142a730ecc84c7d69c871a97c1ff3f"
+ integrity sha512-Nu5VRcdyPv169xoL7MUZL2Y/2s3nfSJNGmEDcYppiDSZpR/MHN0MFZpv/WwI4Ns9Ogv32hFxkBbI/fF2KGS5Zg==
dependencies:
"@hookform/resolvers" "^2.6.0"
"@mdi/js" "^5.9.55"
@@ -2672,10 +2677,10 @@
use-debounce "^3.4.3"
yup "^0.32.9"
-"@rowy/multiselect@^0.1.12":
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/@rowy/multiselect/-/multiselect-0.1.12.tgz#03380ceaaed9f6847c59b6ccae6d216ce149d95a"
- integrity sha512-1JmH5EDt0OSxcUWjQXfqGwp4w2xDJ5OjfS1uV9pXv7AcTw++RqwQKsF15llKYyatvpZohSyaVQIogPh7Zzpe/g==
+"@rowy/multiselect@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@rowy/multiselect/-/multiselect-0.2.1.tgz#86357156b31b9d16e45e08ef2503a98de7b9885f"
+ integrity sha512-GUDa50Etb81N16K1qq7TVRUc5vOQX5k8OE8SDUnJCrgPOKWkVZaIcIIkEGRpZwEBBvmFocAZGwVO/pEUwNzsAQ==
"@sindresorhus/is@^0.14.0":
version "0.14.0"
@@ -6258,6 +6263,11 @@ depd@~2.0.0:
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+dequal@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d"
+ integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==
+
des.js@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
@@ -11518,10 +11528,10 @@ normalize-url@^4.1.0:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
-notistack@^1.0.6-next.3:
- version "1.0.6-next.3"
- resolved "https://registry.yarnpkg.com/notistack/-/notistack-1.0.6-next.3.tgz#120c1a71c3b591fe13419e84f9c2b28383c22c63"
- integrity sha512-vtRMCAOyfFzfRIaJgpftwPG/gojL0JqPvEFnpoYSWWZmW80C32dXU+Pq7BrWhW6Y4yO7wv/d2toNM7QJJxdW9Q==
+notistack@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/notistack/-/notistack-2.0.2.tgz#18361a0ce39d2c2d8c3ef58ae43cf4b30d78b800"
+ integrity sha512-Z2kD6QK9n/9V9zXQfN3ZgH22TefBWE3OZ/q74gMVslGPA9j9WGjoi+YxsgkTAOY8NqTYdUe8aijd2kXsGNYp6g==
dependencies:
clsx "^1.1.0"
hoist-non-react-statics "^3.3.0"
@@ -13569,16 +13579,16 @@ react-helmet@^6.1.0:
react-fast-compare "^3.1.1"
react-side-effect "^2.1.0"
-react-hook-form@^6:
- version "6.15.8"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-6.15.8.tgz#725c139d308c431c4611e4b9d85a49f01cfc0e7a"
- integrity sha512-prq82ofMbnRyj5wqDe8hsTRcdR25jQ+B8KtCS7BLCzjFHAwNuCjRwzPuP4eYLsEBjEIeYd6try+pdLdw0kPkpg==
-
react-hook-form@^7.10.0:
version "7.15.2"
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.15.2.tgz#c4d4fa44a5df755648ab19034062ae37087536b0"
integrity sha512-tPcLlsTXaOtZkyc1IGGaJfQ6amo2sJiM6DDufE7WG+S4N8s5Wr60HGtnKS7gPnnZL93pFPQYrSj7WDB5An2VVw==
+react-hook-form@^7.16.1:
+ version "7.16.1"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.16.1.tgz#669046df378a71949e5cf8a2398cbe20d5cb27bc"
+ integrity sha512-kcLDmSmlyLUFx2UU5bG/o4+3NeK753fhKodJa8gkplXohGkpAq0/p+TR24OWjZmkEc3ES7ppC5v5d6KUk+fJTA==
+
react-image@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/react-image/-/react-image-4.0.3.tgz#6fa722877660b67295298a914bff1ed87ad2cf83"
@@ -15401,6 +15411,13 @@ swc-loader@^0.1.14:
"@swc/core" "^1.2.52"
loader-utils "^2.0.0"
+swr@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/swr/-/swr-1.0.1.tgz#15f62846b87ee000e52fa07812bb65eb62d79483"
+ integrity sha512-EPQAxSjoD4IaM49rpRHK0q+/NzcwoT8c0/Ylu/u3/6mFj/CWnQVjNJ0MV2Iuw/U+EJSd2TX5czdAwKPYZIG0YA==
+ dependencies:
+ dequal "2.0.2"
+
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"