Skip to content

Commit 624d959

Browse files
committed
feat: add UI toggle for signature flow enforcement
Add switch control to enable/disable forced signature flow. When enabled, shows parallel/sequential options. When disabled, document creators can choose their preferred signing order. Includes separate loading states for toggle and flow selection. Signed-off-by: Vitor Mattos <[email protected]>
1 parent c442256 commit 624d959

1 file changed

Lines changed: 68 additions & 11 deletions

File tree

src/views/Settings/SignatureFlow.vue

Lines changed: 68 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,26 @@
77
<NcNoteCard v-if="errorMessage" type="error">
88
{{ errorMessage }}
99
</NcNoteCard>
10-
<div class="signature-flow-options">
10+
11+
<div class="signature-flow-toggle">
12+
<NcCheckboxRadioSwitch type="switch"
13+
:checked="enabled"
14+
:disabled="loading"
15+
@update:checked="onToggleChange">
16+
<span>{{ t('libresign', 'Set default signing order') }}</span>
17+
</NcCheckboxRadioSwitch>
18+
<span v-if="loading && !flowChanging" class="toggle-status">
19+
<NcLoadingIcon :size="20" />
20+
</span>
21+
<span v-else-if="saved && !flowChanging" class="toggle-status">
22+
<NcSavingIndicatorIcon :size="20" />
23+
</span>
24+
<span v-else-if="showErrorIcon && !flowChanging" class="toggle-status">
25+
<NcSavingIndicatorIcon :size="20" error />
26+
</span>
27+
</div>
28+
29+
<div v-if="enabled" class="signature-flow-options">
1130
<NcCheckboxRadioSwitch v-for="flow in availableFlows"
1231
:key="flow.value"
1332
type="radio"
@@ -24,9 +43,9 @@
2443
</p>
2544
</div>
2645
<div v-if="selectedFlow?.value === flow.value" class="signature-flow-option-status">
27-
<NcLoadingIcon v-if="loading" :size="20" />
28-
<NcSavingIndicatorIcon v-else-if="saved" :size="20" />
29-
<NcSavingIndicatorIcon v-else-if="showErrorIcon" :size="20" error />
46+
<NcLoadingIcon v-if="loading && flowChanging" :size="20" />
47+
<NcSavingIndicatorIcon v-else-if="saved && flowChanging" :size="20" />
48+
<NcSavingIndicatorIcon v-else-if="showErrorIcon && flowChanging" :size="20" error />
3049
</div>
3150
</div>
3251
</NcCheckboxRadioSwitch>
@@ -58,6 +77,7 @@ export default {
5877
data() {
5978
return {
6079
name: t('libresign', 'Signing order'),
80+
enabled: false,
6181
selectedFlow: null,
6282
availableFlows: [
6383
{
@@ -75,6 +95,7 @@ export default {
7595
errorMessage: '',
7696
saved: false,
7797
showErrorIcon: false,
98+
flowChanging: false,
7899
}
79100
},
80101
async mounted() {
@@ -83,25 +104,40 @@ export default {
83104
methods: {
84105
loadConfig() {
85106
try {
86-
const mode = loadState('libresign', 'signature_flow', 'parallel')
87-
88-
this.selectedFlow = this.availableFlows.find(
89-
flow => flow.value === mode
90-
)
107+
const mode = loadState('libresign', 'signature_flow', null)
91108
92-
if (!this.selectedFlow) {
109+
if (mode === null || mode === '') {
110+
this.enabled = false
93111
this.selectedFlow = this.availableFlows[0]
112+
} else {
113+
this.enabled = true
114+
this.selectedFlow = this.availableFlows.find(
115+
flow => flow.value === mode
116+
)
117+
118+
if (!this.selectedFlow) {
119+
this.selectedFlow = this.availableFlows[0]
120+
}
94121
}
95122
} catch (error) {
96123
console.error('Error loading signature flow configuration:', error)
97124
this.errorMessage = t('libresign', 'Could not load configuration.')
125+
this.enabled = false
98126
this.selectedFlow = this.availableFlows[0]
99127
}
100128
},
129+
onToggleChange(value) {
130+
this.enabled = value
131+
this.errorMessage = ''
132+
this.showErrorIcon = false
133+
this.flowChanging = false
134+
this.saveConfig()
135+
},
101136
onFlowChange(value) {
102137
this.selectedFlow = this.availableFlows.find(flow => flow.value === value)
103138
this.errorMessage = ''
104139
this.showErrorIcon = false
140+
this.flowChanging = true
105141
this.saveConfig()
106142
},
107143
async saveConfig() {
@@ -113,12 +149,14 @@ export default {
113149
try {
114150
const url = generateOcsUrl('apps/libresign/api/v1/admin/signature-flow/config')
115151
await axios.post(url, {
116-
mode: this.selectedFlow?.value ?? 'parallel',
152+
enabled: this.enabled,
153+
mode: this.enabled ? (this.selectedFlow?.value ?? 'parallel') : null,
117154
})
118155
119156
this.saved = true
120157
setTimeout(() => {
121158
this.saved = false
159+
this.flowChanging = false
122160
}, 3000)
123161
} catch (error) {
124162
console.error('Error saving signature flow configuration:', error)
@@ -134,8 +172,27 @@ export default {
134172
</script>
135173
136174
<style lang="scss" scoped>
175+
.signature-flow-toggle {
176+
margin-bottom: 1.5rem;
177+
display: flex;
178+
align-items: center;
179+
gap: 0.5rem;
180+
181+
:deep(.checkbox-radio-switch) {
182+
flex-shrink: 0;
183+
}
184+
185+
.toggle-status {
186+
display: flex;
187+
align-items: center;
188+
flex-shrink: 0;
189+
}
190+
}
191+
137192
.signature-flow-options {
138193
margin-top: 0.5rem;
194+
margin-left: 2rem;
195+
padding-top: 0.5rem;
139196
140197
.signature-flow-option {
141198
display: flex;

0 commit comments

Comments
 (0)