@journeyapps-labs/reactor-mod-data-browser 2.0.2 → 2.2.0

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.
Files changed (67) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/@types/core/SchemaModelDefinition.d.ts +15 -1
  3. package/dist/@types/core/SchemaModelObject.d.ts +5 -0
  4. package/dist/@types/core/query/Page.d.ts +2 -0
  5. package/dist/@types/core/query/SimpleQuery.d.ts +4 -8
  6. package/dist/@types/core/query/filters.d.ts +17 -0
  7. package/dist/@types/core/query/widgets/BelongsToDisplayWidget.d.ts +14 -0
  8. package/dist/@types/core/query/widgets/CellDisplayWidget.d.ts +9 -0
  9. package/dist/@types/core/query/widgets/ColumnDisplayWidget.d.ts +5 -0
  10. package/dist/@types/core/query/widgets/SmartColumnWidget.d.ts +9 -0
  11. package/dist/@types/core/query/widgets/SmartFilterWidget.d.ts +9 -0
  12. package/dist/@types/forms/inputs/LocationInput.d.ts +13 -0
  13. package/dist/DataBrowserModule.js +1 -1
  14. package/dist/DataBrowserModule.js.map +1 -1
  15. package/dist/core/SchemaModelDefinition.js +56 -2
  16. package/dist/core/SchemaModelDefinition.js.map +1 -1
  17. package/dist/core/SchemaModelObject.js +72 -11
  18. package/dist/core/SchemaModelObject.js.map +1 -1
  19. package/dist/core/query/Page.js +5 -1
  20. package/dist/core/query/Page.js.map +1 -1
  21. package/dist/core/query/SimpleQuery.js +49 -83
  22. package/dist/core/query/SimpleQuery.js.map +1 -1
  23. package/dist/core/query/filters.js +17 -0
  24. package/dist/core/query/filters.js.map +1 -0
  25. package/dist/core/query/widgets/BelongsToDisplayWidget.js +70 -0
  26. package/dist/core/query/widgets/BelongsToDisplayWidget.js.map +1 -0
  27. package/dist/core/query/widgets/CellDisplayWidget.js +92 -0
  28. package/dist/core/query/widgets/CellDisplayWidget.js.map +1 -0
  29. package/dist/core/query/widgets/ColumnDisplayWidget.js +22 -0
  30. package/dist/core/query/widgets/ColumnDisplayWidget.js.map +1 -0
  31. package/dist/core/query/widgets/SmartColumnWidget.js +19 -0
  32. package/dist/core/query/widgets/SmartColumnWidget.js.map +1 -0
  33. package/dist/core/query/widgets/SmartFilterWidget.js +56 -0
  34. package/dist/core/query/widgets/SmartFilterWidget.js.map +1 -0
  35. package/dist/forms/SchemaModelForm.js +26 -11
  36. package/dist/forms/SchemaModelForm.js.map +1 -1
  37. package/dist/forms/inputs/LocationInput.js +74 -0
  38. package/dist/forms/inputs/LocationInput.js.map +1 -0
  39. package/dist/panels/model/ModelPanelFactory.js +1 -1
  40. package/dist/panels/model/ModelPanelFactory.js.map +1 -1
  41. package/dist/panels/model/ModelPanelWidget.js +21 -3
  42. package/dist/panels/model/ModelPanelWidget.js.map +1 -1
  43. package/dist/panels/query/QueryPanelWidget.js +6 -3
  44. package/dist/panels/query/QueryPanelWidget.js.map +1 -1
  45. package/dist/panels/query/TableControlsWidget.js +3 -3
  46. package/dist/panels/query/TableControlsWidget.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/dist-module/bundle.js +44 -7
  49. package/dist-module/bundle.js.map +1 -1
  50. package/package.json +7 -5
  51. package/src/DataBrowserModule.ts +1 -1
  52. package/src/core/SchemaModelDefinition.ts +70 -3
  53. package/src/core/SchemaModelObject.ts +52 -2
  54. package/src/core/query/Page.ts +9 -1
  55. package/src/core/query/SimpleQuery.tsx +62 -111
  56. package/src/core/query/filters.ts +30 -0
  57. package/src/core/query/widgets/BelongsToDisplayWidget.tsx +107 -0
  58. package/src/core/query/widgets/CellDisplayWidget.tsx +122 -0
  59. package/src/core/query/widgets/ColumnDisplayWidget.tsx +27 -0
  60. package/src/core/query/widgets/SmartColumnWidget.tsx +30 -0
  61. package/src/core/query/widgets/SmartFilterWidget.tsx +80 -0
  62. package/src/forms/SchemaModelForm.tsx +28 -9
  63. package/src/forms/inputs/LocationInput.tsx +104 -0
  64. package/src/panels/model/ModelPanelFactory.tsx +1 -1
  65. package/src/panels/model/ModelPanelWidget.tsx +37 -3
  66. package/src/panels/query/QueryPanelWidget.tsx +6 -3
  67. package/src/panels/query/TableControlsWidget.tsx +4 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @journeyapps-labs/reactor-mod-data-browser
