/home/bdqbpbxa/api-uniferx.goodface.com.ua/vendor/laravel/nova/resources/js/mixins/Deletable.js
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))
}