Skip to content

Commit 4bd3a7f

Browse files
committed
refactor(SignatureStamp): integrate policy-based signature_text consumption
- Create useSignatureTextPolicy() composable for desegregating consolidated policy values - Composable loads from policiesStore.signature_text (effective policy value) - Fallback to legacy loadState keys for backward compatibility during transition - Update SignatureStamp.vue to consume via composable instead of direct loadState - Remove helper functions getStringState/getNumberState (now in composable) - All signature_text values (template, sizes, dimensions, render mode) now unified This enables SignatureStamp to track policy-based settings in real-time while maintaining backward compatibility. Once policies are fully active, the fallback path will be unused.
1 parent f4afb5f commit 4bd3a7f

2 files changed

Lines changed: 90 additions & 23 deletions

File tree

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2026 LibreCode coop and LibreCode contributors
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
import { computed } from 'vue'
7+
import { loadState } from '@nextcloud/initial-state'
8+
import { usePoliciesStore } from '../store/policies'
9+
10+
interface SignatureTextValues {
11+
template: string
12+
templateFontSize: number
13+
signatureFontSize: number
14+
signatureWidth: number
15+
signatureHeight: number
16+
renderMode: string
17+
templateError: string
18+
parsed: string
19+
defaultTemplate: string
20+
defaultTemplateFontSize: number
21+
defaultSignatureFontSize: number
22+
defaultSignatureWidth: number
23+
defaultSignatureHeight: number
24+
}
25+
26+
export function useSignatureTextPolicy(): { values: ReturnType<typeof computed<SignatureTextValues>> } {
27+
const policiesStore = usePoliciesStore()
28+
29+
const values = computed<SignatureTextValues>(() => {
30+
const signatureTextPolicy = policiesStore.policies.signature_text
31+
32+
// If policy exists, use its effective value
33+
if (signatureTextPolicy?.value) {
34+
const value = typeof signatureTextPolicy.value === 'string'
35+
? JSON.parse(signatureTextPolicy.value)
36+
: signatureTextPolicy.value
37+
38+
return {
39+
template: String(value.template ?? ''),
40+
templateFontSize: Number(value.template_font_size ?? 9.0),
41+
signatureFontSize: Number(value.signature_font_size ?? 9.0),
42+
signatureWidth: Number(value.signature_width ?? 90.0),
43+
signatureHeight: Number(value.signature_height ?? 60.0),
44+
renderMode: String(value.render_mode ?? 'default'),
45+
templateError: loadState<string>('libresign', 'signature_text_template_error', ''),
46+
parsed: loadState<string>('libresign', 'signature_text_parsed', ''),
47+
defaultTemplate: loadState<string>('libresign', 'default_signature_text_template', ''),
48+
defaultTemplateFontSize: loadState<number>('libresign', 'default_template_font_size', 9.0),
49+
defaultSignatureFontSize: loadState<number>('libresign', 'default_signature_font_size', 9.0),
50+
defaultSignatureWidth: loadState<number>('libresign', 'default_signature_width', 90.0),
51+
defaultSignatureHeight: loadState<number>('libresign', 'default_signature_height', 60.0),
52+
}
53+
}
54+
55+
// Fallback to legacy loadState keys (for backward compatibility during transition)
56+
return {
57+
template: loadState<string>('libresign', 'signature_text_template', ''),
58+
templateFontSize: loadState<number>('libresign', 'template_font_size', 9.0),
59+
signatureFontSize: loadState<number>('libresign', 'signature_font_size', 9.0),
60+
signatureWidth: loadState<number>('libresign', 'signature_width', 90.0),
61+
signatureHeight: loadState<number>('libresign', 'signature_height', 60.0),
62+
renderMode: loadState<string>('libresign', 'signature_render_mode', 'default'),
63+
templateError: loadState<string>('libresign', 'signature_text_template_error', ''),
64+
parsed: loadState<string>('libresign', 'signature_text_parsed', ''),
65+
defaultTemplate: loadState<string>('libresign', 'default_signature_text_template', ''),
66+
defaultTemplateFontSize: loadState<number>('libresign', 'default_template_font_size', 9.0),
67+
defaultSignatureFontSize: loadState<number>('libresign', 'default_signature_font_size', 9.0),
68+
defaultSignatureWidth: loadState<number>('libresign', 'default_signature_width', 90.0),
69+
defaultSignatureHeight: loadState<number>('libresign', 'default_signature_height', 60.0),
70+
}
71+
})
72+
73+
return { values }
74+
}

src/views/Settings/SignatureStamp.vue

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -356,23 +356,16 @@ import NcTextField from '@nextcloud/vue/components/NcTextField'
356356
import { useIsDarkTheme } from '@nextcloud/vue/composables/useIsDarkTheme'
357357
358358
import CodeEditor from '../../components/CodeEditor.vue'
359+
import { useSignatureTextPolicy } from '../../composables/useSignatureTextPolicy'
359360
360361
defineOptions({
361362
name: 'SignatureStamp',
362363
})
363364
364365
type RenderMode = 'DESCRIPTION_ONLY' | 'GRAPHIC_AND_DESCRIPTION' | 'SIGNAME_AND_DESCRIPTION' | 'GRAPHIC_ONLY'
365366
366-
function getStringState(key: string, fallback = '') {
367-
return loadState<string>('libresign', key, fallback)
368-
}
369-
370-
function getNumberState(key: string, fallback = 0) {
371-
return loadState<number>('libresign', key, fallback)
372-
}
373-
374367
const isDarkTheme = useIsDarkTheme()
375-
const templateError = loadState<string>('libresign', 'signature_text_template_error', '')
368+
const { values: signatureTextValues } = useSignatureTextPolicy()
376369
const initialBackgroundType = loadState<string>('libresign', 'signature_background_type', '')
377370
378371
const input = ref<HTMLInputElement | null>(null)
@@ -387,23 +380,23 @@ const errorMessageBackground = ref('')
387380
const backgroundUrl = ref(backgroundType.value !== 'deleted'
388381
? generateOcsUrl('/apps/libresign/api/v1/admin/signature-background')
389382
: '')
390-
const defaultSignatureTextTemplate = ref(getStringState('default_signature_text_template'))
391-
const defaultTemplateFontSize = ref<number>(getNumberState('default_template_font_size'))
392-
const defaultSignatureFontSize = ref<number>(getNumberState('default_signature_font_size'))
393-
const defaultSignatureWidth = ref<number>(getNumberState('default_signature_width'))
394-
const defaultSignatureHeight = ref<number>(getNumberState('default_signature_height'))
395-
const signatureTextTemplate = ref(getStringState('signature_text_template'))
396-
const signatureWidth = ref<number>(getNumberState('signature_width'))
397-
const signatureHeight = ref<number>(getNumberState('signature_height'))
398-
const signatureFontSize = ref<number>(getNumberState('signature_font_size'))
399-
const templateFontSize = ref<number>(getNumberState('template_font_size'))
383+
const defaultSignatureTextTemplate = ref(signatureTextValues.value.defaultTemplate)
384+
const defaultTemplateFontSize = ref<number>(signatureTextValues.value.defaultTemplateFontSize)
385+
const defaultSignatureFontSize = ref<number>(signatureTextValues.value.defaultSignatureFontSize)
386+
const defaultSignatureWidth = ref<number>(signatureTextValues.value.defaultSignatureWidth)
387+
const defaultSignatureHeight = ref<number>(signatureTextValues.value.defaultSignatureHeight)
388+
const signatureTextTemplate = ref(signatureTextValues.value.template)
389+
const signatureWidth = ref<number>(signatureTextValues.value.signatureWidth)
390+
const signatureHeight = ref<number>(signatureTextValues.value.signatureHeight)
391+
const signatureFontSize = ref<number>(signatureTextValues.value.signatureFontSize)
392+
const templateFontSize = ref<number>(signatureTextValues.value.templateFontSize)
400393
const isSignatureImageLoaded = ref(false)
401394
const templateSaved = ref(true)
402-
const zoomLevel = ref<number>(getNumberState('signature_preview_zoom_level', 100))
403-
const renderMode = ref<RenderMode>(loadState<RenderMode>('libresign', 'signature_render_mode', 'GRAPHIC_AND_DESCRIPTION'))
395+
const zoomLevel = ref<number>(loadState<number>('libresign', 'signature_preview_zoom_level', 100))
396+
const renderMode = ref<RenderMode>(signatureTextValues.value.renderMode as RenderMode)
404397
const dislaySuccessTemplate = ref(false)
405-
const errorMessageTemplate = ref<string[]>(templateError ? [templateError] : [])
406-
const parsed = ref(loadState<string>('libresign', 'signature_text_parsed', ''))
398+
const errorMessageTemplate = ref<string[]>(signatureTextValues.value.templateError ? [signatureTextValues.value.templateError] : [])
399+
const parsed = ref(signatureTextValues.value.parsed)
407400
const isRTLDirection = isRTL()
408401
const availableVariables = ref<Record<string, string>>(loadState<Record<string, string>>('libresign', 'signature_available_variables', {}))
409402
const isOverflowing = ref(false)

0 commit comments

Comments
 (0)