forked from vikunja/frontend
114 lines
2.6 KiB
Vue
114 lines
2.6 KiB
Vue
<template>
|
|
<div class="content has-text-centered">
|
|
<h2>
|
|
{{ welcomePrefix }}
|
|
{{ userInfo.name !== "" ? userInfo.name : userInfo.username }}!
|
|
</h2>
|
|
<add-task
|
|
:list="defaultList"
|
|
@taskAdded="updateTaskList"
|
|
class="is-max-width-desktop"
|
|
/>
|
|
<template v-if="!hasTasks">
|
|
<p>You can create a new list for your new tasks:</p>
|
|
<x-button
|
|
:to="{ name: 'list.create', params: { id: defaultNamespaceId } }"
|
|
:shadow="false"
|
|
class="ml-2"
|
|
v-if="defaultNamespaceId > 0"
|
|
>
|
|
Create a new list
|
|
</x-button>
|
|
<p class="mt-4" v-if="migratorsEnabled">
|
|
Or import your lists and tasks from other services into Vikunja:
|
|
</p>
|
|
<x-button
|
|
v-if="migratorsEnabled"
|
|
:to="{ name: 'migrate.start' }"
|
|
:shadow="false"
|
|
>
|
|
Import your data into Vikunja
|
|
</x-button>
|
|
</template>
|
|
<ShowTasks :show-all="true" v-if="hasLists" :key="showTasksKey" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapState } from 'vuex';
|
|
import ShowTasks from './tasks/ShowTasks';
|
|
import AddTask from '../components/tasks/add-task';
|
|
import ListModel from '../models/list';
|
|
|
|
export default {
|
|
name: 'Home',
|
|
components: {
|
|
ShowTasks,
|
|
AddTask,
|
|
},
|
|
data() {
|
|
return {
|
|
loading: false,
|
|
currentDate: new Date(),
|
|
tasks: [],
|
|
defaultList: ListModel,
|
|
updateWelcomeInterval: 1000,
|
|
welcomePrefix: 'Hi',
|
|
showTasksKey: 0,
|
|
};
|
|
},
|
|
created() {
|
|
this.defaultList = new ListModel();
|
|
this.defaultList.id = 1;
|
|
},
|
|
mounted() {
|
|
const timer = window.setTimeout(
|
|
this.updateWelcome,
|
|
this.updateWelcomeInterval,
|
|
);
|
|
this.$on('hook:destroyed', () => window.clearTimeout(timer));
|
|
},
|
|
computed: mapState({
|
|
migratorsEnabled: state =>
|
|
state.config.availableMigrators !== null &&
|
|
state.config.availableMigrators.length > 0,
|
|
authenticated: state => state.auth.authenticated,
|
|
userInfo: state => state.auth.info,
|
|
hasTasks: state => state.hasTasks,
|
|
defaultNamespaceId: state => {
|
|
if (state.namespaces.namespaces.length === 0) {
|
|
return 0;
|
|
}
|
|
|
|
return state.namespaces.namespaces[0].id;
|
|
},
|
|
hasLists: state => {
|
|
if (state.namespaces.namespaces.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
return state.namespaces.namespaces[0].lists.length > 0;
|
|
},
|
|
}),
|
|
methods: {
|
|
updateTaskList() {
|
|
this.showTasksKey += 1;
|
|
},
|
|
updateWelcome() {
|
|
this.currentDate = new Date();
|
|
if (this.currentDate.getHours() < 12) {
|
|
this.welcomePrefix = 'Good Morning';
|
|
} else if (this.currentDate.getHours() < 17) {
|
|
this.welcomePrefix = 'Good Afternoon';
|
|
} else {
|
|
this.welcomePrefix = 'Good Evening';
|
|
}
|
|
this.$options.timer = window.setTimeout(
|
|
this.updateDateTime,
|
|
this.updateWelcomeInterval,
|
|
);
|
|
},
|
|
},
|
|
};
|
|
</script>
|