22 <div class =" inline-flex items-center gap-1" >
33 <Tooltip v-if =" tooltipText " >
44 <div
5- class =" overflow-hidden max-h-[20px] rounded-default"
6- :class =" { 'shrink-0 w-[90px]': compact }"
5+ class =" rounded-default me-2"
6+ :class =" {
7+ 'overflow-hidden max-h-[20px]': !isMultiline,
8+ 'shrink-0 w-[90px]': compact,
9+ }"
710 @click =" toggle"
811 >
912 <span
1013 class =" cursor-pointer select-none transition-all duration-200 text-lightListTableText dark:text-darkListTableText"
1114 :class =" {
1215 'block truncate': compact,
16+ 'block': isMultiline,
1317 'blur-[7px] hover:blur-[5px] brightness-50 dark:brightness-150': !show,
18+ 'pointer-events-none': isMultiline && !show,
1419 }"
20+ @click =" onValueClick"
1521 >
1622 <template v-if =" compact " >{{ visualValue }}</template >
1723 <ValueRenderer v-else :column =" column " :record =" record " />
2329 </Tooltip >
2430 <div
2531 v-else
26- class =" overflow-hidden max-h-[20px] rounded-default"
27- :class =" { 'shrink-0 w-[90px]': compact }"
32+ class =" rounded-default me-2"
33+ :class =" {
34+ 'overflow-hidden max-h-[20px]': !isMultiline,
35+ 'shrink-0 w-[90px]': compact,
36+ }"
2837 @click =" toggle"
2938 >
3039 <span
3140 class =" cursor-pointer select-none transition-all duration-200 text-lightListTableText dark:text-darkListTableText"
3241 :class =" {
3342 'block truncate': compact,
43+ 'block': isMultiline,
3444 'blur-[7px] hover:blur-[5px] brightness-50 dark:brightness-150': !show,
45+ 'pointer-events-none': isMultiline && !show,
3546 }"
47+ @click =" onValueClick"
3648 >
3749 <template v-if =" compact " >{{ visualValue }}</template >
3850 <ValueRenderer v-else :column =" column " :record =" record " />
@@ -83,16 +95,25 @@ const { alert } = useAdminforth();
8395
8496const show = ref (false );
8597
86- const rawValue = computed (() => props .record [props .column .name ]);
98+ const rawValue = computed (() => {
99+ const value = props .record [props .column .name ];
100+ if (value === null || value === undefined ) {
101+ return ' ' ;
102+ }
103+ return typeof value === ' object' ? JSON .stringify (value ) : String (value );
104+ });
87105
88106const compact = computed (() => props .meta ?.compact );
89107const showCopy = computed (() => props .meta ?.copy );
90- const eyeButton = computed (() => props .meta ?.eyeButton );
108+
109+ const isMultiline = computed (
110+ () => props .column .type === ' json' && ! props .column .isArray ?.enabled && ! compact .value
111+ );
112+ const eyeButton = computed (() => props .meta ?.eyeButton ?? isMultiline .value );
91113const visualValue = computed (() => {
92114 const val = rawValue .value ;
93- if (val && String (val ).length > 8 ) {
94- const s = String (val );
95- return ` ${s .slice (0 , 4 )}...${s .slice (- 4 )} ` ;
115+ if (val .length > 8 ) {
116+ return ` ${val .slice (0 , 4 )}...${val .slice (- 4 )} ` ;
96117 }
97118 return val ;
98119});
@@ -112,6 +133,12 @@ function toggle(event: MouseEvent) {
112133 event .stopPropagation ();
113134}
114135
136+ function onValueClick(event : MouseEvent ) {
137+ if (isMultiline .value && show .value && eyeButton .value ) {
138+ event .stopPropagation ();
139+ }
140+ }
141+
115142function copyToCB() {
116143 navigator .clipboard .writeText (rawValue .value );
117144 alert ({
0 commit comments