mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
104 lines
2.8 KiB
Vue
104 lines
2.8 KiB
Vue
<template>
|
|
<base-card>
|
|
<h2 class="title">{{ $t('settings.upload.name') }}</h2>
|
|
<ds-input
|
|
id="import"
|
|
v-model="dataImport"
|
|
type="textarea"
|
|
rows="3"
|
|
:placeholder="$t('settings.upload.placeholder')"
|
|
/>
|
|
<base-button secondary filled icon="upload" @click="importData" :disabled="processing || dataImport === ''">
|
|
{{ $t('settings.upload.submit') }}
|
|
</base-button>
|
|
<ds-space v-if="messagesPresent" margin="large" />
|
|
<base-card v-if="messagesPresent">
|
|
<ds-text v-for="message in messages" size="small" :key="message.key">
|
|
{{ message.text }}
|
|
</ds-text>
|
|
</base-card>
|
|
</base-card>
|
|
</template>
|
|
|
|
<script>
|
|
import PostMutations from '~/graphql/PostMutations.js'
|
|
import { isEmpty } from 'lodash'
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
dataImport: '',
|
|
messages: [],
|
|
processing: false,
|
|
messageCounter: 0,
|
|
}
|
|
},
|
|
computed: {
|
|
messagesPresent() {
|
|
return !isEmpty(this.messages)
|
|
},
|
|
},
|
|
methods: {
|
|
importData(data) {
|
|
this.messages = []
|
|
this.processing = true
|
|
let input, userId, posts
|
|
if (this.dataImport === '') {
|
|
this.$toast.error(this.$t('settings.upload.isEmpty'))
|
|
this.processing = false
|
|
return
|
|
}
|
|
try {
|
|
input = JSON.parse(this.dataImport)
|
|
} catch (err) {
|
|
this.$toast.error(err.message)
|
|
this.processing = false
|
|
return
|
|
}
|
|
this.messages.push({ text: 'input parsed successfully', key: this.messageCounter++ })
|
|
try {
|
|
userId = input.user.id
|
|
} catch (err) {
|
|
this.$toast.error(err.message)
|
|
this.processing = false
|
|
return
|
|
}
|
|
this.messages.push({ text: 'user ID is ' + userId, key: this.messageCounter++ })
|
|
try {
|
|
posts = input.posts.filter((post) => post.author.id === userId)
|
|
} catch (err) {
|
|
this.$toast.error(err.message)
|
|
this.processing = false
|
|
return
|
|
}
|
|
this.messages.push({
|
|
text: String(posts.length) + ' posts found to import',
|
|
key: this.messageCounter++,
|
|
})
|
|
posts.forEach(async (post) => {
|
|
const { title, content, language } = post
|
|
const categoryIds = post.categories.map((cat) => cat.id)
|
|
this.$apollo
|
|
.mutate({
|
|
mutation: PostMutations().CreatePost,
|
|
variables: {
|
|
title,
|
|
content,
|
|
categoryIds,
|
|
id: null,
|
|
language,
|
|
},
|
|
})
|
|
.then(({ data }) => {
|
|
this.messages.push({ text: 'IMPORTING: ' + title, key: this.messageCounter++ })
|
|
})
|
|
.catch((err) => {
|
|
this.$toast.error(err.message)
|
|
})
|
|
})
|
|
this.processing = false
|
|
},
|
|
},
|
|
}
|
|
</script>
|