From 6de762a4b6f8045f518de3a87b7661c50266b28b Mon Sep 17 00:00:00 2001 From: flisowna Date: Wed, 2 Nov 2022 15:04:57 +0400 Subject: [PATCH] geodata: add select geodata select field menu and missing fields in migrations --- packages/nc-gui/components/dlg/ViewCreate.vue | 56 ++++++++++++++--- packages/nc-gui/components/smartsheet/Map.vue | 61 +++++++++++++++---- .../nc-gui/composables/useMapViewDataStore.ts | 35 ++++++++++- packages/nc-gui/composables/useViewData.ts | 3 - packages/nc-gui/lang/en.json | 3 +- .../src/lib/migrations/v2/nc_021_map_view.ts | 10 ++- 6 files changed, 139 insertions(+), 29 deletions(-) diff --git a/packages/nc-gui/components/dlg/ViewCreate.vue b/packages/nc-gui/components/dlg/ViewCreate.vue index a47a47e936..66329b4e4b 100644 --- a/packages/nc-gui/components/dlg/ViewCreate.vue +++ b/packages/nc-gui/components/dlg/ViewCreate.vue @@ -25,13 +25,14 @@ interface Props { title?: string selectedViewId?: string groupingFieldColumnId?: string + geoDataFieldColumnId?: string views: ViewType[] meta: TableType } interface Emits { (event: 'update:modelValue', value: boolean): void - (event: 'created', value: GridType | KanbanType | GalleryType | FormType): void + (event: 'created', value: GridType | KanbanType | GalleryType | FormType | MapType): void } interface Form { @@ -40,9 +41,10 @@ interface Form { copy_from_id: string | null // for kanban view only fk_grp_col_id: string | null + fk_geo_data_col_id: string | null } -const { views = [], meta, selectedViewId, groupingFieldColumnId, ...props } = defineProps() +const { views = [], meta, selectedViewId, groupingFieldColumnId, geoDataFieldColumnId, ...props } = defineProps() const emits = defineEmits() @@ -61,9 +63,10 @@ const form = reactive
({ type: props.type, copy_from_id: null, fk_grp_col_id: null, + fk_geo_data_col_id: null, }) -const singleSelectFieldOptions = ref([]) +const viewSelectFieldOptions = ref([]) const viewNameRules = [ // name is required @@ -72,7 +75,7 @@ const viewNameRules = [ { validator: (_: unknown, v: string) => new Promise((resolve, reject) => { - views.every((v1) => ((v1 as GridType | KanbanType | GalleryType).alias || v1.title) !== v) + views.every((v1) => ((v1 as GridType | KanbanType | GalleryType | MapType).alias || v1.title) !== v) ? resolve(true) : reject(new Error(`View name should be unique`)) }), @@ -85,6 +88,11 @@ const groupingFieldColumnRules = [ { required: true, message: `${t('general.groupingField')} ${t('general.required')}` }, ] +const geoDataFieldColumnRules = [ + // name is required + { required: true, message: `${t('general.geoDataField')} ${t('general.required')}` }, +] + const typeAlias = computed( () => ({ @@ -114,7 +122,7 @@ function init() { // preset the grouping field column if (props.type === ViewTypes.KANBAN) { - singleSelectFieldOptions.value = meta + viewSelectFieldOptions.value = meta .columns!.filter((el) => el.uidt === UITypes.SingleSelect) .map((field) => { return { @@ -128,7 +136,26 @@ function init() { form.fk_grp_col_id = groupingFieldColumnId } else { // take the first option - form.fk_grp_col_id = singleSelectFieldOptions.value?.[0]?.value as string + form.fk_grp_col_id = viewSelectFieldOptions.value?.[0]?.value as string + } + } + + if (props.type === ViewTypes.MAP) { + viewSelectFieldOptions.value = meta + .columns!.filter((el) => el.uidt === UITypes.GeoData) + .map((field) => { + return { + value: field.id, + label: field.title, + } + }) + + if (geoDataFieldColumnId) { + // take from the one from copy view + form.fk_geo_data_col_id = geoDataFieldColumnId + } else { + // take the first option + form.fk_geo_data_col_id = viewSelectFieldOptions.value?.[0]?.value as string } } @@ -205,12 +232,27 @@ async function onSubmit() { + + +