@rhtml/modifiers 0.0.138 → 0.0.140

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,5 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AngularLayout = void 0;
4
4
  const if_1 = require("./if");
5
5
  const registry_1 = require("./registry");
6
- exports.AngularLayout = [registry_1.Registry, if_1.IfOperator];
6
+ const routerLink_1 = require("./routerLink");
7
+ exports.AngularLayout = [registry_1.Registry, if_1.IfOperator, routerLink_1.RouterLink];
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":";;;AAAA,6BAAkC;AAClC,yCAAsC;AAEzB,QAAA,aAAa,GAAG,CAAC,mBAAQ,EAAE,eAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":";;;AAAA,6BAAkC;AAClC,yCAAsC;AACtC,6CAA0C;AAE7B,QAAA,aAAa,GAAG,CAAC,mBAAQ,EAAE,eAAU,EAAE,uBAAU,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Attribute } from '@rhtml/custom-attributes';
2
+ /**
3
+ * @customAttribute routerLink
4
+ */
5
+ export declare class RouterLink extends Attribute {
6
+ onClick(): void;
7
+ private get queryParams();
8
+ private get hasParams();
9
+ private getFullRoute;
10
+ private getUrl;
11
+ private parseParams;
12
+ }
13
+ /**
14
+ * Method helper for stringifying data so we can pass it to `queryParams` attribute
15
+ * Without helper: `<div routerLink=${'/projects'} queryParams='{"tracingId": 123}'>CLICK</div>`
16
+ * With helper: `<div routerLink=${'/projects'} queryParams=${stringify({ tracingId: 123 })}>CLICK</div>`
17
+ */
18
+ export declare const stringify: (data: Record<string, unknown>) => string;
19
+ /**
20
+ * Additionally for extracting query parameters we could use this method directly from the router @rhtml/router itself
21
+ * const params = this.router.getQueryParams<{ tracingId: string }>();
22
+ * console.log(params.tracingId);
23
+ */
24
+ export declare const getQueryParams: <T>() => T;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getQueryParams = exports.stringify = exports.RouterLink = void 0;
13
+ const custom_attributes_1 = require("@rhtml/custom-attributes");
14
+ const decorators_1 = require("@rhtml/decorators");
15
+ /**
16
+ * @customAttribute routerLink
17
+ */
18
+ let RouterLink = class RouterLink extends custom_attributes_1.Attribute {
19
+ onClick() {
20
+ const { pathname, search, hash } = this.getFullRoute();
21
+ window.dispatchEvent(new CustomEvent(`router-go`, {
22
+ cancelable: true,
23
+ detail: {
24
+ pathname,
25
+ search: search || '',
26
+ hash: hash || '',
27
+ },
28
+ }));
29
+ }
30
+ get queryParams() {
31
+ return this.element.getAttribute('queryParams');
32
+ }
33
+ get hasParams() {
34
+ return this.element.hasAttribute('queryParams');
35
+ }
36
+ getFullRoute() {
37
+ if (this.hasParams) {
38
+ const params = new URLSearchParams(this.parseParams());
39
+ return this.getUrl([this.value, '?', params.toString()].join(''));
40
+ }
41
+ return this.getUrl(this.value);
42
+ }
43
+ getUrl(path) {
44
+ return new URL(path, 'http://a');
45
+ }
46
+ parseParams() {
47
+ var _a;
48
+ return JSON.parse((_a = this.queryParams) !== null && _a !== void 0 ? _a : '{}');
49
+ }
50
+ };
51
+ exports.RouterLink = RouterLink;
52
+ __decorate([
53
+ (0, decorators_1.HostListener)('click'),
54
+ __metadata("design:type", Function),
55
+ __metadata("design:paramtypes", []),
56
+ __metadata("design:returntype", void 0)
57
+ ], RouterLink.prototype, "onClick", null);
58
+ exports.RouterLink = RouterLink = __decorate([
59
+ (0, custom_attributes_1.Modifier)({
60
+ selector: 'routerLink',
61
+ })
62
+ ], RouterLink);
63
+ /**
64
+ * Method helper for stringifying data so we can pass it to `queryParams` attribute
65
+ * Without helper: `<div routerLink=${'/projects'} queryParams='{"tracingId": 123}'>CLICK</div>`
66
+ * With helper: `<div routerLink=${'/projects'} queryParams=${stringify({ tracingId: 123 })}>CLICK</div>`
67
+ */
68
+ const stringify = (data) => JSON.stringify(data);
69
+ exports.stringify = stringify;
70
+ /**
71
+ * Additionally for extracting query parameters we could use this method directly from the router @rhtml/router itself
72
+ * const params = this.router.getQueryParams<{ tracingId: string }>();
73
+ * console.log(params.tracingId);
74
+ */
75
+ const getQueryParams = () => [...new URLSearchParams(location.search)].reduce((prev, [key, value]) => (Object.assign(Object.assign({}, prev), { [key]: value })), {});
76
+ exports.getQueryParams = getQueryParams;
77
+ //# sourceMappingURL=routerLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routerLink.js","sourceRoot":"","sources":["../../src/angular/routerLink.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gEAA+D;AAC/D,kDAAiD;AAEjD;;GAEG;AAII,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,6BAAS;IAEvC,OAAO;QACL,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEvD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,WAAW,EAAE;YAC3B,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE;gBACN,QAAQ;gBACR,MAAM,EAAE,MAAM,IAAI,EAAE;gBACpB,IAAI,EAAE,IAAI,IAAI,EAAE;aACjB;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAEO,MAAM,CAAC,IAAY;QACzB,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IAEO,WAAW;;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAzCY,gCAAU;AAErB;IADC,IAAA,yBAAY,EAAC,OAAO,CAAC;;;;yCAcrB;qBAfU,UAAU;IAHtB,IAAA,4BAAQ,EAAC;QACR,QAAQ,EAAE,YAAY;KACvB,CAAC;GACW,UAAU,CAyCtB;AAED;;;;GAIG;AACI,MAAM,SAAS,GAAG,CAAC,IAA6B,EAAE,EAAE,CACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AADV,QAAA,SAAS,aACC;AAEvB;;;;GAIG;AACI,MAAM,cAAc,GAAG,GAAM,EAAE,CACpC,CAAC,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAG,EACnD,EAAO,CACR,CAAC;AAJS,QAAA,cAAc,kBAIvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhtml/modifiers",
3
- "version": "0.0.138",
3
+ "version": "0.0.140",
4
4
  "description": "Reactive HyperText Markup Language",
5
5
  "scripts": {
6
6
  "start": "npx parcel ./examples/index.html --out-dir build/examples",
@@ -17,7 +17,8 @@
17
17
  "url": "git@github.com:rhtml/rhtml.git"
18
18
  },
19
19
  "dependencies": {
20
- "@rhtml/custom-attributes": "0.0.138"
20
+ "@rhtml/custom-attributes": "0.0.140",
21
+ "@rhtml/decorators": "0.0.140"
21
22
  },
22
23
  "devDependencies": {},
23
24
  "author": "Kristiyan Tachev",
@@ -1,4 +1,5 @@
1
1
  import { IfOperator } from './if';
2
2
  import { Registry } from './registry';
3
+ import { RouterLink } from './routerLink';
3
4
 
4
- export const AngularLayout = [Registry, IfOperator];
5
+ export const AngularLayout = [Registry, IfOperator, RouterLink];
@@ -0,0 +1,70 @@
1
+ import { Attribute, Modifier } from '@rhtml/custom-attributes';
2
+ import { HostListener } from '@rhtml/decorators';
3
+
4
+ /**
5
+ * @customAttribute routerLink
6
+ */
7
+ @Modifier({
8
+ selector: 'routerLink',
9
+ })
10
+ export class RouterLink extends Attribute {
11
+ @HostListener('click')
12
+ onClick() {
13
+ const { pathname, search, hash } = this.getFullRoute();
14
+
15
+ window.dispatchEvent(
16
+ new CustomEvent(`router-go`, {
17
+ cancelable: true,
18
+ detail: {
19
+ pathname,
20
+ search: search || '',
21
+ hash: hash || '',
22
+ },
23
+ })
24
+ );
25
+ }
26
+
27
+ private get queryParams() {
28
+ return this.element.getAttribute('queryParams');
29
+ }
30
+
31
+ private get hasParams() {
32
+ return this.element.hasAttribute('queryParams');
33
+ }
34
+
35
+ private getFullRoute() {
36
+ if (this.hasParams) {
37
+ const params = new URLSearchParams(this.parseParams());
38
+ return this.getUrl([this.value, '?', params.toString()].join(''));
39
+ }
40
+
41
+ return this.getUrl(this.value);
42
+ }
43
+
44
+ private getUrl(path: string) {
45
+ return new URL(path, 'http://a');
46
+ }
47
+
48
+ private parseParams() {
49
+ return JSON.parse(this.queryParams ?? '{}');
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Method helper for stringifying data so we can pass it to `queryParams` attribute
55
+ * Without helper: `<div routerLink=${'/projects'} queryParams='{"tracingId": 123}'>CLICK</div>`
56
+ * With helper: `<div routerLink=${'/projects'} queryParams=${stringify({ tracingId: 123 })}>CLICK</div>`
57
+ */
58
+ export const stringify = (data: Record<string, unknown>) =>
59
+ JSON.stringify(data);
60
+
61
+ /**
62
+ * Additionally for extracting query parameters we could use this method directly from the router @rhtml/router itself
63
+ * const params = this.router.getQueryParams<{ tracingId: string }>();
64
+ * console.log(params.tracingId);
65
+ */
66
+ export const getQueryParams = <T>() =>
67
+ [...new URLSearchParams(location.search)].reduce(
68
+ (prev, [key, value]) => ({ ...prev, [key]: value }),
69
+ {} as T
70
+ );