Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reload a ResourceTable programmatically in Laravel Nova?

Tags:

laravel-nova

I have a custom resource-tool (ledger entry tool) that modifies values of a resource as well as insert additional rows into related resources.

"Account" is the main resources. "AccountTransaction" and "AccountLog" both get written to when a ledger entry is created. And through events, the account.balance value is updated.

After a successful post of a ledger entry (using Nova.request) in the resource-tool, I would like the new balance value updated in the account detail panel, as well as the new entries in AccountTransaction and AccountLog to be visible.

The simple way would be to simply reload the page, but I am looking for a more elegant solution.

Is it possible to ask these components to refresh themselves from within my resource-tool vue.js component?

like image 330
Michael Pawlowsky Avatar asked Dec 09 '18 15:12

Michael Pawlowsky


1 Answers

Recently had the same issue, when I referred to this block of code

Nova has vuex stores modules, where they have defined storeFilters. Assigning filters an empty object and then requesting them again "reloads" the resources. Haven't done much more research on this matter, but if you are looking for what I think you are looking for, this should be it.


async reloadResources() {
  this.resourceName = this.$router.currentRoute.params.resourceName || this.$router.currentRoute.name;
  if (this.resourceName) {
    let filters_backup = _.cloneDeep(this.$store.getters[`${this.resourceName}/filters`]);
    let filters_to_change = _.cloneDeep(filters_backup);
    filters_to_change.push({});
    await this.$store.commit(`${this.resourceName}/storeFilters`, filters_to_change);
    await this.$store.commit(`${this.resourceName}/storeFilters`, filters_backup);
  }
},

like image 158
Rosin Avatar answered Oct 10 '22 10:10

Rosin