Skip to content

Instantly share code, notes, and snippets.

@YonatanKra
YonatanKra / app.spec.ts
Created September 16, 2023 13:27
Tauri-demo: add yag-app with yag-greet to main
import { App } from './app';
customElements.define('yag-app', App);
describe('app', () => {
let app: App;
beforeEach(() => {
app = document.createElement('yag-app') as App;
document.body.appendChild(app);
});
<!doctype html>
<html lang="en" class="vvd-root">
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="/src/styles.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tauri App</title>
<script type="module" src="/src/main.ts" defer></script>
<style>
.logo.vite:hover {
import './main';
describe('main', () => {
it ('should define yag-greeter', () => {
expect(customElements.get('yag-greeter')).toBeDefined();
});
});
@YonatanKra
YonatanKra / greeter.spec.setup.teardown.ts
Created September 13, 2023 03:24
Tauri-demo: test setup and teardown
beforeEach(() => {
greeter = document.createElement('yag-greeter');
document.body.appendChild(greeter);
});
afterEach(() => {
greeter.remove();
});
@YonatanKra
YonatanKra / greeter.template.ts
Created September 13, 2023 03:01
Tauri-demo: using Vivid to simplify the template
import '@vonage/vivid/button';
import '@vonage/vivid/text-field';
export const template = `
<form class="row" id="greet-form" name="greet-form">
<vwc-text-field id="greet-input"
placeholder="Enter a name..."></vwc-text-field>
<vwc-button type="submit"
label="Greet"
appearance="outlined"></vwc-button>
@YonatanKra
YonatanKra / index.html
Created September 13, 2023 03:00
Tauri-demo: vivid infrastructure
<html lang="en" class="vvd-root">
@YonatanKra
YonatanKra / greeter.template.ts
Created September 12, 2023 06:54
Tauri-demo: template with styles
export const template = `
<style>
input,
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
@YonatanKra
YonatanKra / greeter.greet.logic.ts
Created September 12, 2023 06:03
Tauri-demo: Greet logic inside a web component
this.shadowRoot?.querySelector('#greet-form')?.addEventListener('submit', async (e) => {
e.preventDefault();
const greetInputEl = this.shadowRoot?.querySelector('#greet-input') as HTMLInputElement;
const greetMsgEl = this.shadowRoot?.querySelector('#greet-msg') as HTMLElement;
greetMsgEl.textContent = await invoke('greet', {
name: greetInputEl.value,
});
});
@YonatanKra
YonatanKra / greeter.test.ipc.ts
Last active September 12, 2023 06:09
Tauri-demo: the IPC test
it('should set the greeting message inside the message element', async () => {
const greeter = document.createElement('yag-greeter');
const name = 'John Doe';
const greetForm = greeter.shadowRoot?.querySelector('#greet-form') as HTMLFormElement;
const greetInput = greeter.shadowRoot?.querySelector('#greet-input') as HTMLInputElement;
const greetMsgEl = greeter.shadowRoot?.querySelector('#greet-msg') as HTMLElement;
greetInput.value = name;
mockIPC((cmd, args) => {
@YonatanKra
YonatanKra / greeter.spec.ts
Last active September 12, 2023 06:33
Tauri-demo: add the IPC logic to Greeter
import { mockIPC } from '@tauri-apps/api/mocks';
import { Greeter } from './index';
describe('greeter', () => {
let greeter: Greeter;
beforeAll(() => {
customElements.define('yag-greeter', Greeter);
});