feat(frontend): various
This commit is contained in:
Generated
+17
-4
@@ -1873,6 +1873,14 @@
|
||||
"three": "0.124.0"
|
||||
}
|
||||
},
|
||||
"@tryghost/content-api": {
|
||||
"version": "1.5.12",
|
||||
"resolved": "https://registry.npmjs.org/@tryghost/content-api/-/content-api-1.5.12.tgz",
|
||||
"integrity": "sha512-Ys0QiYu3EKQm+TPDW5kApH+SUYB9Nt8sBqltZ+2f8Trr+xL1/tBcNl82UyEuSZDd6dbzCO3aTDiFi/c7XKvntQ==",
|
||||
"requires": {
|
||||
"axios": "^0.21.1"
|
||||
}
|
||||
},
|
||||
"@types/accepts": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
|
||||
@@ -3805,6 +3813,14 @@
|
||||
"integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
|
||||
"dev": true
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.21.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
|
||||
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"babel-eslint": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
|
||||
@@ -7613,7 +7629,6 @@
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz",
|
||||
"integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "^3.0.0"
|
||||
},
|
||||
@@ -7622,7 +7637,6 @@
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
@@ -10091,8 +10105,7 @@
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||
"dev": true
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"multicast-dns": {
|
||||
"version": "6.2.3",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@speckle/viewer": "^2.0.5",
|
||||
"@tryghost/content-api": "^1.5.12",
|
||||
"@vuejs-community/vue-filter-date-format": "^1.6.3",
|
||||
"@vuejs-community/vue-filter-date-parse": "^1.1.6",
|
||||
"apexcharts": "^3.26.3",
|
||||
|
||||
@@ -23,6 +23,11 @@ export default {
|
||||
}
|
||||
</script>
|
||||
<style lang="css">
|
||||
|
||||
.v-timeline:before{
|
||||
top: 40px !important;
|
||||
}
|
||||
|
||||
.marked-preview h1 {
|
||||
padding-bottom: 10px;
|
||||
padding-top: 10px;
|
||||
|
||||
@@ -5,27 +5,37 @@
|
||||
<v-card flat tile color="transparent" class="pa-0">
|
||||
<div class="d-flex flex-column justify-space-between align-center mb-10">
|
||||
<v-img contain max-height="200" src="@/assets/emptybox.png" v-if="!errorType"></v-img>
|
||||
<v-img contain max-height="200" src="@/assets/lockbox.png" v-else-if="errorType=='access'"></v-img>
|
||||
<v-img contain max-height="200" src="@/assets/404box.png" v-else-if="errorType=='404'"></v-img>
|
||||
<v-img
|
||||
contain
|
||||
max-height="200"
|
||||
src="@/assets/lockbox.png"
|
||||
v-else-if="errorType == 'access'"
|
||||
></v-img>
|
||||
<v-img
|
||||
contain
|
||||
max-height="200"
|
||||
src="@/assets/404box.png"
|
||||
v-else-if="errorType == '404'"
|
||||
></v-img>
|
||||
</div>
|
||||
<div class="pl-4 text-center mb-2 space-grotesk">
|
||||
<slot name="default"></slot>
|
||||
</div>
|
||||
<slot name="actions">
|
||||
<v-list rounded class="transparent">
|
||||
<v-list-item link class="primary mb-4" dark to="/">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-home</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Home</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Go to the homepage
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</slot>
|
||||
<v-container style="max-width: 500px">
|
||||
<slot name="actions">
|
||||
<v-list rounded class="transparent">
|
||||
<v-list-item link class="primary mb-4" dark to="/">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-home</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Home</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">Go to the homepage</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</slot>
|
||||
</v-container>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
<template>
|
||||
<v-card rounded="lg" style="overflow: hidden" class="transparent elevation-0">
|
||||
<p class="caption">Latest Tutorials:</p>
|
||||
<div v-for="post in posts" :key="post.uuid">
|
||||
<v-hover v-slot="{ hover }">
|
||||
<v-card class="my-5">
|
||||
<v-img
|
||||
:src="post.feature_image"
|
||||
height="100"
|
||||
:gradient="`to top right, ${
|
||||
$vuetify.theme.dark
|
||||
? 'rgba(100,115,201,.33), rgba(25,32,72,.7)'
|
||||
: 'rgba(100,115,231,.15), rgba(25,32,72,.05)'
|
||||
}`"
|
||||
></v-img>
|
||||
<v-toolbar flat>
|
||||
<v-toolbar-title class="body-2">
|
||||
<a :href="post.url" target="_blank" class="text-decoration-none">
|
||||
<b>{{ post.title }}</b>
|
||||
</a>
|
||||
<br />
|
||||
<div class="caption grey--text">
|
||||
{{ post.excerpt }}
|
||||
</div>
|
||||
</v-toolbar-title>
|
||||
<v-spacer />
|
||||
<v-btn icon :href="post.url" target="_blank">
|
||||
<v-icon small>mdi-open-in-new</v-icon>
|
||||
</v-btn>
|
||||
<v-spacer></v-spacer>
|
||||
</v-toolbar>
|
||||
</v-card>
|
||||
</v-hover>
|
||||
</div>
|
||||
<v-toolbar class="my-4" rounded="lg" dense flat>
|
||||
<v-toolbar-title class="body-2">
|
||||
<a href="https://speckle.systems/tutorials" target="_blank" class="text-decoration-none">
|
||||
More Tutorials
|
||||
</a>
|
||||
</v-toolbar-title>
|
||||
<v-btn icon href="https://speckle.systems/tutorials" target="_blank">
|
||||
<v-icon small>mdi-arrow-right</v-icon>
|
||||
</v-btn>
|
||||
</v-toolbar>
|
||||
</v-card>
|
||||
</template>
|
||||
<script>
|
||||
import GhostContentAPI from '@tryghost/content-api'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
posts: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.api = new GhostContentAPI({
|
||||
url: 'https://speckle.systems',
|
||||
key: 'bf4ca76b9606d0c13b0edf5dc1',
|
||||
version: 'v3'
|
||||
})
|
||||
|
||||
this.api.posts
|
||||
.browse({
|
||||
filter: 'tag:tutorials',
|
||||
limit: 4
|
||||
})
|
||||
.then((posts) => {
|
||||
this.posts = posts
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err)
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<v-timeline-item>
|
||||
<v-timeline-item medium>
|
||||
<template #icon>
|
||||
<user-avatar v-if="user" :id="user.id" :avatar="user.avatar" :name="user.name" :size="30" />
|
||||
<user-avatar v-if="user" :id="user.id" :avatar="user.avatar" :name="user.name" />
|
||||
</template>
|
||||
<v-row class="pt-1 timeline-activity">
|
||||
<v-col cols="12" class="mb-0 pb-0">
|
||||
@@ -22,51 +22,53 @@
|
||||
<v-card
|
||||
v-if="lastActivity.actionType.includes('stream_permissions') && stream"
|
||||
class="activity-card"
|
||||
flat
|
||||
:flat="$vuetify.theme.dark"
|
||||
>
|
||||
<v-card-text class="pa-5 body-1">
|
||||
<v-row
|
||||
v-for="activityItem in activityGroup"
|
||||
:key="activityItem.time"
|
||||
class="align-center"
|
||||
>
|
||||
<v-col cols="12" md="10">
|
||||
<user-pill
|
||||
class="mr-3"
|
||||
:user-id="activityItem.info.targetUser"
|
||||
:color="
|
||||
lastActivity.actionType === 'stream_permissions_add' ? 'success' : 'error'
|
||||
"
|
||||
></user-pill>
|
||||
<v-container>
|
||||
<v-row
|
||||
v-for="activityItem in activityGroup"
|
||||
:key="activityItem.time"
|
||||
class="align-center"
|
||||
>
|
||||
<v-col cols="12" md="10">
|
||||
<user-pill
|
||||
class="mr-3"
|
||||
:user-id="activityItem.info.targetUser"
|
||||
:color="
|
||||
lastActivity.actionType === 'stream_permissions_add' ? 'success' : 'error'
|
||||
"
|
||||
></user-pill>
|
||||
|
||||
<span v-if="$vuetify.breakpoint.smAndUp" class="mr-3 body-2 font-italic">
|
||||
{{
|
||||
lastActivity.actionType === 'stream_permissions_add'
|
||||
? 'user added as'
|
||||
: 'user removed'
|
||||
}}
|
||||
</span>
|
||||
<v-chip v-if="activityItem.info.role" small outlined class="my-2">
|
||||
<v-icon small left>mdi-account-key-outline</v-icon>
|
||||
{{ activityItem.info.role.split(':')[1] }}
|
||||
</v-chip>
|
||||
</v-col>
|
||||
<v-col v-if="$vuetify.breakpoint.mdAndUp" cols="2" class="text-right">
|
||||
<v-btn
|
||||
v-if="
|
||||
activityItem.info.targetUser &&
|
||||
activityItem.actionType === `stream_permissions_add`
|
||||
"
|
||||
text
|
||||
outlined
|
||||
small
|
||||
:to="'/profile/' + activityItem.info.targetUser"
|
||||
color="primary"
|
||||
>
|
||||
view
|
||||
</v-btn>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<span v-if="$vuetify.breakpoint.smAndUp" class="mr-3 body-2 font-italic">
|
||||
{{
|
||||
lastActivity.actionType === 'stream_permissions_add'
|
||||
? 'user added as'
|
||||
: 'user removed'
|
||||
}}
|
||||
</span>
|
||||
<v-chip v-if="activityItem.info.role" small outlined class="my-2">
|
||||
<v-icon small left>mdi-account-key-outline</v-icon>
|
||||
{{ activityItem.info.role.split(':')[1] }}
|
||||
</v-chip>
|
||||
</v-col>
|
||||
<v-col v-if="$vuetify.breakpoint.mdAndUp" cols="2" class="text-right">
|
||||
<v-btn
|
||||
v-if="
|
||||
activityItem.info.targetUser &&
|
||||
activityItem.actionType === `stream_permissions_add`
|
||||
"
|
||||
text
|
||||
outlined
|
||||
small
|
||||
:to="'/profile/' + activityItem.info.targetUser"
|
||||
color="primary"
|
||||
>
|
||||
view
|
||||
</v-btn>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-container>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
|
||||
@@ -74,34 +76,36 @@
|
||||
<v-card
|
||||
v-else-if="lastActivity.resourceType === 'stream' && stream"
|
||||
class="activity-card"
|
||||
flat
|
||||
:flat="$vuetify.theme.dark"
|
||||
>
|
||||
<v-card-text class="pa-5 body-1">
|
||||
<v-row class="align-center">
|
||||
<router-link :to="url" class="title">
|
||||
<v-icon color="primary" small>mdi-compare-vertical</v-icon>
|
||||
{{ stream.name }}
|
||||
</router-link>
|
||||
<span class="ml-3 body-2 font-italic">{{ lastActivityBrief.actionText }}</span>
|
||||
<v-container>
|
||||
<v-row class="align-center">
|
||||
<router-link :to="url" class="title">
|
||||
<v-icon color="primary" small>mdi-compare-vertical</v-icon>
|
||||
{{ stream.name }}
|
||||
</router-link>
|
||||
<span class="ml-3 body-2 font-italic">{{ lastActivityBrief.actionText }}</span>
|
||||
|
||||
<v-spacer />
|
||||
<v-spacer />
|
||||
|
||||
<v-btn
|
||||
v-if="
|
||||
(lastActivity.actionType === `stream_create` ||
|
||||
lastActivity.actionType === `stream_update`) &&
|
||||
$vuetify.breakpoint.mdAndUp
|
||||
"
|
||||
text
|
||||
outlined
|
||||
small
|
||||
exact
|
||||
:to="url"
|
||||
color="primary"
|
||||
>
|
||||
view
|
||||
</v-btn>
|
||||
</v-row>
|
||||
<v-btn
|
||||
v-if="
|
||||
(lastActivity.actionType === `stream_create` ||
|
||||
lastActivity.actionType === `stream_update`) &&
|
||||
$vuetify.breakpoint.mdAndUp
|
||||
"
|
||||
text
|
||||
outlined
|
||||
small
|
||||
exact
|
||||
:to="url"
|
||||
color="primary"
|
||||
>
|
||||
view
|
||||
</v-btn>
|
||||
</v-row>
|
||||
</v-container>
|
||||
|
||||
<div class="mt-3">
|
||||
<div
|
||||
@@ -157,16 +161,20 @@
|
||||
</v-card>
|
||||
|
||||
<!-- BRANCHES -->
|
||||
<v-card v-else-if="lastActivity.resourceType === 'branch'" class="activity-card" flat>
|
||||
<v-card-text>
|
||||
<v-card
|
||||
v-else-if="lastActivity.resourceType === 'branch'"
|
||||
class="activity-card"
|
||||
:flat="$vuetify.theme.dark"
|
||||
>
|
||||
<v-card-text class="pa-5 body-1">
|
||||
<v-chip :to="url" :color="lastActivityBrief.color">
|
||||
<v-icon small class="mr-2 float-left" light>{{ lastActivityBrief.icon }}</v-icon>
|
||||
{{ branchName }}
|
||||
</v-chip>
|
||||
<!-- <span class="ml-3 body-2 font-italic">{{ lastActivityBrief.actionText }}</span> -->
|
||||
<span class="ml-3 body-2 font-italic">{{ lastActivityBrief.actionText }}</span>
|
||||
<div class="mt-3">
|
||||
<div
|
||||
v-for="activityItem in activityGroup.slice(0, 1)"
|
||||
v-for="activityItem in activityGroup"
|
||||
:key="activityItem.time"
|
||||
v-html="updatedDescription(activityItem)"
|
||||
></div>
|
||||
@@ -175,7 +183,11 @@
|
||||
</v-card>
|
||||
|
||||
<!-- COMMITS -->
|
||||
<v-card v-else-if="lastActivity.resourceType === 'commit'" class="activity-card" flat>
|
||||
<v-card
|
||||
v-else-if="lastActivity.resourceType === 'commit'"
|
||||
class="activity-card"
|
||||
:flat="$vuetify.theme.dark"
|
||||
>
|
||||
<v-container>
|
||||
<v-row class="align-center">
|
||||
<v-col sm="10" cols="12">
|
||||
|
||||
@@ -9,57 +9,68 @@
|
||||
<div class="pl-4 text-center mb-2 space-grotesk">
|
||||
<slot name="default"></slot>
|
||||
</div>
|
||||
<slot name="actions">
|
||||
<v-list rounded class="transparent">
|
||||
<v-list-item link class="primary mb-4" dark>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-swap-horizontal</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Connectors</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Learn how to send data from various software.
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-container style="max-width: 500px">
|
||||
<slot name="actions">
|
||||
<v-list rounded class="transparent">
|
||||
<v-list-item link class="primary mb-4" dark>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-swap-horizontal</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Connectors</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Learn how to send data from various software.
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
|
||||
<v-list-item link :class="`grey ${ $vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-school</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Tutorials</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Tips, tricks and how-to guides.
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item
|
||||
link
|
||||
:class="`grey ${$vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`"
|
||||
>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-school</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Tutorials</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Tips, tricks and how-to guides.
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
|
||||
<v-list-item link :class="`grey ${ $vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-book-open-variant</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Docs</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Documentation and training material for all connectors.
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item
|
||||
link
|
||||
:class="`grey ${$vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`"
|
||||
>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-book-open-variant</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Docs</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Documentation and training material for all connectors.
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
|
||||
<v-list-item link :class="`grey ${ $vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`">
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-forum</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Community</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Our community is friendly and here to help!
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</slot>
|
||||
<v-list-item
|
||||
link
|
||||
:class="`grey ${$vuetify.theme.dark ? 'darken-4' : 'lighten-4'} mb-4`"
|
||||
>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-forum</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>Community</v-list-item-title>
|
||||
<v-list-item-subtitle class="caption">
|
||||
Our community is friendly and here to help!
|
||||
</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</slot>
|
||||
</v-container>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -161,9 +161,13 @@
|
||||
</template>
|
||||
Show viewer help
|
||||
</v-tooltip>
|
||||
<v-dialog v-model="showObjectDetails" width="500">
|
||||
<v-dialog v-model="showObjectDetails" width="500" :fullscreen="$vuetify.breakpoint.smAndDown">
|
||||
<v-card>
|
||||
<v-card-title>Selection Details</v-card-title>
|
||||
<v-toolbar>
|
||||
<v-toolbar-title>Selection Details</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn icon @click="showObjectDetails=false"><v-icon>mdi-close</v-icon></v-btn>
|
||||
</v-toolbar>
|
||||
<v-sheet>
|
||||
<div v-if="selectedObjects.length !== 0">
|
||||
<object-simple-viewer
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<!-- <v-chip v-if="targetUser" pill :color="color"> -->
|
||||
<v-chip v-if="targetUser" pill :color="color">
|
||||
<v-avatar left>
|
||||
<user-avatar
|
||||
:id="targetUser.id"
|
||||
@@ -9,8 +9,8 @@
|
||||
/>
|
||||
</v-avatar>
|
||||
|
||||
<!-- {{ targetUser.name }} -->
|
||||
<!-- </v-chip> -->
|
||||
{{ targetUser.name }}
|
||||
</v-chip>
|
||||
</template>
|
||||
<script>
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
@@ -1,43 +1,39 @@
|
||||
<template>
|
||||
<div>
|
||||
<v-dialog v-model="showDialog" max-width="400">
|
||||
<v-card>
|
||||
<v-toolbar color="primary" dark>
|
||||
<v-app-bar-nav-icon style="pointer-events: none">
|
||||
<v-icon>mdi-email</v-icon>
|
||||
</v-app-bar-nav-icon>
|
||||
<v-toolbar-title>Invite Colleagues!</v-toolbar-title>
|
||||
</v-toolbar>
|
||||
<v-alert v-model="showError" dismissible type="error" :class="`${success ? 'mb-0' : ''}`">
|
||||
{{ error }}
|
||||
</v-alert>
|
||||
<v-alert v-model="success" timeout="3000" dismissible type="success">
|
||||
Great! An invite link has been sent.
|
||||
</v-alert>
|
||||
<v-form ref="form" v-model="valid" class="px-2" @submit.prevent="sendInvite">
|
||||
<v-card-text class="pb-0 mb-0">
|
||||
Speckle will send a server invite link to the email below. You can also add a personal
|
||||
message if you want to.
|
||||
</v-card-text>
|
||||
<v-card-text class="pt-0 mt-0">
|
||||
<v-text-field
|
||||
v-model="email"
|
||||
:rules="validation.emailRules"
|
||||
label="email"
|
||||
></v-text-field>
|
||||
<v-text-field
|
||||
v-model="message"
|
||||
:rules="validation.messageRules"
|
||||
label="message"
|
||||
></v-text-field>
|
||||
</v-card-text>
|
||||
<v-card-actions class="pb-3">
|
||||
<v-btn block large color="primary" type="submit">Send invite</v-btn>
|
||||
</v-card-actions>
|
||||
</v-form>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
<v-dialog v-model="showDialog" max-width="400" :fullscreen="$vuetify.breakpoint.smAndDown">
|
||||
<v-card>
|
||||
<v-toolbar color="primary" dark>
|
||||
<v-app-bar-nav-icon style="pointer-events: none">
|
||||
<v-icon>mdi-email</v-icon>
|
||||
</v-app-bar-nav-icon>
|
||||
<v-toolbar-title>Invite Colleagues!</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn icon @click="showDialog = false"><v-icon>mdi-close</v-icon></v-btn>
|
||||
</v-toolbar>
|
||||
<v-alert v-model="showError" dismissible type="error" :class="`${success ? 'mb-0' : ''}`">
|
||||
{{ error }}
|
||||
</v-alert>
|
||||
<v-alert v-model="success" timeout="3000" dismissible type="success">
|
||||
Great! An invite link has been sent.
|
||||
</v-alert>
|
||||
<v-form ref="form" v-model="valid" class="px-2" @submit.prevent="sendInvite">
|
||||
<v-card-text class="pb-0 mb-0">
|
||||
Speckle will send a server invite link to the email below. You can also add a personal
|
||||
message if you want to.
|
||||
</v-card-text>
|
||||
<v-card-text class="pt-0 mt-0">
|
||||
<v-text-field v-model="email" :rules="validation.emailRules" label="email"></v-text-field>
|
||||
<v-text-field
|
||||
v-model="message"
|
||||
:rules="validation.messageRules"
|
||||
label="message"
|
||||
></v-text-field>
|
||||
</v-card-text>
|
||||
<v-card-actions class="pb-3">
|
||||
<v-btn block large color="primary" type="submit">Send invite</v-btn>
|
||||
</v-card-actions>
|
||||
</v-form>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
<v-icon>mdi-plus-box</v-icon>
|
||||
</v-app-bar-nav-icon>
|
||||
<v-toolbar-title>Create a New Stream</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn icon @click="$emit('close')"><v-icon>mdi-close</v-icon></v-btn>
|
||||
</v-toolbar>
|
||||
<v-form ref="form" v-model="valid" lazy-validation class="px-2" @submit.prevent="createStream">
|
||||
<v-card-text>
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-navigation-drawer>
|
||||
|
||||
<v-app-bar app style="padding-left: 56px" flat>
|
||||
<v-app-bar-nav-icon
|
||||
@click="activityNav = !activityNav"
|
||||
@@ -75,66 +76,71 @@
|
||||
</v-app-bar>
|
||||
|
||||
<server-invite-dialog ref="serverInviteDialog" />
|
||||
<v-dialog v-model="newStreamDialog" max-width="500">
|
||||
<v-dialog v-model="newStreamDialog" max-width="500" :fullscreen="$vuetify.breakpoint.smAndDown">
|
||||
<stream-new-dialog
|
||||
v-if="streams"
|
||||
:open="newStreamDialog"
|
||||
:redirect="streams.items.length > 0"
|
||||
@created="newStreamDialog = false"
|
||||
@close="newStreamDialog = false"
|
||||
/>
|
||||
</v-dialog>
|
||||
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<getting-started-wizard />
|
||||
</v-col>
|
||||
<v-col v-if="$apollo.loading && !timeline">
|
||||
<div class="my-5">
|
||||
<v-timeline align-top dense>
|
||||
<v-timeline-item v-for="i in 6" :key="i" medium>
|
||||
<v-skeleton-loader type="article"></v-skeleton-loader>
|
||||
</v-timeline-item>
|
||||
</v-timeline>
|
||||
</div>
|
||||
</v-col>
|
||||
<v-row class="pr-4">
|
||||
<!-- <v-col cols="12"> -->
|
||||
<!-- <getting-started-wizard /> -->
|
||||
<!-- </v-col> -->
|
||||
<v-col v-if="$apollo.loading && !timeline">
|
||||
<div class="my-5">
|
||||
<v-timeline align-top dense>
|
||||
<v-timeline-item v-for="i in 6" :key="i" medium>
|
||||
<v-skeleton-loader type="article"></v-skeleton-loader>
|
||||
</v-timeline-item>
|
||||
</v-timeline>
|
||||
</div>
|
||||
</v-col>
|
||||
|
||||
<v-col v-else-if="timeline && timeline.items.length > 0">
|
||||
<div>
|
||||
<div v-if="timeline" key="activity-list">
|
||||
<v-timeline align-top dense>
|
||||
<list-item-activity
|
||||
v-for="activity in groupedTimeline"
|
||||
:key="activity.time"
|
||||
:activity="activity"
|
||||
:activity-group="activity"
|
||||
class="my-1"
|
||||
></list-item-activity>
|
||||
<infinite-loading
|
||||
v-if="timeline && timeline.items.length < timeline.totalCount"
|
||||
@infinite="infiniteHandler"
|
||||
>
|
||||
<div slot="no-more">This is all your activity!</div>
|
||||
<div slot="no-results">There are no ctivities to load</div>
|
||||
</infinite-loading>
|
||||
</v-timeline>
|
||||
</div>
|
||||
</div>
|
||||
</v-col>
|
||||
<v-col v-else cols="12">
|
||||
<div class="ma-5 headline justify-center text-center">
|
||||
🎈
|
||||
<br />
|
||||
Your feed is empty!
|
||||
<v-col cols="12" lg="9" v-else-if="timeline && timeline.items.length > 0" class="pr-5">
|
||||
<div>
|
||||
<div v-if="timeline" key="activity-list">
|
||||
<v-timeline align-top dense>
|
||||
<list-item-activity
|
||||
v-for="activity in groupedTimeline"
|
||||
:key="activity.time"
|
||||
:activity="activity"
|
||||
:activity-group="activity"
|
||||
class="my-1"
|
||||
></list-item-activity>
|
||||
<infinite-loading
|
||||
v-if="timeline && timeline.items.length < timeline.totalCount"
|
||||
@infinite="infiniteHandler"
|
||||
>
|
||||
<div slot="no-more">This is all your activity!</div>
|
||||
<div slot="no-results">There are no ctivities to load</div>
|
||||
</infinite-loading>
|
||||
</v-timeline>
|
||||
</div>
|
||||
</div>
|
||||
</v-col>
|
||||
<v-col v-else cols="12">
|
||||
<div class="ma-5 headline justify-center text-center">
|
||||
🎈
|
||||
<br />
|
||||
Your feed is empty!
|
||||
|
||||
<br />
|
||||
<span class="subtitle-2 font-italic">
|
||||
Try creating a stream, sending data etc and your activity will show up here.
|
||||
</span>
|
||||
</div>
|
||||
</v-col>
|
||||
</v-row>
|
||||
<br />
|
||||
<span class="subtitle-2 font-italic">
|
||||
Try creating a stream, sending data etc and your activity will show up here.
|
||||
</span>
|
||||
</div>
|
||||
</v-col>
|
||||
<v-col cols="12" lg="3" xl="3" v-show="$vuetify.breakpoint.lgAndUp" class="mt-7">
|
||||
<latest-blogposts></latest-blogposts>
|
||||
<v-card rounded="lg" class="mt-2">
|
||||
<v-card-text class="caption">
|
||||
<p class="mb-0">At <a href="https://speckle.systems" target="_blank" class="text-decoration-none">Speckle</a>, we're working tirelessly to bring you the best open source data platform for AEC. Tell us what you think on our <a href="https://speckle.community" target="_blank" class="text-decoration-none">forum</a>, and don't forget to give us a ⭐️ on <a href="https://github.com/specklesystems/speckle-sharp" target="_blank" class="text-decoration-none">Github</a>!</p>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-container>
|
||||
@@ -149,6 +155,7 @@ import GettingStartedWizard from '../components/GettingStartedWizard'
|
||||
import ServerInviteDialog from '@/components/dialogs/ServerInviteDialog.vue'
|
||||
import StreamNewDialog from '@/components/dialogs/StreamNewDialog'
|
||||
import SearchBar from '@/components/SearchBar'
|
||||
import LatestBlogposts from '@/components/LatestBlogposts'
|
||||
|
||||
export default {
|
||||
name: 'Timeline',
|
||||
@@ -158,7 +165,8 @@ export default {
|
||||
ServerInviteDialog,
|
||||
StreamNewDialog,
|
||||
GettingStartedWizard,
|
||||
SearchBar
|
||||
SearchBar,
|
||||
LatestBlogposts
|
||||
},
|
||||
props: {
|
||||
type: String
|
||||
@@ -195,6 +203,7 @@ export default {
|
||||
resourceType
|
||||
time
|
||||
info
|
||||
message
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -249,6 +258,7 @@ export default {
|
||||
}
|
||||
return prev
|
||||
}, [])
|
||||
// console.log(groupedTimeline)
|
||||
this.groupedTimeline = groupedTimeline
|
||||
},
|
||||
showServerInviteDialog() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<v-row>
|
||||
<v-col cols="12">
|
||||
<v-timeline v-if="stream" align-top dense clipped>
|
||||
<v-timeline v-if="stream" align-top dense>
|
||||
<list-item-activity
|
||||
v-for="activity in groupedActivity"
|
||||
:key="activity.time"
|
||||
@@ -62,6 +62,7 @@ export default {
|
||||
resourceType
|
||||
time
|
||||
info
|
||||
message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<branch-edit-dialog ref="editBranchDialog" />
|
||||
|
||||
<div style="height: 60vh" v-if="latestCommitObjectUrl">
|
||||
<renderer :object-url="latestCommitObjectUrl" />
|
||||
<renderer :object-url="latestCommitObjectUrl" show-selection-helper/>
|
||||
</div>
|
||||
|
||||
<v-list class="pa-0 ma-0" v-if="stream.branch.commits.items.length > 0">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<v-row v-if="stream && stream.commits.totalCount !== 0" no-gutters>
|
||||
<v-col cols="12" class="pa-0 ma-0">
|
||||
<div style="height: 60vh" v-if="latestCommitObjectUrl">
|
||||
<renderer :object-url="latestCommitObjectUrl" />
|
||||
<renderer :object-url="latestCommitObjectUrl" show-selection-helper/>
|
||||
</div>
|
||||
|
||||
<v-list class="pa-0 ma-0">
|
||||
@@ -56,7 +56,7 @@
|
||||
</v-row>
|
||||
</v-card>
|
||||
</v-col>
|
||||
<v-col cols="12">
|
||||
<v-col cols="12" class="pr-10">
|
||||
<v-card class="transparent elevation-0">
|
||||
<v-card-title>Stream Activity</v-card-title>
|
||||
<v-card-text class="caption">Recent event log</v-card-text>
|
||||
|
||||
Reference in New Issue
Block a user