Skip to content

Commit bc73a95

Browse files
committed
fix: add custom blur rendering
1 parent 1a988c3 commit bc73a95

2 files changed

Lines changed: 80 additions & 7 deletions

File tree

adminforth/documentation/docs/tutorial/03-Customization/02-customFieldRendering.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,75 @@ list: '@/renderers/ZeroStylesRichText.vue',
583583
`ZeroStyleRichText` fits well for tasks like email templates preview fields.
584584
585585
586+
### Sensitive data blur
587+
588+
For fields containing sensitive data (like passwords, API keys, tokens, or other confidential values), you can create a renderer that blurs the value by default and reveals it on click.
589+
590+
Create a file `SensitiveBlurCell.vue` in your `custom` directory:
591+
592+
```html title='./custom/SensitiveBlurCell.vue'
593+
<template>
594+
<div class="inline-flex items-center gap-1">
595+
<div
596+
class="overflow-hidden max-w-[200px] max-h-[20px] rounded-default"
597+
:title="show ? $t('Click to hide') : $t('Click to show')"
598+
@click="toggle"
599+
>
600+
<span
601+
class="cursor-pointer select-none transition-all duration-200 text-lightListTableText dark:text-darkListTableText"
602+
:class="{
603+
'blur-[7px] hover:blur-[5px] brightness-50 dark:brightness-150': !show,
604+
}"
605+
>
606+
<ValueRenderer :column="column" :record="record" />
607+
</span>
608+
</div>
609+
</div>
610+
</template>
611+
612+
<script setup lang="ts">
613+
import { ref } from 'vue';
614+
import ValueRenderer from '@/components/ValueRenderer.vue';
615+
import type { AdminForthResourceColumnCommon, AdminForthResourceCommon, AdminUser } from '@/types/Common';
616+
617+
const props = defineProps<{
618+
column: AdminForthResourceColumnCommon;
619+
record: any;
620+
meta: any;
621+
resource: AdminForthResourceCommon;
622+
adminUser: AdminUser;
623+
}>();
624+
625+
const show = ref(false);
626+
627+
function toggle(event: MouseEvent) {
628+
show.value = !show.value;
629+
event.stopPropagation();
630+
}
631+
</script>
632+
```
633+
634+
Now use it in your resource configuration:
635+
636+
```ts title='./resources/anyResource.ts'
637+
columns: [
638+
...
639+
{
640+
name: 'api_key',
641+
//diff-add
642+
components: {
643+
//diff-add
644+
show: '@@/SensitiveBlurCell.vue',
645+
//diff-add
646+
list: '@@/SensitiveBlurCell.vue',
647+
//diff-add
648+
},
649+
...
650+
```
651+
652+
This component works with any field type — it wraps the standard `ValueRenderer` (the same renderer AdminForth would use by default) and adds a click-to-reveal blur effect. The value is blurred until the user clicks on it, and clicking again hides it.
653+
654+
586655
### Custom filter component for square meters
587656
588657

dev-demo/custom/SensitiveBlurCell.vue

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
<template>
22
<div class="inline-flex items-center gap-1">
3-
<span
4-
class="cursor-pointer select-none transition-all duration-200 text-lightListTableText dark:text-darkListTableText"
5-
:class="{
6-
'blur-[7px] hover:blur-[5px] brightness-50 dark:brightness-150': !show,
7-
}"
3+
<div
4+
class="overflow-hidden max-w-[200px] max-h-[20px] rounded-default"
85
:title="show ? $t('Click to hide') : $t('Click to show')"
96
@click="toggle"
107
>
11-
<ValueRenderer :column="column" :record="record" />
12-
</span>
8+
<span
9+
class="cursor-pointer select-none transition-all duration-200 text-lightListTableText dark:text-darkListTableText"
10+
:class="{
11+
'blur-[7px] hover:blur-[5px] brightness-50 dark:brightness-150': !show,
12+
}"
13+
>
14+
<ValueRenderer :column="column" :record="record" />
15+
</span>
16+
</div>
1317
</div>
1418
</template>
1519

0 commit comments

Comments
 (0)