From 6dbea600f8cf5cf3c8201929b0b74d52c5d3bf20 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sun, 14 Nov 2021 20:03:03 +0530 Subject: [PATCH] feat: csv import Signed-off-by: Pranav C --- packages/nc-gui/components/base/shareBase.vue | 13 ++ .../components/import/CSVTemplateAdapter.js | 28 +++ .../components/import/TemplateGenerator.js | 12 ++ .../import/dropOrSelectFileModal.vue | 109 ++++++++++++ .../nc-gui/components/import/excelImport.vue | 18 +- packages/nc-gui/components/loader.vue | 40 +++++ .../components/columnMappingModal.vue | 118 ++++++++++++ .../{csvExport.vue => csvExportImport.vue} | 168 ++++++++++++------ .../project/spreadsheet/helpers/uiTypes.js | 5 +- .../project/spreadsheet/public/xcTable.vue | 6 +- .../project/spreadsheet/rowsXcDataTable.vue | 6 +- packages/nc-gui/layouts/default.vue | 4 + packages/nc-gui/store/loader.js | 22 +++ 13 files changed, 484 insertions(+), 65 deletions(-) create mode 100644 packages/nc-gui/components/import/CSVTemplateAdapter.js create mode 100644 packages/nc-gui/components/import/dropOrSelectFileModal.vue create mode 100644 packages/nc-gui/components/loader.vue create mode 100644 packages/nc-gui/components/project/spreadsheet/components/columnMappingModal.vue rename packages/nc-gui/components/project/spreadsheet/components/{csvExport.vue => csvExportImport.vue} (58%) create mode 100644 packages/nc-gui/store/loader.js diff --git a/packages/nc-gui/components/base/shareBase.vue b/packages/nc-gui/components/base/shareBase.vue index e4747b8e76..83cb3444de 100644 --- a/packages/nc-gui/components/base/shareBase.vue +++ b/packages/nc-gui/components/base/shareBase.vue @@ -53,6 +53,9 @@ mdi-open-in-new + + mdi-xml + @@ -120,6 +123,16 @@ export default { }, navigateToSharedBase() { window.open(this.url, '_blank') + }, + generateEmbeddableIframe() { + copyTextToClipboard(``) + this.$toast.success('Copied embeddable html code!').goAway(3000) } } diff --git a/packages/nc-gui/components/import/CSVTemplateAdapter.js b/packages/nc-gui/components/import/CSVTemplateAdapter.js new file mode 100644 index 0000000000..a721f6261d --- /dev/null +++ b/packages/nc-gui/components/import/CSVTemplateAdapter.js @@ -0,0 +1,28 @@ +import Papaparse from 'papaparse' +import TemplateGenerator from '~/components/import/TemplateGenerator' + +export default class CSVTemplateAdapter extends TemplateGenerator { + constructor(name, data) { + super() + this.name = name + this.csv = Papaparse.parse(data, { header: true }) + this.project = { + title: this.name, + tables: [] + } + this.data = {} + } + + parseData() { + this.columns = this.csv.meta.fields + this.data = this.csv.data + } + + getColumns() { + return this.columns + } + + getData() { + return this.data + } +} diff --git a/packages/nc-gui/components/import/TemplateGenerator.js b/packages/nc-gui/components/import/TemplateGenerator.js index 8561541020..1b844134b5 100644 --- a/packages/nc-gui/components/import/TemplateGenerator.js +++ b/packages/nc-gui/components/import/TemplateGenerator.js @@ -3,6 +3,18 @@ export default class TemplateGenerator { throw new Error('\'parse\' method is not implemented') } + parseData() { + throw new Error('\'parseData\' method is not implemented') + } + + parseTemplate() { + throw new Error('\'parseTemplate\' method is not implemented') + } + + getColumns() { + throw new Error('\'getColumns\' method is not implemented') + } + getTemplate() { throw new Error('\'getTemplate\' method is not implemented') } diff --git a/packages/nc-gui/components/import/dropOrSelectFileModal.vue b/packages/nc-gui/components/import/dropOrSelectFileModal.vue new file mode 100644 index 0000000000..a54c73086e --- /dev/null +++ b/packages/nc-gui/components/import/dropOrSelectFileModal.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/packages/nc-gui/components/import/excelImport.vue b/packages/nc-gui/components/import/excelImport.vue index f83d5d3a03..2229564fbb 100644 --- a/packages/nc-gui/components/import/excelImport.vue +++ b/packages/nc-gui/components/import/excelImport.vue @@ -1,10 +1,10 @@