From 0b87adf00617e4870e0d68e1b364e5f45f1c44df Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Pasquier <contact@jbpasquier.eu> Date: Wed, 6 Mar 2024 18:56:42 +0100 Subject: [PATCH] feature: redirect from product to producer --- src/components/main.js | 8 ++++ src/components/partials/redirector.js | 54 +++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/components/partials/redirector.js diff --git a/src/components/main.js b/src/components/main.js index 19668f2..cd77758 100644 --- a/src/components/main.js +++ b/src/components/main.js @@ -58,6 +58,7 @@ utils.importCore().then(async (core) => { <solid-router default-route="${this.route}-producers-list" route-prefix=${this.routePrefix ?? nothing}> <solid-route name="${this.route}-producers-list"></solid-route> <solid-route name="${this.route}-products-list"></solid-route> + <solid-route name="${this.route}-products-redirector" use-id></solid-route> <solid-route name="${this.route}-producer-details" use-id @@ -420,6 +421,12 @@ utils.importCore().then(async (core) => { }); }, 0); let render = html` + <div + id="${this.route}-products-redirector" + data-view="${this.route}-products-redirector" + > + <custom-redirector bind-resources="" uniq="${this.uniq}"></custom-redirector> + </div> <div id="${this.route}-products-list" data-view="${this.route}-products-list" @@ -531,6 +538,7 @@ utils.importCore().then(async (core) => { class-set-from="row no-margin-bottom" widget-dfc-b:suppliedBy.dfc-b:name="solid-display-value" class-dfc-b:suppliedBy.dfc-b:name="col s12 truncate" + next="${this.route}-products-redirector" ></solid-display> </div> </div> diff --git a/src/components/partials/redirector.js b/src/components/partials/redirector.js new file mode 100644 index 0000000..8812089 --- /dev/null +++ b/src/components/partials/redirector.js @@ -0,0 +1,54 @@ +import { LitElement, html, nothing } from "lit"; +import { Task } from "@lit/task"; +import { importCore, CLIENT_CONTEXT } from '@helpers/utils'; + +importCore().then(core => { + // Custom widget for wholesale + customElements.define( + "custom-redirector", + class extends LitElement { + constructor() { + super(); + } + + static properties = { + dataSrc: { attribute: "data-src" }, + uniq: { attribute: "uniq" }, + } + + _getResource = new Task(this, { + task: async ([dataSrc]) => { + if(!dataSrc) return; + const resource = await core.store.getData(dataSrc, CLIENT_CONTEXT); + let response = await (await resource["dfc-b:suppliedBy"])["@id"]; + return response; + }, + args: () => [this.dataSrc] + }) + + render() { + if(!this.dataSrc || !this.uniq) return nothing; + + + return this._getResource.render({ + pending: () => html`<div class="progress"><div class="indeterminate"></div></div>`, + complete: (resource) => { + if(resource) { + console.log(resource); + window.dispatchEvent( + new CustomEvent('requestNavigation', { + detail: { + resource: {"@id": resource}, + route: `${this.uniq}-producer-details` + } + }), + ); + } + return nothing; + }, + error: (e) => html`<p>Error while loading redirector.</p>` + }); + } + } + ); +}); -- GitLab