@perspective-dev/workspace 4.1.1 → 4.3.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.
@@ -83,7 +83,7 @@ export declare class PerspectiveWorkspace extends SplitPanel {
83
83
  _maximize(widget: PerspectiveViewerWidget): void;
84
84
  _unmaximize(): void;
85
85
  toggleSingleDocument(widget: PerspectiveViewerWidget): void;
86
- _filterViewer(viewer: HTMLPerspectiveViewerElement, filters: [string, string, string][], candidates: Set<string>): Promise<void>;
86
+ _filterViewer(viewer: HTMLPerspectiveViewerElement, removeFilters: psp.Filter[], insertFilters: psp.Filter[], candidates: Set<string>): Promise<void>;
87
87
  onPerspectiveSelect(event: CustomEvent): Promise<void>;
88
88
  makeMaster(widget: PerspectiveViewerWidget): Promise<void>;
89
89
  makeDetail(widget: PerspectiveViewerWidget): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perspective-dev/workspace",
3
- "version": "4.1.1",
3
+ "version": "4.3.0",
4
4
  "description": "Perspective Workspace",
5
5
  "files": [
6
6
  "dist/**/*",
@@ -41,10 +41,11 @@
41
41
  },
42
42
  "devDependencies": {
43
43
  "@perspective-dev/viewer": "",
44
- "@prospective.co/procss": "0.1.17",
44
+ "@prospective.co/procss": "0.1.18",
45
45
  "@perspective-dev/esbuild-plugin": "",
46
46
  "@perspective-dev/test": "",
47
47
  "@types/lodash": "^4.17.20",
48
+ "@types/react": ">17 <20",
48
49
  "typescript": ">=5 <6",
49
50
  "zx": ">=8 <9"
50
51
  },
@@ -10,7 +10,8 @@
10
10
  // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
11
  // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
12
 
13
- import { HTMLPerspectiveWorkspaceElement } from "./perspective-workspace";
13
+ import type { HTMLPerspectiveWorkspaceElement } from "./perspective-workspace";
14
+ import type * as React from "react";
14
15
 
15
16
  type ReactPerspectiveWorkspaceAttributes<T> = React.HTMLAttributes<T>;
16
17
 
@@ -21,6 +22,8 @@ type JsxPerspectiveWorkspaceElement = {
21
22
  HTMLPerspectiveWorkspaceElement
22
23
  >;
23
24
 
25
+ // React <19
26
+
24
27
  declare global {
25
28
  namespace JSX {
26
29
  interface IntrinsicElements {
@@ -29,6 +32,34 @@ declare global {
29
32
  }
30
33
  }
31
34
 
35
+ // React >=19
36
+
37
+ // @ts-ignore
38
+ declare module "react/jsx-runtime" {
39
+ namespace JSX {
40
+ interface IntrinsicElements {
41
+ "perspective-workspace": JsxPerspectiveWorkspaceElement;
42
+ }
43
+ }
44
+ }
45
+
46
+ // @ts-ignore
47
+ declare module "react/jsx-dev-runtime" {
48
+ namespace JSX {
49
+ interface IntrinsicElements {
50
+ "perspective-workspace": JsxPerspectiveWorkspaceElement;
51
+ }
52
+ }
53
+ }
54
+
55
+ declare module "react" {
56
+ namespace JSX {
57
+ interface IntrinsicElements {
58
+ "perspective-workspace": JsxPerspectiveWorkspaceElement;
59
+ }
60
+ }
61
+ }
62
+
32
63
  // Custom Elements extensions
33
64
 
34
65
  declare global {
@@ -683,20 +683,23 @@ export class PerspectiveWorkspace extends SplitPanel {
683
683
 
684
684
  async _filterViewer(
685
685
  viewer: HTMLPerspectiveViewerElement,
686
- filters: [string, string, string][],
686
+ removeFilters: psp.Filter[],
687
+ insertFilters: psp.Filter[],
687
688
  candidates: Set<string>,
688
689
  ) {
689
690
  const config = await viewer.save();
690
691
  const table = await viewer.getTable();
691
692
  const availableColumns = Object.keys(await table.schema());
692
693
  const currentFilters = config.filter || [];
693
- const columnAvailable = (filter: [string, string, any]) =>
694
+ const columnAvailable = (filter: psp.Filter) =>
694
695
  filter[0] && availableColumns.includes(filter[0]);
695
696
 
696
- const validFilters = filters.filter(columnAvailable);
697
+ const clearColumns = new Set<string>(removeFilters.map((f) => f[0]));
698
+ const validFilters = insertFilters.filter(columnAvailable);
697
699
  validFilters.push(
698
700
  ...currentFilters.filter(
699
- (x: [string, ..._: string[]]) => !candidates.has(x[0]),
701
+ (x: [string, ..._: string[]]) =>
702
+ !candidates.has(x[0]) && !clearColumns.has(x[0]),
700
703
  ),
701
704
  );
702
705
 
@@ -712,14 +715,21 @@ export class PerspectiveWorkspace extends SplitPanel {
712
715
  const candidates = new Set([
713
716
  ...(config["group_by"] || []),
714
717
  ...(config["split_by"] || []),
715
- ...(config.filter || []).map((x: [string, string, any]) => x[0]),
718
+ ...(config.filter || []).map((x: psp.Filter) => x[0]),
716
719
  ]);
717
720
 
718
- const filters = [...event.detail.config.filter];
721
+ const removeFilters = (
722
+ (event.detail.removeConfigs ?? []) as psp.ViewConfigUpdate[]
723
+ ).flatMap((x) => x.filter ?? []);
724
+ const insertFilters = (
725
+ (event.detail.insertConfigs ?? []) as psp.ViewConfigUpdate[]
726
+ ).flatMap((x) => x.filter ?? []);
727
+
719
728
  toArray(this.dockpanel.widgets()).forEach((widget) => {
720
729
  this._filterViewer(
721
730
  (widget as PerspectiveViewerWidget).viewer,
722
- filters,
731
+ removeFilters,
732
+ insertFilters,
723
733
  candidates,
724
734
  );
725
735
  });