Use global dashboard user profile in apps view

This commit is contained in:
Johannes Zellner
2025-07-02 16:39:43 +02:00
parent f2fbe6dfee
commit 1a2e2f4d51

View File

@@ -1,19 +1,17 @@
<script setup>
import { ref, computed, useTemplateRef, onMounted, onUnmounted } from 'vue';
import { ref, computed, useTemplateRef, onMounted, onUnmounted, inject } from 'vue';
import { Button, ButtonGroup, SingleSelect, Icon, TableView, TextInput } from 'pankow';
import { API_ORIGIN, APP_TYPES, HSTATES, ISTATES, RSTATES } from '../constants.js';
import AppsModel from '../models/AppsModel.js';
import ApplinksModel from '../models/ApplinksModel.js';
import DomainsModel from '../models/DomainsModel.js';
import ProfileModel from '../models/ProfileModel.js';
import ApplinkDialog from '../components/ApplinkDialog.vue';
import PostInstallDialog from '../components/PostInstallDialog.vue';
const appsModel = AppsModel.create();
const domainsModel = DomainsModel.create();
const applinksModel = ApplinksModel.create();
const profileModel = ProfileModel.create();
const VIEW_TYPE = {
LIST: 'list',
@@ -24,7 +22,7 @@ let refreshInterval;
const ready = ref(false);
const filter = ref('');
const profile = ref({});
const profile = inject('profile');
const apps = ref([]);
const viewType = ref((localStorage.appsView && (localStorage.appsView === VIEW_TYPE.GRID || localStorage.appsView === VIEW_TYPE.LIST)) ? localStorage.appsView : VIEW_TYPE.GRID);
const tagFilter = ref('');
@@ -196,14 +194,9 @@ function toggleView() {
}
onMounted(async () => {
let [error, result] = await profileModel.get();
if (error) return console.error(error);
profile.value = result;
await refreshApps();
[error, result] = await domainsModel.list();
const [error, result] = await domainsModel.list();
if (error) return console.error(error);
domainFilterOptions.value = domainFilterOptions.value.concat(result.map(d => { d.id = d.domain; return d; }));
@@ -232,9 +225,9 @@ onUnmounted(() => {
{{ $t('apps.title') }}
<div style="display: flex; gap: 4px; flex-wrap: wrap; margin-top: 10px;">
<TextInput v-model="filter" :placeholder="$t('apps.searchPlaceholder')" />
<SingleSelect class="pankow-no-mobile" v-if="profile.isAtLeastAdmin && tagFilterOptions.length > 1" :options="tagFilterOptions" option-key="id" option-label="name" v-model="tagFilter" />
<SingleSelect class="pankow-no-mobile" v-if="profile.isAtLeastAdmin" :options="tagFilterOptions" option-key="id" option-label="name" v-model="tagFilter" />
<SingleSelect class="pankow-no-mobile" v-if="profile.isAtLeastAdmin" :options="stateFilterOptions" option-key="id" v-model="stateFilter" />
<SingleSelect class="pankow-no-mobile" v-if="profile.isAtLeastAdmin && domainFilterOptions.length > 2" :options="domainFilterOptions" option-key="id" option-label="domain" v-model="domainFilter" />
<SingleSelect class="pankow-no-mobile" v-if="profile.isAtLeastAdmin" :options="domainFilterOptions" option-key="id" option-label="domain" v-model="domainFilter" />
<Button tool outline secondary @click="toggleView()" :icon="viewType === VIEW_TYPE.GRID ? 'fas fa-list' : 'fas fa-grip'"></Button>
</div>
</h1>