nx: move setup to this
Signed-off-by: Varun Patil <radialapps@gmail.com>pull/807/merge
parent
a930eab8d2
commit
fd1671625a
|
@ -23,6 +23,7 @@ return [
|
||||||
['name' => 'Page#thisday', 'url' => '/thisday', 'verb' => 'GET'],
|
['name' => 'Page#thisday', 'url' => '/thisday', 'verb' => 'GET'],
|
||||||
['name' => 'Page#map', 'url' => '/map', 'verb' => 'GET'],
|
['name' => 'Page#map', 'url' => '/map', 'verb' => 'GET'],
|
||||||
['name' => 'Page#explore', 'url' => '/explore', 'verb' => 'GET'],
|
['name' => 'Page#explore', 'url' => '/explore', 'verb' => 'GET'],
|
||||||
|
['name' => 'Page#nxsetup', 'url' => '/nxsetup', 'verb' => 'GET'],
|
||||||
|
|
||||||
// Routes with params
|
// Routes with params
|
||||||
w(['name' => 'Page#folder', 'url' => '/folders/{path}', 'verb' => 'GET'], 'path'),
|
w(['name' => 'Page#folder', 'url' => '/folders/{path}', 'verb' => 'GET'], 'path'),
|
||||||
|
|
|
@ -234,4 +234,16 @@ class PageController extends Controller
|
||||||
{
|
{
|
||||||
return $this->main();
|
return $this->main();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @PublicPage
|
||||||
|
*
|
||||||
|
* @NoAdminRequired
|
||||||
|
*
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*/
|
||||||
|
public function nxsetup()
|
||||||
|
{
|
||||||
|
return $this->main();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<FirstStart v-if="isFirstStart" />
|
<router-view v-if="onlyRouterView" />
|
||||||
|
|
||||||
|
<FirstStart v-else-if="isFirstStart" />
|
||||||
|
|
||||||
<NcContent
|
<NcContent
|
||||||
app-name="memories"
|
app-name="memories"
|
||||||
|
@ -195,6 +197,10 @@ export default defineComponent({
|
||||||
return t('memories', 'People');
|
return t('memories', 'People');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onlyRouterView(): boolean {
|
||||||
|
return ['nxsetup'].includes(this.$route.name ?? '');
|
||||||
|
},
|
||||||
|
|
||||||
isFirstStart(): boolean {
|
isFirstStart(): boolean {
|
||||||
return this.config.timeline_path === '_empty_' && !this.routeIsPublic && !this.$route.query.noinit;
|
return this.config.timeline_path === '_empty_' && !this.routeIsPublic && !this.$route.query.noinit;
|
||||||
},
|
},
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
import type { Component } from 'vue';
|
import type { Component } from 'vue';
|
||||||
|
|
||||||
import axios from '@nextcloud/axios';
|
|
||||||
import { translate as t } from '@nextcloud/l10n';
|
import { translate as t } from '@nextcloud/l10n';
|
||||||
|
|
||||||
import ClusterHList from './ClusterHList.vue';
|
import ClusterHList from './ClusterHList.vue';
|
||||||
|
@ -58,7 +57,6 @@ import MapIcon from 'vue-material-design-icons/Map.vue';
|
||||||
import CogIcon from 'vue-material-design-icons/Cog.vue';
|
import CogIcon from 'vue-material-design-icons/Cog.vue';
|
||||||
|
|
||||||
import config from '../services/static-config';
|
import config from '../services/static-config';
|
||||||
import { API } from '../services/API';
|
|
||||||
import * as dav from '../services/dav';
|
import * as dav from '../services/dav';
|
||||||
|
|
||||||
import type { ICluster, IConfig } from '../types';
|
import type { ICluster, IConfig } from '../types';
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
<template>
|
||||||
|
<div class="nxsetup-outer">
|
||||||
|
<XImg class="banner" :src="banner" :svg-tag="true" />
|
||||||
|
|
||||||
|
<div class="setup-section" v-if="step === 1">
|
||||||
|
{{ t('memories', 'You are now logged in to the server!') }}
|
||||||
|
<br /><br />
|
||||||
|
{{
|
||||||
|
t(
|
||||||
|
'memories',
|
||||||
|
'You can set up automatic uploads from this device using the Nextcloud mobile app. Click the button below to download the app, or skip this step and continue.'
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div class="buttons">
|
||||||
|
<NcButton
|
||||||
|
type="secondary"
|
||||||
|
class="button"
|
||||||
|
href="https://play.google.com/store/apps/details?id=com.nextcloud.client"
|
||||||
|
>
|
||||||
|
{{ t('memories', 'Set up automatic upload') }}
|
||||||
|
</NcButton>
|
||||||
|
|
||||||
|
<NcButton type="primary" class="button" @click="step++">
|
||||||
|
{{ t('memories', 'Continue') }}
|
||||||
|
</NcButton>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setup-section" v-else-if="step === 2">
|
||||||
|
{{ t('memories', 'Choose the folders on this device to show on your timeline.') }}
|
||||||
|
{{
|
||||||
|
t(
|
||||||
|
'memories',
|
||||||
|
'If no folders are visible here, you may need to grant the app storage permissions, or wait for the app to index your files.'
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
<br /><br />
|
||||||
|
{{ t('memories', 'You can always change this in settings. Note that this does not affect automatic uploading.') }}
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div id="folder-list">
|
||||||
|
<NcCheckboxRadioSwitch
|
||||||
|
v-for="folder in localFolders"
|
||||||
|
:key="folder.id"
|
||||||
|
:checked.sync="folder.enabled"
|
||||||
|
@update:checked="updateDeviceFolders"
|
||||||
|
type="switch"
|
||||||
|
>
|
||||||
|
{{ folder.name }}
|
||||||
|
</NcCheckboxRadioSwitch>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="buttons">
|
||||||
|
<NcButton type="secondary" class="button" @click="step++">
|
||||||
|
{{ t('memories', 'Finish') }}
|
||||||
|
</NcButton>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
import * as nativex from '../native';
|
||||||
|
import * as util from '../services/utils';
|
||||||
|
|
||||||
|
import NcButton from '@nextcloud/vue/dist/Components/NcButton';
|
||||||
|
const NcCheckboxRadioSwitch = () => import('@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch');
|
||||||
|
|
||||||
|
import banner from '../assets/banner.svg';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'NXSetup',
|
||||||
|
|
||||||
|
components: {
|
||||||
|
NcButton,
|
||||||
|
NcCheckboxRadioSwitch,
|
||||||
|
},
|
||||||
|
|
||||||
|
data: () => ({
|
||||||
|
banner,
|
||||||
|
step: util.uid ? 1 : 0,
|
||||||
|
localFolders: [] as nativex.LocalFolderConfig[],
|
||||||
|
}),
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
step() {
|
||||||
|
switch (this.step) {
|
||||||
|
case 2:
|
||||||
|
this.localFolders = nativex.getLocalFolders();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
this.$router.push('/');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeMount() {
|
||||||
|
if (!nativex.has() || !this.step) {
|
||||||
|
this.$router.push('/');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
updateDeviceFolders() {
|
||||||
|
nativex.setLocalFolders(this.localFolders);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.nxsetup-outer {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: var(--color-background-plain);
|
||||||
|
color: var(--color-primary-text);
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.setup-section {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 90%;
|
||||||
|
max-width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner {
|
||||||
|
padding: 30px 20px;
|
||||||
|
:deep > svg {
|
||||||
|
width: 60%;
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons {
|
||||||
|
margin-top: 20px;
|
||||||
|
.button {
|
||||||
|
margin: 10px auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#folder-list {
|
||||||
|
background: var(--color-main-background);
|
||||||
|
color: var(--color-main-text);
|
||||||
|
padding: 10px;
|
||||||
|
margin-top: 15px;
|
||||||
|
border-radius: 20px;
|
||||||
|
|
||||||
|
.checkbox-radio-switch {
|
||||||
|
margin-left: 10px;
|
||||||
|
:deep .checkbox-radio-switch__label {
|
||||||
|
min-height: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -6,6 +6,7 @@ import Timeline from './components/Timeline.vue';
|
||||||
import Explore from './components/Explore.vue';
|
import Explore from './components/Explore.vue';
|
||||||
import SplitTimeline from './components/SplitTimeline.vue';
|
import SplitTimeline from './components/SplitTimeline.vue';
|
||||||
import ClusterView from './components/ClusterView.vue';
|
import ClusterView from './components/ClusterView.vue';
|
||||||
|
import NativeXSetup from './native/Setup.vue';
|
||||||
|
|
||||||
Vue.use(Router);
|
Vue.use(Router);
|
||||||
|
|
||||||
|
@ -150,5 +151,14 @@ export default new Router({
|
||||||
rootTitle: t('memories', 'Explore'),
|
rootTitle: t('memories', 'Explore'),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
path: '/nxsetup',
|
||||||
|
component: NativeXSetup,
|
||||||
|
name: 'nxsetup',
|
||||||
|
props: (route) => ({
|
||||||
|
rootTitle: t('memories', 'Setup'),
|
||||||
|
}),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue