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