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:
Sidney Alcantara
2020-09-09 13:16:29 +10:00
8 changed files with 84 additions and 95 deletions

View File

@@ -9,13 +9,12 @@ Cloud.
<!-- [![Discord Shield](https://discordapp.com/api/guilds/746329234720686132/widget.png?style=shield)](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!
![Firetable screenshot](https://firetable.io/demo-screenshot.png)
![Firetable screenshot](https://firetable.io/demo.gif)
## Setup instructions
@@ -82,7 +81,7 @@ cd [directory]
firetable start
```
### 3. Manually set up Firetable app
### Manually set up Firetable app
If you dont want to run the Firetable CLI, follow these steps:

View File

@@ -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

View File

@@ -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",

View File

@@ -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")

View File

@@ -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);
}

View File

@@ -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/

View File

@@ -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: {

View File

@@ -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: {