Skip to content

Commit

Permalink
Merge branch 'invoice'
Browse files Browse the repository at this point in the history
  • Loading branch information
netzkollektiv committed Sep 24, 2024
2 parents 00b2f0d + 378b7c3 commit 42dec1d
Show file tree
Hide file tree
Showing 68 changed files with 3,766 additions and 4,282 deletions.
8 changes: 8 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"parserOptions": {
"project": "./tsconfig.json"
},
"extends": [
"plugin:@stencil-community/recommended"
]
}
8 changes: 4 additions & 4 deletions .storybook/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ module.exports = {
"@storybook/addon-essentials",
"@chromatic-com/storybook",
"@storybook/addon-interactions",
"@chromatic-com/storybook"
"@chromatic-com/storybook",
"@storybook/addon-mdx-gfm",
"@storybook/addon-webpack5-compiler-swc"
],
"framework": {
name: "@storybook/html-webpack5",
Expand All @@ -32,7 +34,5 @@ module.exports = {
return config;
},
staticDirs: ['../dist'],
docs: {
autodocs: true
}
docs: {}
};
7 changes: 4 additions & 3 deletions .storybook/preview.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ export const parameters = {
},
viewMode: 'docs',
docs: {
source: {
state: 'open',
},
canvas: {
sourceState: 'shown'
}
}
}
export const tags = ['autodocs'];
12 changes: 9 additions & 3 deletions .storybook/stories/1.Installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@ import { Meta } from '@storybook/blocks';

<Meta title="Getting Started/Installation" />

<h1>easyCredit-Ratenkauf Web Components</h1>
<h1>easyCredit Web Components</h1>

<p>Die easyCredit-Ratenkauf Web Components sind ein Set von Webkomponenten, die universell in E-Commerce-Plattformen wie Magento oder Shopware eingesetzt werden können. Die Webkomponenten erleichtern die Integration der easyCredit-Ratenkauf Zahlungslösung durch vielseitige Web-Frontend-Elemente für Marketing, Checkout und Händlerverwaltung.</p>
<p>Die easyCredit Web Components sind ein Set von Web-Komponenten, die universell in E-Commerce-Plattformen, wie z.B. Magento, Shopware oder wooCommerce eingesetzt werden können. Die Webkomponenten erleichtern die Integration der easyCredit-Zahlungslösung durch vielseitige Web-Frontend-Elemente für Marketing, Checkout und Händlerverwaltung.</p>

<h2>Installation</h2>

Zur Integration der Web Components in ein beliebiges System fügen Sie die folgenden Zeilen in den `<head>` Ihres Shops ein:

```html
<script type="module" src="https://ratenkauf.easycredit.de/api/resource/webcomponents/v3/easycredit-components/easycredit-components.esm.js"></script>
// Pre-Release zur Entwicklung
<script type="module" src="https://invoice.easycredit-ratenkauf-webcomponents.pages.dev/easycredit-components/easycredit-components.esm.js" defer></script>

// endgültige URL bei Release der Komponenten
<!-- script type="module" src="https://ratenkauf.easycredit.de/api/resource/webcomponents/v3/easycredit-components/easycredit-components.esm.js"></script -->
```

