|
|
|
@ -1,11 +1,9 @@
|
|
|
|
|
import type { ColumnType, GridColumnReqType, GridColumnType, ViewType } from 'nocodb-sdk' |
|
|
|
|
import type { Ref } from 'vue' |
|
|
|
|
import { IsPublicInj, computed, inject, ref, useMetas, useNuxtApp, useRoles, useStyleTag, useUndoRedo, watch } from '#imports' |
|
|
|
|
import { IsPublicInj, computed, inject, ref, useMetas, useNuxtApp, useRoles, useUndoRedo, watch } from '#imports' |
|
|
|
|
|
|
|
|
|
const [useProvideGridViewColumn, useGridViewColumn] = useInjectionState( |
|
|
|
|
(view: Ref<(ViewType & { columns?: GridColumnType[] }) | undefined>, statePublic = false) => { |
|
|
|
|
const { css, load: loadCss, unload: unloadCss } = useStyleTag('') |
|
|
|
|
|
|
|
|
|
const { isUIAllowed } = useRoles() |
|
|
|
|
|
|
|
|
|
const { $api } = useNuxtApp() |
|
|
|
@ -15,30 +13,11 @@ const [useProvideGridViewColumn, useGridViewColumn] = useInjectionState(
|
|
|
|
|
const { addUndo, defineViewScope } = useUndoRedo() |
|
|
|
|
|
|
|
|
|
const gridViewCols = ref<Record<string, GridColumnType>>({}) |
|
|
|
|
const resizingCol = ref<string | null>('') |
|
|
|
|
const resizingColWidth = ref('200px') |
|
|
|
|
const resizingColOldWith = ref('200px') |
|
|
|
|
const isPublic = inject(IsPublicInj, ref(statePublic)) |
|
|
|
|
|
|
|
|
|
const columns = computed<ColumnType[]>(() => metas.value?.[view.value?.fk_model_id as string]?.columns || []) |
|
|
|
|
|
|
|
|
|
watch( |
|
|
|
|
[gridViewCols, resizingCol, resizingColWidth], |
|
|
|
|
() => { |
|
|
|
|
let style = '' |
|
|
|
|
for (const c of columns?.value || []) { |
|
|
|
|
const val = gridViewCols?.value?.[c?.id as string]?.width || '200px' |
|
|
|
|
|
|
|
|
|
if (val && c.title !== resizingCol?.value) { |
|
|
|
|
style += `[data-col="${c.id}"]{min-width:${val};max-width:${val};width: ${val};}` |
|
|
|
|
} else { |
|
|
|
|
style += `[data-col="${c.id}"]{min-width:${resizingColWidth?.value};max-width:${resizingColWidth?.value};width: ${resizingColWidth?.value};}` |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
css.value = style |
|
|
|
|
}, |
|
|
|
|
{ deep: true, immediate: true }, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const loadGridViewColumns = async () => { |
|
|
|
|
if (!view.value?.id && !isPublic.value) return |
|
|
|
|
|
|
|
|
@ -52,8 +31,6 @@ const [useProvideGridViewColumn, useGridViewColumn] = useInjectionState(
|
|
|
|
|
}), |
|
|
|
|
{}, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
loadCss() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** when columns changes(create/delete) reload grid columns |
|
|
|
@ -70,7 +47,8 @@ const [useProvideGridViewColumn, useGridViewColumn] = useInjectionState(
|
|
|
|
|
if (!undo) { |
|
|
|
|
const oldProps = Object.keys(props).reduce<Partial<GridColumnReqType>>((o: any, k) => { |
|
|
|
|
if (gridViewCols.value[id][k as keyof GridColumnType]) { |
|
|
|
|
o[k] = gridViewCols.value[id][k as keyof GridColumnType] |
|
|
|
|
if (k === 'width') o[k] = `${resizingColOldWith.value}px` |
|
|
|
|
else o[k] = gridViewCols.value[id][k as keyof GridColumnType] |
|
|
|
|
} |
|
|
|
|
return o |
|
|
|
|
}, {}) |
|
|
|
@ -105,7 +83,7 @@ const [useProvideGridViewColumn, useGridViewColumn] = useInjectionState(
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return { loadGridViewColumns, updateGridViewColumn, resizingCol, resizingColWidth, gridViewCols, loadCss, unloadCss } |
|
|
|
|
return { loadGridViewColumns, updateGridViewColumn, gridViewCols, resizingColOldWith } |
|
|
|
|
}, |
|
|
|
|
'useGridViewColumn', |
|
|
|
|
) |
|
|
|
|