From cb5721364f0866055b11e526abd086c9d3064fba Mon Sep 17 00:00:00 2001 From: flisowna Date: Fri, 23 Dec 2022 15:22:15 +0100 Subject: [PATCH] geodata: add a new row on clicking on the plus icon --- packages/nc-gui/components/smartsheet/Map.vue | 20 +++++++++++++++---- .../nc-gui/composables/useMapViewDataStore.ts | 13 +++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/Map.vue b/packages/nc-gui/components/smartsheet/Map.vue index 99d8e1e589..d7be3728b1 100644 --- a/packages/nc-gui/components/smartsheet/Map.vue +++ b/packages/nc-gui/components/smartsheet/Map.vue @@ -3,7 +3,7 @@ import 'leaflet/dist/leaflet.css' import L, { LatLng } from 'leaflet' import 'leaflet.markercluster' import { ViewTypes } from 'nocodb-sdk' -import { IsGalleryInj, IsGridInj, IsMapInj, onMounted, provide, ref } from '#imports' +import { IsGalleryInj, IsGridInj, IsMapInj, OpenNewRecordFormHookInj, onMounted, provide, ref } from '#imports' import type { Row as RowType } from '~/lib' @@ -13,7 +13,8 @@ provide(IsMapInj, ref(true)) const route = useRoute() const router = useRouter() const reloadViewDataHook = inject(ReloadViewDataHookInj) -const { formattedData, loadMapData, loadMapMeta, mapMetaData, geoDataFieldColumn, insertRow } = useMapViewStoreOrThrow() +const reloadViewMetaHook = inject(ReloadViewMetaHookInj) +const { formattedData, loadMapData, loadMapMeta, mapMetaData, geoDataFieldColumn, addEmptyRow } = useMapViewStoreOrThrow() const markersClusterGroupRef = ref() const mapContainerRef = ref() @@ -21,6 +22,7 @@ const myMapRef = ref() const meta = inject(MetaInj, ref()) const view = inject(ActiveViewInj, ref()) +const openNewRecordFormHook = inject(OpenNewRecordFormHookInj, createEventHook()) const expandedFormDlg = ref(false) const expandedFormRow = ref() @@ -53,6 +55,11 @@ const expandForm = (row: RowType, state?: Record) => { } } +openNewRecordFormHook?.on(async () => { + const newRow = await addEmptyRow() + expandForm(newRow) +}) + const expandedFormOnRowIdDlg = computed({ get() { return !!route.query.rowId @@ -137,11 +144,16 @@ onMounted(async () => { // }) }) +reloadViewMetaHook?.on(async () => { + await loadMapMeta() +}) + reloadViewDataHook?.on(async () => { - loadMapData() - loadMapMeta() + await loadMapData() }) +provide(ReloadRowDataHookInj, reloadViewDataHook) + watch([formattedData, mapMetaData, markersClusterGroupRef], () => { if (formattedData.value == null || mapMetaData.value?.fk_view_id == null || markersClusterGroupRef.value == null) { return diff --git a/packages/nc-gui/composables/useMapViewDataStore.ts b/packages/nc-gui/composables/useMapViewDataStore.ts index c58f547a7b..eba5699d6c 100644 --- a/packages/nc-gui/composables/useMapViewDataStore.ts +++ b/packages/nc-gui/composables/useMapViewDataStore.ts @@ -1,4 +1,4 @@ -import { reactive } from 'vue'; +import { reactive } from 'vue' import type { ComputedRef, Ref } from 'vue' import type { ColumnType, MapType, PaginatedType, TableType, ViewType } from 'nocodb-sdk' import { ref, useInjectionState, useMetas } from '#imports' @@ -116,6 +116,16 @@ const [useProvideMapViewStore, useMapViewStore] = useInjectionState( } } + function addEmptyRow(addAfter = formattedData.value.length) { + formattedData.value.splice(addAfter, 0, { + row: {}, + oldRow: {}, + rowMeta: { new: true }, + }) + + return formattedData.value[addAfter] + } + return { formattedData, loadMapData, @@ -123,6 +133,7 @@ const [useProvideMapViewStore, useMapViewStore] = useInjectionState( updateMapMeta, mapMetaData, geoDataFieldColumn, + addEmptyRow, insertRow, geodataToggleState, }