mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-20 20:01:17 +00:00
[editor] Cleanup config by removing invalid / zero attributes
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
fdeccc304a
commit
a1e0f8325e
1 changed files with 58 additions and 25 deletions
|
@ -278,34 +278,11 @@ new Vue({
|
||||||
},
|
},
|
||||||
|
|
||||||
addAction() {
|
addAction() {
|
||||||
const attributes = {}
|
|
||||||
|
|
||||||
for (const field of this.getActionDefinitionByType(this.models.addAction).fields || []) {
|
|
||||||
let defaultValue = null
|
|
||||||
|
|
||||||
switch (field.type) {
|
|
||||||
case 'bool':
|
|
||||||
defaultValue = field.default === 'true'
|
|
||||||
break
|
|
||||||
case 'int64':
|
|
||||||
defaultValue = field.default ? Number(field.default) : 0
|
|
||||||
break
|
|
||||||
case 'string':
|
|
||||||
defaultValue = field.default
|
|
||||||
break
|
|
||||||
case 'stringslice':
|
|
||||||
defaultValue = []
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
attributes[field.key] = defaultValue
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.models.rule.actions) {
|
if (!this.models.rule.actions) {
|
||||||
Vue.set(this.models.rule, 'actions', [])
|
Vue.set(this.models.rule, 'actions', [])
|
||||||
}
|
}
|
||||||
|
|
||||||
this.models.rule.actions.push({ attributes, type: this.models.addAction })
|
this.models.rule.actions.push({ attributes: {}, type: this.models.addAction })
|
||||||
},
|
},
|
||||||
|
|
||||||
addChannel() {
|
addChannel() {
|
||||||
|
@ -350,6 +327,7 @@ new Vue({
|
||||||
editRule(msg) {
|
editRule(msg) {
|
||||||
Vue.set(this.models, 'rule', {
|
Vue.set(this.models, 'rule', {
|
||||||
...msg,
|
...msg,
|
||||||
|
actions: msg.actions?.map(action => ({ ...action, attributes: action.attributes || {} })) || [],
|
||||||
cooldown: this.fixDurationRepresentationToString(msg.cooldown),
|
cooldown: this.fixDurationRepresentationToString(msg.cooldown),
|
||||||
channel_cooldown: this.fixDurationRepresentationToString(msg.channel_cooldown),
|
channel_cooldown: this.fixDurationRepresentationToString(msg.channel_cooldown),
|
||||||
user_cooldown: this.fixDurationRepresentationToString(msg.user_cooldown),
|
user_cooldown: this.fixDurationRepresentationToString(msg.user_cooldown),
|
||||||
|
@ -626,7 +604,62 @@ new Vue({
|
||||||
evt.preventDefault()
|
evt.preventDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
const obj = { ...this.models.rule }
|
const obj = {
|
||||||
|
...this.models.rule,
|
||||||
|
actions: this.models.rule.actions.map(action => ({
|
||||||
|
...action,
|
||||||
|
attributes: Object.fromEntries(Object.entries(action.attributes)
|
||||||
|
.filter(att => {
|
||||||
|
const def = this.getActionDefinitionByType(action.type)
|
||||||
|
const field = def.fields.filter(field => field.key == att[0])[0]
|
||||||
|
|
||||||
|
if (!field) {
|
||||||
|
// The field is not defined, drop it
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (att[1] === null || att[1] === undefined) {
|
||||||
|
// Drop null / undefined values
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for zero-values and drop the field on zero-value
|
||||||
|
switch (field.type) {
|
||||||
|
case 'bool':
|
||||||
|
if (att[1] === false) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'duration':
|
||||||
|
if (att[1] === '0s' || att[1] === '') {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'int64':
|
||||||
|
if (att[1] === 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'string':
|
||||||
|
if (att[1] == '') {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'stringslice':
|
||||||
|
if (att[1] === null || att[1].length == 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
})),
|
||||||
|
})),
|
||||||
|
}
|
||||||
|
|
||||||
if (obj.cooldown) {
|
if (obj.cooldown) {
|
||||||
obj.cooldown = this.fixDurationRepresentationToInt64(obj.cooldown)
|
obj.cooldown = this.fixDurationRepresentationToInt64(obj.cooldown)
|
||||||
|
|
Loading…
Reference in a new issue