cleaner next/prev event

This commit is contained in:
les
2020-06-03 22:52:10 +02:00
parent c953fbf319
commit d2218cffea
4 changed files with 42 additions and 40 deletions

View File

@@ -1,5 +1,8 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
### UNRELEASED
-
### 0.23.0 ### 0.23.0
- send AP Event Object instead of Note - send AP Event Object instead of Note
- show only future unconfirmed events in admin panel - show only future unconfirmed events in admin panel

View File

@@ -2,13 +2,13 @@
el-container#eventDetail.h-event el-container#eventDetail.h-event
el-header el-header
span.title.p-summary.p-name {{event.title}} .title {{event.title}}
#arrow #arrow
nuxt-link.mr-1(:to='`/event/${prev}`') nuxt-link.mr-1(:to='`/event/${event.prev}`')
el-button(circle plain size='small' icon='el-icon-arrow-left' :disabled='!prev') el-button(circle plain size='small' icon='el-icon-arrow-left' :disabled='!event.prev')
nuxt-link(:to='`/event/${next}`') nuxt-link(:to='`/event/${event.next}`')
el-button(circle plain size='small' :disabled='!next' icon='el-icon-arrow-right') el-button(circle plain size='small' :disabled='!event.next' icon='el-icon-arrow-right')
el-main el-main
el-dialog.embedDialog(:visible.sync='showEmbed') el-dialog.embedDialog(:visible.sync='showEmbed')
@@ -87,7 +87,7 @@
</template> </template>
<script> <script>
import { mapState, mapGetters } from 'vuex' import { mapState } from 'vuex'
import EventAdmin from './eventAdmin' import EventAdmin from './eventAdmin'
import EmbedEvent from './embedEvent' import EmbedEvent from './embedEvent'
import FollowMe from '../../components/FollowMe' import FollowMe from '../../components/FollowMe'
@@ -192,42 +192,10 @@ export default {
} }
}, },
computed: { computed: {
...mapGetters(['filteredEvents']),
...mapState(['settings']), ...mapState(['settings']),
plainDescription () { plainDescription () {
return htmlToText.fromString(this.event.description.replace('\n', '').slice(0, 1000)) return htmlToText.fromString(this.event.description.replace('\n', '').slice(0, 1000))
}, },
next () {
let found = false
const event = this.filteredEvents.find(e => {
if (found) {
return e
}
found =
e.start_datetime === this.event.start_datetime &&
e.id === this.event.id
})
if (!event) {
return false
}
return event.id
},
prev () {
let event = false
this.filteredEvents.find(e => {
if (
e.start_datetime === this.event.start_datetime &&
e.id === this.event.id
) {
return true
}
event = e
})
if (!event) {
return false
}
return event.id
},
imgPath () { imgPath () {
return '/media/' + this.event.image_path return '/media/' + this.event.image_path
}, },

View File

@@ -91,6 +91,7 @@ const eventController = {
const is_admin = req.user && req.user.is_admin const is_admin = req.user && req.user.is_admin
const id = Number(req.params.event_id) const id = Number(req.params.event_id)
let event let event
try { try {
event = await Event.findByPk(id, { event = await Event.findByPk(id, {
attributes: { attributes: {
@@ -113,8 +114,36 @@ const eventController = {
} catch (e) { } catch (e) {
return res.sendStatus(400) return res.sendStatus(400)
} }
if (!event) {
return res.sendStatus(400)
}
// get prev and next event
const next = await Event.findOne({
attributes: ['id'],
where: {
is_visible: true,
parentId: null,
start_datetime: { [Op.gt]: event.start_datetime }
},
order: [['start_datetime', 'ASC']]
})
const prev = await Event.findOne({
attributes: ['id'],
where: {
is_visible: true,
parentId: null,
start_datetime: { [Op.lt]: event.start_datetime }
},
order: [['start_datetime', 'DESC']]
})
if (event && (event.is_visible || is_admin)) { if (event && (event.is_visible || is_admin)) {
event = event.get() event = event.get()
event.next = next && next.id
event.prev = prev && prev.id
event.tags = event.tags.map(t => t.tag) event.tags = event.tags.map(t => t.tag)
if (format === 'json') { if (format === 'json') {
res.json(event) res.json(event)

View File

@@ -115,11 +115,12 @@ const Helpers = {
return res.data return res.data
}) })
.catch(e => { .catch(e => {
debug(e) debug(`[ERR] ${URL}: ${e}`)
return false return false
}) })
if (fedi_user) { if (fedi_user) {
debug(`Create a new AP User => ${URL}`)
fedi_user = await APUser.create({ ap_id: URL, object: fedi_user }) fedi_user = await APUser.create({ ap_id: URL, object: fedi_user })
} }
return fedi_user return fedi_user
@@ -136,6 +137,7 @@ const Helpers = {
if (instance) { return instance } if (instance) { return instance }
} }
// TODO: is this a standard? don't think so
instance = await axios.get(`${instance_url}/api/v1/instance`, { headers: { Accept: 'application/json' } }) instance = await axios.get(`${instance_url}/api/v1/instance`, { headers: { Accept: 'application/json' } })
.then(res => res.data) .then(res => res.data)
.then(instance => { .then(instance => {
@@ -169,7 +171,7 @@ const Helpers = {
} }
// little hack -> https://github.com/joyent/node-http-signature/pull/83 // little hack -> https://github.com/joyent/node-http-signature/pull/83
req.headers.authorization = 'Signature ' + req.headers.signature // req.headers.authorization = 'Signature ' + req.headers.signature
req.fedi_user = user req.fedi_user = user