Merge pull request #1445 from acelaya-forks/feature/js-sdk-2.0

Update to JS SDK 2.0 and shlink-web-component 0.13
This commit is contained in:
Alejandro Celaya 2025-02-11 08:43:16 +01:00 committed by GitHub
commit c85917e378
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 47 additions and 37 deletions

View File

@ -11,7 +11,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
### Changed ### Changed
* Update to `react-router` 7.0 * Update to `react-router` 7.0
* Update to `@shlinkio/shlink-frontend-kit` 0.7.0 * Update to `@shlinkio/shlink-frontend-kit` 0.7.0
* Update to `@shlinkio/shlink-web-component` 0.12.0 * Update to `@shlinkio/shlink-web-component` 0.13.0
* Update to `@shlinkio/shlink-js-sdk` 2.0.0
### Deprecated ### Deprecated
* *Nothing* * *Nothing*

55
package-lock.json generated
View File

@ -17,8 +17,8 @@
"@reduxjs/toolkit": "^2.5.1", "@reduxjs/toolkit": "^2.5.1",
"@shlinkio/data-manipulation": "^1.0.3", "@shlinkio/data-manipulation": "^1.0.3",
"@shlinkio/shlink-frontend-kit": "^0.7.2", "@shlinkio/shlink-frontend-kit": "^0.7.2",
"@shlinkio/shlink-js-sdk": "^1.4.0", "@shlinkio/shlink-js-sdk": "^2.0.0",
"@shlinkio/shlink-web-component": "^0.12.1", "@shlinkio/shlink-web-component": "^0.13.0",
"bootstrap": "5.2.3", "bootstrap": "5.2.3",
"bottlejs": "^2.0.1", "bottlejs": "^2.0.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
@ -2378,9 +2378,10 @@
} }
}, },
"node_modules/@formkit/drag-and-drop": { "node_modules/@formkit/drag-and-drop": {
"version": "0.0.38", "version": "0.3.3",
"resolved": "https://registry.npmjs.org/@formkit/drag-and-drop/-/drag-and-drop-0.0.38.tgz", "resolved": "https://registry.npmjs.org/@formkit/drag-and-drop/-/drag-and-drop-0.3.3.tgz",
"integrity": "sha512-3uJFcqz1xL7x/5pClDnyqEDfyFRDFH+75MFpJYXnVF17oekxLrwbUaOBN7ttKGn1jW2MdojRw4WMnSN1iLryvw==" "integrity": "sha512-/2o1ud4o6aw+du8KZcLwS3pKlGkwFLnVIIIcC/YI12XJ3J9Z5E1mpKz9thodzklNI9njUk54iyk7jZK2cE55Nw==",
"license": "MIT"
}, },
"node_modules/@fortawesome/fontawesome-common-types": { "node_modules/@fortawesome/fontawesome-common-types": {
"version": "6.7.2", "version": "6.7.2",
@ -3431,18 +3432,18 @@
} }
}, },
"node_modules/@shlinkio/shlink-js-sdk": { "node_modules/@shlinkio/shlink-js-sdk": {
"version": "1.4.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-js-sdk/-/shlink-js-sdk-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@shlinkio/shlink-js-sdk/-/shlink-js-sdk-2.0.0.tgz",
"integrity": "sha512-hX/SOkKUkhx9Uo6BbbkJiyef8qvVcdQFbbDkzGlU7k8HeRzovldo1kH1E5nMcUaN6ZXjYguqoxJ1uxh3hKnZBg==", "integrity": "sha512-+HOZlMTPe0EKE9uNlXe2EuAoQK3EmHUv0zvkN9oZvVkBCXR5FLfDKSab74xj9SJ6qgrd0JDvpxBVmFPKWoiNPg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@shlinkio/shlink-web-component": { "node_modules/@shlinkio/shlink-web-component": {
"version": "0.12.1", "version": "0.13.0",
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.12.1.tgz", "resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.13.0.tgz",
"integrity": "sha512-FOqPoSjogNLaX9zNScxKBSjb5tW21yCOhFij5n4coUgDnL+9aPgTqzSCZkyIfOZ0A1UuUnulmpIgvg48n5gC4g==", "integrity": "sha512-Inm4Phq4e7huwMzJE1P5P7HF6FFchtOyUNlOAYF7TnUy1geKgrfni8tB0U3Vb58AAT9aqn3fczbFhhZyIeZPMA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@formkit/drag-and-drop": "^0.0.38", "@formkit/drag-and-drop": "^0.3.3",
"@json2csv/plainjs": "^7.0.6", "@json2csv/plainjs": "^7.0.6",
"@shlinkio/data-manipulation": "^1.0.3", "@shlinkio/data-manipulation": "^1.0.3",
"bottlejs": "^2.0.1", "bottlejs": "^2.0.1",
@ -3456,7 +3457,7 @@
"react-leaflet": "^4.2.1", "react-leaflet": "^4.2.1",
"react-swipeable": "^7.0.2", "react-swipeable": "^7.0.2",
"react-tag-autocomplete": "^7.4.0", "react-tag-autocomplete": "^7.4.0",
"recharts": "^2.15.0" "recharts": "^2.15.1"
}, },
"peerDependencies": { "peerDependencies": {
"@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/fontawesome-svg-core": "^6.4.2",
@ -3465,12 +3466,12 @@
"@fortawesome/free-solid-svg-icons": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.2",
"@fortawesome/react-fontawesome": "^0.2.2", "@fortawesome/react-fontawesome": "^0.2.2",
"@reduxjs/toolkit": "^2.5.0", "@reduxjs/toolkit": "^2.5.0",
"@shlinkio/shlink-frontend-kit": "^0.7.1", "@shlinkio/shlink-frontend-kit": "^0.7.2",
"@shlinkio/shlink-js-sdk": "^1.3.0", "@shlinkio/shlink-js-sdk": "^2.0.0",
"react": "^18.3 || ^19.0", "react": "^18.3 || ^19.0",
"react-dom": "^18.3 || ^19.0", "react-dom": "^18.3 || ^19.0",
"react-redux": "^9.2.0", "react-redux": "^9.2.0",
"react-router": "^7.1.1", "react-router": "^7.1.5",
"reactstrap": "^9.2.0" "reactstrap": "^9.2.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
@ -13951,9 +13952,9 @@
} }
}, },
"@formkit/drag-and-drop": { "@formkit/drag-and-drop": {
"version": "0.0.38", "version": "0.3.3",
"resolved": "https://registry.npmjs.org/@formkit/drag-and-drop/-/drag-and-drop-0.0.38.tgz", "resolved": "https://registry.npmjs.org/@formkit/drag-and-drop/-/drag-and-drop-0.3.3.tgz",
"integrity": "sha512-3uJFcqz1xL7x/5pClDnyqEDfyFRDFH+75MFpJYXnVF17oekxLrwbUaOBN7ttKGn1jW2MdojRw4WMnSN1iLryvw==" "integrity": "sha512-/2o1ud4o6aw+du8KZcLwS3pKlGkwFLnVIIIcC/YI12XJ3J9Z5E1mpKz9thodzklNI9njUk54iyk7jZK2cE55Nw=="
}, },
"@fortawesome/fontawesome-common-types": { "@fortawesome/fontawesome-common-types": {
"version": "6.7.2", "version": "6.7.2",
@ -14526,16 +14527,16 @@
} }
}, },
"@shlinkio/shlink-js-sdk": { "@shlinkio/shlink-js-sdk": {
"version": "1.4.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-js-sdk/-/shlink-js-sdk-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@shlinkio/shlink-js-sdk/-/shlink-js-sdk-2.0.0.tgz",
"integrity": "sha512-hX/SOkKUkhx9Uo6BbbkJiyef8qvVcdQFbbDkzGlU7k8HeRzovldo1kH1E5nMcUaN6ZXjYguqoxJ1uxh3hKnZBg==" "integrity": "sha512-+HOZlMTPe0EKE9uNlXe2EuAoQK3EmHUv0zvkN9oZvVkBCXR5FLfDKSab74xj9SJ6qgrd0JDvpxBVmFPKWoiNPg=="
}, },
"@shlinkio/shlink-web-component": { "@shlinkio/shlink-web-component": {
"version": "0.12.1", "version": "0.13.0",
"resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.12.1.tgz", "resolved": "https://registry.npmjs.org/@shlinkio/shlink-web-component/-/shlink-web-component-0.13.0.tgz",
"integrity": "sha512-FOqPoSjogNLaX9zNScxKBSjb5tW21yCOhFij5n4coUgDnL+9aPgTqzSCZkyIfOZ0A1UuUnulmpIgvg48n5gC4g==", "integrity": "sha512-Inm4Phq4e7huwMzJE1P5P7HF6FFchtOyUNlOAYF7TnUy1geKgrfni8tB0U3Vb58AAT9aqn3fczbFhhZyIeZPMA==",
"requires": { "requires": {
"@formkit/drag-and-drop": "^0.0.38", "@formkit/drag-and-drop": "^0.3.3",
"@json2csv/plainjs": "^7.0.6", "@json2csv/plainjs": "^7.0.6",
"@shlinkio/data-manipulation": "^1.0.3", "@shlinkio/data-manipulation": "^1.0.3",
"bottlejs": "^2.0.1", "bottlejs": "^2.0.1",
@ -14549,7 +14550,7 @@
"react-leaflet": "^4.2.1", "react-leaflet": "^4.2.1",
"react-swipeable": "^7.0.2", "react-swipeable": "^7.0.2",
"react-tag-autocomplete": "^7.4.0", "react-tag-autocomplete": "^7.4.0",
"recharts": "^2.15.0" "recharts": "^2.15.1"
} }
}, },
"@shlinkio/stylelint-config-css-coding-standard": { "@shlinkio/stylelint-config-css-coding-standard": {

View File

@ -34,8 +34,8 @@
"@reduxjs/toolkit": "^2.5.1", "@reduxjs/toolkit": "^2.5.1",
"@shlinkio/data-manipulation": "^1.0.3", "@shlinkio/data-manipulation": "^1.0.3",
"@shlinkio/shlink-frontend-kit": "^0.7.2", "@shlinkio/shlink-frontend-kit": "^0.7.2",
"@shlinkio/shlink-js-sdk": "^1.4.0", "@shlinkio/shlink-js-sdk": "^2.0.0",
"@shlinkio/shlink-web-component": "^0.12.1", "@shlinkio/shlink-web-component": "^0.13.0",
"bootstrap": "5.2.3", "bootstrap": "5.2.3",
"bottlejs": "^2.0.1", "bottlejs": "^2.0.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",

View File

@ -1,4 +1,4 @@
import { FetchHttpClient } from '@shlinkio/shlink-js-sdk/browser'; import { FetchHttpClient } from '@shlinkio/shlink-js-sdk/fetch';
import { ShlinkWebComponent } from '@shlinkio/shlink-web-component'; import { ShlinkWebComponent } from '@shlinkio/shlink-web-component';
import type Bottle from 'bottlejs'; import type Bottle from 'bottlejs';
import type { ConnectDecorator } from '../../container/types'; import type { ConnectDecorator } from '../../container/types';

View File

@ -1,3 +1,4 @@
import type { HttpClient } from '@shlinkio/shlink-js-sdk';
import { fromPartial } from '@total-typescript/shoehorn'; import { fromPartial } from '@total-typescript/shoehorn';
import { buildShlinkApiClient } from '../../../src/api/services/ShlinkApiClientBuilder'; import { buildShlinkApiClient } from '../../../src/api/services/ShlinkApiClientBuilder';
import type { ReachableServer, SelectedServer } from '../../../src/servers/data'; import type { ReachableServer, SelectedServer } from '../../../src/servers/data';
@ -34,12 +35,19 @@ describe('ShlinkApiClientBuilder', () => {
expect(secondApiClient === thirdApiClient).toEqual(true); expect(secondApiClient === thirdApiClient).toEqual(true);
}); });
it('does not fetch from state when provided param is already selected server', () => { it.only('does not fetch from state when provided param is already selected server', async () => {
const url = 'url'; const url = 'the_url';
const apiKey = 'apiKey'; const apiKey = 'the_api_key';
const apiClient = buildShlinkApiClient(fromPartial({}))(server({ url, apiKey })); const jsonRequest = vi.fn();
const httpClient = fromPartial<HttpClient>({ jsonRequest });
const apiClient = buildShlinkApiClient(httpClient)(server({ url, apiKey }));
expect(apiClient['serverInfo'].baseUrl).toEqual(url); await apiClient.health();
expect(apiClient['serverInfo'].apiKey).toEqual(apiKey);
expect(jsonRequest).toHaveBeenCalledWith(expect.stringMatching(new RegExp(`^${url}`)), expect.objectContaining({
headers: {
'X-Api-Key': apiKey,
},
}));
}); });
}); });