2
2
 
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 12e5f6a: - Add support for filters
8
+ - Fix relationship belongs_to loading
9
+ - Display column headings with width based on heurestics
10
+
11
+ ### Patch Changes
12
+
13
+ - 687468b: - Improve relationship loading
14
+ - Dont block kernel init with connection store
15
+
16
+ ## 2.1.0
17
+
18
+ ### Minor Changes
19
+
20
+ - 8cc96ec: - displays media directly inside Sector
21
+ - add media input fields to form editing
22
+ - status bar for schema model editing
23
+ - make query reload button show load status
24
+ - Add support for Locations
25
+ - Pull in Reactor changes: Version Packages reactor#36
26
+ - bf70874: Add support for loading relationships with smart paralell limits
27
+
3
28
  ## 2.0.2
4
29
 
5
30
  ### Patch Changes
@@ -3,13 +3,27 @@ import { ObjectType } from '@journeyapps/parser-schema';
3
3
  import { Collection } from '@journeyapps/db';
4
4
  import { SchemaModelObject } from './SchemaModelObject';
5
5
  import { LifecycleModel } from '@journeyapps-labs/lib-reactor-data-layer';
6
+ import { BaseObserver } from '@journeyapps-labs/common-utils';
7
+ import { QueueObject } from 'async';
8
+ export interface SchemaModelDefinitionListener {
9
+ resolved: (event: {
10
+ object: SchemaModelObject;
11
+ }) => any;
12
+ failed: (event: {
13
+ object_id: string;
14
+ }) => any;
15
+ }
6
16
  export interface SchemaModelDefinitionOptions {
7
17
  connection: AbstractConnection;
8
18
  definition: ObjectType;
9
19
  }
