onSetFormView(rowData, null) : null} />
{#each visibleRealColumns as col (col.uniqueName)}
{#if inplaceEditorState.cell && rowIndex == inplaceEditorState.cell[0] && col.colIndex == inplaceEditorState.cell[1]}
|
@@ -58,6 +61,7 @@
(rowStatus.insertedFields && rowStatus.insertedFields.has(col.uniqueName))}
isDeleted={rowStatus.status == 'deleted' ||
(rowStatus.deletedFields && rowStatus.deletedFields.has(col.uniqueName))}
+ {onSetFormView}
/>
{/if}
{/each}
diff --git a/packages/web/src/datagrid/RowHeaderCell.svelte b/packages/web/src/datagrid/RowHeaderCell.svelte
index f423bf088..d56fba8e0 100644
--- a/packages/web/src/datagrid/RowHeaderCell.svelte
+++ b/packages/web/src/datagrid/RowHeaderCell.svelte
@@ -1,9 +1,23 @@
- |
+ | (mouseIn = true)}
+ on:mouseleave={() => (mouseIn = false)}
+>
{rowIndex + 1}
+
+ {#if mouseIn && onShowForm}
+
+ {/if}
|
diff --git a/packages/web/src/formview/FormViewFilterColumn.svelte b/packages/web/src/formview/FormViewFilterColumn.svelte
new file mode 100644
index 000000000..d238f5dde
--- /dev/null
+++ b/packages/web/src/formview/FormViewFilterColumn.svelte
@@ -0,0 +1,34 @@
+
+
+{#if column}
+
+
+
+ {
+ formDisplay.removeFilter(column.uniqueName);
+ }}
+ >
+
+
+
+
formDisplay.setFilter(column.uniqueName, value)}
+ />
+
+{/if}
diff --git a/packages/web/src/formview/FormViewFilters.svelte b/packages/web/src/formview/FormViewFilters.svelte
new file mode 100644
index 000000000..37795bcb5
--- /dev/null
+++ b/packages/web/src/formview/FormViewFilters.svelte
@@ -0,0 +1,32 @@
+
+
+{#if baseTable?.primaryKey}
+
+ {#each baseTable.primaryKey.columns as col}
+
+ {/each}
+
+ {#each allFilterNames as uniqueName}
+ x.uniqueName == uniqueName)}
+ {formDisplay}
+ {filters}
+ />
+ {/each}
+
+{/if}
diff --git a/packages/web/src/formview/PrimaryKeyFilterEditor.svelte b/packages/web/src/formview/PrimaryKeyFilterEditor.svelte
new file mode 100644
index 000000000..aaeb67546
--- /dev/null
+++ b/packages/web/src/formview/PrimaryKeyFilterEditor.svelte
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+ x.columnName == column.columnName)} />
+
+ {#if formDisplay.config.formViewKeyRequested}
+
+
+
+ {/if}
+
+
+
+
+
diff --git a/packages/web/src/formview/ShowFormButton.svelte b/packages/web/src/formview/ShowFormButton.svelte
new file mode 100644
index 000000000..6c3fe51ac
--- /dev/null
+++ b/packages/web/src/formview/ShowFormButton.svelte
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/packages/web/src/formview/SqlFormView.svelte b/packages/web/src/formview/SqlFormView.svelte
index afb3b0497..a412809e7 100644
--- a/packages/web/src/formview/SqlFormView.svelte
+++ b/packages/web/src/formview/SqlFormView.svelte
@@ -38,6 +38,7 @@
export let masterLoadedTime;
export let conid;
export let database;
+ export let onReferenceSourceChanged;
let isLoadingData = false;
let isLoadedData = false;
@@ -128,6 +129,8 @@
$: former = new ChangeSetFormer(rowData, changeSetState, dispatchChangeSet, formDisplay);
+ $: if (onReferenceSourceChanged && rowData) onReferenceSourceChanged([rowData], loadedTime);
+
async function handleConfirmSql(sql) {
const resp = await axiosInstance.request({
url: 'database-connections/query-data',
@@ -158,4 +161,12 @@
}
-
+
diff --git a/packages/web/src/formview/openReferenceForm.ts b/packages/web/src/formview/openReferenceForm.ts
index 370ba66f5..fe6a7e878 100644
--- a/packages/web/src/formview/openReferenceForm.ts
+++ b/packages/web/src/formview/openReferenceForm.ts
@@ -29,3 +29,32 @@ export default function openReferenceForm(rowData, column, conid, database) {
}
);
}
+
+export function openPrimaryKeyForm(rowData, baseTable, conid, database) {
+ const formViewKey = _.fromPairs(
+ baseTable.primaryKey.columns.map(({ columnName }) => [columnName, rowData[columnName]])
+ );
+ openNewTab(
+ {
+ title: baseTable.pureName,
+ icon: 'img table',
+ tabComponent: 'TableDataTab',
+ props: {
+ schemaName: baseTable.schemaName,
+ pureName: baseTable.pureName,
+ conid,
+ database,
+ objectTypeField: 'tables',
+ },
+ },
+ {
+ grid: {
+ isFormView: true,
+ formViewKey,
+ },
+ },
+ {
+ forceNewTab: true,
+ }
+ );
+}