From 62ec4b84fcf7e1ceeb36ace1d45fe7cc184d6694 Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Sun, 26 Jan 2025 01:11:38 +0800 Subject: [PATCH] finish join/mapping --- .../basic/PluginTableConditionRow.vue | 4 +- .../basic/PluginTableConnectRow.vue | 12 +- .../src/components/basic/TableCombobox.vue | 1 + .../basic/conditions/TableCondition.vue | 24 ++- .../my-kintone-plugin/src/css/config.css | 4 +- .../my-kintone-plugin/src/js/conditions.ts | 12 +- vue-project/my-kintone-plugin/src/js/join.ts | 134 ++++++++++------ .../my-kintone-plugin/src/js/mapping.ts | 144 ++++++------------ .../src/types/my-kintone.d.ts | 22 +-- 9 files changed, 178 insertions(+), 179 deletions(-) diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue index 982f3a3..0d68184 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConditionRow.vue @@ -17,7 +17,7 @@ const props = defineProps<{ const savedData = inject('savedData') as SavedData; const cachedData = inject('cachedData') as CachedData; const selectedAppData = inject('selectedAppData') as CachedSelectedAppData; -const table = computed(() => selectedAppData.table.table); +// const table = computed(() => selectedAppData.table.table); const columns = reactive([ { @@ -31,7 +31,7 @@ const columns = reactive([ const vnode = h(TableCombobox, { items: computed(() => getFieldsDropdownItems(selectedAppData.appFields, { - subTableCode: table.value, + subTableCode: '', //table.value, baseFilter: undefined, defaultLabel: 'すべてのレコード', }), diff --git a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue index 5d85f76..7e3c2c8 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/PluginTableConnectRow.vue @@ -6,7 +6,7 @@ import type { CachedData, CachedSelectedAppData, FieldsJoinMapping, WhereCondition } from '@/types/model'; import { defineProps, inject, computed, reactive, render, h } from 'vue'; import { generateId, getFieldObj, getFieldsDropdownItems, search } from '@/js/helper'; -import { getLeftAvailableJoinType, getRightAvailableJoinType, isForceDisable } from '@/js/join'; +import { getLeftAvailableJoinType, getRightAvailableJoinType, isLeftJoinForceDisable, isRightJoinForceDisable, } from '@/js/join'; import { getLeftAvailableMappingType, getRightAvailableMappingType } from '@/js/mapping'; import TableCombobox from './TableCombobox.vue'; import { type FieldType, type OneOf } from '@/js/kintone-rest-api-client'; @@ -23,10 +23,12 @@ const table = computed(() => selectedAppData.table.table); const filterFunc = { connect: { + subTable: table, left: (right?: OneOf | '') => getLeftAvailableJoinType(right), right: (left?: OneOf | '') => getRightAvailableJoinType(left), }, mapping: { + subTable: computed(() => ''), left: (right?: OneOf | '') => getLeftAvailableMappingType(right), right: (left?: OneOf | '') => getRightAvailableMappingType(left), }, @@ -45,11 +47,11 @@ const columns = reactive([ items: computed(() => { const dependFilterField = getField('rightField', rowData.id); return getFieldsDropdownItems(selectedAppData.appFields, { - subTableCode: table.value, + subTableCode: filterFunc[props.type].subTable.value, baseFilter: filterFunc[props.type].left() as FieldType[], filterType: filterFunc[props.type].left(dependFilterField), dependFilterField, - defaultDisableCallback: isForceDisable, + defaultDisableCallback: isLeftJoinForceDisable, }); }), modelValue: computed(() => (search(props.modelValue, rowData.id) as FieldsJoinMapping)?.leftField || ''), @@ -89,7 +91,7 @@ const columns = reactive([ baseFilter: filterFunc[props.type].right() as FieldType[], filterType: filterFunc[props.type].right(dependFilterField), dependFilterField, - defaultDisableCallback: isForceDisable, + defaultDisableCallback: props.type === 'connect' ? isRightJoinForceDisable : undefined, }); }), modelValue: computed(() => (search(props.modelValue, rowData.id) as FieldsJoinMapping)?.rightField || ''), @@ -112,7 +114,7 @@ function getField(key: 'leftField' | 'rightField', id: string) { const dataRow = search(props.modelValue, id) as FieldsJoinMapping | undefined; const fieldCode = dataRow ? dataRow[key] || '' : ''; const targetFieldMap = key === 'leftField' ? selectedAppData.appFields : cachedData.currentAppFields; - const targetTable = key === 'leftField' ? table.value : ''; + const targetTable = key === 'leftField' ? filterFunc[props.type].subTable.value : ''; return getFieldObj(fieldCode, targetFieldMap, targetTable); } diff --git a/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue b/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue index b4bd8f4..bb09780 100644 --- a/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue +++ b/vue-project/my-kintone-plugin/src/components/basic/TableCombobox.vue @@ -1,5 +1,6 @@