62
62
v-for =" row in dynamoDbTableData.tableContent"
63
63
@contextmenu.prevent =" showContextMenu($event, row)"
64
64
>
65
- <vscode-data-grid-cell v-for =" (key, index) in Object.keys(row)" :grid-column =" index + 1" >{{
66
- row[key]
67
- }} </vscode-data-grid-cell >
65
+ <vscode-data-grid-cell v-for =" (key, index) in Object.keys(row)" :grid-column =" index + 1" >
66
+ {{ row[key] }}
67
+ </vscode-data-grid-cell >
68
68
</vscode-data-grid-row >
69
- <!-- {{ updateTableSection(dynamoDbTableData) }} -->
70
69
</vscode-data-grid >
70
+
71
+ <!-- Context Menu -->
72
+ <ContextMenu
73
+ v-if =" contextMenuVisible"
74
+ :position =" contextMenuPosition"
75
+ :visible =" contextMenuVisible"
76
+ @copyCell =" handleCopyCell"
77
+ @copyRow =" handleCopyRow"
78
+ @delete =" handleDelete"
79
+ @edit =" handleEdit"
80
+ @close =" contextMenuVisible = false"
81
+ />
71
82
</div >
72
83
</div >
73
84
</template >
74
85
75
86
<script setup lang="ts">
76
87
import { allComponents , provideVSCodeDesignSystem } from ' @vscode/webview-ui-toolkit'
88
+ import { ref , onMounted , onUnmounted } from ' vue'
89
+ import ContextMenu from ' ./contextMenu.vue'
77
90
78
91
provideVSCodeDesignSystem ().register (allComponents )
92
+
93
+ onMounted (() => {
94
+ document .addEventListener (' click' , handleClickOutside )
95
+ })
96
+
97
+ onUnmounted (() => {
98
+ document .removeEventListener (' click' , handleClickOutside )
99
+ })
100
+
101
+ function handleClickOutside(event : MouseEvent ) {
102
+ const contextMenuElement = document .querySelector (' .context-menu' )
103
+ if (contextMenuElement && ! contextMenuElement .contains (event .target as Node )) {
104
+ contextMenuVisible .value = false
105
+ }
106
+ }
79
107
</script >
80
108
81
109
<script lang="ts">
82
110
import { defineComponent } from ' vue'
83
- import { RowData } from ' ../utils/dynamodb'
111
+ import { RowData , TableSchema } from ' ../utils/dynamodb'
84
112
import { DynamoDbTableWebview , DynamoDbTableData } from ' ./tableView'
85
113
import { WebviewClientFactory } from ' ../../webviews/client'
86
114
import { Key } from ' aws-sdk/clients/dynamodb'
87
115
88
116
const client = WebviewClientFactory .create <DynamoDbTableWebview >()
117
+ const contextMenuVisible = ref (false )
118
+ const contextMenuPosition = ref ({ top: 0 , left: 0 })
119
+ let selectedRow = ref <RowData >()
120
+ let tableSchema: TableSchema
121
+ let selectedCell = ' '
122
+
89
123
export default defineComponent ({
90
124
data() {
91
125
return {
@@ -107,7 +141,7 @@ export default defineComponent({
107
141
async created() {
108
142
this .isLoading = true
109
143
this .dynamoDbTableData = await client .init ()
110
- const tableSchema = await client .getTableSchema ()
144
+ tableSchema = await client .getTableSchema ()
111
145
this .partitionKey = tableSchema .partitionKey .name
112
146
this .sortKey = tableSchema .sortKey ?.name ?? ' '
113
147
this .pageKeys = [undefined , this .dynamoDbTableData .lastEvaluatedKey ]
@@ -128,13 +162,6 @@ export default defineComponent({
128
162
},
129
163
},
130
164
methods: {
131
- updateTableSection(dynamoDbTableData : Pick <DynamoDbTableData , ' tableContent' >) {
132
- const basicGrid = document .getElementById (' datagrid' )
133
- if (basicGrid ) {
134
- ;(basicGrid as any ).rowsData = dynamoDbTableData .tableContent
135
- }
136
- },
137
-
138
165
async refreshTable() {
139
166
this .updatePageNumber ()
140
167
this .isLoading = true
@@ -198,9 +225,39 @@ export default defineComponent({
198
225
this .dynamoDbTableData = await client .queryData (queryRequest )
199
226
},
200
227
201
- showContextMenu(event : any , row : any ) {
202
- console .log (event )
203
- console .log (row )
228
+ showContextMenu(event : MouseEvent , row : any ) {
229
+ event .preventDefault ()
230
+ contextMenuPosition .value = { top: event .clientY , left: event .clientX }
231
+ contextMenuVisible .value = true
232
+ selectedRow .value = row
233
+ selectedCell = (event .target as any ).innerHTML
234
+ },
235
+
236
+ handleCopyCell() {
237
+ client .copyCell (selectedCell )
238
+ },
239
+
240
+ handleCopyRow() {
241
+ if (selectedRow .value === undefined ) {
242
+ return
243
+ }
244
+ client .copyRow (selectedRow .value )
245
+ },
246
+
247
+ async handleDelete() {
248
+ if (selectedRow .value === undefined ) {
249
+ return
250
+ }
251
+ const response = await client .deleteItem (selectedRow .value , tableSchema )
252
+ if (response ) {
253
+ this .dynamoDbTableData = response
254
+ this .updatePageNumber ()
255
+ }
256
+ },
257
+
258
+ handleEdit() {
259
+ // Handle edit logic
260
+ console .log (' Edit clicked' )
204
261
},
205
262
},
206
263
})
0 commit comments