mirror of
https://github.com/rowyio/rowy.git
synced 2025-12-29 00:16:39 +01:00
Merge branch 'master' into develop
* master: Update README.md initialize columns v1.0.1 fix cli firetable build Update ROADMAP.md Update ROADMAP.md Update README.md Update README.md Update README.md fixed v1.0.0 Update package.json Update index.html Update README.md
This commit is contained in:
@@ -9,13 +9,12 @@ Cloud.
|
||||
|
||||
<!-- [](https://discord.gg/Vdshr9E) -->
|
||||
|
||||
### Firetable UI
|
||||
### Firetable UI [(Live Demo)](https://try.firetable.io)
|
||||
|
||||
Supports fields such as images, files, single/multi select, in addition to
|
||||
standard fields. Functions such as row resizing, data import/export are
|
||||
supported. More coming soon, for comprehensive list see ROADMAP.md.
|
||||
standard fields. Functions such as row resizing, csv data import/export and much more!
|
||||
|
||||

|
||||

|
||||
|
||||
## Setup instructions
|
||||
|
||||
@@ -82,7 +81,7 @@ cd [directory]
|
||||
firetable start
|
||||
```
|
||||
|
||||
### 3. Manually set up Firetable app
|
||||
### Manually set up Firetable app
|
||||
|
||||
If you don’t want to run the Firetable CLI, follow these steps:
|
||||
|
||||
|
||||
100
ROADMAP.md
100
ROADMAP.md
@@ -21,18 +21,18 @@
|
||||
- Authenticate ✅
|
||||
- Delete rows ✅
|
||||
|
||||
## MVP
|
||||
## MVP ✅
|
||||
|
||||
### additional fields:
|
||||
|
||||
- single select(string)✅
|
||||
- Multiple select(array of strings)✅
|
||||
- date(Firebase timestamp)✅
|
||||
- time(Firebase timestamp)✅
|
||||
- single select(string) ✅
|
||||
- Multiple select(array of strings) ✅
|
||||
- date(Firebase timestamp) ✅
|
||||
- time(Firebase timestamp) ✅
|
||||
- file (single) ✅
|
||||
- image (single) ✅
|
||||
- single select reference(DocReference)✅
|
||||
- multi select reference(DocReference)✅
|
||||
- single select reference(DocReference) ✅
|
||||
- multi select reference(DocReference) ✅
|
||||
- rating ✅
|
||||
|
||||
### Functionality:
|
||||
@@ -40,12 +40,11 @@
|
||||
- Delete columns✅
|
||||
- Edit columns✅
|
||||
- Fixed column ✅
|
||||
- Hide/Show columns
|
||||
- Hide/Show columns ✅
|
||||
- resizable column ✅
|
||||
- keyboard cell navigation ✅
|
||||
- column / table Create/edit validation
|
||||
- On new table add, refresh view to the table view✅
|
||||
- import csv to table✅
|
||||
- column / table Create/edit ✅
|
||||
- import csv to table ✅
|
||||
|
||||
## V1
|
||||
|
||||
@@ -55,52 +54,55 @@
|
||||
- file (multi) ✅
|
||||
- image (multi) ✅
|
||||
- Percentage(number)
|
||||
- Slider(number)
|
||||
- Table(Document[])✅
|
||||
- Rich Text(html string))✅
|
||||
- Slider(number) ✅
|
||||
- Table(Document[]) ✅
|
||||
- Rich Text(html string)) ✅
|
||||
- Callable buttons ✅
|
||||
|
||||
### Functionality:
|
||||
|
||||
- Sort rows ✅
|
||||
- reorder columns✅
|
||||
- Auto suggest columns based of existing docs
|
||||
- Locked columns ✅
|
||||
- Table view only mode
|
||||
- SubCollection tables ✅
|
||||
- Permissions✅
|
||||
- Duplicate columns
|
||||
- Filter columns:✅
|
||||
- equals to✅
|
||||
- Starts with
|
||||
- contains✅
|
||||
- Export tables to csv✅
|
||||
- Make a toggle switch to allow single/multi
|
||||
- Image
|
||||
- File
|
||||
- Reference
|
||||
- Select
|
||||
- Mark primary/unique columns
|
||||
- Import CSV by matching with primary unique key column
|
||||
|
||||
# V+
|
||||
|
||||
### Additional Fields:
|
||||
|
||||
- currency
|
||||
- count(docs in collection)
|
||||
- index(number)
|
||||
- Duration (ss/hh/mm/dd)
|
||||
- meta fields:
|
||||
- meta fields:✅
|
||||
- createdAt
|
||||
- createdBy
|
||||
- updatedAt
|
||||
- updatedBy
|
||||
|
||||
### Functionality:
|
||||
|
||||
- Sort rows ✅
|
||||
- reorder columns ✅
|
||||
- Auto suggest columns based of existing docs ✅
|
||||
- Locked columns ✅
|
||||
- SubCollection tables ✅
|
||||
- Permissions✅
|
||||
- Duplicate columns
|
||||
- Filter columns:✅
|
||||
- equals to✅
|
||||
- Starts with
|
||||
- contains ✅
|
||||
- Export tables to csv ✅
|
||||
- Dialog View of a row(SideDrawer) ✅
|
||||
- Import CSV by matching with primary unique key column
|
||||
|
||||
# V+
|
||||
|
||||
### Additional Fields:
|
||||
|
||||
- currency
|
||||
- Derivative
|
||||
- count(docs in collection)
|
||||
- index(number)
|
||||
- Duration (ss/hh/mm/dd)
|
||||
|
||||
|
||||
### Functionality:
|
||||
|
||||
- Themes
|
||||
- Table templates
|
||||
- Dialog View of a row
|
||||
- multi auth
|
||||
- Auto detection/suggestions
|
||||
- Table view only mode
|
||||
- Make a toggle switch to allow single/multi
|
||||
- Image
|
||||
- File
|
||||
- Reference
|
||||
- Select
|
||||
- Mark primary/unique columns
|
||||
- Webhooks
|
||||
- Firestore Rules automation
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "firetable",
|
||||
"alias": "firetable-cli",
|
||||
"version": "0.6.0",
|
||||
"version": "1.0.1",
|
||||
"description": "CLI tool to simplify firetable deployment processes",
|
||||
"repository": "https://github.com/AntlerVC/firetable",
|
||||
"author": "Shams Mosowi",
|
||||
|
||||
@@ -76,9 +76,9 @@ const deploy2firebase = async (directory = "firetable/www") => {
|
||||
const response = await inquirer.askFirebaseHostTarget(projectId);
|
||||
hostTarget = response.hostTarget;
|
||||
}
|
||||
await terminal.buildFiretable(directory);
|
||||
await terminal.setFirebaseHostingTarget(projectId, hostTarget, directory);
|
||||
await terminal.deployToFirebaseHosting(projectId, directory);
|
||||
//await terminal.buildFiretable(directory);
|
||||
await terminal.setFirebaseHostingTarget(projectId, hostTarget);
|
||||
await terminal.deployToFirebaseHosting(projectId);
|
||||
config.set("firebaseHostTarget", hostTarget);
|
||||
|
||||
console.log(
|
||||
@@ -120,18 +120,14 @@ program
|
||||
// clone firetable repo and install app dependencies
|
||||
await terminal.cloneFiretable(dir);
|
||||
|
||||
const appDir = dir + "/www";
|
||||
|
||||
// set environment variables
|
||||
await terminal.setFiretableENV(envVariables, appDir);
|
||||
await terminal.setFiretableENV(envVariables, dir);
|
||||
let firetableAppId;
|
||||
|
||||
const existingFiretableAppId = await terminal.getExistingFiretableApp(
|
||||
projectId
|
||||
);
|
||||
|
||||
// TODO: SET FIREBASE PROJECT
|
||||
|
||||
if (existingFiretableAppId) {
|
||||
firetableAppId = existingFiretableAppId;
|
||||
} else {
|
||||
@@ -142,9 +138,9 @@ program
|
||||
firetableAppId
|
||||
);
|
||||
|
||||
await terminal.createFirebaseAppConfigFile(webAppConfig, appDir);
|
||||
// console.log(chalk.green("Environment variables set successfully"));
|
||||
|
||||
await terminal.createFirebaseAppConfigFile(webAppConfig, dir);
|
||||
console.log(chalk.green("Environment variables set successfully"));
|
||||
await terminal.buildFiretable(dir);
|
||||
console.log(
|
||||
chalk.green(
|
||||
chalk.bold("\n\u2705 firetable has been successfully set up at")
|
||||
|
||||
@@ -70,27 +70,23 @@ module.exports.cloneFiretable = (dir = "firetable") =>
|
||||
);
|
||||
});
|
||||
|
||||
module.exports.setFiretableENV = (envVariables, dir = "firetable/www") =>
|
||||
module.exports.setFiretableENV = (envVariables, dir) =>
|
||||
new Promise((resolve) => {
|
||||
const status = new Spinner("Setting environment variables");
|
||||
status.start();
|
||||
const command = `cd ${dir}; node createDotEnv ${envVariables.projectId} ${envVariables.firebaseWebApiKey} ${envVariables.algoliaAppId} ${envVariables.algoliaSearchKey}`;
|
||||
const command = `cd ${dir}/www; node createDotEnv ${envVariables.projectId} ${envVariables.firebaseWebApiKey} ${envVariables.algoliaAppId} ${envVariables.algoliaSearchKey}`;
|
||||
execute(command, function () {
|
||||
status.stop();
|
||||
resolve(true);
|
||||
});
|
||||
});
|
||||
|
||||
module.exports.setFirebaseHostingTarget = (
|
||||
projectId,
|
||||
hostingTarget,
|
||||
dir = "firetable/www"
|
||||
) =>
|
||||
module.exports.setFirebaseHostingTarget = (projectId, hostingTarget) =>
|
||||
new Promise((resolve) => {
|
||||
const status = new Spinner("Setting Firebase Hosting target");
|
||||
status.start();
|
||||
|
||||
const command = `cd ${dir};echo '{}' > .firebaserc; yarn target ${hostingTarget} --project ${projectId}`;
|
||||
const command = `cd www;echo '{}' > .firebaserc; yarn target ${hostingTarget} --project ${projectId}`;
|
||||
execute(command, function () {
|
||||
execute(`firebase use ${projectId}`, function () {
|
||||
status.stop();
|
||||
@@ -99,11 +95,11 @@ module.exports.setFirebaseHostingTarget = (
|
||||
});
|
||||
});
|
||||
|
||||
module.exports.deployToFirebaseHosting = (projectId, dir = "firetable/www") =>
|
||||
module.exports.deployToFirebaseHosting = (projectId) =>
|
||||
new Promise((resolve) => {
|
||||
const status = new Spinner("Deploying to Firebase Hosting");
|
||||
status.start();
|
||||
const command = `cd ${dir}; firebase deploy --project ${projectId} --only hosting`;
|
||||
const command = `cd www; firebase deploy --project ${projectId} --only hosting`;
|
||||
execute(command, function (results) {
|
||||
if (results.includes("Error:")) {
|
||||
throw new Error(results);
|
||||
@@ -145,13 +141,13 @@ module.exports.installFiretableAppPackages = (dir = "firetable/www") =>
|
||||
});
|
||||
});
|
||||
|
||||
module.exports.buildFiretable = (dir = "firetable/www") =>
|
||||
module.exports.buildFiretable = (dir) =>
|
||||
new Promise((resolve) => {
|
||||
const status = new Spinner(
|
||||
"Building firetable. This will take a few minutes"
|
||||
);
|
||||
status.start();
|
||||
execute(`cd ${dir}; yarn build`, function (stdout) {
|
||||
execute(`cd ${dir}/www; yarn build`, function (stdout) {
|
||||
status.stop();
|
||||
resolve(true);
|
||||
});
|
||||
@@ -213,16 +209,17 @@ module.exports.getFiretableWebAppConfig = (webAppId) =>
|
||||
});
|
||||
});
|
||||
|
||||
module.exports.createFirebaseAppConfigFile = (config, dir = "firetable/www") =>
|
||||
module.exports.createFirebaseAppConfigFile = (config, dir) =>
|
||||
new Promise((resolve) => {
|
||||
const status = new Spinner(`Creating firebase config file`);
|
||||
status.start();
|
||||
execute(
|
||||
`cd ${dir}/src/firebase; echo 'export default ${config.replace(
|
||||
`cd ${dir}/www/src/firebase; ls;echo 'export default ${config.replace(
|
||||
/\n/g,
|
||||
""
|
||||
)}' > config.ts`,
|
||||
function (results) {
|
||||
console.log(results);
|
||||
status.stop();
|
||||
resolve(results);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-140647798-6"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-140647798-6');
|
||||
</script>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
@@ -35,19 +43,6 @@
|
||||
/>
|
||||
<meta name="msapplication-TileColor" content="#ED4746" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
<script
|
||||
async
|
||||
src="https://www.googletagmanager.com/gtag/js?id=UA-140647798-6"
|
||||
></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag("js", new Date());
|
||||
|
||||
gtag("config", "UA-140647798-6");
|
||||
</script>
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
|
||||
@@ -40,7 +40,7 @@ const useSettings = () => {
|
||||
//create the firetable collection doc with empty columns
|
||||
db.collection("_FIRETABLE_/settings/schema")
|
||||
.doc(data.collection)
|
||||
.set({ ...data }, { merge: true });
|
||||
.set({ ...data, columns: {} }, { merge: true });
|
||||
};
|
||||
|
||||
const updateTable = (data: {
|
||||
|
||||
@@ -34,8 +34,8 @@ export default function TableView() {
|
||||
tableState &&
|
||||
tableState.tablePath !== tableCollection
|
||||
) {
|
||||
tableActions.table.set(tableCollection, filters);
|
||||
if (filters && filters.length !== 0) {
|
||||
tableActions.table.set(tableCollection, filters);
|
||||
userDoc.dispatch({
|
||||
action: DocActions.update,
|
||||
data: {
|
||||
|
||||
Reference in New Issue
Block a user