Un semplice esempio di come i componenti UI possono migliorare un'applicazione incorporata consiste nell'utilizzarli per creare una navigazione a schede per le dashboard:
L'esempio seguente aggiunge dashboard a schede a un'estensione TypeScript di base creata utilizzando il framework di estensione di Looker.
Per esaminare questo esempio, assicurati che la configurazione soddisfi i requisiti, quindi segui questi passaggi:
- Crea un'estensione di base di Script.
- Crea il file
src/Dashboards.tsx
per collegare e archiviare le dashboard. - Crea il file
src/Tabs.tsx
per archiviare il componenteTabs
. - Sostituisci il riferimento HelloWorld in
src/App.tsx
. - Aggiorna il file
manifest.lkml
con il diritto di incorporamento. - Pubblica l'estensione nella tua istanza di Looker.
Requisiti
Prima di iniziare, avrai bisogno di alcuni elementi:
- Devi avere accesso a un'istanza di Looker con l'opzione abilitata in Framework di estensioni.
- Devi avere l'autorizzazione
develop
. - All'interno di Looker dovresti avere diverse dashboard definite dall'utente da inserire nelle schede dell'interfaccia utente.
- Che tu stia creando il framework di estensione o una tua applicazione React autonoma, è importante eseguire l'autenticazione con l'API Looker e avere accesso all'oggetto SDK Looker. Per saperne di più, consulta l'articolo sull'autenticazione delle API Looker o sul nostro framework delle estensioni.
- In questo esempio viene utilizzato l'SDK Looker Embed. Per consentire l'esecuzione dell'SDK Embed sulla tua istanza,
http://localhost:8080
deve essere incluso nella lista consentita del dominio incorporato all'interno della pagina Incorpora del riquadro Amministratore. - Assicurati di aver installato il pacchetto NPM dei componenti Looker. Le informazioni sull'installazione e sull'utilizzo del pacchetto di componenti sono disponibili nel documento README, disponibile in GitHub e NPM.
Passaggio 1: crea un'estensione TypeScript di base
Per creare un'estensione, segui le istruzioni riportate nella pagina Introduzione alla creazione di un'estensione Looker. Per rendere l'estensione un'estensione TypeScript, utilizza le seguenti modifiche:
- Se utilizzi lo strumento
create-looker-extension
per creare il modello di estensione, scegli TypeScript come lingua da utilizzare nel secondo passaggio. - Se cloni il repository Git per creare il modello di estensione, vai alla directory
extension-examples/react/TypeScript/helloworld-ts
nel secondo passaggio.
Passaggio 2: crea il file src/Dashboards.tsx
per collegare e archiviare le dashboard
All'interno della directory src
della nuova estensione, crea un file Dashboards.tsx
. Questo file connetterà e archivierà le dashboard che hai creato all'interno di Looker.
Incolla il codice seguente nel file. Questo codice crea tre oggetti della dashboard e li specifica per ID. Puoi creare più o meno oggetti della dashboard, in base alle tue esigenze.
Sono presenti tre posizioni nel codice di un URL istanza https://mycompany.looker.com
. Modifica l'URL dell'istanza di Looker.
import React, { useCallback } from "react";
import { LookerEmbedSDK } from "@looker/embed-sdk";
import styled from "styled-components";
export const EmbeddedDashboard1 = (props: { id: number | string }) => {
const [dashboard, setDashboard] = React.useState();
const setupDashboard = (dashboard: any) => {
setDashboard(dashboard);
};
const embedCtrRef = useCallback((el) => {
const hostUrl = "https://mycompany.looker.com/";
if (el && hostUrl) {
el.innerHTML = "";
LookerEmbedSDK.init(hostUrl);
LookerEmbedSDK.createDashboardWithId(props.id)
.withNext()
.appendTo(el)
.build()
.connect()
.then(setupDashboard)
.catch((error) => {
console.error("Connection error", error);
});
}
}, []);
return <EmbedContainer ref={embedCtrRef}></EmbedContainer>;
};
export const EmbeddedDashboard2 = (props: { id: number }) => {
const [dashboard, setDashboard] = React.useState();
const setupDashboard = (dashboard: any) => {
setDashboard(dashboard);
};
const embedCtrRef = useCallback((el) => {
const hostUrl = "https://mycompany.looker.com/";
if (el && hostUrl) {
el.innerHTML = "";
LookerEmbedSDK.init(hostUrl);
LookerEmbedSDK.createDashboardWithId(props.id)
.withNext()
.appendTo(el)
.build()
.connect()
.then(setupDashboard)
.catch((error) => {
console.error("Connection error", error);
});
}
}, []);
return <EmbedContainer ref={embedCtrRef}></EmbedContainer>;
};
export const EmbeddedDashboard3 = (props: { id: number }) => {
const [dashboard, setDashboard] = React.useState();
const setupDashboard = (dashboard: any) => {
setDashboard(dashboard);
};
const embedCtrRef = useCallback((el) => {
const hostUrl = "https://mycompany.looker.com/";
if (el && hostUrl) {
el.innerHTML = "";
LookerEmbedSDK.init(hostUrl);
LookerEmbedSDK.createDashboardWithId(props.id)
.withNext()
.appendTo(el)
.build()
.connect()
.then(setupDashboard)
.catch((error) => {
console.error("Connection error", error);
});
}
}, []);
return <EmbedContainer ref={embedCtrRef}></EmbedContainer>;
};
export const EmbedContainer = styled.div`
width: 100%;
height: 95vh;
& > iframe {
width: 100%;
height: 100%;
}
`;
Nell'esempio di codice precedente, si verifica quanto segue:
Le istruzioni di importazione stanno generando le dipendenze necessarie.
import React, { useCallback } from "react"; import { LookerEmbedSDK } from "@looker/embed-sdk"; import styled from "styled-components";
Il blocco di codice successivo crea un oggetto
EmbeddedDashboard1
, che è un oggettoEmbedContainer
che contiene un iframe della dashboard. L'iframe viene generato dall'SDK Embed di Looker utilizzando l'ID della dashboard trasmesso. Assicurati di aggiornarehttps://mycompany.looker.com/
nell'URL dell'istanza di Looker.export const EmbeddedDashboard1 = (props: { id: number | string }) => { const [dashboard, setDashboard] = React.useState(); const setupDashboard = (dashboard: any) => { setDashboard(dashboard); }; const embedCtrRef = useCallback((el) => { const hostUrl = "https://mycompany.looker.com/"; if (el && hostUrl) { el.innerHTML = ""; LookerEmbedSDK.init(hostUrl); LookerEmbedSDK.createDashboardWithId(props.id) .withNext() .appendTo(el) .build() .connect() .then(setupDashboard) .catch((error) => { console.error("Connection error", error); }); } }, []); return <EmbedContainer ref={embedCtrRef}></EmbedContainer>; };
I due blocchi di codice successivi ripeteranno la procedura per
EmbeddedDashboard2
eEmbeddedDashboard3
. Ancora una volta, assicurati di aggiornarehttps://mycompany.looker.com/
nell'URL dell'istanza di Looker.L'ultimo blocco definisce lo stile EmbedContainer.
export const EmbedContainer = styled.div` width: 100%; height: 95vh; & > iframe { width: 100%; height: 100%; } `;
Passaggio 3: crea il file src/Tabs.tsx
per archiviare il componente Tabs
All'interno della directory src
della nuova estensione, crea un file Tabs.tsx
. Questo file archivia il componente Tabs
e fa riferimento all'ID della dashboard di Looker per ogni dashboard.
All'interno del file, incolla il seguente codice (la sezione seguente illustra il funzionamento del codice):
import React from "react";
import { ComponentsProvider, Tabs2, Tab2 } from "@looker/components";
import { EmbeddedDashboard1, EmbeddedDashboard2, EmbeddedDashboard3,
} from "./Dashboard";
export const Tabs = () => (
<ComponentsProvider>
<Tabs2>
<Tab2 id="5" label="Order Analysis Dashboard">
Order data from the last 12 months
<EmbeddedDashboard1 id={5} />
</Tab2>
<Tab2 id="2" label="Inventory Dashboard">
Current global inventory
<EmbeddedDashboard2 id={2} />
</Tab2>
<Tab2 id="7" label="Customer Dashboard">
Anonymized customer data
<EmbeddedDashboard3 id={7} />
</Tab2>
</Tabs2>
</ComponentsProvider>
)
Nell'esempio di codice precedente, si verifica quanto segue:
Le istruzioni di importazione portano le dipendenze e i componenti necessari, nonché gli oggetti
EmbeddedDashboard
creati nel fileDashboards.tsx
.import React from "react"; import { ComponentsProvider, Tabs2, Tab2 } from "@looker/components"; import { EmbeddedDashboard1, EmbeddedDashboard2, EmbeddedDashboard3, } from "./Dashboard";
L'istruzione di esportazione rende disponibile l'oggetto
Tabs
per l'importazione in altri componenti.export const Tabs = () => (
Il
ComponentsProvider
circonda i singoli componenti per facilitare l'applicazione dei temi.<ComponentsProvider> </ComponentsProvider>
Il componente
Tabs2
e il relativo componente secondario,Tab2
, creano tre schede e le collegano alle dashboard di Looker.<Tabs2> <Tab2 id="5" label="Order Analysis Dashboard"> Order data from the last 12 months <EmbeddedDashboard1 id={5} /> </Tab2> <Tab2 id="2" label="Inventory Dashboard"> Current global inventory <EmbeddedDashboard2 id={2} /> </Tab2> <Tab2 id="7" label="Customer Dashboard"> Anonymized customer data <EmbeddedDashboard3 id={7} /> </Tab2> </Tabs2>
- La proprietà
id
diTab2
accetta un ID scheda univoco. Aggiorna l'ID in base alle esigenze del tuo ambiente. - L'elemento di proprietà
label
accetta l'etichetta che verrà visualizzata in ogni scheda. Aggiorna l'ID in modo appropriato per la dashboard che stai utilizzando. - Una stringa inserita nei tag Tab2 verrà visualizzata nella parte superiore dell'area dei contenuti per quella scheda. Aggiorna o rimuovi la stringa in base alle tue esigenze.
- Gli oggetti
EmbeddedDashboard1
,EmbeddedDashboard1
eEmbeddedDashboard1
vengono posizionati all'interno della scheda. Le relative proprietàid
accettano l'ID dashboard della dashboard da incorporare all'interno di quella scheda. Quando crei la tua dashboard a schede, sostituisci questo valore con l'ID della dashboard che vuoi utilizzare. Puoi trovare l'ID numerico della dashboard nell'URL successivo al giornodashboards/
. Ad esempio, se l'URL èhttps://example.looker.com/dashboards/61?Recording+Date=10+weeks&Country=US
, l'ID dashboard sarà61
.
- La proprietà
Passaggio 4: sostituisci il riferimento HelloWorld in src/App.tsx
Vai al file App.tsx
nella directory src
. Rimuovi l'istruzione di importazione HelloWorld:
import { HelloWorld } from './HelloWorld'
e sostituiscilo con:
import { Tabs } from './Tabs'
Se lo desideri, puoi anche eliminare il file HelloWorld.tsx
da questa directory perché non lo utilizzerai più.
Passaggio 5: aggiorna il file manifest.lkml
con diritto di incorporamento
Aggiungi il seguente diritto alla sezione Diritti del file manifest.lkml
nel tuo progetto LookML:
use_embeds: yes
Il file manifest.lkml
dovrebbe avere il seguente aspetto:
application: name {
label: "label"
url: "http://localhost:8080/bundle.js"
# file: "bundle.js
entitlements: {
core_api_methods: ["me"] #Add more entitlements here as you develop new functionality
use_embeds: yes
}
}
Ora puoi accedere all'estensione, che viene visualizzata nella cartella Applicazioni del pannello di navigazione a sinistra. Se hai avviato il tuo server di sviluppo locale con yarn develop
, puoi visualizzare le dashboard con schede incorporate.
Passaggio 6: pubblica l'estensione nell'istanza di Looker
Per mostrare l'estensione ad altri utenti di Looker, pubblicala nella tua istanza di Looker seguendo questa procedura:
- Con il server di sviluppo in esecuzione, vai a
localhost:8080/bundle.js
. - Salva i contenuti della finestra del browser in locale sul computer come file
.js
. - Assicurati di essere in modalità sviluppo, quindi trascina il file
.js
nel progetto di estensione. Salva le modifiche. - Nel file
manifest.lkml
, commenta la rigaurl: "http://localhost:8080/bundle.js"
. - Nel file
manifest.lkml
, rimuovi il commento dalla riga# file: "bundle.js"
e assicurati che il nome file corrisponda al nome del file.js
che hai caricato nel progetto. Salva le modifiche. - Esegui il commit e il deployment delle modifiche.
Dopo il deployment, non dovrai più avviare il server di sviluppo locale per vedere l'estensione e gli utenti della tua istanza di Looker dovrebbero essere in grado di vedere l'estensione se la accedono all'interno della cartella Applications nel pannello di navigazione a sinistra.