swoop-common 2.2.152 → 2.2.153

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.
@@ -1,6 +1,7 @@
1
1
  import "../../type_registration/register";
2
2
  import "../../renderers/Address";
3
3
  import "../../renderers/ComponentPicker";
4
+ import "../../renderers/ComponentPickerArray";
4
5
  import "../../renderers/Debug";
5
6
  import "../../renderers/Example";
6
7
  import "../../renderers/Image/ImageForm";
@@ -3,6 +3,7 @@ import "../../type_registration/register";
3
3
  // Custom component renderers
4
4
  import "../../renderers/Address";
5
5
  import "../../renderers/ComponentPicker";
6
+ import "../../renderers/ComponentPickerArray";
6
7
  import "../../renderers/Debug";
7
8
  import "../../renderers/Example";
8
9
  import "../../renderers/Image/ImageForm";
@@ -1,4 +1,13 @@
1
+ import React from "react";
1
2
  import { DTOComponentRead } from "../../api/generated/core/exports";
3
+ export declare const FormComponentPicker: React.FC<{
4
+ selectedComponent: string | null;
5
+ onChange: (componentId: string | null) => void;
6
+ templateIds: string[];
7
+ getError?: (field: string) => any;
8
+ label: string;
9
+ enabled: boolean;
10
+ }>;
2
11
  export declare const fetchComponents: () => Promise<{
3
12
  data: {
4
13
  revisions: DTOComponentRead[];
@@ -15,7 +15,7 @@ import { registerComponent } from "../registry/components";
15
15
  import { CoreService } from "../../api/generated/core";
16
16
  import { useComponentPicker } from "../contexts/ComponentPickerContext";
17
17
  import { InternalServices } from "../../api/init";
18
- const FormComponentPicker = ({ selectedComponent, onChange, templateIds, getError, label, enabled, }) => {
18
+ export const FormComponentPicker = ({ selectedComponent, onChange, templateIds, getError, label, enabled, }) => {
19
19
  const [selected, setSelected] = useState();
20
20
  const { get } = useComponentPicker();
21
21
  useEffect(() => {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ import { resolveSchema } from "@jsonforms/core";
2
+ import React from "react";
3
+ import { Box, Button, IconButton } from "@mui/material";
4
+ import DeleteIcon from "@mui/icons-material/Delete";
5
+ import { ComponentPool } from "../registry/types";
6
+ import { registerComponent } from "../registry/components";
7
+ import { getXType } from "../util/xtype";
8
+ import { FormComponentPicker } from "./ComponentPicker";
9
+ // Matches arrays whose items have x-type: "component"
10
+ // Rank 11 — beats isXType (10) and material array controls
11
+ const componentPickerArrayTester = (uischema, schema) => {
12
+ const ui = uischema;
13
+ if (!ui.scope)
14
+ return -1;
15
+ const scoped = resolveSchema(schema, ui.scope, schema);
16
+ if (!scoped || scoped.type !== "array")
17
+ return -1;
18
+ const items = scoped.items;
19
+ if (!items || getXType(items) !== "component")
20
+ return -1;
21
+ return 11;
22
+ };
23
+ const FormRendererComponentPickerArray = ({ data, handleChange, path, schema, label, enabled, }) => {
24
+ var _a, _b;
25
+ const items = (Array.isArray(data) ? data : []);
26
+ const templateIds = (_b = (_a = schema.items) === null || _a === void 0 ? void 0 : _a["x-templateIds"]) !== null && _b !== void 0 ? _b : [];
27
+ const handleItemChange = (index, value) => {
28
+ const next = [...items];
29
+ next[index] = value;
30
+ handleChange(path, next);
31
+ };
32
+ const addItem = () => handleChange(path, [...items, null]);
33
+ const removeItem = (index) => handleChange(path, items.filter((_, i) => i !== index));
34
+ return (React.createElement(Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } },
35
+ items.map((item, index) => (React.createElement(Box, { key: index, sx: { display: "flex", alignItems: "flex-start", gap: 1 } },
36
+ React.createElement(Box, { sx: { flex: 1 } },
37
+ React.createElement(FormComponentPicker, { selectedComponent: typeof item === "string" ? item : null, onChange: (id) => handleItemChange(index, id), templateIds: templateIds, label: label !== null && label !== void 0 ? label : "Component", enabled: enabled !== null && enabled !== void 0 ? enabled : true })),
38
+ React.createElement(IconButton, { onClick: () => removeItem(index), disabled: !(enabled !== null && enabled !== void 0 ? enabled : true) },
39
+ React.createElement(DeleteIcon, null))))),
40
+ React.createElement(Button, { onClick: addItem, disabled: !(enabled !== null && enabled !== void 0 ? enabled : true), variant: "outlined" }, "Add Component")));
41
+ };
42
+ registerComponent("component-array", FormRendererComponentPickerArray, ComponentPool.FORM, componentPickerArrayTester);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swoop-common",
3
- "version": "2.2.152",
3
+ "version": "2.2.153",
4
4
  "main": "dist/api/index.js",
5
5
  "types": "dist/api/index.d.ts",
6
6
  "exports": {