Jetzt können Sie jede der Komponenten innerhalb der Website verwenden:
Expand All @@ -20,6 +24,8 @@ Jetzt können Sie jede der Komponenten innerhalb der Website verwenden:
<easycredit-widget amount="500" webshop-id="1.de.1234" />
```

Die Komponenten werden bei Einbindung nicht vollständig geladen, sondern erst bei Einfügen in die Seite asynchron nachgeladen. Dadurch ist der entstehende Overhead durch die Einbindung zu vernachlässigen.

<h3>In ein bestehendes JavaScript-Projekt installieren</h3>

<p>Um die Komponenten in einem JavaScript-Projekt zu verwenden, installieren Sie das NPM-Package:</p>
Expand Down
5 changes: 5 additions & 0 deletions .storybook/stories/2.Changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import { Meta } from "@storybook/blocks";

# Changelog

## 2.0.0

* die Web-Komponenten wurden für easyCredit-Rechnung überarbeitet

## 1.2.10

#### `<easycredit-widget />`
Expand All @@ -14,6 +18,7 @@ import { Meta } from "@storybook/blocks";

* der Error-Timeout wurde auf 10 Sekunden erhöht
* der Performance-Observer wurde entfernt, weil er durch die Same-Origin-Policy keine Wirkung hatte
=======

## 1.2.9

Expand Down
4 changes: 2 additions & 2 deletions .storybook/stories/3.Consent-Management.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Meta } from "@storybook/blocks";

<Meta title="Getting Started/Consent-Management" />

<h1>Integration der easyCredit-Ratenkauf Web Components mit einem Consent-Management Tool</h1>
<h1>Integration der easyCredit Web Components mit einem Consent-Management Tool</h1>

Sollen die Web Components vorbehaltlich der Zustimmung des Kunden eingefügt werden, muss darauf geachtet werden, dass die Komponenten als ESM-Modul eingebunden werden. Dabei muss darauf geachtet werden, dass bestimmte Komponenten im Checkout verwendet werden. Stimmt der Nutzer nicht zu, werden auch diese Komponenten nicht angezeigt.

Expand All @@ -11,7 +11,7 @@ Sollen die Web Components vorbehaltlich der Zustimmung des Kunden eingefügt wer
In diesem Fall behelfen wir uns mit einem normalen Skript-Tag der konditional ausgeführt wird, und wiederum das ESM-Modul einfügt:

```html
<script type="text/plain" data-usercentrics="EasyCredit Ratenkauf Web Components">
<script type="text/plain" data-usercentrics="EasyCredit Web Components">
var scriptTag = document.createElement("script");
scriptTag.src = "https://ratenkauf.easycredit.de/api/resource/webcomponents/v3/easycredit-components/easycredit-components.esm.js";
scriptTag.type = "module";
Expand Down
67 changes: 57 additions & 10 deletions .storybook/stories/4.Configuration.mdx
Original file line number Diff line number Diff line change
@@ -1,10 +1,42 @@
import { Meta } from "@storybook/blocks";

<Meta title="Getting Started/Configuration" />
<Meta title="Getting Started/Konfiguration" />

<h1>Konfiguration</h1>

Die Komponenten können für Integrations- und Testzwecke über eine globale Variable konfiguriert werden.
Die Komponenten können für Integrations- und Testzwecke über eine globale Variable konfiguriert werden.
Dies ist hilfreich, um Authorisierungsdetails an die API zu übergeben oder bestimmte andere benötigte
Header für die Anfragen zu setzen. Auch die Basis-URL der API kann hier zu Testzwecken verändert werden.

<h2>Endpunkte für Merchant-Komponenten</h2>

Typischerweise interagieren die Merchant-Komponenten mit einer (zu erstellenden) API des Shop-Systems,
die als Proxy fungiert und die easyCredit-API anspricht. Dies ist sinnvoll, damit Zugangsdaten im Backend
nicht offengelegt werden. Moderne Shop-Systeme kommunizieren ohnehin bereits über eine API mit dem Backend-System,
so dass ein entsprechender Auth-Token oft auch für die erweiterte API verwendet werden kann. Die Endpunkte hierfür
können mit der folgenden Konfiguration festgelegt werden:

```html
<script>
window.easycreditRatenkaufWebComponentsConfig = {
// definierte Proxy-Endpoints für Merchant-API, Authentifizierung i.V.m. request_config
endpoints: { // {transactionId} is automatically replaced with the tx-id or tx-id's (list)
list: 'api/transactions/{transactionId}',
get: 'api/transaction/{transactionId}',
capture: 'api/transaction/{transactionId}/capture',
refund: 'api/transaction/{transactionId}/refund'
},
[...]
}
</script>
```

<h2>Anpassung des Anfrage-Headers</h2>

Im folgenden Beispiel ist gezeigt, wie der Anfrage-Header beeinflusst werden kann. In diesem Fall wird ein bereits existierender Bearer token vewrwendet um gegen die API zu authentifizieren:

