diff --git a/README.md b/README.md index 69dcafba8..455884571 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +Rowy

@@ -9,30 +9,29 @@ Build on Google Cloud Platform in minutes

-Manage Firestore data in a spreadsheet-like UI, write Cloud Functions effortlessly in the browser, connect to your favorite third party platforms such as sendgrid, twilio, algolia, slack and more. +Manage Firestore data in a spreadsheet-like UI, write Cloud Functions effortlessly in the browser, and connect to your favorite third party platforms such as SendGrid, Twilio, Algolia, sSack and more.

-[![Discord](https://img.shields.io/discord/853498675484819476?color=%234200FF&label=Chat%20with%20us&logo=discord&logoColor=%23FFFFFF&style=for-the-badge)](https://discord.com/invite/B8yAD5PDX4) - +[![Discord](https://img.shields.io/discord/853498675484819476?color=%234200FF&label=Chat%20with%20us&logo=discord&logoColor=%23FFFFFF&style=for-the-badge)](https://discord.gg/B8yAD5PDX4) +

WebsiteDocumentationDiscord • - Twitter -

- -[![Build Status](https://badgen.net/github/license/RowyIO/rowy)](https://github.com/RowyIO/rowy/blob/rc/LICENSE) -[![Commits](https://badgen.net/github/last-commit/RowyIO/rowy/rc)](https://github.com/RowyIO/rowy/commits/rc) -[![GitHub stars](https://badgen.net/github/stars/RowyIO/rowy)](https://github.com/RowyIO/rowy/stargazers/) -
+ Twitter +

+[![License](https://img.shields.io/github/license/rowyio/rowy)](https://github.com/rowyio/rowy/blob/main/LICENSE) +[![Last commit](https://img.shields.io/github/last-commit/rowyio/rowy/rc)](https://github.com/rowyio/rowy/commits/rc) +[![GitHub stars](https://img.shields.io/github/stars/rowyio/rowy)](https://github.com/rowyio/rowy/stargazers/) + - + -# Quick Try +## Quick try

Set up Rowy on your Google Cloud Platform project with this one-click deploy button.

@@ -40,11 +39,12 @@ Manage Firestore data in a spreadsheet-like UI, write Cloud Functions effortless title="One Click Deploy" width="250" />

-# Documentation +## Documentation -You can find the full documentation with how-to guides [here](http://docs.rowy.io/). +You can find the full documentation with how-to guides +[here](http://docs.rowy.io/). -# Features +## Features ### Powerful spreadsheet interface for Firestore @@ -54,17 +54,25 @@ You can find the full documentation with how-to guides [here](http://docs.rowy.i - Multiple views for the same collection - Bulk import or export data - csv, json +### Supercharge your database with cloud functions and ready made extension + +- Effortlessly build cloud functions on field level triggers right in the browser + - Use any NPM modules or APIs +- Connect to your favourite tool with pre-built extensions or create your own + - SendGrid, Algolia, Twilio, Bigquery and more + ### Rich and flexible data fields + - [30+ fields supported](https://docs.rowy.io/field-types/supported-fields) -- Basic types: Short Text, Long Text, Email, Phone, URL… -- Custom UI pickers: Date, Checkbox, Single Select, Multi Select… -- Uploaders: Image, File -- Rich Editors: JSON, Code, Rich Text (HTML) -- Data validation, default values, required fields + - Basic types: Short Text, Long Text, Email, Phone, URL… + - Custom UI pickers: Date, Checkbox, Single Select, Multi Select… + - Uploaders: Image, File + - Rich Editors: JSON, Code, Rich Text (HTML) + - Data validation, default values, required fields - Action field: Clickable trigger for any Cloud Function -- Derivative field: Populate a cell with value derived from your database, -npm modules, api calls - called on field level triggers - Aggregate field: Populate cell with value aggregated from the row’s sub-table +- Connect Table: Get snapshot of data from another data table using Algolia +- Connect Service: Get data from any HTTP endpoint ### Collaborate with your team @@ -73,26 +81,23 @@ npm modules, api calls - called on field level triggers - Built in user management - Customizable views for different user roles -### Supercharge your database with cloud functions +## Install -- Effortless build cloud functions right in the browser -- Connect to your favourite tools: SendGrid, Algolia, Twilio, Bigquery and more -- Integrations with external services - - Connect Table uses Algolia to get a snapshot of another table’s row values - - Connect Service uses any HTTP endpoint to get a cell value - -# Install +Set up Rowy on your Google Cloud project with this one-click deploy button. -

Set up Rowy on your Google Cloud Platform project with this one-click deploy button that makes the process of setting up easy with step by step guide and ensuring your project is setup correctly. This runs RowyRun (an open-source, cloud run instance) that operates exclusively on your GCP project and we will never have access to your service account or any of your data.

- -One Click Deploy -

+[![Run on Google Cloud](https://deploy.cloud.run/button.svg)](https://deploy.cloud.run/?git_repo=https://github.com/rowyio/rowyRun.git) + +The one-click deploy makes the process of setting up easy with a step by step +guide and ensures your project is setup correctly. -Alternatively, you can also manually install using the full installation guide is available [here](https://docs.rowy.io/install). +It deploys [Rowy Run](https://github.com/rowyio/rowyrun), an open-source Cloud +Run instance that operates exclusively on your GCP project. So we never have +access to your service account or any of your data. +Alternatively, you can manually install by +[following this guide](https://docs.rowy.io/setup/install). -# Join Our Community +## Join our community We would love to connect and hear what you think! diff --git a/public/index.html b/public/index.html index c2b0f3aba..4104e958e 100644 --- a/public/index.html +++ b/public/index.html @@ -21,36 +21,33 @@ - - + @@ -79,6 +76,30 @@ /> Rowy + + + + + + + + + + + + + + + diff --git a/public/static/meta.png b/public/static/meta.png new file mode 100644 index 000000000..702f613ba Binary files /dev/null and b/public/static/meta.png differ diff --git a/public/static/tinymce_content-dark.css b/public/static/tinymce_content-dark.css deleted file mode 100644 index c9bcd3cbf..000000000 --- a/public/static/tinymce_content-dark.css +++ /dev/null @@ -1,110 +0,0 @@ -:root { - font-size: 16px; - - --tinymce-text-color: rgba(255, 255, 255, 1); - --tinymce-primary-color: #ed4747; - --tinymce-divider-color: rgba(255, 255, 255, 0.12); -} - -html { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - box-sizing: border-box; - - padding: 1rem; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -body { - margin: 0 auto; - max-width: 33em; - max-width: 60ch; - - font-size: 13.8px; - font-family: "Open Sans", sans-serif; - line-height: 1.45; - letter-spacing: 0.25px; - - color: var(--tinymce-text-color); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: "Europa", "Open Sans", sans-serif; - margin: 0; - line-height: 1.2; - font-weight: bold; -} -p { - margin: 0; -} - -a { - font-weight: bold; - color: var(--tinymce-primary-color); -} - -ul, -ol { - margin: 0; - padding-left: 1.5em; -} -li + li { - margin-top: 0.5em; -} - -body * + * { - margin-top: 1em; -} - -table { - border-collapse: collapse; -} -table th, -table td { - border: 1px solid var(--tinymce-divider-color); - padding: 0.4rem; -} -figure { - display: table; - margin: 1rem auto; -} -figure figcaption { - color: #999; - display: block; - margin-top: 0.25rem; - text-align: center; -} -hr { - border-color: var(--tinymce-divider-color); - border-style: solid; - border-width: 1px 0 0 0; -} -code { - background-color: var(--tinymce-divider-color); - border-radius: 4px; - padding: 0.1rem 0.2rem; - font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; -} -pre { - font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; -} -.mce-content-body:not([dir="rtl"]) blockquote { - border-left: 2px solid var(--tinymce-divider-color); - margin-left: 1.5rem; - padding-left: 1rem; -} -.mce-content-body[dir="rtl"] blockquote { - border-right: 2px solid var(--tinymce-divider-color); - margin-right: 1.5rem; - padding-right: 1rem; -} diff --git a/public/static/tinymce_content.css b/public/static/tinymce_content.css deleted file mode 100644 index b90b9e224..000000000 --- a/public/static/tinymce_content.css +++ /dev/null @@ -1,110 +0,0 @@ -:root { - font-size: 16px; - - --tinymce-text-color: rgba(0, 0, 0, 0.87); - --tinymce-primary-color: #ed4747; - --tinymce-divider-color: rgba(0, 0, 0, 0.12); -} - -html { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - box-sizing: border-box; - - padding: 1rem; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -body { - margin: 0 auto; - max-width: 33em; - max-width: 60ch; - - font-size: 13.8px; - font-family: "Open Sans", sans-serif; - line-height: 1.45; - letter-spacing: 0.25px; - - color: var(--tinymce-text-color); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: "Europa", "Open Sans", sans-serif; - margin: 0; - line-height: 1.2; - font-weight: bold; -} -p { - margin: 0; -} - -a { - font-weight: bold; - color: var(--tinymce-primary-color); -} - -ul, -ol { - margin: 0; - padding-left: 1.5em; -} -li + li { - margin-top: 0.5em; -} - -body * + * { - margin-top: 1em; -} - -table { - border-collapse: collapse; -} -table th, -table td { - border: 1px solid var(--tinymce-divider-color); - padding: 0.4rem; -} -figure { - display: table; - margin: 1rem auto; -} -figure figcaption { - color: #999; - display: block; - margin-top: 0.25rem; - text-align: center; -} -hr { - border-color: var(--tinymce-divider-color); - border-style: solid; - border-width: 1px 0 0 0; -} -code { - background-color: var(--tinymce-divider-color); - border-radius: 4px; - padding: 0.1rem 0.2rem; - font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; -} -pre { - font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; -} -.mce-content-body:not([dir="rtl"]) blockquote { - border-left: 2px solid var(--tinymce-divider-color); - margin-left: 1.5rem; - padding-left: 1rem; -} -.mce-content-body[dir="rtl"] blockquote { - border-right: 2px solid var(--tinymce-divider-color); - margin-right: 1.5rem; - padding-right: 1rem; -} diff --git a/src/assets/logo-sticker.svg b/src/assets/logo-sticker.svg new file mode 100644 index 000000000..b6696ee00 --- /dev/null +++ b/src/assets/logo-sticker.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/Setup/Step0Welcome.tsx b/src/components/Setup/Step0Welcome.tsx index 3fa05d868..fc47668bc 100644 --- a/src/components/Setup/Step0Welcome.tsx +++ b/src/components/Setup/Step0Welcome.tsx @@ -45,8 +45,19 @@ export default function Step0Welcome({ variant="body2" color="text.primary" > - terms and conditions + Terms and Conditions + {" "} + and + + Privacy Policy + . } sx={{ pr: 1, textAlign: "left", alignItems: "flex-start", p: 0, m: 0 }} diff --git a/src/components/fields/Action/index.tsx b/src/components/fields/Action/index.tsx index 8496d55ee..6e054f552 100644 --- a/src/components/fields/Action/index.tsx +++ b/src/components/fields/Action/index.tsx @@ -24,7 +24,7 @@ export const config: IFieldConfig = { initialValue: {}, icon: , description: - "A button with a pre-defined action. Triggers a Cloud Function. 3 different states: Disabled, Enabled, Active (Clicked). Supports Undo and Redo.", + "Button with pre-defined action script or triggers a Cloud Function. Optionally supports Undo and Redo.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, SideDrawerField, diff --git a/src/components/fields/Aggregate/index.tsx b/src/components/fields/Aggregate/index.tsx index ddbb4c22c..66f3ae778 100644 --- a/src/components/fields/Aggregate/index.tsx +++ b/src/components/fields/Aggregate/index.tsx @@ -9,12 +9,12 @@ export const config: IFieldConfig = { type: FieldType.aggregate, name: "Aggregate", group: "Cloud Function", - dataType: "string", + dataType: "any", initialValue: "", initializable: false, icon: , description: - "Value aggregated from a specified sub-table of the row. Displayed using any other field type. Requires Cloud Function setup.", + "Value aggregated from a specified sub-table of the row. Displayed using any other field type. Requires Cloud Function set up.", TableCell: withBasicCell(BasicCell), TableEditor: NullEditor as any, SideDrawerField: BasicCell as any, diff --git a/src/components/fields/Checkbox/index.tsx b/src/components/fields/Checkbox/index.tsx index 570f412c5..92555b224 100644 --- a/src/components/fields/Checkbox/index.tsx +++ b/src/components/fields/Checkbox/index.tsx @@ -24,7 +24,7 @@ export const config: IFieldConfig = { initialValue: false, initializable: true, icon: , - description: "Either toggled on or off. Toggled off by default.", + description: "True/false value. Default: false.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, csvImportParser: (value: string) => { diff --git a/src/components/fields/Code/index.tsx b/src/components/fields/Code/index.tsx index 63f121fb8..b3f041d5c 100644 --- a/src/components/fields/Code/index.tsx +++ b/src/components/fields/Code/index.tsx @@ -19,7 +19,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Raw code editable with Monaco Editor.", + description: "Raw code edited with the Monaco Editor.", TableCell: withBasicCell(BasicCell), TableEditor: withSideDrawerEditor(BasicCell), SideDrawerField, diff --git a/src/components/fields/Color/index.tsx b/src/components/fields/Color/index.tsx index 14ce4c3ff..7409adf86 100644 --- a/src/components/fields/Color/index.tsx +++ b/src/components/fields/Color/index.tsx @@ -23,7 +23,8 @@ export const config: IFieldConfig = { initialValue: {}, initializable: true, icon: , - description: "Visual color picker. Supports Hex, RGBA, HSLA.", + description: + "Color stored as Hex, RGB, and HSV. Edited with a visual picker.", TableCell: withPopoverCell(BasicCell, InlineCell, PopoverCell, { anchorOrigin: { horizontal: "left", vertical: "bottom" }, }), diff --git a/src/components/fields/ConnectService/index.tsx b/src/components/fields/ConnectService/index.tsx index 7f8fb5f14..e65d5ac6b 100644 --- a/src/components/fields/ConnectService/index.tsx +++ b/src/components/fields/ConnectService/index.tsx @@ -25,7 +25,7 @@ export const config: IFieldConfig = { type: FieldType.connectService, name: "Connect Service (Alpha)", group: "Connection", - dataType: "{ docPath: string; snapshot: Record; }", + dataType: "{ docPath: string; snapshot: Record; }[]", initialValue: [], icon: , description: diff --git a/src/components/fields/ConnectTable/index.tsx b/src/components/fields/ConnectTable/index.tsx index befd0ad8f..99d2df14c 100644 --- a/src/components/fields/ConnectTable/index.tsx +++ b/src/components/fields/ConnectTable/index.tsx @@ -25,7 +25,7 @@ export const config: IFieldConfig = { type: FieldType.connectTable, name: "Connect Table (Alpha)", group: "Connection", - dataType: "{ docPath: string; snapshot: Record; }", + dataType: "{ docPath: string; snapshot: Record; }[]", initialValue: [], icon: , description: diff --git a/src/components/fields/Date/index.tsx b/src/components/fields/Date/index.tsx index 353d6f7b3..9636cf612 100644 --- a/src/components/fields/Date/index.tsx +++ b/src/components/fields/Date/index.tsx @@ -27,7 +27,7 @@ export const config: IFieldConfig = { initialValue: null, initializable: true, icon: , - description: `Date displayed by default as ${DATE_FORMAT}.`, + description: `Formatted date. Format is configurable, default: ${DATE_FORMAT}. Edited with a visual picker.`, TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, SideDrawerField, diff --git a/src/components/fields/DateTime/index.tsx b/src/components/fields/DateTime/index.tsx index 2c2c3da6e..4522f6ada 100644 --- a/src/components/fields/DateTime/index.tsx +++ b/src/components/fields/DateTime/index.tsx @@ -29,7 +29,7 @@ export const config: IFieldConfig = { initialValue: null, initializable: true, icon: , - description: `Date & Time displayed by default as ${DATE_TIME_FORMAT}.`, + description: `Formatted date & time. Format is configurable, default: ${DATE_TIME_FORMAT}. Edited with a visual picker.`, TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, SideDrawerField, diff --git a/src/components/fields/Derivative/index.tsx b/src/components/fields/Derivative/index.tsx index 85fd18c8a..37e4328a4 100644 --- a/src/components/fields/Derivative/index.tsx +++ b/src/components/fields/Derivative/index.tsx @@ -10,13 +10,13 @@ export const config: IFieldConfig = { type: FieldType.derivative, name: "Derivative", group: "Cloud Function", - dataType: "string", + dataType: "any", initialValue: "", initializable: true, icon: , requireConfiguration: true, description: - "Value derived from the rest of the row’s values. Displayed using any other field type. Requires Cloud Function setup.", + "Value derived from the rest of the row’s values. Displayed using any other field type. Requires Cloud Function set up.", TableCell: withBasicCell(BasicCell), TableEditor: NullEditor as any, SideDrawerField: BasicCell as any, diff --git a/src/components/fields/Duration/index.tsx b/src/components/fields/Duration/index.tsx index 1d97feeff..23ff1795d 100644 --- a/src/components/fields/Duration/index.tsx +++ b/src/components/fields/Duration/index.tsx @@ -20,8 +20,7 @@ export const config: IFieldConfig = { type: FieldType.duration, name: "Duration (Alpha)", group: "Date & Time", - dataType: - "{ start: firebase.firestore.Timestamp, end?: firebase.firestore.Timestamp }", + dataType: "Record<'start' | 'end', firebase.firestore.Timestamp>", initialValue: {}, icon: , description: "Duration calculated from two timestamps.", diff --git a/src/components/fields/Email/index.tsx b/src/components/fields/Email/index.tsx index bd18d781a..292e09559 100644 --- a/src/components/fields/Email/index.tsx +++ b/src/components/fields/Email/index.tsx @@ -19,7 +19,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Email address.", + description: "Email address. Not validated.", TableCell: withBasicCell(BasicCell), TableEditor: TextEditor, SideDrawerField, diff --git a/src/components/fields/File/TableCell.tsx b/src/components/fields/File/TableCell.tsx index 8102827a0..cd6c92e1c 100644 --- a/src/components/fields/File/TableCell.tsx +++ b/src/components/fields/File/TableCell.tsx @@ -3,7 +3,6 @@ import { IHeavyCellProps } from "../types"; import { useDropzone } from "react-dropzone"; import _findIndex from "lodash/findIndex"; -import clsx from "clsx"; import { format } from "date-fns"; import { makeStyles, createStyles } from "@mui/styles"; diff --git a/src/components/fields/File/index.tsx b/src/components/fields/File/index.tsx index 2bdedfed0..dddac8ac0 100644 --- a/src/components/fields/File/index.tsx +++ b/src/components/fields/File/index.tsx @@ -19,7 +19,7 @@ export const config: IFieldConfig = { name: "File", group: "File", dataType: - "{ downloadURL: string, lastModifiedTS: number, name: string, type, ref }[]", + "{ downloadURL: string; lastModifiedTS: number; name: string; type: string; ref: string; }[]", initialValue: [], icon: , description: "File uploaded to Firebase Storage. Supports any file type.", diff --git a/src/components/fields/Id/index.tsx b/src/components/fields/Id/index.tsx index 526459287..245c4ebe4 100644 --- a/src/components/fields/Id/index.tsx +++ b/src/components/fields/Id/index.tsx @@ -17,10 +17,10 @@ export const config: IFieldConfig = { type: FieldType.id, name: "ID", group: "Metadata", - dataType: "undefined", + dataType: "string", initialValue: "", icon: , - description: "Displays the row’s document ID. Cannot be sorted.", + description: "Displays the row’s ID. Read-only. Cannot be sorted.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: withSideDrawerEditor(TableCell), SideDrawerField, diff --git a/src/components/fields/Image/index.tsx b/src/components/fields/Image/index.tsx index f58705072..022ae65ba 100644 --- a/src/components/fields/Image/index.tsx +++ b/src/components/fields/Image/index.tsx @@ -19,11 +19,11 @@ export const config: IFieldConfig = { name: "Image", group: "File", dataType: - "{ downloadURL: string, lastModifiedTS: number, name: string, type, ref }[]", + "{ downloadURL: string; lastModifiedTS: number; name: string; type: string; ref: string; }[]", initialValue: [], icon: , description: - "Image file uploaded to Firebase Storage. Supports JPEG, PNG, SVG, GIF, WebP.", + "Image file uploaded to Firebase Storage. Supports JPEG, PNG, SVG, GIF, WebP, AVIF, JPEG XL.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, SideDrawerField, @@ -36,4 +36,6 @@ export const IMAGE_MIME_TYPES = [ "image/svg+xml", "image/gif", "image/webp", + "image/avif", + "image/jxl", ]; diff --git a/src/components/fields/Json/index.tsx b/src/components/fields/Json/index.tsx index cb541cf2d..deea3de24 100644 --- a/src/components/fields/Json/index.tsx +++ b/src/components/fields/Json/index.tsx @@ -19,11 +19,11 @@ export const config: IFieldConfig = { type: FieldType.json, name: "JSON", group: "Code", - dataType: "any", + dataType: "object", initialValue: undefined, initializable: true, icon: , - description: "JSON object editable with a visual JSON editor.", + description: "Object edited with a visual JSON editor.", TableCell: withBasicCell(BasicCell), TableEditor: withSideDrawerEditor(BasicCell), csvImportParser: (value) => { diff --git a/src/components/fields/LongText/index.tsx b/src/components/fields/LongText/index.tsx index f0058bab4..a944bdd21 100644 --- a/src/components/fields/LongText/index.tsx +++ b/src/components/fields/LongText/index.tsx @@ -21,7 +21,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Large amount of text, such as sentences and paragraphs.", + description: "Text displayed on multiple lines.", TableCell: withBasicCell(BasicCell), TableEditor: withSideDrawerEditor(BasicCell), SideDrawerField, diff --git a/src/components/fields/MultiSelect/index.tsx b/src/components/fields/MultiSelect/index.tsx index fc7f186a7..4423e5034 100644 --- a/src/components/fields/MultiSelect/index.tsx +++ b/src/components/fields/MultiSelect/index.tsx @@ -33,7 +33,7 @@ export const config: IFieldConfig = { initializable: true, icon: , description: - "Dropdown selector with searchable options and check box behavior. Optionally allows users to input custom values. Max selection: all options.", + "Multiple values from predefined options. Options are searchable and users can optionally input custom values.", TableCell: withPopoverCell(BasicCell, InlineCell, PopoverCell, { anchorOrigin: { horizontal: "left", vertical: "bottom" }, transparent: true, diff --git a/src/components/fields/Number/index.tsx b/src/components/fields/Number/index.tsx index 20b67ce0e..3cc51ab60 100644 --- a/src/components/fields/Number/index.tsx +++ b/src/components/fields/Number/index.tsx @@ -19,7 +19,7 @@ export const config: IFieldConfig = { initialValue: 0, initializable: true, icon: , - description: "Numeric data.", + description: "Numeric value.", TableCell: withBasicCell(BasicCell), TableEditor: TextEditor, SideDrawerField, diff --git a/src/components/fields/Phone/index.tsx b/src/components/fields/Phone/index.tsx index 1bba638af..ed872921f 100644 --- a/src/components/fields/Phone/index.tsx +++ b/src/components/fields/Phone/index.tsx @@ -19,7 +19,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Phone numbers stored as text.", + description: "Phone number stored as text. Not validated.", TableCell: withBasicCell(BasicCell), TableEditor: TextEditor, SideDrawerField, diff --git a/src/components/fields/Rating/index.tsx b/src/components/fields/Rating/index.tsx index b48559158..b21649e94 100644 --- a/src/components/fields/Rating/index.tsx +++ b/src/components/fields/Rating/index.tsx @@ -26,7 +26,7 @@ export const config: IFieldConfig = { initializable: true, icon: , description: - "Rating displayed as stars from 0 to configurable number of stars. Default: 5 stars.", + "Rating displayed as stars. Max stars is configurable, default: 5 stars.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, settings: Settings, diff --git a/src/components/fields/RichText/index.tsx b/src/components/fields/RichText/index.tsx index ffe93e9ef..139a41896 100644 --- a/src/components/fields/RichText/index.tsx +++ b/src/components/fields/RichText/index.tsx @@ -24,7 +24,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Rich text editor with predefined HTML text styles.", + description: "HTML edited with a rich text editor.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: withSideDrawerEditor(TableCell), SideDrawerField, diff --git a/src/components/fields/ShortText/index.tsx b/src/components/fields/ShortText/index.tsx index 8a4d212d2..a652162e6 100644 --- a/src/components/fields/ShortText/index.tsx +++ b/src/components/fields/ShortText/index.tsx @@ -24,7 +24,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Small amount of text, such as names and taglines.", + description: "Text displayed on a single line.", TableCell: withBasicCell(BasicCell), TableEditor: TextEditor, SideDrawerField, diff --git a/src/components/fields/SingleSelect/index.tsx b/src/components/fields/SingleSelect/index.tsx index 429b1b15a..5910817ce 100644 --- a/src/components/fields/SingleSelect/index.tsx +++ b/src/components/fields/SingleSelect/index.tsx @@ -30,7 +30,7 @@ export const config: IFieldConfig = { initializable: true, icon: , description: - "Dropdown selector with searchable options and radio button behavior. Optionally allows users to input custom values. Max selection: 1 option.", + "Single value from predefined options. Options are searchable and users can optionally input custom values.", TableCell: withPopoverCell(BasicCell, InlineCell, PopoverCell, { anchorOrigin: { horizontal: "left", vertical: "bottom" }, transparent: true, diff --git a/src/components/fields/Slider/index.tsx b/src/components/fields/Slider/index.tsx index b8592c3e0..611252ba4 100644 --- a/src/components/fields/Slider/index.tsx +++ b/src/components/fields/Slider/index.tsx @@ -25,7 +25,7 @@ export const config: IFieldConfig = { initialValue: 0, initializable: true, icon: , - description: "Slider with adjustable range. Returns a numeric value.", + description: "Numeric value edited with a Slider. Range is configurable.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: withSideDrawerEditor(TableCell), settings: Settings, diff --git a/src/components/fields/Status/index.tsx b/src/components/fields/Status/index.tsx index bf8073b32..399a46d01 100644 --- a/src/components/fields/Status/index.tsx +++ b/src/components/fields/Status/index.tsx @@ -25,8 +25,7 @@ export const config: IFieldConfig = { initialValue: undefined, initializable: true, icon: , - description: - "Status is read only field that displays field values in more visual format", + description: "Displays field value as custom status text. Read-only. ", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, settings: Settings, diff --git a/src/components/fields/SubTable/index.tsx b/src/components/fields/SubTable/index.tsx index e730d8f68..74f6dc1f0 100644 --- a/src/components/fields/SubTable/index.tsx +++ b/src/components/fields/SubTable/index.tsx @@ -20,14 +20,14 @@ const Settings = lazy( ); export const config: IFieldConfig = { type: FieldType.subTable, - name: "SubTable", + name: "Sub-Table", group: "Connection", dataType: "undefined", initialValue: null, icon: , settings: Settings, description: - "Creates a sub-table. Also displays number of rows inside the sub-table. Max sub-table levels: 100.", + "Connects to a sub-table in the current row. Also displays number of rows inside the sub-table. Max sub-table depth: 100.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: NullEditor as any, SideDrawerField, diff --git a/src/components/fields/Url/index.tsx b/src/components/fields/Url/index.tsx index ff996d7dc..d562d73ba 100644 --- a/src/components/fields/Url/index.tsx +++ b/src/components/fields/Url/index.tsx @@ -19,7 +19,7 @@ export const config: IFieldConfig = { initialValue: "", initializable: true, icon: , - description: "Web address.", + description: "Web address. Not validated.", TableCell: withBasicCell(TableCell), TableEditor: TextEditor, SideDrawerField, diff --git a/src/components/fields/User/index.tsx b/src/components/fields/User/index.tsx index 41a32a9f4..2db100d46 100644 --- a/src/components/fields/User/index.tsx +++ b/src/components/fields/User/index.tsx @@ -19,10 +19,11 @@ export const config: IFieldConfig = { name: "User", group: "Metadata", dataType: - "{ displayName: string, email: string, emailVerified: boolean, isAnonymous: boolean, photoURL: string, timestamp: firebase.firestore.Timestamp, uid: string }", + "{ displayName: string; email: string; emailVerified: boolean; isAnonymous: boolean; photoURL: string; timestamp: firebase.firestore.Timestamp; uid: string; }", initialValue: null, icon: , - description: "Displays the _updatedBy field for editing history.", + description: + "Displays user & timestamp. Supports the _createdBy and _updatedBy fields, which are automatically set when a row is created or updated. Read-only.", TableCell: withHeavyCell(BasicCell, TableCell), TableEditor: withSideDrawerEditor(TableCell), SideDrawerField, diff --git a/src/components/fields/index.tsx b/src/components/fields/index.tsx index 431c32d57..cb46b20ad 100644 --- a/src/components/fields/index.tsx +++ b/src/components/fields/index.tsx @@ -11,8 +11,8 @@ import RichText from "./RichText"; import Email from "./Email"; import Phone from "./Phone"; import Url from "./Url"; -import Checkbox from "./Checkbox"; import Number_ from "./Number"; +import Checkbox from "./Checkbox"; import Percentage from "./Percentage"; import Rating from "./Rating"; import Slider from "./Slider"; @@ -49,8 +49,8 @@ export const FIELDS: IFieldConfig[] = [ SingleSelect, MultiSelect, // NUMERIC - Checkbox, Number_, + Checkbox, Percentage, Rating, Slider,