Skip to content

Commit 8aad2b0

Browse files
refactor(vue3): migrate settings Validation to script setup ts
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 308b1dc commit 8aad2b0

1 file changed

Lines changed: 164 additions & 113 deletions

File tree

src/views/Settings/Validation.vue

Lines changed: 164 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -49,131 +49,182 @@
4949
@template-reset="onTemplateReset" />
5050
</NcSettingsSection>
5151
</template>
52-
<script>
52+
<script setup lang="ts">
5353
import axios from '@nextcloud/axios'
5454
import { loadState } from '@nextcloud/initial-state'
5555
import { generateOcsUrl } from '@nextcloud/router'
5656
import { t } from '@nextcloud/l10n'
57+
import { onMounted, ref } from 'vue'
5758
5859
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
5960
import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'
6061
6162
import FooterTemplateEditor from '../../components/FooterTemplateEditor.vue'
6263
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
16669
}
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)
176131
}
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+
})
177228
</script>
178229
<style lang="scss" scoped>
179230
input {

0 commit comments

Comments
 (0)