10
- export declare class SchemaModelDefinition implements LifecycleModel<ObjectType> {
20
+ export declare class SchemaModelDefinition extends BaseObserver<SchemaModelDefinitionListener> implements LifecycleModel<ObjectType> {
11
21
  protected options: SchemaModelDefinitionOptions;
22
+ cache: Map<string, SchemaModelObject>;
23
+ queue: QueueObject<string>;
24
+ enqueued: Set<string>;
12
25
  constructor(options: SchemaModelDefinitionOptions);
26
+ resolve(id: string): Promise<SchemaModelObject | null>;
13
27
  get key(): string;
14
28
  dispose(): void;
15
29
  patch(data: ObjectType): void;
@@ -1,12 +1,17 @@
1
1
  import { DatabaseObject } from '@journeyapps/db';
2
2
  import { SchemaModelDefinition } from './SchemaModelDefinition';
3
+ import { AbstractMedia, MediaEngine } from '@journeyapps-labs/reactor-mod';
3
4
  export interface SchemaModelObjectOptions {
4
5
  definition: SchemaModelDefinition;
5
6
  model?: DatabaseObject;
6
7
  }
7
8
  export declare class SchemaModelObject {
8
9
  options: SchemaModelObjectOptions;
10
+ accessor mediaEngine: MediaEngine;
11
+ private _mediaCache;
9
12
  constructor(options: SchemaModelObjectOptions);
10
13
  get definition(): SchemaModelDefinition;
11
14
  get model(): DatabaseObject;
15
+ displayValue(): Promise<string>;
16
+ getMedia(field: string): Promise<AbstractMedia<import("@journeyapps-labs/reactor-mod").AbstractMediaOptions>>;
12
17
  }
@@ -2,6 +2,7 @@ import { SchemaModelObject } from '../SchemaModelObject';
2
2
  import { TableRow } from '@journeyapps-labs/reactor-mod';
3
3
  import { Collection, DatabaseObject } from '@journeyapps/db';
4
4
  import { SchemaModelDefinition } from '../SchemaModelDefinition';
5
+ import { AbstractFilter } from './filters';
5
6
  export interface PageRow extends TableRow {
6
7
  model: SchemaModelObject;
7
8
  definition: SchemaModelDefinition;
@@ -12,6 +13,7 @@ export interface PageOptions {
12
13
  limit: number;
13
14
  definition: SchemaModelDefinition;
14
15
  index: number;
16
+ filters: AbstractFilter[];
15
17
  }
16
18
  export declare class Page {
17
19
  protected options: PageOptions;
@@ -2,10 +2,10 @@ import { AbstractQuery, AbstractQueryEncoded } from './AbstractQuery';
2
2
  import { TableColumn } from '@journeyapps-labs/reactor-mod';
3
3
  import { ConnectionStore } from '../../stores/ConnectionStore';
4
4
  import * as db from '@journeyapps/db';
5
- import { Promise } from '@journeyapps/db';
6
- import { Page, PageRow } from './Page';
5
+ import { Promise, Variable } from '@journeyapps/db';
6
+ import { Page } from './Page';
7
7
  import { SchemaModelDefinition } from '../SchemaModelDefinition';
8
- import * as React from 'react';
8
+ import { SimpleFilter } from './filters';
9
9
  export interface SimpleQueryOptions {
10
10
  definition?: SchemaModelDefinition;
11
11
  limit?: number;
@@ -19,6 +19,7 @@ export declare class SimpleQuery extends AbstractQuery<SimpleQueryEncoded> {
19
19
  accessor connStore: ConnectionStore;
20
20
  accessor _totalPages: number;
21
21
  accessor _pages: Page[];
22
+ simple_filters: Map<Variable, SimpleFilter>;
22
23
  constructor(options?: SimpleQueryOptions);
23
24
  getCollection(): globalThis.Promise<db.database.Collection<db.database.DatabaseObject>>;
24
25
  load(): globalThis.Promise<void>;
@@ -29,8 +30,3 @@ export declare class SimpleQuery extends AbstractQuery<SimpleQueryEncoded> {
29
30
  getColumns(): TableColumn[];
30
31
  getSimpleName(): string;
31
32
  }
32
- export interface CellDisplayWidgetProps {
33
- row: PageRow;
34
- cell: any;
35
- }
36
- export declare const CellDisplayWidget: React.FC<CellDisplayWidgetProps>;
@@ -0,0 +1,17 @@
1
+ import { Query, Variable } from '@journeyapps/db';
2
+ export declare abstract class AbstractFilter {
3
+ abstract augment(query: Query): any;
4
+ }
5
+ export declare enum Condition {
6
+ EQUALS = "="
7
+ }
8
+ export interface Statement {
9
+ condition: Condition;
10
+ arg: any;
11
+ }
12
+ export declare class SimpleFilter extends AbstractFilter {
13
+ variable: Variable;
14
+ statements: Statement[];
15
+ constructor(variable: Variable, statements: Statement[]);
16
+ augment(query: Query): Query<import("@journeyapps/db").DatabaseObject>;
17
+ }
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { SchemaModelObject } from '../../SchemaModelObject';
3
+ import { AbstractConnection } from '../../AbstractConnection';
4
+ import { Relationship } from '@journeyapps/parser-schema';
5
+ export interface BelongsToDisplayWidgetProps {
6
+ relationship: Relationship;
7
+ id: string;
8
+ connection: AbstractConnection;
9
+ open: (object: SchemaModelObject) => any;
10
+ }
11
+ export declare const BelongsToDisplayWidget: React.FC<BelongsToDisplayWidgetProps>;
12
+ export declare const BelongsToStringWidget: React.FC<{
13
+ model: SchemaModelObject;
14
+ }>;
@@ -0,0 +1,9 @@
1
+ import { Variable } from '@journeyapps/db';
2
+ import * as React from 'react';
3
+ import { PageRow } from '../Page';
4
+ export interface CellDisplayWidgetProps {
5
+ row: PageRow;
6
+ cell: any;
7
+ variable: Variable;
8
+ }
9
+ export declare const CellDisplayWidget: React.FC<CellDisplayWidgetProps>;
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ export interface ColumnDisplayWidgetProps {
3
+ label: string;
4
+ }
5
+ export declare const ColumnDisplayWidget: React.FC<ColumnDisplayWidgetProps>;
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { Variable } from '@journeyapps/db';
3
+ import { SimpleFilter } from '../filters';
4
+ export interface SmartColumnWidgetProps {
5
+ variable: Variable;
6
+ filter?: SimpleFilter;
7
+ filterChanged: (filter: SimpleFilter | null) => any;
8
+ }
9
+ export declare const SmartColumnWidget: React.FC<SmartColumnWidgetProps>;
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { Variable } from '@journeyapps/db';
3
+ import { SimpleFilter } from '../filters';
4
+ export interface SmartFilterWidgetProps {
5
+ variable: Variable;
6
+ filter?: SimpleFilter;
7
+ filterChanged: (filter: SimpleFilter | null) => any;
8
+ }
9
+ export declare const SmartFilterWidget: React.FC<SmartFilterWidgetProps>;
@@ -0,0 +1,13 @@
1
+ import { FormInput, FormInputGenerics, FormInputOptions, FormInputRenderOptions, NumberInput } from '@journeyapps-labs/reactor-mod';
2
+ import * as React from 'react';
3
+ import { Location } from '@journeyapps/db';
4
+ export declare class LocationInput extends FormInput<FormInputGenerics & {
5
+ VALUE: Location;
6
+ }> {
7
+ latitude: NumberInput;
8
+ longitude: NumberInput;
9
+ constructor(options: FormInputOptions<Location>);
10
+ setValue(value: Location): void;
11
+ update(): void;
12
+ renderControl(options: FormInputRenderOptions): React.JSX.Element;
13
+ }
@@ -39,7 +39,7 @@ export class DataBrowserModule extends AbstractReactorModule {
39
39
  workspaceStore.registerFactory(new ModelPanelFactory());
40
40
  }
41
41
  async init(ioc) {
42
- await ioc.get(ConnectionStore).init();
42
+ ioc.get(ConnectionStore).init();
43
43
  }
44
44
  }
45
45
  //# sourceMappingURL=DataBrowserModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataBrowserModule.js","sourceRoot":"","sources":["../src/DataBrowserModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,qCAAqC,EAAE,MAAM,kDAAkD,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAC1D;QACE,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,GAAc;QACrB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE/C,IAAI,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE5C,eAAe,CAAC,yBAAyB,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;QAEzE,MAAM,CAAC,cAAc,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,cAAc,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAEnD,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QAElD,MAAM,CAAC,kBAAkB,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,kBAAkB,CAAC,IAAI,iCAAiC,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,kBAAkB,CAAC,IAAI,qCAAqC,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,kBAAkB,CAAC,IAAI,iCAAiC,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,kBAAkB,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAEvD,cAAc,CAAC,eAAe,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACxD,cAAc,CAAC,eAAe,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAc;QACvB,MAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"DataBrowserModule.js","sourceRoot":"","sources":["../src/DataBrowserModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,qCAAqC,EAAE,MAAM,kDAAkD,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAC1D;QACE,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,GAAc;QACrB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE/C,IAAI,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE5C,eAAe,CAAC,yBAAyB,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;QAEzE,MAAM,CAAC,cAAc,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,cAAc,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAEnD,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QAElD,MAAM,CAAC,kBAAkB,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,kBAAkB,CAAC,IAAI,iCAAiC,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,kBAAkB,CAAC,IAAI,qCAAqC,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,kBAAkB,CAAC,IAAI,iCAAiC,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,kBAAkB,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QAEvD,cAAc,CAAC,eAAe,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACxD,cAAc,CAAC,eAAe,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAc;QACvB,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -1,12 +1,66 @@
1
1
  import { SchemaModelObject } from './SchemaModelObject';
2
- export class SchemaModelDefinition {
2
+ import { BaseObserver } from '@journeyapps-labs/common-utils';
3
+ import { queue } from 'async';
4
+ export class SchemaModelDefinition extends BaseObserver {
3
5
  constructor(options) {
6
+ super();
4
7
  this.options = options;
8
+ this.cache = new Map();
9
+ this.enqueued = new Set();
10
+ this.queue = queue(async (id) => {
11
+ let collection = await this.getCollection();
12
+ try {
13
+ let model = await collection.first(id);
14
+ if (model) {
15
+ let object = new SchemaModelObject({
16
+ model,
17
+ definition: this
18
+ });
19
+ this.cache.set(id, object);
20
+ this.enqueued.delete(id);
21
+ this.iterateListeners((cb) => { var _a; return (_a = cb.resolved) === null || _a === void 0 ? void 0 : _a.call(cb, { object }); });
22
+ }
23
+ else {
24
+ this.iterateListeners((cb) => { var _a; return (_a = cb.failed) === null || _a === void 0 ? void 0 : _a.call(cb, { object_id: id }); });
25
+ }
26
+ }
27
+ catch (ex) {
28
+ this.iterateListeners((cb) => { var _a; return (_a = cb.failed) === null || _a === void 0 ? void 0 : _a.call(cb, { object_id: id }); });
29
+ throw ex;
30
+ }
31
+ }, 6);
32
+ }
33
+ async resolve(id) {
34
+ if (this.cache.has(id)) {
35
+ return this.cache.get(id);
36
+ }
37
+ if (!this.enqueued.has(id)) {
38
+ this.enqueued.add(id);
39
+ this.queue.push(id);
40
+ }
41
+ return await new Promise((resolve) => {
42
+ let l1 = this.registerListener({
43
+ resolved: ({ object }) => {
44
+ if (object.model.id === id) {
45
+ l1();
46
+ resolve(object);
47
+ }
48
+ },
49
+ failed: ({ object_id }) => {
50
+ if (object_id === id) {
51
+ l1();
52
+ resolve(null);
53
+ }
54
+ }
55
+ });
56
+ });
5
57
  }
6
58
  get key() {
7
59
  return this.definition.name;
8
60
  }
9
- dispose() { }
61
+ dispose() {
62
+ this.queue.kill();
63
+ }
10
64
  patch(data) {
11
65
  this.options.definition = data;
12
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaModelDefinition.js","sourceRoot":"","sources":["../../src/core/SchemaModelDefinition.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,MAAM,OAAO,qBAAqB;IAChC,YAAsB,OAAqC;QAArC,YAAO,GAAP,OAAO,CAA8B;IAAG,CAAC;IAE/D,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO,KAAI,CAAC;IAEZ,KAAK,CAAC,IAAgB;QACpB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAe,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAO,IAAI,iBAAiB,CAAC;YAC3B,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"SchemaModelDefinition.js","sourceRoot":"","sources":["../../src/core/SchemaModelDefinition.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,73 @@
1
- export class SchemaModelObject {
2
- constructor(options) {
3
- this.options = options;
4
- }
5
- get definition() {
6
- return this.options.definition;
7
- }
8
- get model() {
9
- return this.options.model;
10
- }
11
- }
1
+ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers } from "tslib";
2
+ import { inject, MediaEngine } from '@journeyapps-labs/reactor-mod';
3
+ let SchemaModelObject = (() => {
4
+ var _a, _SchemaModelObject_mediaEngine_accessor_storage;
5
+ let _mediaEngine_decorators;
6
+ let _mediaEngine_initializers = [];
7
+ let _mediaEngine_extraInitializers = [];
8
+ return _a = class SchemaModelObject {
9
+ get mediaEngine() { return __classPrivateFieldGet(this, _SchemaModelObject_mediaEngine_accessor_storage, "f"); }
10
+ set mediaEngine(value) { __classPrivateFieldSet(this, _SchemaModelObject_mediaEngine_accessor_storage, value, "f"); }
11
+ constructor(options) {
12
+ this.options = options;
13
+ _SchemaModelObject_mediaEngine_accessor_storage.set(this, __runInitializers(this, _mediaEngine_initializers, void 0));
14
+ this._mediaCache = __runInitializers(this, _mediaEngine_extraInitializers);
15
+ this._mediaCache = new Map();
16
+ }
17
+ get definition() {
18
+ return this.options.definition;
19
+ }
20
+ get model() {
21
+ return this.options.model;
22
+ }
23
+ async displayValue() {
24
+ if (!this.model) {
25
+ return null;
26
+ }
27
+ let val = this.model.toString();
28
+ if (val) {
29
+ return val;
30
+ }
31
+ /*
32
+ there are scenarios where the FormatStringScope has not yet completed setting up its state +
33
+ parsing the format string directive. We therefore poll for a bit until we get the value. Ideally
34
+ we need a better way to determine when the scope is ready, but could not find one yet.
35
+ */
36
+ for (let i = 0; i < 10; i++) {
37
+ await new Promise((resolve) => setTimeout(resolve, 40));
38
+ let val = this.model.toString();
39
+ if (val) {
40
+ return val;
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ async getMedia(field) {
46
+ if (this._mediaCache.has(field)) {
47
+ return this._mediaCache.get(field);
48
+ }
49
+ let media = this.model[field];
50
+ if (!(media === null || media === void 0 ? void 0 : media.uploaded())) {
51
+ return null;
52
+ }
53
+ let url = new URL(media.url());
54
+ let mediaObject = this.mediaEngine.getMediaTypeForPath(url.pathname).generateMedia({
55
+ content: await media.toArrayBuffer(),
56
+ name: media.id,
57
+ uid: media.id
58
+ });
59
+ this._mediaCache.set(field, mediaObject);
60
+ return mediaObject;
61
+ }
62
+ },
63
+ _SchemaModelObject_mediaEngine_accessor_storage = new WeakMap(),
64
+ (() => {
65
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
66
+ _mediaEngine_decorators = [inject(MediaEngine)];
67
+ __esDecorate(_a, null, _mediaEngine_decorators, { kind: "accessor", name: "mediaEngine", static: false, private: false, access: { has: obj => "mediaEngine" in obj, get: obj => obj.mediaEngine, set: (obj, value) => { obj.mediaEngine = value; } }, metadata: _metadata }, _mediaEngine_initializers, _mediaEngine_extraInitializers);
68
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
69
+ })(),
70
+ _a;
71
+ })();
72
+ export { SchemaModelObject };
12
73
  //# sourceMappingURL=SchemaModelObject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaModelObject.js","sourceRoot":"","sources":["../../src/core/SchemaModelObject.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,iBAAiB;IAC5B,YAAmB,OAAiC;QAAjC,YAAO,GAAP,OAAO,CAA0B;IAAG,CAAC;IAExD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"SchemaModelObject.js","sourceRoot":"","sources":["../../src/core/SchemaModelObject.ts"],"names":[],"mappings":";AAEA,OAAO,EAAiB,MAAM,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;IAOtE,iBAAiB;;;;;sBAAjB,iBAAiB;YAE5B,IAAS,WAAW,iGAAc;YAAlC,IAAS,WAAW,sGAAc;YAIlC,YAAmB,OAAiC;gBAAjC,YAAO,GAAP,OAAO,CAA0B;gBAJ3C,sHAAyB;gBAE1B,gBAAW,2DAA6B;gBAG9C,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;YAC/B,CAAC;YAED,IAAI,UAAU;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACjC,CAAC;YAED,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,CAAC;YAED,KAAK,CAAC,YAAY;gBAChB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChC,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD;;;;mBAIG;gBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAChC,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,GAAG,CAAC;oBACb,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,KAAK,CAAC,QAAQ,CAAC,KAAa;gBAC1B,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAgB,CAAC;gBAC7C,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,CAAA,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/B,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC;oBACjF,OAAO,EAAE,MAAM,KAAK,CAAC,aAAa,EAAE;oBACpC,IAAI,EAAE,KAAK,CAAC,EAAE;oBACd,GAAG,EAAE,KAAK,CAAC,EAAE;iBACd,CAAC,CAAC;gBAEH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACzC,OAAO,WAAW,CAAC;YACrB,CAAC;;;;;uCAzDA,MAAM,CAAC,WAAW,CAAC;YACpB,oLAAS,WAAW,6BAAX,WAAW,iGAAc;;;;;SAFvB,iBAAiB"}
@@ -29,7 +29,11 @@ let Page = (() => {
29
29
  async load() {
30
30
  this.loading = true;
31
31
  let collection = await this.options.collection();
32
- let models = await collection.all().limit(this.options.limit).skip(this.options.offset).toArray();
32
+ let query = collection.all();
33
+ this.options.filters.forEach((f) => {
34
+ query = f.augment(query);
35
+ });
36
+ let models = await query.limit(this.options.limit).skip(this.options.offset).toArray();
33
37
  this.models = models.map((m) => {
34
38
  return new SchemaModelObject({
35
39
  definition: this.options.definition,
@@ -1 +1 @@
1
- {"version":3,"file":"Page.js","sourceRoot":"","sources":["../../../src/core/query/Page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;IAgBrB,IAAI;;;;;;;;sBAAJ,IAAI;YAEf,IAAS,MAAM,+EAAsB;YAArC,IAAS,MAAM,oFAAsB;YAGrC,IAAS,OAAO,gFAAU;YAA1B,IAAS,OAAO,qFAAU;YAE1B,YAAsB,OAAoB;gBAApB,YAAO,GAAP,OAAO,CAAa;gBALjC,+FAA4B;gBAG5B,uJAAiB;;gBAEJ,YAAO,GAAP,OAAO,CAAa;gBACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;aAClB;YAED,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,CAAC;YAED,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACjD,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;gBAClG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7B,OAAO,IAAI,iBAAiB,CAAC;wBAC3B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;wBACnC,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,CAAC;YAED,MAAM;gBACJ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC3B,OAAO;wBACL,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;wBACf,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;wBACnC,KAAK,EAAE,CAAC;qBACT,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;;;;;;kCArCA,UAAU;mCAGV,UAAU;YAFX,qKAAS,MAAM,6BAAN,MAAM,uFAAsB;YAGrC,wKAAS,OAAO,6BAAP,OAAO,yFAAU;;;;;SALf,IAAI"}
1
+ {"version":3,"file":"Page.js","sourceRoot":"","sources":["../../../src/core/query/Page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;IAkBrB,IAAI;;;;;;;;sBAAJ,IAAI;YAEf,IAAS,MAAM,+EAAsB;YAArC,IAAS,MAAM,oFAAsB;YAGrC,IAAS,OAAO,gFAAU;YAA1B,IAAS,OAAO,qFAAU;YAE1B,YAAsB,OAAoB;gBAApB,YAAO,GAAP,OAAO,CAAa;gBALjC,+FAA4B;gBAG5B,uJAAiB;;gBAEJ,YAAO,GAAP,OAAO,CAAa;gBACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;aAClB;YAED,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,CAAC;YAED,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACjD,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;gBAE7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;gBAEH,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;gBACvF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7B,OAAO,IAAI,iBAAiB,CAAC;wBAC3B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;wBACnC,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,CAAC;YAED,MAAM;gBACJ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC3B,OAAO;wBACL,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;wBACf,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;wBACnC,KAAK,EAAE,CAAC;qBACT,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;;;;;;kCA3CA,UAAU;mCAGV,UAAU;YAFX,qKAAS,MAAM,6BAAN,MAAM,uFAAsB;YAGrC,wKAAS,OAAO,6BAAP,OAAO,yFAAU;;;;;SALf,IAAI"}
@@ -1,15 +1,19 @@
1
1
  import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers } from "tslib";
2
2
  import { AbstractQuery } from './AbstractQuery';
3
- import { CheckboxWidget, inject, MetadataWidget, SmartDateDisplayWidget, styled } from '@journeyapps-labs/reactor-mod';
3
+ import { ActionSource, inject } from '@journeyapps-labs/reactor-mod';
4
4
  import { ConnectionStore } from '../../stores/ConnectionStore';
5
- import { Attachment, Day, Location } from '@journeyapps/db';
6
5
  import { Page } from './Page';
7
6
  import * as _ from 'lodash';
8
7
  import * as React from 'react';
9
- import { observable } from 'mobx';
8
+ import { action, observable } from 'mobx';
9
+ import { CellDisplayWidget } from './widgets/CellDisplayWidget';
10
+ import { BelongsToDisplayWidget } from './widgets/BelongsToDisplayWidget';
11
+ import { EditSchemaModelAction } from '../../actions/schema-model/EditSchemaModelAction';
12
+ import { SmartColumnWidget } from './widgets/SmartColumnWidget';
10
13
  let SimpleQuery = (() => {
11
14
  var _a, _SimpleQuery_connStore_accessor_storage, _SimpleQuery__totalPages_accessor_storage, _SimpleQuery__pages_accessor_storage;
12
15
  let _classSuper = AbstractQuery;
16
+ let _instanceExtraInitializers = [];
13
17
  let _connStore_decorators;
14
18
  let _connStore_initializers = [];
15
19
  let _connStore_extraInitializers = [];
@@ -19,6 +23,7 @@ let SimpleQuery = (() => {
19
23
  let __pages_decorators;
20
24
  let __pages_initializers = [];
21
25
  let __pages_extraInitializers = [];
26
+ let _load_decorators;
22
27
  return _a = class SimpleQuery extends _classSuper {
23
28
  get connStore() { return __classPrivateFieldGet(this, _SimpleQuery_connStore_accessor_storage, "f"); }
24
29
  set connStore(value) { __classPrivateFieldSet(this, _SimpleQuery_connStore_accessor_storage, value, "f"); }
@@ -29,22 +34,27 @@ let SimpleQuery = (() => {
29
34
  constructor(options = {}) {
30
35
  var _b;
31
36
  super('simple', (_b = options.definition) === null || _b === void 0 ? void 0 : _b.connection);
32
- this.options = options;
37
+ this.options = (__runInitializers(this, _instanceExtraInitializers), options);
33
38
  _SimpleQuery_connStore_accessor_storage.set(this, __runInitializers(this, _connStore_initializers, void 0));
34
39
  _SimpleQuery__totalPages_accessor_storage.set(this, (__runInitializers(this, _connStore_extraInitializers), __runInitializers(this, __totalPages_initializers, void 0)));
35
40
  _SimpleQuery__pages_accessor_storage.set(this, (__runInitializers(this, __totalPages_extraInitializers), __runInitializers(this, __pages_initializers, void 0)));
36
- __runInitializers(this, __pages_extraInitializers);
37
- this.options = options;
41
+ this.simple_filters = __runInitializers(this, __pages_extraInitializers);
38
42
  this._totalPages = 0;
39
43
  this._pages = [];
44
+ this.simple_filters = new Map();
40
45
  }
41
46
  async getCollection() {
42
47
  let connection = await this.connection.getConnection();
43
48
  return connection[this.options.definition.definition.name];
44
49
  }
45
50
  async load() {
51
+ this._pages = [];
46
52
  let collection = await this.getCollection();
47
- let results = await collection.adapter.doApiQuery(collection.all());
53
+ let query = collection.all();
54
+ this.simple_filters.forEach((f) => {
55
+ query = f.augment(query);
56
+ });
57
+ let results = await collection.adapter.doApiQuery(query);
48
58
  this._totalPages = Math.ceil(results.total / this.options.limit);
49
59
  }
50
60
  getPage(number) {
@@ -54,7 +64,8 @@ let SimpleQuery = (() => {
54
64
  limit: this.options.limit,
55
65
  collection: () => this.getCollection(),
56
66
  definition: this.options.definition,
57
- index: number
67
+ index: number,
68
+ filters: Array.from(this.simple_filters.values())
58
69
  });
59
70
  page.load();
60
71
  this._pages[number] = page;
@@ -80,14 +91,40 @@ let SimpleQuery = (() => {
80
91
  noWrap: true,
81
92
  shrink: true
82
93
  },
94
+ ..._.map(this.options.definition.definition.belongsToIdVars, (a) => {
95
+ return {
96
+ key: a.name,
97
+ display: a.name,
98
+ noWrap: true,
99
+ shrink: true,
100
+ accessor: (cell, row) => {
101
+ return (React.createElement(BelongsToDisplayWidget, { open: (object) => {
102
+ EditSchemaModelAction.get().fireAction({
103
+ source: ActionSource.BUTTON,
104
+ targetEntity: object
105
+ });
106
+ }, relationship: row.model.definition.definition.belongsTo[a.relationship], connection: this.connection, id: row.model.model[a.name] }));
107
+ }
108
+ };
109
+ }),
83
110
  ..._.map(this.options.definition.definition.attributes, (a) => {
111
+ // @ts-ignore FIXME, remove when `display` supports JSX.Element as a type
84
112
  return {
85
113
  key: a.name,
86
- display: a.label,
114
+ display: (React.createElement(SmartColumnWidget, { variable: a, filter: this.simple_filters.get(a), filterChanged: (filter) => {
115
+ if (!filter) {
116
+ this.simple_filters.delete(a);
117
+ this.load();
118
+ }
119
+ else {
120
+ this.simple_filters.set(a, filter);
121
+ this.load();
122
+ }
123
+ } })),
87
124
  noWrap: true,
88
125
  shrink: true,
89
126
  accessor: (cell, row) => {
90
- return React.createElement(CellDisplayWidget, { cell: cell, row: row });
127
+ return React.createElement(CellDisplayWidget, { variable: a, cell: cell, row: row });
91
128
  }
92
129
  };
93
130
  })
@@ -106,85 +143,14 @@ let SimpleQuery = (() => {
106
143
  _connStore_decorators = [inject(ConnectionStore)];
107
144
  __totalPages_decorators = [observable];
108
145
  __pages_decorators = [observable];
146
+ _load_decorators = [action];
109
147
  __esDecorate(_a, null, _connStore_decorators, { kind: "accessor", name: "connStore", static: false, private: false, access: { has: obj => "connStore" in obj, get: obj => obj.connStore, set: (obj, value) => { obj.connStore = value; } }, metadata: _metadata }, _connStore_initializers, _connStore_extraInitializers);
110
148
  __esDecorate(_a, null, __totalPages_decorators, { kind: "accessor", name: "_totalPages", static: false, private: false, access: { has: obj => "_totalPages" in obj, get: obj => obj._totalPages, set: (obj, value) => { obj._totalPages = value; } }, metadata: _metadata }, __totalPages_initializers, __totalPages_extraInitializers);
111
149
  __esDecorate(_a, null, __pages_decorators, { kind: "accessor", name: "_pages", static: false, private: false, access: { has: obj => "_pages" in obj, get: obj => obj._pages, set: (obj, value) => { obj._pages = value; } }, metadata: _metadata }, __pages_initializers, __pages_extraInitializers);
150
+ __esDecorate(_a, null, _load_decorators, { kind: "method", name: "load", static: false, private: false, access: { has: obj => "load" in obj, get: obj => obj.load }, metadata: _metadata }, null, _instanceExtraInitializers);
112
151
  if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
113
152
  })(),
114
153
  _a;
115
154
  })();
116
155
  export { SimpleQuery };
117
- var S;
118
- (function (S) {
119
- S.Empty = styled.div `
120
- opacity: 0.2;
121
- `;
122
- S.Preview = styled.img `
123
- max-height: 40px;
124
- max-width: 40px;
125
- cursor: pointer;
126
- `;
127
- S.pill = styled.div `
128
- padding: 2px 4px;
129
- background: ${(p) => p.theme.table.pills};
130
- border-radius: 3px;
131
- font-size: 12px;
132
- `;
133
- S.Pills = styled.div `
134
- display: flex;
135
- column-gap: 2px;
136
- row-gap: 2px;
137
- `;
138
- })(S || (S = {}));
139
- const MAX_NUMBER_OF_ARR_ITEMS_TO_DISPLAY = 3;
140
- export const CellDisplayWidget = (props) => {
141
- const { row, cell } = props;
142
- if (cell == null) {
143
- return React.createElement(S.Empty, null, "null");
144
- }
145
- if (_.isString(cell)) {
146
- if (cell.trim() === '') {
147
- return React.createElement(S.Empty, null, "empty");
148
- }
149
- return cell;
150
- }
151
- if (_.isNumber(cell)) {
152
- return cell;
153
- }
154
- if (_.isArray(cell)) {
155
- if (cell.length === 0) {
156
- return React.createElement(S.Empty, null, "empty array");
157
- }
158
- let items = _.slice(cell, 0, MAX_NUMBER_OF_ARR_ITEMS_TO_DISPLAY);
159
- return (React.createElement(S.Pills, null,
160
- items.map((c) => {
161
- return React.createElement(S.pill, { key: c }, c);
162
- }),
163
- items.length !== cell.length ? '...' : null));
164
- }
165
- if (cell instanceof Date) {
166
- return React.createElement(SmartDateDisplayWidget, { date: cell });
167
- }
168
- if (cell instanceof Day) {
169
- return React.createElement(SmartDateDisplayWidget, { date: cell.toDate() });
170
- }
171
- if (_.isBoolean(cell)) {
172
- return React.createElement(CheckboxWidget, { checked: cell, onChange: () => { } });
173
- }
174
- if (cell instanceof Location) {
175
- return (React.createElement(React.Fragment, null,
176
- React.createElement(MetadataWidget, { label: 'Lat', value: `${cell.latitude}` }),
177
- React.createElement(MetadataWidget, { label: 'Long', value: `${cell.longitude}` })));
178
- }
179
- if (cell instanceof Attachment) {
180
- if (cell.uploaded()) {
181
- return (React.createElement(S.Preview, { onClick: () => {
182
- window.open(cell.url(), '_blank');
183
- }, src: cell.urls['thumbnail'] }));
184
- }
185
- return React.createElement(S.Empty, null, "Not uploaded");
186
- }
187
- console.log('unknown type', cell);
188
- return null;
189
- };
190
156
  //# sourceMappingURL=SimpleQuery.js.map