```html
<script>
Expand All @@ -20,18 +52,33 @@ window.easycreditRatenkaufWebComponentsConfig = {
}
},
[...]
}
</script>
```
<h2>Anpassung der Basis-URL zu Testzwecken</h2>

Zu Testzwecken kann die Basis-URL für API-Anfragen angepasst werden. Dies ist für die Benutzung der Komponenten im Normalfall aber nicht notwendig.

```html
<script>
window.easycreditRatenkaufWebComponentsConfig = {
// Basis-URL für API-Aufrufe
apiBaseUrl: 'https://ratenkauf.easycredit.de',
// definierte Proxy-Endpoints für Merchant-API, Authentifizierung i.V.m. request_config
endpoints: { // {transactionId} is automatically replaced with the tx-id or tx-id's (list)
list: 'api/transactions/{transactionId}',
get: 'api/transaction/{transactionId}',
capture: 'api/transaction/{transactionId}/capture',
refund: 'api/transaction/{transactionId}/refund'
}
[...]
}
</script>
```

<h2>Implementierungsbeispiele</h2>

Unter den folgenden Links sind einige Implementierungsbeispiele der Konfiguration und der
Interaktion der Merchant-Komponenten zu finden:

* [Implementierung in wooCommerce](https://github.com/teambank/ratenkaufbyeasycredit-plugin-woocommerce/blob/68f05a8c715af1ed557264ed926c3810944ed5c5/src/woocommerce-gateway-ratenkaufbyeasycredit/includes/order-management.php#L65C21-L65C38)
* [Implementierung in Shopware 5](https://github.com/teambank/ratenkaufbyeasycredit-plugin-shopware-5/blob/2f511d8983180dd9e4d95b10440858ce450c6944/src/Frontend/NetzkollektivEasyCredit/Subscriber/BackendMerchant.php#L41)
* [Implementierung in Shopware 6](https://github.com/teambank/ratenkaufbyeasycredit-plugin-shopware-6/blob/54a995bff40ac324fc047fa67002df6cb07d73a8/src/Resources/app/administration/src/module/easycredit-payment/component/easycredit-tx-widget/index.js#L37)
* [Implementierung in Magento 2](https://github.com/teambank/ratenkaufbyeasycredit-plugin-magento-2/blob/d38f12f1d2dd4e14f5bc9dae2de922c3c28ecf03/Block/Adminhtml/Merchant/Config.php#L43)
59 changes: 59 additions & 0 deletions .storybook/stories/5.Developer.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { Meta } from "@storybook/blocks";

<Meta title="Getting Started/Hinweise für Entwickler" />

<h1>Hinweise für Entwickler</h1>


<h2>Warten auf Komponenten-Initialisierung mit `whenDefined`</h2>

Um die Komponenten und deren Methoden ansprechen zu können, muss das jeweilige Element definiert sein. Um festzustellen, ob eine Komponente bereits angesprochen werden kann, kann die Funktion `whenDefined` verwendet werden:

```html
<script>
(async () => {
await customElements.whenDefined('easycredit-checkout');
const checkoutComponent = document.querySelector('easycredit-checkout')
if (checkoutComponent) {
checkoutComponent.addEventListener('submit',() => {
console.log('submit!');
})
}
})();
</script>
```

<h2>dynamisches Hinzufügen von EventHandlern</h2>

Möglicherweise wird die Komponente nicht bereits beim Laden der Seite, sondern erst später durch JavaScript der Seite hinzugefügt oder aktualisiert. Um auf Veränderungen im DOM reagieren zu können, kann die folgende Funktion hilfreich sein:

```html
<script>
const watchForSelector = function (selector, cb) {
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
mutation.addedNodes.forEach(function(node) {
if (node.nodeType !== Node.ELEMENT_NODE) {
return;
}
if (node.tagName === selector.toUpperCase()) {
return cb(node);
}
const el = node.querySelector(selector);
if (el) {
return cb(el);
}
});
});
});
observer.observe(document, { subtree: true, childList: true });
}
watchForSelector('easycredit-checkout', function(component) {
component.addEventListener('submit',() => {
console.log('submit!');
})
})
</script>
```
Loading

0 comments on commit 42dec1d

Please sign in to comment.