diff --git a/packages/nc-gui-v2/components/virtual-cell/BelongsTo.vue b/packages/nc-gui-v2/components/virtual-cell/BelongsTo.vue index 16b3975800..e18252bc26 100644 --- a/packages/nc-gui-v2/components/virtual-cell/BelongsTo.vue +++ b/packages/nc-gui-v2/components/virtual-cell/BelongsTo.vue @@ -17,7 +17,7 @@ const listItemsDlg = ref(false) const { relatedTableMeta, loadRelatedTableMeta, relatedTablePrimaryValueProp, unlink } = useProvideLTARStore( column as Required, row, - () => reloadTrigger?.trigger() + () => reloadTrigger?.trigger(), ) await loadRelatedTableMeta() @@ -34,11 +34,12 @@ await loadRelatedTableMeta() + diff --git a/packages/nc-gui-v2/components/virtual-cell/HasMany.vue b/packages/nc-gui-v2/components/virtual-cell/HasMany.vue index b093bf0ea7..c352bef99a 100644 --- a/packages/nc-gui-v2/components/virtual-cell/HasMany.vue +++ b/packages/nc-gui-v2/components/virtual-cell/HasMany.vue @@ -19,7 +19,7 @@ const childListDlg = ref(false) const { relatedTableMeta, loadRelatedTableMeta, relatedTablePrimaryValueProp, unlink } = useProvideLTARStore( column as Required, row, - () => reloadTrigger?.trigger() + () => reloadTrigger?.trigger(), ) await loadRelatedTableMeta() @@ -39,11 +39,12 @@ await loadRelatedTableMeta() + diff --git a/packages/nc-gui-v2/components/virtual-cell/ManyToMany.vue b/packages/nc-gui-v2/components/virtual-cell/ManyToMany.vue index dfad9d76fd..5f65e4a2f1 100644 --- a/packages/nc-gui-v2/components/virtual-cell/ManyToMany.vue +++ b/packages/nc-gui-v2/components/virtual-cell/ManyToMany.vue @@ -19,44 +19,42 @@ const childListDlg = ref(false) const { relatedTableMeta, loadRelatedTableMeta, relatedTablePrimaryValueProp, unlink } = useProvideLTARStore( column as Required, row, - () => reloadTrigger?.trigger() + () => reloadTrigger?.trigger(), ) await loadRelatedTableMeta() + diff --git a/packages/nc-gui-v2/composables/columns/useLTARColumn.ts b/packages/nc-gui-v2/composables/columns/useLTARColumn.ts deleted file mode 100644 index 26e62e4503..0000000000 --- a/packages/nc-gui-v2/composables/columns/useLTARColumn.ts +++ /dev/null @@ -1,62 +0,0 @@ -import type { ColumnType, LinkToAnotherRecordType, TableType } from 'nocodb-sdk' -import type { Ref } from 'vue' - -export default (column: Ref) => { - const { $api } = useNuxtApp() - const { metas, getMeta } = useMetas() - - const colOptions = computed(() => column.value.colOptions as LinkToAnotherRecordType) - const relatedTableMeta = computed( - () => colOptions?.value && metas.value?.[colOptions.value?.fk_related_model_id as string], - ) - - const removeChild = () => { - // todo: audit - // await this.$api.dbTableRow.nestedRemove( - // 'noco', - // this.projectName, - // this.meta.title, - // id, - // 'bt', - // this.column.title, - // parent[this.parentPrimaryKey] - // ); - } - - const addChild = () => { - // await this.$api.dbTableRow.nestedAdd('noco', this.projectName, this.meta.title, id, 'bt', this.column.title, pid); - } - - const loadRelatedTableMeta = async () => { - return getMeta(colOptions.value?.fk_related_model_id as string) - } - - // this.data = await this.$api.dbTableRow.nestedChildrenExcludedList( - // 'noco', - // this.projectName, - // this.parentMeta.title, - // this.rowId, - // this.column.colOptions.type, - // this.column.title, - // { - // limit: this.size, - // offset: this.size * (this.page - 1), - // where: this.query && `(${this.primaryCol},like,${this.query})`, - // } - // ); - - // this.data = await this.$api.dbTableRow.nestedList( - // 'noco', - // this.projectName, - // this.parentMeta.title, - // this.rowId, - // this.column.colOptions.type, - // this.column.title, - // { - // limit: this.size, - // offset: this.size * (this.page - 1), - // } - // ); - - return { addChild, removeChild, loadRelatedTableMeta, relatedTableMeta } -} diff --git a/packages/nc-gui-v2/composables/index.ts b/packages/nc-gui-v2/composables/index.ts index bc73072247..5dc112f605 100644 --- a/packages/nc-gui-v2/composables/index.ts +++ b/packages/nc-gui-v2/composables/index.ts @@ -3,12 +3,9 @@ export * from './useGlobal' export * from './useInjectionState' export * from './useUIPermission' export * from './useAttachment' -export * from './useBelongsTo' export * from './useColors' export * from './useColumn' export * from './useGridViewColumnWidth' -export * from './useHasMany' -export * from './useManyToMany' export * from './useMetas' export * from './useProject' export * from './useTable' diff --git a/packages/nc-gui-v2/composables/useBelongsTo.ts b/packages/nc-gui-v2/composables/useBelongsTo.ts deleted file mode 100644 index 52ba9add3e..0000000000 --- a/packages/nc-gui-v2/composables/useBelongsTo.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ColumnType, TableType } from 'nocodb-sdk' -import { useMetas } from './useMetas' - -export function useBelongsTo(column: ColumnType) { - const { metas, getMeta } = useMetas() - const parentMeta = computed(() => { - return metas.value?.[(column.colOptions as any)?.fk_related_model_id as string] - }) - - const loadParentMeta = async () => { - await getMeta((column.colOptions as any)?.fk_related_model_id as string) - } - - const primaryValueProp = computed(() => { - return (parentMeta?.value?.columns?.find((c) => c.pv) || parentMeta?.value?.columns?.[0])?.title - }) - - return { parentMeta, loadParentMeta, primaryValueProp } -} diff --git a/packages/nc-gui-v2/composables/useHasMany.ts b/packages/nc-gui-v2/composables/useHasMany.ts deleted file mode 100644 index 8fe98c82de..0000000000 --- a/packages/nc-gui-v2/composables/useHasMany.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ColumnType, TableType } from 'nocodb-sdk' -import { useMetas } from './useMetas' - -export function useHasMany(column: ColumnType) { - const { metas, getMeta } = useMetas() - const childMeta = computed(() => { - return metas.value?.[(column.colOptions as any)?.fk_related_model_id as string] - }) - - const loadChildMeta = async () => { - await getMeta((column.colOptions as any)?.fk_related_model_id as string) - } - - const primaryValueProp = computed(() => { - return (childMeta?.value?.columns?.find((c) => c.pv) || childMeta?.value?.columns?.[0])?.title - }) - - return { childMeta, loadChildMeta, primaryValueProp } -} diff --git a/packages/nc-gui-v2/composables/useLTARStore.ts b/packages/nc-gui-v2/composables/useLTARStore.ts index 3fc9b46878..f011ea0457 100644 --- a/packages/nc-gui-v2/composables/useLTARStore.ts +++ b/packages/nc-gui-v2/composables/useLTARStore.ts @@ -1,8 +1,6 @@ import type { ColumnType, LinkToAnotherRecordType, PaginatedType, TableType } from 'nocodb-sdk' import type { Ref } from 'vue' -import { useMetas } from './useMetas' -import { useInjectionState } from '#imports' -import { useProject } from '~/composables/useProject' +import { useInjectionState, useMetas, useProject } from '#imports' import { NOCO } from '~/lib' import type { Row } from '~/composables' @@ -11,190 +9,193 @@ interface DataApiResponse { pageInfo: PaginatedType } -const [useProvideLTARStore, useLTARStore] = useInjectionState((column: Required, row?: Ref, reloadData = () => {}) => { - // state - const { metas, getMeta } = useMetas() - const { project } = useProject() - const { $api } = useNuxtApp() - const childrenExcludedList: Ref = ref() - const childrenList: Ref = ref() - const childrenExcludedListPagination = reactive({ - page: 1, - query: '', - size: 10, - }) - const childrenListPagination = reactive({ - page: 1, - query: '', - size: 10, - }) - - const colOptions = column.colOptions as LinkToAnotherRecordType - - // getters - const meta = computed(() => metas?.value?.[column.fk_model_id as string]) - const relatedTableMeta = computed(() => { - return metas.value?.[(column.colOptions as any)?.fk_related_model_id as string] - }) - - const rowId = computed(() => - meta.value.columns - .filter((c: Required) => c.pk) - .map((c: Required) => row?.value?.row?.[c.title]) - .join('___'), - ) - - // actions - const getRelatedTableRowId = (row: Record) => { - return relatedTableMeta.value?.columns - ?.filter((c) => c.pk) - .map((c) => row?.[c.title as string]) - .join('___') - } - - const loadRelatedTableMeta = async () => { - await getMeta(colOptions?.fk_related_model_id as string) - } - - const relatedTablePrimaryValueProp = computed(() => { - return (relatedTableMeta?.value?.columns?.find((c) => c.pv) || relatedTableMeta?.value?.columns?.[0])?.title - }) - const primaryValueProp = computed(() => { - return (meta?.value?.columns?.find((c) => c.pv) || relatedTableMeta?.value?.columns?.[0])?.title - }) - - const loadChildrenExcludedList = async () => { - childrenExcludedList.value = await $api.dbTableRow.nestedChildrenExcludedList( - NOCO, - project.value.id as string, - meta.value.id, - rowId.value, - (column.colOptions as LinkToAnotherRecordType).type as 'mm' | 'hm', - column.title, - // todo: swagger type correction - { - limit: childrenExcludedListPagination.size, - offset: childrenExcludedListPagination.size * (childrenExcludedListPagination.page - 1), - where: - childrenExcludedListPagination.query && - `(${relatedTablePrimaryValueProp.value},like,${childrenExcludedListPagination.query})`, - } as any, - ) - } - - const loadChildrenList = async () => { - childrenList.value = await $api.dbTableRow.nestedList( - NOCO, - project.value.id as string, - meta.value.id, - rowId.value, - colOptions.type as 'mm' | 'hm', - column.title, - // todo: swagger type correction - { - limit: childrenListPagination.size, - offset: childrenListPagination.size * (childrenListPagination.page - 1), - where: childrenListPagination.query && `(${relatedTablePrimaryValueProp.value},like,${childrenListPagination.query})`, - } as any, - ) - } - const unlink = async (row: Record) => { - // const column = meta.columns.find(c => c.id === this.column.colOptions.fk_child_column_id); - // todo: handle if new record - // if (this.isNew) { - // this.$emit('updateCol', this.row, _cn, null); - // this.localState = null; - // this.$emit('update:localState', this.localState); - // return; - // } - // todo: handle bt column if required - // if (column.rqd) { - // this.$toast.info('Unlink is not possible, instead map to another parent.').goAway(3000); - // return; - // } - - // todo: audit - await $api.dbTableRow.nestedRemove( - NOCO, - project.value.title as string, - meta.value.title, - rowId.value, - colOptions.type as 'mm' | 'hm', - column.title, - getRelatedTableRowId(row) as string, - ) - - reloadData?.() - // todo: reload table data and children list - // this.$emit('loadTableData'); - // if (this.isForm && this.$refs.childList) { - // this.$refs.childList.loadData(); - // } - } - - const link = async (row: Record) => { - // todo: handle new record - // const pid = this._extractRowId(parent, this.parentMeta); - // const id = this._extractRowId(this.row, this.meta); - // const _cn = this.meta.columns.find(c => c.id === this.column.colOptions.fk_child_column_id).title; - // - // if (this.isNew) { - // const _rcn = this.parentMeta.columns.find(c => c.id === this.column.colOptions.fk_parent_column_id).title; - // this.localState = parent; - // this.$emit('update:localState', this.localState); - // this.$emit('updateCol', this.row, _cn, parent[_rcn]); - // this.newRecordModal = false; - // return; - // } - await $api.dbTableRow.nestedAdd( - NOCO, - project.value.title as string, - meta.value.title as string, - rowId.value, - colOptions.type as 'mm' | 'hm', - column.title, - getRelatedTableRowId(row) as string, +const [useProvideLTARStore, useLTARStore] = useInjectionState( + (column: Required, row?: Ref, reloadData = () => {}) => { + // state + const { metas, getMeta } = useMetas() + const { project } = useProject() + const { $api } = useNuxtApp() + const childrenExcludedList: Ref = ref() + const childrenList: Ref = ref() + const childrenExcludedListPagination = reactive({ + page: 1, + query: '', + size: 10, + }) + const childrenListPagination = reactive({ + page: 1, + query: '', + size: 10, + }) + + const colOptions = column.colOptions as LinkToAnotherRecordType + + // getters + const meta = computed(() => metas?.value?.[column.fk_model_id as string]) + const relatedTableMeta = computed(() => { + return metas.value?.[(column.colOptions as any)?.fk_related_model_id as string] + }) + + const rowId = computed(() => + meta.value.columns + .filter((c: Required) => c.pk) + .map((c: Required) => row?.value?.row?.[c.title]) + .join('___'), ) - // todo: reload table data and child list - // this.pid = pid; - // - // this.newRecordModal = false; - // - // this.$emit('loadTableData'); - // if (this.isForm && this.$refs.childList) { - // this.$refs.childList.loadData(); - // } - - reloadData?.() - } - - // watchers - watch(childrenExcludedListPagination, async () => { - await loadChildrenExcludedList() - }) - watch(childrenListPagination, async () => { - await loadChildrenList() - }) - - return { - relatedTableMeta, - loadRelatedTableMeta, - relatedTablePrimaryValueProp, - childrenExcludedList, - childrenList, - rowId, - childrenExcludedListPagination, - childrenListPagination, - primaryValueProp, - meta, - unlink, - link, - loadChildrenExcludedList, - loadChildrenList, - row, - } -}, 'ltar-store') + // actions + const getRelatedTableRowId = (row: Record) => { + return relatedTableMeta.value?.columns + ?.filter((c) => c.pk) + .map((c) => row?.[c.title as string]) + .join('___') + } + + const loadRelatedTableMeta = async () => { + await getMeta(colOptions?.fk_related_model_id as string) + } + + const relatedTablePrimaryValueProp = computed(() => { + return (relatedTableMeta?.value?.columns?.find((c) => c.pv) || relatedTableMeta?.value?.columns?.[0])?.title + }) + const primaryValueProp = computed(() => { + return (meta?.value?.columns?.find((c: Required) => c.pv) || relatedTableMeta?.value?.columns?.[0])?.title + }) + + const loadChildrenExcludedList = async () => { + childrenExcludedList.value = await $api.dbTableRow.nestedChildrenExcludedList( + NOCO, + project.value.id as string, + meta.value.id, + rowId.value, + (column.colOptions as LinkToAnotherRecordType).type as 'mm' | 'hm', + column.title, + // todo: swagger type correction + { + limit: childrenExcludedListPagination.size, + offset: childrenExcludedListPagination.size * (childrenExcludedListPagination.page - 1), + where: + childrenExcludedListPagination.query && + `(${relatedTablePrimaryValueProp.value},like,${childrenExcludedListPagination.query})`, + } as any, + ) + } + + const loadChildrenList = async () => { + childrenList.value = await $api.dbTableRow.nestedList( + NOCO, + project.value.id as string, + meta.value.id, + rowId.value, + colOptions.type as 'mm' | 'hm', + column.title, + // todo: swagger type correction + { + limit: childrenListPagination.size, + offset: childrenListPagination.size * (childrenListPagination.page - 1), + where: childrenListPagination.query && `(${relatedTablePrimaryValueProp.value},like,${childrenListPagination.query})`, + } as any, + ) + } + const unlink = async (row: Record) => { + // const column = meta.columns.find(c => c.id === this.column.colOptions.fk_child_column_id); + // todo: handle if new record + // if (this.isNew) { + // this.$emit('updateCol', this.row, _cn, null); + // this.localState = null; + // this.$emit('update:localState', this.localState); + // return; + // } + // todo: handle bt column if required + // if (column.rqd) { + // this.$toast.info('Unlink is not possible, instead map to another parent.').goAway(3000); + // return; + // } + + // todo: audit + await $api.dbTableRow.nestedRemove( + NOCO, + project.value.title as string, + meta.value.title, + rowId.value, + colOptions.type as 'mm' | 'hm', + column.title, + getRelatedTableRowId(row) as string, + ) + + reloadData?.() + // todo: reload table data and children list + // this.$emit('loadTableData'); + // if (this.isForm && this.$refs.childList) { + // this.$refs.childList.loadData(); + // } + } + + const link = async (row: Record) => { + // todo: handle new record + // const pid = this._extractRowId(parent, this.parentMeta); + // const id = this._extractRowId(this.row, this.meta); + // const _cn = this.meta.columns.find(c => c.id === this.column.colOptions.fk_child_column_id).title; + // + // if (this.isNew) { + // const _rcn = this.parentMeta.columns.find(c => c.id === this.column.colOptions.fk_parent_column_id).title; + // this.localState = parent; + // this.$emit('update:localState', this.localState); + // this.$emit('updateCol', this.row, _cn, parent[_rcn]); + // this.newRecordModal = false; + // return; + // } + await $api.dbTableRow.nestedAdd( + NOCO, + project.value.title as string, + meta.value.title as string, + rowId.value, + colOptions.type as 'mm' | 'hm', + column.title, + getRelatedTableRowId(row) as string, + ) + + // todo: reload table data and child list + // this.pid = pid; + // + // this.newRecordModal = false; + // + // this.$emit('loadTableData'); + // if (this.isForm && this.$refs.childList) { + // this.$refs.childList.loadData(); + // } + + reloadData?.() + } + + // watchers + watch(childrenExcludedListPagination, async () => { + await loadChildrenExcludedList() + }) + watch(childrenListPagination, async () => { + await loadChildrenList() + }) + + return { + relatedTableMeta, + loadRelatedTableMeta, + relatedTablePrimaryValueProp, + childrenExcludedList, + childrenList, + rowId, + childrenExcludedListPagination, + childrenListPagination, + primaryValueProp, + meta, + unlink, + link, + loadChildrenExcludedList, + loadChildrenList, + row, + } + }, + 'ltar-store', +) export { useProvideLTARStore } diff --git a/packages/nc-gui-v2/composables/useManyToMany.ts b/packages/nc-gui-v2/composables/useManyToMany.ts deleted file mode 100644 index 8e759e74d3..0000000000 --- a/packages/nc-gui-v2/composables/useManyToMany.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ColumnType, TableType } from 'nocodb-sdk' -import { useMetas } from './useMetas' - -export function useManyToMany(column: ColumnType) { - const { metas, getMeta } = useMetas() - const childMeta = computed(() => { - return metas.value?.[(column.colOptions as any)?.fk_related_model_id as string] - }) - - const loadChildMeta = async () => { - await getMeta((column.colOptions as any)?.fk_related_model_id as string) - } - - const primaryValueProp = computed(() => { - return (childMeta?.value?.columns?.find((c) => c.pv) || childMeta?.value?.columns?.[0])?.title - }) - - return { childMeta, loadChildMeta, primaryValueProp } -}