|
6 | 6 | createSignal, |
7 | 7 | onMount, |
8 | 8 | Show, |
9 | | - untrack, |
10 | 9 | } from "solid-js"; |
11 | 10 |
|
12 | 11 | import UnstyledButton from "@/devtools/components/buttons/UnstyledButton"; |
@@ -103,17 +102,16 @@ export default function AddObjectsButton() { |
103 | 102 | editor = createJSONEditor(editorRef, ""); |
104 | 103 | }); |
105 | 104 | const editorData = createMemo(() => { |
| 105 | + const columns = query.data?.columns; |
106 | 106 | const activeStore = query.data?.activeStore; |
107 | | - if (tableMutationStore.selectedObjects.length > 0) { |
108 | | - return JSON.stringify(tableMutationStore.selectedObjects, null, 2); |
109 | | - } else { |
110 | | - if (activeStore) { |
111 | | - const columns = untrack(() => query.data?.columns || []); |
112 | | - return getSampleValue(columns); |
113 | | - } else { |
114 | | - return ""; |
115 | | - } |
| 107 | + |
| 108 | + if (columns && tableMutationStore.selectedObjects.length > 0) { |
| 109 | + return stringifyData(tableMutationStore.selectedObjects, columns); |
| 110 | + } else if (columns && activeStore) { |
| 111 | + const data = getSampleValue(columns); |
| 112 | + return stringifyData(data, columns); |
116 | 113 | } |
| 114 | + return ""; |
117 | 115 | }); |
118 | 116 | createEffect(() => { |
119 | 117 | editor.setOptions({ value: editorData() }); |
@@ -203,7 +201,22 @@ function getSampleValue(columns: TableColumn[]) { |
203 | 201 | return [column.name, value] as [string, TableColumnValue]; |
204 | 202 | }); |
205 | 203 | const obj = Object.fromEntries(keyValuePairs); |
206 | | - return JSON.stringify([obj], null, 2); |
| 204 | + return [obj]; |
| 205 | +} |
| 206 | + |
| 207 | +function stringifyData(data: TableRow[], columns: TableColumn[]) { |
| 208 | + // sort the data keys according to columns' order |
| 209 | + const objects = data.map((row) => { |
| 210 | + const keyValuePairs = columns.map((col) => [col.name, row[col.name]]); |
| 211 | + return Object.fromEntries(keyValuePairs); |
| 212 | + }); |
| 213 | + |
| 214 | + return JSON.stringify( |
| 215 | + objects, |
| 216 | + // replace undefined with null |
| 217 | + (_, val) => (val === undefined ? null : val), |
| 218 | + 2, |
| 219 | + ); |
207 | 220 | } |
208 | 221 |
|
209 | 222 | // eslint-disable-next-line @typescript-eslint/no-explicit-any |
|
0 commit comments