|
49 | 49 | @template-reset="onTemplateReset" /> |
50 | 50 | </NcSettingsSection> |
51 | 51 | </template> |
52 | | -<script> |
| 52 | +<script setup lang="ts"> |
53 | 53 | import axios from '@nextcloud/axios' |
54 | 54 | import { loadState } from '@nextcloud/initial-state' |
55 | 55 | import { generateOcsUrl } from '@nextcloud/router' |
56 | 56 | import { t } from '@nextcloud/l10n' |
| 57 | +import { onMounted, ref } from 'vue' |
57 | 58 |
|
58 | 59 | import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch' |
59 | 60 | import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection' |
60 | 61 |
|
61 | 62 | import FooterTemplateEditor from '../../components/FooterTemplateEditor.vue' |
62 | 63 |
|
63 | | -export default { |
64 | | - name: 'Validation', |
65 | | - components: { |
66 | | - NcSettingsSection, |
67 | | - FooterTemplateEditor, |
68 | | - NcCheckboxRadioSwitch, |
69 | | - }, |
70 | | - data() { |
71 | | - const isDefaultFooterTemplate = loadState('libresign', 'footer_template_is_default', true) |
72 | | - return { |
73 | | - paternValidadeUrl: 'https://validador.librecode.coop/', |
74 | | - makeValidationUrlPrivate: false, |
75 | | - url: null, |
76 | | - addFooter: true, |
77 | | - writeQrcodeOnFooter: true, |
78 | | - isDefaultFooterTemplate, |
79 | | - customizeFooter: !isDefaultFooterTemplate, |
80 | | - } |
81 | | - }, |
82 | | - created() { |
83 | | - this.getData() |
84 | | - }, |
85 | | - methods: { |
86 | | - t, |
87 | | - validationUrlEnter() { |
88 | | - this.$refs.urlInput.blur() |
89 | | - }, |
90 | | - async getData() { |
91 | | - this.getMakeValidationUrlPrivate() |
92 | | - this.getAddFooterData() |
93 | | - this.getWriteQrcodeOnFooter() |
94 | | - this.getValidationUrlData() |
95 | | - this.getCustomizeFooterData() |
96 | | - }, |
97 | | - async getMakeValidationUrlPrivate() { |
98 | | - const response = await axios.get( |
99 | | - generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/make_validation_url_private'), |
100 | | - ) |
101 | | - const value = response?.data?.ocs?.data.data |
102 | | - this.makeValidationUrlPrivate = ['true', true, '1', 1].includes(value) |
103 | | - }, |
104 | | - async getAddFooterData() { |
105 | | - const response = await axios.get( |
106 | | - generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/add_footer'), |
107 | | - ) |
108 | | - const value = response?.data?.ocs?.data.data |
109 | | - this.addFooter = ['true', true, '1', 1].includes(value) |
110 | | - }, |
111 | | - async getWriteQrcodeOnFooter() { |
112 | | - const response = await axios.get( |
113 | | - generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/write_qrcode_on_footer'), |
114 | | - ) |
115 | | - const value = response?.data?.ocs?.data.data |
116 | | - this.writeQrcodeOnFooter = ['true', true, '1', 1].includes(value) |
117 | | - }, |
118 | | - async getValidationUrlData() { |
119 | | - const response = await axios.get( |
120 | | - generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/validation_site'), |
121 | | - ) |
122 | | - this.placeHolderValidationUrl(response.data.ocs.data.data) |
123 | | - }, |
124 | | - async getCustomizeFooterData() { |
125 | | - const response = await axios.get( |
126 | | - generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/footer_template_is_default'), |
127 | | - ) |
128 | | - const value = response?.data?.ocs?.data.data |
129 | | - this.isDefaultFooterTemplate = ['true', true, '1', 1].includes(value) |
130 | | - this.customizeFooter = !this.isDefaultFooterTemplate |
131 | | - }, |
132 | | - async onTemplateReset() { |
133 | | - this.customizeFooter = false |
134 | | - }, |
135 | | - saveValidationiUrl() { |
136 | | - OCP.AppConfig.setValue('libresign', 'validation_site', this.$refs.urlInput.value.trim()) |
137 | | - }, |
138 | | - async toggleSetting(setting, value) { |
139 | | - try { |
140 | | - await OCP.AppConfig.setValue('libresign', setting, value ? '1' : '0') |
141 | | - } catch (error) { |
142 | | - console.error('Error toggling setting:', setting, error) |
143 | | - } |
144 | | - }, |
145 | | - async onMakeValidationUrlPrivateChange(value) { |
146 | | - await this.toggleSetting('make_validation_url_private', value) |
147 | | - }, |
148 | | - async onAddFooterChange(value) { |
149 | | - await this.toggleSetting('add_footer', value) |
150 | | - }, |
151 | | - async onWriteQrcodeOnFooterChange(value) { |
152 | | - await this.toggleSetting('write_qrcode_on_footer', value) |
153 | | - }, |
154 | | - async onCustomizeFooterChange(value) { |
155 | | - await this.toggleSetting('footer_template_is_default', !value) |
156 | | - this.isDefaultFooterTemplate = !value |
157 | | - if (!value && this.$refs.footerTemplateEditor) { |
158 | | - this.$refs.footerTemplateEditor.resetFooterTemplate() |
159 | | - } |
160 | | - }, |
161 | | - placeHolderValidationUrl(data) { |
162 | | - if (data !== '') { |
163 | | - this.url = data |
164 | | - } else { |
165 | | - this.url = this.paternValidadeUrl |
| 64 | +type SettingsResponse = { |
| 65 | + data?: { |
| 66 | + ocs?: { |
| 67 | + data?: { |
| 68 | + data?: string | boolean | number |
166 | 69 | } |
167 | | - }, |
168 | | - fillValidationUrl() { |
169 | | - if (this.url !== this.paternValidadeUrl) { |
170 | | - if (this.$refs.urlInput.value.length === 0) { |
171 | | - this.$refs.urlInput.value = this.url |
172 | | - } |
173 | | - } |
174 | | - }, |
175 | | - }, |
| 70 | + } |
| 71 | + } |
| 72 | +} |
| 73 | +
|
| 74 | +type OcpGlobal = { |
| 75 | + AppConfig: { |
| 76 | + setValue: (app: string, key: string, value: string) => Promise<void> | void |
| 77 | + } |
| 78 | +} |
| 79 | +
|
| 80 | +type FooterTemplateEditorInstance = { |
| 81 | + resetFooterTemplate: () => Promise<void> | void |
| 82 | +} |
| 83 | +
|
| 84 | +defineOptions({ |
| 85 | + name: 'Validation', |
| 86 | +}) |
| 87 | +
|
| 88 | +const isDefaultFooterTemplateState = loadState('libresign', 'footer_template_is_default', true) |
| 89 | +
|
| 90 | +const paternValidadeUrl = ref('https://validador.librecode.coop/') |
| 91 | +const makeValidationUrlPrivate = ref(false) |
| 92 | +const url = ref<string | null>(null) |
| 93 | +const addFooter = ref(true) |
| 94 | +const writeQrcodeOnFooter = ref(true) |
| 95 | +const isDefaultFooterTemplate = ref(isDefaultFooterTemplateState) |
| 96 | +const customizeFooter = ref(!isDefaultFooterTemplateState) |
| 97 | +
|
| 98 | +const urlInput = ref<HTMLInputElement | null>(null) |
| 99 | +const footerTemplateEditor = ref<FooterTemplateEditorInstance | null>(null) |
| 100 | +
|
| 101 | +function parseBooleanSetting(value: string | boolean | number | undefined) { |
| 102 | + return ['true', true, '1', 1].includes(value) |
| 103 | +} |
| 104 | +
|
| 105 | +function getOcp() { |
| 106 | + return (globalThis as typeof globalThis & { OCP: OcpGlobal }).OCP |
| 107 | +} |
| 108 | +
|
| 109 | +function validationUrlEnter() { |
| 110 | + urlInput.value?.blur() |
| 111 | +} |
| 112 | +
|
| 113 | +async function getData() { |
| 114 | + await Promise.all([ |
| 115 | + getMakeValidationUrlPrivate(), |
| 116 | + getAddFooterData(), |
| 117 | + getWriteQrcodeOnFooter(), |
| 118 | + getValidationUrlData(), |
| 119 | + getCustomizeFooterData(), |
| 120 | + ]) |
| 121 | +} |
| 122 | +
|
| 123 | +async function getMakeValidationUrlPrivate() { |
| 124 | + const response = await axios.get(generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/make_validation_url_private')) as SettingsResponse |
| 125 | + makeValidationUrlPrivate.value = parseBooleanSetting(response.data?.ocs?.data?.data) |
| 126 | +} |
| 127 | +
|
| 128 | +async function getAddFooterData() { |
| 129 | + const response = await axios.get(generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/add_footer')) as SettingsResponse |
| 130 | + addFooter.value = parseBooleanSetting(response.data?.ocs?.data?.data) |
176 | 131 | } |
| 132 | +
|
| 133 | +async function getWriteQrcodeOnFooter() { |
| 134 | + const response = await axios.get(generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/write_qrcode_on_footer')) as SettingsResponse |
| 135 | + writeQrcodeOnFooter.value = parseBooleanSetting(response.data?.ocs?.data?.data) |
| 136 | +} |
| 137 | +
|
| 138 | +async function getValidationUrlData() { |
| 139 | + const response = await axios.get(generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/validation_site')) as SettingsResponse |
| 140 | + placeHolderValidationUrl(String(response.data?.ocs?.data?.data ?? '')) |
| 141 | +} |
| 142 | +
|
| 143 | +async function getCustomizeFooterData() { |
| 144 | + const response = await axios.get(generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/libresign/footer_template_is_default')) as SettingsResponse |
| 145 | + isDefaultFooterTemplate.value = parseBooleanSetting(response.data?.ocs?.data?.data) |
| 146 | + customizeFooter.value = !isDefaultFooterTemplate.value |
| 147 | +} |
| 148 | +
|
| 149 | +function onTemplateReset() { |
| 150 | + customizeFooter.value = false |
| 151 | +} |
| 152 | +
|
| 153 | +function saveValidationiUrl() { |
| 154 | + getOcp().AppConfig.setValue('libresign', 'validation_site', urlInput.value?.value.trim() || '') |
| 155 | +} |
| 156 | +
|
| 157 | +async function toggleSetting(setting: string, value: boolean) { |
| 158 | + try { |
| 159 | + await getOcp().AppConfig.setValue('libresign', setting, value ? '1' : '0') |
| 160 | + } catch (error) { |
| 161 | + console.error('Error toggling setting:', setting, error) |
| 162 | + } |
| 163 | +} |
| 164 | +
|
| 165 | +async function onMakeValidationUrlPrivateChange(value: boolean) { |
| 166 | + await toggleSetting('make_validation_url_private', value) |
| 167 | +} |
| 168 | +
|
| 169 | +async function onAddFooterChange(value: boolean) { |
| 170 | + await toggleSetting('add_footer', value) |
| 171 | +} |
| 172 | +
|
| 173 | +async function onWriteQrcodeOnFooterChange(value: boolean) { |
| 174 | + await toggleSetting('write_qrcode_on_footer', value) |
| 175 | +} |
| 176 | +
|
| 177 | +async function onCustomizeFooterChange(value: boolean) { |
| 178 | + await toggleSetting('footer_template_is_default', !value) |
| 179 | + isDefaultFooterTemplate.value = !value |
| 180 | + if (!value) { |
| 181 | + footerTemplateEditor.value?.resetFooterTemplate() |
| 182 | + } |
| 183 | +} |
| 184 | +
|
| 185 | +function placeHolderValidationUrl(data: string) { |
| 186 | + url.value = data !== '' ? data : paternValidadeUrl.value |
| 187 | +} |
| 188 | +
|
| 189 | +function fillValidationUrl() { |
| 190 | + if (url.value !== paternValidadeUrl.value && urlInput.value && urlInput.value.value.length === 0) { |
| 191 | + urlInput.value.value = url.value || '' |
| 192 | + } |
| 193 | +} |
| 194 | +
|
| 195 | +onMounted(() => { |
| 196 | + void getData() |
| 197 | +}) |
| 198 | +
|
| 199 | +defineExpose({ |
| 200 | + t, |
| 201 | + paternValidadeUrl, |
| 202 | + makeValidationUrlPrivate, |
| 203 | + url, |
| 204 | + addFooter, |
| 205 | + writeQrcodeOnFooter, |
| 206 | + isDefaultFooterTemplate, |
| 207 | + customizeFooter, |
| 208 | + urlInput, |
| 209 | + footerTemplateEditor, |
| 210 | + parseBooleanSetting, |
| 211 | + validationUrlEnter, |
| 212 | + getData, |
| 213 | + getMakeValidationUrlPrivate, |
| 214 | + getAddFooterData, |
| 215 | + getWriteQrcodeOnFooter, |
| 216 | + getValidationUrlData, |
| 217 | + getCustomizeFooterData, |
| 218 | + onTemplateReset, |
| 219 | + saveValidationiUrl, |
| 220 | + toggleSetting, |
| 221 | + onMakeValidationUrlPrivateChange, |
| 222 | + onAddFooterChange, |
| 223 | + onWriteQrcodeOnFooterChange, |
| 224 | + onCustomizeFooterChange, |
| 225 | + placeHolderValidationUrl, |
| 226 | + fillValidationUrl, |
| 227 | +}) |
177 | 228 | </script> |
178 | 229 | <style lang="scss" scoped> |
179 | 230 | input { |
|
0 commit comments