mirror of
https://framagit.org/les/gancio.git
synced 2025-01-31 16:42:22 +01:00
improve admin resource management
This commit is contained in:
parent
2e85e0318b
commit
6c36739372
6 changed files with 110 additions and 148 deletions
|
@ -4,7 +4,8 @@ All notable changes to this project will be documented in this file.
|
|||
|
||||
- fix AP resource removal
|
||||
- improve AP resource UI
|
||||
|
||||
- fix Docker setup
|
||||
- update deps
|
||||
|
||||
### 1.0 (alpha)
|
||||
This release is a complete rewrite of frontend UI and many internals, main changes are:
|
||||
|
|
|
@ -13,8 +13,7 @@
|
|||
dense :headers='instancesHeader'
|
||||
@click:row='instanceSelected')
|
||||
template(v-slot:item.blocked="{ item }")
|
||||
v-icon(v-if='item.blocked') mdi-checkbox-intermediate
|
||||
v-icon(v-else) mdi-checkbox-blank-outline
|
||||
v-icon(@click='toggleBlock(item)') {{item.blocked ? 'mdi-checkbox-intermediate' : 'mdi-checkbox-blank-outline'}}
|
||||
|
||||
v-col(:span='11')
|
||||
span {{$t('common.users')}}
|
||||
|
@ -24,49 +23,39 @@
|
|||
:search='usersFilter'
|
||||
:hide-default-footer='users.length<5'
|
||||
dense :headers='usersHeader')
|
||||
//- template(v-slot:item.username="{item}")
|
||||
//- a(:href='item.ap_id') {{item.object.preferredUsername}}
|
||||
//- el-table-column(:label="$t('common.user')" width='150')
|
||||
//- template(slot-scope='data')
|
||||
//- span(slot='reference')
|
||||
//- a(:href='data.row.object.id' target='_blank') {{data.row.object.name}}
|
||||
//- small ({{data.row.object.preferredUsername}})
|
||||
//- el-table-column(:label="$t('common.resources')" width='90')
|
||||
//- template(slot-scope='data')
|
||||
//- span {{data.row.resources.length}}
|
||||
//- el-table-column(:label="$t('common.actions')" width='200')
|
||||
//- template(slot-scope='data')
|
||||
//- el-button-group
|
||||
//- el-button(size='mini'
|
||||
//- :type='data.row.blocked?"danger":"warning"'
|
||||
//- @click='toggleUserBlock(data.row)') {{data.row.blocked?$t('admin.unblock'):$t('admin.block')}}
|
||||
template(v-slot:item.blocked="{ item }")
|
||||
v-icon(@click='toggleUserBlock(item)') {{item.blocked?'mdi-checkbox-intermediate':'mdi-checkbox-blank-outline'}}
|
||||
|
||||
div
|
||||
v-card-title {{$t('common.resources')}}
|
||||
v-data-table(:items='resources'
|
||||
v-data-table(:items='resources' dense
|
||||
:headers='resourcesHeader'
|
||||
:hide-default-footer='resources.length<10'
|
||||
)
|
||||
//- el-table-column(:label="$t('common.event')")
|
||||
//- template(slot-scope='data')
|
||||
//- span {{data.row.event}}
|
||||
//- el-table-column(:label="$t('common.resources')")
|
||||
//- template(slot-scope='data')
|
||||
//- span(:class='{disabled: data.row.hidden}' v-html='data.row.data.content')
|
||||
//- el-table-column(:label="$t('common.user')" width='200')
|
||||
//- template(slot-scope='data')
|
||||
//- span(:class='{disabled: data.row.hidden}' v-html='data.row.data.actor')
|
||||
//- el-table-column(:label="$t('common.actions')" width="150")
|
||||
//- template(slot-scope='data')
|
||||
//- el-dropdown
|
||||
//- el-button(type="primary" icon="el-icon-arrow-down" size='mini') {{$t('common.moderation')}}
|
||||
//- el-dropdown-menu(slot='dropdown')
|
||||
//- el-dropdown-item(v-if='!data.row.hidden' icon='el-icon-remove' @click.native='hideResource(data.row, true)') {{$t('admin.hide_resource')}}
|
||||
//- el-dropdown-item(v-else icon='el-icon-success' @click.native='hideResource(data.row, false)') {{$t('admin.show_resource')}}
|
||||
//- el-dropdown-item(icon='el-icon-delete' @click.native='deleteResource(data.row)') {{$t('admin.delete_resource')}}
|
||||
//- el-dropdown-item(icon='el-icon-lock' @click.native='toggleUserBlock(data.row.ap_user)') {{$t('admin.block_user')}}
|
||||
:items-per-page='10')
|
||||
template(v-slot:item.content='{ item }')
|
||||
span(v-html='item.data.content')
|
||||
template(v-slot:item.user='{ item }')
|
||||
span {{item.ap_user.preferredUsername}}
|
||||
template(v-slot:item.event='{ item }')
|
||||
span {{item.event.title}}
|
||||
template(v-slot:item.actions='{ item }')
|
||||
v-menu(offset-y)
|
||||
template(v-slot:activator="{ on }")
|
||||
v-btn.mr-2(v-on='on' color='primary' small icon)
|
||||
v-icon mdi-dots-vertical
|
||||
v-list
|
||||
v-list-item(v-if='!item.hidden' @click='hideResource(item, true)')
|
||||
v-list-item-title <v-icon left>mdi-eye-off</v-icon> {{$t('admin.hide_resource')}}
|
||||
v-list-item(v-else @click='hideResource(item, false)')
|
||||
v-list-item-title <v-icon left>mdi-eye</v-icon> {{$t('admin.show_resource')}}
|
||||
v-list-item(@click='deleteResource(item)')
|
||||
v-list-item-title <v-icon left>mdi-delete</v-icon> {{$t('admin.delete_resource')}}
|
||||
//- v-list-item(@click='toggleUserBlock(item.ap_user)')
|
||||
//- v-list-item-title <v-icon left>mdi-lock</v-icon> {{$t('admin.block_user')}}
|
||||
</template>
|
||||
<script>
|
||||
import { mapState, mapActions } from 'vuex'
|
||||
import get from 'lodash/get'
|
||||
|
||||
export default {
|
||||
name: 'Moderation',
|
||||
|
@ -76,7 +65,8 @@ export default {
|
|||
resources: [],
|
||||
users: [],
|
||||
usersHeader: [
|
||||
{ value: 'object.preferredUsername', text: 'Name' }
|
||||
{ value: 'object.preferredUsername', text: 'Name' },
|
||||
{ value: 'blocked', text: 'Blocked' }
|
||||
],
|
||||
instancesHeader: [
|
||||
{ value: 'domain', text: 'Domain' },
|
||||
|
@ -85,44 +75,24 @@ export default {
|
|||
{ value: 'users', text: 'known users' }
|
||||
],
|
||||
resourcesHeader: [
|
||||
{ value: '', text: '' }
|
||||
{ value: 'created', text: 'Created' },
|
||||
{ value: 'event', text: 'Event' },
|
||||
{ value: 'user', text: 'user' },
|
||||
{ value: 'content', text: 'Content' },
|
||||
{ value: 'actions', text: 'Actions' }
|
||||
],
|
||||
usersFilter: '',
|
||||
instancesFilter: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['settings'])
|
||||
// paginatedResources () {
|
||||
// return this.resources.slice((this.resourcePage - 1) * this.perPage,
|
||||
// this.resourcePage * this.perPage)
|
||||
// },
|
||||
// paginatedInstances () {
|
||||
// return this.filteredInstances.slice((this.instancePage - 1) * this.perPage,
|
||||
// this.instancePage * this.perPage)
|
||||
// },
|
||||
// filteredUsers () {
|
||||
// if (!this.usersFilter) { return this.users }
|
||||
// const usersFilter = this.usersFilter.toLowerCase()
|
||||
// return this.users.filter(user => user.name.includes(usersFilter) || user.preferredName.includes(usersFilter))
|
||||
// },
|
||||
// filteredInstances () {
|
||||
// if (!this.instancesFilter) { return this.instances }
|
||||
// const instancesFilter = this.instancesFilter.toLowerCase()
|
||||
// return this.instances.filter(instance =>
|
||||
// (instance.name && instance.name.includes(instancesFilter)) ||
|
||||
// (instance.domain && instance.domain.includes(instancesFilter))
|
||||
// )
|
||||
// },
|
||||
// paginatedSelectedUsers () {
|
||||
// return this.filteredUsers.slice((this.userPage - 1) * this.perPage,
|
||||
// this.userPage * this.perPage)
|
||||
// }
|
||||
},
|
||||
computed: mapState(['settings']),
|
||||
async mounted () {
|
||||
this.instances = await this.$axios.$get('/instances')
|
||||
if (!this.instances.length) {
|
||||
return
|
||||
}
|
||||
this.users = await this.$axios.$get(`/instances/${this.instances[0].domain}`)
|
||||
this.resources = await this.$axios.$get('/resources')
|
||||
// this.users = await this.$axios.$get('/users')
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['setSetting']),
|
||||
|
@ -133,6 +103,7 @@ export default {
|
|||
},
|
||||
async instanceSelected (instance) {
|
||||
this.users = await this.$axios.$get(`/instances/${instance.domain}`)
|
||||
this.resources = await this.$axios.$get('/resources', { filters: { instance: instance.domain } })
|
||||
},
|
||||
async hideResource (resource, hidden) {
|
||||
await this.$axios.$put(`/resources/${resource.id}`, { hidden })
|
||||
|
@ -140,7 +111,7 @@ export default {
|
|||
},
|
||||
async toggleUserBlock (ap_user) {
|
||||
if (!ap_user.blocked) {
|
||||
const ret = await this.$root.$confirm('admin.user_block_confirm')
|
||||
const ret = await this.$root.$confirm('admin.user_block_confirm', { user: get(ap_user, 'object.preferredUsername', ap_user.preferredUsername) })
|
||||
if (!ret) { return }
|
||||
}
|
||||
await this.$axios.post('/instances/toggle_user_block', { ap_id: ap_user.ap_id })
|
||||
|
@ -153,6 +124,10 @@ export default {
|
|||
this.resources = this.resources.filter(r => r.id !== resource.id)
|
||||
},
|
||||
async toggleBlock (instance) {
|
||||
if (!instance.blocked) {
|
||||
const ret = await this.$root.$confirm('admin.instance_block_confirm', { instance: instance.domain })
|
||||
if (!ret) { return }
|
||||
}
|
||||
await this.$axios.post('/instances/toggle_block', { instance: instance.domain, blocked: !instance.blocked })
|
||||
instance.blocked = !instance.blocked
|
||||
}
|
||||
|
|
|
@ -195,7 +195,8 @@
|
|||
"resources": "Resources",
|
||||
"user_blocked": "User {user} blocked",
|
||||
"favicon": "Logo",
|
||||
"user_block_confirm": "Are you sure you want block this user?",
|
||||
"user_block_confirm": "Are you sure you want block user {user}?",
|
||||
"instance_block_confirm": "Are you sure you want block instance {instance}?",
|
||||
"delete_announcement_confirm": "Are you sure you want to remove the announcement?",
|
||||
"announcement_remove_ok": "Announce removed",
|
||||
"announcement_description": "In this section you can insert announcements to remain on the homepage",
|
||||
|
|
|
@ -191,15 +191,16 @@
|
|||
"hide_resource": "Nascondi risorsa",
|
||||
"show_resource": "Mostra risorsa",
|
||||
"delete_resource": "Elimina risorsa",
|
||||
"delete_resource_confirm": "Sei sicuro/a di voler eliminare questa risorsa?",
|
||||
"delete_resource_confirm": "Sei sicurǝ di voler eliminare questa risorsa?",
|
||||
"block_user": "Blocca questo utente",
|
||||
"user_blocked": "L'utente {user} non potrà più aggiungere risorse",
|
||||
"filter_instances": "Filtra istanze",
|
||||
"filter_users": "Filtra utenti",
|
||||
"instance_name": "Nome istanza",
|
||||
"favicon": "Logo",
|
||||
"user_block_confirm": "Sei sicuro/a di voler bloccare l'utente?",
|
||||
"delete_announcement_confirm": "Sei sicuro/a di voler eliminare l'annuncio?",
|
||||
"user_block_confirm": "Confermi di voler bloccare l'utente {user}?",
|
||||
"instance_block_confirm": "Confermi di voler bloccare l'istanza {instance}?",
|
||||
"delete_announcement_confirm": " Vuoieliminare questo l'annuncio?",
|
||||
"announcement_remove_ok": "Annuncio rimosso",
|
||||
"announcement_description": "In questa sezione puoi inserire annunci che rimarranno in homepage",
|
||||
"instance_locale": "Lingua predefinita",
|
||||
|
@ -216,7 +217,7 @@
|
|||
"is_dark": "Tema scuro",
|
||||
"add_link": "Aggiungi link",
|
||||
"footer_links": "Collegamenti del piè di pagina",
|
||||
"delete_footer_link_confirm": "Sei sicuro/a di eliminare questo collegamento?",
|
||||
"delete_footer_link_confirm": "Vuoi eliminare questo collegamento?",
|
||||
"edit_place": "Modifica luogo",
|
||||
"new_announcement": "Nuovo annuncio"
|
||||
},
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
const Resource = require('../models/resource')
|
||||
const APUser = require('../models/ap_user')
|
||||
const Event = require('../models/event')
|
||||
const get = require('lodash/get')
|
||||
|
||||
const resourceController = {
|
||||
async hide (req, res) {
|
||||
|
@ -17,12 +20,28 @@ const resourceController = {
|
|||
},
|
||||
|
||||
async getAll (req, res) {
|
||||
const limit = req.body.limit || 100
|
||||
const limit = req.body.limit || 1000
|
||||
// const where = {}
|
||||
// if (req.params.instanceId) {
|
||||
// where =
|
||||
//
|
||||
const resources = await Resource.findAll({ limit })
|
||||
let resources = await Resource.findAll({ limit, include: [APUser, Event], order: [['createdAt', 'DESC']] })
|
||||
resources = resources.map(r => ({
|
||||
id: r.id,
|
||||
hidden: r.hidden,
|
||||
created: r.createdAt,
|
||||
data: {
|
||||
content: r.data.content
|
||||
},
|
||||
event: {
|
||||
id: r.event.id,
|
||||
title: r.event.title
|
||||
},
|
||||
ap_user: {
|
||||
ap_id: get(r, 'ap_user.ap_id', ''),
|
||||
preferredUsername: get(r, 'ap_user.object.preferredUsername', '')
|
||||
}
|
||||
}))
|
||||
res.json(resources)
|
||||
}
|
||||
}
|
||||
|
|
105
yarn.lock
105
yarn.lock
|
@ -3712,16 +3712,11 @@ core-js-compat@^3.12.1, core-js-compat@^3.9.0, core-js-compat@^3.9.1:
|
|||
browserslist "^4.16.6"
|
||||
semver "7.0.0"
|
||||
|
||||
core-js@3.14.0, core-js@^3.6.5:
|
||||
core-js@3.14.0, core-js@^2.6.5, core-js@^3.6.5:
|
||||
version "3.14.0"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c"
|
||||
integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA==
|
||||
|
||||
core-js@^2.6.5:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
|
||||
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
|
||||
|
||||
core-util-is@1.0.2, core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
|
@ -3937,22 +3932,7 @@ css-tree@^1.1.2:
|
|||
mdn-data "2.0.14"
|
||||
source-map "^0.6.1"
|
||||
|
||||
css-what@2.1:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
|
||||
integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
|
||||
|
||||
css-what@^3.2.1:
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
|
||||
integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
|
||||
|
||||
css-what@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233"
|
||||
integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==
|
||||
|
||||
css-what@^5.0.0:
|
||||
css-what@2.1, css-what@5.0.1, css-what@^3.2.1, css-what@^4.0.0, css-what@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad"
|
||||
integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==
|
||||
|
@ -5739,15 +5719,7 @@ github-from-package@0.0.0:
|
|||
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
|
||||
integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
|
||||
|
||||
glob-parent@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
|
||||
integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
|
||||
dependencies:
|
||||
is-glob "^3.1.0"
|
||||
path-dirname "^1.0.0"
|
||||
|
||||
glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0:
|
||||
glob-parent@5.1.2, glob-parent@^3.1.0, glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
|
@ -6341,10 +6313,10 @@ infer-owner@^1.0.3, infer-owner@^1.0.4:
|
|||
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
|
||||
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
|
||||
|
||||
inflection@1.12.0:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416"
|
||||
integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=
|
||||
inflection@1.13.1:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.1.tgz#c5cadd80888a90cf84c2e96e340d7edc85d5f0cb"
|
||||
integrity sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==
|
||||
|
||||
inflight@^1.0.4:
|
||||
version "1.0.6"
|
||||
|
@ -6584,7 +6556,7 @@ is-extendable@^1.0.1:
|
|||
dependencies:
|
||||
is-plain-object "^2.0.4"
|
||||
|
||||
is-extglob@^2.1.0, is-extglob@^2.1.1:
|
||||
is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
|
||||
|
@ -6616,13 +6588,6 @@ is-generator@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3"
|
||||
integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=
|
||||
|
||||
is-glob@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
|
||||
integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
|
||||
dependencies:
|
||||
is-extglob "^2.1.0"
|
||||
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
|
||||
|
@ -8813,11 +8778,6 @@ path-browserify@0.0.1:
|
|||
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
|
||||
integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
|
||||
|
||||
path-dirname@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
|
||||
integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
|
||||
|
||||
path-exists@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||
|
@ -9670,10 +9630,10 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
|
|||
indexes-of "^1.0.1"
|
||||
uniq "^1.0.1"
|
||||
|
||||
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6:
|
||||
version "7.0.35"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
|
||||
integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
|
||||
postcss@7.0.36, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6:
|
||||
version "7.0.36"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
|
||||
integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
source-map "^0.6.1"
|
||||
|
@ -9752,10 +9712,10 @@ prettier@^1.18.2:
|
|||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
|
||||
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
|
||||
|
||||
prettier@^2.3.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
|
||||
integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
|
||||
prettier@^2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
|
||||
integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==
|
||||
|
||||
pretty-bytes@^5.6.0:
|
||||
version "5.6.0"
|
||||
|
@ -10827,14 +10787,14 @@ sequelize-slugify@^1.5.0:
|
|||
dependencies:
|
||||
sluglife "^0.9.8"
|
||||
|
||||
sequelize@^6.6.2:
|
||||
version "6.6.2"
|
||||
resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.6.2.tgz#3681b0a4aeb106e31079d3a537d88542051dab2e"
|
||||
integrity sha512-H/zrzmTK+tis9PJaSigkuXI57nKBvNCtPQol0yxCvau1iWLzSOuq8t3tMOVeQ+Ep8QH2HoD9/+FCCIAqzUr/BQ==
|
||||
sequelize@^6.6.4:
|
||||
version "6.6.4"
|
||||
resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.6.4.tgz#616072aa5e7226db1050cc485942ee2fd04d475f"
|
||||
integrity sha512-SOSu3tclOjHJfvuIITUlAsh2Q642gFxjpNN+IM1quFZ7jU5Pep7FIAwBK8UWgTpNc9TK9rUr1cyLB/G25CGicA==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
dottie "^2.0.0"
|
||||
inflection "1.12.0"
|
||||
inflection "1.13.1"
|
||||
lodash "^4.17.20"
|
||||
moment "^2.26.0"
|
||||
moment-timezone "^0.5.31"
|
||||
|
@ -12001,10 +11961,10 @@ typedarray@^0.0.6:
|
|||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typescript@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
|
||||
integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
|
||||
typescript@^4.3.5:
|
||||
version "4.3.5"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
|
||||
integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==
|
||||
|
||||
ua-parser-js@^0.7.28:
|
||||
version "0.7.28"
|
||||
|
@ -12368,10 +12328,10 @@ vue-hot-reload-api@^2.3.0:
|
|||
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
|
||||
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
|
||||
|
||||
vue-i18n@^8.24.4:
|
||||
version "8.24.4"
|
||||
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.24.4.tgz#b158614c1df7db183d9cadddbb73e1d540269492"
|
||||
integrity sha512-RZE94WUAGxEiBAANxQ0pptbRwDkNKNSXl3fnJslpFOxVMF6UkUtMDSuYGuW2blDrVgweIXVpethOVkYoNNT9xw==
|
||||
vue-i18n@^8.24.5:
|
||||
version "8.24.5"
|
||||
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.24.5.tgz#7127a666d5be2199be69be39e439a419a90ff931"
|
||||
integrity sha512-p8W5xOmniuZ8fj76VXe0vBL3bRWVU87jHuC/v8VwmhKVH2iMQsKnheB1U+umxDBqC/5g9K+NwzokepcLxnBAVQ==
|
||||
|
||||
vue-loader@^15.9.7:
|
||||
version "15.9.7"
|
||||
|
@ -12477,11 +12437,16 @@ vuetify-loader@^1.7.1, vuetify-loader@^1.7.2:
|
|||
file-loader "^6.2.0"
|
||||
loader-utils "^2.0.0"
|
||||
|
||||
vuetify@^2.5.3, vuetify@^2.5.4:
|
||||
vuetify@^2.5.3:
|
||||
version "2.5.4"
|
||||
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.5.4.tgz#037cc8d430b61188ab15b9a8cc1ee67e620fa6e7"
|
||||
integrity sha512-0EIXSCuy9LGXHgWbGiOdUUbGI6feodWoB3s+0Kr7rIppQWsq54tjPaQ1NobjAuDYKG7xsqkr+j0rnJUhc+GIag==
|
||||
|
||||
vuetify@^2.5.6:
|
||||
version "2.5.6"
|
||||
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.5.6.tgz#9cbb1eacece6c42028216312b9be23e35a7f5cf4"
|
||||
integrity sha512-2T8ML5PYuJ/AdMVH3ZIvzHnsM0nX8t4Xzj+0HFFGfLT7jLlptCFpG+JE8+kyrgGZlbUgulyOwCUu8hJkVsReFA==
|
||||
|
||||
vuex@^3.6.2:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71"
|
||||
|
|
Loading…
Reference in a new issue