add nova
This commit is contained in:
300
nova/resources/js/mixins/Deletable.js
Normal file
300
nova/resources/js/mixins/Deletable.js
Normal file
@@ -0,0 +1,300 @@
|
||||
import filter from 'lodash/filter'
|
||||
import map from 'lodash/map'
|
||||
|
||||
export default {
|
||||
methods: {
|
||||
/**
|
||||
* Open the delete menu modal.
|
||||
*/
|
||||
openDeleteModal() {
|
||||
this.deleteModalOpen = true
|
||||
},
|
||||
|
||||
/**
|
||||
* Delete the given resources.
|
||||
*/
|
||||
deleteResources(resources, callback = null) {
|
||||
if (this.viaManyToMany) {
|
||||
return this.detachResources(resources)
|
||||
}
|
||||
|
||||
return Nova.request({
|
||||
url: '/nova-api/' + this.resourceName,
|
||||
method: 'delete',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: mapResources(resources) },
|
||||
},
|
||||
})
|
||||
.then(
|
||||
callback
|
||||
? callback
|
||||
: () => {
|
||||
this.getResources()
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
Nova.$emit('resources-deleted')
|
||||
})
|
||||
.finally(() => {
|
||||
this.deleteModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Delete the selected resources.
|
||||
*/
|
||||
deleteSelectedResources() {
|
||||
this.deleteResources(this.selectedResources)
|
||||
},
|
||||
|
||||
/**
|
||||
* Delete all of the matching resources.
|
||||
*/
|
||||
deleteAllMatchingResources() {
|
||||
if (this.viaManyToMany) {
|
||||
return this.detachAllMatchingResources()
|
||||
}
|
||||
|
||||
return Nova.request({
|
||||
url: this.deleteAllMatchingResourcesEndpoint,
|
||||
method: 'delete',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: 'all' },
|
||||
},
|
||||
})
|
||||
.then(() => {
|
||||
this.getResources()
|
||||
})
|
||||
.then(() => {
|
||||
Nova.$emit('resources-deleted')
|
||||
})
|
||||
.finally(() => {
|
||||
this.deleteModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Detach the given resources.
|
||||
*/
|
||||
detachResources(resources) {
|
||||
return Nova.request({
|
||||
url: '/nova-api/' + this.resourceName + '/detach',
|
||||
method: 'delete',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: mapResources(resources) },
|
||||
...{ pivots: mapPivots(resources) },
|
||||
},
|
||||
})
|
||||
.then(() => {
|
||||
this.getResources()
|
||||
})
|
||||
.then(() => {
|
||||
Nova.$emit('resources-detached')
|
||||
})
|
||||
.finally(() => {
|
||||
this.deleteModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Detach all of the matching resources.
|
||||
*/
|
||||
detachAllMatchingResources() {
|
||||
return Nova.request({
|
||||
url: '/nova-api/' + this.resourceName + '/detach',
|
||||
method: 'delete',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: 'all' },
|
||||
},
|
||||
})
|
||||
.then(() => {
|
||||
this.getResources()
|
||||
})
|
||||
.then(() => {
|
||||
Nova.$emit('resources-detached')
|
||||
})
|
||||
.finally(() => {
|
||||
this.deleteModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Force delete the given resources.
|
||||
*/
|
||||
forceDeleteResources(resources, callback = null) {
|
||||
return Nova.request({
|
||||
url: '/nova-api/' + this.resourceName + '/force',
|
||||
method: 'delete',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: mapResources(resources) },
|
||||
},
|
||||
})
|
||||
.then(
|
||||
callback
|
||||
? callback
|
||||
: () => {
|
||||
this.getResources()
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
Nova.$emit('resources-deleted')
|
||||
})
|
||||
.finally(() => {
|
||||
this.deleteModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Force delete the selected resources.
|
||||
*/
|
||||
forceDeleteSelectedResources() {
|
||||
this.forceDeleteResources(this.selectedResources)
|
||||
},
|
||||
|
||||
/**
|
||||
* Force delete all of the matching resources.
|
||||
*/
|
||||
forceDeleteAllMatchingResources() {
|
||||
return Nova.request({
|
||||
url: this.forceDeleteSelectedResourcesEndpoint,
|
||||
method: 'delete',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: 'all' },
|
||||
},
|
||||
})
|
||||
.then(() => {
|
||||
this.getResources()
|
||||
})
|
||||
.then(() => {
|
||||
Nova.$emit('resources-deleted')
|
||||
})
|
||||
.finally(() => {
|
||||
this.deleteModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Restore the given resources.
|
||||
*/
|
||||
restoreResources(resources, callback = null) {
|
||||
return Nova.request({
|
||||
url: '/nova-api/' + this.resourceName + '/restore',
|
||||
method: 'put',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: mapResources(resources) },
|
||||
},
|
||||
})
|
||||
.then(
|
||||
callback
|
||||
? callback
|
||||
: () => {
|
||||
this.getResources()
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
Nova.$emit('resources-restored')
|
||||
})
|
||||
.finally(() => {
|
||||
this.restoreModalOpen = false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* Restore the selected resources.
|
||||
*/
|
||||
restoreSelectedResources() {
|
||||
this.restoreResources(this.selectedResources)
|
||||
},
|
||||
|
||||
/**
|
||||
* Restore all of the matching resources.
|
||||
*/
|
||||
restoreAllMatchingResources() {
|
||||
return Nova.request({
|
||||
url: this.restoreAllMatchingResourcesEndpoint,
|
||||
method: 'put',
|
||||
params: {
|
||||
...this.deletableQueryString,
|
||||
...{ resources: 'all' },
|
||||
},
|
||||
})
|
||||
.then(() => {
|
||||
this.getResources()
|
||||
})
|
||||
.then(() => {
|
||||
Nova.$emit('resources-restored')
|
||||
})
|
||||
.finally(() => {
|
||||
this.restoreModalOpen = false
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
computed: {
|
||||
/**
|
||||
* Get the delete all matching resources endpoint.
|
||||
*/
|
||||
deleteAllMatchingResourcesEndpoint() {
|
||||
if (this.lens) {
|
||||
return '/nova-api/' + this.resourceName + '/lens/' + this.lens
|
||||
}
|
||||
|
||||
return '/nova-api/' + this.resourceName
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the force delete all of the matching resources endpoint.
|
||||
*/
|
||||
forceDeleteSelectedResourcesEndpoint() {
|
||||
if (this.lens) {
|
||||
return (
|
||||
'/nova-api/' + this.resourceName + '/lens/' + this.lens + '/force'
|
||||
)
|
||||
}
|
||||
|
||||
return '/nova-api/' + this.resourceName + '/force'
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the restore all of the matching resources endpoint.
|
||||
*/
|
||||
restoreAllMatchingResourcesEndpoint() {
|
||||
if (this.lens) {
|
||||
return (
|
||||
'/nova-api/' + this.resourceName + '/lens/' + this.lens + '/restore'
|
||||
)
|
||||
}
|
||||
|
||||
return '/nova-api/' + this.resourceName + '/restore'
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the query string for a deletable resource request.
|
||||
*/
|
||||
deletableQueryString() {
|
||||
return {
|
||||
search: this.currentSearch,
|
||||
filters: this.encodedFilters,
|
||||
trashed: this.currentTrashed,
|
||||
viaResource: this.viaResource,
|
||||
viaResourceId: this.viaResourceId,
|
||||
viaRelationship: this.viaRelationship,
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
function mapResources(resources) {
|
||||
return map(resources, resource => resource.id.value)
|
||||
}
|
||||
|
||||
function mapPivots(resources) {
|
||||
return filter(map(resources, resource => resource.id.pivotValue))
|
||||
}
|
||||
Reference in New Issue
Block a user