From 5b940b7ab99f0d51ea0684c2abf42cc210c073fd Mon Sep 17 00:00:00 2001 From: Benno Kohrs Date: Wed, 7 Apr 2021 15:20:51 +0200 Subject: [PATCH 1/5] optimized useAgile type --- packages/react/src/hooks/useAgile.ts | 32 ++++++----------------- packages/react/tests/old/useAgile.spec.ts | 20 +++++++++----- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/packages/react/src/hooks/useAgile.ts b/packages/react/src/hooks/useAgile.ts index 25e0f8a6..5aeb9143 100644 --- a/packages/react/src/hooks/useAgile.ts +++ b/packages/react/src/hooks/useAgile.ts @@ -97,46 +97,30 @@ export function useAgile< // Array Type // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html type AgileHookArrayType = { - [K in keyof T]: T[K] extends Group + [K in keyof T]: T[K] extends Collection | Group ? U[] - : T[K] extends State + : T[K] extends State | Observer ? U - : T[K] extends Observer - ? U - : T[K] extends Collection - ? U[] : T[K] extends undefined ? undefined - : T[K] extends Group | undefined + : T[K] extends Collection | Group ? U[] | undefined - : T[K] extends State | undefined + : T[K] extends State | Observer | undefined ? U | undefined - : T[K] extends Observer | undefined - ? U | undefined - : T[K] extends Collection | undefined - ? U[] | undefined : never; }; // No Array Type -type AgileHookType = T extends Group +type AgileHookType = T extends Collection | Group ? U[] - : T extends State + : T extends State | Observer ? U - : T extends Observer - ? U - : T extends Collection - ? U[] : T extends undefined ? undefined - : T extends Group | undefined + : T extends Collection | Group ? U[] | undefined - : T extends State | undefined + : T extends State | Observer | undefined ? U | undefined - : T extends Observer | undefined - ? U | undefined - : T extends Collection | undefined - ? U[] | undefined : never; type SubscribableAgileInstancesType = State | Collection | Observer | undefined; diff --git a/packages/react/tests/old/useAgile.spec.ts b/packages/react/tests/old/useAgile.spec.ts index 7e0296f3..4c36b30b 100644 --- a/packages/react/tests/old/useAgile.spec.ts +++ b/packages/react/tests/old/useAgile.spec.ts @@ -1,8 +1,10 @@ +// Be aware that in the test folder other ts rules count than in the src folder // THIS ARE ONLY TYPE TESTS +// NOTE: Has to be out commented because React Hooks in not React Components are not possible! -/* NOTE: Has to be out commented because React Hooks in not React Components are not possible! -import { Agile } from '@agile-ts/core'; -import { useAgile } from '../../src'; +/* +import { Agile, Collection } from '@agile-ts/core'; +import { useAgile } from './hooks/useAgile'; const App = new Agile(); @@ -27,7 +29,7 @@ const [ MY_SELECTOR, MY_NUMBER_STATE, MY_STRING_COMPUTED, - MY_COLLECTION, + MY_COLLECTION as any, MY_COLLECTION.getGroup('test'), MY_NUMBER_STATE, ]); @@ -36,8 +38,12 @@ const myStringState2 = useAgile(MY_STRING_STATE); const [myGroup2, myStringState3, myCollection2] = useAgile([ MY_COLLECTION.getGroup('test'), MY_STRING_STATE, - MY_COLLECTION, + MY_COLLECTION as any, ]); -const myCollection3 = useAgile(MY_COLLECTION) -*/ +const myState10 = useAgile(MY_NUMBER_STATE); +const myCollection10 = useAgile(MY_COLLECTION); +const myCollection11 = useAgile( + new Collection<{ id: number; name: string }>(App) +); + */ From 2a73f5b086685d49485a8e888cab8b87bd580565 Mon Sep 17 00:00:00 2001 From: Benno Kohrs Date: Wed, 7 Apr 2021 15:39:55 +0200 Subject: [PATCH 2/5] fixed typo --- packages/react/src/hooks/useAgile.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/src/hooks/useAgile.ts b/packages/react/src/hooks/useAgile.ts index 5aeb9143..b65e335a 100644 --- a/packages/react/src/hooks/useAgile.ts +++ b/packages/react/src/hooks/useAgile.ts @@ -103,7 +103,7 @@ type AgileHookArrayType = { ? U : T[K] extends undefined ? undefined - : T[K] extends Collection | Group + : T[K] extends Collection | Group | undefined ? U[] | undefined : T[K] extends State | Observer | undefined ? U | undefined @@ -117,7 +117,7 @@ type AgileHookType = T extends Collection | Group ? U : T extends undefined ? undefined - : T extends Collection | Group + : T extends Collection | Group | undefined ? U[] | undefined : T extends State | Observer | undefined ? U | undefined From 323edc83792d0fd5385d3f33c34f54b2cf0d6f68 Mon Sep 17 00:00:00 2001 From: Benno Kohrs Date: Wed, 7 Apr 2021 18:32:07 +0200 Subject: [PATCH 3/5] fixed collection type --- packages/core/src/collection/index.ts | 2 +- packages/react/src/hooks/useAgile.ts | 6 +++++- packages/tsconfig.default.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/core/src/collection/index.ts b/packages/core/src/collection/index.ts index 4c8d94ab..426935f0 100644 --- a/packages/core/src/collection/index.ts +++ b/packages/core/src/collection/index.ts @@ -1199,7 +1199,7 @@ export class Collection { } } -export type DefaultItem = { [key: string]: any }; +export type DefaultItem = Record; // same as { [key: string]: any }; export type CollectionKey = string | number; export type ItemKey = string | number; diff --git a/packages/react/src/hooks/useAgile.ts b/packages/react/src/hooks/useAgile.ts index b65e335a..99cf1f41 100644 --- a/packages/react/src/hooks/useAgile.ts +++ b/packages/react/src/hooks/useAgile.ts @@ -123,4 +123,8 @@ type AgileHookType = T extends Collection | Group ? U | undefined : never; -type SubscribableAgileInstancesType = State | Collection | Observer | undefined; +type SubscribableAgileInstancesType = + | State + | Collection //https://stackoverflow.com/questions/66987727/type-classa-id-number-name-string-is-not-assignable-to-type-classar + | Observer + | undefined; diff --git a/packages/tsconfig.default.json b/packages/tsconfig.default.json index 3983ee02..c5925f97 100644 --- a/packages/tsconfig.default.json +++ b/packages/tsconfig.default.json @@ -5,7 +5,7 @@ /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ From 63af2d139034876c1bccc3f17bc881e4754396b6 Mon Sep 17 00:00:00 2001 From: Benno Kohrs Date: Wed, 7 Apr 2021 18:40:00 +0200 Subject: [PATCH 4/5] fixed examples --- examples/react/class-component-ts/src/App.tsx | 2 +- examples/react/class-component-ts/yarn.lock | 8 ++++---- examples/react/functional-component-ts/src/App.tsx | 2 +- packages/react/src/hocs/AgileHOC.ts | 6 +++++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/examples/react/class-component-ts/src/App.tsx b/examples/react/class-component-ts/src/App.tsx index d69540dc..59073ba8 100644 --- a/examples/react/class-component-ts/src/App.tsx +++ b/examples/react/class-component-ts/src/App.tsx @@ -111,7 +111,7 @@ const FinalApp = AgileHOC(App, { myState3: MY_STATE_3, myUndefined: undefined, myComputed: MY_COMPUTED, - myCollection: MY_COLLECTION as any, + myCollection: MY_COLLECTION, myGroup: MY_COLLECTION.getGroupWithReference('myGroup'), }); diff --git a/examples/react/class-component-ts/yarn.lock b/examples/react/class-component-ts/yarn.lock index 2ac046d4..71782d78 100644 --- a/examples/react/class-component-ts/yarn.lock +++ b/examples/react/class-component-ts/yarn.lock @@ -3,16 +3,16 @@ "@agile-ts/api@file:.yalc/@agile-ts/api": - version "0.0.9" + version "0.0.14" "@agile-ts/core@file:.yalc/@agile-ts/core": - version "0.0.9" + version "0.0.13" "@agile-ts/multieditor@file:.yalc/@agile-ts/multieditor": - version "0.0.9" + version "0.0.13" "@agile-ts/react@file:.yalc/@agile-ts/react": - version "0.0.9" + version "0.0.14" "@babel/code-frame@7.8.3": version "7.8.3" diff --git a/examples/react/functional-component-ts/src/App.tsx b/examples/react/functional-component-ts/src/App.tsx index 229611ef..5e49dc95 100644 --- a/examples/react/functional-component-ts/src/App.tsx +++ b/examples/react/functional-component-ts/src/App.tsx @@ -35,7 +35,7 @@ const App = (props: any) => { MY_COLLECTION.getSelector('mySelector'), MY_STATE_3, undefined, - MY_COLLECTION as any, + MY_COLLECTION, ]); const [myGroup] = useAgile([MY_COLLECTION.getGroupWithReference('myGroup')]); diff --git a/packages/react/src/hocs/AgileHOC.ts b/packages/react/src/hocs/AgileHOC.ts index 6a004b4b..aedd49eb 100644 --- a/packages/react/src/hocs/AgileHOC.ts +++ b/packages/react/src/hocs/AgileHOC.ts @@ -255,7 +255,11 @@ export class AgileReactComponent extends React.Component { } } -type SubscribableAgileInstancesType = State | Collection | Observer | undefined; +type SubscribableAgileInstancesType = + | State + | Collection //https://stackoverflow.com/questions/66987727/type-classa-id-number-name-string-is-not-assignable-to-type-classar + | Observer + | undefined; type DepsType = | Array | { [key: string]: SubscribableAgileInstancesType } From 3e135015e1f5989708951955357eb57831ba9407 Mon Sep 17 00:00:00 2001 From: Benno Kohrs Date: Wed, 7 Apr 2021 19:22:50 +0200 Subject: [PATCH 5/5] updated module in tsconfig --- packages/tsconfig.default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tsconfig.default.json b/packages/tsconfig.default.json index c5925f97..3983ee02 100644 --- a/packages/tsconfig.default.json +++ b/packages/tsconfig.default.json @@ -5,7 +5,7 @@ /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */