{{ value }}
-
diff --git a/packages/nc-gui-v2/composables/columns/useLTARColumn.ts b/packages/nc-gui-v2/composables/columns/useLTARColumn.ts
index 4450878126..26e62e4503 100644
--- a/packages/nc-gui-v2/composables/columns/useLTARColumn.ts
+++ b/packages/nc-gui-v2/composables/columns/useLTARColumn.ts
@@ -1,13 +1,14 @@
-import {ColumnType, LinkToAnotherRecordType, TableType} from "nocodb-sdk";
-import {Ref} from "vue";
+import type { ColumnType, LinkToAnotherRecordType, TableType } from 'nocodb-sdk'
+import type { Ref } from 'vue'
-export default (column: Ref
) =>{
-
- const {$api} = useNuxtApp()
- const {metas,getMeta} = useMetas()
+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 relatedTableMeta = computed(
+ () => colOptions?.value && metas.value?.[colOptions.value?.fk_related_model_id as string],
+ )
const removeChild = () => {
// todo: audit
@@ -26,10 +27,9 @@ export default (column: Ref) =>{
// 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)
- }
-
+ const loadRelatedTableMeta = async () => {
+ return getMeta(colOptions.value?.fk_related_model_id as string)
+ }
// this.data = await this.$api.dbTableRow.nestedChildrenExcludedList(
// 'noco',
@@ -45,7 +45,6 @@ export default (column: Ref) =>{
// }
// );
-
// this.data = await this.$api.dbTableRow.nestedList(
// 'noco',
// this.projectName,
@@ -59,5 +58,5 @@ export default (column: Ref) =>{
// }
// );
- return {addChild, removeChild, loadRelatedTableMeta, relatedTableMeta}
+ return { addChild, removeChild, loadRelatedTableMeta, relatedTableMeta }
}
diff --git a/packages/nc-gui-v2/composables/index.ts b/packages/nc-gui-v2/composables/index.ts
index 5194a601ea..bc73072247 100644
--- a/packages/nc-gui-v2/composables/index.ts
+++ b/packages/nc-gui-v2/composables/index.ts
@@ -21,3 +21,4 @@ export * from './useViewSorts'
export * from './useVirtualCell'
export * from './useColumnCreateStore'
export * from './useSmartsheetStore'
+export * from './useLTARStore'
diff --git a/packages/nc-gui-v2/composables/useLTARStore.ts b/packages/nc-gui-v2/composables/useLTARStore.ts
new file mode 100644
index 0000000000..7930188a24
--- /dev/null
+++ b/packages/nc-gui-v2/composables/useLTARStore.ts
@@ -0,0 +1,65 @@
+import type { ColumnType, LinkToAnotherRecordType, TableType } from 'nocodb-sdk'
+import { useMetas } from './useMetas'
+import { useInjectionState } from '#imports'
+import { useProject } from '~/composables/useProject'
+import { NOCO } from '~/lib'
+
+const [useProvideLTARStore, useLTARStore] = useInjectionState((column: ColumnType, row?: Record) => {
+ // state
+ const { metas, getMeta } = useMetas()
+ const { project } = useProject()
+ const { $api } = useNuxtApp()
+
+ // 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) => c.pk)
+ .map((c) => row?.[c.title])
+ .join('___'),
+ )
+
+ // actions
+ const loadRelatedTableMeta = async () => {
+ await getMeta((column.colOptions as any)?.fk_related_model_id as string)
+ }
+
+ const relatedTablePrimaryValueProp = computed(() => {
+ return (relatedTableMeta?.value?.columns?.find((c) => c.pv) || relatedTableMeta?.value?.columns?.[0])?.title
+ })
+
+ const size = 25
+ const query = ''
+ const page = 1
+ const childrenExcludedList = async () => {
+ // this.data =
+ return await $api.dbTableRow.nestedChildrenExcludedList(
+ NOCO,
+ project.value.id as string,
+ meta.value.title,
+ rowId.value,
+ (column.colOptions as LinkToAnotherRecordType).type as 'mm' | 'hm',
+ column.title as string,
+ // todo: swagger type correction
+ {
+ limit: size,
+ offset: size * (page - 1),
+ where: query && `(${relatedTablePrimaryValueProp.value},like,${query})`,
+ } as any,
+ )
+ }
+
+ return { relatedTableMeta, loadRelatedTableMeta, relatedTablePrimaryValueProp, childrenExcludedList, rowId }
+}, 'ltar-store')
+
+export { useProvideLTARStore }
+
+export function useLTARStoreOrThrow() {
+ const ltarStore = useLTARStore()
+ if (ltarStore == null) throw new Error('Please call `useLTARStore` on the appropriate parent component')
+ return ltarStore
+}
diff --git a/packages/nc-gui-v2/context/index.ts b/packages/nc-gui-v2/context/index.ts
index 988084f1c1..b32961942d 100644
--- a/packages/nc-gui-v2/context/index.ts
+++ b/packages/nc-gui-v2/context/index.ts
@@ -6,6 +6,7 @@ import type { TabItem } from '~/composables/useTabs'
export const EditEnabledInj: InjectionKey = Symbol('edit-enabled')
export const ActiveCellInj: InjectionKey[> = Symbol('active-cell')
+export const RowInj: InjectionKey][>> = Symbol('row')
export const ColumnInj: InjectionKey = Symbol('column-injection')
export const MetaInj: InjectionKey> = Symbol('meta-injection')
export const TabMetaInj: InjectionKey> = Symbol('tab-meta-injection')
]