diff --git a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/componentStructure.json b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/componentStructure.json index 5da16d2b50..d35e7cd515 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/componentStructure.json +++ b/packages/builder/src/pages/builder/app/[application]/design/[screenId]/components/[componentId]/new/_components/componentStructure.json @@ -28,6 +28,7 @@ "dataprovider", "repeater", "table", + "spreadsheet", "dynamicfilter", "daterangepicker" ] diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 4f1352f338..c202cab172 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -5279,5 +5279,36 @@ "type": "schema", "suffix": "repeater" } + }, + "spreadsheet": { + "name": "Spreadsheet", + "icon": "ViewGrid", + "settings": [ + { + "key": "table", + "type": "table", + "label": "Table" + }, + { + "type": "filter", + "label": "Filtering", + "key": "filter" + }, + { + "type": "field/sortable", + "label": "Sort Column", + "key": "sortColumn" + }, + { + "type": "select", + "label": "Sort Order", + "key": "sortOrder", + "options": [ + "Ascending", + "Descending" + ], + "defaultValue": "Ascending" + } + ] } } \ No newline at end of file diff --git a/packages/client/src/components/app/index.js b/packages/client/src/components/app/index.js index 70074790ac..30d8ac2b7e 100644 --- a/packages/client/src/components/app/index.js +++ b/packages/client/src/components/app/index.js @@ -41,6 +41,7 @@ export * from "./forms" export * from "./table" export * from "./blocks" export * from "./dynamic-filter" +export * from "./spreadsheet" // Deprecated component left for compatibility in old apps export { default as navigation } from "./deprecated/Navigation.svelte" diff --git a/packages/client/src/components/app/spreadsheet/DateCell.svelte b/packages/client/src/components/app/spreadsheet/DateCell.svelte new file mode 100644 index 0000000000..c385f98a38 --- /dev/null +++ b/packages/client/src/components/app/spreadsheet/DateCell.svelte @@ -0,0 +1,20 @@ + + +
+ {parsedValue} +
+ + diff --git a/packages/client/src/components/app/spreadsheet/OptionsCell.svelte b/packages/client/src/components/app/spreadsheet/OptionsCell.svelte new file mode 100644 index 0000000000..9eccfdb42a --- /dev/null +++ b/packages/client/src/components/app/spreadsheet/OptionsCell.svelte @@ -0,0 +1,39 @@ + + +
+ {value || ""} +
+ + diff --git a/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte b/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte new file mode 100644 index 0000000000..5f6d01fa7a --- /dev/null +++ b/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte @@ -0,0 +1,269 @@ + + +
+
+
+
+ Filter + Group + Sort + Hide fields +
+
Sales Records
+ +
+
+
+ +
+ {#each fields as field, fieldIdx} +
+ + {field} +
+ {/each} + {#each $fetch.rows as row, rowIdx} +
+ {rowIdx + 1} +
+ {#each fields as field, fieldIdx} + {@const cellIdx = rowIdx * fields.length + fieldIdx} +
(hoveredRow = rowIdx)} + on:click={() => (selectedCell = cellIdx)} + > + +
+ {/each} + {/each} +
+
+
+ + diff --git a/packages/client/src/components/app/spreadsheet/TextCell.svelte b/packages/client/src/components/app/spreadsheet/TextCell.svelte new file mode 100644 index 0000000000..c4ea345e8b --- /dev/null +++ b/packages/client/src/components/app/spreadsheet/TextCell.svelte @@ -0,0 +1,16 @@ + + +
+ {value || ""} +
+ + diff --git a/packages/client/src/components/app/spreadsheet/index.js b/packages/client/src/components/app/spreadsheet/index.js new file mode 100644 index 0000000000..223ab462fa --- /dev/null +++ b/packages/client/src/components/app/spreadsheet/index.js @@ -0,0 +1 @@ +export { default as spreadsheet } from "./Spreadsheet.svelte"