ESLint prop, variable and other fixes.
This commit is contained in:
parent
e3b877cc9c
commit
64fbbe6fd8
|
@ -4,7 +4,11 @@ module.exports = {
|
|||
'plugin:vue/vue3-recommended'
|
||||
],
|
||||
rules: {
|
||||
"vue/no-v-html": "off",
|
||||
"vue/multi-word-component-names": "off",
|
||||
"no-unused-vars": ["error", {
|
||||
"varsIgnorePattern": "^_|props",
|
||||
}],
|
||||
"vue/html-indent": ["error", 4, {
|
||||
"attribute": 1,
|
||||
"baseIndent": 1,
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
"imports-loader": "^4",
|
||||
"jquery": "^3.6.0",
|
||||
"leaflet": "^1.7.1",
|
||||
"leaflet-defaulticon-compatibility": "^0.1.1",
|
||||
"leaflet.fullscreen": "^2",
|
||||
"lodash": "^4.17.21",
|
||||
"luxon": "^2",
|
||||
|
@ -7271,6 +7272,11 @@
|
|||
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.3.tgz",
|
||||
"integrity": "sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ=="
|
||||
},
|
||||
"node_modules/leaflet-defaulticon-compatibility": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.1.tgz",
|
||||
"integrity": "sha512-vDBFdlUAwjSEGep9ih8kfJilf6yN8V9zTbF5NC/1ZwLeGko3RUQepspPnGCRMFV51dY3Lb3hziboicrFz+rxQA=="
|
||||
},
|
||||
"node_modules/leaflet.fullscreen": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/leaflet.fullscreen/-/leaflet.fullscreen-2.4.0.tgz",
|
||||
|
@ -17324,6 +17330,11 @@
|
|||
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.3.tgz",
|
||||
"integrity": "sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ=="
|
||||
},
|
||||
"leaflet-defaulticon-compatibility": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.1.tgz",
|
||||
"integrity": "sha512-vDBFdlUAwjSEGep9ih8kfJilf6yN8V9zTbF5NC/1ZwLeGko3RUQepspPnGCRMFV51dY3Lb3hziboicrFz+rxQA=="
|
||||
},
|
||||
"leaflet.fullscreen": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/leaflet.fullscreen/-/leaflet.fullscreen-2.4.0.tgz",
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
"imports-loader": "^4",
|
||||
"jquery": "^3.6.0",
|
||||
"leaflet": "^1.7.1",
|
||||
"leaflet-defaulticon-compatibility": "^0.1.1",
|
||||
"leaflet.fullscreen": "^2",
|
||||
"lodash": "^4.17.21",
|
||||
"luxon": "^2",
|
||||
|
|
|
@ -237,11 +237,28 @@ import {useAxios} from "~/vendor/axios";
|
|||
import {useSweetAlert} from "~/vendor/sweetalert";
|
||||
|
||||
const props = defineProps({
|
||||
userUrl: String,
|
||||
changePasswordUrl: String,
|
||||
twoFactorUrl: String,
|
||||
apiKeysApiUrl: String,
|
||||
supportedLocales: Object
|
||||
userUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
changePasswordUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
twoFactorUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
apiKeysApiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
supportedLocales: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const userLoading = ref(true);
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
no-enforce-focus
|
||||
@hidden="clearContents"
|
||||
>
|
||||
<template #default="slotProps">
|
||||
<template #default>
|
||||
<b-alert
|
||||
variant="danger"
|
||||
:show="error != null"
|
||||
|
@ -78,7 +78,10 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
createUrl: String
|
||||
createUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
|
|
@ -32,7 +32,10 @@
|
|||
<script setup>
|
||||
import CopyToClipboardButton from "~/components/Common/CopyToClipboardButton.vue";
|
||||
|
||||
const props = defineProps({
|
||||
newKey: String
|
||||
defineProps({
|
||||
newKey: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -60,7 +60,10 @@ import {useAxios} from "~/vendor/axios";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
changePasswordUrl: String
|
||||
changePasswordUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
@ -101,10 +104,6 @@ const open = () => {
|
|||
$modal.value.show();
|
||||
};
|
||||
|
||||
const close = () => {
|
||||
$modal.value.hide();
|
||||
}
|
||||
|
||||
const {wrapWithLoading} = useNotify();
|
||||
const {axios} = useAxios();
|
||||
|
||||
|
|
|
@ -37,10 +37,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Language') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="localeOptions"
|
||||
/>
|
||||
|
@ -55,10 +55,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Site Theme') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="themeOptions"
|
||||
/>
|
||||
|
@ -72,10 +72,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Time Display') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="show24hourOptions"
|
||||
/>
|
||||
|
@ -94,8 +94,14 @@ import {computed} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
supportedLocales: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
supportedLocales: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -26,8 +26,14 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
userUrl: String,
|
||||
supportedLocales: Object
|
||||
userUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
supportedLocales: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['reload']);
|
||||
|
|
|
@ -86,7 +86,10 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
twoFactorUrl: String
|
||||
twoFactorUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
|
|
@ -41,8 +41,11 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String
|
||||
defineProps({
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -123,7 +123,10 @@ import DateRangeDropdown from "~/components/Common/DateRangeDropdown.vue";
|
|||
import Icon from "~/components/Common/Icon.vue";
|
||||
|
||||
const props = defineProps({
|
||||
baseApiUrl: String,
|
||||
baseApiUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
}
|
||||
});
|
||||
|
||||
const dateRange = ref({
|
||||
|
|
|
@ -178,11 +178,26 @@ import {useAxios} from "~/vendor/axios";
|
|||
import {useSweetAlert} from "~/vendor/sweetalert";
|
||||
|
||||
const props = defineProps({
|
||||
listUrl: String,
|
||||
settingsUrl: String,
|
||||
runBackupUrl: String,
|
||||
storageLocations: Object,
|
||||
isDocker: Boolean,
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
settingsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
runBackupUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
storageLocations: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
isDocker: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
});
|
||||
|
||||
const settingsLoading = ref(false);
|
||||
|
|
|
@ -41,11 +41,11 @@
|
|||
<template #description>
|
||||
{{ $gettext('If the end time is before the start time, the playlist will play overnight.') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<time-code
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:state="props.state"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:state="slotProps.state"
|
||||
/>
|
||||
</template>
|
||||
</b-wrapped-form-group>
|
||||
|
@ -90,10 +90,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Storage Location') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="storageLocationOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -107,10 +107,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Backup Format') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="formatOptions"
|
||||
/>
|
||||
|
@ -135,14 +135,19 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useVuelidateOnForm} from "~/functions/useVuelidateOnForm";
|
||||
|
||||
const props = defineProps({
|
||||
settingsUrl: String,
|
||||
storageLocations: Object
|
||||
settingsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
storageLocations: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
||||
const loading = ref(true);
|
||||
const error = ref(null);
|
||||
|
||||
const $modal = ref(); // ModalForm
|
||||
|
||||
|
|
|
@ -17,7 +17,10 @@
|
|||
import {ref} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
lastOutput: String,
|
||||
lastOutput: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
});
|
||||
|
||||
const $modal = ref(); // Template ref
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
:title="$gettext('Run Manual Backup')"
|
||||
@hidden="clearContents"
|
||||
>
|
||||
<template #default="slotProps">
|
||||
<template #default>
|
||||
<b-alert
|
||||
variant="danger"
|
||||
:show="error != null"
|
||||
|
@ -30,10 +30,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Storage Location') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="storageLocationOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -132,8 +132,14 @@ import {useVuelidateOnForm} from "~/functions/useVuelidateOnForm";
|
|||
import {BModal} from "bootstrap-vue";
|
||||
|
||||
const props = defineProps({
|
||||
runBackupUrl: String,
|
||||
storageLocations: Object
|
||||
runBackupUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
storageLocations: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
|
|
@ -44,11 +44,23 @@
|
|||
import CustomAssetForm from "./Branding/CustomAssetForm.vue";
|
||||
import BrandingForm from "./Branding/BrandingForm.vue";
|
||||
|
||||
const props = defineProps({
|
||||
settingsApiUrl: String,
|
||||
browserIconApiUrl: String,
|
||||
backgroundApiUrl: String,
|
||||
albumArtApiUrl: String
|
||||
defineProps({
|
||||
settingsApiUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
browserIconApiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
backgroundApiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
albumArtApiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
|
@ -40,10 +40,10 @@
|
|||
$gettext('Select a theme to use as a base for station public pages and the login page.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="publicThemeOptions"
|
||||
/>
|
||||
|
@ -124,10 +124,10 @@
|
|||
$gettext('This CSS will be applied to the station public pages and login page.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<codemirror-textarea
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
mode="css"
|
||||
/>
|
||||
</template>
|
||||
|
@ -146,10 +146,10 @@
|
|||
$gettext('This javascript code will be applied to the station public pages and login page.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<codemirror-textarea
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
mode="javascript"
|
||||
/>
|
||||
</template>
|
||||
|
@ -168,10 +168,10 @@
|
|||
$gettext('This CSS will be applied to the main management pages, like this one.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<codemirror-textarea
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
mode="css"
|
||||
/>
|
||||
</template>
|
||||
|
@ -205,7 +205,10 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import {useVuelidateOnForm} from "~/functions/useVuelidateOnForm";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String,
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
});
|
||||
|
||||
const loading = ref(true);
|
||||
|
|
|
@ -43,9 +43,18 @@
|
|||
export default {
|
||||
name: 'CustomAssetForm',
|
||||
props: {
|
||||
id: String,
|
||||
apiUrl: String,
|
||||
caption: String
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
caption: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -79,8 +79,14 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
listUrl: String,
|
||||
autoAssignTypes: Object
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
autoAssignTypes: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -27,7 +27,10 @@ export default defineComponent({
|
|||
components: {AdminCustomFieldsForm},
|
||||
mixins: [BaseEditModal],
|
||||
props: {
|
||||
autoAssignTypes: Object
|
||||
autoAssignTypes: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
setup() {
|
||||
const {form, resetForm, v$} = useVuelidateOnForm(
|
||||
|
|
|
@ -44,10 +44,10 @@
|
|||
$gettext('Optionally select an ID3v2 metadata field that, if present, will be used to set this field\'s value.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="autoAssignOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -63,8 +63,14 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import {forEach} from "lodash";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
autoAssignTypes: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
autoAssignTypes: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -119,13 +119,16 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import {useNotify} from "~/vendor/bootstrapVue";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const loading = ref(true);
|
||||
const version = ref(null);
|
||||
|
||||
const {form, resetForm, v$} = useVuelidateOnForm(
|
||||
const {form, v$} = useVuelidateOnForm(
|
||||
{
|
||||
key: {}
|
||||
},
|
||||
|
|
|
@ -472,18 +472,26 @@
|
|||
|
||||
<script>
|
||||
import Icon from '~/components/Common/Icon';
|
||||
import InfoCard from '~/components/Common/InfoCard';
|
||||
import CpuStatsHelpModal from "./Index/CpuStatsHelpModal";
|
||||
import MemoryStatsHelpModal from "./Index/MemoryStatsHelpModal";
|
||||
import _ from 'lodash';
|
||||
|
||||
export default {
|
||||
name: 'AdminIndex',
|
||||
components: {InfoCard, CpuStatsHelpModal, MemoryStatsHelpModal, Icon},
|
||||
components: {CpuStatsHelpModal, MemoryStatsHelpModal, Icon},
|
||||
props: {
|
||||
adminPanels: Object,
|
||||
statsUrl: String,
|
||||
servicesUrl: String
|
||||
adminPanels: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
statsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
servicesUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -49,9 +49,17 @@ import LogList from "~/components/Common/LogList";
|
|||
import StreamingLogModal from "~/components/Common/StreamingLogModal";
|
||||
import {ref} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
systemLogsUrl: String,
|
||||
stationLogs: Array
|
||||
defineProps({
|
||||
systemLogsUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
stationLogs: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const $modal = ref(); // StreamingLogModal
|
||||
|
|
|
@ -91,10 +91,22 @@ export default {
|
|||
name: 'AdminPermissions',
|
||||
components: {InfoCard, Icon, EditModal, DataTable},
|
||||
props: {
|
||||
listUrl: String,
|
||||
stations: Array,
|
||||
globalPermissions: Array,
|
||||
stationPermissions: Array
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
stations: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
globalPermissions: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
stationPermissions: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -39,9 +39,18 @@ export default {
|
|||
components: {AdminPermissionsStationForm, AdminPermissionsGlobalForm},
|
||||
mixins: [BaseEditModal],
|
||||
props: {
|
||||
stations: Object,
|
||||
globalPermissions: Object,
|
||||
stationPermissions: Object
|
||||
stations: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
globalPermissions: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
stationPermissions: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
setup() {
|
||||
const {form, resetForm, v$} = useVuelidateOnForm(
|
||||
|
|
|
@ -28,10 +28,10 @@
|
|||
$gettext('Users with this role will have these permissions across the entire installation.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-checkbox-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="globalPermissionOptions"
|
||||
stacked
|
||||
/>
|
||||
|
@ -48,16 +48,22 @@ import {map} from 'lodash';
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
globalPermissions: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
globalPermissions: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const globalPermissionOptions = computed(() => {
|
||||
return map(props.globalPermissions, (permissionName, permissionKey) => {
|
||||
return {
|
||||
text: permissionName,
|
||||
value: permissionKey
|
||||
};
|
||||
});
|
||||
return map(props.globalPermissions, (permissionName, permissionKey) => {
|
||||
return {
|
||||
text: permissionName,
|
||||
value: permissionKey
|
||||
};
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -37,9 +37,18 @@ import PermissionsFormStationRow from "~/components/Admin/Permissions/Form/Stati
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
stations: Object,
|
||||
stationPermissions: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
stations: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
stationPermissions: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const remainingStations = computed(() => {
|
||||
|
|
|
@ -35,10 +35,10 @@
|
|||
<template #description>
|
||||
{{ $gettext('Users with this role will have these permissions for this single station.') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-checkbox-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="stationPermissionOptions"
|
||||
stacked
|
||||
/>
|
||||
|
@ -59,9 +59,18 @@ import {useVModel} from "@vueuse/core";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
row: Object,
|
||||
stations: Object,
|
||||
stationPermissions: Object
|
||||
row: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
stations: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
stationPermissions: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['remove', 'update:row']);
|
||||
|
|
|
@ -91,9 +91,18 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import {useVuelidateOnForm} from "~/functions/useVuelidateOnForm";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String,
|
||||
testMessageUrl: String,
|
||||
acmeUrl: String,
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
testMessageUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
acmeUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
releaseChannel: {
|
||||
type: String,
|
||||
default: 'rolling',
|
||||
|
@ -103,7 +112,7 @@ const props = defineProps({
|
|||
|
||||
const emit = defineEmits(['saved']);
|
||||
|
||||
const {form, resetForm, v$} = useVuelidateOnForm(
|
||||
const {form, v$} = useVuelidateOnForm(
|
||||
{
|
||||
base_url: {required},
|
||||
instance_name: {},
|
||||
|
|
|
@ -75,10 +75,10 @@
|
|||
$gettext('Set longer to preserve more playback history and listener metadata for stations. Set shorter to save disk space.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="historyKeepDaysOptions"
|
||||
/>
|
||||
|
@ -126,7 +126,10 @@ import {computed} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -18,10 +18,10 @@
|
|||
$gettext('Aggregate listener statistics are used to show station reports across the system. IP-based listener statistics are used to view live listener tracking and may be required for royalty reports.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
>
|
||||
<b-form-radio value="all">
|
||||
|
@ -100,6 +100,9 @@ import BFormFieldset from "~/components/Form/BFormFieldset.vue";
|
|||
import BWrappedFormCheckbox from "~/components/Form/BWrappedFormCheckbox.vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -229,10 +229,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Avatar Service') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="avatarServiceOptions"
|
||||
/>
|
||||
|
@ -318,10 +318,22 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
releaseChannel: String,
|
||||
testMessageUrl: String,
|
||||
acmeUrl: String,
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
releaseChannel: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
testMessageUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
acmeUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -44,10 +44,13 @@ import {useVuelidateOnForm} from "~/functions/useVuelidateOnForm";
|
|||
import {BModal} from "bootstrap-vue";
|
||||
|
||||
const props = defineProps({
|
||||
testMessageUrl: String
|
||||
testMessageUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {form, resetForm, v$} = useVuelidateOnForm(
|
||||
const {form, v$} = useVuelidateOnForm(
|
||||
{
|
||||
emailAddress: {required, email}
|
||||
},
|
||||
|
|
|
@ -90,7 +90,10 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const loading = ref(true);
|
||||
|
|
|
@ -87,7 +87,6 @@
|
|||
<script>
|
||||
import DataTable from '~/components/Common/DataTable';
|
||||
import Icon from '~/components/Common/Icon';
|
||||
import InfoCard from '~/components/Common/InfoCard';
|
||||
import AdminStationsEditModal from "./Stations/EditModal";
|
||||
import _ from "lodash";
|
||||
import AdminStationsCloneModal from "./Stations/CloneModal";
|
||||
|
@ -95,12 +94,21 @@ import stationFormProps from "./Stations/stationFormProps";
|
|||
|
||||
export default {
|
||||
name: 'AdminPermissions',
|
||||
components: {AdminStationsCloneModal, AdminStationsEditModal, InfoCard, Icon, DataTable},
|
||||
components: {AdminStationsCloneModal, AdminStationsEditModal, Icon, DataTable},
|
||||
props: {
|
||||
...stationFormProps,
|
||||
listUrl: String,
|
||||
frontendTypes: Object,
|
||||
backendTypes: Object
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
frontendTypes: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
backendTypes: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -29,10 +29,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Copy to New Station') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-checkbox-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="cloneOptions"
|
||||
stacked
|
||||
/>
|
||||
|
@ -47,7 +47,10 @@ import {computed} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
:is-edit-mode="isEditMode"
|
||||
@error="close"
|
||||
@submitted="onSubmit"
|
||||
@validUpdate="onValidUpdate"
|
||||
@loadingUpdate="onLoadingUpdate"
|
||||
@valid-update="onValidUpdate"
|
||||
@loading-update="onLoadingUpdate"
|
||||
>
|
||||
<template #submitButton>
|
||||
<invisible-submit-button />
|
||||
|
@ -54,7 +54,10 @@ import stationFormProps from "~/components/Admin/Stations/stationFormProps";
|
|||
|
||||
const props = defineProps({
|
||||
...stationFormProps,
|
||||
createUrl: String
|
||||
createUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
|
|
@ -48,10 +48,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Media Storage Location') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="storageLocationOptions.media_storage_location"
|
||||
/>
|
||||
</template>
|
||||
|
@ -65,10 +65,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Live Recordings Storage Location') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="storageLocationOptions.recordings_storage_location"
|
||||
/>
|
||||
</template>
|
||||
|
@ -82,10 +82,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Podcasts Storage Location') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="storageLocationOptions.podcasts_storage_location"
|
||||
/>
|
||||
</template>
|
||||
|
@ -105,9 +105,18 @@ import {onMounted, reactive, ref} from "vue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
isEditMode: Boolean,
|
||||
storageLocationApiUrl: String,
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
isEditMode: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
},
|
||||
storageLocationApiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
|
|
@ -14,10 +14,10 @@
|
|||
$gettext('This software shuffles from playlists of music constantly and plays when no other radio source is available.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="backendTypeOptions"
|
||||
/>
|
||||
|
@ -42,10 +42,10 @@
|
|||
$gettext('Choose a method to use when transitioning from one song to another. Smart Mode considers the volume of the two tracks when fading for a smoother effect, but requires more CPU resources.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="crossfadeOptions"
|
||||
/>
|
||||
|
@ -81,10 +81,10 @@
|
|||
$gettext('Choose a method to use for processing audio which produces a more uniform and "full" sound for your station.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="audioProcessingOptions"
|
||||
/>
|
||||
|
@ -233,10 +233,10 @@
|
|||
$gettext('For most cases, use the default UTF-8 encoding. The older ISO-8859-1 encoding can be used if accepting connections from Shoutcast 1 DJs or using other legacy software.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="charsetOptions"
|
||||
/>
|
||||
|
@ -257,10 +257,10 @@
|
|||
$gettext('If your installation is constrained by CPU or memory, you can change this setting to tune the resources used by Liquidsoap.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="performanceModeOptions"
|
||||
/>
|
||||
|
@ -305,12 +305,18 @@ import {computed} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
station: Object,
|
||||
isStereoToolInstalled: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
station: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
isStereoToolInstalled: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
<template #description>
|
||||
{{ $gettext('This software delivers your broadcast to the listening audience.') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="frontendTypeOptions"
|
||||
/>
|
||||
|
@ -176,10 +176,10 @@
|
|||
<template #description>
|
||||
{{ $gettext('Select the countries that are not allowed to connect to the streams.') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="countryOptions"
|
||||
style="min-height: 300px;"
|
||||
multiple
|
||||
|
@ -236,12 +236,18 @@ import {computed} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
isShoutcastInstalled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
isShoutcastInstalled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
countries: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
countries: Object,
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
|
|
@ -104,10 +104,16 @@ import BackendDisabled from "./Common/BackendDisabled.vue";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
station: Object,
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
station: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
});
|
||||
|
|
|
@ -61,10 +61,10 @@
|
|||
$gettext('Scheduled playlists and other timed items will be controlled by this time zone.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="timezoneOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -117,10 +117,10 @@
|
|||
$gettext('Customize the number of songs that will appear in the "Song History" section for this station and in all public APIs.')
|
||||
}}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-select
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="historyItemsOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -198,8 +198,14 @@ import {computed} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
timezones: Object,
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
timezones: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
|
|
@ -80,10 +80,16 @@ import BackendDisabled from "./Common/BackendDisabled.vue";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
station: Object,
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
station: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
});
|
||||
|
|
|
@ -55,10 +55,10 @@
|
|||
{{ $gettext('Live Broadcast Recording Format') }}
|
||||
</template>
|
||||
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="recordStreamsOptions"
|
||||
/>
|
||||
|
@ -74,10 +74,10 @@
|
|||
{{ $gettext('Live Broadcast Recording Bitrate (kbps)') }}
|
||||
</template>
|
||||
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:options="recordBitrateOptions"
|
||||
/>
|
||||
|
@ -178,10 +178,16 @@ import BackendDisabled from "./Common/BackendDisabled.vue";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
station: Object,
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
station: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
showAdvanced: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
});
|
||||
|
|
|
@ -158,9 +158,18 @@ import stationFormProps from "~/components/Admin/Stations/stationFormProps";
|
|||
|
||||
const props = defineProps({
|
||||
...stationFormProps,
|
||||
createUrl: String,
|
||||
editUrl: String,
|
||||
isEditMode: Boolean,
|
||||
createUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
editUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
isEditMode: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
},
|
||||
isModal: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
|
|
|
@ -100,7 +100,10 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const loading = ref(true);
|
||||
|
|
|
@ -103,7 +103,10 @@ export default {
|
|||
name: 'AdminStorageLocations',
|
||||
components: {Icon, EditModal, DataTable},
|
||||
props: {
|
||||
listUrl: String
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -25,7 +25,10 @@ export default {
|
|||
components: {StorageLocationForm},
|
||||
mixins: [BaseEditModal],
|
||||
props: {
|
||||
type: String
|
||||
type: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
setup() {
|
||||
const blankForm = {
|
||||
|
|
|
@ -9,10 +9,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Storage Adapter') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
>
|
||||
<b-form-radio value="local">
|
||||
|
@ -258,6 +258,9 @@
|
|||
import BWrappedFormGroup from "~/components/Form/BWrappedFormGroup.vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -90,14 +90,19 @@
|
|||
import DataTable from '~/components/Common/DataTable';
|
||||
import EditModal from './Users/EditModal';
|
||||
import Icon from '~/components/Common/Icon';
|
||||
import InfoCard from '~/components/Common/InfoCard';
|
||||
|
||||
export default {
|
||||
name: 'AdminPermissions',
|
||||
components: {InfoCard, Icon, EditModal, DataTable},
|
||||
components: {Icon, EditModal, DataTable},
|
||||
props: {
|
||||
listUrl: String,
|
||||
roles: Object
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
roles: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -29,7 +29,10 @@ export default {
|
|||
components: {AdminUsersForm},
|
||||
mixins: [BaseEditModal],
|
||||
props: {
|
||||
roles: Object
|
||||
roles: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
setup() {
|
||||
return {v$: useVuelidate()}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
</template>
|
||||
<template
|
||||
v-if="isEditMode"
|
||||
#description="{lang}"
|
||||
#description
|
||||
>
|
||||
{{ $gettext('Leave blank to use the current password.') }}
|
||||
</template>
|
||||
|
@ -48,10 +48,10 @@
|
|||
<template #label>
|
||||
{{ $gettext('Roles') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-checkbox-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
:options="roleOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -66,9 +66,18 @@ import objectToFormOptions from "~/functions/objectToFormOptions";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
roles: Object,
|
||||
isEditMode: Boolean
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
roles: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
isEditMode: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const roleOptions = computed(() => {
|
||||
|
|
|
@ -19,7 +19,10 @@
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
src: String,
|
||||
src: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
width: {
|
||||
type: Number,
|
||||
default: 40
|
||||
|
|
|
@ -14,7 +14,10 @@ import {defineComponent} from "vue";
|
|||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
title: String,
|
||||
title: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
volume: {
|
||||
type: Number,
|
||||
default: 55
|
||||
|
|
|
@ -20,9 +20,18 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
url: String,
|
||||
service: String,
|
||||
serviceUrl: String,
|
||||
url: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
service: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
serviceUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
width: {
|
||||
type: Number,
|
||||
default: 64
|
||||
|
|
|
@ -10,7 +10,10 @@ import {computed} from "vue";
|
|||
import {useGettext} from "vue3-gettext";
|
||||
|
||||
const props = defineProps({
|
||||
enabled: Boolean
|
||||
enabled: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const badgeClass = computed(() => {
|
||||
|
|
|
@ -10,7 +10,10 @@ import {computed} from "vue";
|
|||
import {useGettext} from "vue3-gettext";
|
||||
|
||||
const props = defineProps({
|
||||
running: Boolean
|
||||
running: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const badgeClass = computed(() => {
|
||||
|
|
|
@ -11,7 +11,10 @@ export default {
|
|||
name: 'BaseEditModal',
|
||||
components: {ModalForm},
|
||||
props: {
|
||||
createUrl: String
|
||||
createUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
emits: ['relist'],
|
||||
setup() {
|
||||
|
|
|
@ -9,11 +9,21 @@ import {Tableau20} from "~/vendor/chartjs-colorschemes/colorschemes.tableau";
|
|||
import {Chart} from "chart.js";
|
||||
import {useTranslate} from "~/vendor/gettext";
|
||||
import {onMounted, onUnmounted, ref} from "vue";
|
||||
import {defaultsDeep} from "lodash";
|
||||
|
||||
const props = defineProps({
|
||||
options: Object,
|
||||
data: Array,
|
||||
labels: Array
|
||||
options: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
data: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
labels: {
|
||||
type: Array,
|
||||
default: []
|
||||
}
|
||||
});
|
||||
|
||||
let $chart = null;
|
||||
|
@ -58,7 +68,7 @@ onMounted(() => {
|
|||
$chart.destroy();
|
||||
}
|
||||
|
||||
let chartOptions = _.defaultsDeep({}, props.options, defaultOptions);
|
||||
let chartOptions = defaultsDeep({}, props.options, defaultOptions);
|
||||
$chart = new Chart($canvas.value.getContext('2d'), chartOptions);
|
||||
});
|
||||
|
||||
|
|
|
@ -8,11 +8,21 @@
|
|||
import {Tableau20} from "~/vendor/chartjs-colorschemes/colorschemes.tableau";
|
||||
import {Chart} from "chart.js";
|
||||
import {onMounted, onUnmounted, ref} from "vue";
|
||||
import {defaultsDeep} from "lodash";
|
||||
|
||||
const props = defineProps({
|
||||
options: Object,
|
||||
data: Array,
|
||||
labels: Array,
|
||||
options: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
data: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
labels: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
aspectRatio: {
|
||||
type: Number,
|
||||
default: 2
|
||||
|
@ -43,7 +53,7 @@ onMounted(() => {
|
|||
$chart.destroy();
|
||||
}
|
||||
|
||||
let chartOptions = _.defaultsDeep({}, props.options, defaultOptions);
|
||||
let chartOptions = defaultsDeep({}, props.options, defaultOptions);
|
||||
$chart = new Chart($canvas.value.getContext('2d'), chartOptions);
|
||||
});
|
||||
|
||||
|
|
|
@ -14,8 +14,14 @@ import {onMounted, onUnmounted, ref} from "vue";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
options: Object,
|
||||
data: Array
|
||||
options: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
data: {
|
||||
type: Array,
|
||||
default: []
|
||||
}
|
||||
});
|
||||
|
||||
const $canvas = ref(); // Template ref
|
||||
|
|
|
@ -16,8 +16,14 @@ import {javascript} from "@codemirror/lang-javascript";
|
|||
import {useAzuraCast} from "~/vendor/azuracast";
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: String,
|
||||
mode: String
|
||||
modelValue: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
|
|
@ -123,6 +123,8 @@
|
|||
<b-table
|
||||
ref="table"
|
||||
v-model:current-page="currentPage"
|
||||
v-model:sort-by="sortBy"
|
||||
v-model:sort-desc="sortDesc"
|
||||
show-empty
|
||||
striped
|
||||
hover
|
||||
|
@ -138,12 +140,10 @@
|
|||
:no-provider-sorting="handleClientSide"
|
||||
:no-provider-filtering="handleClientSide"
|
||||
tbody-tr-class="align-middle"
|
||||
@row-selected="onRowSelected"
|
||||
thead-tr-class="align-middle"
|
||||
selected-variant=""
|
||||
:filter="filter"
|
||||
v-model:sort-by="sortBy"
|
||||
v-model:sort-desc="sortDesc"
|
||||
@row-selected="onRowSelected"
|
||||
@filtered="onFiltered"
|
||||
@refreshed="onRefreshed"
|
||||
@sort-changed="onSortChanged"
|
||||
|
@ -217,7 +217,7 @@
|
|||
|
||||
<script>
|
||||
import store from 'store';
|
||||
import _ from 'lodash';
|
||||
import {forEach, filter, map} from 'lodash';
|
||||
import Icon from './Icon.vue';
|
||||
import {defineComponent} from "vue";
|
||||
|
||||
|
@ -225,7 +225,10 @@ export default defineComponent({
|
|||
name: 'DataTable',
|
||||
components: {Icon},
|
||||
props: {
|
||||
id: String,
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
apiUrl: {
|
||||
type: String,
|
||||
default: null
|
||||
|
@ -254,7 +257,10 @@ export default defineComponent({
|
|||
type: Number,
|
||||
default: 10
|
||||
},
|
||||
fields: Array,
|
||||
fields: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
selectable: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
|
@ -267,12 +273,25 @@ export default defineComponent({
|
|||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
requestConfig: Function,
|
||||
requestProcess: Function
|
||||
requestConfig: {
|
||||
type: Function,
|
||||
default: () => {
|
||||
}
|
||||
},
|
||||
requestProcess: {
|
||||
type: Function,
|
||||
default: () => {
|
||||
}
|
||||
}
|
||||
},
|
||||
emits: [
|
||||
'refreshed',
|
||||
'row-selected',
|
||||
'filtered'
|
||||
],
|
||||
data() {
|
||||
let allFields = [];
|
||||
_.forEach(this.fields, function (field) {
|
||||
forEach(this.fields, function (field) {
|
||||
allFields.push({
|
||||
...{
|
||||
label: '',
|
||||
|
@ -345,7 +364,7 @@ export default defineComponent({
|
|||
return fields;
|
||||
}
|
||||
|
||||
return _.filter(fields, (field) => {
|
||||
return filter(fields, (field) => {
|
||||
if (!field.selectable) {
|
||||
return true;
|
||||
}
|
||||
|
@ -354,7 +373,7 @@ export default defineComponent({
|
|||
});
|
||||
},
|
||||
selectableFields() {
|
||||
return _.filter(this.allFields.slice(), (field) => {
|
||||
return filter(this.allFields.slice(), (field) => {
|
||||
return field.selectable;
|
||||
});
|
||||
},
|
||||
|
@ -394,7 +413,7 @@ export default defineComponent({
|
|||
|
||||
this.perPage = _.defaultTo(settings.perPage, this.defaultPerPage);
|
||||
|
||||
_.forEach(this.selectableFields, (field) => {
|
||||
forEach(this.selectableFields, (field) => {
|
||||
field.visible = _.includes(settings.visibleFields, field.key);
|
||||
});
|
||||
|
||||
|
@ -413,7 +432,7 @@ export default defineComponent({
|
|||
'perPage': this.perPage,
|
||||
'sortBy': this.sortBy,
|
||||
'sortDesc': this.sortDesc,
|
||||
'visibleFields': _.map(this.visibleFields, 'key')
|
||||
'visibleFields': map(this.visibleFields, 'key')
|
||||
};
|
||||
|
||||
store.set(this.storeKey, settings);
|
||||
|
|
|
@ -84,7 +84,7 @@ export default {
|
|||
get() {
|
||||
return this.modelValue;
|
||||
},
|
||||
set(newValue) {
|
||||
set() {
|
||||
// Noop
|
||||
}
|
||||
},
|
||||
|
|
|
@ -74,10 +74,13 @@ import {useAzuraCast} from "~/vendor/azuracast";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
targetUrl: String,
|
||||
allowMultiple: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
targetUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
allowMultiple: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
validMimeTypes: {
|
||||
type: Array,
|
||||
|
@ -183,7 +186,7 @@ onMounted(() => {
|
|||
flow.on('error', (message, file, chunk) => {
|
||||
console.error(message, file, chunk);
|
||||
|
||||
let messageText = $gettext('Could not upload file.');
|
||||
let messageText = $gettext('Could not upload file.');
|
||||
try {
|
||||
if (typeof message !== 'undefined') {
|
||||
let messageJson = JSON.parse(message);
|
||||
|
@ -195,6 +198,7 @@ onMounted(() => {
|
|||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// Noop
|
||||
}
|
||||
|
||||
files.get(file).error = messageText;
|
||||
|
|
|
@ -17,7 +17,10 @@
|
|||
export default {
|
||||
name: 'LogList',
|
||||
props: {
|
||||
url: String,
|
||||
url: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
},
|
||||
emits: ['view'],
|
||||
data() {
|
||||
|
|
|
@ -109,7 +109,8 @@ export default defineComponent({
|
|||
default: false,
|
||||
},
|
||||
error: {
|
||||
type: String
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
emits: ['submit', 'shown', 'hidden'],
|
||||
|
|
|
@ -20,7 +20,10 @@ import {useTranslate} from "~/vendor/gettext";
|
|||
import getUrlWithoutQuery from "~/functions/getUrlWithoutQuery";
|
||||
|
||||
const props = defineProps({
|
||||
url: String,
|
||||
url: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
isStream: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
|
@ -29,7 +32,10 @@ const props = defineProps({
|
|||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
iconClass: String
|
||||
iconClass: {
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
});
|
||||
|
||||
const $store = usePlayerStore();
|
||||
|
|
|
@ -15,8 +15,14 @@ import {shallowRef} from "vue";
|
|||
import {useAzuraCast} from "~/vendor/azuracast";
|
||||
|
||||
const props = defineProps({
|
||||
scheduleUrl: String,
|
||||
stationTimeZone: String
|
||||
scheduleUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
stationTimeZone: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['click']);
|
||||
|
|
|
@ -14,7 +14,10 @@ import {computed} from "vue";
|
|||
import _ from 'lodash';
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: String
|
||||
modelValue: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
|
|
@ -78,8 +78,14 @@ import {onMounted, onUnmounted, ref, watch} from "vue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
audioUrl: String,
|
||||
waveformUrl: String
|
||||
audioUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
waveformUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['ready']);
|
||||
|
|
|
@ -332,16 +332,46 @@ import AlbumArt from "~/components/Common/AlbumArt";
|
|||
export default {
|
||||
components: {PlayButton, Avatar, Icon, DataTable, TimeSeriesChart, AlbumArt},
|
||||
props: {
|
||||
userUrl: String,
|
||||
profileUrl: String,
|
||||
adminUrl: String,
|
||||
showAdmin: Boolean,
|
||||
notificationsUrl: String,
|
||||
showCharts: Boolean,
|
||||
chartsUrl: String,
|
||||
manageStationsUrl: String,
|
||||
stationsUrl: String,
|
||||
showAlbumArt: Boolean
|
||||
userUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
profileUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
adminUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
showAdmin: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
},
|
||||
notificationsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
showCharts: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
},
|
||||
chartsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
manageStationsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
stationsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
showAlbumArt: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -69,6 +69,7 @@ const props = defineProps({
|
|||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
field: {
|
||||
type: Object,
|
||||
|
|
|
@ -94,6 +94,7 @@ const props = defineProps({
|
|||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
field: {
|
||||
type: Object,
|
||||
|
|
|
@ -12,7 +12,10 @@ import {get, map} from "lodash";
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
field: Object
|
||||
field: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -29,7 +29,10 @@
|
|||
import {DateTime} from "luxon";
|
||||
|
||||
const props = defineProps({
|
||||
history: Array,
|
||||
history: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
showAlbumArt: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
|
|
@ -18,7 +18,10 @@
|
|||
import SongHistory from './SongHistory';
|
||||
|
||||
const props = defineProps({
|
||||
history: Array,
|
||||
history: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
showAlbumArt: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
|
|
|
@ -95,10 +95,22 @@ import PlayButton from "~/components/Common/PlayButton";
|
|||
import {useTranslate} from "~/vendor/gettext";
|
||||
|
||||
const props = defineProps({
|
||||
listUrl: String,
|
||||
stationName: String,
|
||||
customFields: Array,
|
||||
showDownloadButton: Boolean
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
stationName: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
customFields: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
showDownloadButton: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -44,9 +44,18 @@
|
|||
import Schedule from '~/components/Common/ScheduleView';
|
||||
|
||||
const props = defineProps({
|
||||
scheduleUrl: String,
|
||||
stationName: String,
|
||||
stationTimeZone: String
|
||||
scheduleUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
stationName: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
stationTimeZone: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
|
@ -58,9 +58,18 @@ export default {
|
|||
};
|
||||
},
|
||||
props: {
|
||||
stationName: String,
|
||||
libUrls: Array,
|
||||
baseUri: String
|
||||
stationName: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
libUrls: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
baseUri: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
|
|
@ -183,7 +183,10 @@ export default {
|
|||
components: {VolumeSlider, Icon},
|
||||
extends: track,
|
||||
props: {
|
||||
id: String
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -313,9 +313,18 @@
|
|||
export default {
|
||||
inject: ['getStream', 'resumeStream'],
|
||||
props: {
|
||||
stationName: String,
|
||||
libUrls: Array,
|
||||
baseUri: String
|
||||
stationName: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
libUrls: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
baseUri: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
|
|
@ -26,7 +26,10 @@ import {onMounted, ref} from "vue";
|
|||
import {useVModel} from "@vueuse/core";
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: String
|
||||
modelValue: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
|
|
@ -72,11 +72,17 @@ import {required} from '@vuelidate/validators';
|
|||
import {useVuelidateOnForm} from "~/functions/useVuelidateOnForm";
|
||||
|
||||
const props = defineProps({
|
||||
csrf: String,
|
||||
error: String,
|
||||
csrf: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
error: {
|
||||
type: String,
|
||||
default: null
|
||||
},
|
||||
});
|
||||
|
||||
const {form, v$} = useVuelidateOnForm(
|
||||
const {v$} = useVuelidateOnForm(
|
||||
{
|
||||
password: {required, validatePassword}
|
||||
},
|
||||
|
|
|
@ -104,8 +104,14 @@ import validatePassword from "~/functions/validatePassword";
|
|||
import useVuelidate from "@vuelidate/core";
|
||||
|
||||
const props = defineProps({
|
||||
csrf: String,
|
||||
error: String,
|
||||
csrf: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
error: {
|
||||
type: String,
|
||||
default: null
|
||||
},
|
||||
});
|
||||
|
||||
const form = reactive({
|
||||
|
|
|
@ -29,7 +29,10 @@ import SetupStep from "./SetupStep";
|
|||
import InfoCard from "~/components/Common/InfoCard";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String,
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
releaseChannel: {
|
||||
type: String,
|
||||
default: 'rolling',
|
||||
|
|
|
@ -39,7 +39,10 @@
|
|||
import Icon from "~/components/Common/Icon";
|
||||
|
||||
const props = defineProps({
|
||||
step: Number
|
||||
step: {
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
});
|
||||
|
||||
const getStepperClass = (currentStep) => {
|
||||
|
|
|
@ -37,7 +37,10 @@ import stationFormProps from "~/components/Admin/Stations/stationFormProps";
|
|||
|
||||
const props = defineProps({
|
||||
...stationFormProps,
|
||||
createUrl: String,
|
||||
createUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
continueUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
|
|
|
@ -155,13 +155,13 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import FlowUpload from '~/components/Common/FlowUpload';
|
||||
|
||||
export default {
|
||||
name: 'StationsBulkMedia',
|
||||
components: {FlowUpload},
|
||||
props: {
|
||||
apiUrl: String
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -74,8 +74,14 @@ import {ref} from "vue";
|
|||
import {useAxios} from "~/vendor/axios";
|
||||
|
||||
const props = defineProps({
|
||||
apiUrl: String,
|
||||
recordHasFallback: Boolean
|
||||
apiUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
recordHasFallback: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const hasFallback = ref(props.recordHasFallback);
|
||||
|
|
|
@ -64,7 +64,10 @@ import LogList from "~/components/Common/LogList";
|
|||
import {ref} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
logsUrl: String,
|
||||
logsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
});
|
||||
|
||||
const $modal = ref(); // BModal
|
||||
|
|
|
@ -85,7 +85,10 @@ import {useAxios} from "~/vendor/axios";
|
|||
|
||||
const props = defineProps({
|
||||
...mayNeedRestartProps,
|
||||
listUrl: String
|
||||
listUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const {$gettext} = useTranslate();
|
||||
|
|
|
@ -28,7 +28,7 @@ export default {
|
|||
name: 'EditModal',
|
||||
components: {FormBasicInfo},
|
||||
mixins: [BaseEditModal],
|
||||
emits: ['needs-restart'],
|
||||
emits: ['relist', 'needs-restart'],
|
||||
setup() {
|
||||
const {form, resetForm, v$} = useVuelidateOnForm(
|
||||
{
|
||||
|
|
|
@ -28,12 +28,12 @@
|
|||
<template #label>
|
||||
{{ $gettext('Audio Format') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:state="props.state"
|
||||
:state="slotProps.state"
|
||||
:options="formatOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -46,12 +46,12 @@
|
|||
<template #label>
|
||||
{{ $gettext('Audio Bitrate (kbps)') }}
|
||||
</template>
|
||||
<template #default="props">
|
||||
<template #default="slotProps">
|
||||
<b-form-radio-group
|
||||
:id="props.id"
|
||||
v-model="props.field.$model"
|
||||
:id="slotProps.id"
|
||||
v-model="slotProps.field.$model"
|
||||
stacked
|
||||
:state="props.state"
|
||||
:state="slotProps.state"
|
||||
:options="bitrateOptions"
|
||||
/>
|
||||
</template>
|
||||
|
@ -66,8 +66,14 @@ import BWrappedFormGroup from "~/components/Form/BWrappedFormGroup";
|
|||
import {map} from "lodash";
|
||||
|
||||
const props = defineProps({
|
||||
form: Object,
|
||||
stationFrontendType: String
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
stationFrontendType: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const formatOptions = [
|
||||
|
|
|
@ -84,9 +84,18 @@ import {useNotify} from "~/vendor/bootstrapVue";
|
|||
|
||||
const props = defineProps({
|
||||
...mayNeedRestartProps,
|
||||
settingsUrl: String,
|
||||
config: Array,
|
||||
sections: Array,
|
||||
settingsUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
config: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
sections: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
});
|
||||
|
||||
const buildForm = () => {
|
||||
|
|
|
@ -303,10 +303,22 @@ export default {
|
|||
required: false,
|
||||
default: () => []
|
||||
},
|
||||
stationTimeZone: String,
|
||||
showSftp: Boolean,
|
||||
sftpUrl: String,
|
||||
supportsImmediateQueue: Boolean
|
||||
stationTimeZone: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
showSftp: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
sftpUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
supportsImmediateQueue: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
let fields = [
|
||||
|
|
|
@ -7,7 +7,10 @@
|
|||
href="#"
|
||||
@click.prevent="changeDirectory('')"
|
||||
>{{ $gettext('Home') }}</a>
|
||||
<template v-for="part in directoryParts">
|
||||
<template
|
||||
v-for="part in directoryParts"
|
||||
:key="part.dir"
|
||||
>
|
||||
▸
|
||||
<a
|
||||
href="#"
|
||||
|
@ -21,7 +24,10 @@
|
|||
import {computed} from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
currentDirectory: String
|
||||
currentDirectory: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['change-directory']);
|
||||
|
|
|
@ -90,8 +90,14 @@ import {useAxios} from "~/vendor/axios";
|
|||
import {useNotify} from "~/vendor/bootstrapVue";
|
||||
|
||||
const props = defineProps({
|
||||
customFields: Array,
|
||||
playlists: Array
|
||||
customFields: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
playlists: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['relist']);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue