Browse Source

Angular fix.

pull/566/head
Sebastian 5 years ago
parent
commit
8198cc55d2
  1. 6
      frontend/app-config/webpack.config.js
  2. 2
      frontend/app/app.routes.ts
  3. 2
      frontend/app/framework/angular/pipes/markdown.pipe.ts
  4. 8
      frontend/app/framework/angular/routers/router-2-state.ts
  5. 5
      frontend/app/framework/angular/stateful.component.ts
  6. 2
      frontend/app/framework/module.ts
  7. 2
      frontend/app/shared/components/help/help-markdown.pipe.ts
  8. 4
      frontend/app/shared/components/pipes.ts
  9. 2
      frontend/app/shared/module.ts
  10. 29
      frontend/package-lock.json
  11. 5
      frontend/package.json

6
frontend/app-config/webpack.config.js

@ -157,7 +157,7 @@ module.exports = function (env) {
}, { }, {
loader: 'sass-loader', loader: 'sass-loader',
options: { options: {
prependData: ` additionalData: `
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
`, `,
@ -178,7 +178,9 @@ module.exports = function (env) {
* *
* See: https://github.com/webpack-contrib/mini-css-extract-plugin * See: https://github.com/webpack-contrib/mini-css-extract-plugin
*/ */
new plugins.MiniCssExtractPlugin('[name].css'), new plugins.MiniCssExtractPlugin({
filename: '[name].css'
}),
new webpack.LoaderOptionsPlugin({ new webpack.LoaderOptionsPlugin({
options: { options: {

2
frontend/app/app.routes.ts

@ -86,4 +86,4 @@ export const routes: Routes = [
} }
]; ];
export const routing: ModuleWithProviders = RouterModule.forRoot(routes, { useHash: false }); export const routing: ModuleWithProviders<RouterModule> = RouterModule.forRoot(routes, { useHash: false });

2
frontend/app/framework/angular/pipes/markdown.pipe.ts

@ -11,7 +11,7 @@ import marked from 'marked';
const renderer = new marked.Renderer(); const renderer = new marked.Renderer();
renderer.link = (href, _, text) => { renderer.link = (href, _, text) => {
if (href.startsWith('mailto')) { if (href && href.startsWith('mailto')) {
return text; return text;
} else { } else {
return `<a href="${href}" target="_blank", rel="noopener">${text} <i class="icon-external-link"></i></a>`; return `<a href="${href}" target="_blank", rel="noopener">${text} <i class="icon-external-link"></i></a>`;

8
frontend/app/framework/angular/routers/router-2-state.ts

@ -150,18 +150,18 @@ export class Router2State implements OnDestroy, StateSynchronizer {
} }
public ngOnDestroy() { public ngOnDestroy() {
this.mapper?.ngOnDestroy(); this.mapper?.destroy();
} }
public mapTo<T extends object>(state: State<T>) { public mapTo<T extends object>(state: State<T>) {
this.mapper?.ngOnDestroy(); this.mapper?.destroy();
this.mapper = this.mapper || new Router2StateMap<T>(state, this.route, this.router, this.localStore); this.mapper = this.mapper || new Router2StateMap<T>(state, this.route, this.router, this.localStore);
return this.mapper; return this.mapper;
} }
} }
export class Router2StateMap<T extends object> implements OnDestroy, StateSynchronizerMap<T> { export class Router2StateMap<T extends object> implements StateSynchronizerMap<T> {
private readonly syncs: { [field: string]: { synchronizer: RouteSynchronizer, value: any } } = {}; private readonly syncs: { [field: string]: { synchronizer: RouteSynchronizer, value: any } } = {};
private readonly keysToKeep: string[] = []; private readonly keysToKeep: string[] = [];
private syncDone: (() => void)[] = []; private syncDone: (() => void)[] = [];
@ -187,7 +187,7 @@ export class Router2StateMap<T extends object> implements OnDestroy, StateSynchr
.subscribe(s => this.syncToRoute(s)); .subscribe(s => this.syncToRoute(s));
} }
public ngOnDestroy() { public destroy() {
this.syncDone = []; this.syncDone = [];
this.subscriptionQueryParams?.unsubscribe(); this.subscriptionQueryParams?.unsubscribe();

5
frontend/app/framework/angular/stateful.component.ts

@ -6,8 +6,9 @@
*/ */
// tslint:disable: readonly-array // tslint:disable: readonly-array
// tslint:disable: directive-class-suffix
import { ChangeDetectorRef, OnDestroy } from '@angular/core'; import { ChangeDetectorRef, Directive, OnDestroy } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms'; import { ControlValueAccessor } from '@angular/forms';
import { Observable, Subscription } from 'rxjs'; import { Observable, Subscription } from 'rxjs';
import { onErrorResumeNext, skip } from 'rxjs/operators'; import { onErrorResumeNext, skip } from 'rxjs/operators';
@ -16,6 +17,7 @@ import { Types } from './../utils/types';
declare type UnsubscribeFunction = () => void; declare type UnsubscribeFunction = () => void;
@Directive()
export class ResourceOwner implements OnDestroy { export class ResourceOwner implements OnDestroy {
private subscriptions: (Subscription | UnsubscribeFunction)[] = []; private subscriptions: (Subscription | UnsubscribeFunction)[] = [];
@ -50,6 +52,7 @@ export class ResourceOwner implements OnDestroy {
} }
} }
@Directive()
export abstract class StatefulComponent<T = any> extends State<T> implements OnDestroy { export abstract class StatefulComponent<T = any> extends State<T> implements OnDestroy {
private readonly subscriptions = new ResourceOwner(); private readonly subscriptions = new ResourceOwner();
private readonly subscription: Subscription; private readonly subscription: Subscription;

2
frontend/app/framework/module.ts

@ -178,7 +178,7 @@ import { AnalyticsService, AutocompleteComponent, AvatarComponent, CachingInterc
] ]
}) })
export class SqxFrameworkModule { export class SqxFrameworkModule {
public static forRoot(): ModuleWithProviders { public static forRoot(): ModuleWithProviders<SqxFrameworkModule> {
return { return {
ngModule: SqxFrameworkModule, ngModule: SqxFrameworkModule,
providers: [ providers: [

2
frontend/app/shared/components/help/help-markdown.pipe.ts

@ -11,7 +11,7 @@ import marked from 'marked';
const renderer = new marked.Renderer(); const renderer = new marked.Renderer();
renderer.link = (href, _, text) => { renderer.link = (href, _, text) => {
if (!href.startsWith('http')) { if (href && !href.startsWith('http')) {
href = `https://docs.squidex.io/${href}`; href = `https://docs.squidex.io/${href}`;
} }

4
frontend/app/shared/components/pipes.ts

@ -6,12 +6,14 @@
*/ */
// tslint:disable: no-pipe-impure // tslint:disable: no-pipe-impure
// tslint:disable: directive-class-suffix
import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform } from '@angular/core'; import { ChangeDetectorRef, Directive, OnDestroy, Pipe, PipeTransform } from '@angular/core';
import { ApiUrlConfig, UserDto, UsersProviderService } from '@app/shared/internal'; import { ApiUrlConfig, UserDto, UsersProviderService } from '@app/shared/internal';
import { Observable, of, Subscription } from 'rxjs'; import { Observable, of, Subscription } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
@Directive()
class UserAsyncPipe implements OnDestroy { class UserAsyncPipe implements OnDestroy {
private lastUserId: string; private lastUserId: string;
private lastValue: string | undefined = undefined; private lastValue: string | undefined = undefined;

2
frontend/app/shared/module.ts

@ -119,7 +119,7 @@ import { SearchService } from './services/search.service';
] ]
}) })
export class SqxSharedModule { export class SqxSharedModule {
public static forRoot(): ModuleWithProviders { public static forRoot(): ModuleWithProviders<SqxSharedModule> {
return { return {
ngModule: SqxSharedModule, ngModule: SqxSharedModule,
providers: [ providers: [

29
frontend/package-lock.json

@ -1094,6 +1094,14 @@
"integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
"dev": true "dev": true
}, },
"@types/codemirror": {
"version": "0.0.97",
"resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.97.tgz",
"integrity": "sha512-n5d7o9nWhC49DjfhsxANP7naWSeTzrjXASkUDQh7626sM4zK9XP2EVcHp1IcCf/IPV6c7ORzDUDF3Bkt231VKg==",
"requires": {
"@types/tern": "*"
}
},
"@types/color-name": { "@types/color-name": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
@ -1105,6 +1113,11 @@
"integrity": "sha512-F9RHpjuPSit4dCCRXgi7XcqA01DAjy9QY+v9yICoxXsjXD9cgQpyZyL2eSZnTkBGXGaQnea8waZOZTogLDB+rA==", "integrity": "sha512-F9RHpjuPSit4dCCRXgi7XcqA01DAjy9QY+v9yICoxXsjXD9cgQpyZyL2eSZnTkBGXGaQnea8waZOZTogLDB+rA==",
"dev": true "dev": true
}, },
"@types/estree": {
"version": "0.0.45",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz",
"integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g=="
},
"@types/glob": { "@types/glob": {
"version": "7.1.3", "version": "7.1.3",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
@ -1172,9 +1185,9 @@
"dev": true "dev": true
}, },
"@types/mousetrap": { "@types/mousetrap": {
"version": "1.6.0", "version": "1.6.3",
"resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.0.tgz", "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.3.tgz",
"integrity": "sha512-Jn2cF8X6RAMiSmJaATGjf2r3GzIfpZQpvnQhKprQ5sAbMaNXc7hc9sA2XHdMl3bEMEQhTV79JVW7n4Pgg7sjtg==", "integrity": "sha512-13gmo3M2qVvjQrWNseqM3+cR6S2Ss3grbR2NZltgMq94wOwqJYQdgn8qzwDshzgXqMlSUtyPZjysImmktu22ew==",
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
@ -1251,6 +1264,14 @@
"integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==",
"dev": true "dev": true
}, },
"@types/tern": {
"version": "0.23.3",
"resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.3.tgz",
"integrity": "sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w==",
"requires": {
"@types/estree": "*"
}
},
"@types/tinymce": { "@types/tinymce": {
"version": "4.5.24", "version": "4.5.24",
"resolved": "https://registry.npmjs.org/@types/tinymce/-/tinymce-4.5.24.tgz", "resolved": "https://registry.npmjs.org/@types/tinymce/-/tinymce-4.5.24.tgz",
@ -14135,7 +14156,7 @@
"dependencies": { "dependencies": {
"json5": { "json5": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true, "dev": true,
"requires": { "requires": {

5
frontend/package.json

@ -27,9 +27,10 @@
"@angular/platform-browser-dynamic": "10.0.11", "@angular/platform-browser-dynamic": "10.0.11",
"@angular/platform-server": "10.0.11", "@angular/platform-server": "10.0.11",
"@angular/router": "10.0.11", "@angular/router": "10.0.11",
"@egjs/hammerjs": "2.0.17",
"@ngx-translate/core": "13.0.0", "@ngx-translate/core": "13.0.0",
"@ngx-translate/http-loader": "6.0.0", "@ngx-translate/http-loader": "6.0.0",
"@egjs/hammerjs": "2.0.17", "@types/codemirror": "0.0.97",
"ace-builds": "1.4.12", "ace-builds": "1.4.12",
"angular-gridster2": "10.1.4", "angular-gridster2": "10.1.4",
"angular-mentions": "1.2.0", "angular-mentions": "1.2.0",
@ -72,7 +73,7 @@
"@types/jasmine": "3.5.13", "@types/jasmine": "3.5.13",
"@types/marked": "1.1.0", "@types/marked": "1.1.0",
"@types/mersenne-twister": "1.1.2", "@types/mersenne-twister": "1.1.2",
"@types/mousetrap": "1.6", "@types/mousetrap": "^1.6.3",
"@types/node": "14.6.0", "@types/node": "14.6.0",
"@types/react": "16.9.46", "@types/react": "16.9.46",
"@types/react-dom": "16.9.8", "@types/react-dom": "16.9.8",

Loading…
Cancel
Save