import type { ColumnType, TableType } from 'nocodb-sdk' import type { Ref } from 'vue' import { useInjectionState } from '#imports' import type { Row } from '~/composables/useViewData' import { useVirtualCell } from '~/composables/useVirtualCell' const [useProvideSmartsheetRowStore, useSmartsheetRowStore] = useInjectionState((meta: Ref, row: Ref) => { // state const state = ref | Record[] | null>>({}) // getters const isNew = computed(() => row.value?.rowMeta?.new) // actions const addLTARRef = async (value: Record, column: ColumnType) => { const { isHm, isMm } = $(useVirtualCell(ref(column))) if (isHm || isMm) { state.value[column.title!] = state.value[column.title!] || [] state.value[column.title!]!.push(value) } else { state.value[column.title!] = value } } // actions const removeLTARRef = async (value: Record, column: ColumnType) => { const { isHm, isMm } = $(useVirtualCell(ref(column))) if (isHm || isMm) { state.value[column.title!]?.splice(state.value[column.title!]?.indexOf(value), 1) } else { state.value[column.title!] = null } } return { row, state, isNew, // todo: use better name addLTARRef, removeLTARRef, } }, 'smartsheet-row-store') export { useProvideSmartsheetRowStore } export function useSmartsheetRowStoreOrThrow() { const smartsheetRowStore = useSmartsheetRowStore() if (smartsheetRowStore == null) throw new Error('Please call `useSmartsheetRowStore` on the appropriate parent component') return smartsheetRowStore }